summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--komponenten.pas477
-rw-r--r--tests.konf12
-rw-r--r--unit1.pas18
-rw-r--r--watchdog.lps85
4 files changed, 145 insertions, 447 deletions
diff --git a/komponenten.pas b/komponenten.pas
index 416f3d8..daa6c63 100644
--- a/komponenten.pas
+++ b/komponenten.pas
@@ -72,7 +72,6 @@ type
public
werSollIchSein,geraet: string;
constructor create(besitzer: tTestAufgabe);
- destructor destroy; override;
procedure ausfuehren; override;
end;
@@ -89,7 +88,6 @@ type
wen: string;
procedure ausfuehren; override;
constructor create(besitzer: tTestAufgabe);
- destructor destroy; override;
end;
tTestPing = class(tTestAufgabe)
@@ -99,34 +97,23 @@ type
constructor create;
end;
-(* TTestDnsLookup = class (TTestAufgabe)
- private
- DNS_IP,HTTP_IP,
- host,ipVergleich,
- klammerAuf,klammerZu,
- Puffer: string;
- procedure OnTimerProcedure(Sender: TObject);
- procedure HTTPdata(Sender: TObject; Buffer: Pointer; Len: Integer);
- procedure DnsLookupDone(Sender: TObject; Error: Word);
- public
- Pingsocket: TPing;
- HttpClient: THTTPCli;
- function nimmParameter(s: String): boolean; override;
- constructor create(AOwner: TComponent); override;
- destructor destroy; override;
- end;
- TFtpFileCompare = class(TTestAufgabe)
- private
- Vergleich: string;
- FTPClient1: TFTPClient;
- refreshVergleich: boolean;
- procedure OnTimerProcedure(Sender: TObject);
- public
- function nimmParameter(s: String): boolean; override;
- constructor create(AOwner: TComponent); override;
- destructor destroy; override;
- end;
- TFtpDate = class(TTestAufgabe)
+ tRfcThread = class(tAufgabenThread)
+ private
+ public
+ vergleichAuffrischen: boolean;
+ quelle,vergleich,cert: string;
+ procedure ausfuehren; override;
+ constructor create(besitzer: tTestAufgabe);
+ end;
+
+ tRemoteFileCompare = class(tTestAufgabe)
+ private
+ public
+ function nimmParameter(s: string): boolean; override;
+ constructor create;
+ end;
+
+(* TFtpDate = class(TTestAufgabe)
private
dt: longint;
FTPClient1: TFTPClient;
@@ -160,12 +147,10 @@ type
end; *)
function loeseLogischenTerm(s: string): tBedingung;
-//function unescape(s: string): string;
-//function mystrtotime(s: string): TDatetime;
implementation
-uses lowlevelunit;
+uses lowlevelunit, forms;
// logischer Term **************************************************************
@@ -228,76 +213,7 @@ begin
end;
end{of case};
end;
-(*
-// Hilfskonvertierung **********************************************************
-function unescape(s: string): string;
-begin
- result:='';
- while pos('#',s)>0 do
- begin
- result:=result+copy(s,1,pos('#',s)-1);
- delete(s,1,pos('#',s));
- try
- result:=result+char(strtoint(copy(s,1,pos('*',s)-1)));
- delete(s,1,pos('*',s));
- except
- result:=result+'#';
- end;
- end;
- result:=result+s;
-end;
-
-(*
-function istMESZ: boolean;
-const TIME_ZONE_ID_UNKNOWN = 0;
- TIME_ZONE_ID_STANDARD = 1;
- TIME_ZONE_ID_DAYLIGHT = 2;
-var TZ : TTimeZoneInformation;
-begin
- case GetTimeZoneInformation(TZ) of
- TIME_ZONE_ID_STANDARD: result:=false;
- TIME_ZONE_ID_DAYLIGHT: result:=true;
- else result:=false;
- end;
-end;
-*)
-
-function mystrtotime(s: string): TDatetime;
-//const monate: array[1..12] of string = ('Jan','Feb','Mar','Apr','May','Jun',
-// 'Jul','Aug','Sep','Oct','Nov','Dec');
-var //i: integer;
- y,mo,t,h,mi: word;
-begin
- h:=strtoint(copy(s,1,pos(':',s)-1));
- delete(s,1,pos(':',s));
- mi:=strtoint(copy(s,1,pos(' ',s)-1));
- delete(s,1,pos(' ',s));
- t:=strtoint(copy(s,1,pos('.',s)-1));
- delete(s,1,pos('.',s));
- mo:=strtoint(copy(s,1,pos('.',s)-1));
- delete(s,1,pos('.',s));
- y:=strtoint(s);
- result:=EncodeDate(y,mo,t) + EncodeTime(h,mi,0,0);
-(* decodeDate(now,y,mo,t);
- mo:=1;
- for i:=1 to 12 do
- if copy(s,1,3)=monate[i] then
- mo:=i;
- delete(s,1,pos(' ',s));
- while s[1]=' ' do delete(s,1,1);
- t:=strtoint(copy(s,1,pos(' ',s)-1));
- delete(s,1,pos(' ',s));
- while s[1]=' ' do delete(s,1,1);
- h:=strtoint(copy(s,1,pos(':',s)-1));
- delete(s,1,pos(':',s));
- mi:=strtoint(s);
- result:= EncodeDate(y,mo,t) + EncodeTime(h,mi,0,0);
- if result>Jetzt then
- result:= EncodeDate(y-1,mo,t) + EncodeTime(h,mi,0,0);
- if istMESZ then result:=result+1/24; *)
-end;
-*)
// tAufgabenThread *************************************************************
constructor tAufgabenThread.create(besitzer: tTestAufgabe);
@@ -392,11 +308,9 @@ begin
s:=s+' (testIP)';
if self is tTestPing then
s:=s+' (testPing)';
-(* if self is tTestDnsLookup then
- s:=s+' (testDnsLookup)';
- if self is tFtpFileCompare then
- s:=s+' (ftpFileCompare)';
- if self is tFtpDate then
+ if self is tRemoteFileCompare then
+ s:=s+' (remoteFileCompare)';
+(* if self is tFtpDate then
s:=s+' (ftpDate)';
if self is tHttpCompare then
s:=s+' (httpCompare)'; *)
@@ -465,13 +379,6 @@ begin
setlength(geraet,0);
end;
-destructor tIpThread.destroy;
-begin
- setlength(werSollIchSein,0);
- setlength(geraet,0);
- inherited destroy;
-end;
-
procedure tIpThread.ausfuehren;
var
ausgabe: string;
@@ -504,11 +411,10 @@ end;
function tTestIp.nimmParameter(s: string): boolean;
var
i,j: longint;
- ger,ip: string;
begin
result:=false;
- ger:=erstesArgument(s,':');
- ip:=s;
+ (_thread as tIpThread).geraet:=erstesArgument(s,':');
+ (_thread as tIpThread).werSollIchSein:=s;
if pos('/',s)=0 then exit;
s[pos('/',s)]:='.';
s:=s+'.';
@@ -521,10 +427,6 @@ begin
delete(s,1,pos('.',s));
end;
result:=length(s)=0;
- if result then begin
- (_thread as tIpThread).werSollIchSein:=ip;
- (_thread as tIpThread).geraet:=ger;
- end;
end;
// tPingThread *****************************************************************
@@ -536,12 +438,6 @@ begin
setlength(wen,0);
end;
-destructor tPingThread.destroy;
-begin
- wen:='';
- inherited destroy;
-end;
-
procedure tPingThread.ausfuehren;
var
ausgabe: string;
@@ -551,9 +447,7 @@ begin
setlength(argumente,2);
argumente[0]:='-c1';
argumente[1]:=wen;
- status:=byte(runCommand('ping',argumente,ausgabe));
- if status=1 then
- status:=byte(pos('1 packets transmitted, 1 received, 0% packet loss, time',ausgabe)<>0);
+ status:=byte(runCommand('ping',argumente,ausgabe) and (pos('1 packets transmitted, 1 received, 0% packet loss, time',ausgabe)<>0));
setlength(argumente,0);
end;
@@ -571,283 +465,88 @@ begin
result:=true;
end;
-(*
-// TTestDNSLookup **************************************************************
+// tFfcThread ******************************************************************
-constructor TTestDNSLookup.create(AOwner: TComponent);
+constructor tRfcThread.create(besitzer: tTestAufgabe);
begin
- inherited create(AOwner);
- Pingsocket:=TPing.Create(AOwner);
- HttpClient:=THTTPCli.Create(AOwner);
- HttpClient.OnDocData:=HTTPdata;
- Pingsocket.OnDnsLookupDone:=DnsLookupDone;
- InnerTimerProcedure:=OnTimerProcedure;
- Puffer:='';
-end;
-
-destructor TTestDNSLookup.destroy;
-begin
- Pingsocket.destroy;
- HttpCLient.destroy;
- inherited destroy;
-end;
-
-procedure TTestDNSLookup.OnTimerProcedure(Sender: TObject);
-begin
- try
- DNS_IP:='';
- HTTP_IP:='';
- PingSocket.DnsLookup(host);
- HttpClient.URL:=ipVergleich;
- HttpClient.Get;
- except
- Log('Ich bin aus dem try-except geflogen!');
- Status:=0;
- end;
-end;
-
-procedure TTestDNSLookup.DnsLookupDone(Sender: TObject; Error: Word);
-begin
- if Error<>0 then
- begin
- Log('DnsLookupDone liefert Fehler '+inttostr(Error)+'!=0');
- Status:=0;
- exit;
- end;
- DNS_IP:= PingSocket.DnsResult;
- if (HTTP_IP<>'') then
- Status:=Byte(HTTP_IP=DNS_IP);
-end;
-
-function TTestDNSLookup.nimmParameter(s: String): boolean;
-begin
- result:=false;
- if (length(S)=0) or (S[1]<>'"') then exit;
- delete(S,1,1);
- if pos('"',S)=0 then exit;
- host:=unescape(copy(S,1,pos('"',S)-1));
- delete(S,1,pos('"',S));
- if pos('"',S)=0 then exit;
- delete(S,1,pos('"',S));
- if pos('"',S)=0 then exit;
- ipVergleich:=unescape(copy(S,1,pos('"',S)-1));
- delete(S,1,pos('"',S));
- if pos('"',S)=0 then exit;
- delete(S,1,pos('"',S));
- if pos('"',S)=0 then exit;
- klammerAuf:=unescape(uppercase(copy(S,1,pos('"',S)-1)));
- delete(S,1,pos('"',S));
- if pos('"',S)=0 then exit;
- delete(S,1,pos('"',S));
- if pos('"',S)=0 then exit;
- klammerZu:=unescape(uppercase(copy(S,1,pos('"',S)-1)));
- delete(S,1,pos('"',S));
- if length(S)>0 then exit;
- result:=true;
-end;
-
-procedure TTestDNSLookup.HTTPdata(Sender: TObject; Buffer: Pointer; Len: Integer);
-var S: String;
- I,J: Integer;
-begin
- Setlength(S,Len);
- Move(Buffer^,S[1],Len);
- S:=uppercase(S);
- Puffer:=Puffer+S;
- if pos(klammerAuf,Puffer)=0 then exit;
- while pos(klammerAuf,Puffer)<>0 do
- delete(Puffer,1,pos(klammerAuf,Puffer)+length(klammerAuf)-1);
- if pos(klammerZu,Puffer)=0 then
- begin
- Puffer:=klammerAuf+Puffer;
- exit;
- end;
- delete(Puffer,pos(KlammerZu,Puffer),length(Puffer)-pos(KlammerZu,Puffer)+1);
- J:=0;
- For I:=length(Puffer) downto 1 do
- case J of
- 0..2,4..6,8..10,12..14:
- case Puffer[I] of
- '0'..'9': inc(J);
- '.': J:=(J div 4 +1) *4;
- else J:=-1;
- end{of Case};
- 3,7,11:
- if Puffer[I] ='.' then inc(J)
- else J:=-1;
- end{of Case};
- if J in [13..16] then HTTP_IP:=Puffer
- else
- begin
- Log('Ich finde die IP-Adresse nicht im HTML-Dokument!');
- Status:=0;
- exit;
- end;
- Puffer:='';
- if (DNS_IP<>'') then
- Status:=Byte(HTTP_IP=DNS_IP);
+ inherited create(besitzer);
+ vergleichAuffrischen:=false;
+ fillchar(quelle,sizeof(quelle),#0);
+ setlength(quelle,0);
+ fillchar(vergleich,sizeof(vergleich),#0);
+ setlength(vergleich,0);
+ fillchar(cert,sizeof(cert),#0);
+ setlength(cert,0);
end;
-// TFtpFileCompare *************************************************************
-
-procedure TFtpFileCompare.OnTimerProcedure(Sender: TObject);
-var s,User,Pass,Host,HostDir,HostFile: string;
- i,j: integer;
- f1,f2: file;
- a1,a2: array of byte;
- AOwner: tComponent;
-const Zeichen = '1234567890qwertzuiopasdfghjklyxcvbnm';
-begin
- j:=0;
- s:='';
- repeat
- if s<>'' then sleep(100);
- s:=extractfilepath(Paramstr(0));
- s:=s+'download';
- s:=s+floattostr(now);
- for i:=1 to 10 do
- s:=s + Zeichen[1+random(length(Zeichen))];
- s:=s+'.txt';
- inc(j);
- until (not fileexists(s)) or (j>10000);
- FTPClient1.LocalFileName:=s;
- try
- FTPClient1.Receive;
- if not fileexists(s) then begin
- Log('Datei wurde beim Herunterladen nicht auf der Festplatte erzeugt!');
+procedure tRfcThread.ausfuehren;
+var
+ argumente: array of string;
+ ausgabe,buf: string;
+ f: file;
+begin
+ setlength(argumente,3+2*byte(cert<>''));
+ argumente[0]:='-o';
+ argumente[1]:='-';
+ if cert<>'' then begin
+ argumente[2]:='--cacert';
+ argumente[3]:=cert;
+ end;
+ argumente[2+2*byte(cert<>'')]:=quelle;
+ ausgabe:='';
+ if not runCommand('curl',argumente,ausgabe) then begin
status:=0;
- AOwner:=FTPClient1.Owner;
- User:=FTPCLient1.Username;
- Pass:=FTPCLient1.Password;
- Host:=FTPCLient1.HostName;
- HostDir:=FTPCLient1.HostDirName;
- HostFile:=FTPCLient1.HostFileName;
- FTPClient1.Free;
- FTPClient1:=tFTPClient.create(AOwner);
- FTPCLient1.Username:=User;
- FTPCLient1.Password:=Pass;
- FTPCLient1.HostName:=Host;
- FTPCLient1.HostDirName:=HostDir;
- FTPCLient1.HostFileName:=HostFile;
+ setlength(argumente,0);
exit;
end;
- assignfile(f1,s);
- assignfile(f2,vergleich);
- reset(f1,1);
- reset(f2,1);
- setlength(a1,filesize(f1));
- setlength(a2,filesize(f2));
- blockread(f1,a1[0],length(a1));
- blockread(f2,a2[0],length(a2));
- closefile(f1);
- closefile(f2);
- except
- Log('Ich bin aus dem try-except geflogen!');
- deletefile(pchar(s));
- status:=0;
- exit;
- end;
- j:=0;
- if length(a1)=length(a2) then
- begin
- j:=1;
- for i:=0 to length(a1)-1 do
- if a1[i]<>a2[i] then
- j:=0;
- end;
- if refreshVergleich then
- begin
- refreshVergleich:=false;
- reset(f1,1);
- rewrite(f2,1);
- setlength(a1,filesize(f1));
- blockread(f1,a1[0],length(a1));
- blockwrite(f2,a1[0],length(a1));
- closefile(f1);
- closefile(f2);
+ setlength(argumente,0);
+ assignFile(f,vergleich);
+ if vergleichAuffrischen then begin
+ rewrite(f,1);
+ blockwrite(f,ausgabe[1],length(ausgabe));
+ close(f);
+ end;
+ reset(f,1);
+ if fileSize(f)<>length(ausgabe) then begin
+ status:=0;
+ closeFile(f);
+ exit;
end;
- deletefile(pchar(s));
- status:=j;
+ setlength(buf,length(ausgabe));
+ blockRead(f,buf[1],length(buf));
+ closeFile(f);
+ status:=byte(ausgabe=buf);
end;
-function TFtpFileCompare.nimmParameter(s: String): boolean;
-var Vergl,User,Pass,Host,HostDir,HostFile: String;
-begin
- if (length(s)>0) and (s[1]='*') then
- begin
- delete(s,1,1);
- refreshVergleich:=true;
- end;
- if pos('/',s)=0 then
- begin
- result:=false;
- exit;
- end;
- Vergl:=copy(s,1,pos('/',s)-1);
- delete(s,1,pos('/',s));
- if pos(':',s)=0 then
- begin
- result:=false;
- exit;
- end;
- user:=copy(s,1,pos(':',s)-1);
- delete(s,1,pos(':',s));
- if pos('@',s)=0 then
- begin
- result:=false;
- exit;
- end;
- pass:=copy(s,1,pos('@',s)-1);
- delete(s,1,pos('@',s));
- if pos('/',s)=0 then
- begin
- result:=false;
- exit;
- end;
- Host:=copy(s,1,pos('/',s)-1);
- delete(s,1,pos('/',s));
- HostDir:='/';
- while pos('/',s)>0 do
- begin
- HostDir:=HostDir+copy(s,1,pos('/',s));
- delete(s,1,pos('/',s));
- end;
- HostFile:=s;
-
- Vergleich:=Vergl;
- FTPCLient1.Username:=User;
- FTPCLient1.Password:=Pass;
- FTPCLient1.HostName:=Host;
- FTPCLient1.HostDirName:=HostDir;
- FTPCLient1.HostFileName:=HostFile;
- result:=true;
-end;
+// tRemoteFileCompare **********************************************************
-constructor TFtpFileCompare.create(AOwner: TComponent);
-var SR: TSearchRec;
- err: integer;
+function tRemoteFileCompare.nimmParameter(s: string): boolean;
begin
- inherited create(AOwner);
- err:=Sysutils.Findfirst(extractfilepath(Paramstr(0))+'download*.txt',$00,SR);
- while err=0 do
- begin
-// Form1.Memo2.Lines.add(extractfilepath(Paramstr(0))+SR.Name);
- if fileexists(extractfilepath(Paramstr(0))+SR.Name) then
- deletefile(PChar(extractfilepath(Paramstr(0))+SR.Name));
- err:=Sysutils.Findnext(SR);
+ result:=false;
+ with _thread as tRfcThread do begin
+ vergleichAuffrischen:=startetMit('*',s);
+ if pos(';',s)=0 then exit;
+ vergleich:=erstesArgument(s,';');
+ if pos(';',s)=0 then cert:=''
+ else cert:=erstesArgument(s,';');
+ quelle:=s;
+ if pos('/',vergleich)=0 then
+ vergleich:=extractFilePath(application.exeName)+vergleich;
+ if pos('/',cert)=0 then
+ cert:=extractFilePath(application.exeName)+cert;
+ result:=fileexists(vergleich);
+ if (cert<>'') and not fileexists(cert) then
+ result:=false;
end;
- Sysutils.Findclose(SR);
- FTPCLient1:=TFTPCLient.Create(AOwner);
- InnerTimerProcedure:=OnTimerProcedure;
- refreshVergleich:=false;
end;
-destructor TFtpFileCompare.destroy;
+constructor tRemoteFileCompare.create;
begin
- FTPClient1.Free;
- inherited destroy;
+ inherited create;
+ _thread:=tRfcThread.create(self);
end;
+(*
// TFtpDate ********************************************************************
procedure TFtpDate.OnTimerProcedure(Sender: TObject);
diff --git a/tests.konf b/tests.konf
index 6612a75..b9269d4 100644
--- a/tests.konf
+++ b/tests.konf
@@ -6,12 +6,8 @@ ping 1_s 100 50 .13 (ping) 192.168.0.13
(ping) 1_s 100 50 .18 (ping) 192.168.0.18
ping 0_1_& 600 50 google (ping) www.google.de
ping 0_1_& 600 50 eckner.net (ping) eckner.net
-##ping 0_1_& 600 50 ... (ping) www.wieistmeineip.de
-#ftpcmp 0_3_& 600 50 Festplatte status.txt/erich:erichmitgrossemE@192.168.0.15/tmp/ftpstatus
+remcmp 0_3_& 600 50 Festplatte status.txt;ftp://erich:erichmitgrossemE@192.168.0.15/tmp/ftpstatus
#ftpdate 0_3_&0_7_& 60000 60000 Festplattenjob 90/erich:erichmitgrossemE@192.168.0.15/tmp/ftpstatus.time
-#ping 100 50 .9 (ping) 192.168.0.9
-#httpcmp 0_4_& 600 50 Musik-Crypto musikStatus.txt:http://192.168.0.18/status.php
-#httpcmp 0_2_&0_6_& 600 100 dns dnsStatus.txt:http://eckner.net/iptest.php
-#checkprocess 600 50 rsync rsync.exe
-##dnslookup 0_2_&0_7_& 600 100 dns "home.eckner.net","http://www.wieistmeineip.de/","<div class="title"><strong>","</strong></div>"
-##ping 0_1_& 600 50 cwsurf (ping) overlock.cwsurf.de
+remcmp 0_4_& 600 50 Musik-Crypto musikStatus.txt;http://192.168.0.18/status.php
+remcmp 0_2_&0_6_& 600 100 dns dnsStatus.txt;ca.crt;https://eckner.net/iptest.php
+
diff --git a/unit1.pas b/unit1.pas
index 7282e0c..231833d 100644
--- a/unit1.pas
+++ b/unit1.pas
@@ -113,9 +113,8 @@ begin
t:=copy(t,2,length(t)-2);
if t='ip' then pruefListe[length(pruefliste)-1]:=tTestIp.create
else if t='ping' then pruefListe[length(pruefListe)-1]:=tTestPing.create
-(* else if t='dnslookup' then pruefListe[length(pruefListe)-1]:=TTestDNSLookup.create(Form1)
- else if t='ftpcmp' then pruefListe[length(pruefListe)-1]:=TFtpFileCompare.create(Form1)
- else if t='ftpdate' then pruefListe[length(pruefListe)-1]:=TFtpDate.create(Form1)
+ else if t='remcmp' then pruefListe[length(pruefListe)-1]:=TRemoteFileCompare.create
+(* else if t='ftpdate' then pruefListe[length(pruefListe)-1]:=TFtpDate.create(Form1)
else if t='httpcmp' then pruefListe[length(pruefListe)-1]:=THttpCompare.create(Form1)
else if t='checkprocess' then pruefListe[length(pruefListe)-1]:=TCheckProcess.create(Form1) *)
else begin
@@ -179,11 +178,14 @@ begin
j:=4;
end;
For i:=0 to length(pruefListe)-1 do
- if (j mod 4 = pruefListe[i].status) and
- (pruefListe[i].bedingungErfuellt(stati)) and
- odd(j shr (2+Byte(pruefListe[i].ernst))) then begin
- s:=s + ','#$0D#$0A + pruefListe[i].fehlerNachricht;
- memo1.lines.add(pruefListe[i].fehlerNachricht);
+ if pruefListe[i].bedingungErfuellt(stati) then begin
+ if (j mod 4 = pruefListe[i].status) and
+ odd(j shr (2+Byte(pruefListe[i].ernst))) then begin
+ s:=s + ','#$0D#$0A + pruefListe[i].fehlerNachricht;
+ memo1.lines.add(pruefListe[i].fehlerNachricht);
+ end
+ else
+ memo1.lines.add('nicht: '+pruefListe[i].fehlerNachricht);
end;
s:=s+'!'#0;
delete(s,1,3);
diff --git a/watchdog.lps b/watchdog.lps
index 973a3e0..a048fb1 100644
--- a/watchdog.lps
+++ b/watchdog.lps
@@ -9,7 +9,7 @@
<IsPartOfProject Value="True"/>
<EditorIndex Value="-1"/>
<CursorPos X="12" Y="6"/>
- <UsageCount Value="26"/>
+ <UsageCount Value="27"/>
</Unit0>
<Unit1>
<Filename Value="unit1.pas"/>
@@ -18,9 +18,9 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/>
- <TopLine Value="99"/>
- <CursorPos Y="200"/>
- <UsageCount Value="26"/>
+ <TopLine Value="98"/>
+ <CursorPos X="88" Y="116"/>
+ <UsageCount Value="27"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1>
@@ -29,10 +29,10 @@
<IsPartOfProject Value="True"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="3"/>
- <TopLine Value="504"/>
- <CursorPos X="21" Y="558"/>
- <FoldState Value=" TKjF0w1 T3l00v917 piaoU0O2\"/>
- <UsageCount Value="26"/>
+ <TopLine Value="503"/>
+ <CursorPos X="21" Y="539"/>
+ <FoldState Value=" TKjT0V T3kS0v917 pj7nI05331U"/>
+ <UsageCount Value="27"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
@@ -53,7 +53,7 @@
<Unit5>
<Filename Value="tests.konf"/>
<EditorIndex Value="1"/>
- <CursorPos X="12" Y="8"/>
+ <CursorPos X="70" Y="12"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="None"/>
@@ -61,123 +61,124 @@
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
- <Filename Value="komponenten.pas"/>
- <Caret Line="35" TopLine="18"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="69" Column="20" TopLine="47"/>
</Position1>
<Position2>
- <Filename Value="komponenten.pas"/>
- <Caret Line="319" TopLine="239"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="115" Column="67" TopLine="100"/>
</Position2>
<Position3>
- <Filename Value="unit1.pas"/>
- <Caret Line="75" Column="85" TopLine="55"/>
+ <Filename Value="komponenten.pas"/>
+ <Caret Line="558" Column="21" TopLine="504"/>
</Position3>
<Position4>
<Filename Value="komponenten.pas"/>
- <Caret Line="332" Column="21" TopLine="239"/>
+ <Caret Line="231" TopLine="79"/>
</Position4>
<Position5>
<Filename Value="komponenten.pas"/>
- <Caret Line="240" Column="77" TopLine="85"/>
+ <Caret Line="671" TopLine="628"/>
</Position5>
<Position6>
<Filename Value="komponenten.pas"/>
+ <Caret Line="154" TopLine="111"/>
</Position6>
<Position7>
<Filename Value="komponenten.pas"/>
- <Caret Line="53" Column="23" TopLine="17"/>
+ <Caret Line="506" Column="14" TopLine="421"/>
</Position7>
<Position8>
<Filename Value="komponenten.pas"/>
- <Caret Line="516" Column="50" TopLine="475"/>
+ <Caret Line="516" Column="26" TopLine="493"/>
</Position8>
<Position9>
<Filename Value="komponenten.pas"/>
- <Caret Line="19"/>
+ <Caret Line="315" Column="23" TopLine="276"/>
</Position9>
<Position10>
<Filename Value="komponenten.pas"/>
- <Caret Line="555" Column="53" TopLine="540"/>
+ <Caret Line="541" TopLine="498"/>
</Position10>
<Position11>
<Filename Value="komponenten.pas"/>
- <Caret Line="560" Column="26" TopLine="460"/>
+ <Caret Line="540" Column="23" TopLine="511"/>
</Position11>
<Position12>
<Filename Value="komponenten.pas"/>
- <Caret Line="579" Column="21" TopLine="551"/>
+ <Caret Line="602" Column="36" TopLine="574"/>
</Position12>
<Position13>
<Filename Value="komponenten.pas"/>
- <Caret Line="83" TopLine="64"/>
+ <Caret Line="549" Column="46" TopLine="527"/>
</Position13>
<Position14>
<Filename Value="komponenten.pas"/>
- <Caret Line="568" Column="3" TopLine="557"/>
+ <Caret Line="442" TopLine="375"/>
</Position14>
<Position15>
<Filename Value="komponenten.pas"/>
- <Caret Line="100" Column="23" TopLine="67"/>
+ <Caret Line="425" TopLine="393"/>
</Position15>
<Position16>
<Filename Value="komponenten.pas"/>
- <Caret Line="62" Column="25" TopLine="40"/>
+ <Caret Line="549" Column="40" TopLine="527"/>
</Position16>
<Position17>
<Filename Value="komponenten.pas"/>
- <Caret Line="82" Column="25" TopLine="60"/>
+ <Caret Line="157" Column="25" TopLine="92"/>
</Position17>
<Position18>
<Filename Value="komponenten.pas"/>
- <Caret Line="100" Column="25" TopLine="78"/>
+ <Caret Line="549" Column="34" TopLine="527"/>
</Position18>
<Position19>
<Filename Value="komponenten.pas"/>
- <Caret Line="359" TopLine="332"/>
+ <Caret Line="158" Column="24" TopLine="104"/>
</Position19>
<Position20>
<Filename Value="komponenten.pas"/>
- <Caret Line="568" Column="21" TopLine="478"/>
+ <Caret Line="157" Column="27" TopLine="120"/>
</Position20>
<Position21>
<Filename Value="komponenten.pas"/>
- <Caret Line="85" Column="4" TopLine="49"/>
+ <Caret Line="158" Column="11" TopLine="120"/>
</Position21>
<Position22>
<Filename Value="komponenten.pas"/>
- <Caret Line="478" Column="12" TopLine="410"/>
+ <Caret Line="157" Column="28" TopLine="157"/>
</Position22>
<Position23>
<Filename Value="komponenten.pas"/>
- <Caret Line="507" TopLine="478"/>
+ <Caret Line="560" Column="19" TopLine="538"/>
</Position23>
<Position24>
<Filename Value="komponenten.pas"/>
- <Caret Line="568" Column="13" TopLine="542"/>
+ <Caret Line="561" TopLine="528"/>
</Position24>
<Position25>
<Filename Value="komponenten.pas"/>
- <Caret Line="506" Column="58" TopLine="393"/>
+ <Caret Line="117" TopLine="95"/>
</Position25>
<Position26>
<Filename Value="komponenten.pas"/>
- <Caret Line="100" TopLine="61"/>
+ <Caret Line="513" Column="15" TopLine="491"/>
</Position26>
<Position27>
<Filename Value="komponenten.pas"/>
- <Caret Line="568" TopLine="546"/>
+ <Caret Line="508" Column="37" TopLine="497"/>
</Position27>
<Position28>
<Filename Value="komponenten.pas"/>
- <Caret Line="574" TopLine="551"/>
+ <Caret Line="291" Column="39" TopLine="161"/>
</Position28>
<Position29>
- <Filename Value="unit1.pas"/>
- <Caret Line="69" Column="20" TopLine="47"/>
+ <Filename Value="komponenten.pas"/>
+ <Caret Line="526" Column="9" TopLine="505"/>
</Position29>
<Position30>
<Filename Value="unit1.pas"/>
- <Caret Line="115" Column="67" TopLine="100"/>
+ <Caret Line="116" Column="88" TopLine="98"/>
</Position30>
</JumpHistory>
</ProjectSession>