PACKETlsdialog5DEFINESwritehead,restorehead,menuinfo,menualternative,menuyes,menuno,menuone,menusome,menuanswer,installmenu,handlemenu,refreshsubmenu,deactivate,regeneratemenuscreen,activate,writemenunotice,erasemenunotice,menubasistext,anwendungstext,showmenuwindow,menuwindowpage,menuwindowout,menuwindowline,menuwindowyes,menuwindowno,menuwindowcursor,getmenuwindowcursor,remainingmenuwindowlines,menuwindowcenter,menuwindowstop,menukartenname,currentmenuwindow,resetdialog,ausstieg:LETmenutafeltaskname="ls-MENUKARTEN",menutafeltype=1954,menutafelpraefix="ls-MENUKARTE:",maxmenus=6,maxmenutexte=300,maxinfotexte=2000,maxhauptmenupunkte=10,maxuntermenupunkte=15,ersteuntermenuzeile=3;LETblank=" ",verlassen="q",piep="�",trennzeilensymbol="###",hauptmenuluecke=" ";LETauswahlstring1="�� � �?";TYPE MENUPUNKT=STRUCT(TEXTpunktkuerzel,punktname,procname,boxtext,BOOLaktiv,angewaehlt),EINZELMENU=STRUCT(INTbelegt,TEXTueberschrift,INTanfangsposition,maxlaenge,ROWmaxuntermenupunkteMENUPUNKTmenupunkt,INTaktuelleruntermenupunkt,TEXTstartprozedurname,leaveprozedurname),MENU=STRUCT(TEXTmenuname,kopfzeile,INTanzahlhauptmenupunkte,ROWmaxhauptmenupunkteEINZELMENUeinzelmenu,TEXTmenueingangsprozedur,menuausgangsprozedur,menuinfo,lizenznummer,versionsnummer,INThauptmenuzeiger,untermenuanfang,untermenuzeiger),INFOTEXT=STRUCT(INTanzahlinfotexte,ROWmaxinfotexteTEXTstelle),MENUTEXT=STRUCT(INTanzahlmenutexte,ROWmaxmenutexteTEXTplatz),MENULEISTE=STRUCT(INTbelegt,zeigeraktuell,zeigerhintergrund,ROWmaxmenusMENUmenu,MENUTEXTmenutext,INFOTEXTinfotext);BOUND MENULEISTE VARmenuleiste;DATASPACE VARds;WINDOW VARmenuwindow,schreibfenster;WINDOW VARzweitesmenu:=window(6,5,73,19);INITFLAG VARinthistask:=FALSE;INT VARanzahloffenermenus:=0;INT VARmenunotizx,menunotizxsize,menunotizy,menunotizysize,menunotizposition;TEXT VARangekoppeltemenutafel:="",menunotiztext;BOOL VARmenunotizistgesetzt:=FALSE,mitausstieg:=FALSE,hochruntererlaubt:=TRUE,activationchanged:=FALSE;ROW13TEXT CONSTfehlermeldung:=ROW13TEXT:("Die Task '"+menutafeltaskname+"' existiert nicht!","Die Menükarte '","' existiert nicht in der Task '"+menutafeltaskname+"'!","' hat falschen Typ/Bezeichnung (keine 'MENÜKARTE')!","Das Menü '","' ist nicht in der angekoppelten Menükarte!","Zu viele geöffnete Menüs ( > 2 )!","Kein Menü geöffnet!","Menü enthält keine Menüpunkte!","Menüpunkt ist nicht im Menü enthalten!","Kein Text vorhanden!","Zugriff unmöglich!","Einschränkung unzulässig!");ROW1TEXT CONSTvergleichstext:=ROW1TEXT:("gibt es nicht");ROW3TEXT CONSThinweis:=ROW3TEXT:(" Info:/ Wählen: Bestätigen: Verlassen:"," Weiter mit beliebiger Taste!"," Bitte warten...!");ROW3TEXT CONSTinfotext:=ROW3TEXT:(" Für diesen Menüpunkt ist (noch) keine Funktion eingetragen!"," Möchten Sie dieses Menü tatsächlich verlassen"," Leider ist zu diesem Menüpunkt kein Info - Text eingetragen!");PROCinstallmenu(TEXT CONSTmenutafelname):installmenu(menutafelname,TRUE)END PROCinstallmenu;PROCinstallmenu(TEXT CONSTmenutafelname,BOOL CONSTmitkennung):TEXT VARletzterparameter;IFmitkennungTHENzeigemenukennungFI;initialisieremenuggf;IFmenutafelnochnichtangekoppeltTHENletzterparameter:=std;holemenutafel;kopplemenutafelan;lastparam(letzterparameter)FI.initialisieremenuggf:IF NOTinitialized(inthistask)THENangekoppeltemenutafel:="";anzahloffenermenus:=0;menunotizistgesetzt:=FALSE;FI.menutafelnochnichtangekoppelt:menutafelname<>angekoppeltemenutafel.holemenutafel:IF NOTexiststask(menutafeltaskname)THENbereinigesituation;cursoron;errorstop(fehlermeldung[1])FI;disablestop;fetch(menutafelname,/menutafeltaskname);IFiserrorANDpos(errormessage,vergleichstext[1])>0THENclearerror;enablestop;bereinigesituation;cursoron;errorstop(fehlermeldung[2]+menutafelname+fehlermeldung[3])ELIFiserrorTHENclearerror;enablestop;bereinigesituation;cursoron;errorstop(errormessage)ELSEenablestopFI.kopplemenutafelan:IFtype(old(menutafelname))=menutafeltypeANDpos(menutafelname,menutafelpraefix)=1THENforget(ds);ds:=old(menutafelname );menuleiste:=ds;angekoppeltemenutafel:=menutafelname;forget(menutafelname,quiet)ELSEbereinigesituation;cursoron;errorstop("'"+menutafelname+fehlermeldung[4])FI.END PROCinstallmenu;PROCausstieg(BOOL CONSTwert):mitausstieg:=wertEND PROCausstieg;TEXT PROCmenukartenname:IF NOTinitialized(inthistask)THENangekoppeltemenutafel:="";anzahloffenermenus:=0;menunotizistgesetzt:=FALSE;FI;angekoppeltemenutafelEND PROCmenukartenname;PROChandlemenu(TEXT CONSTmenuname):mitausstieg:=TRUE;cursoroff;bietemenuan;lassemenupunkteauswaehlen;schliessemenu;leereggfdenbildschirm.bietemenuan:oeffnemenu(menuname).leereggfdenbildschirm:IFanzahloffenermenus<1THENerasemenunotice;page;cursoronFI.lassemenupunkteauswaehlen:TEXT VARkuerzelkette:="";starteaktuelleuntermenuoperationen;disablestop;REPcursorinwarteposition;ermittleaktuellekuerzelkette(kuerzelkette);nimmzeichenauf;interpretierezeichenUNTILmenuverlassengewuenschtPER.nimmzeichenauf:TEXT CONSTerlaubtezeichen:=auswahlstring1+kuerzelkette;TEXT VAReingabezeichen;INT VARzeichenposition;REPinchar(eingabezeichen);pruefeobfehler;zeichenposition:=pos(erlaubtezeichen,eingabezeichen);piepseggfUNTILzeichenposition>0PER.piepseggf:IFzeichenposition=0THENout(piep)FI.menuverlassengewuenscht:zeichenposition=6AND(zweiteszeichen=verlassen).interpretierezeichen:SELECTzeichenpositionOF CASE1,2:geheeinenhauptmenupunktnachlinksoderrechtsCASE3:geheeinenuntermenupunktnachuntenCASE4:geheeinenuntermenupunktnachobenCASE5:fuehreaktuellenmenupunktausCASE6:holeescsequenzCASE7:zeigeerklaerungstextimmenuanOTHERWISEwertekuerzeleingabeausEND SELECT.pruefeobfehler:IFiserrorTHENclearerror;regeneratemenuscreen;menuinfo(errormessage)END IF.geheeinenhauptmenupunktnachlinksoderrechts:INT VARanzahlschritte:=1;beendeaktuelleuntermenuoperationen;loescheaktuellesuntermenuaufbildschirm;loeschealtehauptmenumarkierung;IFzeichenposition=1THENanzahlschritteINCRclearbufferandcount("�");ermittlelinkemenuposition;ELSEanzahlschritteINCRclearbufferandcount("�");ermittlerechtemenuposition;END IF;stelleaktuellenhauptmenupunktinversdar;starteaktuelleuntermenuoperationen;schreibeaktuellesuntermenuaufbildschirm.loeschealtehauptmenumarkierung:eraseinvers(area(menuwindow),startpos,1,ueberschriftlaenge);out(area(menuwindow),startpos,1,ueberschrifttext).startpos:aktuellesuntermenu.anfangsposition.ueberschriftlaenge:length(ueberschrifttext).ueberschrifttext:aktuellesuntermenu.ueberschrift.ermittlelinkemenuposition:INT VARpositionszaehler;FORpositionszaehlerFROM1UPTOanzahlschritteREPdrehediemenupositionumeinenwertrunterPER.ermittlerechtemenuposition:FORpositionszaehlerFROM1UPTOanzahlschritteREPdrehediemenupositionumeinenwerthochPER.drehediemenupositionumeinenwertrunter:IFaktuellesmenu.hauptmenuzeiger>1THENaktuellesmenu.hauptmenuzeigerDECR1ELSEaktuellesmenu.hauptmenuzeiger:=aktuellesmenu.anzahlhauptmenupunkteFI.drehediemenupositionumeinenwerthoch:IFaktuellesmenu.hauptmenuzeiger0)CAND(naechsteraktiver>0).gehezumfolgendenuntermenupunkt:aktuellesmenu.untermenuzeiger:=naechsteraktiver.stelleaktuellenhauptmenupunktinversdar:outinvers(area(menuwindow),startpos,1,ueberschrifttext).fuehreaktuellenmenupunktaus:IFaktuellesmenu.untermenuzeiger<>0THENkennzeichnealsangetickt;fuehreoperationaus(menuanweisung);IFactivationchangedTHENactivationchanged:=FALSE;refreshsubmenu;IF folgenderaktiveruntermenupunkt=0THENhochruntererlaubt:=FALSE ELSEhochruntererlaubt:=TRUE END IF END IF;nimmkennzeichnungzurueckELSEout(piep)FI.kennzeichnealsangetickt:aktuellermenupunkt.angewaehlt:=TRUE;markiereaktuellenuntermenupunkt.nimmkennzeichnungzurueck:IFaktuellesmenu.untermenuzeiger<>0THENaktuellermenupunkt.angewaehlt:=FALSE;markiereaktuellenuntermenupunktEND IF.menuanweisung:compress(aktuellermenupunkt.procname).aktuellermenupunkt:aktuellesuntermenu.menupunkt[aktuellesmenu.untermenuzeiger].holeescsequenz:TEXT VARzweiteszeichen;inchar(zweiteszeichen);SELECTpos(verlassen+"?$",zweiteszeichen)OF CASE1:CASE2:menuinfo(menuleiste.menutext.platz[4],5,maxint)CASE3:gibinfoausOTHERWISEout(piep)END SELECT.wertekuerzeleingabeaus:naechsteraktiver:=pos(kuerzelkette,eingabezeichen);nimmummarkierungvor;fuehreaktuellenmenupunktaus.gibinfoaus:menuinfo(menuleiste.menutext.platz[20]).zeigeerklaerungstextimmenuan:IFaktuellesmenu.untermenuzeiger>0THEN IFcompress(erklaerungstext)=""THENmenuinfo(infotext[3])ELSEmenuinfo(erklaerungstext)FI FI.erklaerungstext:aktuellermenupunkt.boxtext.beendeaktuelleuntermenuoperationen:kuerzelkette:="".starteaktuelleuntermenuoperationen:ermittleaktuellekuerzelkette(kuerzelkette);IFstartoperation<>""THENfuehreoperationaus(startoperation)FI.startoperation:compress(aktuellesuntermenu.startprozedurname).END PROChandlemenu;PROCermittleaktuellekuerzelkette(TEXT VARkuerzelkette):kuerzelkette:="";INT VARkuerzelzeiger;FORkuerzelzeigerFROM1UPTOaktuellesuntermenu.belegtREP IFcompress(aktuellespunktkuerzel)=""THENkuerzelketteCAT"�"ELSEhaengeggfkuerzelanFI PER.aktuellespunktkuerzel:aktuellesuntermenu.menupunkt[kuerzelzeiger].punktkuerzel.haengeggfkuerzelan:IFbetrachteterpunktistaktivTHENkuerzelketteCATaktuellespunktkuerzelELSEkuerzelketteCAT"�"FI.betrachteterpunktistaktiv:aktuellesuntermenu.menupunkt[kuerzelzeiger].aktivEND PROCermittleaktuellekuerzelkette;PROCoeffnemenu(TEXT CONSTmenuname):cursoroff;sucheeingestelltesmenu;ueberpruefeanzahloffenermenus;aktuellesmenu.hauptmenuzeiger:=1;aktuellesmenu.untermenuzeiger:=0;aktuellesmenu.untermenuanfang:=0;fuehreggfmenueingangsprozeduraus;showmenu;.sucheeingestelltesmenu:INT VARi,suchzeiger;BOOL VARgefunden:=FALSE;FORiFROM1UPTOmenuleiste.belegtREP IFmenuleiste.menu[i].menuname=menunameTHENgefunden:=TRUE;suchzeiger:=iFI UNTILgefundenPER;IF NOTgefundenTHENcursoron;page;errorstop(fehlermeldung[5]+menuname+fehlermeldung[6])FI;anzahloffenermenusINCR1.ueberpruefeanzahloffenermenus:IFanzahloffenermenus=1THENmenuwindow:=window(1,2,79,23)ELIFanzahloffenermenus=2THENmenuleiste.zeigerhintergrund:=menuleiste.zeigeraktuell;menuwindow:=zweitesmenuELSEanzahloffenermenus:=0;cursoron;errorstop(fehlermeldung[7])FI;menuleiste.zeigeraktuell:=suchzeiger;hochruntererlaubt:=TRUE.fuehreggfmenueingangsprozeduraus:IFaktuellesmenu.menueingangsprozedur<>""THENfuehreoperationaus(aktuellesmenu.menueingangsprozedur)FI.END PROCoeffnemenu;PROCshowmenu:ueberpruefemenudaten;page;schreibekopfzeile;stellehauptmenuleistezusammen;zeigehauptmenuan;stelleaktuellenhauptmenupunktinversdar;schreibeaktuellesuntermenuaufbildschirm;zeigeinformationszeilean.ueberpruefemenudaten:IFanzahloffenermenus=0THENerrorstop(fehlermeldung[8])ELIFaktuellesmenu.anzahlhauptmenupunkte<1THENerrorstop(fehlermeldung[9])FI.schreibekopfzeile:IFaktuellesmenu.kopfzeile<>""THENcursor(1,1);out(invers(text(aktuellesmenu.kopfzeile,77)))END IF.stellehauptmenuleistezusammen:TEXT VARhauptmenuzeile:=aktuellesmenu.menuname;INT VARzeiger;hauptmenuzeileCAT":";FORzeigerFROM1UPTOaktuellesmenu.anzahlhauptmenupunkteREPhaengehauptmenupunktanPER.haengehauptmenupunktan:hauptmenuzeileCAThauptmenuluecke;hauptmenuzeileCAThauptmenupunktname.hauptmenupunktname:aktuellesmenu.einzelmenu[zeiger].ueberschrift.zeigehauptmenuan:cursor(1,2);out(hauptmenuzeile);cursor(1,3);out(79*waagerecht).stelleaktuellenhauptmenupunktinversdar:cursor(menuwindow,startposition,1);out(menuwindow,invers(ueberschrifttext)).startposition:aktuellesuntermenu.anfangsposition-1.ueberschrifttext: aktuellesuntermenu.ueberschrift.zeigeinformationszeilean:writepermanentfootnote(hinweis[1])END PROCshowmenu;PROCschreibeaktuellesuntermenuaufbildschirm:ermittlelinkeobereeckedesuntermenukastens;zeichnequerlinieneu;wirfuntermenuaus;showmenunotice;cursorinwarteposition.ermittlelinkeobereeckedesuntermenukastens:aktuellesmenu.untermenuanfang:=menumitte-halbemenubreite;achteaufrandextrema.menumitte:startposition+(length(ueberschrifttext)DIV2)-1.startposition:aktuellesuntermenu.anfangsposition.ueberschrifttext:aktuellesuntermenu.ueberschrift.halbemenubreite:aktuellesuntermenu.maxlaengeDIV2.achteaufrandextrema:gleicheggflinkenrandaus;gleicheggfrechtenrandaus.zeichnequerlinieneu:cursor(1,3);out(79*waagerecht).gleicheggflinkenrandaus:IFaktuellesmenu.untermenuanfang<4THENaktuellesmenu.untermenuanfang:=4FI.gleicheggfrechtenrandaus:IF(aktuellesmenu.untermenuanfang+aktuellesuntermenu.maxlaenge)>(areaxsize(menuwindow)-3)THENaktuellesmenu.untermenuanfang:=areaxsize(menuwindow)-aktuellesuntermenu.maxlaenge-3FI.wirfuntermenuaus:TEXT VARlinie:=(aktuellesuntermenu.maxlaenge+5)*waagerecht;IFaktuellesmenu.untermenuzeiger=0THENaktuellesmenu.untermenuzeiger:=folgenderaktiveruntermenupunktFI;wirfuntermenukopfzeileaus;wirfuntermenurumpfaus;wirfuntermenufusszeileaus;markiereaktuellenuntermenupunkt.wirfuntermenukopfzeileaus:cursor(menuwindow,spalte,anfangszeile);out(balkenoben);out(linie);out(balkenoben).wirfuntermenufusszeileaus:cursor(menuwindow,spalte,endezeile);out(eckeuntenlinks);out(linie);out(eckeuntenrechts).spalte:aktuellesmenu.untermenuanfang-3.anfangszeile:ersteuntermenuzeile-1.endezeile:ersteuntermenuzeile+aktuellesuntermenu.belegt.wirfuntermenurumpfaus:INT VARlaufvar;INT CONSTaktuellepunktlaenge:=aktuellesuntermenu.maxlaenge+1;FORlaufvarFROM1UPTOaktuellesuntermenu.belegtREPwirfeineeinzelnemenuzeileausPER.wirfeineeinzelnemenuzeileaus:outwithbeam(area(menuwindow),menuspalte,menuzeile,aktuellerpunktname,laenge).menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile+laufvar-1.aktuellerpunktname:untermenubezeichnung(laufvar).laenge:aktuellepunktlaengeEND PROCschreibeaktuellesuntermenuaufbildschirm;PROCloescheaktuellesuntermenuaufbildschirm:beendeaktuelleuntermenuoperationen;loescheuntermenuaufbildschirm;schreibebalkenwiederhin;aktuellesmenu.untermenuzeiger:=1.beendeaktuelleuntermenuoperationen:IFleaveoperation<>""THENfuehreoperationaus(leaveoperation)FI.leaveoperation:compress(aktuellesuntermenu.leaveprozedurname).loescheuntermenuaufbildschirm:INT VARlaufvar;FORlaufvarFROMaktuellesuntermenu.belegt+1DOWNTO1REPloescheeineeinzelnemenuzeilePER.loescheeineeinzelnemenuzeile:erasewithbeam(area(menuwindow),menuspalte,menuzeile,laenge).menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile+laufvar-1.laenge:aktuellesuntermenu.maxlaenge+1.schreibebalkenwiederhin:cursor(menuwindow,spalte,anfangszeile);out((aktuellesuntermenu.maxlaenge+7)*waagerecht).spalte:aktuellesmenu.untermenuanfang-3.anfangszeile:ersteuntermenuzeile-1.END PROCloescheaktuellesuntermenuaufbildschirm;PROCmarkiereaktuellenuntermenupunkt:IFaktuellesmenu.untermenuzeiger<>0THENlaufeggfzumnaechstenaktivenmenupunkt;IFaktuellesmenu.untermenuzeiger<>0THENoutinverswithbeam(area(menuwindow),menuspalte,menuzeile,aktuellerpunktname,laenge)FI;IFfolgenderaktiveruntermenupunkt=0THENhochruntererlaubt:=FALSE ELSEhochruntererlaubt:=TRUE END IF ELSEhochruntererlaubt:=FALSE FI.laufeggfzumnaechstenaktivenmenupunkt:IF NOTaktuellesuntermenu.menupunkt[aktuellesmenu.untermenuzeiger].aktivTHENaktuellesmenu.untermenuzeiger:=folgenderaktiveruntermenupunktFI.menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile-1+aktuellesmenu.untermenuzeiger.aktuellerpunktname:untermenubezeichnung(aktuellesmenu.untermenuzeiger).laenge:aktuellesuntermenu.maxlaenge+1END PROCmarkiereaktuellenuntermenupunkt;PROCdemarkiereaktuellenuntermenupunkt:IFaktuellesmenu.untermenuzeiger<>0THENeraseinvers(area(menuwindow),menuspalte,menuzeile,laenge);out(area(menuwindow),menuspalte,menuzeile, aktuellerpunktname,laenge)FI.menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile-1+aktuellesmenu.untermenuzeiger.aktuellerpunktname:untermenubezeichnung(aktuellesmenu.untermenuzeiger).laenge:aktuellesuntermenu.maxlaenge+1END PROCdemarkiereaktuellenuntermenupunkt;INT PROCfolgenderaktiveruntermenupunkt:INT VARnaechster,aktueller,anzahl,zeiger;zeiger:=aktuellesmenu.untermenuzeiger;IFzeiger=0THEN IFaktuellesuntermenu.menupunkt[1].aktivTHEN LEAVEfolgenderaktiveruntermenupunktWITH1ELSEaktueller:=1END IF ELSEaktueller:=zeigerEND IF;naechster:=aktueller;anzahl:=aktuellesuntermenu.belegt;REPerzeugenachfolger;IFnaechster=aktuellerTHENaktuellesmenu.untermenuzeiger:=zeiger;LEAVEfolgenderaktiveruntermenupunktWITH0ELIFaktuellesuntermenu.menupunkt[naechster].aktivTHENaktuellesmenu.untermenuzeiger:=zeiger;LEAVEfolgenderaktiveruntermenupunktWITHnaechsterEND IF PER;0.erzeugenachfolger:naechster:=(naechsterMODanzahl)+1END PROCfolgenderaktiveruntermenupunkt;INT PROCvorausgehenderaktiveruntermenupunkt:INT VARvoriger,aktueller,anzahl;aktueller:=aktuellesmenu.untermenuzeiger;voriger:=aktueller;anzahl:=aktuellesuntermenu.belegt;REPerzeugevorgaenger;IFvoriger=aktuellerTHEN LEAVEvorausgehenderaktiveruntermenupunktWITH0ELIFaktuellesuntermenu.menupunkt[voriger].aktivTHEN LEAVEvorausgehenderaktiveruntermenupunktWITHvorigerEND IF PER;0.erzeugevorgaenger:voriger:=((voriger+anzahl-2)MODanzahl)+1END PROCvorausgehenderaktiveruntermenupunkt;PROCcursorinwarteposition:cursor(areax(menuwindow),areay(menuwindow)+1)END PROCcursorinwarteposition;TEXT PROCuntermenubezeichnung(INT CONSTposition):TEXT VARbezeichnung:=kennzeichnung;bezeichnungCATpunktkennung;bezeichnung.kennzeichnung:IFaktuellermenupunkt.aktivTHEN IFaktuellermenupunkt.angewaehltTHEN"*"ELIFaktuellermenupunkt.punktkuerzel<>""THENaktuellermenupunkt.punktkuerzelELSEblankFI ELSE"-"FI.punktkennung:IFmenupunktisttrennzeileTHENstrichellinieELSEaktuellermenupunkt.punktnameFI.menupunktisttrennzeile:aktuellermenupunkt.punktname=(blank+trennzeilensymbol).strichellinie:(aktuellesuntermenu.maxlaenge+1)*"-".aktuellermenupunkt:aktuellesuntermenu.menupunkt[position]END PROCuntermenubezeichnung;PROCfuehreoperationaus(TEXT CONSToperation):disablestop;IFoperation=""THENmenuinfo(infotext[1]);LEAVEfuehreoperationausFI;do(operation);IFiserrorTHENclearerror;oldfootnote;regeneratemenuscreen;menuinfo(errormessage,5)FI;enablestop;cursoroffEND PROCfuehreoperationaus;PROCveraendereaktivierung(TEXT CONSTunterpunkt,BOOL CONSTeintrag):INT VARunterpunktposition:=0,zeiger;sucheunterpunkt;aendereaktivierung.sucheunterpunkt:FORzeigerFROM1UPTOuntermenuendeREP IFuntermenupunkt=blank+compress(unterpunkt)THENunterpunktposition:=zeiger;LEAVEsucheunterpunktFI PER;LEAVEveraendereaktivierung.untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegt.untermenupunkt:aktuellesuntermenu.menupunkt[zeiger].punktname.aendereaktivierung:veraendereaktivierung(unterpunktposition,eintrag)END PROCveraendereaktivierung;PROCveraendereaktivierung(INT CONSTpunktnummer,BOOL CONSTeintrag):IFpunktnummer>=1ANDpunktnummer<=untermenuendeTHENaktuellesuntermenu.menupunkt[punktnummer].angewaehlt:=FALSE;aktuellesuntermenu.menupunkt[punktnummer].aktiv:=eintrag;activationchanged:=TRUE;FI.untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegtEND PROCveraendereaktivierung;PROCveraendereanwahl(TEXT CONSTunterpunkt,BOOL CONSTeintrag):INT VARunterpunktposition:=0,zeiger;sucheunterpunkt;aendereanwahl.sucheunterpunkt:FORzeigerFROM1UPTOuntermenuendeREP IFuntermenupunkt=blank+compress(unterpunkt)THENunterpunktposition:=zeiger;LEAVEsucheunterpunktFI PER;enablestop;errorstop(fehlermeldung[10]).untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegt.untermenupunkt:aktuellesuntermenu.menupunkt[zeiger].punktname.aendereanwahl:aktuellesuntermenu.menupunkt[unterpunktposition].angewaehlt:=eintragEND PROCveraendereanwahl;PROCactivate(TEXT CONSTunterpunkt):enablestop;veraendereaktivierung(unterpunkt,TRUE)END PROC activate;PROCactivate(INT CONSTpunktnummer):enablestop;veraendereaktivierung(punktnummer,TRUE)END PROCactivate;PROCdeactivate(TEXT CONSTunterpunkt):enablestop;veraendereaktivierung(unterpunkt,FALSE)END PROCdeactivate;PROCdeactivate(INT CONSTpunktnummer):enablestop;veraendereaktivierung(punktnummer,FALSE)END PROCdeactivate;PROCselect(TEXT CONSTunterpunkt):enablestop;veraendereanwahl(unterpunkt,TRUE)END PROCselect;PROCdeselect(TEXT CONSTunterpunkt):enablestop;veraendereanwahl(unterpunkt,FALSE)END PROCdeselect;PROCschliessemenu:IFaktuellesmenu.menuausgangsprozedur<>""THENfootnote(hinweis[3]);fuehreoperationaus(aktuellesmenu.menuausgangsprozedur)FI;anzahloffenermenusDECR1;IFanzahloffenermenus=1THENaktivieredasaufeisgelegtemenuFI.aktivieredasaufeisgelegtemenu:hochruntererlaubt:=TRUE;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);showmenuEND PROCschliessemenu;PROCrefreshsubmenu:schreibeaktuellesuntermenuaufbildschirm;showmenunotice;activationchanged:=FALSE END PROCrefreshsubmenu;PROCregeneratemenuscreen:page;showmenu;showmenunotice;activationchanged:=FALSE.END PROCregeneratemenuscreen;PROCmenuinfo(TEXT CONSTt,INT CONSTposition,timelimit):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);boxinfo(w,t,position,timelimit);oldfootnote;schreibeaktuellesuntermenuaufbildschirmEND PROCmenuinfo;PROCmenuinfo(TEXT CONSTt,INT CONSTposition):menuinfo(t,position,maxint)END PROCmenuinfo;PROCmenuinfo(TEXT CONSTt):menuinfo(t,5,maxint)END PROCmenuinfo;INT PROCmenualternative(TEXT CONSTt,auswahlliste,zusatztasten,INT CONSTposition,BOOL CONSTmitabbruch):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);INT VARergebnis:=boxalternative(w,t,auswahlliste,zusatztasten,position,mitabbruch);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;ergebnisEND PROCmenualternative;BOOL PROCmenuyes(TEXT CONSTfrage,INT CONSTposition):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);BOOL VARwert:=boxyes(w,frage,position);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;wertEND PROCmenuyes;BOOL PROCmenuno(TEXT CONSTfrage,INT CONSTposition):NOTmenuyes(frage,position)END PROCmenuno;TEXT PROCmenuone(THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);TEXT CONSTwert:=boxone(w,thes,t1,t2,mitreinigung);IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;wertEND PROCmenuone;THESAURUS PROCmenusome(THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);THESAURUS CONSTthesaurus:=boxsome(w,thes,t1,t2,mitreinigung);IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;thesaurusEND PROCmenusome;TEXT PROCmenuanswer(TEXT CONSTt,vorgabe,INT CONSTposition):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);TEXT VARwert:=boxanswer(w,t,vorgabe,position);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;wertEND PROCmenuanswer;TEXT PROCmenubasistext(INT CONSTnummer):IFnummer<=20THENfehlermeldung[12]ELIFnummer>menuleiste.menutext.anzahlmenutexteTHENfehlermeldung[11]ELSEmenuleiste.menutext.platz[nummer]FI END PROCmenubasistext;TEXT PROCanwendungstext(INT CONSTnummer):IFnummer>menuleiste.infotext.anzahlinfotexteTHENfehlermeldung[11]ELSEmenuleiste.infotext.stelle[nummer]FI END PROCanwendungstext;PROCzeigemenukennung:END PROCzeigemenukennung;PROCresetdialog:angekoppeltemenutafel:="";anzahloffenermenus:=0END PROCresetdialog;PROCwritemenunotice(TEXT CONSTt,INT CONSTposition):erasemenunotice;boxnotice(menuwindow,t,position,menunotizx,menunotizy,menunotizxsize,menunotizysize);menunotiztext:=t;menunotizposition:=position;menunotizistgesetzt:=TRUE END PROCwritemenunotice;PROCshowmenunotice :IFmenunotizistgesetztTHENboxnotice(menuwindow,menunotiztext,menunotizposition,menunotizx,menunotizy,menunotizxsize,menunotizysize);FI END PROCshowmenunotice;PROCerasemenunotice:INT VARspa,zei;getcursor(spa,zei);IFmenunotizistgesetztTHENpageup(menunotizx,menunotizy,menunotizxsize,menunotizysize);menunotizistgesetzt:=FALSE;cursor(spa,zei)FI END PROCerasemenunotice;PROCinitializemenuwindow:schreibfenster:=window(areax(menuwindow)+1,areay(menuwindow)+3,areaxsize(menuwindow)-2,areaysize(menuwindow)-4)END PROCinitializemenuwindow;PROCshowmenuwindow:initializemenuwindow;show(schreibfenster);END PROCshowmenuwindow;PROCmenuwindowpage:initializemenuwindow;page(schreibfenster)END PROCmenuwindowpage;PROCmenuwindowout(TEXT CONSTtext):out(schreibfenster,text)END PROCmenuwindowout;BOOL PROCmenuwindowyes(TEXT CONSTfrage):yes(schreibfenster,frage)END PROCmenuwindowyes;BOOL PROCmenuwindowno(TEXT CONSTfrage):no(schreibfenster,frage)END PROCmenuwindowno;PROCmenuwindowline:menuwindowline(1)END PROCmenuwindowline;PROCmenuwindowline(INT CONSTanzahl):line(schreibfenster,anzahl)END PROCmenuwindowline;PROCmenuwindowcursor(INT CONSTspa,zei):cursor(schreibfenster,spa,zei)END PROCmenuwindowcursor;PROCgetmenuwindowcursor(INT VARspa,zei):getcursor(schreibfenster,spa,zei)END PROCgetmenuwindowcursor;INT PROCremainingmenuwindowlines:remaininglines(schreibfenster)END PROCremainingmenuwindowlines;TEXT PROCmenuwindowcenter(TEXT CONSTt):center(schreibfenster,t)END PROCmenuwindowcenter;PROCmenuwindowstop:menuwindowstop(2)END PROCmenuwindowstop;PROCmenuwindowstop(INT CONSTanzahl):stop(schreibfenster,anzahl)END PROCmenuwindowstop;WINDOW PROCcurrentmenuwindow:initializemenuwindow;schreibfensterEND PROCcurrentmenuwindow;PROCbereinigesituation:page;forget(ds);resetdialogEND PROCbereinigesituation;PROCwritehead(TEXT CONSTt):INT VARx,y;getcursor(x,y);IFt<>""THENcursor(1,1);out(invers(text(t,77)))END IF;cursor(x,y)END PROCwritehead;PROCrestorehead:TEXT VARkopf:=menuleiste.menu[menuleiste.zeigeraktuell].kopfzeile;writehead(kopf)END PROCrestorehead;.aktuellesuntermenu:aktmenu.einzelmenu[aktmenu.hauptmenuzeiger].aktmenu:menuleiste.menu[menuleiste.zeigeraktuell].aktuellesmenu:menuleiste.menu[menuleiste.zeigeraktuell]END PACKETlsdialog5;