diff options
-rw-r--r-- | epost.lpi | 6 | ||||
-rw-r--r-- | epost.lpr | 20 | ||||
-rw-r--r-- | epost.lps | 146 | ||||
-rw-r--r-- | epostunit.pas | 132 | ||||
-rw-r--r-- | fileunit.pas | 238 | ||||
-rw-r--r-- | typenunit.pas | 340 | ||||
-rw-r--r-- | werteunit.pas | 6 |
7 files changed, 168 insertions, 720 deletions
@@ -50,22 +50,18 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="epostunit"/> </Unit2> <Unit3> <Filename Value="fileunit.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="fileunit"/> </Unit3> <Unit4> <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="werteunit"/> </Unit4> <Unit5> <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="typenunit"/> </Unit5> </Units> </ProjectOptions> @@ -76,7 +72,7 @@ </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="/home_raid/erich/Dokumente/Prograemmchen/fpGUI/src/corelib/render/software/"/> + <OtherUnitFiles Value="/home_raid/erich/Dokumente/Prograemmchen/fpGUI/src/corelib/render/software/;../units"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <CodeGeneration> @@ -10,10 +10,10 @@ uses {$ENDIF}{$ENDIF} Classes, { you can add units after this } - sysutils, epostunit, fileunit, typenunit; + sysutils, epostunit, mystringlistunit, typenunit, lowlevelunit; var maxthreads,i,j,k: longint; - inf: tInputfile; + inf: tMyStringlist; s: string; b,syntaxtest,parallelLesen: boolean; wertes: tWerteArray; @@ -55,18 +55,22 @@ begin setlength(wertes,0); setlength(Konturen,0); behalteLogs:=(paramcount=2) and (paramstr(2)='-L'); - inf:=tInputfile.create; - inf.einlesen(paramstr(1)); + inf:=tMyStringlist.create; + inf.loadFromFile(paramstr(1)); + if not inf.unfoldMacros then begin + gibAus('Fehlerhafte input-Datei '''+paramstr(1)+'''!',3); + halt(1); + end; for syntaxtest:=true downto false do begin if not syntaxtest then gibAus('Syntaxtest bestanden!',3); - inf.anAnfang; - while inf.gibZeile(s) do begin + inf.rewind; + while inf.readln(s) do begin i:=0; while i<length(wertes) do begin wertes[i].beendeLeseThreadWennFertig; - if (wertes[i].bezeichner<>'') and not inf.brauchenoch(wertes[i].bezeichner) then begin + if (wertes[i].bezeichner<>'') and not inf.stillNeed(wertes[i].bezeichner) then begin gibAus('Müllabfuhr löscht Wert Nummer '+inttostr(i)+' mit Bezeichner '''+wertes[i].bezeichner+'''!',3); wertes[i].free; for j:=i+1 to length(wertes)-1 do @@ -78,7 +82,7 @@ begin end; i:=0; while i<length(Konturen) do begin - if (Konturen[i].bezeichner<>'') and not inf.brauchenoch(Konturen[i].bezeichner) then begin + if (Konturen[i].bezeichner<>'') and not inf.stillNeed(Konturen[i].bezeichner) then begin gibAus('Müllabfuhr löscht Kontur Nummer '+inttostr(i)+' mit Bezeichner '''+Konturen[i].bezeichner+'''!',3); Konturen[i].free; for j:=i+1 to length(Konturen)-1 do @@ -3,14 +3,14 @@ <ProjectSession> <Version Value="9"/> <BuildModes Active="Default"/> - <Units Count="7"> + <Units Count="10"> <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> <IsVisibleTab Value="True"/> - <TopLine Value="67"/> - <CursorPos X="38" Y="65"/> - <FoldState Value=" T0iNVB011171221211]B4[65]E[44]J[O7]CA"/> + <TopLine Value="65"/> + <CursorPos X="61" Y="85"/> + <FoldState Value=" T0j8S8612212111114[65]E[44]J[O7]CB"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit0> @@ -24,38 +24,35 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="epostunit"/> <EditorIndex Value="2"/> - <TopLine Value="1954"/> - <CursorPos X="38" Y="1963"/> - <FoldState Value=" T3of0C6 piXjG04D[95M06611 T0j?20{1S"/> + <TopLine Value="4903"/> + <CursorPos X="80" Y="4924"/> + <FoldState Value=" T3of0C6 piXjG04D[95M06521 T0j?20{1F"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> <Unit3> <Filename Value="fileunit.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="fileunit"/> - <EditorIndex Value="1"/> + <EditorIndex Value="-1"/> + <CursorPos Y="204"/> <UsageCount Value="200"/> - <Loaded Value="True"/> </Unit3> <Unit4> <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="werteunit"/> <EditorIndex Value="3"/> - <CursorPos X="46" Y="46"/> + <TopLine Value="1082"/> + <CursorPos X="33" Y="1102"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> <Unit5> <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="typenunit"/> <EditorIndex Value="4"/> - <TopLine Value="1575"/> - <CursorPos X="21" Y="1584"/> + <TopLine Value="1789"/> + <CursorPos X="23" Y="1809"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit5> @@ -66,124 +63,145 @@ <CursorPos X="2" Y="1675"/> <UsageCount Value="10"/> </Unit6> + <Unit7> + <Filename Value="../units/mystringlistunit.pas"/> + <EditorIndex Value="1"/> + <TopLine Value="310"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit7> + <Unit8> + <Filename Value="../units/lowlevelunit.pas"/> + <EditorIndex Value="5"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit8> + <Unit9> + <Filename Value="../units/randomunit.pas"/> + <EditorIndex Value="-1"/> + <UsageCount Value="10"/> + </Unit9> </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> <Filename Value="epostunit.pas"/> - <Caret Line="3085" Column="17" TopLine="3078"/> + <Caret Line="326" Column="58" TopLine="302"/> </Position1> <Position2> <Filename Value="epostunit.pas"/> - <Caret Line="3082" TopLine="3080"/> + <Caret Line="642" Column="67" TopLine="595"/> </Position2> <Position3> - <Filename Value="werteunit.pas"/> - <Caret Line="703" Column="26" TopLine="685"/> + <Filename Value="epostunit.pas"/> + <Caret Line="678" Column="19" TopLine="659"/> </Position3> <Position4> - <Filename Value="werteunit.pas"/> - <Caret Line="298" TopLine="275"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1265" Column="62" TopLine="1245"/> </Position4> <Position5> - <Filename Value="werteunit.pas"/> - <Caret Line="1097" TopLine="1055"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1444" Column="63" TopLine="1424"/> </Position5> <Position6> - <Filename Value="werteunit.pas"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1460" Column="20" TopLine="1440"/> </Position6> <Position7> - <Filename Value="werteunit.pas"/> - <Caret Line="43" Column="27" TopLine="8"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1565" Column="67" TopLine="1545"/> </Position7> <Position8> - <Filename Value="werteunit.pas"/> - <Caret Line="44" Column="27" TopLine="9"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1587" Column="20" TopLine="1568"/> </Position8> <Position9> - <Filename Value="werteunit.pas"/> - <Caret Line="783" Column="32" TopLine="748"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1658" Column="70" TopLine="1638"/> </Position9> <Position10> <Filename Value="epostunit.pas"/> - <Caret Line="3114" Column="48" TopLine="3083"/> + <Caret Line="1689" Column="20" TopLine="1670"/> </Position10> <Position11> - <Filename Value="werteunit.pas"/> - <Caret Line="819" Column="35" TopLine="804"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1957" Column="78" TopLine="1937"/> </Position11> <Position12> <Filename Value="epostunit.pas"/> - <Caret Line="3113" TopLine="3088"/> + <Caret Line="1980" Column="20" TopLine="1961"/> </Position12> <Position13> - <Filename Value="werteunit.pas"/> - <Caret Line="46" Column="50" TopLine="43"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2104" Column="69" TopLine="2084"/> </Position13> <Position14> - <Filename Value="werteunit.pas"/> - <Caret Line="836" Column="37" TopLine="806"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2144" Column="19" TopLine="2125"/> </Position14> <Position15> - <Filename Value="epost.lpr"/> - <Caret Line="245" Column="53" TopLine="121"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2233" Column="67" TopLine="2213"/> </Position15> <Position16> <Filename Value="epostunit.pas"/> - <Caret Line="2560" Column="13" TopLine="1658"/> + <Caret Line="2251" Column="20" TopLine="2231"/> </Position16> <Position17> <Filename Value="epostunit.pas"/> - <Caret Line="2545" Column="58" TopLine="2232"/> + <Caret Line="2339" Column="62" TopLine="2319"/> </Position17> <Position18> <Filename Value="epostunit.pas"/> - <Caret Line="78" Column="156" TopLine="58"/> + <Caret Line="2356" Column="20" TopLine="2336"/> </Position18> <Position19> <Filename Value="epostunit.pas"/> + <Caret Line="2427" Column="64" TopLine="2407"/> </Position19> <Position20> <Filename Value="epostunit.pas"/> - <Caret Line="78" Column="156" TopLine="45"/> + <Caret Line="2446" Column="20" TopLine="2426"/> </Position20> <Position21> - <Filename Value="typenunit.pas"/> - <Caret Line="702" Column="19" TopLine="662"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2538" Column="70" TopLine="2518"/> </Position21> <Position22> - <Filename Value="typenunit.pas"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2594" Column="12" TopLine="2574"/> </Position22> <Position23> - <Filename Value="typenunit.pas"/> - <Caret Line="224" Column="20" TopLine="209"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4925" Column="47" TopLine="4903"/> </Position23> <Position24> - <Filename Value="typenunit.pas"/> - <Caret Line="230" Column="67" TopLine="209"/> + <Filename Value="epost.lpr"/> + <Caret Line="13" Column="42"/> </Position24> <Position25> - <Filename Value="typenunit.pas"/> - <Caret Line="408" Column="19" TopLine="380"/> + <Filename Value="epost.lpr"/> + <Caret Line="16" Column="46"/> </Position25> <Position26> - <Filename Value="typenunit.pas"/> - <Caret Line="409" Column="52" TopLine="380"/> + <Filename Value="epost.lpr"/> + <Caret Line="59" Column="15" TopLine="39"/> </Position26> <Position27> - <Filename Value="typenunit.pas"/> - <Caret Line="422" Column="44" TopLine="390"/> + <Filename Value="../units/mystringlistunit.pas"/> + <Caret Line="373" Column="14" TopLine="337"/> </Position27> <Position28> - <Filename Value="typenunit.pas"/> - <Caret Line="918" Column="38" TopLine="885"/> + <Filename Value="epost.lpr"/> + <Caret Line="62" Column="12" TopLine="41"/> </Position28> <Position29> - <Filename Value="epostunit.pas"/> - <Caret Line="2538" TopLine="2406"/> + <Filename Value="epost.lpr"/> + <Caret Line="69" Column="20" TopLine="48"/> </Position29> <Position30> - <Filename Value="epostunit.pas"/> - <Caret Line="130" Column="41" TopLine="117"/> + <Filename Value="epost.lpr"/> + <Caret Line="73" Column="59" TopLine="53"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/epostunit.pas b/epostunit.pas index 6b9b3a1..dd7523b 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -5,7 +5,7 @@ unit epostunit; interface uses - Classes, SysUtils, fileunit, werteunit, typenunit, process; + Classes, SysUtils, mystringlistunit, werteunit, typenunit, process, lowlevelunit; type TBmpHeader = packed record @@ -52,7 +52,7 @@ type farbe: tRGB; orte: tExtPointArray; bezeichner: string; - function init(st: boolean; var f: tInputfile; w: pTWerteArray; mt: longint): boolean; + function init(st: boolean; var f: tMyStringlist; w: pTWerteArray; mt: longint): boolean; function liesVonDatei(st: boolean; s: string; xmi,xma,tmi,tma: extended): boolean; function erzeugeAusWerten(st: boolean; s: string; w: pTWerteArray; mt: longint; _xmin,_xmax,_tmin,_tmax: string): boolean; property xmin: extended read rxmin; @@ -73,7 +73,7 @@ type private leseThread: tLeseThread; function findeAlleDateien(nam: string; var dat: tGenerischeInputDateiInfoArray; Vorlage: tGenerischeInputDateiInfo): boolean; - function ermittleExterneInputParameter(var f: tInputfile; out dateien: tGenerischeInputDateiInfoArray): boolean; + function ermittleExterneInputParameter(var f: tMyStringlist; out dateien: tGenerischeInputDateiInfoArray): boolean; function ermittleInterneInputParameter(var dateien: tGenerischeInputDateiInfoArray): boolean; procedure initVerzerrung(quelle: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,mt: longint; oberst: boolean; epsilon: extended; verzerrung: tTransformationen; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; Warn: tWarnstufe); function rXsteps: longint; @@ -118,22 +118,22 @@ type procedure warteAufBeendigungDesLeseThreads; procedure kopiereVon(st: boolean; original: tWerte); overload; procedure kopiereVon(st: boolean; original: tWerte; xmin,xmax: longint); overload; - function ladeDateien(st: boolean; var f: tInputfile; pl: boolean): boolean; + function ladeDateien(st: boolean; var f: tMyStringlist; pl: boolean): boolean; function ladeAscii(st: boolean; datei: string): boolean; - function berechneLiKo(st: boolean; var f: tInputfile; threads: longint): boolean; - function berechneQuotient(st: boolean; var f: tInputfile; threads, dividend, divisor: longint): boolean; - function berechneKorrelation(st: boolean; var f: tInputfile; threads: longint; const quelle: tWerte): boolean; + function berechneLiKo(st: boolean; var f: tMyStringlist; threads: longint): boolean; + function berechneQuotient(st: boolean; var f: tMyStringlist; threads, dividend, divisor: longint): boolean; + function berechneKorrelation(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte): boolean; procedure ermittleMinMaxDichten(st: boolean; threads: longint; symmetrisch: boolean); overload; procedure ermittleMinMaxDichten(st: boolean; threads,xmin,xmax,tmin,tmax: longint; symmetrisch: boolean); overload; function fft(threads: longint; senkrecht,invers: boolean; const vor,nach: tFFTDatenordnung; const fen: tFenster; out pvFehler: extended; Warn: tWarnstufe): boolean; overload; function fft(threads,xmin,xmax,tmin,tmax: longint; senkrecht,invers: boolean; const vor,nach: tFFTDatenordnung; const fen: tFenster; out pvFehler: extended; Warn: tWarnstufe): boolean; overload; - function berechneZeitfrequenzanalyse(st: boolean; var f: tInputfile; threads: longint; const quelle: tWerte; Warn: tWarnstufe): boolean; - function berechneVerzerrung(st: boolean; var f: tInputfile; threads: longint; const quelle: tWerte; Warn: tWarnstufe): boolean; - function berechneIntegral(st: boolean; var f: tInputfile; threads: longint; const quelle: tWerte): boolean; - function berechneFFT(st: boolean; var f: tInputfile; threads: longint; Warn: tWarnstufe): boolean; - function berechneFFT2d(st: boolean; var f: tInputfile; threads: longint; Warn: tWarnstufe): boolean; - function erzeugeLinearesBild(st: boolean; var f: tInputfile; maxThreads: longint): boolean; - function erzeugeAscii(st: boolean; var f: tInputfile): boolean; + function berechneZeitfrequenzanalyse(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte; Warn: tWarnstufe): boolean; + function berechneVerzerrung(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte; Warn: tWarnstufe): boolean; + function berechneIntegral(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte): boolean; + function berechneFFT(st: boolean; var f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; + function berechneFFT2d(st: boolean; var f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; + function erzeugeLinearesBild(st: boolean; var f: tMyStringlist; maxThreads: longint): boolean; + function erzeugeAscii(st: boolean; var f: tMyStringlist): boolean; function erzeugeLineout(st: boolean; params: string): boolean; function erzeugeBinning(st: boolean; params: string): boolean; procedure spiegle(threads: longint); overload; @@ -319,11 +319,11 @@ type procedure stExecute; override; end; -function neuePalette(var f: tInputfile): boolean; +function neuePalette(var f: tMyStringlist): boolean; function initBmpHeader(w,h: longint): tBmpHeader; procedure schreibeBmpHeader(var f: file; w,h: longint); function findePalette(out Palette: pTPalette; name: string): boolean; -function erzeugeLegende(st: boolean; var f: tInputfile; datei: string; Qu: tWerte; minDichte,maxDichte: extended; nb: tTransformationen; pal: pTPalette): boolean; +function erzeugeLegende(st: boolean; var f: tMyStringlist; datei: string; Qu: tWerte; minDichte,maxDichte: extended; nb: tTransformationen; pal: pTPalette): boolean; function strToFftDo(out fftDo: tFFTDatenordnung; s: string): boolean; function findeWerte(s: String; pws: pTWerteArray; Kont: pTKonturenArray; darfErstellen: boolean): integer; function findeKontur(s: String; pks: pTKonturenArray; darfErstellen: boolean): integer; @@ -639,7 +639,7 @@ begin end; end; -function tWerte.ermittleExterneInputParameter(var f: tInputfile; out dateien: tGenerischeInputDateiInfoArray): boolean; +function tWerte.ermittleExterneInputParameter(var f: tMyStringlist; out dateien: tGenerischeInputDateiInfoArray): boolean; // Parameter ermitteln, die in der Config-Datei stehen var s: string; ne,be,maxAmp: extended; @@ -675,7 +675,7 @@ begin sWerte.params.transformationen.xstop:=0; mitGewalt:=false; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); aufraeumen; exit; @@ -1262,7 +1262,7 @@ begin end{of case}; end; -function tWerte.ladeDateien(st: boolean; var f: tInputfile; pl: boolean): boolean; +function tWerte.ladeDateien(st: boolean; var f: tMyStringlist; pl: boolean): boolean; var inputs: tGenerischeInputDateiInfoArray; procedure aufraeumen; @@ -1437,11 +1437,11 @@ begin Transformationen.clear; Transformationen.xsteps:=_xsteps; Transformationen.tsiz:=_tsiz; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.berechneLiKo(st: boolean; var f: tInputfile; threads: longint): boolean; +function tWerte.berechneLiKo(st: boolean; var f: tMyStringlist; threads: longint): boolean; var i,xmin,xmax,tmin,tmax: longint; liKo: tLiKo; s: string; @@ -1457,7 +1457,7 @@ begin _tsiz:=0; Zeit:=now; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); exit; end; @@ -1558,11 +1558,11 @@ begin until fertig; for i:=0 to length(liKoThreads)-1 do liKoThreads[i].free; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.berechneQuotient(st: boolean; var f: tInputfile; threads, dividend, divisor: longint): boolean; +function tWerte.berechneQuotient(st: boolean; var f: tMyStringlist; threads, dividend, divisor: longint): boolean; var i,xmin,xmax,tmin,tmax: longint; s: string; fertig: boolean; @@ -1584,7 +1584,7 @@ begin epsilon:=1e-9; Zeit:=now; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); exit; end; @@ -1651,11 +1651,11 @@ begin until fertig; for i:=0 to length(quotientThreads)-1 do quotientThreads[i].free; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.berechneKorrelation(st: boolean; var f: tInputfile; threads: longint; const quelle: tWerte): boolean; +function tWerte.berechneKorrelation(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte): boolean; var i,xmin,xmax,tmin,tmax: longint; s: string; wavelet: tWavelet; @@ -1686,7 +1686,7 @@ begin _beta:=quelle._beta; ausrichtung:=0; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); exit; end; @@ -1789,7 +1789,7 @@ begin eWerte.kopiereVon(st,pEx,xmin,xmax,tmin,tmax); end; end{of case}; - gibAus('... fertig '+ZeitDarstellen(now-Zeit)+', berechne ...',3); + gibAus('... fertig '+timetostr(now-Zeit)+', berechne ...',3); end else begin genauigkeit:=gExtended; @@ -1819,7 +1819,7 @@ begin end; gibAus(' (Parseval-Fehler = '+floattostr(pvFehler/length(korrelThreads))+')',3); wavelet.free; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; @@ -1862,11 +1862,11 @@ begin _minW:=min(_minW,DTs[i].minDichte); DTs[i].free; end; - gibAus('... sie sind '+myfloattostr(_minW)+' und '+myfloattostr(_maxW)+'. '+ZeitDarstellen(now-Zeit),3); + gibAus('... sie sind '+myfloattostr(_minW)+' und '+myfloattostr(_maxW)+'. '+timetostr(now-Zeit),3); if symmetrisch then begin _minW:=min(_minW,-_maxW); _maxW:=max(_maxW,-_minW); - gibAus('Jetzt sind sie '+myfloattostr(_minW)+' und '+myfloattostr(_maxW)+'. '+ZeitDarstellen(now-Zeit),3); + gibAus('Jetzt sind sie '+myfloattostr(_minW)+' und '+myfloattostr(_maxW)+'. '+timetostr(now-Zeit),3); end; end; @@ -1954,7 +1954,7 @@ begin gibAus('Alle FFTThreads fertig!',1); end; -function tWerte.berechneZeitfrequenzanalyse(st: boolean; var f: tInputfile; threads: longint; const quelle: tWerte; Warn: tWarnstufe): boolean; +function tWerte.berechneZeitfrequenzanalyse(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte; Warn: tWarnstufe): boolean; var i,j,tmin,tmax,tOf,Schritt: longint; Zeit,pvFehler,freqMax: extended; Fenster: tFenster; @@ -1977,7 +1977,7 @@ begin freqMax:=quelle._tsiz/(quelle.Transformationen.tstop-quelle.Transformationen.tstart); Genauigkeit:=gExtended; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); exit; end; @@ -2097,11 +2097,11 @@ begin Transformationen.addAusschnitt(0,_xsteps-1,0,_tsiz-1); if not st then eWerte.holeRAM(0); - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.berechneVerzerrung(st: boolean; var f: tInputfile; threads: longint; const quelle: tWerte; Warn: tWarnstufe): boolean; +function tWerte.berechneVerzerrung(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte; Warn: tWarnstufe): boolean; var i,j: longint; grenzen: t2x2Longint; ZPs: tIntPointArray; // Zielpositionen @@ -2141,7 +2141,7 @@ begin Vorbearbeitung:=tTransformationen.create; Nachbearbeitung:=tTransformationen.create; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); aufraeumen; exit; @@ -2226,11 +2226,11 @@ begin until fertig; end; aufraeumen; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.berechneIntegral(st: boolean; var f: tInputfile; threads: longint; const quelle: tWerte): boolean; +function tWerte.berechneIntegral(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte): boolean; var i,tmin,tmax,xmin,xmax: longint; Zeit: extended; s: string; @@ -2248,7 +2248,7 @@ begin Genauigkeit:=gExtended; rtg:=irHorizontal; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); exit; end; @@ -2331,12 +2331,12 @@ begin for i:=0 to length(intThreads)-1 do intThreads[i].free; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); end; result:=true; end; -function tWerte.berechneFFT(st: boolean; var f: tInputfile; threads: longint; Warn: tWarnstufe): boolean; +function tWerte.berechneFFT(st: boolean; var f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; var i: longint; Zeit,pvFehler: extended; NB: tFFTDatenordnung; @@ -2353,7 +2353,7 @@ begin Fenster.aktiv:=false; senkrecht:=true; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); end; if s='Ende' then break; @@ -2419,12 +2419,12 @@ begin Transformationen.addFFT(not senkrecht,senkrecht); if not st then begin eWerte.holeRam(0); - gibAus('... fertig! '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig! '+timetostr(now-Zeit),3); end; result:=true; end; -function tWerte.berechneFFT2d(st: boolean; var f: tInputfile; threads: longint; Warn: tWarnstufe): boolean; +function tWerte.berechneFFT2d(st: boolean; var f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; var i,k: longint; Zeit,pvFehler: extended; NB,preOrd: tFFTDatenordnung; @@ -2443,7 +2443,7 @@ begin end; spiegeln:=false; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); end; if s='FFTEnde' then break; @@ -2502,11 +2502,11 @@ begin eWerte.holeRam(0); end; Transformationen.addFFT(true,true); - gibAus('... fertig! '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig! '+timetostr(now-Zeit),3); if spiegeln then begin gibAus('Werte spiegeln ...',3); spiegle(threads); - gibAus('... fertig! '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig! '+timetostr(now-Zeit),3); end; gibAus('berechne t-FFT ...',3); if not fft(threads,0,_xsteps-1,0,_tsiz-1,true,false,doRes,preOrd,Fensters[true],pvFehler,Warn) then begin @@ -2514,14 +2514,14 @@ begin exit; end; gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); - gibAus('... fertig! '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig! '+timetostr(now-Zeit),3); gibAus('berechne x-FFT ...',3); if not fft(threads,0,_xsteps-1,0,_tsiz-1,false,false,doRes,preOrd,Fensters[false],pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); - gibAus('... fertig! '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig! '+timetostr(now-Zeit),3); gibAus('Wertenachbearbeiten ...',3); case genauigkeit of gSingle: sWerte.fft2dNachbearbeitungA(NB); @@ -2531,11 +2531,11 @@ begin doBetr,doBetrQdr: fft2dNachbearbeitung(threads,nb); // die Hauptarbeit end{of case}; - gibAus('... fertig! '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig! '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.erzeugeLinearesBild(st: boolean; var f: tInputfile; maxThreads: longint): boolean; +function tWerte.erzeugeLinearesBild(st: boolean; var f: tMyStringlist; maxThreads: longint): boolean; var s,datei: string; i,j,k,schriftgroesze: longint; xzoom,yzoom,wert,schritt,miw,maw,Zeit: extended; @@ -2591,7 +2591,7 @@ begin Rahmen:=false; fontRenderer:=nil; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende in '''+paramstr(1)+'''!',3); aufraeumen; exit; @@ -2845,10 +2845,10 @@ begin aufraeumen; result:=true; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); end; -function tWerte.erzeugeAscii(st: boolean; var f: tInputfile): boolean; +function tWerte.erzeugeAscii(st: boolean; var f: tMyStringlist): boolean; var datei,s,separator: string; outf: textfile; i,j: longint; @@ -2868,7 +2868,7 @@ begin mitKoordinaten:=0; separator:=','; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende in '''+paramstr(1)+'''!',3); exit; end; @@ -2967,7 +2967,7 @@ begin end{of Case}; end{of Case}; close(outf); - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; @@ -3070,7 +3070,7 @@ begin end; closefile(f); end; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; @@ -3108,7 +3108,7 @@ begin gExtended: eWerte.erzeugeBinning(senkrecht,linien,x0,dx,params); end{of case}; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),3); + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; @@ -3935,7 +3935,7 @@ begin result:=max(result,orte[i]['y']); end; -function tKontur.init(st: boolean; var f: tInputfile; w: pTWerteArray; mt: longint): boolean; +function tKontur.init(st: boolean; var f: tMyStringlist; w: pTWerteArray; mt: longint): boolean; var s,xmi,xma,tmi,tma: string; i,j,k,tmpi: longint; begin @@ -3946,7 +3946,7 @@ begin tmi:='-1e9'; tma:='1e9'; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende in '''+paramstr(1)+'''!',3); exit; end; @@ -4545,7 +4545,7 @@ begin result:=false; end; -function erzeugeLegende(st: boolean; var f: tInputfile; datei: string; Qu: tWerte; minDichte,maxDichte: extended; nb: tTransformationen; pal: pTPalette): boolean; +function erzeugeLegende(st: boolean; var f: tMyStringlist; datei: string; Qu: tWerte; minDichte,maxDichte: extended; nb: tTransformationen; pal: pTPalette): boolean; var s: string; breite,hoehe,i,j,k,lo,ro,oo,uo, schriftgroesze: longint; @@ -4576,7 +4576,7 @@ begin beschriftungsschritte[1].faktor:=1; rahmen:=false; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende in '''+paramstr(1)+'''!',3); exit; end; @@ -4617,7 +4617,7 @@ begin beschriftungsschritte[0].linear:=false; beschriftungsschritte[0].faktor:=1; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende in '''+paramstr(1)+'''!',3); exit; end; @@ -4922,7 +4922,7 @@ begin blockwrite(f,bmpHeader,sizeof(bmpHeader)); end; -function neuePalette(var f: tInputfile): boolean; +function neuePalette(var f: tMyStringlist): boolean; var s,name: string; Palette: tRGBArray; i,tmpi: longint; @@ -4933,7 +4933,7 @@ begin name:=''; nPalette:=nil; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende in '''+paramstr(1)+'''!',3); exit; end; diff --git a/fileunit.pas b/fileunit.pas deleted file mode 100644 index 838556c..0000000 --- a/fileunit.pas +++ /dev/null @@ -1,238 +0,0 @@ -unit fileunit; - -{$mode objfpc}{$H+} - -interface - -uses - Classes, SysUtils, Math; - -type - tInputfile = class - private - zeile: longint; - zeilen: tStringlist; - public - procedure anAnfang; - function gibZeile(out s: string): boolean; - function einlesen(fnam: string): boolean; - function brauchenoch(bez: string): boolean; - constructor create; - destructor destroy; override; - end; - -implementation - -uses typenunit; - -procedure tInputfile.anAnfang; -begin - zeile:=0; -end; - -function tInputfile.gibZeile(out s: string): boolean; -begin - result:=false; - if (zeile<0) or (zeile>=zeilen.count) then exit; - s:=zeilen[zeile]; - result:=true; - inc(zeile); -end; - -function tInputfile.einlesen(fnam: string): boolean; -var f: textfile; - i,j,k,l,Ebene: longint; - s,t,u,v: string; - SchleifenInhalt: tStringlist; - istWahr,gefunden: boolean; -const binops: array[0..8] of string = - ('<=','>=','<>','≤','≥','=','≠','<','>'); -begin - result:=false; - assignfile(f,fnam); - reset(f); - zeilen.clear; - while not eof(f) do begin - readln(f,s); - zeilen.add(s); - end; - closefile(f); - zeile:=0; - - i:=0; - while i<zeilen.count do begin - s:=zeilen[i]; - s:=erstesArgument(s,'#'); - if length(s)=0 then begin - zeilen.delete(i); - continue; - end; - zeilen[i]:=s; - inc(i); - end; - - i:=0; - while i<zeilen.count do begin - s:=zeilen[i]; - if startetMit('!überspringe:',s) then begin - for j:=0 to strtoint(s) do - zeilen.delete(i); - continue; - end; - - zeilen[i]:=s; - if s='Dateiende' then begin - inc(i); - while i<zeilen.count do - zeilen.delete(i); - continue; - end; - inc(i); - end; - - i:=0; - while i<zeilen.count do begin - s:=zeilen[i]; - if startetMit('!Schleife:',s) then begin - l:=i; - zeilen.delete(i); - t:=erstesArgument(s,':'); - if (length(t)=0) or (t[1]<>'$') then exit; - - SchleifenInhalt:=TStringlist.create; - Ebene:=0; - while (i<zeilen.Count) and ((Ebene<>0) or (zeilen[i]<>'!Schleifenende')) do begin - SchleifenInhalt.Add(zeilen[i]); - if zeilen[i]='!Schleifenende' then dec(Ebene); - if pos('!Schleife:',zeilen[i])=1 then inc(Ebene); - zeilen.delete(i); - end; - zeilen.delete(i); - - while length(s)>0 do begin - u:=erstesArgument(s); - for j:=0 to SchleifenInhalt.Count-1 do begin - v:=SchleifenInhalt[j]; - k:=length(v); - while (pos(t,v)>0) and (k>0) do begin - v:=copy(v,1,pos(t,v)-1)+u+copy(v,pos(t,v)+length(t),length(v)); - dec(k); - end; - zeilen.insert(i,v); - inc(i); - end; - end; - - SchleifenInhalt.Free; - i:=l; - continue; - end; - zeilen[i]:=s; - inc(i); - end; - - i:=0; - while i<zeilen.count do begin - s:=zeilen[i]; - if startetMit('?',s) then begin - t:=erstesArgument(s,':'); - gefunden:=false; - for j:=0 to length(binops)-1 do - if pos(binops[j],t)>0 then begin - gefunden:=true; - u:=trim(copy(t,1,pos(binops[j],t)-1)); - delete(t,1,pos(binops[j],t)+length(binops[j])-1); - t:=trim(t); - case binops[j] of - '≤','<=': istWahr:=strtofloat(u)<=strtofloat(t); - '≥','>=': istWahr:=strtofloat(u)>=strtofloat(t); - '=': - try - istWahr:=strtofloat(u)=strtofloat(t); - except - istWahr:=u=t; - end; - '≠','<>': - try - istWahr:=strtofloat(u)<>strtofloat(t); - except - istWahr:=u<>t; - end; - '<': istWahr:=strtofloat(u)<strtofloat(t); - '>': istWahr:=strtofloat(u)>strtofloat(t); - else begin - gibAus('Operator '''+binops[j]+''' ist nicht implementiert!',3); - exit; - end; - end{of case}; - if not istWahr then - zeilen.delete(i); - break; - end; - if not gefunden then begin - gibAus('Ich kann keinen gültigen Operator in Bedingung '''+t+''' finden!',3); - exit; - end; - if not istWahr then - continue; - zeilen[i]:=s; - end; - inc(i); - end; - - i:=0; - while i<zeilen.count do begin - s:=zeilen[i]; - if startetMit('!überspringe:',s) then begin - for j:=0 to strtoint(s) do - zeilen.delete(i); - continue; - end; - - zeilen[i]:=s; - if s='Dateiende' then begin - inc(i); - while i<zeilen.count do - zeilen.delete(i); - continue; - end; - inc(i); - end; - - result:=true; -end; - -function tInputfile.brauchenoch(bez: string): boolean; -var i: longint; - s,t: string; -begin - result:=false; - for i:=max(0,zeile-1) to zeilen.count-1 do begin - s:=' '+zeilen[i]+' '; - while pos(bez,s)>0 do begin - t:=copy(s,1,pos(bez,s)+length(bez)); - delete(s,1,pos(bez,s)+length(bez)-1); - delete(t,1,length(t)-length(bez)-2); - if (t[1] in [' ',#9,':','[']) and (t[length(t)] in [' ',#9,':',']']) and (copy(t,2,length(bez))=bez) then begin - result:=true; - exit; - end; - end; - end; -end; - -constructor tInputfile.create; -begin - inherited create; - zeilen:=tStringlist.create; - zeile:=0; -end; - -destructor tInputfile.destroy; -begin - zeilen.free; - inherited destroy; -end; - -end. - diff --git a/typenunit.pas b/typenunit.pas index 54bfca2..20754c0 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -5,7 +5,7 @@ unit typenunit; interface uses - sysutils, agg_2D, FPimage, agg_basics, classes, Math, fileUnit; + sysutils, agg_2D, FPimage, agg_basics, classes, Math, mystringlistunit, lowlevelunit; const Speicherhappen = 32768; // Anzahl an mit einem Mal zu reservierender Arrayzellen myInf = 1e12; @@ -16,32 +16,6 @@ type tExtraInfos = class; tCallBackGetValue = function(name: string): extended of object; tExprToFloat = function(syntaxtest: boolean; name: string): extended of object; - generic tArray<T> = array of T; - tLongintArray = specialize tArray<longint>; - pTLongintArray = ^tLongintArray; - tSingleArray = specialize tArray<single>; - pTSingleArray = ^tSingleArray; - tIntPoint = array['x'..'y'] of longint; - tExtPoint = array['x'..'y'] of extended; - t2x2Longint = array['x'..'y','x'..'y'] of longint; - t2x2Extended = array['x'..'y','x'..'y'] of extended; - tExtPointArray = specialize tArray<tExtPoint>; - pTExtPointArray = ^tExtPointArray; - tExtendedArray = specialize tArray<extended>; - pTExtendedArray = ^tExtendedArray; - tInt32Array = specialize tArray<int32>; - tByteArray = specialize tArray<byte>; - tStringArray = specialize tArray<string>; - tIntPointArray = specialize tArray<tIntPoint>; - tRGB = record - rgbBlue : byte; - rgbGreen: byte; - rgbRed : byte; - end; - tRgbArray = array of tRGB; - tKodierung = (kUnbekannt,k32BitSignedInteger); - tWarnstufe = (wsStreng,wsLasch); - tGenauigkeit = (gSingle,gExtended); tIntegrationsRichtung = (irHorizontal,irEinfall,irAusfall); tGenerischeInputDateiInfo = class // nur zum Vererben gedacht, nie selbst instanziieren! Name,Fehlerbehebungskommando: string; @@ -416,7 +390,7 @@ type procedure addFFT(hor,ver: boolean); procedure AddSpiegelung; function add(inh: tTransformation): boolean; overload; - function add(st: boolean; s: string; f: tInputFile; etf: tExprToFloat): boolean; overload; + function add(st: boolean; s: string; f: tMyStringlist; etf: tExprToFloat): boolean; overload; function add(syntaxtest: boolean; s: string; xscale,yscale: extended; etf: tExprToFloat): boolean; overload; procedure addAusschnitt(xmin,xmax,tmin,tmax: longint); function append(inhs: tTransformationen): boolean; @@ -428,33 +402,6 @@ type procedure berechneZielausdehnung(out grenzen: t2x2Longint); end; -function ZeitDarstellen(t: extended): string; -function myfloattostr(f: extended): string; -function floattostrtrunc(f: extended; dig: longint; laessig: boolean): string; -function binOpPos(op: char; s: string): integer; -function fktPos(fkt,s: string): integer; -procedure gibAus(s: string; ausgaben: byte); -function strToGen(out gen: tGenauigkeit; s: string): boolean; -function orFarben(a,b: tRGB): tRGB; -function andFarben(a,b: tRGB): tRGB; -function wertZuFarbe(x: extended; p: tRGBArray): tRGB; -function tFPColor2tRgb(c: tFPColor): tRGB; -function tRgb2tFPColor(c: tRGB): tFPColor; -procedure myDebugLnThreadLog(s: string); -function belegterSpeicher: longint; -procedure cleanupLogs; -procedure cleanupLog(tid: PtrUInt); -procedure dumpExceptionCallStack(E: Exception); -function startetMit(start: string; var s: string): boolean; -function endetMit(ende: string; var s: string): boolean; -function trimAll(s: string): string; -function erstesArgument(var s: string): string; overload; -function erstesArgument(var s: string; Trenner: string): string; overload; -function mydatetimetostr(t: tDateTime): string; -function tExtPointToStr(p: tExtPoint): string; -function tIntPointToStr(p: tIntPoint): string; -procedure fehler(s: string); - implementation // tGenerischeInputDateiInfo *************************************************** @@ -1847,7 +1794,7 @@ begin result:=true; end; -function tTransformationen.add(st: boolean; s: string; f: tInputFile; etf: tExprToFloat): boolean; +function tTransformationen.add(st: boolean; s: string; f: tMyStringlist; etf: tExprToFloat): boolean; var i: longint; begin result:=false; @@ -1859,7 +1806,7 @@ begin parameter[0]:=0; parameter[1]:=0; repeat - if not f.gibZeile(s) then begin + if not f.readln(s) then begin gibAus('Unerwartetes Dateiende!',3); exit; end; @@ -2012,284 +1959,5 @@ begin end; end; -// allgemeine Funktionen ******************************************************* - -function floattostrtrunc(f: extended; dig: longint; laessig: boolean): string; -begin - result:=inttostr(round(f*power(10,dig))); - result:=copy(result,1,length(result)-dig)+'.'+copy(result,length(result)-dig+1,dig); - if laessig then - while result[length(result)]='0' do - delete(result,length(result),1); - if result[length(result)]='.' then - delete(result,length(result),1); -end; - -function myfloattostr(f: extended): string; -begin - result:=floattostr(f); - if pos('E',result)>0 then - result:=copy(result,1,pos('E',result)-1)+' x 10^'+copy(result,pos('E',result)+1,length(result)); -end; - -function ZeitDarstellen(t: extended): string; -var schreibe: boolean; -begin - result:='('; - schreibe:=t>=1; - if schreibe then begin - result:=result+inttostr(floor(t))+' Tage '; - t:=t-floor(t); - end; - t:=t*24; - schreibe:=schreibe or (t>=1); - if schreibe then begin - result:=inttostr(floor(t))+':'; - t:=t-floor(t); - end; - t:=t*60; - schreibe:=schreibe or (t>=1); - if schreibe then begin - result:=inttostr(floor(t))+':'; - t:=t-floor(t); - end; - t:=t*60; - result:=result+inttostr(round(t))+' s)'; -end; - -function binOpPos(op: char; s: string): integer; -begin - result:=0; - repeat - result:=result+max(1,pos(op,copy(s,result+1,length(s)-result))); - until ((result>1) and not (s[result-1] in ['+','-','*','/','(','E','e'])) or (result>length(s)) or (s[result]<>op); - if (result>length(s)) or (s[result]<>op) then result:=0; -end; - -function fktPos(fkt,s: string): integer; -var tmp: longint; -begin - result:=pos(fkt,s); - while (result<>0) and ((result+length(fkt)>length(s)) or not (s[result+length(fkt)] in [' ','('])) do begin - tmp:=pos(fkt,copy(s,result+1,length(s))); - if tmp=0 then result:=0 - else result:=result + tmp; - end; -end; - -procedure gibAus(s: string; ausgaben: byte); -begin - if odd(ausgaben) then myDebugLnThreadLog(s); - if odd(ausgaben div 2) then writeln(s); -end; - -function strToGen(out gen: tGenauigkeit; s: string): boolean; -begin - result:=true; - if (s='float') or (s='single') then - begin - gen:=gSingle; - exit; - end; - if s='extended' then - begin - gen:=gExtended; - exit; - end; - gibAus('Kenne Genauigkeitstyp '''+s+''' nicht!',3); - result:=false; -end; - -function mischeFarben(a,b: tRGB; x: extended): tRGB; -begin - result.rgbRed:=min(255,max(0,round(a.rgbRed*(1-x)+b.rgbRed*x))); - result.rgbGreen:=min(255,max(0,round(a.rgbGreen*(1-x)+b.rgbGreen*x))); - result.rgbBlue:=min(255,max(0,round(a.rgbBlue*(1-x)+b.rgbBlue*x))); -end; - -function orFarben(a,b: tRGB): tRGB; -begin - result.rgbRed:=a.rgbRed or b.rgbRed; - result.rgbGreen:=a.rgbGreen or b.rgbGreen; - result.rgbBlue:=a.rgbBlue or b.rgbBlue; -end; - -function andFarben(a,b: tRGB): tRGB; -begin - result.rgbRed:=a.rgbRed and b.rgbRed; - result.rgbGreen:=a.rgbGreen and b.rgbGreen; - result.rgbBlue:=a.rgbBlue and b.rgbBlue; -end; - -function wertZuFarbe(x: extended; p: tRGBArray): tRGB; -var i: longint; -begin - x:=min(1,max(0,x))*(length(p)-1); - i:=floor(x); - if i>=(length(p)-1) then begin - result.rgbRed:=p[length(p)-1].rgbRed; - result.rgbGreen:=p[length(p)-1].rgbGreen; - result.rgbBlue:=p[length(p)-1].rgbBlue; - exit; - end; - if i<0 then begin - result.rgbRed:=p[0].rgbRed; - result.rgbGreen:=p[0].rgbGreen; - result.rgbBlue:=p[0].rgbBlue; - exit; - end; - x:=x-i; - result:=mischeFarben(p[i],p[i+1],x); -end; - -function tFPColor2tRgb(c: tFPColor): tRGB; -begin - result.rgbRed:=c.red; - result.rgbGreen:=c.green; - result.rgbBlue:=c.blue; -end; - -function tRgb2tFPColor(c: tRGB): tFPColor; -begin - result.red:=c.rgbRed; - result.green:=c.rgbGreen; - result.blue:=c.rgbBlue; -end; - -procedure myDebugLnThreadLog(s: string); -var f: textfile; - id: PtrUInt; -begin - id:=getThreadID; - assignfile(f,'Log'+inttostr(id)); - if fileexists('Log'+inttostr(id)) then append(f) - else rewrite(f); - writeln(f,inttostr(id)+': '+s); - closefile(f); -end; - -function belegterSpeicher: longint; -var f: textFile; - s: string; -begin - s:='/proc/'+inttostr(getProcessId)+'/smaps'; - result:=0; - if not fileexists(s) then exit; - assignfile(f,s); - reset(f); - while not eof(f) do begin - readln(f,s); - if (leftStr(s,4)='Rss:') and (rightStr(s,3)=' kB') then begin - delete(s,1,4); - delete(s,length(s)-2,3); - s:=trim(s); - result:=result+strtoint(s); - end; - end; - closefile(f); -end; - -procedure cleanupLogs; -var sr: tSearchRec; - err: longint; -begin - err:=findfirst('Log*',$3f,sr); - while err=0 do begin - deletefile(sr.name); - err:=findnext(sr); - end; - findclose(sr); -end; - -procedure cleanupLog(tid: PtrUInt); -var s: string; - Zeit: extended; -begin - s:='Log'+inttostr(tid); - Zeit:=now+1/24/60/60; - while (not fileexists(s)) and (Zeit>now) do - sleep(100); - if fileexists(s) then - deletefile(s) - else begin - gibAus('Datei '''+s+''' kann nicht gelöscht werden, da sie nicht existiert!',3); - raise exception.create('Datei '''+s+''' kann nicht gelöscht werden, da sie nicht existiert!'); - end; -end; - -procedure dumpExceptionCallStack(E: Exception); -var - I: Integer; - Frames: PPointer; - Report: string; -begin - Report := 'Program exception! ' + LineEnding + - 'Stacktrace:' + LineEnding + LineEnding; - if E <> nil then begin - Report := Report + 'Exception class: ' + E.ClassName + LineEnding + - 'Message: ' + E.Message + LineEnding; - end; - Report := Report + BackTraceStrFunc(ExceptAddr); - Frames := ExceptFrames; - for I := 0 to ExceptFrameCount - 1 do - Report := Report + LineEnding + BackTraceStrFunc(Frames[I]); - gibAus(Report,3); -end; - -function startetMit(start: string; var s: string): boolean; -begin - result:=leftStr(s,length(start))=start; - if result then - s:=trim(rightStr(s,length(s)-length(start))); -end; - -function endetMit(ende: string; var s: string): boolean; -begin - result:=rightStr(s,length(ende))=ende; - if result then - s:=trim(leftStr(s,length(s)-length(ende))); -end; - -function trimAll(s: string): string; -begin - result:=s; - while pos(' ',result)>0 do - delete(result,pos(' ',result),1); -end; - -function erstesArgument(var s: string): string; -begin - result:=erstesArgument(s,' '); -end; - -function erstesArgument(var s: string; Trenner: string): string; -begin - result:=copy(s,1,pos(Trenner,s+Trenner)-1); - delete(s,1,length(result)+length(Trenner)); - s:=trim(s); - result:=trim(result); -end; - -function mydatetimetostr(t: tDateTime): string; -begin - result:=formatDateTime('YYYY.MM.DD_hh.mm.ss',t); -end; - -function tExtPointToStr(p: tExtPoint): string; -begin - result:=floattostr(p['x'])+';'+floattostr(p['y']); -end; - -function tIntPointToStr(p: tIntPoint): string; -begin - result:=inttostr(p['x'])+';'+inttostr(p['y']); -end; - -procedure fehler(s: string); -begin - gibAus(s,1); - raise exception.create(s); -end; - end. diff --git a/werteunit.pas b/werteunit.pas index efbcd0d..6c81bff 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -5,7 +5,7 @@ unit werteunit; interface uses - Classes, SysUtils, typenunit, math, process; + Classes, SysUtils, typenunit, math, process, lowlevelunit; type // tLLWerte ******************************************************************** @@ -438,7 +438,7 @@ begin exit; end; end; - gibAus('... fertig '+ZeitDarstellen(now-Zeit),1); + gibAus('... fertig '+timetostr(now-Zeit),1); result:=true; end; @@ -1099,7 +1099,7 @@ begin end; gibAus('Fordere '+inttostr(floor(ho*br*sizeof(wgen)/1024/1024))+' MB RAM an ('+inttostr(br)+' x-Schritte mal '+inttostr(ho)+' t-Schritte; bisher '+inttostr(belegterSpeicher div 1024)+' MB belegt). ...',ausgaben); setlength(werte,br*ho); - gibAus('... fertig '+ZeitDarstellen(now-Zeit),ausgaben); + gibAus('... fertig '+timetostr(now-Zeit),ausgaben); end; function tLLWerte.zuPixelWerten(whoehe,wbreite,xpmi,xmi,tmi: longint; xz,yz: extended; pPWerte: pTExtendedArray; pPAnzahlen: pTLongintArray): boolean; |