From 07d82f6827c57159fa3cf7284caeaf2fbc8355f5 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Wed, 16 Aug 2017 14:25:19 +0200 Subject: epostunit.pas: liKo berichtet nun auch über bekannte Befehle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- epostunit.pas | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/epostunit.pas b/epostunit.pas index c629128..4c05f6a 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -2210,6 +2210,7 @@ var fertig: boolean; liKoThreads: array of tLiKoThread; Zeit: extended; + bekannteBefehle: tMyStringList; begin result:=false; warteAufBeendigungDesLeseThreads; @@ -2217,14 +2218,17 @@ begin genauigkeit:=gExtended; _xSteps:=0; _tSiz:=0; + bekannteBefehle:=tMyStringList.create; Zeit:=now; repeat + bekannteBefehle.clear; if not f.metaReadln(s,true) then begin gibAus('Unerwartetes Dateiende!',3); + bekannteBefehle.free; exit; end; - if s='Ende' then break; - if startetMit('xMin:',s) then begin + if istDasBefehl('Ende',s,bekannteBefehle,false) then break; + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin if length(liKo)=0 then begin gibAus('xMin kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); exit; @@ -2232,7 +2236,7 @@ begin xMin:=liKo[0].werte.kont2disk('x',exprToFloat(sT,s)); continue; end; - if startetMit('xMax:',s) then begin + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin if length(liKo)=0 then begin gibAus('xMax kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); exit; @@ -2240,7 +2244,7 @@ begin xMax:=liKo[0].werte.kont2disk('x',exprToFloat(sT,s)); continue; end; - if startetMit('tMin:',s) then begin + if istDasBefehl('tMin:',s,bekannteBefehle,true) then begin if length(liKo)=0 then begin gibAus('tMin kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); exit; @@ -2248,7 +2252,7 @@ begin tMin:=liKo[0].werte.kont2disk('t',exprToFloat(sT,s)); continue; end; - if startetMit('tMax:',s) then begin + if istDasBefehl('tMax:',s,bekannteBefehle,true) then begin if length(liKo)=0 then begin gibAus('tMax kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); exit; @@ -2256,13 +2260,14 @@ begin tMax:=liKo[0].werte.kont2disk('t',exprToFloat(sT,s)); continue; end; - if (s='in t auf Zweierpotenz kürzen') or (s='in y auf Zweierpotenz kürzen') then begin + if istDasBefehl('in t auf Zweierpotenz kürzen',s,bekannteBefehle,false) or + istDasBefehl('in y auf Zweierpotenz kürzen',s,bekannteBefehle,false) then begin i:=round(power(2,floor(ln(tMax-tMin+1)/ln(2)))); tMax:=(tMax+tMin+i) div 2; tMin:=tMax-i+1; continue; end; - if s='in x auf Zweierpotenz kürzen' then begin + if istDasBefehl('in x auf Zweierpotenz kürzen',s,bekannteBefehle,false) then begin i:=round(power(2,floor(ln(xMax-xMin+1)/ln(2)))); xMax:=(xMax+xMin+i) div 2; xMin:=xMax-i+1; @@ -2271,8 +2276,12 @@ begin setLength(liKo,length(liKo)+1); i:=findeWerte(erstesArgument(s),nil,wertes,konturen,false); - if i<0 then + if i<0 then begin + bekannteBefehle.sort; + gibAus('Ansonsten kenne ich noch folgende Befehle:'#10+bekannteBefehle.text,3); + bekannteBefehle.free; exit; + end; liKo[length(liKo)-1].alpha:=wertes^[i].exprToFloat(sT,s); while i<0 do i:=i+length(wertes^)-1; liKo[length(liKo)-1].werte:=wertes^[i mod (length(wertes^)-1)]; @@ -2288,33 +2297,41 @@ begin end; if _xSteps<>liKo[length(liKo)-1].werte._xSteps then begin gibAus('Unterschiedliche Anzahl an x-Schritten: '+intToStr(_xSteps)+' bisher vs. '+intToStr(liKo[length(liKo)-1].werte._xSteps)+' bei '+intToStr(i)+'!',3); + bekannteBefehle.free; exit; end; if _tSiz<>liKo[length(liKo)-1].werte._tSiz then begin gibAus('Unterschiedliche Anzahl an t-Schritten: '+intToStr(_tSiz)+' bisher vs. '+intToStr(liKo[length(liKo)-1].werte._tSiz)+' bei '+intToStr(i)+'!',3); + bekannteBefehle.free; exit; end; if liKo[length(liKo)-1].werte.genauigkeit<>liKo[0].werte.genauigkeit then begin gibAus('Ich bin dumm, ich kann nur Werte mit gleicher Genauigkeit zusammenrechnen!',3); + bekannteBefehle.free; exit; end; if liKo[length(liKo)-1].werte.transformationen.xStart<>liKo[0].werte.transformationen.xStart then begin gibAus('Anfangspostionen passen nicht zusammen ('+floatToStr(liKo[0].werte.transformationen.xStart)+' bisher vs. '+floatToStr(liKo[length(liKo)-1].werte.transformationen.xStart)+' bei '+intToStr(i)+')!',3); + bekannteBefehle.free; exit; end; if liKo[length(liKo)-1].werte.transformationen.xStop<>liKo[0].werte.transformationen.xStop then begin gibAus('Endpostionen passen nicht zusammen ('+floatToStr(liKo[0].werte.transformationen.xStop)+' bisher vs. '+floatToStr(liKo[length(liKo)-1].werte.transformationen.xStop)+' bei '+intToStr(i)+')!',3); + bekannteBefehle.free; exit; end; if liKo[length(liKo)-1].werte.transformationen.tStart<>liKo[0].werte.transformationen.tStart then begin gibAus('Anfangszeiten passen nicht zusammen ('+floatToStr(liKo[0].werte.transformationen.tStart)+' bisher vs. '+floatToStr(liKo[length(liKo)-1].werte.transformationen.tStart)+' bei '+intToStr(i)+')!',3); + bekannteBefehle.free; exit; end; if liKo[length(liKo)-1].werte.transformationen.tStop<>liKo[0].werte.transformationen.tStop then begin gibAus('Endzeiten passen nicht zusammen ('+floatToStr(liKo[0].werte.transformationen.tStop)+' bisher vs. '+floatToStr(liKo[length(liKo)-1].werte.transformationen.tStop)+' bei '+intToStr(i)+')!',3); + bekannteBefehle.free; exit; end; until false; + bekannteBefehle.free; if length(liKo)=0 then begin gibAus('Leere Linearkombination!',3); -- cgit v1.2.3-70-g09d2