summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-11-25 10:13:28 +0100
committerErich Eckner <git@eckner.net>2015-11-25 10:13:28 +0100
commit94f78a08e925488b8b91ad48e8ee0d9b3c7fabf9 (patch)
treed2a4af7d40d4637153f90a5d2b036ea1b8a4d807
parenta10d149a6cc8ac14959e3908d8da1ec844e2f74d (diff)
downloadNetzwerkwatchdog-94f78a08e925488b8b91ad48e8ee0d9b3c7fabf9.tar.xz
RemoteFileDate sollte jetzt auch gehen; Zertifikat für blinne.net
eingefügt
-rw-r--r--ca.crt37
-rw-r--r--komponenten.pas351
-rw-r--r--tests.konf2
-rw-r--r--unit1.lfm2
-rw-r--r--unit1.pas8
-rw-r--r--watchdog.lps115
6 files changed, 188 insertions, 327 deletions
diff --git a/ca.crt b/ca.crt
new file mode 100644
index 0000000..8ebfd77
--- /dev/null
+++ b/ca.crt
@@ -0,0 +1,37 @@
+-----BEGIN CERTIFICATE-----
+MIIGgzCCBGugAwIBAgIJAPqOuFubNmvJMA0GCSqGSIb3DQEBBQUAMIGHMQswCQYD
+VQQGEwJERTEMMAoGA1UECBMDTlJXMRswGQYDVQQHExJNdWVsaGVpbSBhLmQuIFJ1
+aHIxFDASBgNVBAoTC0hvbWVyZWNvcmRzMRcwFQYDVQQDEw5Ib21lcmVjb3JkcyBD
+QTEeMBwGCSqGSIb3DQEJARYPbmV3c0BibGlubmUubmV0MB4XDTE1MDMzMTEwMTQw
+M1oXDTIwMDMzMDEwMTQwM1owgYcxCzAJBgNVBAYTAkRFMQwwCgYDVQQIEwNOUlcx
+GzAZBgNVBAcTEk11ZWxoZWltIGEuZC4gUnVocjEUMBIGA1UEChMLSG9tZXJlY29y
+ZHMxFzAVBgNVBAMTDkhvbWVyZWNvcmRzIENBMR4wHAYJKoZIhvcNAQkBFg9uZXdz
+QGJsaW5uZS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJxIeq
+JMT4jJ0FupHHWVzdI8PQdDNLH11/lL7GGEqQ9Tmh3etNPXoNz6TGwpTIVJ8Gpl81
+4ZTR4gXxc4h/eN4kDNdJc9/I3971ExOi2aAwrtx++aFQ7tm6PhOjNudLq6m4gq32
+4k6dW6Z9jTXafF3Wav+gfo79R+3sLpGhdLE65Mq7m4JR/KHONXsJ8T5h6fjK9SmD
+B3IDCZyk7AK0pCSwZgDg07vGK+qRw8CrmeUGFn31ggU/dzfiaj3e62nGhNSnbY9h
+N7KmLMLmt3YD6INiPctiUU8fG5x6x3Tk5i2ylKTPZdl0DWm6d3oO8/0nXaY9CHwT
+yCIGOfLNID71dL8ahcKJf83LbR0whDBq4Motx8AKJpEbkAgcd44WD8zju+MEMQDo
+MnMd3yArSvf2CBbAnhb4Tl0HTgbvWjmU7pl+aNt//ge7jr9hLnW3i1x/+GaPH3+o
+F0S/7sK40efRz3WiJQt2xryZd0akHlbS/RIjeb9ynLU56Oler3AjHo39O8JnVQfR
+XTvfabWfaK8TJAp3mov2mxQT1r4Kwvs2nxM55Tkp5iV7EvY5aF3xN1wIa1qPblyK
+8+Lo/84WPfGpXFpkBwleNpLEThAmhEu5j354SYhKZzOiDBs73mdTqCauYfiBWHQl
+UsnEvmbVoKQ0MizlSPfdjKQg4RD1Z6R9EqY1WwIDAQABo4HvMIHsMB0GA1UdDgQW
+BBRKNlswJP6gX1PmTv2UZmNNgUB6XDCBvAYDVR0jBIG0MIGxgBRKNlswJP6gX1Pm
+Tv2UZmNNgUB6XKGBjaSBijCBhzELMAkGA1UEBhMCREUxDDAKBgNVBAgTA05SVzEb
+MBkGA1UEBxMSTXVlbGhlaW0gYS5kLiBSdWhyMRQwEgYDVQQKEwtIb21lcmVjb3Jk
+czEXMBUGA1UEAxMOSG9tZXJlY29yZHMgQ0ExHjAcBgkqhkiG9w0BCQEWD25ld3NA
+Ymxpbm5lLm5ldIIJAPqOuFubNmvJMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF
+BQADggIBAIDe63nwyn4hd9YdgnraA/S/a/TrHdZ4bXVx0CcBFuZT8eACv0qBTmMd
+CHuaAj2R0bXBQRvTyX6ZYfhfJN+0nHCHsqa4GxLGKhHmdzl/14ZlDDmhGW2adN5W
+BqXxNNIpkLp/lVl7cTRS+68uzTZwkqt2+cRw/nvFYu5PhIWGT5D9+hcbNJUA2I85
+0+QonghtjJ1+GFUEV90A9MFnQdf5p72SuxGayxr4cRRkvF4ELatv63WJFEExWaba
+YSvsCKanvO2Q5+2Ce2djT/VtNzj56PZfpidxqD7ILkliXVNmD45o/88qjwRxlXhL
+sedWU+PXCCN+EuaCgeV9pGK23PN8Blh50zKetpa2UA0oMTHmGMEKO55/xMHbYQH1
+IbyFEHK+R6Hy+aRoTDBKdoPjsp1YDIJzgtttjJvpK4dzw/dXUdkHI9F+CMPSGP+0
+2SNjCzhA8dqhkfS0MpFKLzRn5r4Hn2D9ykNnwihBulGKTUcEnGZLKP4KNVfYSh9K
+VcIaTI54ap/A70vzCmuP/rd6D0rHU1eHHHw+udMndvfQ8dBicO9/SkFQ3RTvVXpS
+xv6Em2b0x/3YyZyGXnM2niVG5YVptS3fL6gRQoSGXReqlf1yQf3sh2Bj973i+mAn
+99J2Nrk4QBV5shDFm3JLWk49db8sczMTLTwiMSCM6fmLKXxkNyKP
+-----END CERTIFICATE-----
diff --git a/komponenten.pas b/komponenten.pas
index daa6c63..267a8ae 100644
--- a/komponenten.pas
+++ b/komponenten.pas
@@ -86,15 +86,15 @@ type
private
public
wen: string;
- procedure ausfuehren; override;
constructor create(besitzer: tTestAufgabe);
+ procedure ausfuehren; override;
end;
tTestPing = class(tTestAufgabe)
private
public
- function nimmParameter(s: string): boolean; override;
constructor create;
+ function nimmParameter(s: string): boolean; override;
end;
tRfcThread = class(tAufgabenThread)
@@ -102,49 +102,32 @@ type
public
vergleichAuffrischen: boolean;
quelle,vergleich,cert: string;
- procedure ausfuehren; override;
constructor create(besitzer: tTestAufgabe);
+ procedure ausfuehren; override;
end;
tRemoteFileCompare = class(tTestAufgabe)
private
public
- function nimmParameter(s: string): boolean; override;
constructor create;
+ function nimmParameter(s: string): boolean; override;
+ end;
+
+ tRfdThread = class(tAufgabenThread)
+ private
+ public
+ quelle,cert: string;
+ deltaT: extended;
+ constructor create(besitzer: tTestAufgabe);
+ procedure ausfuehren; override;
end;
-(* TFtpDate = class(TTestAufgabe)
- private
- dt: longint;
- FTPClient1: TFTPClient;
- procedure OnTimerProcedure(Sender: TObject);
- public
- function nimmParameter(s: String): boolean; override;
- constructor create(AOwner: TComponent); override;
- destructor destroy; override;
- end;
- THttpCompare = class(TTestAufgabe)
- private
- Vergleich,buf: string;
- HTTPClient1: THttpCli;
- refreshVergleich,holeGerade: boolean;
- procedure OnTimerProcedure(Sender: TObject);
- procedure OnDocData(Sender: TObject; Buffer : Pointer; Len: Integer);
- procedure OnDocEnd(Sender: TObject);
- public
- function nimmParameter(s: String): boolean; override;
- constructor create(AOwner: TComponent); override;
- destructor destroy; override;
- end;
- TCheckProcess = class(TTestAufgabe)
- private
- exeFileName: string;
- procedure OnTimerProcedure(Sender: TObject);
- public
- function nimmParameter(s: String): boolean; override;
- constructor create(AOwner: TComponent); override;
- destructor destroy; override;
- end; *)
+ tRemoteFileDate = class(tTestAufgabe)
+ private
+ public
+ constructor create;
+ function nimmParameter(s: string): boolean; override;
+ end;
function loeseLogischenTerm(s: string): tBedingung;
@@ -310,10 +293,8 @@ begin
s:=s+' (testPing)';
if self is tRemoteFileCompare then
s:=s+' (remoteFileCompare)';
-(* if self is tFtpDate then
- s:=s+' (ftpDate)';
- if self is tHttpCompare then
- s:=s+' (httpCompare)'; *)
+ if self is tRemoteFileDate then
+ s:=s+' (remoteFileDate)';
log(s);
end;
end;
@@ -465,7 +446,7 @@ begin
result:=true;
end;
-// tFfcThread ******************************************************************
+// tRfcThread ******************************************************************
constructor tRfcThread.create(besitzer: tTestAufgabe);
begin
@@ -546,250 +527,88 @@ begin
_thread:=tRfcThread.create(self);
end;
-(*
-// TFtpDate ********************************************************************
+// tRfdThread ******************************************************************
-procedure TFtpDate.OnTimerProcedure(Sender: TObject);
-var s,t: string;
- i,j: integer;
- z: extended;
- f: textfile;
-const Zeichen = '1234567890qwertzuiopasdfghjklyxcvbnm';
+constructor tRfdThread.create(besitzer: tTestAufgabe);
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;
- assignfile(f,s);
- reset(f);
- readln(f,t);
- closefile(f);
- except
- Log('Ich bin aus dem try-except geflogen (beim Runterladen und Anschauen)!');
- deletefile(pchar(s));
- status:=0;
- exit;
- end;
- deletefile(pchar(s));
-
- try
- z:=mystrtotime(t);
- except
- Log('Ich bin aus dem try-except geflogen (bei der Zeitumwandlung)!');
- status:=0;
- exit;
- end;
- status:=byte(abs(now-z)*60*60*24<=dt);
+ inherited create(besitzer);
+ fillchar(quelle,sizeof(quelle),#0);
+ setlength(quelle,0);
+ fillchar(cert,sizeof(cert),#0);
+ setlength(cert,0);
+ deltaT:=0;
end;
-function TFtpDate.nimmParameter(s: String): boolean;
-var User,Pass,Host,HostDir,HostFile: String;
+procedure tRfdThread.ausfuehren;
+var
+ argumente: array of string;
+ ausgabe: string;
+ rD,lD: longint;
begin
- if pos('/',s)=0 then
- begin
- result:=false;
- exit;
- end;
- dt:=strtoint(copy(s,1,pos('/',s)-1));
- delete(s,1,pos('/',s));
- if pos(':',s)=0 then
- begin
- result:=false;
- exit;
+ setlength(argumente,3+2*byte(cert<>''));
+ argumente[0]:='-o';
+ argumente[1]:='-';
+ if cert<>'' then begin
+ argumente[2]:='--cacert';
+ argumente[3]:=cert;
end;
- user:=copy(s,1,pos(':',s)-1);
- delete(s,1,pos(':',s));
- if pos('@',s)=0 then
- begin
- result:=false;
- exit;
+ argumente[2+2*byte(cert<>'')]:=quelle;
+ ausgabe:='';
+ if not runCommand('curl',argumente,ausgabe) then begin
+ status:=0;
+ setlength(argumente,0);
+ exit;
end;
- pass:=copy(s,1,pos('@',s)-1);
- delete(s,1,pos('@',s));
- if pos('/',s)=0 then
- begin
- result:=false;
- exit;
+ try
+ rD:=strtoint(trim(ausgabe));
+ except
+ status:=0;
+ setlength(argumente,0);
+ 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));
+ setlength(argumente,1);
+ argumente[0]:='+%s';
+ if not runCommand('date',argumente,ausgabe) then begin
+ status:=0;
+ setlength(argumente,0);
+ exit;
end;
- HostFile:=s;
-
- FTPCLient1.Username:=User;
- FTPCLient1.Password:=Pass;
- FTPCLient1.HostName:=Host;
- FTPCLient1.HostDirName:=HostDir;
- FTPCLient1.HostFileName:=HostFile;
- result:=true;
-end;
-
-constructor TFtpDate.create(AOwner: TComponent);
-var SR: TSearchRec;
- err: integer;
-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);
+ setlength(argumente,0);
+ try
+ lD:=strtoint(trim(ausgabe));
+ except
+ status:=0;
+ exit;
end;
- Sysutils.Findclose(SR);
- FTPCLient1:=TFTPCLient.Create(AOwner);
- InnerTimerProcedure:=OnTimerProcedure;
-end;
-
-destructor TFtpDate.destroy;
-begin
- FTPClient1.Free;
- inherited destroy;
-end;
-
-// THttpCompare *************************************************************
-
-procedure THttpCompare.OnTimerProcedure(Sender: TObject);
-begin
- if holeGerade then exit;
- buf:='';
- holeGerade:=true;
- HTTPClient1.GetASync;
+ status:=byte((lD<=rD) and (rD+deltaT>=lD));
end;
-procedure THttpCompare.OnDocData(Sender: TObject; Buffer: Pointer; Len: Integer);
-begin
- setlength(buf,length(buf)+Len);
- move(Buffer^,buf[length(buf)-Len+1],Len);
-end;
+// tRemoteFileDate *************************************************************
-procedure THttpCompare.OnDocEnd(Sender: TObject);
-var f: file;
- s: string;
+constructor tRemoteFileDate.create;
begin
- assignfile(f,vergleich);
-
- if refreshVergleich then begin
- rewrite(f,1);
- blockwrite(f,buf[1],length(buf));
- closefile(f);
- end;
-
- if not fileexists(vergleich) then begin
- status:=1;
- buf:='';
- exit;
- end;
-
- reset(f,1);
- setlength(s,filesize(f));
- blockread(f,s[1],filesize(f));
- closefile(f);
-
- status:=byte(buf=s);
-
- buf:='';
- holeGerade:=false;
+ inherited create;
+ _thread:=tRfdThread.create(self);
end;
-function THttpCompare.nimmParameter(s: String): boolean;
-var Vergl: String;
+function tRemoteFileDate.nimmParameter(s: string): boolean;
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;
+ result:=false;
+ with _thread as tRfdThread do begin
+ if pos(';',s)=0 then exit;
+ try
+ deltaT:=strToInt(erstesArgument(s,';'));
+ except
+ exit;
+ end;
+ if pos(';',s)=0 then cert:=''
+ else cert:=erstesArgument(s,';');
+ quelle:=s;
+ if pos('/',cert)=0 then
+ cert:=extractFilePath(application.exeName)+cert;
+ result:=(cert='') or fileexists(cert);
end;
- Vergl:=copy(s,1,pos(':',s)-1);
- delete(s,1,pos(':',s));
-
- Vergleich:=Vergl;
- HTTPClient1.URL:=s;
- result:=true;
-end;
-
-constructor THttpCompare.create(AOwner: TComponent);
-begin
- inherited create(AOwner);
- HTTPClient1:=THTTPCli.Create(AOwner);
- HTTPClient1.OnDocData:=OnDocData;
- HTTPClient1.OnDocEnd:=OnDocEnd;
- InnerTimerProcedure:=OnTimerProcedure;
- refreshVergleich:=false;
- buf:='';
- holeGerade:=false;
-end;
-
-destructor THttpCompare.destroy;
-begin
- buf:='';
- HTTPClient1.Free;
- inherited destroy;
-end;
-
-// TCheckProcess ***************************************************************
-
-procedure TCheckProcess.OnTimerProcedure(Sender: TObject);
-var ContinueLoop,laeuft: boolean;
- FSnapshotHandle: THandle;
- FProcessEntry32: TProcessEntry32;
-begin
- FSnapshotHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- FProcessEntry32.dwSize:= SizeOf(FProcessEntry32);
- ContinueLoop:= Process32First(FSnapshotHandle, FProcessEntry32);
- laeuft:=false;
- while Integer(ContinueLoop) <> 0 do begin
- if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or
- (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin
- laeuft:=true;
- end;
- ContinueLoop:= Process32Next(FSnapshotHandle, FProcessEntry32);
- end;
- CloseHandle(FSnapshotHandle);
- status:=byte(laeuft);
-end;
-
-function TCheckProcess.nimmParameter(s: String): boolean;
-begin
- exeFileName:=s;
- result:=true;
-end;
-
-constructor TCheckProcess.create(AOwner: TComponent);
-begin
- inherited create(AOwner);
- InnerTimerProcedure:=OnTimerProcedure;
- exeFileName:='';
-end;
-
-destructor TCheckProcess.destroy;
-begin
- exeFileName:='';
- inherited destroy;
end;
-*)
end.
diff --git a/tests.konf b/tests.konf
index b9269d4..cd6cace 100644
--- a/tests.konf
+++ b/tests.konf
@@ -7,7 +7,7 @@ ping 1_s 100 50 .13 (ping) 192.168.0.13
ping 0_1_& 600 50 google (ping) www.google.de
ping 0_1_& 600 50 eckner.net (ping) eckner.net
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
+ftpdate 0_3_&0_7_& 60000 60000 Festplattenjob 90;ftp://erich:erichmitgrossemE@192.168.0.15/tmp/ftpstatus.time
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.lfm b/unit1.lfm
index 1077043..ff701d3 100644
--- a/unit1.lfm
+++ b/unit1.lfm
@@ -1,5 +1,5 @@
object Form1: TForm1
- Left = 417
+ Left = 500
Height = 340
Top = 564
Width = 531
diff --git a/unit1.pas b/unit1.pas
index 231833d..0d78d2c 100644
--- a/unit1.pas
+++ b/unit1.pas
@@ -55,8 +55,8 @@ begin
setlength(pruefListe,0);
readOptions(extractFilePath(application.exeName)+'tests.konf');
- form1.visible:=false;
statusAenderung(self);
+ form1.visible:=false;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
@@ -73,8 +73,14 @@ begin
memo1.height:=form1.clientHeight;
end;
+const __erstesMal: boolean = true;
+
procedure TForm1.FormShow(Sender: TObject);
begin
+ if __erstesMal then begin
+ __erstesMal:=false;
+ form1.visible:=false;
+ end;
form1.left:=screen.monitors[0].left+(screen.monitors[0].width-form1.width) div 2;
form1.top:=screen.monitors[0].top+(screen.monitors[0].height-form1.height-24) div 2;
end;
diff --git a/watchdog.lps b/watchdog.lps
index a048fb1..903cb84 100644
--- a/watchdog.lps
+++ b/watchdog.lps
@@ -9,7 +9,7 @@
<IsPartOfProject Value="True"/>
<EditorIndex Value="-1"/>
<CursorPos X="12" Y="6"/>
- <UsageCount Value="27"/>
+ <UsageCount Value="28"/>
</Unit0>
<Unit1>
<Filename Value="unit1.pas"/>
@@ -18,21 +18,21 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/>
- <TopLine Value="98"/>
- <CursorPos X="88" Y="116"/>
- <UsageCount Value="27"/>
+ <IsVisibleTab Value="True"/>
+ <TopLine Value="58"/>
+ <CursorPos Y="83"/>
+ <UsageCount Value="28"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1>
<Unit2>
<Filename Value="komponenten.pas"/>
<IsPartOfProject Value="True"/>
- <IsVisibleTab Value="True"/>
- <EditorIndex Value="3"/>
- <TopLine Value="503"/>
- <CursorPos X="21" Y="539"/>
- <FoldState Value=" TKjT0V T3kS0v917 pj7nI05331U"/>
- <UsageCount Value="27"/>
+ <EditorIndex Value="2"/>
+ <TopLine Value="556"/>
+ <CursorPos X="29" Y="573"/>
+ <FoldState Value=" T3kB0vA piZkW0X8]9Xk6045#"/>
+ <UsageCount Value="28"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
@@ -44,141 +44,140 @@
</Unit3>
<Unit4>
<Filename Value="../../../Sicherung_Windows/EIGDATEI/DELPHANW/NetzwerkWatchDog/Unit1.pas"/>
- <EditorIndex Value="2"/>
- <TopLine Value="153"/>
+ <EditorIndex Value="-1"/>
+ <TopLine Value="166"/>
<CursorPos Y="209"/>
- <UsageCount Value="13"/>
- <Loaded Value="True"/>
+ <UsageCount Value="14"/>
</Unit4>
<Unit5>
<Filename Value="tests.konf"/>
<EditorIndex Value="1"/>
- <CursorPos X="70" Y="12"/>
- <UsageCount Value="12"/>
+ <CursorPos X="66" Y="10"/>
+ <UsageCount Value="13"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit5>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
- <Filename Value="unit1.pas"/>
- <Caret Line="69" Column="20" TopLine="47"/>
+ <Filename Value="komponenten.pas"/>
+ <Caret Line="157" Column="27" TopLine="120"/>
</Position1>
<Position2>
- <Filename Value="unit1.pas"/>
- <Caret Line="115" Column="67" TopLine="100"/>
+ <Filename Value="komponenten.pas"/>
+ <Caret Line="158" Column="11" TopLine="120"/>
</Position2>
<Position3>
<Filename Value="komponenten.pas"/>
- <Caret Line="558" Column="21" TopLine="504"/>
+ <Caret Line="157" Column="28" TopLine="157"/>
</Position3>
<Position4>
<Filename Value="komponenten.pas"/>
- <Caret Line="231" TopLine="79"/>
+ <Caret Line="560" Column="19" TopLine="538"/>
</Position4>
<Position5>
<Filename Value="komponenten.pas"/>
- <Caret Line="671" TopLine="628"/>
+ <Caret Line="561" TopLine="528"/>
</Position5>
<Position6>
<Filename Value="komponenten.pas"/>
- <Caret Line="154" TopLine="111"/>
+ <Caret Line="117" TopLine="95"/>
</Position6>
<Position7>
<Filename Value="komponenten.pas"/>
- <Caret Line="506" Column="14" TopLine="421"/>
+ <Caret Line="513" Column="15" TopLine="491"/>
</Position7>
<Position8>
<Filename Value="komponenten.pas"/>
- <Caret Line="516" Column="26" TopLine="493"/>
+ <Caret Line="508" Column="37" TopLine="497"/>
</Position8>
<Position9>
<Filename Value="komponenten.pas"/>
- <Caret Line="315" Column="23" TopLine="276"/>
+ <Caret Line="291" Column="39" TopLine="161"/>
</Position9>
<Position10>
<Filename Value="komponenten.pas"/>
- <Caret Line="541" TopLine="498"/>
+ <Caret Line="526" Column="9" TopLine="505"/>
</Position10>
<Position11>
- <Filename Value="komponenten.pas"/>
- <Caret Line="540" Column="23" TopLine="511"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="116" Column="88" TopLine="98"/>
</Position11>
<Position12>
<Filename Value="komponenten.pas"/>
- <Caret Line="602" Column="36" TopLine="574"/>
+ <Caret Line="539" Column="21" TopLine="503"/>
</Position12>
<Position13>
<Filename Value="komponenten.pas"/>
- <Caret Line="549" Column="46" TopLine="527"/>
+ <Caret Line="537" TopLine="529"/>
</Position13>
<Position14>
<Filename Value="komponenten.pas"/>
- <Caret Line="442" TopLine="375"/>
+ <Caret Line="120" Column="18" TopLine="91"/>
</Position14>
<Position15>
<Filename Value="komponenten.pas"/>
- <Caret Line="425" TopLine="393"/>
+ <Caret Line="89" TopLine="43"/>
</Position15>
<Position16>
<Filename Value="komponenten.pas"/>
- <Caret Line="549" Column="40" TopLine="527"/>
+ <Caret Line="563" Column="16" TopLine="501"/>
</Position16>
<Position17>
<Filename Value="komponenten.pas"/>
- <Caret Line="157" Column="25" TopLine="92"/>
+ <Caret Line="45" TopLine="45"/>
</Position17>
<Position18>
<Filename Value="komponenten.pas"/>
- <Caret Line="549" Column="34" TopLine="527"/>
+ <Caret Line="584" Column="46" TopLine="542"/>
</Position18>
<Position19>
<Filename Value="komponenten.pas"/>
- <Caret Line="158" Column="24" TopLine="104"/>
+ <Caret Line="613" TopLine="572"/>
</Position19>
<Position20>
<Filename Value="komponenten.pas"/>
- <Caret Line="157" Column="27" TopLine="120"/>
+ <Caret Line="592" Column="35" TopLine="570"/>
</Position20>
<Position21>
- <Filename Value="komponenten.pas"/>
- <Caret Line="158" Column="11" TopLine="120"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="116" Column="88" TopLine="98"/>
</Position21>
<Position22>
- <Filename Value="komponenten.pas"/>
- <Caret Line="157" Column="28" TopLine="157"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="58" TopLine="50"/>
</Position22>
<Position23>
- <Filename Value="komponenten.pas"/>
- <Caret Line="560" Column="19" TopLine="538"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="85" TopLine="75"/>
</Position23>
<Position24>
- <Filename Value="komponenten.pas"/>
- <Caret Line="561" TopLine="528"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="58" Column="14" TopLine="47"/>
</Position24>
<Position25>
- <Filename Value="komponenten.pas"/>
- <Caret Line="117" TopLine="95"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="37" Column="30" TopLine="15"/>
</Position25>
<Position26>
- <Filename Value="komponenten.pas"/>
- <Caret Line="513" Column="15" TopLine="491"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="58" Column="18" TopLine="22"/>
</Position26>
<Position27>
- <Filename Value="komponenten.pas"/>
- <Caret Line="508" Column="37" TopLine="497"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="137" Column="77" TopLine="102"/>
</Position27>
<Position28>
- <Filename Value="komponenten.pas"/>
- <Caret Line="291" Column="39" TopLine="161"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="142" Column="33" TopLine="136"/>
</Position28>
<Position29>
- <Filename Value="komponenten.pas"/>
- <Caret Line="526" Column="9" TopLine="505"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="78" TopLine="70"/>
</Position29>
<Position30>
<Filename Value="unit1.pas"/>
- <Caret Line="116" Column="88" TopLine="98"/>
+ <Caret Line="79" TopLine="70"/>
</Position30>
</JumpHistory>
</ProjectSession>