PACKET ispidadefinierenDEFINES druckausgabeeingangaufbauenundeinlesen, druckausgabeeingangeinlesen,druckausgabeaufbauenundeinlesen, druckausgabeeinlesen,druckausgabeausgebenundbearbeiten,druckausgabespeichern, druckausgabeneueinfuegen,druckausgabeloeschenvorbereiten, druckausgabeloeschfrage,druckausgabeloeschen, druckausgabelisteaufbauenundeinlesen,druckausgabelisteeinlesen, ausgesuchtedruckausgabeausgebenundbearbeiten,ausgesuchtedruckausgabeeinlesen, ausgesuchtedruckausgabeloeschenvorbereiten,ausgesuchtedruckausgabeloeschfrage ,listederdruckausgabenzeigen,listederdruckausgabeneinlesen, indruckausgabenblaettern,inselektionenzurdruckausgabeblaettern, inregelzurdruckausgabeblaettern,zurueckzurbearbeitung,formularausdrucken, setzenummerderdruckausgabe,nochmeldungauszugeben,pruefungida,:LET filenamezug ="Hilfsdatei.Zugriff",filenamesel="Hilfsdatei.Selektion",#filenamedruck= "Hilfsdatei.Druck",#filenameform="FORMTEXT.",filenamedata="FORMDATA.";LET maskenzusatz=" für Druckausgabe ";LET nameundtyp=1,objektklassen=2,# datenvorrat=3,#zugriffsregeln=4,selektion=5,druckformular=6,druckvariablen=7, druckwerte=8,druckdefinition=9;LET ntnummer=2,ntname=3;LET oleitobjekt=2;LET zobjklasse=2,zregelnr=3,zobjklname=4,znummer=5,zersterzugriff=6, zerstervergleich=7;LET sersteselektion=2,serstervergleich=3;LET dvnummer=2, dvdefinition=3,dvlaenge=4,dvrechtsbuendig=5;LET dwschriftart=2, dwlinkerrandoben=3,dwlinkerrandlinks=4,dwzeilenproseite=5,dwzeichenprozeile=6 ;LET minanfang=1.0,maxanfang=10.0;LET ankreuzzeichen="x",anzahltrenner="", namentrenner="<#>",zeilennrtrenner="",vergleichtrenner="",vartrenner= "%",trenner=". ",leitobjektschueler="Schüler",leitobjektlehrer="Lehrer",# gueltigerstatus="nw",#niltext="",semikolon=";"#oblitrenner="$"#;LET leitobjekt=1,vorwaerts=1#rueckwaerts=2#;LET tl=3,maxzugriffe=16, maxselektionen=17,maxobjektklassen=10;LET fnrerstesausgabefeld=2, anzmaskeneing=2,anzmaskenbearb=9,anzmaskentitel=9;LET meldunglistenerstellung =7,meldungalternative=56,meldungplausipruefung=57,meldungloeschfrage=65, meldungkeineliste=68,meldungkeinblaettern=72,meldungformdrucken=219, meldungfalscheeingabe=204,meldungdgibtesschon=205,meldungdgibtesnicht=206, meldungfalschenummer=207,meldungfalschesobjekt=208,meldungsammelndruckdef=209 ,meldungdruckendruckdef=210,meldungrgibtesschon=211,meldungrgibtesnicht=212, meldungvgibtesschon=213,meldungvgibtesnicht=214,meldungkeinleitobjekt=215, meldungfalscheregel=217,meldungfalschevariable=218,meldungkeinefonttabelle= 250,meldungkeineobjektklasse=251;BOOL VAR loeschenderdruckausgabe:=FALSE , neuedruckausgabe:=FALSE ,neuedruckvariable:=FALSE ,neuezugriffsregel:=FALSE , druckenderdefinition:=FALSE ,druckvariablegibtesbereits:=FALSE , zugriffsregelgibtesbereits:=FALSE ;BOOL VAR drvrechtsbuendig,drvdruckvar; FILE VAR f;INT VAR fnrletztesausgabefeld:=100,fehlseite:=0,fehlzeile:=0, fehlmeld:=0;INT VAR startpos,datenseite,merkzeile,anzahlderdateizeilen, leseanfangindatei,fnummer,zeilennr,nrdruckausgabe,anzfelder,dnr,zuwas;INT VAR regelnr,regnr,objklasse;INT VAR zrregel,zrobjekt,zrindex,zranzahl;INT VAR drvlaenge;ROW anzmaskenbearbINT VAR letztesmaskenfeld:=ROW anzmaskenbearb INT :(3,11,100,52,35,100,5,6,100);ROW anzmaskeneingTEXT VAR eingangsmaske:= ROW anzmaskeneingTEXT :("mdr name und typ der druckausgabe", "mdr objektklasse waehlen eingang");ROW anzmaskenbearbTEXT VAR bearbmaske:= ROW anzmaskenbearbTEXT :("mdr name und typ der druckausgabe", "mdr objektklasse waehlen bearb","","mdr zugriffsregeln bearb", "mdr selektionsbedingung bearb","","mdr variablen definieren bearb", "mdr werte fuer druckausgabe festlegen bearb", "mdr objektklasse waehlen eingang");ROW anzmaskentitelTEXT VAR maskentiteleingang:=ROW anzmaskentitelTEXT :("Name und Nummer definieren", "Objektklassen wählen","Datenvorrat festlegen","Zugriffsregeln bearbeiten", "Selektionsbedingungen angeben","Druckformular editieren", "Druckvariablen definieren","Werte für Druckaufbereitung", "Definition ausdrucken");ROW 100TEXT VAR erfassungsfeld;TAG VAR maske;BOOL VAR gespeichert:=FALSE ;TEXT VAR sfeldname,svergleichswert;TEXT VAR filenameformtp:="DUMMY";TEXT VAR meldungstext:="",nummerderdruckausgabe:="", pattern,zeile,programmname;PROC druckausgabeeingangaufbauenundeinlesen(INT CONST was):systemdboff;drvdruckvar:=ruecksprung;loeschenderdruckausgabe:= FALSE ;setzedruckausgabelistenauswahl(FALSE ); setzelistederdruckausgabengezeigt(FALSE );fehlseite:=1;fehlzeile:=1;fehlmeld :=0;init(erfassungsfeld);startpos:=fnrerstesausgabefeld;zuwas:=was; programmname:=maskentiteleingang[zuwas];eingangsmaskeinitialisieren; felderausgebenundeinlesen;.eingangsmaskeinitialisieren:IF zuwas=1THEN initmaske(maske,eingangsmaske[1])ELSE initmaske(maske,eingangsmaske[2])FI ; nummerderdruckausgabe:=niltext;setzeaktuellemaske(maske). felderausgebenundeinlesen:IF zuwas=1THEN standardstartproc(eingangsmaske[1]) ELSE standardstartproc(eingangsmaske[2])FI ;fnrletztesausgabefeld:= letztesmaskenfeld[zuwas];feldschutzfestlegen(fnrerstesausgabefeld+1); loeschfeldverdecken;eventuellmeldungausgeben;get(maske,erfassungsfeld, startpos);nummerderdruckausgabe:=erfassungsfeld[fnrerstesausgabefeld]; standardmaskenfeld(nummerderdruckausgabe,fnrerstesausgabefeld).END PROC druckausgabeeingangaufbauenundeinlesen;PROC druckausgabeeingangeinlesen(INT CONST was):putget(maske,nummerderdruckausgabe,fnrerstesausgabefeld);END PROC druckausgabeeingangeinlesen;PROC druckausgabeaufbauenundeinlesen(INT CONST was):IF ruecksprungTHEN bearbeitungsbildschirmausgeben(PROC erneuteeingabeerforderlich)ELSE eingangsbildschirmueberpruefen(PROC erneuteeingabeerforderlich)FI END PROC druckausgabeaufbauenundeinlesen;PROC druckausgabeeinlesen(INT CONST was):IF was=druckformularTHEN editiere( filenameformtp,FALSE )ELSE get(maske,erfassungsfeld,startpos); standardfelderfuellen;FI END PROC druckausgabeeinlesen;PROC druckausgabeausgebenundbearbeiten(INT CONST was):zuwas:=was;loeschemeldung( aktuellemaske);loeschenderdruckausgabe:=FALSE ;neuedruckausgabe:=FALSE ; SELECT wasOF CASE zugriffsregeln:neuezugriffsregel:=FALSE ; zugriffsregelueberpruefenCASE druckvariablen:neuedruckvariable:=FALSE ; druckvariableueberpruefenCASE druckdefinition:eingangsbildschirmueberpruefen( PROC druckdefinitiondrucken)OTHERWISE :zurueck;eingangsbildschirmueberpruefen (PROC maskenwertezeigenundbearbeiten)END SELECT ;.END PROC druckausgabeausgebenundbearbeiten;PROC druckausgabespeichern(BOOL CONST speichern,INT CONST was):IF speichernTHEN angabenabspeichern(was);gespeichert :=TRUE ELSE gespeichert:=FALSE ;meldungstext:=("Die Angaben "+ meldungseinschub+" wurden nicht gespeichert ");hilfsfilesloeschen;IF NOT druckausgabelistenauswahl#dr01.08.88#THEN forget(getformtextname,quiet); forget(filenameformtp,quiet)FI ;eventuellmeldungbeilistenabarbeitungFI ; stopbeifalschemnamen(TRUE )END PROC druckausgabespeichern;PROC druckausgabeneueinfuegen(INT CONST was):loeschemeldung(aktuellemaske); loeschenderdruckausgabe:=FALSE ;SELECT wasOF CASE nameundtyp:neuedruckausgabe :=TRUE ;eingangsbildschirmueberpruefen(PROC maskenwertezeigenundbearbeiten) CASE zugriffsregeln:neuezugriffsregel:=TRUE ;zugriffsregelueberpruefenCASE druckvariablen:neuedruckvariable:=TRUE ;druckvariableueberpruefenOTHERWISE : rueckschrittevorproc(2)END SELECT END PROC druckausgabeneueinfuegen;PROC druckausgabeloeschenvorbereiten(INT CONST was):loeschemeldung(aktuellemaske); loeschenderdruckausgabe:=TRUE ;SELECT wasOF CASE nameundtyp:neuedruckausgabe :=FALSE ;eingangsbildschirmueberpruefen(PROC maskenwertezeigenundbearbeiten) CASE zugriffsregeln:neuezugriffsregel:=FALSE ;zugriffsregelueberpruefenCASE druckvariablen:neuedruckvariable:=FALSE ;druckvariableueberpruefenOTHERWISE : rueckschrittevorproc(2)END SELECT ;END PROC druckausgabeloeschenvorbereiten; PROC druckausgabeloeschfrage:TEXT VAR xy;meldeauffaellig(aktuellemaske, meldungloeschfrage);startpos:=letztesmaskenfeld[zuwas]+1;get(maske,xy, startpos).END PROC druckausgabeloeschfrage;PROC druckausgabeloeschen(BOOL CONST loeschen,INT CONST was):IF loeschenTHEN meldungstext:=("Die Angaben "+ meldungseinschub+" wurden gelöscht ");angabenloeschen(was);ELSE meldungstext :=("Die Angaben "+meldungseinschub+" wurden nicht gelöscht "); hilfsfilesloeschen;FI ;loeschenderdruckausgabe:=FALSE ; eventuellmeldungbeilistenabarbeitung;END PROC druckausgabeloeschen;PROC druckausgabelisteaufbauenundeinlesen(INT CONST was): setzedruckausgabelistenauswahl(FALSE );SELECT wasOF CASE nameundtyp: druckausgabenlistezeigenCASE zugriffsregeln:listederregelnzeigenCASE druckvariablen:listederdruckvariablenzeigenEND SELECT ;IF (was=nameundtypAND listederdruckausgabengezeigt)OR ((was=zugriffsregelnOR was=druckvariablen) AND druckausgabelistenauswahl)THEN druckausgabelisteeinlesen(was);FI . listederregelnzeigen:loeschemeldung(aktuellemaske);IF erlaubteregeleingabeOR regelleerTHEN regellistezeigenELSE meldeauffaellig(aktuellemaske, meldungfalscheregel);return(1);LEAVE druckausgabelisteaufbauenundeinlesenFI . regelleer:erfassungsfeld[zobjklasse]=niltextAND erfassungsfeld[zregelnr]= niltext.listederdruckvariablenzeigen:loeschemeldung(aktuellemaske);IF erlaubtevariableneingabeOR druckvariableleerTHEN variablenlistezeigenELSE meldeauffaellig(aktuellemaske,meldungfalschevariable);return(1);LEAVE druckausgabelisteaufbauenundeinlesenFI .druckvariableleer:erfassungsfeld[ dvnummer]=niltext.END PROC druckausgabelisteaufbauenundeinlesen;PROC druckausgabelisteeinlesen(INT CONST was):infeld(fnrerstesausgabefeld); standardnproc;maskenwertesichern;END PROC druckausgabelisteeinlesen;PROC ausgesuchtedruckausgabeausgebenundbearbeiten(INT CONST was): behandlungderausgesuchten(PROC (INT CONST )druckausgabeausgebenundbearbeiten, erfassungsfeld,was);END PROC ausgesuchtedruckausgabeausgebenundbearbeiten; PROC ausgesuchtedruckausgabeeinlesen(INT CONST welche):druckausgabeeinlesen( welche)END PROC ausgesuchtedruckausgabeeinlesen;PROC ausgesuchtedruckausgabeloeschenvorbereiten(INT CONST was): behandlungderausgesuchten(PROC (INT CONST )druckausgabeloeschenvorbereiten, erfassungsfeld,was);END PROC ausgesuchtedruckausgabeloeschenvorbereiten;PROC ausgesuchtedruckausgabeloeschfrage:druckausgabeloeschfrageEND PROC ausgesuchtedruckausgabeloeschfrage;PROC listederdruckausgabenzeigen:BOOL VAR listeexistiertnicht:=FALSE ;loeschemeldung(aktuellemaske); nummerderdruckausgabe:=erfassungsfeld[fnrerstesausgabefeld]; standardmaskenfeld(nummerderdruckausgabe,fnrerstesausgabefeld);IF nummerinrichtigengrenzen(nummerderdruckausgabe)OR nummerderdruckausgabe= niltextTHEN #putkeypart(niltext);putdatapart(niltext);##vorläufig14.03.88# pruefenobdruckausgabenexistierenELSE meldeauffaellig(aktuellemaske, meldungfalschenummer);rueckschrittenachproc(1)FI . pruefenobdruckausgabenexistieren:meldeauffaellig(aktuellemaske, meldunglistenerstellung);putwert(fnridanummer,nummerderdruckausgabe); objektlistestarten(dnrida,standardmaskenfeld(fnrerstesausgabefeld), fnridanummer,TRUE ,listeexistiertnicht);IF listeexistiertnichtTHEN meldeauffaellig(aktuellemaske,meldungkeineliste);rueckschrittenachproc(1) ELSE druckausgabelisteaufbauenundeinlesen(nameundtyp)FI .END PROC listederdruckausgabenzeigen;PROC listederdruckausgabeneinlesen: druckausgabelisteeinlesen(nameundtyp)END PROC listederdruckausgabeneinlesen; PROC indruckausgabenblaettern(INT CONST wie,worin):inlisteblaettern(wie);IF ruecksprungTHEN meldeauffaellig(aktuellemaske,meldungkeinblaettern);FI ; return(1)END PROC indruckausgabenblaettern;PROC inselektionenzurdruckausgabeblaettern(INT CONST wie):loeschemeldung( aktuellemaske);selektionenindateieintragen(leseanfangindatei,erfassungsfeld); datenseiteraufoderrunter(wie);IF maxselektionen*(datenseite-1)>= anzahlderdateizeilenOR datenseite=0THEN meldeauffaellig(aktuellemaske, meldungkeinblaettern);datenseiterunteroderrauf(wie)ELSE selektionenzeigenvorbereiten(datenseite);FI ;put(maske,erfassungsfeld, letztesmaskenfeld[zuwas]);startpos:=serstervergleich;rueckschrittenachproc(1) ;END PROC inselektionenzurdruckausgabeblaettern;PROC inregelzurdruckausgabeblaettern(INT CONST wie):loeschemeldung(aktuellemaske); zugriffsregelnindateieintragen(leseanfangindatei,erfassungsfeld); datenseiteraufoderrunter(wie);IF maxzugriffe*(datenseite-1)>= anzahlderdateizeilenOR datenseite=0THEN meldeauffaellig(aktuellemaske, meldungkeinblaettern);datenseiterunteroderrauf(wie)ELSE zugriffezeigenvorbereiten(datenseite)FI ;put(maske,erfassungsfeld, letztesmaskenfeld[zuwas]);startpos:=zerstervergleich;rueckschrittenachproc(1) END PROC inregelzurdruckausgabeblaettern;INT PROC nochmeldungauszugeben:IF meldungstext=niltextTHEN 0ELSE meldungstext:=niltext;IF gespeichertTHEN 191 ELSE 195FI FI END PROC nochmeldungauszugeben;PROC setzenummerderdruckausgabe( TEXT CONST nr):nummerderdruckausgabe:=nrEND PROC setzenummerderdruckausgabe; BOOL PROC pruefungida:FALSE END PROC pruefungida;PROC zurueckzurbearbeitung( INT CONST anzahl):zurueck;setzedruckausgabelistenauswahl(FALSE );init( erfassungsfeld);enter(anzahl)END PROC zurueckzurbearbeitung;PROC formularausdrucken:standardmeldung(meldungformdrucken,niltext);changeinfile( filenameformtp,"#","\#");print(filenameformtp);changeinfile(filenameformtp,"\#" ,"#");rueckschrittenachproc(1)END PROC formularausdrucken;PROC druckvariableueberpruefen:IF erlaubtevariableneingabeTHEN standardkopfmaskeaktualisieren(programmname);IF druckausgabelistenauswahl THEN initmaske(maske,bearbmaske[zuwas]);setzeaktuellemaske(maske);show( aktuellemaske);loeschfeldverdecken;FI ;IF existenzdervariablennotwendigTHEN fehlerbehandlung;rueckschrittenachproc(1)ELSE maskenwertezeigenundbearbeiten; FI ELSE meldeauffaellig(aktuellemaske,meldungfalschevariable);startpos:= fnrerstesausgabefeld;rueckschrittenachproc(1)FI . existenzdervariablennotwendig:(neuedruckvariableAND druckvariableexistiertschon)OR (NOT neuedruckvariableAND NOT druckvariableexistiertschon).druckvariableexistiertschon:getsteuercode(int( erfassungsfeld[dvnummer]),erfassungsfeld[dvdefinition],drvlaenge, drvrechtsbuendig,drvdruckvar);druckvariablegibtesbereits:=erfassungsfeld[ dvdefinition]<>niltext;erfassungsfeld[dvdefinition]<>niltext.fehlerbehandlung :IF neuedruckvariableAND druckvariableexistiertschonTHEN meldeauffaellig( aktuellemaske,meldungvgibtesschon)ELSE meldeauffaellig(aktuellemaske, meldungvgibtesnicht)FI .END PROC druckvariableueberpruefen;PROC eingangsbildschirmueberpruefen(PROC wasweiter):BOOL VAR druckausgabegibtesschon:=druckausgabeexistiertbereits;IF eingangsbildschirmok THEN IF listederdruckausgabengezeigtTHEN nummerderdruckausgabesetzen( nummerderdruckausgabe);druckausgabegibtesschon:=druckausgabeexistiertbereits FI ;getform(int(nummerderdruckausgabe));openformular(int( nummerderdruckausgabe));init(erfassungsfeld);angegebenedruckausgabebearbeiten ELSE fehlerbehandlung1;rueckschrittenachproc(1)FI .eingangsbildschirmok:IF listederdruckausgabengezeigtTHEN nureinedruckausgabeangekreuztELSE nummerinrichtigengrenzen(nummerderdruckausgabe)FI .fehlerbehandlung1:IF listederdruckausgabengezeigtTHEN meldeauffaellig(aktuellemaske, meldungalternative)ELSE meldeauffaellig(aktuellemaske,meldungfalschenummer) FI .angegebenedruckausgabebearbeiten:IF existenzderdruckausgabenoetigTHEN IF zuwas=druckdefinitionTHEN #wasweiterersetztdr16.12.87# bearbeitungsbildschirmausgeben(PROC wasweiter);ELIF zuwas=selektionAND getobjektklasse(leitobjekt)=niltextTHEN meldeauffaellig(aktuellemaske, meldungkeinleitobjekt);rueckschrittenachproc(1)ELSE saveupdateposition(dnrida );bearbeitungsbildschirmausgeben(PROC wasweiter);FI ELSE fehlerbehandlung2; rueckschrittenachproc(1)FI .existenzderdruckausgabenoetig:( druckausgabegibtesschonAND NOT neuedruckausgabe)OR (NOT druckausgabegibtesschonAND neuedruckausgabe).fehlerbehandlung2:IF NOT druckausgabegibtesschonAND NOT neuedruckausgabeTHEN meldeauffaellig( aktuellemaske,meldungdgibtesnicht);forget(filenameform+text(getactivformular) ,quiet);forget(filenamedata+text(getactivformular),quiet)ELIF druckausgabegibtesschonAND neuedruckausgabeTHEN meldeauffaellig(aktuellemaske ,meldungdgibtesschon)FI ;.END PROC eingangsbildschirmueberpruefen;BOOL PROC druckausgabeexistiertbereits:#putkeypart(niltext);putdatapart(niltext);## vorläufig14.03.88#inittupel(dnrida);putwert(fnridanummer, nummerderdruckausgabe);search(dnrida,TRUE );dbstatus=okEND PROC druckausgabeexistiertbereits;PROC bearbeitungsbildschirmausgeben(PROC wasweiter):programmname:=maskentiteleingang[zuwas]+maskenzusatz+ nummerderdruckausgabe;standardkopfmaskeaktualisieren(programmname); bearbeitungsmaskeausgeben;eventuellmeldungausgeben;wasweiter. bearbeitungsmaskeausgeben:initmaske(maske,bearbmaske[zuwas]); setzeaktuellemaske(maske);fnrletztesausgabefeld:=letztesmaskenfeld[zuwas]; show(aktuellemaske);loeschfeldverdecken;getform(int(nummerderdruckausgabe)); openformular(int(nummerderdruckausgabe)).END PROC bearbeitungsbildschirmausgeben;PROC zugriffsregelueberpruefen:IF erlaubteregeleingabeTHEN standardkopfmaskeaktualisieren(programmname);IF druckausgabelistenauswahlTHEN initmaske(maske,bearbmaske[zuwas]); setzeaktuellemaske(maske);show(aktuellemaske);loeschfeldverdeckenFI ;IF existenzderregelnotwendigTHEN fehlerbehandlung;rueckschrittenachproc(1)ELSE maskenwertezeigenundbearbeiten;FI ELSE #dr02.05.88#IF falscheregelTHEN meldeauffaellig(aktuellemaske,meldungfalscheregel)ELIF esexistiertkeineobjektklasseTHEN meldeauffaellig(aktuellemaske, meldungkeineobjektklasse)FI ;startpos:=fnrerstesausgabefeld; rueckschrittenachproc(1)FI .existenzderregelnotwendig:(neuezugriffsregelAND zugriffsregelexistiertschon)OR (NOT neuezugriffsregelAND NOT zugriffsregelexistiertschon).zugriffsregelexistiertschon:objklasse:=int( erfassungsfeld[zobjklasse]);regnr:=int(erfassungsfeld[zregelnr]);regelnr:= getregelnummer(objklasse,regnr);zugriffsregelgibtesbereits:=regelnr>0;regelnr >0.fehlerbehandlung:IF neuezugriffsregelAND zugriffsregelexistiertschonTHEN meldeauffaellig(aktuellemaske,meldungrgibtesschon)ELSE meldeauffaellig( aktuellemaske,meldungrgibtesnicht)FI .falscheregel:erfassungsfeld[zobjklasse] =niltextCOR erfassungsfeld[zregelnr]=niltext.esexistiertkeineobjektklasse: erfassungsfeld[zobjklasse]<>niltext#dr02.05.88#CAND int(erfassungsfeld[ zobjklasse])<=10CAND getobjektklasse(int(erfassungsfeld[zobjklasse]))=niltext .END PROC zugriffsregelueberpruefen;PROC erneuteeingabeerforderlich: allefeldersperren(FALSE );feldschutzfuerbearbeitungfestlegen(zuwas);startpos :=fnrerstesausgabefeld;put(maske,erfassungsfeld,letztesmaskenfeld[zuwas]); druckausgabeeinlesen(zuwas)END PROC erneuteeingabeerforderlich;PROC angabenabspeichern(INT CONST was):INT VAR lvf;TEXT VAR txt;fehlseite:=1; fehlzeile:=1;fehlmeld:=0;SELECT wasOF CASE nameundtyp:nameundtypspeichern CASE objektklassen:objektklassenspeichernCASE zugriffsregeln: zugriffsregelspeichernCASE selektion:selektionspeichernCASE druckformular: druckformularspeichernCASE druckvariablen:druckvariablespeichernCASE druckwerte:druckwertespeichernEND SELECT ;meldungstext:=("Die Angaben "+ meldungseinschub+" wurden gespeichert ");eventuellmeldungbeilistenabarbeitung #dr01.08.88#.nameundtypspeichern:meldeauffaellig(aktuellemaske, meldungplausipruefung);IF nameundtypok(erfassungsfeld,fnummer)THEN putformularinfo(erfassungsfeld[ntname],int(erfassungsfeld[ntnummer]),FALSE ); nameundtypindbeintragen;sichernundhilfsfilesloeschenELSE meldefehlernameundtyp;startpos:=fnummer;rueckschrittenachproc(1);LEAVE angabenabspeichernFI .nameundtypindbeintragen:putwert(fnridanummer, erfassungsfeld[ntnummer]);putwert(fnridaname,erfassungsfeld[ntname]);IF neuedruckausgabeTHEN insert(dnrida)ELSE restoreupdateposition(dnrida);update( dnrida)FI .objektklassenspeichern:meldeauffaellig(aktuellemaske, meldungplausipruefung);IF objektklassenzugelassenTHEN FOR lvfFROM 1UPTO maxobjektklassenREP putobjektklasse(lvf,erfassungsfeld[lvf+1])PER ; sichernundhilfsfilesloeschenELSE meldeauffaellig(aktuellemaske, meldungfalschesobjekt);startpos:=lvf+1;rueckschrittenachproc(1);LEAVE angabenabspeichernFI .objektklassenzugelassen:IF leitobjektklasseleeroderungueltigTHEN lvf:=1;LEAVE objektklassenzugelassen WITH FALSE FI ;stopbeifalschemnamen(FALSE );FOR lvfFROM 1UPTO maxobjektklassenREP IF erfassungsfeld[lvf+1]<>niltextTHEN IF objektklassekeindateinameTHEN LEAVE objektklassenzugelassenWITH FALSE FI FI PER ;stopbeifalschemnamen(TRUE );TRUE .leitobjektklasseleeroderungueltig: erfassungsfeld[oleitobjekt]=niltextCOR (pos(leitobjektschueler,erfassungsfeld [oleitobjekt])=0AND pos(leitobjektlehrer,erfassungsfeld[oleitobjekt])=0). objektklassekeindateiname:dateinr(erfassungsfeld[lvf+1])=0. zugriffsregelspeichern:zugriffsregelnindateieintragen(leseanfangindatei, erfassungsfeld);meldeauffaellig(aktuellemaske,meldungplausipruefung);IF zugriffsregelnok(fehlseite,fehlzeile,fehlmeld)THEN zugriffsregelnabspeichern; sichernundhilfsfilesloeschenELSE stopbeifalschemnamen(TRUE );datenseite:= fehlseite;zugriffezeigenvorbereiten(datenseite);put(maske,erfassungsfeld, letztesmaskenfeld[zuwas]);meldeauffaellig(aktuellemaske,fehlmeld);startpos:= fehlzeile+((fehlzeile+2)*2);rueckschrittenachproc(1);LEAVE angabenabspeichern FI .zugriffsregelnabspeichern:wertesetzenbeineuerzugriffsregel; erstenvergleichsuchenundindexsetzen;zugriffsregelundvergleichswertespeichern. wertesetzenbeineuerzugriffsregel:IF neuezugriffsregelTHEN regelnr:= getanzahlregeln+1;zrobjekt:=objklasse;zrregel:=regnr;ELSE FI . erstenvergleichsuchenundindexsetzen:pattern:=vergleichtrenner;toline(f,1); readrecord(f,zeile);IF pos(zeile,pattern)=0THEN down(f,pattern);readrecord(f, zeile);FI ;zrindex:=int(subtext(zeile,1,pos(zeile,anzahltrenner)-1)). zugriffsregelundvergleichswertespeichern:putzugriffsregel(regelnr,zrobjekt, zrregel,zrindex,0);WHILE pos(zeile,vergleichtrenner)>0REP putvergleichswert( regelnr,subtext(zeile,pos(zeile,vergleichtrenner)+tl));toline(f,lineno(f)+1); readrecord(f,zeile);PER .selektionspeichern:selektionenindateieintragen( leseanfangindatei,erfassungsfeld);meldeauffaellig(aktuellemaske, meldungplausipruefung);IF selektionswerteok(dnr,fehlseite,fehlzeile,fehlmeld) THEN selektionenabspeichern;sichernundhilfsfilesloeschenELSE datenseite:= fehlseite;selektionenzeigenvorbereiten(datenseite);put(maske,erfassungsfeld, letztesmaskenfeld[zuwas]);meldeauffaellig(aktuellemaske,fehlmeld);startpos:=( fehlzeile*2)+1;rueckschrittenachproc(1);LEAVE angabenabspeichernFI . selektionenabspeichern:putanzahlselfelder(0);FOR lvfFROM 1UPTO anzattr(dnr) REP toline(f,lvf);readrecord(f,zeile);sfeldname:=subtext(zeile,1,pos(zeile, zeilennrtrenner)-1);svergleichswert:=subtext(zeile,pos(zeile,vergleichtrenner )+tl);putselektion(sfeldname,svergleichswert)PER .druckformularspeichern: standardmeldung(meldungplausipruefung,niltext);forget(getformtextname,quiet); copy(filenameformtp,getformtextname);IF fehlerinformularTHEN formfehlermelden ;rueckschrittenachproc(1);LEAVE angabenabspeichernELSE forget(filenameformtp, quiet);sichernundhilfsfilesloeschenFI .druckvariablespeichern:meldeauffaellig (aktuellemaske,meldungplausipruefung);IF fehlerindruckvariable(erfassungsfeld [dvdefinition])THEN rueckschrittenachproc(1);LEAVE angabenabspeichernELSE drvdruckvar:=ausdruckwardruckvariable;putsteuercode(int(erfassungsfeld[ dvnummer]),erfassungsfeld[dvdefinition],int(erfassungsfeld[dvlaenge]), erfassungsfeld[dvrechtsbuendig]<>niltext,drvdruckvar); sichernundhilfsfilesloeschenFI .druckwertespeichern:meldeauffaellig( aktuellemaske,meldungplausipruefung);IF druckwerteokTHEN startpos:= fnrerstesausgabefeld;putdruckaufbereitung(erfassungsfeld[dwschriftart],real( erfassungsfeld[dwlinkerrandlinks]),real(erfassungsfeld[dwlinkerrandoben]),int (erfassungsfeld[dwzeilenproseite]),real(erfassungsfeld[dwzeichenprozeile])); sichernundhilfsfilesloeschenELSE IF lvf=0THEN meldeauffaellig(aktuellemaske, meldungfalscheeingabe);ELSE meldeauffaellig(aktuellemaske, meldungkeinefonttabelle);FI ;rueckschrittenachproc(1);LEAVE angabenabspeichernFI .druckwerteok:lvf:=0;fonttabelleeingestelltCAND fontexistiertauchCAND linkerrandrichtigCAND rechterrandrichtig. linkerrandrichtig:startpos:=dwlinkerrandlinks;real(erfassungsfeld[ dwlinkerrandlinks])>=minanfangCAND real(erfassungsfeld[dwlinkerrandlinks])<= maxanfang.rechterrandrichtig:startpos:=dwlinkerrandoben;real(erfassungsfeld[ dwlinkerrandoben])>=minanfangCAND real(erfassungsfeld[dwlinkerrandoben])<= maxanfang.fonttabelleeingestellt:startpos:=dwschriftart;disablestop;txt:=font (1);IF iserrorTHEN clearerror;lvf:=1FI ;enablestop;lvf=0.fontexistiertauch: startpos:=dwschriftart;font(erfassungsfeld[dwschriftart])>0.END PROC angabenabspeichern;PROC maskenwertezeigenundbearbeiten:IF loeschenderdruckausgabeTHEN allefeldersperren(TRUE ); maskenwerteholenundausgeben(zuwas);druckausgabeloeschfrageELSE allefeldersperren(FALSE );maskenwerteholenundausgeben(zuwas); druckausgabeeinlesen(zuwas)FI ;END PROC maskenwertezeigenundbearbeiten;PROC maskenwerteholenundausgeben(INT CONST wozu):LET maxanzobjektklassen=10;INT VAR feld,nrindex,lvf,lvi;TEXT VAR z,datname;datenseite:=1;SELECT wozuOF CASE nameundtyp:nameundtypzeigenCASE objektklassen:objektklassenzeigenCASE zugriffsregeln:zugriffsregelzeigenCASE selektion:selektionzeigenCASE druckformular:druckformularzeigenCASE druckvariablen:druckvariablezeigenCASE druckwerte:druckwertezeigenEND SELECT ;IF wozu<>druckformularTHEN put(maske, erfassungsfeld,letztesmaskenfeld[zuwas]);FI .nameundtypzeigen:BOOL VAR ausgabelistenweise;erfassungsfeld[ntnummer]:=nummerderdruckausgabe;IF NOT neuedruckausgabeTHEN ausgabelistenweise:=FALSE ;getformularinfo( erfassungsfeld[ntname],nrdruckausgabe,ausgabelistenweise);FI ;IF neuedruckausgabeTHEN protect(maske,fnrerstesausgabefeld,TRUE )FI ;startpos:= fnrerstesausgabefeld+1;.objektklassenzeigen:FOR lvfFROM 1UPTO maxanzobjektklassenREP erfassungsfeld[lvf+1]:=getobjektklasse(lvf)PER ;. zugriffsregelzeigen:objektklasseholen;moeglichezugriffezeigen; anzahlderdateizeilen:=lines(f);IF zugriffsregelgibtesbereitsTHEN gespeichertezugriffezeigen;FI ;zugriffezeigenvorbereiten(datenseite);startpos :=zerstervergleich.moeglichezugriffezeigen:primaerzugriffholen;IF firstindex> 0THEN sekundaerzugriffeholen;FI ;.primaerzugriffholen:forget(filenamezug, quiet);f:=sequentialfile(modify,filenamezug);datname:=erfassungsfeld[ zobjklname];dnr:=dateinr(datname);anzfelder:=anzkey(dnr);zeilennr:=1;nrindex :=0;FOR lvfFROM 1UPTO anzfelderREP feld:=dnr+lvf;zeileindateischreiben;PER ;. sekundaerzugriffeholen:FOR lviFROM firstindexUPTO firstfree-1REP IF dateinr( primdatid(lvi))=dnrTHEN anzahlderfelderbestimmen;nrindexINCR 1;FOR lvfFROM 1 UPTO anzfelderREP feld:=dnr+int(subtext(z,1,pos(z,semikolon)-1));z:=subtext(z ,pos(z,semikolon)+1);zeileindateischreiben;PER ;FI ;PER ;. anzahlderfelderbestimmen:z:=zugriff(lvi);INT VAR posi;anzfelder:=0;posi:=pos( z,semikolon);WHILE posi>0REP anzfelderINCR 1;posi:=pos(z,semikolon,posi+1) PER ;.zeileindateischreiben:zeilezusammensetzen;toline(f,zeilennr); insertrecord(f);writerecord(f,zeile);zeilennrINCR 1;.zeilezusammensetzen:IF lvf=1THEN zeile:=text(nrindex)+anzahltrenner;zeileCAT text(anzfelder);zeile CAT namentrenner;ELSE zeile:=namentrennerFI ;zeileCAT name(feld);zeileCAT zeilennrtrenner;zeileCAT text(zeilennr);.gespeichertezugriffezeigen: gespeichertezugriffeholen;gespeichertezugriffeindateieintragen. gespeichertezugriffeholen:IF druckenderdefinitionTHEN regelnr:= benoetigteregelFI ;getzugriffsregel(regelnr,zrobjekt,zrregel,zrindex,zranzahl );.gespeichertezugriffeindateieintragen:pattern:=text(zrindex)+anzahltrenner; toline(f,1);readrecord(f,zeile);IF pos(zeile,pattern)>0THEN zugriffeeintragen ELSE down(f,pattern);IF patternfoundTHEN zugriffeeintragenFI FI . zugriffeeintragen:zeilennr:=lineno(f);FOR lvfFROM 1UPTO zranzahlREP toline(f, zeilennr);readrecord(f,zeile);zeileCAT vergleichtrenner;zeileCAT getvergleichswert(regelnr,lvf);writerecord(f,zeile);zeilennrINCR 1;PER . selektionzeigen:forget(filenamesel,quiet);f:=sequentialfile(modify, filenamesel);dnr:=dateinr(getobjektklasse(leitobjekt)); feldnamenindateischreiben;anzahlderdateizeilen:=lines(f); gespeicherteselektionenindateischreiben;selektionenzeigenvorbereiten( datenseite);startpos:=serstervergleich.feldnamenindateischreiben:FOR lvfFROM 1UPTO anzattr(dnr)REP toline(f,lvf);insertrecord(f);zeile:=name(dnr+lvf)+ zeilennrtrenner+text(lvf)+vergleichtrenner;writerecord(f,zeile);PER . gespeicherteselektionenindateischreiben:IF getanzahlselfelder<>0THEN FOR lvf FROM 1UPTO getanzahlselfelderREP toline(f,lvf);readrecord(f,zeile); getselektion(lvf,sfeldname,svergleichswert);zeileCAT svergleichswert; writerecord(f,zeile);PER FI .druckformularzeigen:filenameformtp:=wert( fnridanummer)+trenner+wert(fnridaname);forget(filenameformtp,quiet);IF exists (getformtextname)THEN copy(getformtextname,filenameformtp)FI ;startpos:= fnrerstesausgabefeld.druckvariablezeigen:IF druckvariablegibtesbereitsTHEN protect(maske,dvnummer,TRUE );IF drvlaenge=0THEN erfassungsfeld[dvlaenge]:= niltextELSE erfassungsfeld[dvlaenge]:=text(drvlaenge)FI ;IF drvrechtsbuendig THEN erfassungsfeld[dvrechtsbuendig]:=ankreuzzeichenELSE erfassungsfeld[ dvrechtsbuendig]:=niltextFI FI ;startpos:=dvdefinition.druckwertezeigen:REAL VAR linksoben,linkslinks,spalten;INT VAR zeilen;zurueck;getdruckaufbereitung( erfassungsfeld[dwschriftart],linkslinks,linksoben,zeilen,spalten); erfassungsfeld[dwlinkerrandlinks]:=text(linkslinks);erfassungsfeld[ dwlinkerrandoben]:=text(linksoben);erfassungsfeld[dwzeilenproseite]:=text( zeilen);erfassungsfeld[dwzeichenprozeile]:=subtext(text(spalten),1,pos(text( spalten),".")-1);.END PROC maskenwerteholenundausgeben;PROC objektklasseholen :erfassungsfeld[zobjklname]:=getobjektklasse(int(erfassungsfeld[zobjklasse])) ;END PROC objektklasseholen;PROC selektionenzeigenvorbereiten(INT CONST seitennr):bildschirmausgabenselektionsammeln(seitennr); selektionsfeldersperren;freizeilenselektionloeschenEND PROC selektionenzeigenvorbereiten;PROC bildschirmausgabenselektionsammeln(INT CONST seitennr):INT VAR lvf;merkzeile:=maxselektionen+1;leseanfangindatei:=( seitennr-1)*maxselektionen+1;FOR lvfFROM 1UPTO maxselektionenREP IF lvf+ leseanfangindatei-1<=anzahlderdateizeilenTHEN toline(f,lvf+leseanfangindatei- 1);readrecord(f,zeile);erfassungsfeld[sersteselektion+(lvf-1)*2]:=subtext( zeile,1,pos(zeile,zeilennrtrenner)-1);IF pos(zeile,vergleichtrenner)>0THEN erfassungsfeld[serstervergleich+(lvf-1)*2]:=subtext(zeile,pos(zeile, vergleichtrenner)+tl);FI ;ELSE merkzeile:=lvf;LEAVE bildschirmausgabenselektionsammelnFI PER ;END PROC bildschirmausgabenselektionsammeln;PROC selektionsfeldersperren:INT VAR lvf; allefeldersperren(TRUE );FOR lvfFROM 1UPTO maxselektionenREP protect(maske, serstervergleich+(lvf-1)*2,FALSE )PER END PROC selektionsfeldersperren;PROC freizeilenselektionloeschen:INT VAR lv;FOR lvFROM merkzeileUPTO maxselektionenREP erfassungsfeld[sersteselektion+(lv-1)*2]:=niltext; erfassungsfeld[serstervergleich+(lv-1)*2]:=niltext;protect(maske, serstervergleich+(lv-1)*2,TRUE )PER END PROC freizeilenselektionloeschen; PROC zugriffezeigenvorbereiten(INT CONST seitennr): bildschirmausgabenzugriffsammeln(seitennr);zugriffsfeldersperren; freizeilenzugriffloeschenEND PROC zugriffezeigenvorbereiten;PROC bildschirmausgabenzugriffsammeln(INT CONST seitennr):INT VAR lvf;merkzeile:= maxzugriffe+1;leseanfangindatei:=(seitennr-1)*maxzugriffe+1;FOR lvfFROM 1 UPTO maxzugriffeREP IF lvf+leseanfangindatei-1<=anzahlderdateizeilenTHEN toline(f,lvf+leseanfangindatei-1);readrecord(f,zeile);erfassungsfeld[znummer+ (lvf-1)*3]:=subtext(zeile,1,pos(zeile,anzahltrenner)-1);erfassungsfeld[ zersterzugriff+(lvf-1)*3]:=subtext(zeile,pos(zeile,namentrenner)+tl,pos(zeile ,zeilennrtrenner)-1);IF pos(zeile,vergleichtrenner)>0THEN erfassungsfeld[ zerstervergleich+(lvf-1)*3]:=subtext(zeile,pos(zeile,vergleichtrenner)+tl); ELSE erfassungsfeld[zerstervergleich+(lvf-1)*3]:=niltextFI ;ELSE merkzeile:= lvf;LEAVE bildschirmausgabenzugriffsammelnFI PER ;.END PROC bildschirmausgabenzugriffsammeln;PROC zugriffsfeldersperren:INT VAR lvf; allefeldersperren(TRUE );FOR lvfFROM 1UPTO maxzugriffeREP protect(maske, zerstervergleich+(lvf-1)*3,FALSE )PER END PROC zugriffsfeldersperren;PROC freizeilenzugriffloeschen:INT VAR lv;FOR lvFROM merkzeileUPTO maxzugriffeREP erfassungsfeld[znummer+(lv-1)*3]:=niltext;erfassungsfeld[zersterzugriff+(lv-1 )*3]:=niltext;erfassungsfeld[zerstervergleich+(lv-1)*3]:=niltext;protect( maske,zerstervergleich+(lv-1)*3,TRUE )PER END PROC freizeilenzugriffloeschen; PROC datenseiteraufoderrunter(INT CONST wie):IF wie=vorwaertsTHEN datenseite INCR 1ELSE datenseiteDECR 1FI ;END PROC datenseiteraufoderrunter;PROC datenseiterunteroderrauf(INT CONST wie):IF wie=vorwaertsTHEN datenseiteDECR 1 ELSE datenseiteINCR 1FI END PROC datenseiterunteroderrauf;PROC angabenloeschen(INT CONST was):SELECT wasOF CASE nameundtyp: nameundtyploeschenCASE zugriffsregeln:zugriffsregelloeschenCASE druckvariablen:druckvariableloeschenEND SELECT .nameundtyploeschen:delform( getactivformular);forget(getformtextname,quiet);forget(filenamedata+text( getactivformular),quiet);delete(dnrida).zugriffsregelloeschen:deleteregel( regelnr);sichernundhilfsfilesloeschen;.druckvariableloeschen:putsteuercode( int(erfassungsfeld[dvnummer]),niltext,0,FALSE ,FALSE ); sichernundhilfsfilesloeschen.END PROC angabenloeschen;PROC allefeldersperren( BOOL CONST freigabe):INT VAR lv;FOR lvFROM fnrerstesausgabefeldUPTO letztesmaskenfeld[zuwas]+5REP protect(maske,lv,freigabe)PER ;protect(maske, letztesmaskenfeld[zuwas]+1,TRUE );startpos:=fnrerstesausgabefeld;END PROC allefeldersperren;PROC changeinfile(TEXT CONST fname,vorher,nachher):INT VAR lv;f:=sequentialfile(modify,fname);FOR lvFROM 1UPTO lines(f)REP toline(f,lv); readrecord(f,zeile);changeall(zeile,vorher,nachher);writerecord(f,zeile)PER ; toline(f,1)END PROC changeinfile;PROC druckdefinitiondrucken: druckenderdefinition:=TRUE ;zugriffsregelgibtesbereits:=TRUE ;meldeauffaellig (aktuellemaske,meldungsammelndruckdef);druckdefinitionzusammenstellen(PROC ( INT CONST )maskenwerteholenundausgeben,erfassungsfeld);meldeauffaellig( aktuellemaske,meldungdruckendruckdef);sichernundhilfsfilesloeschen; nummerderdruckausgabe:=niltext;druckenderdefinition:=FALSE ; zugriffsregelgibtesbereits:=FALSE ;rueckschrittevorproc(1)#dr16.12.87#END PROC druckdefinitiondrucken;BOOL PROC erlaubteregeleingabe:LET maxeingabe=10; (nummernummerisch(erfassungsfeld[zobjklasse])CAND int(erfassungsfeld[ zobjklasse])>1CAND int(erfassungsfeld[zobjklasse])<=maxeingabeCAND getobjektklasse(int(erfassungsfeld[zobjklasse]))<>niltext)CAND ( nummernummerisch(erfassungsfeld[zregelnr])CAND int(erfassungsfeld[zregelnr])> 0CAND int(erfassungsfeld[zregelnr])<=maxeingabe)END PROC erlaubteregeleingabe ;BOOL PROC erlaubtevariableneingabe:LET maxeingabe=100;(nummernummerisch( erfassungsfeld[dvnummer])CAND int(erfassungsfeld[dvnummer])>0CAND int( erfassungsfeld[dvnummer])<=maxeingabe)END PROC erlaubtevariableneingabe;PROC eventuellmeldungausgeben:IF meldungstext<>niltextTHEN meldeauffaellig( aktuellemaske,meldungstext);meldungstext:=niltext;FI END PROC eventuellmeldungausgeben;PROC eventuellmeldungbeilistenabarbeitung:IF druckausgabelistenauswahlTHEN meldeauffaellig(aktuellemaske,meldungstext); kurzepause;meldungstext:=niltext;enter(1)ELSE IF listederdruckausgabengezeigt CAND (zuwas=zugriffsregelnOR zuwas=druckvariablen)CAND NOT ( druckausgabelistenauswahl)THEN zurueckzurbearbeitung(2)ELSE rueckschrittevorproc(2)FI ;FI .kurzepause:pause(10).END PROC eventuellmeldungbeilistenabarbeitung;PROC feldschutzfestlegen(INT CONST abwo) :INT VAR lv;protect(maske,1,TRUE );FOR lvFROM abwoUPTO letztesmaskenfeld[ zuwas]REP protect(maske,lv,TRUE )PER END PROC feldschutzfestlegen;PROC feldschutzfuerbearbeitungfestlegen(INT CONST wozu):protect(maske,1,TRUE ); SELECT wozuOF CASE zugriffsregeln:feldschutzfestlegen(fnrerstesausgabefeld+2) CASE druckvariablen:feldschutzfestlegen(fnrerstesausgabefeld+1)OTHERWISE : allefeldersperren(FALSE )END SELECT ;END PROC feldschutzfuerbearbeitungfestlegen;PROC loeschfeldverdecken:LET rahmenzeichen ="=";put(aktuellemaske,rahmenzeichen,letztesmaskenfeld[zuwas]+1);END PROC loeschfeldverdecken;TEXT PROC meldungseinschub:TEXT VAR t;SELECT zuwasOF CASE zugriffsregeln:t:="zur Regel k"+compress(erfassungsfeld[zobjklasse])+"r" +compress(erfassungsfeld[zregelnr])CASE druckvariablen:t:= "zur Druckvariablen "+erfassungsfeld[dvnummer]OTHERWISE :t:= "zur Druckausgabe "+text(getactivformular)END SELECT ;tEND PROC meldungseinschub;PROC standardfelderfuellen:INT VAR lv;FOR lvFROM 1UPTO letztesmaskenfeld[zuwas]REP standardmaskenfeld(erfassungsfeld[lv],(lv))PER END PROC standardfelderfuellen;END PACKET ispidadefinieren;