app/baisy/2.2.1-schulis/src/isp.maskendesign

Raw file
Back to index

PACKET maskendesignDEFINES maskstart,aktuellendesignnamenlesen,maskgenstart,
holestandardvorgaben,maskenattributespeichern,einlesenderattribute,
generieremaske,zeigegeneriertemaske,formularentwerfen,formularspeichern,
felderentwerfen,felddefinitionenspeichern,maskenformularzeigen,
definitionsnamenlesen,gesuchtesfeldanzeigen,feldloeschen,feldspeichern,
feldnichtspeichern,feldmalen,feldaufneuenschirmmalen,feldattributesetzen,
holeattribute,listeallermasken,loescheneinermaske,kopierenaendern,
zweitennamenlesen,kopiereneinermaske,druckeneinermaske,neuernamefuereinemaske
:LET standardanfang=2;LET z="Liste aller Masken";LET nummernmaske=
"mb maskenfeldnummern",id="mb maskenbearbeitung1",zusatz=
"mb maskenbearbeitung2",mgmatrix="mb maskgenmatrix",mg="mb maskengenerator",
b1="mb maskenfeldattribute";LET dru=49;LET maxfeldnr=200;LET praefixs=
"Formular für: ",praefixf="form.";TEXT VAR symbalphag:="#",symbalphau:="&",
symbankreuz:="^",symbgeheim:="'",symbmeldung:="%",symbfortsetzunga:="<",
symbfortsetzunge:=">",symbpseudoblank:="!",unterlegungalpha:="_",
unterlegungankreuz:="_",unterlegunggeheim:="_",unterlegungmeldung:="=",
anzeigeankreuz:="x",anzeigegeheim:="-";TEXT VAR symbolischemaske:="";TEXT 
VAR formulardatei:="";TEXT VAR maskenname:="",zweitername:="";INT VAR 
feldname:=standardanfang,loeschfeld;BOOL VAR da;#DBMASKE VAR dbm;nil(dbm);#
TEXT VAR eingangsname;TAG VAR maske;;TAG VAR aktuellemaske;INT VAR 
aktuelleposition;TEXT VAR logtextergaenzung;PROC maskstart:
frageentwicklernachmaskennamen(id);aktuellendesignnamenlesenEND PROC 
maskstart;PROC frageentwicklernachmaskennamen(TEXT CONST start):eingangsname
:=start;standardstartproc(start)END PROC frageentwicklernachmaskennamen;PROC 
aktuellendesignnamenlesen:standardmaskenfeld(maskenname,2);standardnproc;
maskenname:=standardmaskenfeld(2);init(feld)END PROC 
aktuellendesignnamenlesen;PROC maskgenstart:zeigemaske;holestandardvorgaben;.
zeigemaske:frageentwicklernachmaskennamen(mg).END PROC maskgenstart;PROC 
holestandardvorgaben:standardmaskenfeld("",1);standardmaskenfeld(maskenname,2
);standardmaskenfeld(unterlegungalpha,3);standardmaskenfeld(symbalphag,4);
standardmaskenfeld(symbalphau,5);standardmaskenfeld(symbankreuz,6);
standardmaskenfeld(unterlegungankreuz,7);standardmaskenfeld(anzeigeankreuz,8)
;standardmaskenfeld(symbgeheim,9);standardmaskenfeld(unterlegunggeheim,10);
standardmaskenfeld(anzeigegeheim,11);standardmaskenfeld(symbmeldung,12);
standardmaskenfeld(unterlegungmeldung,13);standardmaskenfeld(symbfortsetzunga
,14);standardmaskenfeld(symbfortsetzunge,15);standardmaskenfeld(
symbpseudoblank,16);standardnproc;maskenname:=standardmaskenfeld(2);
unterlegungalpha:=standardmaskenfeld(3);symbalphag:=standardmaskenfeld(4);
symbalphau:=standardmaskenfeld(5);symbankreuz:=standardmaskenfeld(6);
unterlegungankreuz:=standardmaskenfeld(7);anzeigeankreuz:=standardmaskenfeld(
8);symbgeheim:=standardmaskenfeld(9);unterlegunggeheim:=standardmaskenfeld(10
);anzeigegeheim:=standardmaskenfeld(11);symbmeldung:=standardmaskenfeld(12);
unterlegungmeldung:=standardmaskenfeld(13);symbfortsetzunga:=
standardmaskenfeld(14);symbfortsetzunge:=standardmaskenfeld(15);
symbpseudoblank:=standardmaskenfeld(16);trans(symbpseudoblank+
symbfortsetzunga+symbfortsetzunge);.END PROC holestandardvorgaben;PROC 
formularentwerfen(INT CONST nummerderauskunft):IF maskenname=""THEN 
keineeingabe;return(1)ELSE setzedateinamen;IF NOT exists(symbolischemaske)
THEN IF NOT maskedaTHEN logtextergaenzung:="eingefügt";neuELSE 
logtextergaenzung:="geändert";aendernFI ;FI ;formularzeigen(nummerderauskunft
)FI .keineeingabe:aktuelleposition:=standardanfang;standardmeldung(26,"").
setzedateinamen:symbolischemaske:=praefixs+maskenname;formulardatei:=praefixf
+maskenname.maskeda:maskegibtes(maskenname).neu:init(feld);
erzeugeleeresymbolischemaske(maskenname).aendern:erzeugesymbolischemaske(
maskenname).END PROC formularentwerfen;PROC formularzeigen(INT CONST 
nummerderauskunft):page;sagderauskunftwasaufdemeingangsschirmstand;editiere(
symbolischemaske,"a",FALSE ).sagderauskunftwasaufdemeingangsschirmstand:TEXT 
VAR eingangsinfo:="";eingangsinfoCAT infozeile("geschützt",symbalphag);
eingangsinfoCAT infozeile("ungeschützt",symbalphau);eingangsinfoCAT infozeile
("Ankreuzfeld",symbankreuz);eingangsinfoCAT infozeile("sonst. Geheimfeld",
symbgeheim);eingangsinfoCAT infozeile("Meldungsfeld",symbmeldung);
eingangsinfoCAT infozeile("Beginn Fortsetzung",symbfortsetzunga);eingangsinfo
CAT infozeile("Ende Fortsetzung",symbfortsetzunge);eingangsinfoCAT infozeile(
"Überdeckungszeichen",symbpseudoblank);eingangsinfoCAT auskunftstextende;
ergaenzeauskunft(eingangsinfo,nummerderauskunft).END PROC formularzeigen;
PROC generieremaske:erzeugemaske(maskenname);page;show(maske);
zeigegeneriertemaskeEND PROC generieremaske;PROC zeigegeneriertemaske:INT 
VAR feldind,maxfeld:=min(fields(maske),maxfeldnr);ROW maxfeldnrTEXT VAR 
maskenfeld;INT VAR einstieg:=maxfeldnr;FOR feldindFROM 1UPTO maxfeldREP IF 
fieldexists(maske,feldind)THEN maskenfeld(feldind):="";put(maske,"",feldind);
cursor(maske,feldind);out(text(feldind));IF (NOT protected(maske,feldind))
CAND (feldind<einstieg)THEN einstieg:=feldindFI ;FI PER ;IF einstieg>maxfeld
THEN einstieg:=standardanfangFI ;get(maske,maskenfeld,einstieg)END PROC 
zeigegeneriertemaske;ROW maxfeldnrTEXT VAR feld;INT VAR maxfeld;PROC 
maskenattributesetzen:maskenholen;formularzeigen;attributezeigen;
einlesenderattribute.maskenholen:initmaske(aktuellemaske,mgmatrix).
formularzeigen:page;standardkopfmaskeausgeben(text(vergleichsknoten));show(
aktuellemaske).attributezeigen:INT VAR i;INT VAR maxfields:=fields(
aktuellemaske);feld(1):="";TEXT VAR hellername:=""+maskenname+" ";feld(2):=
hellername+(length(aktuellemaske,2)-length(hellername))*" ";INT VAR zaehler:=
3;FOR iFROM 2UPTO min(fields(maske),maxfeldnr-1)REP IF (fieldexists(maske,i))
THEN IF feld(zaehler)=""THEN feld(zaehler):=text(i,3)+text(auskunftsnr(maske,
i),5)+text(symbolicname(maske,i),3)FI ;zaehlerINCR 1FI PER ;FOR iFROM 1UPTO 
zaehler-1REP IF fieldexists(aktuellemaske,i)THEN put(aktuellemaske,feld(i),i)
FI PER ;FOR iFROM zaehlerUPTO maxfieldsREP protect(aktuellemaske,i,TRUE )PER 
;maxfeld:=zaehler-1;aktuelleposition:=3.END PROC maskenattributesetzen;PROC 
einlesenderattribute:get(aktuellemaske,feld,aktuelleposition)END PROC 
einlesenderattribute;PROC maskenattributespeichern:INT VAR i;IF NOT 
maskengeneratorTHEN gibtestag;IF NOT daTHEN meldezuerstformular;LEAVE 
maskenattributespeichernFI ;FOR iFROM 1UPTO maxfeldnrREP feld(i):=""PER ;FI ;
maskenattributesetzen;FOR iFROM 3UPTO maxfeldREP INT VAR feldnr:=int(subtext(
feld(i),1,3));auskunftsnr(maske,feldnr,int(subtext(feld(i),4,8)));
symbolicname(maske,feldnr,int(subtext(feld(i),9,11)))PER .maskengenerator:
eingangsname=mg.meldezuerstformular:standardmeldung(32,"");return(1).END 
PROC maskenattributespeichern;PROC formularspeichern(INT CONST zurueck):
schreibemaske(maske,maskenname);logbucheintrag(logtextergaenzung);IF exists(
formulardatei)THEN forget(formulardatei,quiet)FI ;return(zurueck);
frageentwicklernachmaskennamen(eingangsname);meldespeicherung.
meldespeicherung:standardmeldung(27,"").END PROC formularspeichern;PROC 
felderentwerfen:gibtestag;IF daTHEN initialisiereELSE meldezuerstformularFI .
initialisiere:feldname:=standardanfang;maskenformularzeigen;
definitionsnamenlesen.meldezuerstformular:standardmeldung(32,"");return(1).
END PROC felderentwerfen;PROC gibtestag:initmaske(maske,maskenname);da:=
maskegibtes(maskenname)END PROC gibtestag;PROC felddefinitionenspeichern:
schreibemaske(maske,maskenname);return(2);frageentwicklernachmaskennamen(id);
meldespeicherung;.meldespeicherung:standardmeldung(28,"").END PROC 
felddefinitionenspeichern;PROC maskenformularzeigen:
maskezuderfelderstelltwerdensollzeigen;entwicklernachfeldnamenfragen.
maskezuderfelderstelltwerdensollzeigen:page;show(maske).END PROC 
maskenformularzeigen;PROC entwicklernachfeldnamenfragen:aktuelleposition:=
standardanfang;initmaske(aktuellemaske,nummernmaske);show(aktuellemaske).END 
PROC entwicklernachfeldnamenfragen;PROC definitionsnamenlesen:TEXT VAR f:=
text(feldname);ROW maxfeldnrTEXT VAR feld;init(feld);feld(2):=f;loeschfeld:=
feldname;putget(aktuellemaske,feld,aktuelleposition);feldname:=int(feld(
aktuelleposition));loeschemeldung(aktuellemaske);END PROC 
definitionsnamenlesen;PROC gesuchtesfeldanzeigen:IF NOT fieldexists(maske,
feldname)THEN meldefalschenummer;loeschenELSE TEXT CONST pointer:=(length(
maske,feldname))*"?";loeschen;put(maske,pointer,feldname);meldegesuchtesfeld
FI ;return(1).meldegesuchtesfeld:melde(aktuellemaske,10).loeschen:put(maske,
"",loeschfeld).END PROC gesuchtesfeldanzeigen;PROC meldefalschenummer:melde(
aktuellemaske,9).END PROC meldefalschenummer;LET null="�";TEXT VAR xrow,yrow,
lrow,trow;BOOL VAR a,b,c,d,e;INT VAR sym,aus;TEXT VAR geheimzeichen;PROC 
feldloeschen:INT VAR x,y;IF fieldexists(maske,feldname)THEN clearfield(maske,
feldname);put(maske,"",loeschfeld);getcursor(x,y);cursor(1,y);out(formline(
maske,y));melde(aktuellemaske,42)ELSE meldefalschenummerFI ;return(1)END 
PROC feldloeschen;PROC feldmalen:xrow:="";yrow:=" ";lrow:="";trow:="";IF 
menuedraussenTHEN reorganizescreenFI ;designfield(maske,feldname,xrow,yrow,
lrow,trow)END PROC feldmalen;PROC feldaufneuenschirmmalen:reorganizescreen;
designfield(maske,feldname,xrow,yrow,lrow,trow)END PROC 
feldaufneuenschirmmalen;PROC feldattributesetzen:INT VAR gz;fieldinfos(maske,
feldname,gz,a,b,c,d,e);geheimzeichen:=code(gz);baisymaskeholen;sym:=
symbolicname(maske,feldname);aus:=auskunftsnr(maske,feldname);show(
aktuellemaske);holeattribute;END PROC feldattributesetzen;PROC 
baisymaskeholen:initmaske(aktuellemaske,b1)END PROC baisymaskeholen;PROC 
holeattribute:ROW maxfeldnrTEXT VAR feld;init(feld);IF bTHEN feld(2):="X"FI ;
IF cTHEN feld(3):=geheimzeichenFI ;feld(4):=text(sym);putget(aktuellemaske,
feld,aktuelleposition);b:=feld(2)<>"";c:=feld(3)<>"";geheimzeichen:=feld(3);
sym:=int(feld(4))END PROC holeattribute;PROC feldspeichern:definefield(maske,
xrow,yrow,lrow,trow,sym,aus,feldname,geheimzeichen,null);setfieldinfos(maske,
feldname,a,b,c);maskenformularzeigen;meldevorlaeufiguebernommen;return(3).
meldevorlaeufiguebernommen:melde(aktuellemaske,41).END PROC feldspeichern;
PROC feldnichtspeichern(INT CONST schritte):maskenformularzeigen;return(
schritte)END PROC feldnichtspeichern;PROC listeallermasken:
meldezusammenstellung;listen.listen:listezusammenstellen;zeigendermaskenliste
.meldezusammenstellung:store(FALSE );standardmeldung(7,"");store(TRUE ).
listezusammenstellen:maskenliste(z).END PROC listeallermasken;PROC 
zeigendermaskenliste:page;editiere(z)END PROC zeigendermaskenliste;PROC 
loescheneinermaske:IF maskenname=""THEN keineeingabe;return(1)ELSE IF 
maskegibtes(maskenname)THEN loeschemaske(maskenname);logbucheintrag(
"gelöscht");meldeloeschungELSE maskegibtesnichtFI ;return(1)FI .
maskegibtesnicht:standardmeldung(8,"").meldeloeschung:standardmeldung(33,"").
keineeingabe:standardmeldung(26,"").END PROC loescheneinermaske;PROC 
kopierenaendern:maskekopierenoderaendern;IF NOT daTHEN maskegibtesnichtFI .
maskegibtesnicht:standardmeldung(8,"");return(1).END PROC kopierenaendern;
PROC maskekopierenoderaendern:IF NOT maskegibtes(maskenname)THEN da:=FALSE 
ELSE da:=TRUE ;frageentwicklernachmaske;zweitennamenlesenFI .
frageentwicklernachmaske:aktuelleposition:=standardanfang;initmaske(
aktuellemaske,zusatz);zweitername:="";show(aktuellemaske).END PROC 
maskekopierenoderaendern;PROC zweitennamenlesen:ROW maxfeldnrTEXT VAR feld;
init(feld);feld(2):=zweitername;putget(aktuellemaske,feld,aktuelleposition);
zweitername:=feld(2);loeschemeldung(aktuellemaske).END PROC zweitennamenlesen
;PROC kopiereneinermaske:IF maskegibtes(zweitername)THEN da:=TRUE ;return(1)
ELSE maskekopieren(maskenname,zweitername);da:=FALSE FI ;IF daTHEN gibtsschon
ELSE return(2);frageentwicklernachmaskennamen(id);meldekopierungFI .
gibtsschon:melde(aktuellemaske,31).meldekopierung:melde(aktuellemaske,29).
END PROC kopiereneinermaske;PROC neuernamefuereinemaske:IF maskegibtes(
zweitername)THEN da:=TRUE ;return(1)ELSE maskeumbenennen(maskenname,
zweitername);da:=FALSE ;FI ;IF daTHEN gibtsschonELSE return(2);
frageentwicklernachmaskennamen(id);meldeumbenennungFI .gibtsschon:melde(
aktuellemaske,31).meldeumbenennung:melde(aktuellemaske,30).END PROC 
neuernamefuereinemaske;PROC druckeneinermaske:BOOL VAR maskeda;TAG VAR t;IF 
maskenname=""THEN keineeingabe;return(1)ELSE maskeda:=maskegibtes(t,
maskenname);IF maskedaTHEN meldedrucken;fuehredurchELSE maskegibtesnichtFI ;
return(1)FI .maskegibtesnicht:standardmeldung(8,"").keineeingabe:
standardmeldung(26,"").meldedrucken:standardmeldung(dru,"").fuehredurch:
kopfindatei;formularindatei;feldinformationenindatei;drucken.kopfindatei:LET 
temp="temporäre Druckdatei";FILE VAR f:=sequentialfile(output,temp);putline(f
,"Name der Maske: "+maskenname);putline(f,"Stand:          "+date+"  "+
timeofday);line(f,2).drucken:print(temp);forget(temp,quiet).formularindatei:
INT VAR fz:=min(fields(t),maxfeldnr);IF fz>0THEN INT VAR i;FOR iFROM 1UPTO fz
REP IF fieldexists(t,i)THEN fill(t,text(i),i)FI PER FI ;tTO f.
feldinformationenindatei:line(f,2);IF fz>0THEN ueberschrift;FOR iFROM 1UPTO 
fzREP IF fieldexists(t,i)THEN tabellenzeileFI PER FI .ueberschrift:putline(f,
"Nr...Länge...geschützt....geheim.....Symbol.....Auskunftsnr....").
tabellenzeile:INT VAR gz;BOOL VAR a,b,c,d,e;fieldinfos(t,i,gz,a,b,c,d,e);
TEXT VAR geheim:=code(gz);INT VAR sym:=0,aus:=0;sym:=symbolicname(t,i);aus:=
auskunftsnr(t,i);put(f,text(text(i),4));put(f,text(text(length(t,i)),7));IF b
THEN put(f,text("X",13))ELSE put(f,13*" ")FI ;IF cTHEN put(f,text(geheim,11))
ELSE put(f,11*" ")FI ;IF sym<>0THEN put(f,text(text(sym),10))ELSE put(f,10*
" ")FI ;IF aus<>0THEN put(f,text(aus))FI ;line(f,1).END PROC 
druckeneinermaske;PROC schreibemaske(TAG VAR ta,TEXT CONST t):setzemaske(ta);
maskespeichern(t)END PROC schreibemaske;PROC loeschemaske(TEXT CONST t):
maskeloeschen(t)END PROC loeschemaske;BOOL PROC maskegibtes(TAG VAR t,TEXT 
CONST name):initmaske(t,name);maskegibtes(name)END PROC maskegibtes;PROC 
erzeugeleeresymbolischemaske(TEXT CONST maskenname):oeffneausgabedatei;
schreibemarkierungenindatei.oeffneausgabedatei:TEXT CONST dateiname:=praefixs
+maskenname;forget(dateiname,quiet);FILE VAR f:=sequentialfile(output,
dateiname).schreibemarkierungenindatei:dreileerzeilen;grundlinie;
vieleleerzeilen;endlinie.dreileerzeilen:INT VAR i;FOR iFROM 1UPTO 3REP 
putline(f,"")PER .grundlinie:putline(f,78*unterlegungmeldung).vieleleerzeilen
:FOR iFROM 1UPTO 18REP putline(f,"")PER .endlinie:putline(f,3*
unterlegungmeldung+72*symbmeldung+3*unterlegungmeldung).END PROC 
erzeugeleeresymbolischemaske;PROC erzeugesymbolischemaske(TEXT CONST 
maskenname):holeformular;oeffneausgabedatei;setzesymbole;
zeigesymbolischemaske.holeformular:INT VAR i;INT CONST maxmaskenfeld:=
maxfeldnr-1;initmaske(maske,maskenname);FOR iFROM 2UPTO maxmaskenfeldREP IF 
fieldexists(maske,i)THEN feld(i+1):=text(i,3)+text(auskunftsnr(maske,i),5)+
text(symbolicname(maske,i),3)ELSE feld(i+1):=""FI PER .oeffneausgabedatei:
TEXT CONST dateiname:=praefixs+maskenname;forget(dateiname,quiet);FILE VAR f
:=sequentialfile(output,dateiname).zeigesymbolischemaske:maskeTO f.
setzesymbole:erstesfeld;REP symbolisierefeld;naechstesfeldUNTIL letztesfeld
PER ;abschluss.erstesfeld:INT VAR aktfeld:=firstfield(maske),zeilennr:=1;INT 
VAR altesfeld:=aktfeld;INT VAR zeilenpointer:=1.naechstesfeld:altesfeld:=
aktfeld;aktfeld:=nextfield(maske,aktfeld).letztesfeld:aktfeld<0.
symbolisierefeld:setzezeile;pruefeobfortsetzung;uebernehmenbiszudiesemfeld;
holeinformationenueberdasfeld;fuelledasfeldmitdensymbolen.
fuelledasfeldmitdensymbolen:TEXT VAR alteszeichen;IF aktfeld=1THEN fill(maske
,length(maske,1)*symbmeldung,aktfeld);alteszeichen:=symbmeldungELSE IF 
geschuetztTHEN fill(maske,laenge*symbalphag,aktfeld);alteszeichen:=symbalphag
ELSE IF geheimTHEN IF laenge=1THEN IF code(gz)=anzeigeankreuzTHEN fill(maske,
symbankreuz,aktfeld);alteszeichen:=symbankreuzELSE fill(maske,symbgeheim,
aktfeld);alteszeichen:=symbgeheimFI ELSE fill(maske,laenge*symbgeheim,aktfeld
);alteszeichen:=symbgeheimFI ELSE fill(maske,laenge*symbalphau,aktfeld);
alteszeichen:=symbalphauFI FI FI .holeinformationenueberdasfeld:INT VAR gz,x,
y,laenge:=length(maske,aktfeld);BOOL VAR a,geschuetzt,geheim,d,e;fieldinfos(
maske,aktfeld,gz,a,geschuetzt,geheim,d,e);.setzezeile:woliegtdasfeld;
allevorhergehendenzeilen.woliegtdasfeld:cursor(maske,aktfeld);getcursor(x,y).
allevorhergehendenzeilen:IF y>zeilennrTHEN INT VAR xalt:=x;x:=length(formline
(maske,zeilennr))+1;pruefeobfortsetzung;uebernehmenbiszudiesemfeld;x:=xalt;
zeilenpointer:=1;zeileaktualisierenFI .zeileaktualisieren:zeilennr:=y;.
abschluss:y:=ysize(maske)+1;allevorhergehendenzeilen.schoneinfeldinderzeile:
zeilenpointer<>1.pruefeobfortsetzung:BOOL VAR fortsetzung:=
schoneinfeldinderzeileCAND (pos(subtext(formline(maske,zeilennr),
zeilenpointer,x-1),alteszeichen,laenge+1)>0).uebernehmenbiszudiesemfeld:IF 
fortsetzungTHEN fill(maske,symbfortsetzunga+((length(maske,altesfeld)-2)*
alteszeichen)+symbfortsetzunge,altesfeld)FI ;zeilenpointer:=x.END PROC 
erzeugesymbolischemaske;PROC feldanfang(INT VAR fa,TEXT CONST zeile):INT 
CONST zeilenlaenge:=length(zeile);WHILE NOT issymbol(subtext(zeile,fa,fa))
REP faINCR 1UNTIL NOT inzeilePER .inzeile:NOT (fa>zeilenlaenge).END PROC 
feldanfang;BOOL PROC issymbol(TEXT CONST s):TEXT VAR symb:=s;symbol(symb);
symb<>""END PROC issymbol;PROC symbol(TEXT VAR s):IF NOT ((s=symbalphag)OR (s
=symbalphau)OR (s=symbankreuz)OR (s=symbgeheim)OR (s=symbmeldung)OR (s=
symbfortsetzunga)OR (s=symbfortsetzunge))THEN s:=""FI END PROC symbol;PROC 
felddefinition(INT VAR fa,TEXT VAR zeile,INT VAR feldnr,INT CONST znr):IF 
feldmitteilfeldernTHEN teilfelderELSE einfachesfeldFI ;setzefeld.
feldmitteilfeldern:subtext(zeile,fa,fa)=symbfortsetzunga.teilfelder:
geschuetzt:=FALSE ;geheim:=FALSE ;xkoord:="";ykoord:="";laengen:="";
geheimzeichen:=code(0);TEXT VAR gesamtunterlegung:=unterlegungalpha;BOOL VAR 
gesamtgeschuetzt:=TRUE ,gesamtgeheim:=FALSE ;teilfeldbearbeitung;unterlegung
:=gesamtunterlegung;geschuetzt:=gesamtgeschuetzt;geheim:=gesamtgeheim.
teilfeldbearbeitung:REP efeld(zeile,fa,unterlegung,xkoord,ykoord,laengen,
geschuetzt,geheim,geheimzeichen,znr);IF (unterlegung=symbfortsetzunge)COR (
unterlegung="")THEN LEAVE teilfeldbearbeitungELIF unterlegung<>""THEN 
gesamtunterlegung:=unterlegung;gesamtgeschuetzt:=geschuetzt;gesamtgeheim:=
geheimFI ;faINCR 1;feldanfang(fa,zeile);PER .einfachesfeld:TEXT VAR 
unterlegung;BOOL VAR geschuetzt:=FALSE ,geheim:=FALSE ;TEXT VAR xkoord:="",
ykoord:="",laengen:="",geheimzeichen:=code(0);efeld(zeile,fa,unterlegung,
xkoord,ykoord,laengen,geschuetzt,geheim,geheimzeichen,znr);.setzefeld:INT 
VAR fnr;IF meldungsfeldTHEN fnr:=1;geschuetzt:=TRUE ELSE fnr:=feldnr;feldnr
INCR 1FI ;definefield(maske,xkoord,ykoord,laengen,code(0),0,0,fnr,
geheimzeichen,code(0));setfieldinfos(maske,fnr,FALSE ,geschuetzt,geheim);
ersetzedurchunterlegung(zeile,xkoord,laengen,unterlegung).meldungsfeld:
subtext(zeile,fa,fa)=symbmeldung.END PROC felddefinition;PROC 
ersetzedurchunterlegung(TEXT VAR zeile,TEXT CONST xkoord,laengen,unterlegung)
:INT VAR eintragszahl:=length(xkoord),ind;FOR indFROM 1UPTO eintragszahlREP 
ersetzungPER .ersetzung:INT VAR fstart,flaenge;fstart:=code(subtext(xkoord,
ind,ind));flaenge:=code(subtext(laengen,ind,ind));replace(zeile,fstart,
flaenge*unterlegung);.END PROC ersetzedurchunterlegung;PROC efeld(TEXT CONST 
zeile,INT VAR fa,TEXT VAR unterlegung,xkoord,ykoord,laengen,BOOL VAR 
geschuetzt,geheim,TEXT VAR geheimzeichen,INT CONST znr):INT VAR poszeile:=fa;
IF issymbol(subtext(zeile,poszeile,poszeile))THEN WHILE issymbol(subtext(
zeile,poszeile+1,poszeile+1))REP poszeileINCR 1PER ;xkoordCAT code(fa);ykoord
CAT code(znr);laengenCAT code(poszeile-fa+1);fa:=poszeile;FI ;TEXT CONST s:=
subtext(zeile,fa,fa);IF s=symbalphagTHEN geschuetzt:=TRUE ;unterlegung:=
unterlegungalphaELIF s=symbalphauTHEN geschuetzt:=FALSE ;unterlegung:=
unterlegungalphaELIF s=symbankreuzTHEN geheim:=TRUE ;unterlegung:=
unterlegungankreuz;geheimzeichen:=anzeigeankreuzELIF s=symbgeheimTHEN geheim
:=TRUE ;unterlegung:=unterlegunggeheim;geheimzeichen:=anzeigegeheimELIF s=
symbmeldungTHEN unterlegung:=unterlegungmeldungELIF s=symbfortsetzungeTHEN 
unterlegung:=symbfortsetzungeELSE unterlegung:=""FI END PROC efeld;PROC 
erzeugemaske(TEXT CONST maskenname):oeffnedatei;
generieremaskeausformulardatei;uebertrageformular;.oeffnedatei:forget(
formulardatei,quiet);copy(symbolischemaske,formulardatei);FILE VAR datei:=
sequentialfile(modify,formulardatei).uebertrageformular:input(datei);dateiTO 
maske;forget(formulardatei,quiet).generieremaskeausformulardatei:
holeerstezeile;REP generierefelderdieserzeile;schreibeformularzeile;
holenaechstezeileUNTIL dateiendePER .holeerstezeile:ananfang;lesezeile.
holenaechstezeile:einsweiter;lesezeile.dateiende:eof(datei).einsweiter:down(
datei,1).ananfang:nil(maske);TEXT VAR zeile:="";toline(datei,1);INT VAR 
feldnr:=2.lesezeile:readrecord(datei,zeile).schreibeformularzeile:writerecord
(datei,zeile).generierefelderdieserzeile:startezeile;REP 
findefeldspezifikation;definierenaechstesfeldPER .startezeile:INT VAR fa:=1.
findefeldspezifikation:feldanfang(fa,zeile);IF fa>length(zeile)THEN LEAVE 
generierefelderdieserzeileFI ;.definierenaechstesfeld:felddefinition(fa,zeile
,feldnr,lineno(datei));faINCR 1.END PROC erzeugemaske;TEXT PROC infozeile(
TEXT CONST t,s):auskunftstextende+t+" = "+sEND PROC infozeile;PROC init(ROW 
maxfeldnrTEXT VAR feld):INT VAR i;FOR iFROM 1UPTO maxfeldnrREP feld(i):=""
PER END PROC init;PROC logbucheintrag(TEXT CONST logergaenzung):TEXT VAR 
eintrag:="Maske ";eintragCAT maskenname;eintragCAT " ";eintragCAT 
logergaenzung;logeintrag(eintrag)END PROC logbucheintrag;END PACKET 
maskendesign