summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--irdecoderunit.pas46
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.