diff options
-rw-r--r-- | Make.lps | 100 | ||||
-rw-r--r-- | dateibeziehungen.pas | 241 | ||||
-rw-r--r-- | tools.pas | 13 |
3 files changed, 179 insertions, 175 deletions
@@ -9,41 +9,44 @@ <IsPartOfProject Value="True"/> <TopLine Value="19"/> <CursorPos X="55" Y="47"/> - <UsageCount Value="69"/> + <UsageCount Value="70"/> <Loaded Value="True"/> </Unit0> <Unit1> <Filename Value="Machdatei.txt"/> <IsPartOfProject Value="True"/> - <UsageCount Value="69"/> + <UsageCount Value="70"/> <DefaultSyntaxHighlighter Value="None"/> </Unit1> <Unit2> <Filename Value="tools.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="2"/> - <CursorPos X="44" Y="11"/> - <FoldState Value=" T3f065 pk9kR0D]9jIk5070"/> - <UsageCount Value="48"/> + <TopLine Value="35"/> + <CursorPos X="19" Y="198"/> + <FoldState Value=" T3i1065 pk7kP0D]9jIk507C"/> + <UsageCount Value="49"/> <Loaded Value="True"/> </Unit2> <Unit3> <Filename Value="../units/mystringlistunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="-1"/> - <FoldState Value=" T3i7039 pj2jP0B716."/> - <UsageCount Value="45"/> + <TopLine Value="83"/> + <CursorPos Y="221"/> + <FoldState Value=" T3i803718 pialE0E116I"/> + <UsageCount Value="46"/> </Unit3> <Unit4> <Filename Value="dateibeziehungen.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="dateiBeziehungen"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="18"/> - <CursorPos X="61" Y="44"/> - <FoldState Value=" T3j5036 pj3jM0B8 picjO0A512]KenX0o1]94kF035]9FjW0S2@"/> - <UsageCount Value="37"/> + <TopLine Value="803"/> + <CursorPos X="12" Y="827"/> + <FoldState Value=" T3j6036 pj3jM0B8 picjO0A432]Bfo5062169"/> + <UsageCount Value="38"/> <Loaded Value="True"/> </Unit4> <Unit5> @@ -99,126 +102,123 @@ <UsageCount Value="10"/> </Unit12> </Units> - <JumpHistory Count="30" HistoryIndex="29"> + <JumpHistory Count="29" HistoryIndex="28"> <Position1> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="300" Column="12" TopLine="259"/> + <Caret Line="550" Column="33" TopLine="470"/> </Position1> <Position2> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="230" TopLine="207"/> + <Caret Line="64" Column="88" TopLine="56"/> </Position2> <Position3> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="289" Column="20" TopLine="241"/> + <Caret Line="564" Column="48" TopLine="525"/> </Position3> <Position4> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="311" Column="24" TopLine="246"/> + <Caret Line="569" Column="26" TopLine="525"/> </Position4> <Position5> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="611" Column="38" TopLine="324"/> + <Caret Line="572" Column="34" TopLine="525"/> </Position5> <Position6> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="610" Column="51" TopLine="358"/> + <Caret Line="583" Column="32" TopLine="557"/> </Position6> <Position7> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="613" Column="54" TopLine="365"/> + <Caret Line="577" Column="31" TopLine="557"/> </Position7> <Position8> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="611" Column="53" TopLine="528"/> + <Caret Line="601" Column="54" TopLine="581"/> </Position8> <Position9> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="36" Column="13" TopLine="16"/> + <Caret Line="606" Column="74" TopLine="586"/> </Position9> <Position10> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="83" Column="63" TopLine="50"/> + <Caret Line="618" Column="46" TopLine="598"/> </Position10> <Position11> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="205" Column="11" TopLine="86"/> + <Caret Line="643" Column="68" TopLine="624"/> </Position11> <Position12> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="234" Column="4" TopLine="101"/> + <Caret Line="433" Column="16" TopLine="334"/> </Position12> <Position13> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="235" TopLine="101"/> + <Caret Line="455" Column="17" TopLine="421"/> </Position13> <Position14> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="250" Column="2" TopLine="101"/> + <Caret Line="466" Column="75" TopLine="434"/> </Position14> <Position15> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="451" Column="22" TopLine="419"/> + <Caret Line="481" Column="62" TopLine="448"/> </Position15> <Position16> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="550" Column="54" TopLine="462"/> + <Caret Line="491" Column="11" TopLine="485"/> </Position16> <Position17> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="557" Column="44" TopLine="469"/> + <Caret Line="517" Column="146" TopLine="485"/> </Position17> <Position18> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="558" Column="47" TopLine="470"/> + <Caret Line="827" Column="12" TopLine="795"/> </Position18> <Position19> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="585" Column="48" TopLine="556"/> + <Caret Line="517" Column="147" TopLine="498"/> </Position19> <Position20> <Filename Value="dateibeziehungen.pas"/> + <Caret Line="827" Column="12" TopLine="795"/> </Position20> <Position21> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="36" Column="13" TopLine="3"/> + <Caret Line="829" Column="14" TopLine="797"/> </Position21> <Position22> - <Filename Value="tools.pas"/> - <Caret Line="11" Column="44"/> + <Filename Value="dateibeziehungen.pas"/> + <Caret Line="835" Column="14" TopLine="803"/> </Position22> <Position23> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="88" Column="33"/> + <Caret Line="827" Column="12" TopLine="803"/> </Position23> <Position24> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="513" Column="58" TopLine="478"/> + <Caret Line="829" Column="14" TopLine="803"/> </Position24> <Position25> <Filename Value="dateibeziehungen.pas"/> - <Caret Line="883" Column="48" TopLine="752"/> + <Caret Line="835" Column="14" TopLine="803"/> </Position25> <Position26> - <Filename Value="dateibeziehungen.pas"/> - <Caret Line="915" Column="40" TopLine="882"/> + <Filename Value="tools.pas"/> + <Caret Line="11" Column="44"/> </Position26> <Position27> - <Filename Value="dateibeziehungen.pas"/> - <Caret Line="504" Column="40" TopLine="485"/> + <Filename Value="tools.pas"/> + <Caret Line="166" Column="96" TopLine="134"/> </Position27> <Position28> - <Filename Value="dateibeziehungen.pas"/> - <Caret Line="502" Column="39" TopLine="485"/> + <Filename Value="tools.pas"/> + <Caret Line="43" Column="16" TopLine="21"/> </Position28> <Position29> - <Filename Value="dateibeziehungen.pas"/> - <Caret Line="627" Column="20" TopLine="523"/> + <Filename Value="tools.pas"/> + <Caret Line="184" Column="144" TopLine="152"/> </Position29> - <Position30> - <Filename Value="dateibeziehungen.pas"/> - <Caret Line="634" Column="32" TopLine="606"/> - </Position30> </JumpHistory> </ProjectSession> </CONFIG> diff --git a/dateibeziehungen.pas b/dateibeziehungen.pas index 7900913..3f690bf 100644 --- a/dateibeziehungen.pas +++ b/dateibeziehungen.pas @@ -54,10 +54,14 @@ type _machDatei,_pruefsummenDatei: string; _oriAbh,_mglAbh,_ztAbh: tAbhaengigkeiten; _dats: tDateienMitDaten; + _ign: array of tRegExpr; procedure wMachDatei(md: string); procedure wPruefsummenDatei(pd: string); function liesMachDatei: boolean; function liesPruefsummenfile: boolean; + function sammleDateien(wo: string; rekursiv: boolean): longint; + procedure zieleHinzufuegen(var ziele: tDateienMitDaten; ziel,quelle: string); + procedure findeMehrZiele(var ziele: tDateienMitDaten; zieleFkt: tStringList; quelle: string); public property machDatei: string read _machDatei @@ -78,9 +82,6 @@ type end; function quellersetzung(var worin: string; quelle, inputfile: string): boolean; -procedure sammleDateien(wo: string; rekursiv: boolean; ignoriere: array of tRegExpr; var dats: tDateienMitDaten); -procedure zieleHinzufuegen(var ziele: tDateienMitDaten; ziel,quelle,inputfile: string; var dats: tDateienMitDaten); -procedure findeMehrZiele(var ziele: tDateienMitDaten; zieleFkt: tStringList; quelle,inputfile: string; var dats: tDateienMitDaten); implementation @@ -343,6 +344,9 @@ begin for i:=0 to length(_dats)-1 do _dats[i].free; setlength(_dats,0); + for i:=0 to length(_ign)-1 do + _ign[i].free; + setlength(_ign,0); inherited destroy; end; @@ -367,27 +371,20 @@ var f: tMyStringList; s: string; na: tAbhaengigkeit; - ignoriere: array of tRegExpr; rek: boolean; posi: longint; wasWar,wasIst: tZeilenTyp; procedure aufraeumen; -var - ii: longint; begin f.free; na.free; - for ii:=0 to length(ignoriere)-1 do - ignoriere[ii].free; - setlength(ignoriere,0); end; begin result:=false; na:=tAbhaengigkeit.create; - setlength(ignoriere,0); wasWar:=ztSuche; f:=tMyStringList.create; f.loadFromFile(machDatei); @@ -420,21 +417,25 @@ begin case wasIst of ztSuche: begin if not quellersetzung(s,'',machDatei) then begin - writeln('Fehler: Quellersetzung in '''+s+''' fehlgeschlagen!'); + gibAus('Fehler: Quellersetzung in '''+s+''' fehlgeschlagen!',3); aufraeumen; exit; end; - if pos('!',s)=1 then begin - delete(s,1,1); - s:=trim(s); - setlength(ignoriere,length(ignoriere)+1); - ignoriere[length(ignoriere)-1]:=tRegExpr.create; - ignoriere[length(ignoriere)-1].expression:=s; + if startetMit('!',s) then begin + setlength(_ign,length(_ign)+1); + _ign[length(_ign)-1]:=tRegExpr.create; + _ign[length(_ign)-1].expression:=s; end else begin rek:=startetMit('-r',s); while s<>'' do - sammleDateien(erstesArgument(s),rek,ignoriere,_dats); + if sammleDateien(erstesArgument(s),rek)=0 then begin + f.stepBack; + f.readln(s); + gibAus('Fehler: Ich habe etwas zu überwachendes nicht gefudnen ('''+s+''').',3); + aufraeumen; + exit; + end; end; end; ztBefehl: begin @@ -451,7 +452,7 @@ begin na.zieleFkt.add(erstesArgument(s)); ztQuelle: begin if not quellersetzung(s,'',machDatei) then begin - writeln('Fehler: Quellersetzung in '''+s+''' fehlgeschlagen!'); + gibAus('Fehler: Quellersetzung in '''+s+''' fehlgeschlagen!',3); aufraeumen; exit; end; @@ -462,7 +463,7 @@ begin end; if s<>'%%DATEIENDE%%' then - writeln('Interner Fehler! Die letzte Regel wird vsl. nicht beachtet!'); + gibAus('Interner Fehler! Die letzte Regel wird vsl. nicht beachtet!',3); aufraeumen; result:=true; @@ -477,7 +478,7 @@ var begin result:=false; if pruefsummenDatei='' then begin - writeln('Leerer Name als Summendatei angegeben!'); + gibAus('Fehler: Leerer Name als Summendatei angegeben!',3); exit; end; @@ -487,7 +488,7 @@ begin closefile(f); end; if not fileexists(pruefsummenDatei) then begin - writeln('Ich bin nicht in der Lage, die bisher nicht existierende Datei '''+pruefsummenDatei+''' anzulegen!'); + gibAus('Fehler: Ich bin nicht in der Lage, die bisher nicht existierende Datei '''+pruefsummenDatei+''' anzulegen!',3); exit; end; @@ -513,7 +514,7 @@ begin _dats[length(_dats)-1].aktuell:=aNichtVorhanden; continue; end; - writeln('In der Summendatei gibt es eine Datei mit gültiger Prüfsumme, die ich nicht finden kann: '''+gutschlecht[gut][i]+'''!'); + gibAus('Fehler: In der Summendatei gibt es eine Datei mit gültiger Prüfsumme, die ich nicht finden kann: '''+gutschlecht[gut][i]+'''!',3); for gefunden:=false to true do gutschlecht[gefunden].free; exit; @@ -525,6 +526,102 @@ begin result:=true; end; +function tMach.sammleDateien(wo: string; rekursiv: boolean): longint; +var + sr: tSearchRec; + err,i: longint; + weglassen: boolean; +begin + result:=0; + err:=FindFirst(wo,fareadOnly or faHidden or faSysFile or (byte(rekursiv)*faDirectory),sr); + while err=0 do begin + weglassen:=false; + for i:=0 to length(_ign)-1 do + weglassen:=weglassen or _ign[i].exec(extractfilepath(wo)+sr.name); + if not weglassen then begin + if sr.attr and faDirectory <> 0 then begin + if rekursiv and + (sr.name<>'.') and + (sr.name<>'..') then + result:=result+sammleDateien(extractfilepath(wo)+sr.name+'/*',rekursiv); + end + else begin + inc(result); + setlength(_dats,length(_dats)+1); + _dats[length(_dats)-1]:=tDateiMitDatum.create; + _dats[length(_dats)-1].name:=extractfilepath(wo)+sr.name; + _dats[length(_dats)-1].aktuell:=aVeraltet; + end; + end; + err:=FindNext(sr); + end; + findClose(sr); +end; + +procedure tMach.zieleHinzufuegen(var ziele: tDateienMitDaten; ziel,quelle: string); +var + i,ebene,ende: longint; + s,t,u: string; + wasda: boolean; +begin + if pos('{',ziel)=0 then begin + if not quellersetzung(ziel,quelle,machDatei) then exit; + ziel:=unescape(ziel); + i:=0; + wasda:=false; + while i<length(_dats) do begin + if bashMatch(ziel,_dats[i].name) then begin + wasda:=true; + setlength(ziele,length(ziele)+1); + ziele[length(ziele)-1]:=_dats[i]; + end; + inc(i); + end; + if not wasda then begin + setlength(_dats,length(_dats)+1); + _dats[i]:=tDateiMitDatum.create; + if pos('*',ziel)=0 then _dats[i].name:=ziel + else _dats[i].name:='.uralt.'; // unpassende *-Muster erzeugen formal keine echte Datei + _dats[i].aktuell:=aNichtVorhanden; + setlength(ziele,length(ziele)+1); + ziele[length(ziele)-1]:=_dats[i]; + end; + end + else begin + ende:=pos('{',ziel); + ebene:=1; + while (ebene>0) or (ziel[ende]<>'}') do begin + inc(ende); + case ziel[ende] of + '{': inc(ebene); + '}': dec(ebene); + end{of case}; + end; + s:=copy(ziel,1,pos('{',ziel)-1); + t:=copy(ziel,pos('{',ziel)+1,ende-pos('{',ziel)-1); + u:=copy(ziel,ende+1,length(ziel)); + if unescapedpos('..',t)>0 then begin + for i:=strtoint(copy(t,1,unescapedpos('..',t)-1)) to strtoint(copy(t,unescapedpos('..',t)+2,length(t))) do + zieleHinzufuegen(ziele,s+inttostr(i)+u,quelle); + end + else begin + t:=t+','; + while unescapedpos(',',t)>0 do begin + zieleHinzufuegen(ziele,s+copy(t,1,unescapedpos(',',t)-1)+u,quelle); + delete(t,1,unescapedpos(',',t)); + end; + end; + end; +end; + +procedure tMach.findeMehrZiele(var ziele: tDateienMitDaten; zieleFkt: tStringList; quelle: string); +var + i: longint; +begin + for i:=0 to zieleFkt.count-1 do + zieleHinzufuegen(ziele,zieleFkt[i],quelle); +end; + procedure tMach.erzeugeRegeln; var i,j,k,l: longint; @@ -547,7 +644,7 @@ begin // Andernfalls müssen wir schauen, ob es zu dem Ziel / den Zielen // der Quelle schon eine Regel gibt. setlength(tmpZiele,0); - findeMehrZiele(tmpZiele,_oriAbh[i].zieleFkt,_dats[j].name,machDatei,_dats); + findeMehrZiele(tmpZiele,_oriAbh[i].zieleFkt,_dats[j].name); if length(tmpZiele)=0 then begin gibAus('Fehler: Keine Ziele für Abhängigkeit!',3); @@ -609,7 +706,7 @@ begin neues:=false; for i:=_mglAbh.count-1 downto 0 do begin for j:=0 to length(_mglAbh[i].quellen)-1 do - findeMehrZiele(_mglAbh[i].ziele,_mglAbh[i].zieleFkt,_mglAbh[i].quellen[j].name,machDatei,_dats); + findeMehrZiele(_mglAbh[i].ziele,_mglAbh[i].zieleFkt,_mglAbh[i].quellen[j].name); if length(_mglAbh[i].ziele)=0 then begin // immer noch keine ziele gibAus('Warnung: Keine Ziele für diese Abhängigkeit!',3); gibAus('quellen:',3); @@ -860,99 +957,5 @@ begin end; end; -procedure sammleDateien(wo: string; rekursiv: boolean; ignoriere: array of tRegExpr; var dats: tDateienMitDaten); -var - sr: tSearchRec; - err,i: longint; - weglassen: boolean; -begin - err:=FindFirst(wo,fareadOnly or faHidden or faSysFile or (byte(rekursiv)*faDirectory),sr); - while err=0 do begin - weglassen:=false; - for i:=0 to length(ignoriere)-1 do - weglassen:=weglassen or ignoriere[i].exec(extractfilepath(wo)+sr.name); - if not weglassen then begin - if sr.attr and faDirectory <> 0 then begin - if rekursiv and - (sr.name<>'.') and - (sr.name<>'..') then - sammleDateien(extractfilepath(wo)+sr.name+'/*',rekursiv,ignoriere,dats); - end - else begin - setlength(dats,length(dats)+1); - dats[length(dats)-1]:=tDateiMitDatum.create; - dats[length(dats)-1].name:=extractfilepath(wo)+sr.name; - dats[length(dats)-1].aktuell:=aVeraltet; - end; - end; - err:=FindNext(sr); - end; - findClose(sr); -end; - -procedure zieleHinzufuegen(var ziele: tDateienMitDaten; ziel,quelle,inputfile: string; var dats: tDateienMitDaten); -var - i,ebene,ende: longint; - s,t,u: string; - wasda: boolean; -begin - if pos('{',ziel)=0 then begin - if not quellersetzung(ziel,quelle,inputfile) then exit; - ziel:=unescape(ziel); - i:=0; - wasda:=false; - while i<length(dats) do begin - if bashMatch(ziel,dats[i].name) then begin - wasda:=true; - setlength(ziele,length(ziele)+1); - ziele[length(ziele)-1]:=dats[i]; - end; - inc(i); - end; - if not wasda then begin - setlength(dats,length(dats)+1); - dats[i]:=tDateiMitDatum.create; - if pos('*',ziel)=0 then dats[i].name:=ziel - else dats[i].name:='.uralt.'; // unpassende *-Muster erzeugen formal keine echte Datei - dats[i].aktuell:=aNichtVorhanden; - setlength(ziele,length(ziele)+1); - ziele[length(ziele)-1]:=dats[i]; - end; - end - else begin - ende:=pos('{',ziel); - ebene:=1; - while (ebene>0) or (ziel[ende]<>'}') do begin - inc(ende); - case ziel[ende] of - '{': inc(ebene); - '}': dec(ebene); - end{of case}; - end; - s:=copy(ziel,1,pos('{',ziel)-1); - t:=copy(ziel,pos('{',ziel)+1,ende-pos('{',ziel)-1); - u:=copy(ziel,ende+1,length(ziel)); - if unescapedpos('..',t)>0 then begin - for i:=strtoint(copy(t,1,unescapedpos('..',t)-1)) to strtoint(copy(t,unescapedpos('..',t)+2,length(t))) do - zieleHinzufuegen(ziele,s+inttostr(i)+u,quelle,inputfile,dats); - end - else begin - t:=t+','; - while unescapedpos(',',t)>0 do begin - zieleHinzufuegen(ziele,s+copy(t,1,unescapedpos(',',t)-1)+u,quelle,inputfile,dats); - delete(t,1,unescapedpos(',',t)); - end; - end; - end; -end; - -procedure findeMehrZiele(var ziele: tDateienMitDaten; zieleFkt: tStringList; quelle,inputfile: string; var dats: tDateienMitDaten); -var - i: longint; -begin - for i:=0 to zieleFkt.count-1 do - zieleHinzufuegen(ziele,zieleFkt[i],quelle,inputfile,dats); -end; - end. @@ -39,6 +39,9 @@ function dateienMitGueltigerSumme(sumNam: string): tStringList; implementation +uses + lowlevelunit; + function min(a1,a2: tAktualitaet): tAktualitaet; begin if a1<a2 then @@ -163,7 +166,7 @@ begin dateien:=extrahiereAlleDateien(args+' '+bef); if dateien.count = 0 then - writeln('*** Warnung: Hier ist ein Befehl ohne offensichtliche input-Dateien! ('''+oBef+''')!'); + gibAus('Warnung: Hier ist ein Befehl ohne offensichtliche input-Dateien! ('''+oBef+''')!',3); sl:=tMyStringlist.create; relZeil:=tMyStringlist.create; @@ -178,17 +181,15 @@ begin for i:=0 to relZeil.count-1 do begin re.inputString:=relZeil[i]; if re.subExprMatchCount=0 then - writeln('*** Warnung: Hier ist eine Zeile in der optionsdatei, die keine passende Inputdatei benennt, es aber sollte! ('''+relZeil[i]+''')!'); + gibAus('Warnung: Hier ist eine Zeile in der optionsdatei, die keine passende Inputdatei benennt, es aber sollte! ('''+relZeil[i]+''')!',3); for j:=0 to re.subExprMatchCount-1 do begin s:=trim(re.match[j]); if (leftStr(s,1)='"') and (rightStr(s,1)='"') then begin delete(s,1,1); delete(s,length(s),1); end; - if not lokTest.exec(s) then begin - writeln('*** FEHLER: '''+relZeil[i]+''' in Befehl '''+oBef+''' hat Lokalitätstest nicht bestanden! ('+lokTest.expression+')'); - halt(1); - end; + if not lokTest.exec(s) then + fehler(''''+relZeil[i]+''' in Befehl '''+oBef+''' hat Lokalitätstest nicht bestanden! ('+lokTest.expression+')'); end; end; re.free; |