1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
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
|