app/schulis-simulationssystem/3.0/src/ls bildschirmeingaben

Raw file
Back to index

1
2
3
4
PACKETlseingabenDEFINESeingabemodellgroessen,gibberechnungsstandzeileaus,warteaufesc,tastelesen,forgetlogischemaske:LETdsname="log bs",headvar=62,headpar=63,headzeit=64,headvonbis=65,headdefbereich=66,anfangszeitpunktbezeichner=69,beobachtungsdauerbezeichner=70,auskberechnungsstand=71,blank=" ",cleop="�",cleol="�",beep="�",down="
",up="",esc="",markon="",markoff="",abbrechen="m",escseq="19m";LETistleer=0,istueberschrift=1,istvariable=2,istparameter=3,istzeit=4;LETbuchsteingabespalte=78,spaltevon=1,ueberschriftsoffset=0,namensoffset=2,eingabenoffset=33,linienoffset=43,modellvonoffset=45,modellbisoffset=60,vonbisoffset=50,zeilenlaenge=79;LETanfangszeile=5,anzahlzeilen=19;LETlaenge=10,fracs=4;LETmaxdimension=42;BOUND STRUCT(INTzeilenanzahl,erstevarzeile,ersteparzeile,erstezeitzeile,ROWmaxdimensionTEXTzeile,ROWmaxdimensionINTzustand,ROWmaxdimensionREALmodellwert,modellvon,modellbis)VARbildschirmmaske;INT VARerstezeile,index;TEXT VARhead,foot;PROCforgetlogischemaske:forget(dsname,quiet)END PROCforgetlogischemaske;PROCinitbildschirmmaske(LOESUNG VARloesung):ZUSTAND VARvariable:=STARTWERTloesung;PARAMETER VARparameter:=PARAMETERSATZloesung;REAL VARanfangszeitpunkt:=STARTZEITloesung,beobachtungsdauer:=DAUERloesung;INT VARzaehler,aktzeile:=1;IFexists(dsname)THENbelegemodellwerteneuELSEerzeugeneuemaskeEND IF.belegemodellwerteneu:bildschirmmaske:=old(dsname);aktzeile:=bildschirmmaske.erstevarzeile+1;FORzaehlerFROM1UPTOdimensionREPbildschirmmaske.modellwert[aktzeile]:=variableSUBzaehler;aktzeileINCR1PER;aktzeile:=bildschirmmaske.ersteparzeile+1;FORzaehlerFROM1UPTOparameteranzahlREPbildschirmmaske.modellwert[aktzeile]:=parameterSUBzaehler;aktzeileINCR1PER;aktzeile:=bildschirmmaske.erstezeitzeile+1;bildschirmmaske.modellwert[aktzeile]:=anfangszeitpunkt;bildschirmmaske.modellwert[aktzeile+1]:=beobachtungsdauer;aenderetexte.aenderetexte:FORzaehlerFROM1UPTObildschirmmaske.zeilenanzahlREP IFbildschirmmaske.zustand[zaehler]>=istvariableTHENmodifizieretext;END IF END REP.modifizieretext:replace(bildschirmmaske.zeile[zaehler],eingabenoffset,wandle(bildschirmmaske.modellwert[zaehler],laenge,fracs)).erzeugeneuemaske:ZUSTAND VARvaruntergrenze:=zustandunteregrenze,varobergrenze:=zustandoberegrenze;PARAMETER VARparuntergrenze:=parameterunteregrenze,parobergrenze:=parameteroberegrenze;REAL VARdaueruntergrenze:=minbeobachtungsdauer,dauerobergrenze:=maxbeobachtungsdauer,anfanguntergrenze:=minanfangszeitpunkt,anfangobergrenze:=maxanfangszeitpunkt;aktzeile:=1;bildschirmmaske:=new(dsname);bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(TRUE,meldungstext(headvar),0.0,0.0,0.0);bildschirmmaske.zustand[aktzeile]:=istueberschrift;bildschirmmaske.erstevarzeile:=aktzeile;aktzeileINCR1;FORzaehlerFROM1UPTOdimensionREPbildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(FALSE,variablenname(zaehler),variableSUBzaehler,varuntergrenzeSUBzaehler,varobergrenzeSUBzaehler);bildschirmmaske.zustand[aktzeile]:=istvariable;bildschirmmaske.modellwert[aktzeile]:=variableSUBzaehler;bildschirmmaske.modellvon[aktzeile]:=varuntergrenzeSUBzaehler;bildschirmmaske.modellbis[aktzeile]:=varobergrenzeSUBzaehler;aktzeileINCR1PER;bildschirmmaske.zeile[aktzeile]:=(linienoffset-ueberschriftsoffset)*blank+senkrecht+cleol;bildschirmmaske.zustand[aktzeile]:=istleer;aktzeileINCR1;bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(TRUE,meldungstext(headpar),0.0,0.0,0.0);bildschirmmaske.zustand[aktzeile]:=istueberschrift;bildschirmmaske.ersteparzeile:=aktzeile;aktzeileINCR1;FORzaehlerFROM1UPTOparameteranzahlREPbildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(FALSE,parametername(zaehler),parameterSUBzaehler,paruntergrenzeSUBzaehler,parobergrenzeSUBzaehler);bildschirmmaske.zustand[aktzeile]:=istparameter;bildschirmmaske.modellwert[aktzeile]:=parameterSUBzaehler;bildschirmmaske.modellvon[aktzeile]:=paruntergrenzeSUBzaehler;bildschirmmaske.modellbis[aktzeile]:=parobergrenzeSUBzaehler;aktzeileINCR1PER;bildschirmmaske.zeile[aktzeile]:=(linienoffset-ueberschriftsoffset)*blank+senkrecht+
cleol;bildschirmmaske.zustand[aktzeile]:=istleer;aktzeileINCR1;bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(TRUE,meldungstext(headzeit),0.0,0.0,0.0);bildschirmmaske.zustand[aktzeile]:=istueberschrift;bildschirmmaske.erstezeitzeile:=aktzeile;aktzeileINCR1;bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(FALSE,meldungstext(anfangszeitpunktbezeichner),anfangszeitpunkt,anfanguntergrenze,anfangobergrenze);bildschirmmaske.zustand[aktzeile]:=istzeit;bildschirmmaske.modellwert[aktzeile]:=anfangszeitpunkt;bildschirmmaske.modellvon[aktzeile]:=anfanguntergrenze;bildschirmmaske.modellbis[aktzeile]:=anfangobergrenze;aktzeileINCR1;bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(FALSE,meldungstext(beobachtungsdauerbezeichner),beobachtungsdauer,daueruntergrenze,dauerobergrenze);bildschirmmaske.zustand[aktzeile]:=istzeit;bildschirmmaske.modellwert[aktzeile]:=beobachtungsdauer;bildschirmmaske.modellvon[aktzeile]:=daueruntergrenze;bildschirmmaske.modellbis[aktzeile]:=dauerobergrenze;bildschirmmaske.zeilenanzahl:=aktzeileEND PROCinitbildschirmmaske;TEXT PROCzeilezusammenstellen(BOOL CONSTistueberschrift,TEXT CONSTname,REAL CONSTwert,min,max):TEXT VARt;IFistueberschriftTHENt:=ueberschriftsoffset*blank;tCATcompress(name);tCAT(linienoffset-LENGTHt)*blank;tCATsenkrecht+cleolELSEt:=namensoffset*blank;tCATcompress(name);tCAT(eingabenoffset-LENGTHt-1)*blank;tCATwandle(wert,laenge,fracs);tCAT(linienoffset-LENGTHt)*blank;tCATsenkrecht;tCAT(modellvonoffset-linienoffset-1)*blank;tCATwandle(min,laenge,fracs);tCAT(modellbisoffset-modellvonoffset-laenge)*blank;tCATwandle(max,laenge,fracs);tCATcleolEND IF;tEND PROCzeilezusammenstellen;PROCbauebildschirmauf:errechneletztezeile;gibzeilenaus;loeschedenbildschirmrest.errechneletztezeile:INT VARletztezeile;letztezeile:=min(bildschirmmaske.zeilenanzahl,erstezeile+anzahlzeilen-1);WHILEbildschirmmaske.zustand[letztezeile]<istvariableREPletztezeileDECR1PER.gibzeilenaus:INT VARi,zeilenposition:=anfangszeile;FORiFROMerstezeileUPTOletztezeileREPcursor(spaltevon,zeilenposition);out(bildschirmmaske.zeile[i]);zeilenpositionINCR1PER.loeschedenbildschirmrest:FORiFROMzeilenpositionUPTOanfangszeile+anzahlzeilen-1REPcursor(spaltevon,i);out(cleol)PER.END PROCbauebildschirmauf;PROCeingabemodellgroessen(LOESUNG VARloesung,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)fkt,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cofkt,TEXT CONSTtextfuerkopfzeile,textfuerfusszeile,TEXT VARtaste,TEXT CONSTzeichenkette,INT VARfehler):initbildschirmmaske(loesung);erstezeile:=1;head:=textfuerkopfzeile;foot:=textfuerfusszeile;gibstdkopfaus;bauebildschirmauf;lasseeingeben(zeichenkette,taste);IFtaste<>abbrechenTHENberechnekurve;END IF;forgetlogischemaske;cursor(1,anfangszeile-3);out(cleop).berechnekurve:gibberechnungsstandzeileaus;speicheremodellwerte(loesung);loesungLOESUNGSABSCHNITTkurve1(PROCfkt,PROCcofkt,STARTWERTloesung,zustandunteregrenze,zustandoberegrenze,STARTZEITloesung,DAUERloesung,PARAMETERSATZloesung,anzahlbeobachtungspunkte,codimension," neue kurve",fehler);loesungDAUER(max(0.0,letztezeit(LOESUNGSABSCHNITTloesung)-(STARTZEITloesung))).END PROCeingabemodellgroessen;PROCgibstdkopfaus:cursor(spaltevon,anfangszeile-3);out(meldungstext(headdefbereich)+cleol);cursor(spaltevon,anfangszeile-2);out((linienoffset-ueberschriftsoffset)*waagerecht+kreuz+(zeilenlaenge-linienoffset-1)*waagerecht);cursor(spaltevon,anfangszeile-1);out((linienoffset-ueberschriftsoffset)*blank+senkrecht+(vonbisoffset-linienoffset-1)*blank+meldungstext(headvonbis)+cleol);footnote(foot)END PROCgibstdkopfaus;PROCcursorup:INT VARi:=index;IFi=2THEN IFerstezeile=1THENout(beep)ELSEerstezeile:=1;bauebildschirmauf;END IF ELSEloeschecursor;REPiDECR1UNTILbildschirmmaske.zustand[i]>=istvariablePER;index:=i;IFi<erstezeileTHENscrollupEND IF;END IF.scrollup:IFbildschirmmaske.zustand[i-1]=istueberschriftTHENerstezeile:=i-1ELSEerstezeile:=iEND IF;bauebildschirmaufEND PROCcursorup;PROCcursordown:INT VARi:=index;IFi=bildschirmmaske.zeilenanzahlTHENout(beep)
ELSEloeschecursor;REPiINCR1UNTILbildschirmmaske.zustand[i]>=istvariablePER;index:=i;IFi>erstezeile+anzahlzeilen-1THENscrolldownEND IF END IF.scrolldown:INT VARoberstezeile:=i-anzahlzeilen+1;WHILEbildschirmmaske.zustand[oberstezeile]=istleerREPoberstezeileINCR1PER;erstezeile:=oberstezeile;bauebildschirmaufEND PROCcursordown;PROCloeschecursor:cursor(spaltevon+eingabenoffset-2,index-erstezeile+anfangszeile);out(wandle(bildschirmmaske.modellwert[index],laenge+1,fracs))END PROCloeschecursor;PROClasseeingeben(TEXT CONSTzeichenkette,TEXT VARendetaste):BOOL VARendegewuenscht:=FALSE;TEXT VAReingabe,allezeichen:="",endestring:=escseq+zeichenkette,exitchar;initallezeichen;bestimmeersteseingabefeld;REPlassefeldeditierenUNTILendegewuenschtPER.initallezeichen:INT VARi;FORiFROM1UPTO255REPallezeichenCATcode(i)PER.bestimmeersteseingabefeld:index:=1;REPindexINCR1;UNTILbildschirmmaske.zustand[index]>=istvariablePER;.lassefeldeditieren:eingabe:=markon+wandle(bildschirmmaske.modellwert[index],laenge,fracs);cursor(spaltevon+eingabenoffset-marksize-1,index-erstezeile+anfangszeile);editget(eingabe,laenge+1,laenge+1,up+down,allezeichen,exitchar);out(markoff);IFeingabeokTHENinterpretiereexitcharELSEfehlermeldungEND IF.fehlermeldung:footnote("Ungültige Eingabe!  Weiter mit Taste");pause;footnote(foot).eingabeok:eingabespeichern(eingabe).interpretiereexitchar:IF(exitcharSUB1)=escTHENinterpretiereescsequenzELIFexitchar=upTHENcursorupELIF NOT(index=bildschirmmaske.zeilenanzahlANDexitchar<>down)THENcursordownEND IF.interpretiereescsequenz:INT VARstelle:=pos(endestring,exitcharSUB2),alteerstezeile;IFstelle>=3THENendegewuenscht:=TRUE;endetaste:=exitcharSUB2ELIFstelle<>0THENalteerstezeile:=erstezeile;loeschecursor;behandleesc1undesc9;ELSEout(beep)END IF.behandleesc1undesc9:IFstelle=1THENindex:=2;erstezeile:=1ELSEindex:=bildschirmmaske.zeilenanzahl;erstezeile:=max(1,bildschirmmaske.zeilenanzahl-anzahlzeilen+1);WHILEbildschirmmaske.zustand[erstezeile]=istleerREPerstezeileINCR1PER END IF;IFerstezeile<>alteerstezeileTHENbauebildschirmaufEND IF END PROClasseeingeben;BOOL PROCeingabespeichern(TEXT CONSTeingabe):TEXT VARohnesteuerzeichen;REAL VARwert;IF(eingabeSUB1)=markonTHENohnesteuerzeichen:=subtext(eingabe,2)ELSEohnesteuerzeichen:=eingabeEND IF;pruefedefbereich;speicherewertab;TRUE.pruefedefbereich:wert:=real(ohnesteuerzeichen);IF NOTlastconversionokTHEN LEAVEeingabespeichernWITH FALSE END IF;IFwert>bildschirmmaske.modellbis[index]ORwert<bildschirmmaske.modellvon[index]THEN LEAVEeingabespeichernWITH FALSE END IF.speicherewertab:bildschirmmaske.modellwert[index]:=wert;replace(bildschirmmaske.zeile[index],eingabenoffset,wandle(wert,laenge,fracs))END PROCeingabespeichern;PROCspeicheremodellwerte(LOESUNG VARloesung):ZUSTAND VARzustand:=neuerzustand(dimension);PARAMETER VARparam:=neuerparameter(parameteranzahl);REAL VARanfangszeitpunkt,beobachtungsdauer;INT VARi;FORiFROM1UPTOdimensionREPreplace(zustand,i,bildschirmmaske.modellwert[i+bildschirmmaske.erstevarzeile])END REP;FORiFROM1UPTOparameteranzahlREPreplace(param,i,bildschirmmaske.modellwert[i+bildschirmmaske.ersteparzeile])END REP;anfangszeitpunkt:=bildschirmmaske.modellwert[bildschirmmaske.erstezeitzeile+1];beobachtungsdauer:=bildschirmmaske.modellwert[bildschirmmaske.erstezeitzeile+2];loesungSTARTWERTzustand;loesungPARAMETERSATZparam;loesungSTARTZEITanfangszeitpunkt;loesungDAUERbeobachtungsdauerEND PROCspeicheremodellwerte;PROCgibberechnungsstandzeileaus:cursor(1,24);out(invers(compress(auskunftstext(auskberechnungsstand))));cursor(40,24);END PROCgibberechnungsstandzeileaus;PROCtastelesen(TEXT VARtaste):warteaufesc;inchar(taste);END PROCtastelesen;PROCwarteaufesc:TEXT VARt:="";cursor(1,24);inchar(t);WHILE NOTescbeginnREPout(beep);inchar(t)PER;cursor(buchsteingabespalte,24).escbeginn:t=esc.END PROCwarteaufesc;END PACKETlseingaben;