summaryrefslogtreecommitdiff
path: root/app/baisy/2.2.1-schulis/src/isp.objektliste
blob: 46262e16b0b21ca6790e3af89268df30e49b2442 (plain)
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
PACKET ispobjektlisteDEFINES objektlistestarten,objektlistenausgabe,
listenobjektezeigen,datensatzlistenausgabe,datensatzlistezeigen,
objektlistenmaskeeinlesen,objektlistebeenden,maxidentizeilenlaenge,
setzeidentiwert,#savetupel,17.10.88##restoretupel,17.10.88#pruefungdummy,
pruefungbenutzerbestand,satzlesen,einendatensatzlesen,bestandende,
setzebestandende,plus,minus,eineseiteeinlesen,blaettern,initobli,
inlisteblaettern,setzescanendewert,setzescanstartwert:TAG VAR aktuellemaske;
TEXT VAR identiobjekt,sicherungstupel:="";TEXT VAR scanstartwert:="",
scanendewert:="�";INT VAR posi,aktletztesfeld,dateinummer,aktindex;INT VAR 
anzahltupel;LET erstesfeld=2,maxletztesfeld=36,markierung="x",keinemarkierung
="",eingabefeldnr=2,felderprozeile=2,erfwerteinobli=5,schluesseltrenner="$";
LET delimiter="�";LET andenanfang=1,ansende=2,vorwaerts=3,rueckwaerts=4;LET 
meldungnichtblaettern=72;LET satzzahl=18;TEXT VAR scanwertsicherung,
scantupelsicherung;INT VAR scanfeldsicherung,feldnummerstartwert;INT VAR 
fenster,gelesen;INT VAR anzschluesselfelder:=1;LET zeilenlaenge=70;INT VAR 
identizeilegesamtlaenge:=70;BOOL VAR ersterbildschirm,bestandsende;BOOL VAR 
letzterbildschirm;BOOL VAR ersterdatensatz;BOOL VAR nureinedatenseiteROW 
satzzahlBOOL VAR angekreuzt;ROW satzzahlTEXT VAR identitabelle;PROC 
setzescanendewert(TEXT CONST endewert):scanendewert:=endewertENDPROC 
setzescanendewert;PROC setzescanstartwert(TEXT CONST startwert):scanstartwert
:=startwertENDPROC setzescanstartwert;PROC objektlistestarten(INT CONST 
aktdateinummer,TEXT CONST startwert,BOOL CONST anwendung,BOOL VAR 
listenendeerreicht):objektlistestarten(aktdateinummer,startwert,
aktdateinummer+2,anwendung,listenendeerreicht)END PROC objektlistestarten;
PROC objektlistestarten(INT CONST aktdateinummer,TEXT CONST startwert,INT 
CONST fnrstartwert,BOOL CONST anwendung,BOOL VAR listenendeerreicht):LET 
indextrenner=";";INT VAR erstertrenner:=0;TEXT VAR indextext:="";IF anwendung
THEN systemdboffELSE systemdbonFI ;aktindex:=aktdateinummer;dateinummer:=
dateinr(primdatid(aktindex));anzschluesselfelder:=anzkey(dateinummer);
feldnummerstartwert:=fnrstartwert;IF scanueberdiedateinummerTHEN 
scanfeldsicherung:=1;ELSE indextext:=zugriff(aktindex);erstertrenner:=pos(
indextext,indextrenner);scanfeldsicherung:=int(subtext(indextext,1,
erstertrenner-1));FI ;#IF scanueberdiedateinummerTHEN #IF 
dateinummerzugelassenTHEN putwert(dateinummer+1,startwert)ELSE putwert(
dateinummer+2,startwert);IF dateinummer=dnrbenutzTHEN putwert(
fnrbenutzbestand,benutzerbestandSUB 1)FI ;FI ;#ELSE IF 
uebereinenganzensekindexTHEN putwert(scanfeldsicherung,startwert)ELSE putwert
(feldnummerstartwert,startwert)FI FI ;#scanwertsicherung:=wert(dateinummer+
scanfeldsicherung);savescanwert;search(aktindex,FALSE );IF (
scanueberdiedateinummerCOR uebereinenganzensekindex)CAND 
dateinummerzugelassen#dr11.05.88#THEN listenendeerreicht:=dbstatus<>okELSE 
listenendeerreicht:=dbstatus<>okCOR (dbstatus=okAND wert(dateinummer+
scanfeldsicherung)<>scanwertsicherung)FI ;listenendenochnichterreicht(
startwert,listenendeerreicht).dateinummerzugelassen:dateinummer<>
dnrschluesselAND dateinummer<>dnrbenutz.END PROC objektlistestarten;PROC 
listenendenochnichterreicht(TEXT CONST wert,BOOL CONST ende):IF NOT endeTHEN 
ersterbildschirm:=(wert="");ersterdatensatz:=(wert="");letzterbildschirm:=
FALSE ;bestandsende:=FALSE ;FI .END PROC listenendenochnichterreicht;PROC 
objektlistenausgabe(PROC (INT CONST )erfassungspeziell,BOOL CONST scanja,
BOOL PROC pruefungspeziell):initobli;listenmaskeholenundausgeben;
identizeilegesamtlaenge:=zeilenlaenge;inlisteblaettern(PROC erfassungspeziell
,vorwaerts,FALSE ,scanja,BOOL PROC pruefungspeziell);
objektlistenmaskeeinlesen.END PROC objektlistenausgabe;PROC 
datensatzlistenausgabe(PROC (INT CONST )erfassungspeziell,BOOL CONST scanja,
BOOL PROC pruefungspeziell):initobli;listenmaskeholenundausgeben;
identizeilegesamtlaenge:=zeilenlaenge;inlisteblaettern(PROC erfassungspeziell
,vorwaerts,TRUE ,scanja,BOOL PROC pruefungspeziell);objektlistenmaskeeinlesen
.ENDPROC datensatzlistenausgabe;PROC initobli:initobli(18)END PROC initobli;
PROC initobli(INT CONST szahl):leererthesaurus;bestandsende:=FALSE ;fenster:=
szahlEND PROC initobli;PROC listenmaskeholenundausgeben:LET listenmaskenname=
"mu objektliste";initmaske(aktuellemaske,listenmaskenname);standardstartproc(
listenmaskenname).END PROC listenmaskeholenundausgeben;PROC 
listenobjektezeigen(PROC (INT CONST )erfassungspeziell,INT CONST start):
listenobjektezeigen(PROC (INT CONST )erfassungspeziell,start,FALSE ,BOOL 
PROC pruefungdummy)END PROC listenobjektezeigen;PROC listenobjektezeigen(
PROC (INT CONST )erfassungspeziell,INT CONST start,BOOL CONST scanja,BOOL 
PROC pruefungspeziell):IF aktindex=dnrschluesselTHEN inlisteblaettern(PROC 
erfassungspeziell,start,TRUE ,scanja,BOOL PROC pruefungspeziell);ELSE 
inlisteblaettern(PROC erfassungspeziell,start,FALSE ,scanja,BOOL PROC 
pruefungspeziell);FI ;return(1).END PROC listenobjektezeigen;PROC 
datensatzlistezeigen(PROC (INT CONST )erfassungspeziell,INT CONST start):
datensatzlistezeigen(PROC (INT CONST )erfassungspeziell,start,FALSE ,BOOL 
PROC pruefungdummy)END PROC datensatzlistezeigen;PROC datensatzlistezeigen(
PROC (INT CONST )erfassungspeziell,INT CONST start,BOOL CONST scanja,BOOL 
PROC pruefungspeziell):inlisteblaettern(PROC erfassungspeziell,start,TRUE ,
scanja,BOOL PROC pruefungspeziell);return(1).END PROC datensatzlistezeigen;
PROC inlisteblaettern(PROC (INT CONST )erfassungspeziell,INT CONST start,
BOOL CONST anwendung,BOOL CONST scanja,BOOL PROC pruefungspeziell):IF 
anwendungTHEN systemdboffELSE systemdbonFI ;IF blaetternerforderlichTHEN posi
:=eingabefeldnr;aktletztesfeld:=maxletztesfeld;blaettern(PROC 
erfassungspeziell,start,scanja,BOOL PROC pruefungspeziell);IF (gelesen-1)<#
satzzahl#fensterAND gelesen>0THEN leerzeilenFI ;ELSE 
meldungdasnichtgeblaettertwirdFI ;IF NOT anwendungTHEN systemdboffFI ;posi:=
eingabefeldnr.blaetternerforderlich:SELECT startOF CASE andenanfang:NOT 
ersterbildschirmCASE ansende:NOT letzterbildschirmCASE vorwaerts:NOT 
letzterbildschirmCASE rueckwaerts:NOT ersterbildschirmOTHERWISE FALSE END 
SELECT .END PROC inlisteblaettern;PROC blaettern(PROC (INT CONST )
erfassungspeziell,INT CONST start,BOOL CONST anwendung,BOOL CONST scanja,
BOOL PROC pruefungspeziell):IF anwendungTHEN systemdboffELSE systemdbonFI ;
IF blaetternerforderlichTHEN blaettern(PROC erfassungspeziell,start,scanja,
BOOL PROC pruefungspeziell);ELSE standardmeldung(meldungnichtblaettern,"");
FI ;IF NOT anwendungTHEN systemdboffFI ;.blaetternerforderlich:SELECT start
OF CASE andenanfang:NOT ersterbildschirmCASE ansende:NOT letzterbildschirm
CASE vorwaerts:NOT letzterbildschirmCASE rueckwaerts:NOT ersterbildschirm
OTHERWISE FALSE END SELECT .END PROC blaettern;PROC zeigenschluessel:IF 
identiobjekt=""THEN LEAVE zeigenschluesselFI ;INT VAR schluesselbeginn:=pos(
identiobjekt,schluesseltrenner);identitabelle(posiDIV felderprozeile):=
subtext(identiobjekt,schluesselbeginn);identiobjekt:=subtext(identiobjekt,1,
schluesselbeginn-1);IF objektmarkiert(identitabelle(posiDIV felderprozeile))
THEN markierungIN posi;angekreuzt(posiDIV felderprozeile):=TRUE ELSE 
keinemarkierungIN posi;angekreuzt(posiDIV felderprozeile):=FALSE FI ;feldfrei
(posi);identiobjektIN (posi+1);posiINCR felderprozeile.END PROC 
zeigenschluessel;INT PROC maxidentizeilenlaenge:identizeilegesamtlaengeEND 
PROC maxidentizeilenlaenge;PROC setzeidentiwert(TEXT CONST identizeile):
identiobjekt:=identizeileEND PROC setzeidentiwert;PROC leerzeilen:
aktletztesfeld:=posi-felderprozeile;WHILE posi<=maxletztesfeldREP 
leerzeileausgeben;posiINCR felderprozeilePER .leerzeileausgeben:""IN posi;""
IN (posi+1);feldschutz(posi).END PROC leerzeilen;BOOL PROC objektmarkiert(
TEXT CONST suchtext):inthesaurus(suchtext).END PROC objektmarkiert;PROC 
objektlistenmaskeeinlesen:infeld(eingabefeldnr);standardnproc;BOOL VAR 
markneu,markalt;posi:=erstesfeld;WHILE posi<=aktletztesfeldREP markneu:=
standardmaskenfeld(posi)<>"";markalt:=angekreuzt(posiDIV felderprozeile);IF 
markierungsaenderungTHEN identiobjekt:=identitabelle(posiDIV felderprozeile);
IF neuemarkierungTHEN trageinthesaurusein(identiobjekt)ELIF 
markierungweggenommenTHEN loescheausthesaurus(identiobjekt)FI ;FI ;posiINCR 
felderprozeile;PER .markierungsaenderung:(markaltAND NOT markneu)OR (NOT 
markaltAND markneu).neuemarkierung:markneu.markierungweggenommen:markalt.END 
PROC objektlistenmaskeeinlesen;PROC objektlistebeenden(TEXT CONST dateiname,
BOOL CONST uebernahme):IF uebernahmeTHEN uebertragethesaurusindatei(dateiname
);#sort(dateiname)sf18.2.87#FI ;END PROC objektlistebeenden;PROC 
setzebestandende(BOOL CONST b):bestandsende:=bENDPROC setzebestandende;BOOL 
PROC bestandende:bestandsendeENDPROC bestandende;PROC einendatensatzlesen(
PROC (INT CONST ,BOOL PROC )mitscanner,PROC ohnescanner,BOOL CONST scanja,
BOOL PROC pruefungspeziell):IF scanjaAND scanerlaubtTHEN mitscanner(aktindex,
BOOL PROC pruefungspeziell)ELSE ohnescannerFI ENDPROC einendatensatzlesen;
PROC satzlesen(INT CONST was,n,BOOL CONST scanja,BOOL PROC pruefungspeziell):
TEXT VAR sicherung:="";anzahltupel:=n;SELECT wasOF CASE andenanfang:
ersteseitelesenCASE ansende:letzteseitelesenCASE vorwaerts:naechsteseitelesen
CASE rueckwaerts:vorherigeseitelesenENDSELECT ;savetupel(dateinummer,
sicherung);bestandsende:=anzahltupel<nCOR (scanjaCAND (NOT scanstackentry(
anzahltupel,BOOL PROC pruefungspeziell)));restoretupel(dateinummer,sicherung)
;changeindex;nureinedatenseite:=(ersterdatensatzCAND was=vorwaertsCAND 
bestandsende);IF ersterdatensatzCAND was=vorwaertsTHEN ersterdatensatz:=
FALSE ;FI ;.ersteseitelesen:ersteletzteseite(scanstartwert,PROC (INT CONST ,
BOOL PROC ,INT VAR )scanforward,PROC (INT CONST )first,scanja,BOOL PROC 
pruefungspeziell,anzahltupel,feldnummerstartwert);IF NOT scanjaTHEN 
multisearchforward(aktindex,anzahltupel)FI ;.letzteseitelesen:
ersteletzteseite(scanendewert,PROC (INT CONST ,BOOL PROC ,INT VAR )scanpred,
PROC (INT CONST )last,scanja,BOOL PROC pruefungspeziell,anzahltupel,
feldnummerstartwert);IF NOT scanjaTHEN multisearchbackward(aktindex,
anzahltupel)FI ;letzterbildschirm:=TRUE ;.naechsteseitelesen:IF 
ersterdatensatzTHEN multisearchforward(aktindex,anzahltupel);ELSE changeindex
;multisucc(aktindex,anzahltupel);ersterbildschirm:=FALSE FI .
vorherigeseitelesen:multisearchbackward(aktindex,anzahltupel);.END PROC 
satzlesen;PROC ersteletzteseite(TEXT CONST startwert,PROC (INT CONST ,BOOL 
PROC ,INT VAR )mitscanner,PROC (INT CONST )ohnescanner,BOOL CONST scanja,
BOOL PROC pruefungspeziell,INT VAR anzahl,INT CONST fnrstartwert):IF scanja
CAND scanerlaubtTHEN setzestartwert;mitscanner(aktindex,BOOL PROC 
pruefungspeziell,anzahl)ELSE ohnescanner(aktindex)FI .setzestartwert:INT VAR 
k,ersteskeyfeld:=dateinummer+1;INT VAR letzteskeyfeld:=dateinummer+
anzschluesselfelder;FOR kFROM ersteskeyfeldUPTO letzteskeyfeldREP putwert(k,
"")PER ;restorescanwert;putwert(fnrstartwert,startwert);changeindex.END PROC 
ersteletzteseite;PROC eineseiteeinlesen(TEXT CONST startwert,PROC (INT CONST 
,BOOL PROC ,INT VAR )mitscanner,PROC (INT CONST )ohnescanner,BOOL CONST 
scanja,BOOL PROC pruefungspeziell,INT VAR anzahl):IF scanjaAND scanerlaubt
THEN IF scanueberdiedateinummerTHEN putwert(aktindex+2,startwert)ELSE putwert
(dateinummer+1,startwert)FI ;mitscanner(aktindex,BOOL PROC pruefungspeziell,
anzahl)ELSE ohnescanner(aktindex)FI ;.END PROC eineseiteeinlesen;PROC 
eineseiteeinlesen(PROC (INT CONST ,BOOL PROC ,INT VAR )mitscanner,PROC (INT 
CONST ,INT VAR )ohnescanner,BOOL CONST scanja,BOOL PROC pruefungspeziell,INT 
VAR anzahl):IF scanjaAND scanerlaubtTHEN dbstatus(ok);mitscanner(aktindex,
BOOL PROC pruefungspeziell,anzahl)ELSE scanstatus(ok);ohnescanner(aktindex,
anzahl)FI .END PROC eineseiteeinlesen;BOOL PROC scanerlaubt:aktindex<>
dateinummerOR (scanueberdiedateinummerAND anzschluesselfelder>1)END PROC 
scanerlaubt;BOOL PROC scanueberdiedateinummer:aktindex=dateinummerEND PROC 
scanueberdiedateinummer;BOOL PROC uebereinenganzensekindex:was(aktindex)=
indexeintragCAND feldnummerstartwert=0END PROC uebereinenganzensekindex;PROC 
vorherigeseitezeigen(PROC (INT CONST )erfassungspeziell,INT CONST anzahl,
BOOL CONST scanja,BOOL PROC pruefung):INT VAR lv,ende:=2;gelesen:=0;
stackentry(anzahl-1);savetupel(dateinummer,sicherungstupel);IF 
letzterbildschirmTHEN ende:=1FI ;FOR lvFROM anzahl-1DOWNTO endeREP stackentry
(lv);erfassungspeziell(erfwerteinobli);zeigenschluessel;gelesenINCR 1PER ;IF 
ende=2THEN stackentry(ende-1)FI .END PROC vorherigeseitezeigen;PROC 
naechsteseitezeigen(PROC (INT CONST )erfassungspeziell,INT CONST anzahl,BOOL 
CONST scanja,BOOL PROC pruefung):INT VAR lv;gelesen:=0;
sicherungfuerzurueckblaettern;IF bestandsendeTHEN letzterbildschirm:=TRUE ;
ausgabeschleifemitscanueberpruefungELSE ausgabeschleifeohnescanueberpruefung
FI .sicherungfuerzurueckblaettern:IF NOT ersterbildschirmTHEN savetupel(
dateinummer,sicherungstupel);zeigenzeile;FI .
ausgabeschleifemitscanueberpruefung:FOR lvFROM 1UPTO anzahlREP stackentry(lv)
;IF (scanjaCAND pruefung)OR NOT scanjaTHEN zeigenzeile;ELSE LEAVE 
naechsteseitezeigenFI PER .ausgabeschleifeohnescanueberpruefung:FOR lvFROM 1
UPTO (anzahl-1)REP stackentry(lv);zeigenzeilePER ;stackentry(anzahl);.
zeigenzeile:erfassungspeziell(erfwerteinobli);zeigenschluessel;gelesenINCR 1.
END PROC naechsteseitezeigen;PROC blaettern(PROC (INT CONST )
erfassungspeziell,INT CONST aktion,BOOL CONST scanja,BOOL PROC 
pruefungspeziell):SELECT aktionOF CASE andenanfang:blaettereandenanfangCASE 
ansende:blaettereansendeCASE vorwaerts:blaetterevorwaertsCASE rueckwaerts:
blaettererueckwaertsEND SELECT .blaettereandenanfang:anfang(PROC 
erfassungspeziell,scanja,BOOL PROC pruefungspeziell).blaettereansende:
ersterbildschirm:=FALSE ;ersterdatensatz:=FALSE ;aufbestandendepositionieren;
IF bestandsendeTHEN anfang(PROC erfassungspeziell,scanja,BOOL PROC 
pruefungspeziell)ELSE vorherigeseitezeigen(PROC erfassungspeziell,anzahltupel
,scanja,BOOL PROC pruefungspeziell)FI .aufbestandendepositionieren:satzlesen(
ansende,fenster+1,scanja,BOOL PROC pruefungspeziell);.blaetterevorwaerts:plus
(fenster,PROC erfassungspeziell,scanja,BOOL PROC pruefungspeziell).
blaettererueckwaerts:restoretupel(dateinummer,sicherungstupel);changeindex;
minus(fenster+2,PROC erfassungspeziell,scanja,BOOL PROC pruefungspeziell).
END PROC blaettern;PROC meldungdasnichtgeblaettertwird:TEXT VAR 
zwischensicherung:="";savetupel(dateinummer,zwischensicherung);
meldeauffaellig(aktuellemaske,meldungnichtblaettern);gelesen:=0;restoretupel(
dateinummer,zwischensicherung);changeindex.END PROC 
meldungdasnichtgeblaettertwird;PROC anfang(PROC (INT CONST )erfassungspeziell
,BOOL CONST scanja,BOOL PROC pruefungspeziell):IF scanjaTHEN restorescanwert;
changeindexFI ;IF NOT ersterbildschirmTHEN ersterbildschirm:=TRUE ;
aufanfangpositionieren;naechsteseitezeigen(PROC erfassungspeziell,anzahltupel
,scanja,BOOL PROC pruefungspeziell);FI .aufanfangpositionieren:
letzterbildschirm:=FALSE ;satzlesen(andenanfang,fenster+1,scanja,BOOL PROC 
pruefungspeziell).END PROC anfang;PROC plus(INT CONST saetzevor,PROC (INT 
CONST )erfassungspeziell,BOOL CONST scanja,BOOL PROC pruefungspeziell):
letzterbildschirm:=FALSE ;IF NOT ersterdatensatzTHEN ersterbildschirm:=FALSE 
;satzlesen(vorwaerts,saetzevor,scanja,BOOL PROC pruefungspeziell);ELSE 
satzlesen(vorwaerts,saetzevor+1,scanja,BOOL PROC pruefungspeziell);FI ;
naechsteseitezeigen(PROC erfassungspeziell,anzahltupel,scanja,BOOL PROC 
pruefungspeziell);IF nureinedatenseiteTHEN putwert(dateinummer+
scanfeldsicherung,scanwertsicherung)FI ;END PROC plus;PROC minus(INT CONST 
saetzezurueck,PROC (INT CONST )erfassungspeziell,BOOL CONST scanja,BOOL PROC 
pruefungspeziell):#neudr30.01.87#satzlesen(rueckwaerts,saetzezurueck,scanja,
BOOL PROC pruefungspeziell);IF bestandsendeTHEN anfang(PROC erfassungspeziell
,scanja,BOOL PROC pruefungspeziell)ELSE ersterbildschirm:=FALSE ;
letzterbildschirm:=FALSE ;vorherigeseitezeigen(PROC erfassungspeziell,
saetzezurueck,scanja,BOOL PROC pruefungspeziell)FI .END PROC minus;PROC 
initankreuzliste:INT VAR i;FOR iFROM 1UPTO satzzahlREP angekreuzt(i):=FALSE 
PER ;END PROC initankreuzliste;#dr17.10.88PROC savetupel(INT CONST dnr,TEXT 
VAR tupel):INT VAR fnr,primdat;IF was(dnr)=dateieintragTHEN primdat:=dnrELSE 
primdat:=dateinr(primdatid(dnr))FI ;tupel:="";FOR fnrFROM 1UPTO anzattr(
primdat)REP tupelCAT (wert(primdat+fnr)+delimiter)PER ENDPROC savetupel;PROC 
restoretupel(INT CONST dnr,TEXT VAR tupel):INT VAR fnr,primdat,p;TEXT VAR 
feldwert,data:=tupel;IF was(dnr)=dateieintragTHEN primdat:=dnrELSE primdat:=
dateinr(primdatid(dnr))FI ;FOR fnrFROM primdat+1UPTO primdat+anzattr(primdat)
REP p:=pos(data,delimiter);feldwert:=subtext(data,1,(p-1));putwert(fnr,
feldwert);change(data,1,p,"")PER ENDPROC restoretupel;#BOOL PROC 
pruefungdummy:TRUE END PROC pruefungdummy;BOOL PROC pruefungbenutzerbestand:(
wert(fnrbenutzbestand))=(benutzerbestandSUB 1)END PROC 
pruefungbenutzerbestand;TEXT VAR savedscan:="";LET savedscansep="�",dateityp=
1;PROC savescanwert:savedscan:="";transversale(feldnummerstartwert,PROC (INT 
CONST ,INT VAR )save,FALSE )ENDPROC savescanwert;PROC restorescanwert:
transversale(feldnummerstartwert,PROC (INT CONST ,INT VAR )restore,TRUE )
ENDPROC restorescanwert;PROC transversale(INT CONST fnrsetzfeld,PROC (INT 
CONST ,INT VAR )pproc,BOOL CONST rsetzen):TEXT VAR z:=zugriffaufbauen;INT 
VAR p:=1,psem:=pos(z,";"),i,fnrsf:=fnrsetzfeld-dateinummer;INT VAR fnr:=int(
subtext(z,p,psem-1)),p1:=1;BOOL VAR pausf:=TRUE ;WHILE #fnr<>fnrsfCAND #fnr>0
REP IF fnr=fnrsfTHEN pausf:=FALSE ELSE IF pausfTHEN pproc(fnr+dateinummer,p1)
;ELSE IF rsetzenTHEN putwert(fnr+dateinummer,"")FI FI FI ;p:=psem+1;psem:=pos
(z,";",p);fnr:=int(subtext(z,p,psem-1))PER .zugriffaufbauen:IF was(aktindex)=
dateitypTHEN TEXT VAR x:="";FOR iFROM 1UPTO anzkey(aktindex)REP xCAT (text(i)
+";")PER ;xELSE zugriff(aktindex)FI .ENDPROC transversale;PROC save(INT 
CONST fnr,INT VAR p):savedscanCAT (wert(fnr)+savedscansep)ENDPROC save;PROC 
restore(INT CONST fnr,INT VAR p):INT VAR p2:=p;p:=pos(savedscan,savedscansep,
p2)+1;putwert(fnr,subtext(savedscan,p2,p-2))ENDPROC restore;END PACKET 
ispobjektliste;