PACKET sicherungsmonitorDEFINES ladenstarten,sichernstarten,formatieren,
endeformatieren,initialisieren,disketteueberpruefen,floppylisten,
floppylistingzeigen,endefloppylisting,meldungquittieren,
dbverzeichniserstellen,dbverzeichniszeigen,endedbverzeichnis,archiveanmelden,
archiveabmelden,bestimmendersicherungstask,sicherungsloop,beendenarchivieren:
LET initcode=25,listcode=26,checkcode=27,formatcode=40,logonarchivecode=45,
logoffarchivecode=46,dbvomserver=47,dbzumserver=48,dbaufdisk=49,dbvondisk=50,
dddrucken=51,endemeldung=0,errornak=2,nak=1,keinedaten=59,floppyzuranzeige=
180,formatkorrekt=181,initkorrekt=182,sichernkorrekt=183,ladenkorrekt=184,
opkorrekt=185,unbekanntercode=186,inkonsicherung=187,floppyzurpruefung=199;
LET yescode=10,outcode=11,showcode=12;LET meldungsfeld=1;LET
ankreuzauffloppyladen=6,ankreuzauffloppysichern=7,floppynamefeld=8,
ankreuzschulis=2,ankreuzbaisy=3,ankreuzida=4,ankreuzstatistik=5,
fragekennzeichnung=" ?";LET manager2="baisy",manager1="schulis",manager3=
"ida",manager4="statistik";LET meldpattern1="Archiv",meldpattern2="e",
meldpattern3="Diskette",patternlaenge=6;LET sicherung=" sicherung";INT VAR
quittung,stufe:=1,letzterauftragscode;TEXT VAR dbinhalt:="";TASK VAR
dbsicherungstask;DATASPACE VAR ds;BOUND TEXT VAR message;INT VAR
meldungsfeldlaenge,eingabestatus;TEXT VAR dbsicherung:="",anmeldetask:="";
BOOL VAR endequittungda:=FALSE ,error:=FALSE ;LET logbucheintragsichern=
"Anw. 10.1.1 Sicherung von ",logbucheintragladen="Anw. 10.1.2 Laden von ";
PROC eingabepruefen:standardpruefe(5,ankreuzschulis,ankreuzstatistik,0,"",
eingabestatus);IF eingabestatus=0THEN standardpruefe(5,ankreuzauffloppyladen,
ankreuzauffloppysichern,0,"",eingabestatus);IF eingabestatus=0THEN
parametersetzenFI ;FI .END PROC eingabepruefen;PROC eingabepruefeneinfach:
standardpruefe(5,ankreuzschulis,ankreuzstatistik,0,"",eingabestatus);IF
eingabestatus=0THEN parametersetzenFI .END PROC eingabepruefeneinfach;PROC
parametersetzen:IF standardmaskenfeld(ankreuzschulis)<>""THEN dbsicherung:=
manager1;dbinhalt:="EUMELbase.schulis-DB-Verzeichnis"ELIF standardmaskenfeld(
ankreuzbaisy)<>""THEN dbsicherung:=manager2;dbinhalt:=
"EUMELbase.baisy-DB-Verzeichnis"ELIF standardmaskenfeld(ankreuzida)<>""THEN
dbsicherung:=manager3;dbinhalt:="EUMELbase.schulis-DB-Verzeichnis"ELSE #25.09
.90#dbsicherung:=manager4;dbinhalt:="EUMELbase.schulis-DB-Verzeichnis"FI ;
dbsicherungCAT sicherung;infeld(floppynamefeld);meldungsfeldlaenge:=
standardfeldlaenge(meldungsfeld).END PROC parametersetzen;PROC
beendenarchivieren:archiveabmelden;enter(2)ENDPROC beendenarchivieren;PROC
ladenstarten:IF stufe=2THEN sicherungsloopELSE stufe1behandlungFI .
stufe1behandlung:eingabepruefen;IF eingabestatus<>0THEN infeld(eingabestatus)
;return(1)ELSE IF auffloppyTHEN archiveanmelden;IF anmeldetask=""THEN return(
1);LEAVE ladenstartenELSE stufe:=2;logeintrag(logbucheintragladen+
logbuchbehandeltedaten);archiveoperation(dbvondisk,dbsicherung);IF
endequittungdaOR errorTHEN return(1)FI FI ELSE logeintrag(logbucheintragladen
+logbuchbehandeltedaten);archiveoperation(dbzumserver,dbsicherung);return(1)
FI FI .auffloppy:standardmaskenfeld(ankreuzauffloppyladen)<>"".END PROC
ladenstarten;PROC sichernstarten:IF stufe=2THEN sicherungsloopELSE
stufe1behandlungFI ;.stufe1behandlung:eingabepruefen;IF eingabestatus<>0THEN
infeld(eingabestatus);return(1)ELSE IF auffloppyTHEN archiveanmelden;IF
anmeldetask=""THEN return(1);LEAVE sichernstartenELSE stufe:=2;
archiveoperation(dbaufdisk,dbsicherung);IF endequittungdaOR errorTHEN return(
1)FI FI ELSE logeintrag(logbucheintragsichern+logbuchbehandeltedaten);
archiveoperation(dbvomserver,dbsicherung);return(1)FI FI .END PROC
sichernstarten;TEXT PROC logbuchbehandeltedaten:IF standardmaskenfeld(
ankreuzschulis)<>""THEN "Anwendungsdaten"ELIF standardmaskenfeld(ankreuzbaisy
)<>""THEN "Systemdaten"ELIF standardmaskenfeld(ankreuzida)<>""THEN
"Anwenderspezifischen Druckausgaben"ELSE "Amtliche Statistik"FI END PROC
logbuchbehandeltedaten;BOOL PROC auffloppy:standardmaskenfeld(
ankreuzauffloppysichern)<>""ENDPROC auffloppy;PROC formatieren:
archiveanmelden;IF anmeldetask<>""THEN archiveoperation(formatcode,
dbsicherung)FI ;infeld(2);return(2)END PROC formatieren;PROC endeformatieren:
archiveabmelden;enter(2)ENDPROC endeformatieren;PROC initialisieren:
archiveanmelden;IF anmeldetask<>""THEN archiveoperation(initcode,dbsicherung)
FI ;infeld(2);return(2)END PROC initialisieren;PROC disketteueberpruefen:
eingabepruefeneinfach;IF eingabestatus<>0THEN infeld(eingabestatus);return(1)
ELSE standardmeldung(floppyzurpruefung,"");archiveanmelden;IF anmeldetask<>""
THEN archiveoperation(checkcode,dbsicherung)FI ;infeld(2);return(1)FI END
PROC disketteueberpruefen;PROC floppylisten:eingabepruefeneinfach;IF
eingabestatus<>0THEN infeld(eingabestatus);return(1)ELSE standardmeldung(
floppyzuranzeige,"");archiveanmelden;IF anmeldetask<>""THEN archiveoperation(
listcode,dbsicherung);IF errorTHEN return(1)FI ELSE return(1)FI FI END PROC
floppylisten;PROC dbverzeichniserstellen:eingabepruefeneinfach;IF
eingabestatus<>0THEN infeld(eingabestatus);return(1)ELIF standardmaskenfeld(
ankreuzstatistik)<>""THEN standardmeldung(keinedaten,"");return(1)ELSE
archiveoperation(dddrucken,dbsicherung);FI END PROC dbverzeichniserstellen;
PROC melde(TEXT CONST mt):TEXT CONST mtext:=""+subtext(mt,1,
meldungsfeldlaenge-5)+" ";INT VAR textl:=length(mtext);INT VAR seitenlaenge
:=meldungsfeldlaenge-textl;seitenlaenge:=seitenlaengeDIV 2;TEXT CONST fueller
:=seitenlaenge*" ";TEXT VAR meldung:=fueller+mtext+fueller;
evtlteiltextersetzen;meldungIN meldungsfeld.evtlteiltextersetzen:INT VAR
archpos:=pos(meldung,meldpattern1);IF archpos>0THEN IF NOT (pos(meldung,
meldpattern3)>0)THEN TEXT VAR ergaenztemeldung:=subtext(meldung,1,archpos-1)+
meldpattern3;INT VAR patternpos2:=archpos+patternlaenge;IF (meldungSUB
patternpos2)=meldpattern2THEN ergaenztemeldungCAT subtext(meldung,patternpos2
+1)ELSE ergaenztemeldungCAT subtext(meldung,patternpos2)FI ;meldung:=
ergaenztemeldungFI FI .END PROC melde;TEXT PROC frage(TEXT CONST mess):#
subtext(#mess#,textbeginn)#+fragekennzeichnungEND PROC frage;PROC
archiveoperation(INT CONST auftragscode,TEXT CONST sicherungstask):TASK VAR
sendingtask;letzterauftragscode:=auftragscode;dbsicherungstask:=/
sicherungstask;forget(ds);ds:=nilspace;endequittungda:=FALSE ;error:=FALSE ;
call(dbsicherungstask,auftragscode,ds,quittung);loop.loop:REP SELECT quittung
OF CASE yescode:questionCASE showcode:showenCASE outcode:meldenCASE
endemeldung:beendenCASE errornak:fehlermeldenOTHERWISE :unknowncodeENDSELECT
;UNTIL endequittungdaPER .question:message:=ds;melde(frage(message));LEAVE
archiveoperation.showen:IF auftragscode=listcodeTHEN floppyELSE dbFI .floppy:
forget(dbsicherung,quiet);copy(ds,dbsicherung);floppylistingzeigen;LEAVE
archiveoperation.db:forget(dbinhalt,quiet);copy(ds,dbinhalt);
dbverzeichniszeigen;LEAVE archiveoperation.melden:message:=ds;standardmeldung
(message,"");wartenaufnaechstesendung.wartenaufnaechstesendung:REP forget(ds)
;wait(ds,quittung,sendingtask);IF NOT (sendingtask=dbsicherungstask)THEN
sendnakELSE LEAVE wartenaufnaechstesendungFI PER .beenden:IF
ungleichanmeldenundabmeldenTHEN standardmeldung(meldnr,"");archiveabmelden;
FI ;stufe:=1;endequittungda:=TRUE .meldnr:SELECT auftragscodeOF CASE
formatcode:formatkorrektCASE initcode:initkorrektCASE dbvomserver,dbaufdisk:
sichernkorrektCASE dbzumserver,dbvondisk:ladenkorrektOTHERWISE :opkorrekt
ENDSELECT .ungleichanmeldenundabmelden:auftragscode<>logonarchivecodeCAND
auftragscode<>logoffarchivecode.fehlermelden:message:=ds;standardmeldung(
message,"");IF ungleichanmeldenundabmeldenTHEN archiveabmeldenFI ;stufe:=1;
error:=TRUE ;#return(1);#LEAVE archiveoperation.unknowncode:standardmeldung(
unbekanntercode,": "+text(quittung)+"#");stufe:=1;#return(1);#LEAVE loop.
sendnak:send(sendingtask,nak,ds).ENDPROC archiveoperation;PROC
floppylistingzeigen:editiere(dbsicherung)ENDPROC floppylistingzeigen;PROC
dbverzeichniszeigen:editiere(dbinhalt,FALSE )ENDPROC dbverzeichniszeigen;
PROC endedbverzeichnis:killundenter(2)ENDPROC endedbverzeichnis;PROC
endefloppylisting:archiveabmelden;killundenter(2)ENDPROC endefloppylisting;
PROC archiveanmelden:eingabepruefeneinfach;IF eingabestatus<>0THEN infeld(
eingabestatus);return(1)ELSE archiveoperation(logonarchivecode,dbsicherung);
IF #quittung=endemeldung#endequittungdaCAND NOT errorTHEN anmeldetask:=
dbsicherungELSE anmeldetask:=""FI FI ENDPROC archiveanmelden;PROC
archiveabmelden:IF anmeldetask<>""THEN archiveoperation(logoffarchivecode,
anmeldetask);anmeldetask:=""FI ENDPROC archiveabmelden;PROC meldungquittieren
(BOOL CONST b):BOUND BOOL VAR boolds;forget(ds);ds:=nilspace;boolds:=ds;
boolds:=b;send(/dbsicherung,yescode,ds);forget(ds);IF bTHEN enter(1)ELSE
standardmeldung(inkonsicherung,"");archiveabmelden;#enter(2)#return(2)FI
ENDPROC meldungquittieren;PROC bestimmendersicherungstask:
eingabepruefeneinfach;IF eingabestatus<>0THEN infeld(eingabestatus);return(1)
FI ENDPROC bestimmendersicherungstask;PROC sicherungsloop:TASK VAR
sendingtask;endequittungda:=FALSE ;REP wartenaufnaechstesendung;SELECT
quittungOF CASE yescode:questionCASE outcode:meldenCASE endemeldung:beenden
CASE errornak:fehlermeldenOTHERWISE :unknowncodeENDSELECT ;PER .question:
message:=ds;melde(frage(message));LEAVE sicherungsloop.melden:message:=ds;
standardmeldung(message,"");#wartenaufnaechstesendung#.
wartenaufnaechstesendung:REP forget(ds);wait(ds,quittung,sendingtask);IF NOT
(sendingtask=dbsicherungstask)THEN sendnakELSE LEAVE wartenaufnaechstesendung
FI PER .beenden:standardmeldung(meldnr,"");archiveabmelden;stufe:=1;return(1)
;endequittungda:=TRUE ;LEAVE sicherungsloop.meldnr:SELECT letzterauftragscode
OF CASE dbvomserver,dbaufdisk:sichernkorrektCASE dbzumserver,dbvondisk:
ladenkorrektOTHERWISE :opkorrektENDSELECT .fehlermelden:message:=ds;
standardmeldung(message,"");archiveabmelden;error:=TRUE ;stufe:=1;return(1);
LEAVE sicherungsloop.unknowncode:standardmeldung(unbekanntercode,"");stufe:=1
;return(1);LEAVE sicherungsloop.sendnak:send(sendingtask,nak,ds).ENDPROC
sicherungsloop;END PACKET sicherungsmonitor