diff options
-rw-r--r-- | .gitignore | 9 | ||||
-rw-r--r-- | fhunit.pas | 36 | ||||
-rw-r--r-- | pegelunit.pas | 235 | ||||
-rw-r--r-- | unit1.lfm | 14 | ||||
-rw-r--r-- | unit1.pas | 114 | ||||
-rwxr-xr-x | wetter | bin | 0 -> 19737611 bytes | |||
-rw-r--r-- | wetter.ico | bin | 0 -> 137040 bytes | |||
-rw-r--r-- | wetter.konf | 4 | ||||
-rw-r--r-- | wetter.lpi | 87 | ||||
-rw-r--r-- | wetter.lpr | 21 | ||||
-rw-r--r-- | wetter.lps | 204 | ||||
-rw-r--r-- | wetter.res | bin | 0 -> 138696 bytes |
12 files changed, 724 insertions, 0 deletions
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. + Binary files differdiff --git a/wetter.ico b/wetter.ico Binary files differnew file mode 100644 index 0000000..0341321 --- /dev/null +++ b/wetter.ico 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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> + <Title Value="wetter"/> + <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 Binary files differnew file mode 100644 index 0000000..e994dfa --- /dev/null +++ b/wetter.res |