#!/usr/bin/perl -w use strict; my $Dateiname=$ARGV[0]; if($Dateiname=~/(.*)\./){ #Endung abschneiden $Dateiname=$1 if (!($1 =~//)); } $Dateiname or die "Dateinamen angeben"; my ($i,$temp); ################################################ #default einstellungen laden # aus $HOME/.guardrc oder /etc/guardrc my $cfgfile= $ENV{"HOME"} . "/.guardrc"; if(!open(F,"< $cfgfile")){ if(open(F,"< /etc/guardrc")){ $cfgfile="/etc/guardrc"; }else{ ################### DUMP personal file system("echo -e \"editor=nedit\\ntime=1\\ngv=gv\\ngvsize=720x800\\ngvpos=500+0\" > $cfgfile"); } } close(F); ############################################# # load settings open(F,"< $cfgfile") or die "cannot load $cfgfile"; my @cfgdate=; my %Settings; close(F); foreach $temp (@cfgdate) { if($temp=~/(.*)=(.*)/){ if (!($1=~//)){ $Settings{"$1"}="$2"; } } } #Pruefen ob Tex-File da ist, ansonsten anlegen if(!(open(F,"< $Dateiname.tex"))){ if(open(F,"< template.tex")){ system("cat 'template.tex'>$Dateiname.tex"); }else{ system("touch $Dateiname.tex"); } }else{ close(F); } system($Settings{"editor"} ." $Dateiname.tex & "); my $IsGV=1; my @DependFiles=&GetDependendies($Dateiname); my $DepAnzahl=$#DependFiles; my @FileData; # enthaelt jeweils letzte Daten der Datei my $MomData; # enthaelt Daten der momentanen Datei my $test=0; print("\nI will looking for following files:"); for($i=0;$i<$DepAnzahl+1;$i++){ print "\n$i $DependFiles[$i]"; $FileData[$i]=''; } my $counter=0; while (1){ $counter++; for($i=0;$i<=$DepAnzahl;$i++){ $MomData=&getfiledata($DependFiles[$i]); if(($MomData cmp $FileData[$i])!=0){ print("\nFile $DependFiles[$i] was modified ($MomData)"); $FileData[$i]=$MomData; $test=1; } } #aller 120 Sekunden mal schauen, ob denn nicht eine neue Datei included wurde. if ($counter>120){ @DependFiles=&GetDependendies($Dateiname); $DepAnzahl=$#DependFiles; $counter=0; } if ($test){#Texlauf starten $test=0; system("echo 'latex now ***********************************************************************************************************'"); $temp="echo \"q\" | pdflatex -interaction=errorstopmode $Dateiname.tex && pdf2ps $Dateiname.pdf $Dateiname.ps && echo -e \"\a\""; system($temp); } #pruefen ob GV schon offen und PS-File da if($IsGV && open(F,"< $Dateiname.ps")){ system($Settings{"gv"} . " -geometry " . $Settings{"gvsize"} . "+" . $Settings{"gvpos"} . " $Dateiname.ps & "); $IsGV=0; } sleep($Settings{"time"}); } ########################################################################################################## #gibt Dependendies zurueck (als Parameter Dateiname) sub GetDependendies{ my $OpenString="< ". $_[0] .".tex"; my @DependFiles; $DependFiles[0]=$_[0].".tex"; open(TEXFILE,$OpenString); my @datei=; my $line; foreach $line (@datei){ if ($line =~ /^[^%].*input{(.*?)}/){ #\input ohne Kommentar $DependFiles[$#DependFiles+1]=$1 ; } if ($line =~ /^[^%].*include{(.*?)}/){ #\include ohne Kommentar $DependFiles[$#DependFiles+1]=$1; } if ($line =~ /^[^%].*includegraphics{(.*?)}/){ #\includegraphics ohne Kommentar $DependFiles[$#DependFiles+1]=$1; } } close(TEXFILE); # in @DependFiles stehen jetzt alle zu ueberwachenden Dateien drin return @DependFiles; #Rueckgabe } sub getfiledata { my $file; my $ret; my @data; $file = $_[0]; @data = stat("$file"); if($data[9]){ $ret = "$data[9],$data[12]"; }else{ # no file -> maybe with .png @data = stat("$file.png"); if($data[9]){ $ret = "$data[9],$data[12]"; }else{ # no file $ret = "no file"; } } }