From e99f3fec7e287b879ceeb0f0d95185cf2ab0791e Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Mon, 16 Nov 2015 06:37:30 +0100 Subject: Tagesendstand, pegelunit begonnen --- .gitignore | 9 +++ fhunit.pas | 36 +++++++++ pegelunit.pas | 235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ unit1.lfm | 14 ++++ unit1.pas | 114 ++++++++++++++++++++++++++++ wetter | Bin 0 -> 19737611 bytes wetter.ico | Bin 0 -> 137040 bytes wetter.konf | 4 + wetter.lpi | 87 ++++++++++++++++++++++ wetter.lpr | 21 ++++++ wetter.lps | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++ wetter.res | Bin 0 -> 138696 bytes 12 files changed, 724 insertions(+) create mode 100644 .gitignore create mode 100644 fhunit.pas create mode 100644 pegelunit.pas create mode 100644 unit1.lfm create mode 100644 unit1.pas create mode 100755 wetter create mode 100644 wetter.ico create mode 100644 wetter.konf create mode 100644 wetter.lpi create mode 100644 wetter.lpr create mode 100644 wetter.lps create mode 100644 wetter.res diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..21d9c21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.bak +*.ppu +*.o +*.tar.gz +*~ +fernbedienung +lib +Log* +socket diff --git a/fhunit.pas b/fhunit.pas new file mode 100644 index 0000000..02c9d6d --- /dev/null +++ b/fhunit.pas @@ -0,0 +1,36 @@ +unit fhunit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, Graphics; + +type + tMessgroesze = (mgTemperatur,mgLuftfeuchte,mgWindgeschwindigkeit,mgWindrichtung, + mgNiederschlag,mgGlobalstrahlung,mgLuftdruck); + tZeitgroesze = (zgJahr,zgMonat,zgTag,zgStunde,zgMin10); + tMesswerte = array[tMessgroesze] of extended; + tZeit = array[tZeitgroesze] of integer; + tMesspunkt = record + zeit: tZeit; + mW: tMesswerte; + end; + +const + messNamen: array[tMessgroesze] of string = + ('Temperatur','Luftfeuchte','Windgeschwindigkeit','Windrichtung', + 'Niederschlag','Globalstrahlung','Luftdruck'); + maszEinheit: array[tMessgroesze] of string = + ('°C','%','m/s','°','mm','W/m²','mbar'); + monatsNamen: array[1..12] of string = + ('Januar','Februar','März','April','Mai','Juni','Juli', + 'August','September','Oktober','November','Dezember'); + farben: array[tMessgroesze] of tColor = + ($0000DF,$CFAF7F,$007FFF,$FF00FF,$FFAF3F,$3FAFAF,$AFAFAF); + +implementation + +end. + diff --git a/pegelunit.pas b/pegelunit.pas new file mode 100644 index 0000000..7cda392 --- /dev/null +++ b/pegelunit.pas @@ -0,0 +1,235 @@ +unit pegelunit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, Graphics; + +type + tPegelZeitGroesze = (pzgJahr,pzgMonat,pzgTag,pzgStunde,pzgMin15); + tPegelZeit = array[tPegelZeitgroesze] of integer; + tPegelStation = (psBlankenstein,psKaulsdorf,psSaalfeld,psRudolstadt, + psRothenstein,psCamburg,psMoeschlitz,psProbstzella,psKaulsdorfEichicht, + psKatzhuette,psSchwarzburg,psFreienorla); + tPegel = record + zeit: tPegelZeit; + hoehe: longint; + end; + pTPegel = ^tPegel; + + tPegelStaende = class + werte: array[tPegelStation] of tList; + constructor create; + destructor destroy; override; +// procedure einlesen(was: string); + procedure laden(von: string); + procedure speichern(nach: string); + end; + +implementation + +uses systemunit; + +const + pegelStationsNamen: array[tPegelstation] of array[0..1] of string = + (('Blankenstein','Blankenstein-Ros.'), + ('Kaulsdorf',''), + ('Saalfeld-Remschütz',''), + ('Rudolstadt',''), + ('Rothenstein',''), + ('Camburg-Stöben',''), + ('Möschlitz',''), + ('Probstzella',''), + ('Kaulsdorf-Eichicht',''), + ('Katzhütte',''), + ('Schwarzburg',''), + ('Freienorla','')); + pegelStationsNummern: array[tPegelstation] of extended = + (57021,57025,57026,57027,57028,57033,57170,57200,57201,57211,57211.5,57240); + pegelGrenzen: array[tPegelstation,0..3] of longint = + ((210,230,270,310),(195,210,225,240),(200,230,260,290),(150,180,210,240), + (250,290,330,370),(280,330,380,430),(180,200,220,240),(0,0,0,0), + (130,170,210,230),(200,230,260,290),(130,150,170,190),(0,0,0,0)); + pFarben: array[tPegelstation] of tColor = + ($000000,$000000,$000000,$FF0000,$7F0000,$000000,$000000,$000000,$000000,$000000,$000000,$000000); + +// tPegelStaende *************************************************************** + +constructor tPegelStaende.create; +var + ps: tPegelStation; +begin + inherited create; + for ps:=low(tPegelStation) to high(tPegelStation) do + werte[ps]:=tList.create; +end; + +destructor tPegelStaende.destroy; +var + ps: tPegelStation; +begin + for ps:=low(tPegelStation) to high(tPegelStation) do + werte[ps].free; + inherited destroy; +end; + +procedure tPegelStaende.laden(von: string); +var + f: textfile; + s: string; + ps: tPegelstation; + pzg: tPegelzeitgroesze; + psda,gefunden: boolean; + np: pTPegel; + i: longint; +begin + if not fileexists(von) then exit; + assignfile(f,von); + reset(f); + psda:=false; + ps:=low(TPegelstation); + while not eof(f) do begin + readln(f,s); + if pos('Station: ',s)=1 then begin + delete(s,1,pos(' ',s)); + ps:=low(TPegelstation); + gefunden:=false; + while ps<=high(TPegelstation) do begin + for i:=0 to length(Pegelstationsnamen[psBlankenstein])-1 do + gefunden:=gefunden or ((Pegelstationsnamen[ps,i]<>'') and (Pegelstationsnamen[ps,i]=s)); + if gefunden then break; + inc(ps); + end; + if not gefunden then begin + closefile(f); + raise exception.create('Pegelstation '''+s+''' nicht gefunden!'); + end; + psda:=true; + continue; + end; + if not psda then + raise exception.create('Es wurde noch keine Pegelstation erwähnt!'); + getmem(np,sizeof(TPegel)); + werte[ps].Add(np); + for pzg:=low(tPegelZeitGroesze) to high(tPegelZeitGroesze) do begin + np^.Zeit[pzg]:=strtoint(copy(s,1,pos(' ',s)-1)); + delete(s,1,pos(' ',s)); + end; + np^.Hoehe:=strtoint(s); + end; + closefile(f); +end; + +procedure tPegelStaende.speichern(nach: string); +var + dateischonda: boolean; + f: textfile; + ps: tPegelStation; + pzg: tPegelZeitGroesze; + i: longint; + s: string; +begin + dateischonda:=fileexists(nach); + if dateischonda then + assignfile(f,mkTemp(nach+'.XXXXXX')) + else + assignfile(f,nach); + rewrite(f); + for ps:=low(tPegelStation) to high(tPegelStation) do begin + writeln(f,'Station: '+Pegelstationsnamen[ps,0]); + for i:=0 to werte[ps].Count-1 do begin + s:=''; + for pzg:=low(tPegelZeitGroesze) to high(tPegelZeitGroesze) do + s:=s+inttostr(pTPegel(werte[ps][i])^.zeit[pzg])+' '; + writeln(f,s+inttostr(pTPegel(werte[ps][i])^.hoehe)); + end; + end; + closefile(f); + if dateischonda then begin + deletefile(nach); + rename(f,nach); + end; +end; + +(* +procedure tPegelStaende.einlesen(von: string); +var t: string; + PS: TPegelstation; + psda,wsda,gefunden: boolean; + PZ: TPegelZeit; + posi: extended; + nps: PTPegel; + PZG: TPegelZeitGroesze; + i: longint; +begin + s:=s+#10; + result:=false; + psda:=false; + wsda:=false; + PS:=low(TPegelstation); + while pos(#13,s)>0 do begin + t:=copy(s,1,pos(#10,s)-1); + delete(s,1,pos(#10,s)); + while pos(#13,t)>0 do + delete(t,pos(#13,t),1); + if length(t)=0 then continue; + if pos('Pegelname: ',t)=1 then begin + delete(t,1,pos(' ',t)); + PS:=low(TPegelstation); + gefunden:=false; + while PS<=high(TPegelstation) do begin + for i:=0 to length(Pegelstationsnamen[psBlankenstein])-1 do + gefunden:=gefunden or ((Pegelstationsnamen[PS,i]<>'') and (Pegelstationsnamen[PS,i]=t)); + if gefunden then break; + inc(PS); + end; + if not gefunden then begin + Messagedlg('Unbekannter Pegelname: '''+t+'''!',mterror,[mbOk],0); + exit; + end; + psda:=true; + continue; + end; + if t='Durchfluss [m3/s]' then begin + wsda:=false; + continue; + end; + if t='Wasserstand [cm]' then begin + wsda:=true; + continue; + end; + if not (wsda and psda) then continue; + if pos('Fluss: ',t)=1 then continue; + if pos('Flusseinzugsgebiet: ',t)=1 then continue; + if pos('Stationsnummer: ',t)=1 then begin + delete(t,1,pos(' ',t)); + while pos(' ',t)=1 do delete(t,1,1); + while pos('.',t)>0 do t[pos('.',t)]:=','; + if round(10*strtofloat(t))<>round(10*Pegelstationsnummern[PS]) then begin + Messagedlg('erwartete Pegelstationsnummer ('+floattostr(Pegelstationsnummern[PS])+ + ') für '+Pegelstationsnamen[PS,0]+' ist verschieden von der angegebenen Nummer ('+t+')!',mtError,[mbOk],0); + exit; + end; + continue; + end; + if pos('Hinweise: ',t)=1 then continue; + if pos('keine Werte',t)>0 then continue; + PZ:=strToPegelZeit(t); + posi:=findePegelZeit(Pegelstaende[PS],PZ); + if odd(round(2*posi)) then begin + result:=true; + getmem(nps,sizeof(TPegel)); + for PZG:=low(TPegelZeitGroesse) to high(TPegelZeitGroesse) do + nps^.Zeit[PZG]:=PZ[PZG]; + delete(t,1,pos(',',t)+1); + nps^.Hoehe:=strtoint(t); + Pegelstaende[PS].Insert(round(posi+0.5),nps); + end; + end; + Zeichnen; +end; +*) +end. + diff --git a/unit1.lfm b/unit1.lfm new file mode 100644 index 0000000..c88597b --- /dev/null +++ b/unit1.lfm @@ -0,0 +1,14 @@ +object Form1: TForm1 + Left = 2787 + Height = 240 + Top = 260 + Width = 320 + Caption = 'Form1' + OnCreate = FormCreate + OnDestroy = FormDestroy + LCLVersion = '1.4.4.0' + object TrayIcon1: TTrayIcon + left = 16 + top = 8 + end +end diff --git a/unit1.pas b/unit1.pas new file mode 100644 index 0000000..b06b54d --- /dev/null +++ b/unit1.pas @@ -0,0 +1,114 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls; + +type + + { TForm1 } + + TForm1 = class(TForm) + TrayIcon1: TTrayIcon; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + Form1: tForm1; + pidDatei: string; + +const + + DateiName = 'letztes_Wetter.txt'; + PegelDateiName = 'letzte_Pegel.txt'; + anzDaten = 7*24*6*4; + + +(* +function separateValue(var S: String): string; +function Zeit2Datetime(Z: TZeit): extended; +function PegelstaendeVergleichen(P1,P2: Pointer): integer; +function PegelzeitVergleichen(P1,P2: TPegelzeit): integer; +function findePegelZeit(PS: TList; PZ: TPegelzeit): extended; +function strToPegelZeit(s: string): TPegelzeit; +function Pegelzeit2Datetime(Z: TPegelzeit): extended; +function letzterMonat(t: TDateTime): TPoint; // x=Monat, y=Jahr +function MyIntToStr(I,Ziff: longint): string; +*) + +implementation + +{$R *.lfm} + +uses process, myStringListUnit, lowLevelUnit, systemUnit; + +{ TForm1 } + +procedure TForm1.FormCreate(Sender: TObject); +var + s,t: string; + f,o: tMyStringList; + fi: textfile; + args: array of string; +begin + pidDatei:=''; + s:=extractfilepath(application.exename)+'wetter.konf'; + t:=''; + if not fileexists(s) then + raise exception.create('Kann Konfigurationsdatei '''+s+''' nicht finden!'); + f:=tMyStringList.create; + f.loadFromFile(s); + f.unfoldMacros; + while f.readln(s) do begin + if startetMit('pidDatei:',s) then begin + pidDatei:=s; + assignFile(fi,pidDatei); + if fileexists(pidDatei) then begin // pidDatei existiert schon + reset(fi); + readln(fi,s); + if strtoint(s)<>GetProcessID then begin // der eingetragene Prozess bin nicht ich + setlength(args,1); + args[0]:='aux'; + runCommand('ps',args,t); + o:=tMyStringList.create; + o.text:=t; + o.grep('^\S+\s+'+s+'\s'); + if o.count>0 then begin // der eingetragene Prozess läuft noch + closeFile(fi); + f.free; + o.free; + raise exception.create('Programm läuft bereits ('+s+')!'); + end; + o.free; + end; + closefile(fi); + end; + rewrite(fi); + writeln(fi,inttostr(GetProcessID)); + closeFile(fi); + continue; + end; + + raise exception.create('Unbekannte Option '''+s+''' in Konfigdatei!'); + end; + f.free; + + form1.caption:=inttostr(GetProcessID); +end; + +procedure TForm1.FormDestroy(Sender: TObject); +begin + if fileExists(pidDatei) then + deleteFile(pidDatei); +end; + +end. + diff --git a/wetter b/wetter new file mode 100755 index 0000000..ad437f8 Binary files /dev/null and b/wetter differ diff --git a/wetter.ico b/wetter.ico new file mode 100644 index 0000000..0341321 Binary files /dev/null and b/wetter.ico differ diff --git a/wetter.konf b/wetter.konf new file mode 100644 index 0000000..59a9316 --- /dev/null +++ b/wetter.konf @@ -0,0 +1,4 @@ +pidDatei: /tmp/wetter.pid +#wetterDatei: letztes_Wetter.txt +#pegelDatei: letzte_Pegel.txt +#anzahlDaten: 7*24*6*4 diff --git a/wetter.lpi b/wetter.lpi new file mode 100644 index 0000000..26575a7 --- /dev/null +++ b/wetter.lpi @@ -0,0 +1,87 @@ + + + + + + + + + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <RequiredPackages Count="1"> + <Item1> + <PackageName Value="LCL"/> + </Item1> + </RequiredPackages> + <Units Count="4"> + <Unit0> + <Filename Value="wetter.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + </Unit1> + <Unit2> + <Filename Value="original/pegelunit.pas"/> + <IsPartOfProject Value="True"/> + </Unit2> + <Unit3> + <Filename Value="fhunit.pas"/> + <IsPartOfProject Value="True"/> + </Unit3> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="wetter"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/wetter.lpr b/wetter.lpr new file mode 100644 index 0000000..cc5b442 --- /dev/null +++ b/wetter.lpr @@ -0,0 +1,21 @@ +program wetter; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, Unit1, pegelunit, fhunit + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource := True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/wetter.lps b/wetter.lps new file mode 100644 index 0000000..4a77bfc --- /dev/null +++ b/wetter.lps @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectSession> + <Version Value="9"/> + <BuildModes Active="Default"/> + <Units Count="9"> + <Unit0> + <Filename Value="wetter.lpr"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <WindowIndex Value="-1"/> + <TopLine Value="-1"/> + <CursorPos X="-1" Y="-1"/> + <UsageCount Value="20"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <TopLine Value="59"/> + <CursorPos X="30" Y="88"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + <Unit2> + <Filename Value="original/Unit1.pas"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="4"/> + <TopLine Value="1027"/> + <CursorPos Y="1039"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit2> + <Unit3> + <Filename Value="original/pegelunit.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <UsageCount Value="20"/> + </Unit3> + <Unit4> + <Filename Value="pegelunit.pas"/> + <EditorIndex Value="3"/> + <TopLine Value="124"/> + <CursorPos Y="58"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit4> + <Unit5> + <Filename Value="fhunit.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="2"/> + <CursorPos X="28" Y="30"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + </Unit5> + <Unit6> + <Filename Value="../units/systemunit.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="116"/> + <CursorPos Y="159"/> + <UsageCount Value="10"/> + </Unit6> + <Unit7> + <Filename Value="wetter.konf"/> + <EditorIndex Value="1"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + <DefaultSyntaxHighlighter Value="None"/> + </Unit7> + <Unit8> + <Filename Value="/usr/lib/fpc/src/packages/fcl-process/src/process.pp"/> + <EditorIndex Value="-1"/> + <TopLine Value="157"/> + <CursorPos X="73" Y="178"/> + <UsageCount Value="10"/> + </Unit8> + </Units> + <JumpHistory Count="30" HistoryIndex="29"> + <Position1> + <Filename Value="unit1.pas"/> + <Caret Line="92" TopLine="62"/> + </Position1> + <Position2> + <Filename Value="unit1.pas"/> + <Caret Line="79" Column="31" TopLine="58"/> + </Position2> + <Position3> + <Filename Value="unit1.pas"/> + <Caret Line="61" Column="9" TopLine="55"/> + </Position3> + <Position4> + <Filename Value="unit1.pas"/> + <Caret Line="74" Column="42" TopLine="66"/> + </Position4> + <Position5> + <Filename Value="unit1.pas"/> + <Caret Line="109" Column="9" TopLine="70"/> + </Position5> + <Position6> + <Filename Value="pegelunit.pas"/> + <Caret Line="62" Column="17" TopLine="24"/> + </Position6> + <Position7> + <Filename Value="pegelunit.pas"/> + <Caret Line="72" Column="56" TopLine="33"/> + </Position7> + <Position8> + <Filename Value="pegelunit.pas"/> + <Caret Line="25" Column="34"/> + </Position8> + <Position9> + <Filename Value="pegelunit.pas"/> + <Caret Line="84" Column="41" TopLine="62"/> + </Position9> + <Position10> + <Filename Value="pegelunit.pas"/> + <Caret Line="77" Column="3" TopLine="59"/> + </Position10> + <Position11> + <Filename Value="pegelunit.pas"/> + <Caret Line="129" Column="18" TopLine="97"/> + </Position11> + <Position12> + <Filename Value="pegelunit.pas"/> + <Caret Line="79" Column="24" TopLine="57"/> + </Position12> + <Position13> + <Filename Value="pegelunit.pas"/> + <Caret Line="86" Column="19" TopLine="62"/> + </Position13> + <Position14> + <Filename Value="pegelunit.pas"/> + <Caret Line="89" Column="23" TopLine="67"/> + </Position14> + <Position15> + <Filename Value="pegelunit.pas"/> + <Caret Line="90" Column="18" TopLine="68"/> + </Position15> + <Position16> + <Filename Value="pegelunit.pas"/> + <Caret Line="108" Column="69" TopLine="86"/> + </Position16> + <Position17> + <Filename Value="pegelunit.pas"/> + <Caret Line="114" Column="72" TopLine="94"/> + </Position17> + <Position18> + <Filename Value="pegelunit.pas"/> + <Caret Line="116" Column="8" TopLine="95"/> + </Position18> + <Position19> + <Filename Value="pegelunit.pas"/> + <Caret Line="23" Column="41"/> + </Position19> + <Position20> + <Filename Value="pegelunit.pas"/> + <Caret Line="73" Column="19" TopLine="44"/> + </Position20> + <Position21> + <Filename Value="pegelunit.pas"/> + <Caret Line="115" Column="54" TopLine="94"/> + </Position21> + <Position22> + <Filename Value="pegelunit.pas"/> + <Caret Line="117" Column="3" TopLine="94"/> + </Position22> + <Position23> + <Filename Value="pegelunit.pas"/> + <Caret Line="128" Column="35" TopLine="107"/> + </Position23> + <Position24> + <Filename Value="pegelunit.pas"/> + <Caret Line="133" Column="6" TopLine="110"/> + </Position24> + <Position25> + <Filename Value="pegelunit.pas"/> + <Caret Line="57" Column="17" TopLine="42"/> + </Position25> + <Position26> + <Filename Value="pegelunit.pas"/> + <Caret Line="135" Column="15" TopLine="114"/> + </Position26> + <Position27> + <Filename Value="pegelunit.pas"/> + <Caret Line="136" Column="36" TopLine="114"/> + </Position27> + <Position28> + <Filename Value="pegelunit.pas"/> + <Caret Line="135" Column="40" TopLine="120"/> + </Position28> + <Position29> + <Filename Value="pegelunit.pas"/> + <Caret Line="137" Column="20" TopLine="115"/> + </Position29> + <Position30> + <Filename Value="pegelunit.pas"/> + <Caret Line="152" Column="17" TopLine="119"/> + </Position30> + </JumpHistory> + </ProjectSession> +</CONFIG> diff --git a/wetter.res b/wetter.res new file mode 100644 index 0000000..e994dfa Binary files /dev/null and b/wetter.res differ -- cgit v1.2.3-54-g00ecf