PACKET benennenDEFINES statbenennen:LET statistikdatei="STATISTIK.", statistikserver="statistik server",maskebenennen="mst statistik benennen", statistikvorzeilen=3,maxstatistiken=200,maxzeilen=75,maxspalten=50, minspaltenbreite=4,niltext="",space=" ",meldungzusatz="+",meldungback= "��������������",alt="alt",meldungrestore=" ",mgibtesnicht=477, mgibtesschon=485,mspeichern=486,mnichtspeichern=487,mentfernenfrage=488, mgeloescht=489,mnichtgeloescht=490,fstatnr=2,fbezeichnung=3,fzeilen=4, fspalten=5,fentfernen=6,pruefeimintervall=3,pruefeobwert=1;TEXT VAR statistiknummer;FILE VAR stat;PROC statbenennen(INT CONST was):SELECT wasOF CASE 1:benennenstartprocCASE 2:benennennprocCASE 3: benennenbearbeitenstartprocCASE 4:benennenbearbeitenspeichernCASE 5: benennenneustartprocCASE 6:benennenentfernenstartprocCASE 7: benennenentfernenexec;leave(2)CASE 8:statlistezeigen(int(standardmaskenfeld( fstatnr)))CASE 9:benennenlistebearbeitenstartprocCASE 10: benennenlistebearbeitenspeichernCASE 11:benennenlisteentfernenstartprocCASE 12:benennenentfernenexec;enter(1)CASE 13:benennenbearbeitennichtspeichern CASE 14:benennenentfernennichtloeschen;leave(2)CASE 15: benennenentfernennichtloeschen;enter(1)CASE 16:benennenentfernennichtloeschen ;leave(3)END SELECT .benennenstartproc:standardstartproc(maskebenennen); standardmaskenfeld(niltext,fstatnr);benennennproc.benennennproc: standardmaskenfeld(niltext,fbezeichnung);feldschutz(fbezeichnung); standardmaskenfeld(niltext,fzeilen);feldschutz(fzeilen);standardmaskenfeld( niltext,fspalten);feldschutz(fspalten);feldschutz(fentfernen);feldfrei( fstatnr);infeld(fstatnr);standardnproc.benennenbearbeitenstartproc:IF NOT nummerokTHEN leave(1);ELIF NOT statistikexistiert(statnummer)THEN statmeldung (mgibtesnicht);infeld(fstatnr);leave(1);ELSE benennenfreigebenundnproc;FI . benennenbearbeitenspeichern:IF NOT eingabenokTHEN leave(1);ELIF NOT ( statistiknummer=statnummer)AND statistikexistiert(statnummer)THEN statmeldung (mgibtesschon);infeld(fstatnr);leave(1);ELSE statmeldung(mspeichern); statistikspeichern(statistiknummer,statnummer);standardmaskenfeld(niltext, fstatnr);leave(2);FI .benennenneustartproc:IF NOT nummerokTHEN leave(1);ELIF statistikexistiert(statnummer)THEN statmeldung(mgibtesschon);infeld(fstatnr); leave(1);ELSE benennenfreigeben;statistiknummer:=statnummer;standardnprocFI . benennenentfernenstartproc:IF NOT nummerokTHEN leave(1);ELIF NOT statistikexistiert(statnummer)THEN statmeldung(mgibtesnicht);infeld(fstatnr); leave(1);ELSE benennenschuetzenundnproc;FI .benennenschuetzenundnproc: benennenausfuellen(statnummer);feldschutz(fstatnr);feldschutz(fbezeichnung); feldschutz(fzeilen);feldschutz(fspalten);infeld(fstatnr); standardfelderausgeben;statmeldung(mentfernenfrage);infeld(fentfernen); standardnproc.benennenfreigebenundnproc:benennenausfuellen(statnummer); benennenfreigeben;statistiknummer:=statnummer;standardnproc.benennenfreigeben :feldfrei(fbezeichnung);feldfrei(fzeilen);feldfrei(fspalten);feldschutz( fentfernen);statnummerIN fstatnr;infeld(fbezeichnung).benennenentfernenexec: statistikloeschen(statnummer);statmeldung(mgeloescht);standardmaskenfeld( niltext,fstatnr).benennenlistebearbeitenstartproc:statlistebearbeiten( maskebenennen);IF statlisteeintrag>niltextTHEN standardmaskenfeld( statlisteeintrag,fstatnr);benennenfreigebenundnproc;ELSE standardmaskenfeld( niltext,fstatnr);leave(2);FI .benennenlistebearbeitenspeichern:IF NOT eingabenokTHEN leave(1);ELIF NOT (statistiknummer=statnummer)AND statistikexistiert(statnummer)THEN statmeldung(mgibtesschon);infeld(fstatnr); leave(1);ELSE statmeldung(mspeichern);statistikspeichern(statistiknummer, statnummer);enter(1);FI .benennenlisteentfernenstartproc:statlistebearbeiten( maskebenennen);IF statlisteeintrag>niltextTHEN standardmaskenfeld( statlisteeintrag,fstatnr);benennenschuetzenundnproc;ELSE standardmaskenfeld( niltext,fstatnr);leave(2);FI .benennenbearbeitennichtspeichern:statmeldung( mnichtspeichern);standardmaskenfeld(niltext,fstatnr);leave(2). benennenentfernennichtloeschen:statmeldung(mnichtgeloescht); standardmaskenfeld(niltext,fstatnr).nummerok:INT VAR status;standardpruefe( pruefeimintervall,fstatnr,1,maxstatistiken,niltext,status);IF status>0THEN infeld(status)FI ;status=0.eingabenok:IF nummerokTHEN standardpruefe( pruefeobwert,fbezeichnung,0,0,niltext,status);FI ;IF status=0THEN standardpruefe(pruefeimintervall,fzeilen,1,maxzeilen,niltext,status);FI ;IF status=0THEN standardpruefe(pruefeimintervall,fspalten,1,maxspalten,niltext, status);FI ;IF status>0THEN infeld(status);FI ;status=0.statnummer:text(int( standardmaskenfeld(fstatnr))).END PROC statbenennen;PROC statmeldung(INT CONST meldungnummer):standardmeldung(meldungnummer,standardmaskenfeld(fstatnr )+meldungzusatz);END PROC statmeldung;PROC benennenausfuellen(TEXT CONST statnummer):TEXT VAR bezeichnung;INT VAR wert;forget(statistikdatei+ statnummer,quiet);fetch(statistikdatei+statnummer,task(statistikserver));stat :=sequentialfile(input,statistikdatei+statnummer);standardmaskenfeld( statnummer,fstatnr);getline(stat,bezeichnung);standardmaskenfeld(bezeichnung, fbezeichnung);get(stat,wert);standardmaskenfeld(text(wert),fzeilen);get(stat, wert);standardmaskenfeld(text(wert),fspalten);forget(statistikdatei+ statnummer,quiet);END PROC benennenausfuellen;BOOL PROC statistikexistiert( TEXT CONST statnummer):exists(statistikdatei+statnummer,task(statistikserver) )END PROC statistikexistiert;PROC statistikloeschen(TEXT CONST statnummer): IF statistikexistiert(statnummer)THEN commanddialogue(FALSE );erase( statistikdatei+statnummer,task(statistikserver));commanddialogue(TRUE );FI ; END PROC statistikloeschen;PROC statistikspeichern(TEXT CONST altername, neuername):INT VAR zeilenneu:=int(standardmaskenfeld(fzeilen)),spaltenneu:= int(standardmaskenfeld(fspalten)),benennenneu:=zeilenneu*spaltenneu,zeilenalt ,spaltenalt,benennenalt,zaehl,zeile,spalte;TEXT VAR dateizeile;FILE VAR statalt;forget(statistikdatei+altername,quiet);forget(statistikdatei+ neuername,quiet);IF NOT statistikexistiert(altername)THEN erzeugeneuestatistikELSE aenderealtestatistik;statistikloeschen(altername); FI ;sichereneuestatistik.erzeugeneuestatistik:erzeugestatistikmitneuemnamen; display(meldungback);FOR zaehlFROM benennenneuDOWNTO 1REP line(stat);cout( zaehl);PER ;display(meldungrestore).erzeugestatistikmitneuemnamen:stat:= sequentialfile(output,statistikdatei+neuername);putline(stat, standardmaskenfeld(fbezeichnung));dateizeile:=text(zeilenneu)+space+text( spaltenneu)+space;FOR zaehlFROM 1UPTO spaltenneuREP dateizeileCAT text( minspaltenbreite);dateizeileCAT space;PER ;putline(stat,dateizeile);line(stat ).sichereneuestatistik:save(statistikdatei+neuername,task(statistikserver)); forget(statistikdatei+neuername,quiet).aenderealtestatistik:forget( statistikdatei+alt,quiet);fetch(statistikdatei+altername,task(statistikserver ));rename(statistikdatei+altername,statistikdatei+alt);statalt:= sequentialfile(input,statistikdatei+alt);getline(statalt,dateizeile);get( statalt,zeilenalt);get(statalt,spaltenalt);benennenalt:=zeilenalt*spaltenalt; IF zeilenalt<>zeilenneuOR spaltenalt<>spaltenneuTHEN aenderedieganzestatistik ELIF dateizeile<>standardmaskenfeld(fbezeichnung)THEN aenderediedateizeile ELSE rename(statistikdatei+alt,statistikdatei+neuername);FI . aenderediedateizeile:modify(statalt);tofirstrecord(statalt);writerecord( statalt,standardmaskenfeld(fbezeichnung));rename(statistikdatei+alt, statistikdatei+neuername).aenderedieganzestatistik: erzeugestatistikmitneuemnamen;modify(statalt);zaehl:=benennenneu;display( meldungback);FOR zeileFROM 1UPTO min(zeilenalt,zeilenneu)REP uebertrageeinezeileausaltinneu;PER ;FOR zeileFROM zeilenalt+1UPTO zeilenneu REP schreibeeineleerezeile;PER ;display(meldungrestore);forget(statistikdatei +alt,quiet).uebertrageeinezeileausaltinneu:toline(statalt,statistikvorzeilen+ (zeile-1)*spaltenalt+1);FOR spalteFROM 1UPTO min(spaltenalt,spaltenneu)REP readrecord(statalt,dateizeile);putline(stat,dateizeile);down(statalt);zaehlen PER ;FOR spalteFROM spaltenalt+1UPTO spaltenneuREP line(stat);zaehlenPER . schreibeeineleerezeile:FOR spalteFROM 1UPTO spaltenneuREP line(stat);zaehlen PER .zaehlen:cout(zaehl);zaehlDECR 1.END PROC statistikspeichern;END PACKET benennen;