diff options
-rw-r--r-- | irdecoderunit.pas | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/irdecoderunit.pas b/irdecoderunit.pas index 06b7c28..dda63eb 100644 --- a/irdecoderunit.pas +++ b/irdecoderunit.pas @@ -40,13 +40,15 @@ type function gibAlleBefehle: string; end; - tBefehl = record + tBefehl = class nummer,altZustand, // Index des gesendeten Zeichens in zeichenTabelle, sowie alter neuZustand: longword; // und neuer Zustand einzelKlick, // gedrückt gehaltene Taste = Befehl mehrmals? kollapsTrenner: boolean; // Darf über diesen Befehl hinweg kollabiert werden? cmd,params: string; // Befehl + Parameter kollapsArt: tKollapsArt; // Wie kollabiert dieser Befehl? + constructor create; + destructor destroy; override; end; procedure befehleKonfLesen(konfigName: string); @@ -81,10 +83,14 @@ begin end; constructor tIRDecoder.create(inputName, konfigName: string; watte: boolean); +var + i: int64; begin inherited create; if (length(zeichenTabelle)=0) or (length(befehlsTabelle)=0) then begin setlength(zeichenTabelle,0); + for i:=0 to length(befehlsTabelle)-1 do + befehlsTabelle[i].free; setlength(befehlsTabelle,0); befehleKonfLesen(konfigName); end; @@ -297,6 +303,24 @@ begin end; end; +// tBefehl ********************************************************************* + +constructor tBefehl.create; +begin + inherited create; + fillchar(cmd,sizeof(cmd),#0); + cmd:=''; + fillchar(params,sizeof(params),#0); + params:=''; +end; + +destructor tBefehl.destroy; +begin + cmd:=''; + params:=''; + inherited destroy; +end; + // allgemeine Funktionen ******************************************************* procedure befehleKonfLesen(konfigName: string); @@ -323,6 +347,7 @@ begin if zeile='Ende' then break; if startetMit('Befehl:',zeile) then begin setlength(befehlsTabelle,length(befehlsTabelle)+1); + befehlsTabelle[length(befehlsTabelle)-1]:=tBefehl.create; befehlsTabelle[length(befehlsTabelle)-1].nummer:=length(zeichenTabelle)-1; befehlsTabelle[length(befehlsTabelle)-1].altZustand:=cStat; befehlsTabelle[length(befehlsTabelle)-1].neuZustand:=cStat; @@ -421,6 +446,7 @@ var mi,ma,li,re,pv,pvZ,i: longword; tmp: tBefehl; begin + tmp:=nil; if von>=bis then exit; mi:=von; ma:=mi; @@ -446,9 +472,9 @@ begin (befehlsVergleich(re,pv,pvZ)>0) do dec(re); if li>=re then break; - move(befehlsTabelle[re],tmp,sizeOf(tBefehl)); - move(befehlsTabelle[li],befehlsTabelle[re],sizeOf(tBefehl)); - move(tmp,befehlsTabelle[li],sizeOf(tBefehl)); + tmp:=befehlsTabelle[re]; + befehlsTabelle[re]:=befehlsTabelle[li]; + befehlsTabelle[li]:=tmp; inc(li); dec(re); end; @@ -489,5 +515,17 @@ begin result:=0; end; +var i: int64; + +initialization + fillchar(befehlsTabelle,sizeof(befehlsTabelle),#0); + setlength(befehlsTabelle,0); + fillchar(zeichenTabelle,sizeof(zeichenTabelle),#0); + setlength(zeichenTabelle,0); +finalization + for i:=0 to length(befehlsTabelle)-1 do + befehlsTabelle[i].free; + setlength(befehlsTabelle,0); + setlength(zeichenTabelle,0); end. |