PACKET benutzerlisteDEFINES benulispezielleteile:LET niltext="",blank=" ", null=0,slash="/",spaltentrenner=" ",ueberschriftenzeilen=1,anzspalten=6, dateiname="sortdatei",ausgfeldlaenge=9,spaltenbreite=11,AUSGFELD =ROW ausgfeldlaengeTEXT ,benulieingangsmaske="mu liste einfach eingang", benulianfpos=2,mnrbearbeitetwerden=104;#LET dnrbenutz=7,fnrbenutzname=9, fnrbenutzberecht=11;#INT VAR druckzeilenzahl,bildanf,eingabestatus, aktuelleindexnr,ausgfeldlaengereal;TEXT VAR benuliueberschrift,kennung, berechtigungen,bearbeitetwerden,startwert,anfbuchstabe,neueranfbuchstabe; AUSGFELD VAR ausgfeld;BOOL PROC multistop:TRUE END PROC multistop;PROC benulispezielleteile(INT CONST nr):SELECT nrOF CASE 1:benulidialogvorbereiten CASE 2:benulieingabenrichtigCASE 3:benulilistenvorbereitenCASE 4: benulidruckvorbereitenCASE 5:benuliseitedruckenCASE 6: benulibildschirmvorbereitenCASE 7:benuliseitezeigenENDSELECT .END PROC benulispezielleteile;PROC benulidialogvorbereiten:systemdbon;#first(dnrbenutz );startwert:=wert(fnrbenutzname);#benuliueberschrift:=text(vergleichsknoten); setzeanfangswerte(benulieingangsmaske,benulianfpos).END PROC benulidialogvorbereiten;PROC benulieingabenrichtig:LET fnrausgdrucker=2, fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest (FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext); setzeeingabetest(TRUE )FI .END PROC benulieingabenrichtig;PROC benulilistenvorbereiten:INT VAR i;BOOL VAR b:=FALSE ;initspalten;FOR iFROM 1 UPTO anzspaltenREP setzespaltenbreite(spaltenbreite)PER ;setzespaltentrenner( spaltentrenner);aktuelleindexnr:=dnrbenutz;inittupel(dnrbenutz); setzeidentiwert("");initobli(2);objektlistestarten(aktuelleindexnr,"", fnrbenutzname,FALSE ,b);setzebestandende(NOT multistop)END PROC benulilistenvorbereiten;PROC benulibildschirmvorbereiten:LET fnrausganf=2; standardkopfmaskeaktualisieren(benuliueberschrift);bildanf:=fnrausganf; setzebildanfangsposition(bildanf).END PROC benulibildschirmvorbereiten;PROC benuliseitezeigen:blaettern(PROC (INT CONST )benutzerzeigen,aktion,FALSE , FALSE ,BOOL PROC multistop);END PROC benuliseitezeigen;PROC benutzerzeigen( INT CONST x):benutzerholen;benutzeraufbereitenbild;benutzeraufbildschirm.END PROC benutzerzeigen;PROC benutzeraufbereitenbild:INT VAR i; benutzeraufbereitenallgemein(bildbreite);restbehandlungbild. restbehandlungbild:FOR iFROM ausgfeldlaengereal+1UPTO ausgfeldlaengeREP ausgfeld(i):=text(blank,bildbreite)PER .END PROC benutzeraufbereitenbild; PROC benutzeraufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND REP .END PROC benutzeraufbildschirm;PROC benulidruckvorbereiten:anfbuchstabe:=niltext; druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(zentriert( benuliueberschrift,druckbreite));holemeldung;systemdbon;inittupel(dnrbenutz); setzebestandende(NOT multistop);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistop).holemeldung:meldungstext( mnrbearbeitetwerden,bearbeitetwerden).variablenfuerdrucksetzen: druckzeilenzahl:=drucklaenge(ueberschriftenzeilen).END PROC benulidruckvorbereiten;PROC benuliseitedrucken:benuliueberschriftdrucken; seitedrucken(PROC (INT VAR )benutzerdrucken,druckzeilenzahl,ausgfeldlaenge, BOOL PROC multistop);seitenwechsel.END PROC benuliseitedrucken;PROC benuliueberschriftdrucken:druckkopfschreiben.END PROC benuliueberschriftdrucken;PROC benutzerdrucken(INT VAR zeilenzaehler):LET markiert="#";benutzerholen;ggflmeldunganfbuchstabe;benutzeraufbereitendruck; zeilenzaehlerINCR ausgfeldlaengereal;benutzerindruckdatei. ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI . anfbuchstabegeaendert:neueranfbuchstabe:=kennungSUB 1;anfbuchstabe<> neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(bearbeitetwerden, neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC benutzerdrucken;PROC benutzeraufbereitendruck:benutzeraufbereitenallgemein( druckbreite).END PROC benutzeraufbereitendruck;PROC benutzerindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengerealREP druckzeileschreiben(ausgfeld(i)) PER .END PROC benutzerindruckdatei;PROC benutzeraufbereitenallgemein(INT CONST breite):INT VAR position,anzahlberechtigungen,anzzeilenreal,i,j,k;FILE VAR f;TEXT VAR berechtigung;kennungaufbereiten;berechtigungenaufbereiten. kennungaufbereiten:ausgfeld(1):=text(kennung,breite). berechtigungenaufbereiten:erstenslashimtextueberlesen; berechtigungenindateiundsortieren;wirklichezeilenzahlberechnen; ausgabefelderberechtigungenauffuellen.erstenslashimtextueberlesen:position:= pos(berechtigungen,slash);berechtigungen:=subtext(berechtigungen,position+1). berechtigungenindateiundsortieren:f:=sequentialfile(output,dateiname); anzahlberechtigungen:=null;position:=pos(berechtigungen,slash);WHILE position <>nullREP anzahlberechtigungenINCR 1;putline(f,subtext(berechtigungen,1, position-1));berechtigungen:=subtext(berechtigungen,position+1);position:=pos (berechtigungen,slash)PER ;putline(f,berechtigungen);anzahlberechtigungen INCR 1;sort(dateiname).wirklichezeilenzahlberechnen:anzzeilenreal:= anzahlberechtigungenDIV anzspalten;IF (anzahlberechtigungenMOD anzspalten<> null)THEN anzzeilenrealINCR 1FI .ausgabefelderberechtigungenauffuellen:f:= sequentialfile(input,dateiname);i:=null;FOR jFROM 1UPTO anzzeilenrealREP FOR kFROM 1UPTO anzspaltenREP iINCR 1;IF i>anzahlberechtigungenTHEN spaltenweise( blank)ELSE getline(f,berechtigung);spaltenweise(berechtigung)FI ;PER ; ausgfeld(j+1):=zeilePER ;forget(dateiname,quiet);ausgfeldlaengereal:= anzzeilenreal+2;ausgfeld(ausgfeldlaengereal):=text(blank,breite).END PROC benutzeraufbereitenallgemein;PROC benutzerholen:kennung:=wert(fnrbenutzname); berechtigungen:=wert(fnrbenutzberecht);END PROC benutzerholen;END PACKET benutzerliste;