summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/5.felder
blob: 3fd622560c32f8b83c61e4e2d1341383e4ad6194 (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
253
254
255
256
257
258
259
260
261
262
263
PACKET felderDEFINES statfelder:LET statistikdatei="STATISTIK.",
statistikserver="statistik server",maskefelderdefinieren=
"mst statistik felder definieren",maskefelderbearbeiten=
"mst statistik felder bearbeiten",maskefelderstandarddruck=
"mst statistik felder standarddruck",statistikvorzeilen=3,maxstatistiken=200,
maxspalten=50,minbreite=4,maxbreite=30,niltext="",space=" ",meldungzusatz="+"
,pruefeimintervall=3,fwarten=1,fstatnr=2,fuebertragen=3,ffeldnr=3,fzeile=4,
fspalte=5,fart=6,fdef=7,fkopieren=8,fnaechstes=9,mnichterlaubt=34,
mgibtesnicht=477,martangeben=478,mmussleerbleiben=491,mnureineauswahl=492,
mspeichern=486,mnichtspeichern=487,muebernehmenfrage=493,mnichtgleichgross=
494,muebernehmen=495,msyntaxfehler=496,mdefzulang=497;FILE VAR stat;TEXT VAR 
statistikname;BOOL VAR statgeaendert;INT VAR zeilen,spalten,felder,
letztemeldung,verlassentiefe;ROW maxspaltenINT VAR breiten;LET normalesende=
FALSE ,klammeramende=TRUE ,fvergleicherwartet=1,fmerkmalerwartet=2,
fvergleichsoperwartet=3,fkommaerwartet=4,ftexterwartet=5,fklammerzuerwartet=6
,fbooloperwartet=7,ftextfeldsummiert=8,fdatumfalsch=9,fhierkeinjoker=10,
frechenoperwartet=11,ffeldnrerwartet=12,ffeldnrzuhoch=13,fzubreit=14,
fpatternzulang=15,fzahlfalsch=16,tendedestextes=7,tname=1,ttext=4,atext=1,
adate=2,azahl=3,akurs=4,squote="""",snull="0",skomma=",",sgleich="=",sspace=
" ",sgroesser=">",sklammerauf="(",skleiner="<",sklammerzu=")",sgroessergleich
=">=",sfeld="f",skleinergleich="<=",skurs="kurs",sungleich="<>",smerkmal="m",
sand="AND",sjoker="*",sor="OR",splus="+",sund="UND",sminus="-",soder="ODER";
TEXT VAR symbol;INT VAR type,fehlernr;BOOL VAR ok;PROC statfelder(INT CONST 
was):TEXT VAR bezeichnung,liste;INT VAR breite,hoehe,zaehler,status;SELECT 
wasOF CASE 1:felderbearbeitenstartprocCASE 2:felderbearbeitenspeichernCASE 3:
felderbearbeitennaechstesfeldCASE 4:felderbearbeitenzumbeginnCASE 5:
felderbearbeitenmerkmalslisteCASE 6:felderbearbeitendefinitionkopierenCASE 7:
felderlistezeigenCASE 8:felderlistebearbeitenstartprocCASE 9:
felderstandarddruckstartprocCASE 10:felderstandarddruckspeichernCASE 11:
felderstandarddrucknichtspeichernCASE 12:felderlistestandarddruckstartproc
CASE 13:felderlistestandarddruckspeichernCASE 14:
felderlistestandarddrucknichtspeichernCASE 15:
felderlistestandarddruckzumbeginnCASE 16:felderuebernehmenstartprocCASE 17:
felderuebernehmenexecCASE 18:allefelderspeichernEND SELECT .
felderbearbeitenstartproc:IF NOT statnummerokTHEN leave(1);ELIF 
standardmaskenfeld(fuebertragen)>niltextTHEN standardmeldung(mmussleerbleiben
,niltext);infeld(fuebertragen);leave(1);ELSE statistikladen(statnummer);
standardstartproc(maskefelderbearbeiten);verlassentiefe:=0;feldbearbeiten(1);
standardnproc;FI .felderbearbeitenspeichern:IF NOT feldeingabenokTHEN leave(1
);ELSE speicherefeldab;felderbearbeitennaechstesfeld;FI .
felderbearbeitennaechstesfeld:IF NOT naechstefeldnummerokTHEN leave(1);ELIF 
compress(standardmaskenfeld(fnaechstes))=niltextTHEN 
felderbearbeitenzumbeginnELSE feldbearbeiten(int(standardmaskenfeld(
fnaechstes)));leave(1);FI .felderbearbeitenzumbeginn:statistiksichern;
standardstartproc(maskefelderdefinieren);standardmaskenfeld(statistikname,
fstatnr);leave(2+verlassentiefe).allefelderspeichern:WHILE feldeingabenok
CAND naechstefeldnummerokREP speicherefeldab;IF standardmaskenfeld(fnaechstes
)=niltextTHEN felderbearbeitenzumbeginn;LEAVE allefelderspeichernELSE 
feldbearbeiten(int(standardmaskenfeld(fnaechstes)));FI ;PER ;leave(1).
felderbearbeitenmerkmalsliste:WINDOW VAR w:=startwindow(40,23,77,1);open(w);
bereitelisteauf;listeCAT "*";listeCAT auskunftstextende;auskunfterteilung(
liste,w,FALSE );reorganizescreen;setlasteditvalues;leave(1).bereitelisteauf:
liste:="Bez.  Feld                Länge";listeCAT auskunftstextende;FOR 
zaehlerFROM 1UPTO 50REP IF zaehler=39THEN listeCAT 
"      davon Art               2";listeCAT auskunftstextende;listeCAT 
"            Fach              2";listeCAT auskunftstextende;listeCAT 
"            Kennung           4";listeCAT auskunftstextende;listeCAT 
"            Klausur           1";listeCAT auskunftstextende;FI ;IF zaehler<
10THEN listeCAT "m0"ELSE listeCAT "m"FI ;listeCAT text(zaehler);listeCAT 
" = ";listeCAT text(statfeldname(zaehler),24);listeCAT text(statfeldlaenge(
zaehler));listeCAT auskunftstextende;PER .felderbearbeitendefinitionkopieren:
standardpruefe(pruefeimintervall,fkopieren,1,felder,niltext,status);IF status
>0THEN infeld(status)ELSE felddefinitionzeigen(int(standardmaskenfeld(
fkopieren)))FI ;leave(1).felderlistezeigen:letztemeldung:=0;statlistezeigen(
int(standardmaskenfeld(fstatnr))).felderlistebearbeitenstartproc:IF 
highestentry(thesaurusauswahl)=1THEN statlistebearbeiten(
maskefelderbearbeiten);statistikladen(statlisteeintrag);verlassentiefe:=1;
feldbearbeiten(1);standardnproc;ELSE standardstartproc(maskefelderdefinieren)
;IF highestentry(thesaurusauswahl)>1THEN standardmeldung(mnureineauswahl,
niltext);FI ;leave(2);FI .felderstandarddruckstartproc:IF NOT statnummerok
THEN leave(1);ELIF standardmaskenfeld(fuebertragen)>niltextTHEN 
standardmeldung(mmussleerbleiben,niltext);infeld(fuebertragen);leave(1);ELSE 
statistikladen(statnummer);standardstartproc(maskefelderstandarddruck);
spaltenbreiteneintragen;standardnproc;FI .felderstandarddruckspeichern:IF 
NOT spaltenbreitenokTHEN leave(1);ELSE spaltenbreitenspeichern;
standardstartproc(maskefelderdefinieren);standardmeldung(mspeichern,
statistikname+meldungzusatz);statistiksichern;standardmaskenfeld(
statistikname,fstatnr);leave(2);FI .felderstandarddrucknichtspeichern:
standardstartproc(maskefelderdefinieren);standardmeldung(mnichtspeichern,
statistikname+meldungzusatz);statistikvergessen;standardmaskenfeld(
statistikname,fstatnr);leave(2).felderlistestandarddruckstartproc:
statlistebearbeiten(maskefelderstandarddruck);IF statlisteeintrag>niltext
THEN statistikladen(statlisteeintrag);spaltenbreiteneintragen;standardnproc;
ELSE standardstartproc(maskefelderdefinieren);IF letztemeldung=mspeichernOR 
letztemeldung=mnichtspeichernTHEN standardmeldung(letztemeldung,statistikname
+meldungzusatz);FI ;leave(2);FI .felderlistestandarddruckspeichern:IF NOT 
spaltenbreitenokTHEN leave(1);ELSE standardmeldung(mspeichern,statistikname+
meldungzusatz);letztemeldung:=mspeichern;spaltenbreitenspeichern;
statistiksichern;standardmaskenfeld(statistikname,fstatnr);enter(1);FI .
felderlistestandarddrucknichtspeichern:standardmeldung(mnichtspeichern,
statistikname+meldungzusatz);letztemeldung:=mnichtspeichern;
statistikvergessen;enter(1).felderlistestandarddruckzumbeginn:
statistikvergessen;enter(3).felderuebernehmenstartproc:standardpruefe(
pruefeimintervall,fuebertragen,1,maxstatistiken,niltext,status);IF status>0
THEN infeld(status);leave(1);ELIF NOT statistikexistiert(uebernehmennummer)
THEN standardmeldung(mgibtesnicht,uebernehmennummer+meldungzusatz);infeld(
fuebertragen);leave(1);ELIF NOT statnummerokTHEN leave(1);ELIF 
diedefinitionensindnichtgleichgrossTHEN standardmeldung(mnichtgleichgross,
niltext);leave(1);ELSE standardmeldung(muebernehmenfrage,niltext);feldschutz(
fwarten);feldschutz(fstatnr);feldschutz(fuebertragen);infeld(fwarten);
standardnproc;FI .diedefinitionensindnichtgleichgross:statistikladen(
statnummer);hoehe:=zeilen;breite:=spalten;statistikvergessen;statistikladen(
uebernehmennummer);statistikvergessen;hoehe<>zeilenOR breite<>spalten.
felderuebernehmenexec:statistikladen(statnummer);tofirstrecord(stat);
readrecord(stat,bezeichnung);statistikvergessen;statistikladen(
uebernehmennummer);tofirstrecord(stat);writerecord(stat,bezeichnung);toline(
stat,statistikvorzeilen);writerecord(stat,niltext);rename(statistikdatei+
uebernehmennummer,statistikdatei+statnummer);statistikname:=statnummer;
statistiksichern;standardmeldung(muebernehmen,uebernehmennummer+meldungzusatz
);feldfrei(fstatnr);feldfrei(fuebertragen);standardmaskenfeld(niltext,
fuebertragen);infeld(fstatnr);leave(2).naechstefeldnummerok:IF compress(
standardmaskenfeld(fnaechstes))=niltextTHEN standardmaskenfeld(niltext,
fnaechstes);status:=0;ELSE standardpruefe(pruefeimintervall,fnaechstes,1,
felder,niltext,status);FI ;IF status>0THEN infeld(status)FI ;status=0.
feldeingabenok:status:=0;IF art=0THEN standardmeldung(mnichterlaubt,niltext);
status:=fart;ELIF NOT definitionokTHEN status:=fdef;ELIF standardmaskenfeld(
fkopieren)>niltextTHEN standardmeldung(mmussleerbleiben,niltext);status:=
fkopieren;ELIF NOT naechstefeldnummerokTHEN status:=fnaechstes;FI ;IF status>
0THEN infeld(status);FI ;status=0.definitionok:SELECT artOF CASE 1:
bedingungok(fdef)CASE 2:summeok(fdef)CASE 3:textok(fdef,breiten[int(
standardmaskenfeld(fspalte))])OTHERWISE leerokEND SELECT .leerok:IF 
standardmaskenfeld(fdef)>niltextTHEN standardmeldung(martangeben,niltext);
FALSE ELSE TRUE FI .art:IF standardmaskenfeld(fart)=niltextTHEN 4ELSE pos(
"bst ",standardmaskenfeld(fart))FI .spaltenbreiteneintragen:input(stat);
getline(stat,bezeichnung);get(stat,hoehe);get(stat,breite);standardmaskenfeld
(text(statistikname,3),fstatnr);FOR zaehlerFROM 1UPTO spaltenREP 
tragespaltenwertein;feldfrei(breitenfeld+1);PER ;FOR zaehlerFROM spalten+1
UPTO maxspaltenREP standardmaskenfeld(space+space,breitenfeld);
standardmaskenfeld(space+space,breitenfeld+1);feldschutz(breitenfeld+1);PER ;
modify(stat);infeld(2);standardfelderausgeben;infeld(4).tragespaltenwertein:
get(stat,breite);standardmaskenfeld(text(zaehler,2),breitenfeld);
standardmaskenfeld(text(breite),breitenfeld+1).breitenfeld:(zaehler-1)MOD 10*
10+(zaehler-1)DIV 10*2+3.spaltenbreitenok:FOR zaehlerFROM 1UPTO spaltenREP 
standardpruefe(pruefeimintervall,breitenfeld+1,minbreite,maxbreite,niltext,
status);UNTIL status>0PER ;IF status>0THEN infeld(status)FI ;status=0.
spaltenbreitenspeichern:bezeichnung:=text(zeilen)+space+text(spalten)+space;
FOR zaehlerFROM 1UPTO spaltenREP bezeichnungCAT text(int(standardmaskenfeld(
breitenfeld+1)));bezeichnungCAT space;PER ;toline(stat,2);writerecord(stat,
bezeichnung).statnummerok:standardpruefe(pruefeimintervall,fstatnr,1,
maxstatistiken,niltext,status);IF status>0THEN infeld(status)ELIF NOT 
statistikexistiert(statnummer)THEN standardmeldung(mgibtesnicht,statnummer+
meldungzusatz);infeld(fstatnr);status:=fstatnrFI ;status=0.statnummer:text(
int(standardmaskenfeld(fstatnr))).uebernehmennummer:text(int(
standardmaskenfeld(fuebertragen))).END PROC statfelder;PROC statistikladen(
TEXT CONST statnummer):INT VAR spaltenzaehler;forget(statistikdatei+
statnummer,quiet);fetch(statistikdatei+statnummer,task(statistikserver));stat
:=sequentialfile(input,statistikdatei+statnummer);getline(stat,statistikname)
;get(stat,zeilen);get(stat,spalten);FOR spaltenzaehlerFROM 1UPTO spaltenREP 
get(stat,breiten[spaltenzaehler]);PER ;modify(stat);felder:=zeilen*spalten;
statistikname:=statnummer;statgeaendert:=FALSE ;END PROC statistikladen;PROC 
statistiksichern:IF statgeaendertTHEN toline(stat,statistikvorzeilen);
writerecord(stat,niltext);FI ;commanddialogue(FALSE );save(statistikdatei+
statistikname,task(statistikserver));commanddialogue(TRUE );
statistikvergessen;END PROC statistiksichern;PROC statistikvergessen:forget(
statistikdatei+statistikname,quiet);END PROC statistikvergessen;BOOL PROC 
statistikexistiert(TEXT CONST statnummer):exists(statistikdatei+statnummer,
task(statistikserver))END PROC statistikexistiert;PROC feldbearbeiten(INT 
CONST feldnummer):standardmaskenfeld(text(statistikname,3),fstatnr);
standardmaskenfeld(text(feldnummer,4),ffeldnr);standardmaskenfeld(text((
feldnummer-1)DIV spalten+1,2),fzeile);standardmaskenfeld(text((feldnummer-1)
MOD spalten+1,2),fspalte);IF feldnummer<felderTHEN standardmaskenfeld(text(
feldnummer+1),fnaechstes);ELSE standardmaskenfeld(niltext,fnaechstes);FI ;
felddefinitionzeigen(feldnummer);END PROC feldbearbeiten;PROC 
felddefinitionzeigen(INT CONST feldnummer):TEXT VAR felddefinition;toline(
stat,statistikvorzeilen+feldnummer);readrecord(stat,felddefinition);
standardmaskenfeld(felddefinitionSUB 5,fart);standardmaskenfeld(subtext(
felddefinition,6),fdef);standardmaskenfeld(niltext,fkopieren);infeld(fstatnr)
;standardfelderausgeben;infeld(fart);END PROC felddefinitionzeigen;PROC 
speicherefeldab:TEXT VAR felddefinition;IF standardmaskenfeld(fart)=niltext
OR standardmaskenfeld(fart)=spaceTHEN felddefinition:=niltextELSE 
felddefinition:=minbreite*space;felddefinitionCAT standardmaskenfeld(fart);
felddefinitionCAT standardmaskenfeld(fdef);FI ;toline(stat,statistikvorzeilen
+int(standardmaskenfeld(ffeldnr)));writerecord(stat,felddefinition);
statgeaendert:=TRUE ;END PROC speicherefeldab;BOOL PROC bedingungok(INT 
CONST maskenfeld):TEXT VAR bedingung;ok:=TRUE ;fehlernr:=0;scan(
standardmaskenfeld(maskenfeld));naechstessymbol;bedingung:=normbedingung(
normalesende);IF NOT okTHEN standardmeldung(msyntaxfehler,fehlermeldung+
meldungzusatz);ELIF length(bedingung)>250THEN standardmaskenfeld(bedingung,
maskenfeld);standardmeldung(mdefzulang,niltext);ELSE standardmaskenfeld(
bedingung,maskenfeld);bedingungIN maskenfeld;FI ;okEND PROC bedingungok;TEXT 
PROC normbedingung(BOOL CONST endeklammerzu):TEXT VAR bedingung:=niltext,
operator;INT VAR merkmal;IF type=tendedestextesTHEN fehler(fvergleicherwartet
);ELIF symbol=sklammeraufTHEN behandleklammerELIF symbol=skursTHEN 
behandlekursELSE behandlemerkmalFI ;IF NOT okTHEN ELIF type<>tendedestextes
THEN liesverknuepfungoderklammerzuELIF endeklammerzuTHEN fehler(
fklammerzuerwartet);FI ;bedingung.behandleklammer:naechstessymbol;bedingung:=
sklammerauf+normbedingung(klammeramende)+sklammerzu.behandlemerkmal:
liesmerkmal;liesoperator;IF okTHEN bedingungCAT textderlaenge(statfeldlaenge(
merkmal),statfeldart(merkmal),operator);FI .liesmerkmal:merkmal:=int(subtext(
symbol,2,3));IF type=tnameAND length(symbol)=3AND (symbolSUB 1)=smerkmalAND 
merkmal>=1AND merkmal<=50AND lastconversionokTHEN bedingungCAT symbol;
naechstessymbol;ELSE fehler(fmerkmalerwartet);FI .liesoperator:IF symbol=
sgleichOR symbol=sgroesserOR symbol=sgroessergleichOR symbol=sungleichOR 
symbol=skleinerOR symbol=skleinergleichTHEN bedingungCAT sspace;bedingungCAT 
symbol;bedingungCAT sspace;operator:=symbol;ELIF okTHEN fehler(
fvergleichsoperwartet);FI .behandlekurs:naechstessymbol;IF symbol=sgleich
THEN bedingungCAT skurs+sspace+sgleich+sspace;bedingungCAT textderlaenge(2,
akurs,sgleich);lieskomma;bedingungCAT textderlaenge(2,akurs,sgleich);
lieskomma;bedingungCAT textderlaenge(4,akurs,sgleich);lieskomma;bedingungCAT 
textderlaenge(1,akurs,sgleich);ELSE fehler(fvergleichsoperwartet)FI .
lieskomma:IF symbol=skommaTHEN bedingungCAT symbol;ELIF okTHEN fehler(
fkommaerwartet);FI .liesverknuepfungoderklammerzu:IF endeklammerzuAND symbol=
sklammerzuTHEN naechstessymbol;ELIF symbol=sandOR symbol=sundOR symbol=sorOR 
symbol=soderTHEN bedingungCAT sspace;bedingungCAT symbol;bedingungCAT sspace;
naechstessymbol;bedingungCAT normbedingung(endeklammerzu);ELSE fehler(
fbooloperwartet);FI .END PROC normbedingung;TEXT PROC textderlaenge(INT 
CONST laenge,art,TEXT CONST operator):TEXT VAR textsammler:=niltext;IF ok
THEN sammletextteile;normieretext;textanhaengen;FI ;textsammler.
sammletextteile:REP naechstessymbol;IF type=ttextTHEN textsammlerCAT symbol
ELIF symbol=sjokerTHEN textsammlerCAT symbolELSE fehler(ftexterwartet);FI ;
naechstessymbol;UNTIL NOT okOR symbol<>splusPER .normieretext:SELECT artOF 
CASE atext:textbehandelnCASE adate:datumbehandelnCASE azahl:zahlbehandeln
CASE akurs:kursbehandelnEND SELECT .textbehandeln:WHILE pos(textsammler,
sjoker+sjoker)>0REP change(textsammler,sjoker+sjoker,sjoker);PER ;IF pos(
textsammler,sjoker)=0THEN textsammler:=text(textsammler,laenge);ELIF operator
<>sgleichTHEN fehler(fhierkeinjoker);ELIF length(textsammler)>laengeTHEN 
fehler(fpatternzulang);FI .datumbehandeln:textsammler:=datum(datum(
textsammler));IF textsammler=niltextTHEN fehler(fdatumfalsch);FI .
zahlbehandeln:textsammler:=text(int(subtext(textsammler,1,4)));IF length(
textsammler)>laengeOR textsammler=niltextOR NOT lastconversionokTHEN fehler(
fzahlfalsch)ELSE textsammler:=(laenge-length(textsammler))*snull+textsammler;
FI .kursbehandeln:IF pos(textsammler,sjoker)=0THEN textsammler:=text(
textsammler,laenge);ELIF length(textsammler)<>1THEN fehler(fhierkeinjoker);
FI .textanhaengen:IF textsammler<>sjokerTHEN changeall(textsammler,squote,
squote+squote);textsammler:=squote+textsammler+squote;FI .END PROC 
textderlaenge;BOOL PROC summeok(INT CONST maskenfeld):TEXT VAR summe:=niltext
;ok:=TRUE ;fehlernr:=0;scan(standardmaskenfeld(maskenfeld));summenormieren;
IF NOT okTHEN standardmeldung(msyntaxfehler,fehlermeldung+meldungzusatz);
ELIF length(summe)>250THEN standardmaskenfeld(summe,maskenfeld);
standardmeldung(mdefzulang,niltext);ELSE standardmaskenfeld(summe,maskenfeld)
;summeIN maskenfeld;FI ;ok.summenormieren:naechstessymbol;REP IF symbol=splus
OR symbol=sminusTHEN summeCAT sspace;summeCAT symbol;naechstessymbol;ELIF 
summe>niltextTHEN fehler(frechenoperwartet);FI ;INT CONST feldnr:=int(subtext
(symbol,2,5));IF okTHEN IF type=tnameCAND lastconversionokCAND (symbolSUB 1)=
sfeldCAND (symbolSUB 2)<>snullCAND feldnr>=1CAND feldnr<=felderCAND NOT 
isttextfeldTHEN summeCAT sspace;summeCAT symbol;naechstessymbol;ELIF feldnr>
felderTHEN fehler(ffeldnrzuhoch);ELIF isttextfeldTHEN fehler(
ftextfeldsummiert);ELIF okTHEN fehler(ffeldnrerwartet);FI ;FI ;UNTIL type=
tendedestextesOR NOT okPER ;summe:=subtext(summe,2).isttextfeld:toline(stat,
statistikvorzeilen+feldnr);subtext(stat,minbreite+1,minbreite+1)="t".END 
PROC summeok;BOOL PROC textok(INT CONST maskenfeld,feldbreite):TEXT VAR tex:=
compress(standardmaskenfeld(maskenfeld));fehlernr:=0;ok:=TRUE ;scan(tex);
naechstessymbol;IF type=tendedestextesTHEN tex:=squote+squoteELIF pos(symbol,
sjoker)>0THEN fehler(fhierkeinjoker)ELIF type<>ttextTHEN fehler(ftexterwartet
);ELIF length(symbol)>feldbreiteTHEN fehler(fzubreit);ELSE naechstessymbol;
IF type<>tendedestextesTHEN fehler(ftexterwartet);FI ;FI ;IF NOT okTHEN 
standardmeldung(msyntaxfehler,fehlermeldung+meldungzusatz);ELSE 
standardmaskenfeld(tex,maskenfeld);texIN maskenfeld;FI ;ok.END PROC textok;
PROC naechstessymbol:nextsymbol(symbol,type);END PROC naechstessymbol;PROC 
fehler(INT CONST nummer):ok:=FALSE ;fehlernr:=nummer;END PROC fehler;TEXT 
PROC fehlermeldung:SELECT fehlernrOF CASE fvergleicherwartet:
"Vergleich erwartet"CASE fmerkmalerwartet:"Merkmal m01 bis m50 erwartet"CASE 
fvergleichsoperwartet:"=, >, <, >=, <= oder <> erwartet"CASE fkommaerwartet:
"Komma erwartet"CASE ftexterwartet:"""Text"" erwartet"CASE fklammerzuerwartet
:"')' erwartet"CASE fbooloperwartet:"'UND' oder 'ODER' erwartet"CASE 
ftextfeldsummiert:"Text-Feld in der Summenformel"CASE fdatumfalsch:
"Datum nicht zulässig"CASE fhierkeinjoker:"'*' nicht zulässig"CASE 
frechenoperwartet:"'+' oder '-' erwartet"CASE ffeldnrerwartet:
"Feldnummer (z.B. f17) erwartet"CASE ffeldnrzuhoch:"Feldnummer zu hoch"CASE 
fzubreit:"Text länger als Spaltenbreite"CASE fpatternzulang:
"Pattern für das Merkmal zu lang"CASE fzahlfalsch:"Zahl falsch angegeben"
OTHERWISE niltextEND SELECT END PROC fehlermeldung;END PACKET felder;