summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2016-03-07 10:59:25 +0100
committerErich Eckner <git@eckner.net>2016-03-08 15:37:57 +0100
commit0106b3fb93f9ec1d1f3f31cb1c8f904b1b8c52db (patch)
tree3be31bc1faa843cb4c1997fb9cb51b5410a5b7db
parenta84ce5f9b7596d114782229fbe45005348d2ce4f (diff)
downloadepost-0106b3fb93f9ec1d1f3f31cb1c8f904b1b8c52db.tar.xz
'Sergey-Trace' nun lesbar
-rw-r--r--epost.lps131
-rw-r--r--epostunit.pas68
-rw-r--r--typenunit.pas45
-rw-r--r--werteunit.pas35
4 files changed, 215 insertions, 64 deletions
diff --git a/epost.lps b/epost.lps
index 4f3bf67..ddd4e1a 100644
--- a/epost.lps
+++ b/epost.lps
@@ -3,12 +3,12 @@
<ProjectSession>
<Version Value="9"/>
<BuildModes Active="Default"/>
- <Units Count="17">
+ <Units Count="18">
<Unit0>
<Filename Value="epost.lpr"/>
<IsPartOfProject Value="True"/>
- <TopLine Value="75"/>
- <CursorPos X="5" Y="126"/>
+ <TopLine Value="105"/>
+ <CursorPos Y="402"/>
<FoldState Value=" T0iXW39123111221]65151[84313[4421[Q4121[85]as"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
@@ -25,8 +25,9 @@
<IsPartOfProject Value="True"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
- <TopLine Value="1746"/>
- <CursorPos X="26" Y="1774"/>
+ <TopLine Value="1340"/>
+ <CursorPos X="28" Y="1371"/>
+ <FoldState Value=" T0@3k{V0G1C1I"/>
<UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit2>
@@ -41,36 +42,36 @@
<Filename Value="werteunit.pas"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="2"/>
- <TopLine Value="630"/>
- <CursorPos X="179" Y="717"/>
+ <TopLine Value="379"/>
+ <CursorPos X="20" Y="620"/>
+ <FoldState Value=" T0pekl051X141O"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="typenunit.pas"/>
<IsPartOfProject Value="True"/>
- <EditorIndex Value="5"/>
- <TopLine Value="211"/>
+ <EditorIndex Value="3"/>
+ <TopLine Value="560"/>
+ <CursorPos Y="600"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="../units/fftunit.pas"/>
<IsPartOfProject Value="True"/>
- <EditorIndex Value="3"/>
- <TopLine Value="156"/>
+ <EditorIndex Value="-1"/>
+ <TopLine Value="162"/>
<CursorPos X="56" Y="177"/>
- <UsageCount Value="41"/>
- <Loaded Value="True"/>
+ <UsageCount Value="45"/>
</Unit6>
<Unit7>
<Filename Value="../units/fftunit.inc"/>
<IsPartOfProject Value="True"/>
- <EditorIndex Value="4"/>
- <TopLine Value="55"/>
+ <EditorIndex Value="-1"/>
+ <TopLine Value="10"/>
<CursorPos X="22" Y="10"/>
- <UsageCount Value="38"/>
- <Loaded Value="True"/>
+ <UsageCount Value="42"/>
</Unit7>
<Unit8>
<Filename Value="../fpGUI/src/corelib/render/software/agg_scanline_storage_aa.pas"/>
@@ -89,8 +90,8 @@
<Unit10>
<Filename Value="../units/lowlevelunit.pas"/>
<EditorIndex Value="-1"/>
- <TopLine Value="2"/>
- <CursorPos X="3" Y="22"/>
+ <TopLine Value="17"/>
+ <CursorPos X="3" Y="37"/>
<UsageCount Value="24"/>
</Unit10>
<Unit11>
@@ -109,8 +110,8 @@
<Unit13>
<Filename Value="../units/systemunit.pas"/>
<EditorIndex Value="-1"/>
- <TopLine Value="65"/>
- <CursorPos X="26" Y="80"/>
+ <TopLine Value="127"/>
+ <CursorPos X="72" Y="160"/>
<UsageCount Value="15"/>
</Unit13>
<Unit14>
@@ -134,128 +135,130 @@
<CursorPos X="21" Y="202"/>
<UsageCount Value="7"/>
</Unit16>
+ <Unit17>
+ <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovlh.inc"/>
+ <EditorIndex Value="-1"/>
+ <TopLine Value="61"/>
+ <CursorPos X="10" Y="99"/>
+ <UsageCount Value="10"/>
+ </Unit17>
</Units>
- <JumpHistory Count="30" HistoryIndex="29">
+ <JumpHistory Count="29" HistoryIndex="28">
<Position1>
- <Filename Value="../units/fftunit.pas"/>
- <Caret Line="21" Column="15"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="1055" TopLine="1027"/>
</Position1>
<Position2>
- <Filename Value="../units/fftunit.pas"/>
- <Caret Line="34" Column="41" TopLine="8"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="1352" Column="180" TopLine="1331"/>
</Position2>
<Position3>
- <Filename Value="werteunit.pas"/>
- <Caret Line="715" Column="28" TopLine="682"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="1372" Column="91" TopLine="1352"/>
</Position3>
<Position4>
<Filename Value="werteunit.pas"/>
- <Caret Line="691" Column="27" TopLine="669"/>
+ <Caret Line="639" Column="23" TopLine="620"/>
</Position4>
<Position5>
- <Filename Value="werteunit.pas"/>
- <Caret Line="699" Column="21" TopLine="677"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="1373" Column="193" TopLine="1397"/>
</Position5>
<Position6>
- <Filename Value="epost.lpr"/>
- <Caret Line="95" Column="36" TopLine="43"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="1611" Column="39" TopLine="1603"/>
</Position6>
<Position7>
<Filename Value="epostunit.pas"/>
- <Caret Line="4588" Column="142" TopLine="4564"/>
</Position7>
<Position8>
<Filename Value="epostunit.pas"/>
- <Caret Line="259" Column="133" TopLine="239"/>
+ <Caret Line="78" Column="43" TopLine="45"/>
</Position8>
<Position9>
<Filename Value="epostunit.pas"/>
- <Caret Line="260" Column="129" TopLine="239"/>
+ <Caret Line="802" Column="46" TopLine="790"/>
</Position9>
<Position10>
<Filename Value="epostunit.pas"/>
- <Caret Line="2507" Column="10" TopLine="2501"/>
+ <Caret Line="143" Column="26" TopLine="125"/>
</Position10>
<Position11>
<Filename Value="epostunit.pas"/>
- <Caret Line="2517" Column="10" TopLine="2501"/>
+ <Caret Line="3537" Column="21" TopLine="3525"/>
</Position11>
<Position12>
<Filename Value="epostunit.pas"/>
- <Caret Line="2518" Column="10" TopLine="2501"/>
+ <Caret Line="1370" Column="108" TopLine="1350"/>
</Position12>
<Position13>
<Filename Value="epostunit.pas"/>
- <Caret Line="2519" Column="10" TopLine="2501"/>
+ <Caret Line="358" Column="24" TopLine="338"/>
</Position13>
<Position14>
<Filename Value="epostunit.pas"/>
- <Caret Line="2541" Column="44" TopLine="2518"/>
+ <Caret Line="1370" Column="108" TopLine="1350"/>
</Position14>
<Position15>
<Filename Value="epostunit.pas"/>
- <Caret Line="2583" Column="39" TopLine="2551"/>
+ <Caret Line="518" Column="32" TopLine="493"/>
</Position15>
<Position16>
<Filename Value="epostunit.pas"/>
- <Caret Line="2584" Column="38" TopLine="2552"/>
+ <Caret Line="1370" Column="115" TopLine="1338"/>
</Position16>
<Position17>
<Filename Value="epostunit.pas"/>
- <Caret Line="2586" Column="35" TopLine="2554"/>
+ <Caret Line="1372" Column="7" TopLine="1333"/>
</Position17>
<Position18>
<Filename Value="epostunit.pas"/>
- <Caret Line="2587" Column="47" TopLine="2555"/>
+ <Caret Line="358" Column="22" TopLine="333"/>
</Position18>
<Position19>
<Filename Value="epostunit.pas"/>
- <Caret Line="2606" Column="24" TopLine="2574"/>
+ <Caret Line="581" Column="71" TopLine="558"/>
</Position19>
<Position20>
<Filename Value="epostunit.pas"/>
- <Caret Line="2612" Column="23" TopLine="2580"/>
+ <Caret Line="78" Column="43" TopLine="58"/>
</Position20>
<Position21>
<Filename Value="epostunit.pas"/>
- <Caret Line="2618" Column="30" TopLine="2586"/>
+ <Caret Line="1021" TopLine="1013"/>
</Position21>
<Position22>
<Filename Value="epostunit.pas"/>
- <Caret Line="2624" Column="30" TopLine="2592"/>
+ <Caret Line="1406" Column="45" TopLine="1408"/>
</Position22>
<Position23>
<Filename Value="epostunit.pas"/>
- <Caret Line="2630" Column="30" TopLine="2598"/>
+ <Caret Line="6180" Column="21" TopLine="6162"/>
</Position23>
<Position24>
<Filename Value="epostunit.pas"/>
- <Caret Line="2635" Column="58" TopLine="2603"/>
+ <Caret Line="6178" Column="15" TopLine="6070"/>
</Position24>
<Position25>
- <Filename Value="epostunit.pas"/>
- <Caret Line="2903" Column="10" TopLine="2870"/>
+ <Filename Value="typenunit.pas"/>
+ <Caret Line="49" Column="24" TopLine="26"/>
</Position25>
<Position26>
- <Filename Value="epostunit.pas"/>
- <Caret Line="2911" Column="10" TopLine="2878"/>
+ <Filename Value="typenunit.pas"/>
+ <Caret Line="101" Column="45" TopLine="68"/>
</Position26>
<Position27>
- <Filename Value="epostunit.pas"/>
- <Caret Line="2912" Column="10" TopLine="2879"/>
+ <Filename Value="werteunit.pas"/>
+ <Caret Line="646" Column="7" TopLine="627"/>
</Position27>
<Position28>
- <Filename Value="epostunit.pas"/>
- <Caret Line="2913" Column="10" TopLine="2880"/>
+ <Filename Value="werteunit.pas"/>
+ <Caret Line="633" Column="26" TopLine="602"/>
</Position28>
<Position29>
<Filename Value="epostunit.pas"/>
- <Caret Line="2919" Column="27" TopLine="2910"/>
+ <Caret Line="1371" Column="86" TopLine="1343"/>
</Position29>
- <Position30>
- <Filename Value="epostunit.pas"/>
- <Caret Line="128" Column="26" TopLine="109"/>
- </Position30>
</JumpHistory>
</ProjectSession>
</CONFIG>
diff --git a/epostunit.pas b/epostunit.pas
index 4a0f67b..208e2b7 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -1012,6 +1012,17 @@ begin
end;
continue;
end;
+ if startetMit('Sergey-Trace:',s) then begin
+ if not directoryexists(s) then begin
+ gibAus(''''+s+''' ist kein Verzeichnis!',3);
+ aufraeumen;
+ exit;
+ end;
+ setlength(dateien,length(dateien)+1);
+ dateien[length(dateien)-1]:=tSergeyInputDateiInfo.create(Vorlagen.SergeyVorlage);
+ dateien[length(dateien)-1].Name:=s;
+ continue;
+ end;
if startetMit('Pipe:',s) then begin
setlength(dateien,length(dateien)+1);
dateien[length(dateien)-1]:=tPipeInputDateiInfo.create(Vorlagen.PipeVorlage);
@@ -1035,6 +1046,7 @@ var
tmpd: double;
tmpe: extended;
f: file;
+ tf: textfile;
Positionen: tLongintArray;
Sortiert: tGenerischeInputDateiInfoArray;
ipp,ipap: tProcess;
@@ -1315,6 +1327,62 @@ begin
close(f);
Positionen[i]:=0;
end;
+ if dateien[i] is tSergeyInputDateiInfo then begin
+ if (i<>0) or (length(dateien)<>1) then begin
+ gibAus('Ich kann Sergey Trace-Dateien nicht kaskadieren!',3);
+ exit;
+ end;
+
+ if rightstr(dateien[i].Name,1)<>'/' then
+ dateien[i].Name:=dateien[i].Name+'/';
+
+ if not fileexists(dateien[i].Name+'numberoftimesteps') then begin
+ gibAus('Datei '''+dateien[i].Name+'numberoftimesteps'' existiert nicht!',3);
+ exit;
+ end;
+ if not fileexists(dateien[i].Name+'dt') then begin
+ gibAus('Datei '''+dateien[i].Name+'dt'' existiert nicht!',3);
+ exit;
+ end;
+ if not fileexists(dateien[i].Name+'traces/traces.dat') then begin
+ gibAus('Datei '''+dateien[i].Name+'traces/traces.dat'' existiert nicht!',3);
+ exit;
+ end;
+ if not fileexists(dateien[i].Name+'../xrom.ini') then begin
+ gibAus('Datei '''+dateien[i].Name+'../xrom.ini'' existiert nicht!',3);
+ exit;
+ end;
+ if ((dateien[i] as TSergeyInputDateiInfo).Feldnummer<0) or ((dateien[i] as TSergeyInputDateiInfo).Feldnummer>=anzSergeyFelder) then begin
+ gibAus('Ausgewählte Feldnummer ('+inttostr((dateien[i] as TSergeyInputDateiInfo).Feldnummer)+') liegt außerhalb des verfügbaren Bereiches (0..'+inttostr(anzSergeyFelder-1)+')!',3);
+ exit;
+ end;
+
+ assign(tf,dateien[i].Name+'numberoftimesteps');
+ reset(tf);
+ readln(tf,dateien[i].tsiz);
+ close(tf);
+ inc(dateien[i].tsiz);
+
+ assign(tf,dateien[i].Name+'dt');
+ reset(tf);
+ readln(tf,dateien[i].tstop);
+ close(tf);
+ dateien[i].tstart:=0;
+ dateien[i].tstop:=dateien[i].tstart+dateien[i].tstop*(dateien[i].tsiz-1)/2/pi;
+ dateien[i].xstart:=0;
+ dateien[i].xstop:=dateien[i].xstart;
+ dateien[i].xsteps:=1;
+
+ assignfile(f,dateien[i].Name+'traces/traces.dat');
+ reset(f,1);
+ if filesize(f)<>wertGroesze(dateien[i].Genauigkeit)*dateien[i].tsiz*anzSergeyFelder then begin
+ gibAus(''''+dateien[i].Name+'traces/traces.dat'' hat die falsche Größe ('+inttostr(filesize(f))+' statt '+inttostr(wertGroesze(dateien[i].Genauigkeit)*dateien[i].tsiz*anzSergeyFelder)+' Byte)!',3);
+ close(f);
+ exit;
+ end;
+ close(f);
+ Positionen[i]:=0;
+ end;
end;
_tsiz:=0;
diff --git a/typenunit.pas b/typenunit.pas
index b1dfdb4..036c06e 100644
--- a/typenunit.pas
+++ b/typenunit.pas
@@ -46,6 +46,12 @@ type
constructor create; overload;
destructor destroy; override;
end;
+ tSergeyInputDateiInfo = class (tGenerischeInputDateiInfo)
+ FeldNummer: longint;
+ constructor create(Vorlage: tGenerischeInputDateiInfo); overload;
+ constructor create; overload;
+ destructor destroy; override;
+ end;
tPipeInputDateiInfo = class (tGenerischeInputDateiInfo)
Analysator: string;
bytesPerSample: longint;
@@ -92,6 +98,7 @@ type
PhaseSpaceVorlage: tPhaseSpaceInputDateiInfo;
SpaceTimeVorlage: tSpaceTimeInputDateiInfo;
TraceVorlage: tTraceInputDateiInfo;
+ SergeyVorlage: tSergeyInputDateiInfo;
PipeVorlage: tPipeInputDateiInfo;
property Fehlerbehebungskommando: string
read _Fehlerbehebungskommando
@@ -575,6 +582,28 @@ begin
inherited destroy;
end;
+// tSergeyInputDateiInfo *******************************************************
+
+constructor tSergeyInputDateiInfo.create(Vorlage: tGenerischeInputDateiInfo);
+begin
+ inherited create(Vorlage);
+ if Vorlage is tSergeyInputDateiInfo then
+ FeldNummer:=(Vorlage as tSergeyInputDateiInfo).FeldNummer
+ else
+ FeldNummer:=0;
+end;
+
+constructor tSergeyInputDateiInfo.create;
+begin
+ inherited create;
+ FeldNummer:=0;
+end;
+
+destructor tSergeyInputDateiInfo.destroy;
+begin
+ inherited destroy;
+end;
+
// tPipeInputDateiInfo *********************************************************
constructor tPipeInputDateiInfo.create(Vorlage: tGenerischeInputDateiInfo);
@@ -640,6 +669,7 @@ begin
PhaseSpaceVorlage:=tPhaseSpaceInputDateiInfo.create;
SpaceTimeVorlage:=tSpaceTimeInputDateiInfo.create;
TraceVorlage:=tTraceInputDateiInfo.create;
+ SergeyVorlage:=tSergeyInputDateiInfo.create;
PipeVorlage:=tPipeInputDateiInfo.create;
fillchar(_Name,sizeof(_Name),#0);
Name:=SpaceTimeVorlage.Name;
@@ -668,6 +698,7 @@ begin
PhaseSpaceVorlage.free;
SpaceTimeVorlage.free;
TraceVorlage.free;
+ SergeyVorlage.free;
PipeVorlage.free;
_Name:='';
_Fehlerbehebungskommando:='';
@@ -681,6 +712,7 @@ begin
PhaseSpaceVorlage.Fehlerbehebungskommando:=f;
SpaceTimeVorlage.Fehlerbehebungskommando:=f;
TraceVorlage.Fehlerbehebungskommando:=f;
+ SergeyVorlage.Fehlerbehebungskommando:=f;
PipeVorlage.Fehlerbehebungskommando:=f;
end;
@@ -690,6 +722,7 @@ begin
PhaseSpaceVorlage.Name:=n;
SpaceTimeVorlage.Name:=n;
TraceVorlage.Name:=n;
+ SergeyVorlage.Name:=n;
PipeVorlage.Name:=n;
end;
@@ -699,6 +732,7 @@ begin
PhaseSpaceVorlage.Gamma:=g;
SpaceTimeVorlage.Gamma:=g;
TraceVorlage.Gamma:=g;
+ SergeyVorlage.Gamma:=g;
PipeVorlage.Gamma:=g;
end;
@@ -708,6 +742,7 @@ begin
PhaseSpaceVorlage.tstart:=t;
SpaceTimeVorlage.tstart:=t;
TraceVorlage.tstart:=t;
+ SergeyVorlage.tstart:=t;
PipeVorlage.tstart:=t;
end;
@@ -717,6 +752,7 @@ begin
PhaseSpaceVorlage.tstop:=t;
SpaceTimeVorlage.tstop:=t;
TraceVorlage.tstop:=t;
+ SergeyVorlage.tstop:=t;
PipeVorlage.tstop:=t;
end;
@@ -726,6 +762,7 @@ begin
PhaseSpaceVorlage.xstart:=x;
SpaceTimeVorlage.xstart:=x;
TraceVorlage.xstart:=x;
+ SergeyVorlage.xstart:=x;
PipeVorlage.xstart:=x;
end;
@@ -735,6 +772,7 @@ begin
PhaseSpaceVorlage.xstop:=x;
SpaceTimeVorlage.xstop:=x;
TraceVorlage.xstop:=x;
+ SergeyVorlage.xstop:=x;
PipeVorlage.xstop:=x;
end;
@@ -744,6 +782,7 @@ begin
PhaseSpaceVorlage.t0abs:=t;
SpaceTimeVorlage.t0abs:=t;
TraceVorlage.t0abs:=t;
+ SergeyVorlage.t0abs:=t;
PipeVorlage.t0abs:=t;
end;
@@ -753,6 +792,7 @@ begin
PhaseSpaceVorlage.groeszenFaktor:=g;
SpaceTimeVorlage.groeszenFaktor:=g;
TraceVorlage.groeszenFaktor:=g;
+ SergeyVorlage.groeszenFaktor:=g;
PipeVorlage.groeszenFaktor:=g;
end;
@@ -762,6 +802,7 @@ begin
PhaseSpaceVorlage.Genauigkeit:=g;
SpaceTimeVorlage.Genauigkeit:=g;
TraceVorlage.Genauigkeit:=g;
+ SergeyVorlage.Genauigkeit:=g;
PipeVorlage.Genauigkeit:=g;
end;
@@ -771,6 +812,7 @@ begin
PhaseSpaceVorlage.tsiz:=t;
SpaceTimeVorlage.tsiz:=t;
TraceVorlage.tsiz:=t;
+ SergeyVorlage.tsiz:=t;
PipeVorlage.tsiz:=t;
end;
@@ -780,6 +822,7 @@ begin
PhaseSpaceVorlage.xsteps:=x;
SpaceTimeVorlage.xsteps:=x;
TraceVorlage.xsteps:=x;
+ SergeyVorlage.xsteps:=x;
PipeVorlage.xsteps:=x;
end;
@@ -793,6 +836,7 @@ procedure tInputDateiInfoVorlagen.wFeldNummer(f: longint);
begin
_FeldNummer:=f;
TraceVorlage.FeldNummer:=f;
+ SergeyVorlage.FeldNummer:=f;
end;
procedure tInputDateiInfoVorlagen.wAnalysator(a: string);
@@ -835,6 +879,7 @@ begin
PhaseSpaceVorlage.params:=p;
SpaceTimeVorlage.params:=p;
TraceVorlage.params:=p;
+ SergeyVorlage.params:=p;
PipeVorlage.params:=p;
end;
diff --git a/werteunit.pas b/werteunit.pas
index e8d896a..02b19df 100644
--- a/werteunit.pas
+++ b/werteunit.pas
@@ -79,6 +79,9 @@ type
function berechneWerte: boolean;
end;
+const
+ anzSergeyFelder = 12;
+
implementation
uses systemunit;
@@ -611,6 +614,38 @@ begin
close(f);
etwasGelesen:=true;
end;
+ if dateien[i] is tSergeyInputDateiInfo then begin
+ etsiz:=Dateien[i].tsiz;
+ params.transformationen.xstart:=Dateien[i].xstart;
+ params.transformationen.xstop:=Dateien[i].xstop;
+ params.transformationen.tstart:=Dateien[i].tstart;
+ params.transformationen.tstop:=Dateien[i].tstop;
+
+ setlength(buf,sizeof(extended)*anzSergeyFelder);
+ tmpi:=wertGroesze(Dateien[i].Genauigkeit);
+
+ assign(f,dateien[i].Name+'traces/traces.dat');
+ reset(f,1);
+
+ setlength(buf,tmpi*anzSergeyFelder);
+
+ for j:=0 to etsiz-1 do begin
+ if (Dateien[i] as tSergeyInputDateiInfo).Feldnummer>0 then
+ blockread(f,buf[0],(Dateien[i] as tSergeyInputDateiInfo).Feldnummer*tmpi);
+ blockread(f,werte[j],tmpi);
+ if (Dateien[i] as tSergeyInputDateiInfo).Feldnummer<anzSergeyFelder-1 then
+ blockread(f,buf[0],(anzSergeyFelder-1-(Dateien[i] as tSergeyInputDateiInfo).Feldnummer)*tmpi);
+ end;
+
+ setlength(buf,0);
+ if not eof(f) then begin
+ gibAus('Zu viele Daten in '''+dateien[i].Name+'traces/traces.dat''!',3);
+ close(f);
+ exit;
+ end;
+ close(f);
+ etwasGelesen:=true;
+ end;
if not etwasGelesen then begin
gibAus('Ich habe diese Runde keine Daten gelesen!',3);
exit;