app/schulis-simulationssystem/3.0/src/op2

Raw file
Back to index

PACKETobjektrepraesentation2DEFINESvariableeditieren,parametereditieren,formeleditieren,termistkorrekt,listeallerbezeichner,boxvorhanden:LETzeitnichtalsvariable=520,leerebezeichnerlisteteil1=532,leerebezeichnerlisteteil2=533,leerebezeichnerlisteteil3=534,nurdieseelannamen=551,quithinweis=519,singularmodellgroesse=511,singularergebnis=512,singularparameter=513,singularformel=514,pluralformel=538,listedernamen=536,nochkeinenamenvergeben=537,tabellenkopf1=543,tabellenkopf2=550,tabellenkopf3=545,tabellenrumpf=546,tabellenfuss=547,hinweisleerername=523,hinweissyntaxfehler=524,hinweisdoppeltername=525,hinweislangername=526,hinweisformalerfehler=527,standardhinweis=528,hinweisfalscheranfang=529,ueberschriftfuervariable=530,ueberschriftfuerergaenzungsvariable=531,hinweisleererausdruck=539;LETlang=3,elan=4,kurz=5,aus=5,maxi=20,maxj=10,maxlink=8,maxlaengefuerdo=2000,hoch="�",runter="
",return="
",blank=" ",underscore="_",stern="*",info="?",pruefen="p",halt="v",zurueck="z",vtag=9,ptag=10,ftag=11,laengefuerformeln=300,laengefuernamen=30,laengefuerkurznamen=7,realvar="REAL VAR ",tag=1,delimiter=6;ROW100TEXT VARfeld;INT VARi;FORiFROM1UPTO100REPfeld(i):=""PER;ROWmaxlinkTEXT VARname;TEXT VARtaste;INT VARfeldnummer;BOOL VARboxaufgebaut:=FALSE;BOOL PROCboxvorhanden:boxaufgebautEND PROCboxvorhanden;PROCvariableeditieren(CELL CONSTactualcell,BOOL VARgespeichert,INT VARfehlercode,TEXT VARfehlermeldung):enablestop;TEXT VARzwischenspeicher:="",zwischenspeicherl:="",zwischenspeichere:="",zwischenspeicherk:="";taste:="";boxaufgebaut:=FALSE;BOOL VARlangnameok,elannameok,kurznameok;OBJEKT VARaktuellesobjekt:=objekt(actualcell);MPOS CONSTmp:=mpos(actualcell);gespeichert:=FALSE;pruefedentyp;baueboxumeingabefelderauf;repeatwechslezwischendeneingabefeldern;raeumebildschirmauf.pruefedentyp:.baueboxumeingabefelderauf:WINDOW VAReingabefenster:=window(6,3,32,8);TAG VARvariablentag:=formular(vtag);show(variablentag);outframe(eingabefenster);feld(2):=anwendungstext(ueberschrift);put(variablentag,feld(2),2);zeigealleeingabefelder;doublefootnote(anwendungstext(standardhinweis));setzecursoraufersteseingabefeld.ueberschrift:IFtyp(aktuellesobjekt)=variableTHENueberschriftfuervariableELSEueberschriftfuerergaenzungsvariableFI.zeigealleeingabefelder:belegefeld(langname(aktuellesobjekt),feld(lang),zwischenspeicherl,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerelannamen,feld(elan),zwischenspeichere,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerkurznamen,feld(kurz),zwischenspeicherk,laengefuerkurznamen);langnameok:=(length(langname(aktuellesobjekt))>0);elannameok:=(length(elanname(aktuellesobjekt))>0);kurznameok:=(length(kurzname(aktuellesobjekt))>0);BOOL VARersteeingabefuerkurznamen:=TRUE,ersteeingabefuerelannamen:=TRUE;put(variablentag,feld);.vorschlagoderletzteeingabefuerelannamen:elanname(aktuellesobjekt).vorschlagoderletzteeingabefuerkurznamen:kurzname(aktuellesobjekt).setzecursoraufersteseingabefeld:feldnummer:=lang;get(variablentag,feld(feldnummer),feldnummer,taste).repeatwechslezwischendeneingabefeldern:REP IFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=pruefenANDpruefenunsinnigTHENmeldeleerenausdruck(fehlercode)FI;wechslezwischendeneingabefeldernPER.pruefenunsinnig:NOTboxaufgebautANDfeld(lang)="".wechslezwischendeneingabefeldern:boxaufgebaut:=TRUE;SELECTfeldnummerOF CASElang:pruefelangnameCASEelan:pruefeelannameCASEkurz:pruefekurznameEND SELECT;behandletaste;gibggfstandardhinweisaus;gibggfvorgabefuerelannamenundkurznamen;putget(variablentag,feld(feldnummer),feldnummer,taste);.gibggfstandardhinweisaus:IFeingabenohnefehlundtadelTHENdoublefootnote(anwendungstext(standardhinweis));FI.gibggfvorgabefuerelannamenundkurznamen:IFkurznamebisherleerTHENersteeingabefuerkurznamen:=FALSE;belegefeld(letzteeingabefuerlangnamen,feld(kurz),zwischenspeicherk,laengefuerkurznamen);ELIFelannamebisherleerTHENersteeingabefuerelannamen:=FALSE;belegefeld(elanname(letzteeingabefuerlangnamen),feld(elan),zwischenspeichere,laengefuernamen);FI.
kurznamebisherleer:ersteeingabefuerkurznamenAND(NOTkurznameok)ANDfeldnummer=kurz.elannamebisherleer:ersteeingabefuerelannamenAND(NOTelannameok)ANDfeldnummer=elan.letzteeingabefuerlangnamen:bereinigt(zwischenspeicherl).pruefelangname:IFlangnamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(lang));langnameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFlangnamegleichzeitTHENmeldezeitunzulaessig(fehlercode,fehlermeldung)ELIFlangnamezulangTHENmeldezulangennamen(fehlercode)ELIFlangnamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELSElangnameok:=TRUE;zwischenspeicherl:=feld(lang);vsetzeneuenfeldindexFI ELSEvsetzeneuenfeldindexFI.langnamemussgeprueftwerden:(zwischenspeicherl<>feld(lang))ORlangnamegleichzeitOR((zwischenspeicherl=feld(lang))AND NOTlangnameok).langnamegleichzeit:TEXT VARx:=zwischenspeicher;changeall(x," ","");(((xSUB1)="z")COR((xSUB1)="Z"))CAND(((xSUB2)="e")COR((xSUB2)="E"))CAND(((xSUB3)="i")COR((xSUB3)="I"))CAND(((xSUB4)="t")COR((xSUB4)="T"))AND(length(x)=4).pruefeelanname:IFelannamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(elan));elannameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFelannamemitfalschemanfangTHENmeldefalschenanfang(fehlercode)ELIFelannamemitfalschenzeichenTHENmeldeformalenfehler(fehlercode)ELIFelannamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELIFeingabeentsprichtnichtelannotationTHENmeldesyntaxverletzung(fehlercode,fehlermeldung)ELSEelannameok:=TRUE;zwischenspeichere:=feld(elan);vsetzeneuenfeldindexFI ELSEvsetzeneuenfeldindexFI.elannamemussgeprueftwerden:(zwischenspeichere<>feld(elan))OR((zwischenspeichere=feld(elan))AND NOTelannameok).pruefekurzname:IFkurznamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(kurz));kurznameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFkurznamezulangTHENmeldezulangennamen(fehlercode)ELIFkurznamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELSEzwischenspeicherk:=feld(kurz);kurznameok:=TRUE;vsetzeneuenfeldindexFI ELSEvsetzeneuenfeldindexFI.kurznamemussgeprueftwerden:(zwischenspeicherk<>feld(kurz))OR((zwischenspeicherk=feld(kurz))AND NOTkurznameok).behandletaste:IFtaste=pruefenANDeingabenohnefehlundtadelTHENschreibeeditiertesobjektzurueck;LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=infoTHENgibeditierhilfeFI.eingabenohnefehlundtadel:langnameokANDelannameokANDkurznameok.schreibeeditiertesobjektzurueck:zwischenspeichere:=bereinigt(zwischenspeichere);changeall(zwischenspeichere," ","");IFzwischenspeichere<>elanname(aktuellesobjekt)ANDelanname(aktuellesobjekt)<>""THENfuehrenamensaenderunginallenabhaengigenformelnaus(actualcell,zwischenspeichere)FI;IFtyp(aktuellesobjekt)=variableTHENvariablenname(aktuellesobjekt,bereinigt(zwischenspeicherl),bereinigt(zwischenspeicherk),zwischenspeichere);ELSEergaenzungsvariablenname(aktuellesobjekt,bereinigt(zwischenspeicherl),bereinigt(zwischenspeicherk),zwischenspeichere);FI;gespeichert:=TRUE;aktuellesobjektWRITEmp.nameleer:zwischenspeicher="".langnamenichteindeutig:NOTlangnameeindeutig(zwischenspeicher,mpos(actualcell)).elannamenichteindeutig:NOTelannameeindeutig(zwischenspeicher,mpos(actualcell)).elannamemitfalschemanfang:NOTimkleinenalphabet(zwischenspeicherSUB1).elannamemitfalschenzeichen:NOTelannamealphabetisch(zwischenspeicher).eingabeentsprichtnichtelannotation:fehlermeldung:="";NOTelannameistelanbezeichner(zwischenspeicher,fehlermeldung).kurznamenichteindeutig:NOTkurznameeindeutig(zwischenspeicher,mpos(actualcell)).langnamezulang:length(zwischenspeicher)>laengefuernamen.kurznamezulang:length(zwischenspeicher)>laengefuerkurznamen.raeumebildschirmauf:bsspeicherlesen(eingabefenster);raeumeeditierhilfeweg.END PROCvariableeditieren;PROCvsetzeneuenfeldindex:IFtaste=hochTHENfeldnummerDECR1ELIFtaste=runterORtaste=returnTHENfeldnummerINCR1FI;IFfeldnummer<langTHENfeldnummer:=kurzELIFfeldnummer>kurzTHENfeldnummer:=langFI END PROCvsetzeneuenfeldindex;PROCformeleditieren(CELL CONSTactualcell,BOOL VAR
gespeichert,INT VARfehlercode,TEXT VARfehlermeldung):enablestop;TEXT VARzwischenspeicher:="",zwischenspeicherl:="",zwischenspeichere:="",zwischenspeicherf:="";taste:="";BOOL VARlangnameok,elannameok,formelok;OBJEKT VARaktuellesobjekt:=objekt(actualcell);MPOS CONSTmp:=mpos(actualcell);gespeichert:=FALSE;pruefedentyp;baueboxumeingabefelderauf;repeatwechslezwischendeneingabefeldern;raeumebildschirmauf.pruefedentyp:.baueboxumeingabefelderauf:WINDOW VAReingabefenster:=window(6,3,32,8);TAG VARformeltag:=formular(ftag);show(formeltag);outframe(eingabefenster);zulaessigebezeichnerzeigen;zeigealleeingabefelder;doublefootnote(anwendungstext(standardhinweis));setzecursoraufersteseingabefeld.zulaessigebezeichnerzeigen:INT VARi,k:=0,j:=0;TEXT VARzw:="";WINDOW VARbezeichnerfenster:=window(40,3,36,8);outframe(bezeichnerfenster);page(bezeichnerfenster);FORiFROM1UPTOmaxlinkREP IF(actualcellEINGANGi)THENzw:=compress(elanname(objekt(actualcellUEBERi)));name(i):=zw;changeall(name(i)," ","");IFname(i)<>""AND(NOTschondagewesen)THENschreibeggfueberschrift;out(bezeichnerfenster,ausgabevonzw);line(bezeichnerfenster)FI;kINCR1ELSEname(i):=""FI PER;IFkeinbezeichnervorhandenTHENputline(bezeichnerfenster,anwendungstext(leerebezeichnerlisteteil1));putline(bezeichnerfenster,anwendungstext(leerebezeichnerlisteteil2));putline(bezeichnerfenster,anwendungstext(leerebezeichnerlisteteil3))FI.schreibeggfueberschrift:IFersterbezeichnerTHENout(bezeichnerfenster,ueberschrift)FI.ersterbezeichner:k=0.keinbezeichnervorhanden:k=0.ueberschrift:center(bezeichnerfenster,invers(anwendungstext(nurdieseelannamen))).ausgabevonzw:IFlength(zw)>30THENsubtext(zw,1,30)+sternELSEzwFI.schondagewesen:FORjFROM1UPTOi-1REP IFname(j)=name(i)THEN LEAVEschondagewesenWITH TRUE FI PER;FALSE.zeigealleeingabefelder:belegefeld(langname(aktuellesobjekt),feld(lang),zwischenspeicherl,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerelannamen,feld(elan),zwischenspeichere,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerausdruck,feld(aus),zwischenspeicherf,max(laengefuerformeln,length(feld(aus))));langnameok:=(length(langname(aktuellesobjekt))>0);elannameok:=(length(elanname(aktuellesobjekt))>0);formelok:=arithmetischerausdruckistkorrekt(actualcell,bereinigt(zwischenspeicherf),fehlermeldung);BOOL VARersteeingabefuerelannamen:=TRUE;put(formeltag,feld);.vorschlagoderletzteeingabefuerelannamen:elanname(aktuellesobjekt).vorschlagoderletzteeingabefuerausdruck:BOOL VARfeldfuerausdruckgesperrt:=FALSE;IFausdruck(aktuellesobjekt)=""THENfeldfuerausdruckgesperrt:=TRUE;"0.0"ELSEausdruck(aktuellesobjekt)FI.setzecursoraufersteseingabefeld:IF NOTformelokTHENmeldesyntaxverletzung(fehlercode,fehlermeldung);feldnummer:=ausELSEfeldnummer:=langFI;get(formeltag,feld(feldnummer),feldnummer,taste).repeatwechslezwischendeneingabefeldern:REP IFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernFI;wechslezwischendeneingabefeldernPER.wechslezwischendeneingabefeldern:boxaufgebaut:=TRUE;SELECTfeldnummerOF CASElang:pruefelangnameCASEelan:pruefeelannameCASEaus:pruefeausdruckEND SELECT;behandletaste;gibggfstandardhinweisaus;gibggfvorgabefuerelannamen;putget(formeltag,feld(feldnummer),feldnummer,taste);.gibggfstandardhinweisaus:IFeingabenohnefehlundtadelTHENdoublefootnote(anwendungstext(standardhinweis))FI.gibggfvorgabefuerelannamen:IFelannamebisherleerTHENersteeingabefuerelannamen:=FALSE;belegefeld(elanname(letzteeingabefuerlangnamen),feld(elan),zwischenspeichere,laengefuernamen);FI.elannamebisherleer:ersteeingabefuerelannamenAND(NOTelannameok)ANDfeldnummer=elan.letzteeingabefuerlangnamen:bereinigt(zwischenspeicherl).pruefelangname:IFlangnamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(lang));langnameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFlangnamezulangTHENmeldezulangennamen(fehlercode)ELIFlangnamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELSElangnameok:=TRUE;zwischenspeicherl:=feld(lang);fsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI ELSEfsetzeneuenfeldindex(
feldfuerausdruckgesperrt)FI.langnamemussgeprueftwerden:(zwischenspeicherl<>feld(lang))OR((zwischenspeicherl=feld(lang))AND NOTlangnameok).pruefeelanname:IFelannamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(elan));elannameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFelannamemitfalschemanfangTHENmeldefalschenanfang(fehlercode)ELIFelannamemitfalschenzeichenTHENmeldeformalenfehler(fehlercode)ELIFelannamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELIFeingabeentsprichtnichtelannotationTHENmeldesyntaxverletzung(fehlercode,fehlermeldung)ELSEelannameok:=TRUE;zwischenspeichere:=feld(elan);fsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI ELSEfsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI.elannamemussgeprueftwerden:(zwischenspeichere<>feld(elan))OR((zwischenspeichere=feld(elan))AND NOTelannameok).pruefeausdruck:IFausdruckmussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(aus));formelok:=FALSE;IFausdruckleerTHENmeldeleerenausdruck(fehlercode)ELIFcompilermeldetfehlerTHENmeldesyntaxverletzung(fehlercode,fehlermeldung)ELSEzwischenspeicherf:=feld(aus);formelok:=TRUE;fsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI ELSEfsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI.ausdruckmussgeprueftwerden:(zwischenspeicherf<>feld(aus))OR((zwischenspeicherf=feld(aus))AND NOTformelok).behandletaste:IFtaste=pruefenANDeingabenohnefehlundtadelTHENschreibeeditiertesobjektzurueck;LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=infoTHENgibeditierhilfeFI.eingabenohnefehlundtadel:(langnameokANDelannameokANDformelok)OR(feldfuerausdruckgesperrtANDlangnameokANDelannameok).schreibeeditiertesobjektzurueck:zwischenspeichere:=bereinigt(zwischenspeichere);changeall(zwischenspeichere," ","");IFzwischenspeichere<>elanname(aktuellesobjekt)ANDelanname(aktuellesobjekt)<>""THENfuehrenamensaenderunginallenabhaengigenformelnaus(actualcell,zwischenspeichere)FI;formelname(aktuellesobjekt,bereinigt(zwischenspeicherl),zwischenspeichere,bereinigt(zwischenspeicherf));gespeichert:=TRUE;aktuellesobjektWRITEmp.ausdruckleer:zwischenspeicher="".nameleer:zwischenspeicher="".langnamenichteindeutig:NOTlangnameeindeutig(zwischenspeicher,mpos(actualcell)).elannamenichteindeutig:NOTelannameeindeutig(zwischenspeicher,mpos(actualcell)).elannamemitfalschemanfang:NOTimkleinenalphabet(zwischenspeicherSUB1).elannamemitfalschenzeichen:NOTelannamealphabetisch(zwischenspeicher).eingabeentsprichtnichtelannotation:fehlermeldung:="";NOTelannameistelanbezeichner(zwischenspeicher,fehlermeldung).compilermeldetfehler:fehlermeldung:="";NOTarithmetischerausdruckistkorrekt(actualcell,zwischenspeicher,fehlermeldung).langnamezulang:length(zwischenspeicher)>laengefuernamen.raeumebildschirmauf:bsspeicherlesen(eingabefenster);bsspeicherlesen(bezeichnerfenster);raeumeeditierhilfeweg.END PROCformeleditieren;PROCfsetzeneuenfeldindex(BOOL CONSTfeldfuerausdruckgesperrt):IFtaste=hochTHENfeldnummerDECR1ELIFtaste=runterORtaste=returnTHENfeldnummerINCR1FI;IFfeldfuerausdruckgesperrtTHEN IFfeldnummer<langTHENfeldnummer:=elanELIFfeldnummer>elanTHENfeldnummer:=langFI ELSE IFfeldnummer<langTHENfeldnummer:=ausELIFfeldnummer>ausTHENfeldnummer:=langFI FI END PROCfsetzeneuenfeldindex;PROCparametereditieren(CELL CONSTactualcell,BOOL VARgespeichert,INT VARfehlercode,TEXT VARfehlermeldung):enablestop;TEXT VARzwischenspeicher:="",zwischenspeicherl:="",zwischenspeichere:="";taste:="";BOOL VARlangnameok,elannameok;OBJEKT VARaktuellesobjekt:=objekt(actualcell);MPOS CONSTmp:=mpos(actualcell);gespeichert:=FALSE;pruefedentyp;baueboxumeingabefelderauf;repeatwechslezwischendeneingabefeldern;raeumebildschirmauf.pruefedentyp:.baueboxumeingabefelderauf:WINDOW VAReingabefenster:=window(6,3,32,6);TAG VARvariablentag:=formular(ptag);show(variablentag);outframe(eingabefenster);zeigealleeingabefelder;doublefootnote(anwendungstext(standardhinweis));setzecursoraufersteseingabefeld.zeigealleeingabefelder:belegefeld(langname(aktuellesobjekt),feld(lang),
zwischenspeicherl,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerelannamen,feld(elan),zwischenspeichere,laengefuernamen);langnameok:=(length(langname(aktuellesobjekt))>0);elannameok:=(length(elanname(aktuellesobjekt))>0);BOOL VARersteeingabefuerelannamen:=TRUE;put(variablentag,feld);.vorschlagoderletzteeingabefuerelannamen:elanname(aktuellesobjekt).setzecursoraufersteseingabefeld:feldnummer:=lang;get(variablentag,feld(feldnummer),feldnummer,taste).repeatwechslezwischendeneingabefeldern:REP IFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernFI;wechslezwischendeneingabefeldernPER.wechslezwischendeneingabefeldern:boxaufgebaut:=TRUE;SELECTfeldnummerOF CASElang:pruefelangnameCASEelan:pruefeelannameEND SELECT;behandletaste;gibggfstandardhinweisaus;gibggfvorgabefuerelannamen;putget(variablentag,feld(feldnummer),feldnummer,taste);.gibggfstandardhinweisaus:IFeingabenohnefehlundtadelTHENdoublefootnote(anwendungstext(standardhinweis))FI.gibggfvorgabefuerelannamen:IFelannamebisherleerTHENersteeingabefuerelannamen:=FALSE;belegefeld(elanname(letzteeingabefuerlangnamen),feld(elan),zwischenspeichere,laengefuernamen);FI.elannamebisherleer:ersteeingabefuerelannamenAND(NOTelannameok)ANDfeldnummer=elan.letzteeingabefuerlangnamen:bereinigt(zwischenspeicherl).pruefelangname:IFlangnamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(lang));langnameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFlangnamezulangTHENmeldezulangennamen(fehlercode)ELIFlangnamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELSElangnameok:=TRUE;zwischenspeicherl:=feld(lang);psetzeneuenfeldindexFI ELSEpsetzeneuenfeldindexFI.langnamemussgeprueftwerden:(zwischenspeicherl<>feld(lang))OR((zwischenspeicherl=feld(lang))AND NOTlangnameok).pruefeelanname:IFelannamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(elan));elannameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFelannamemitfalschemanfangTHENmeldefalschenanfang(fehlercode)ELIFelannamemitfalschenzeichenTHENmeldeformalenfehler(fehlercode)ELIFelannamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELIFeingabeentsprichtnichtelannotationTHENmeldesyntaxverletzung(fehlercode,fehlermeldung)ELSEelannameok:=TRUE;zwischenspeichere:=feld(elan);psetzeneuenfeldindexFI ELSEpsetzeneuenfeldindexFI.elannamemussgeprueftwerden:(zwischenspeichere<>feld(elan))OR((zwischenspeichere=feld(elan))AND NOTelannameok).behandletaste:IFtaste=pruefenANDeingabenohnefehlundtadelTHENschreibeeditiertesobjektzurueck;LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=infoTHENgibeditierhilfeFI.eingabenohnefehlundtadel:langnameokANDelannameok.schreibeeditiertesobjektzurueck:zwischenspeichere:=bereinigt(zwischenspeichere);changeall(zwischenspeichere," ","");IFzwischenspeichere<>elanname(aktuellesobjekt)ANDelanname(aktuellesobjekt)<>""THENfuehrenamensaenderunginallenabhaengigenformelnaus(actualcell,zwischenspeichere)FI;parametername(aktuellesobjekt,bereinigt(zwischenspeicherl),zwischenspeichere);gespeichert:=TRUE;aktuellesobjektWRITEmp.nameleer:zwischenspeicher="".langnamenichteindeutig:NOTlangnameeindeutig(zwischenspeicher,mpos(actualcell)).elannamenichteindeutig:NOTelannameeindeutig(zwischenspeicher,mpos(actualcell)).elannamemitfalschemanfang:NOTimkleinenalphabet(zwischenspeicherSUB1).elannamemitfalschenzeichen:NOTelannamealphabetisch(zwischenspeicher).eingabeentsprichtnichtelannotation:fehlermeldung:="";NOTelannameistelanbezeichner(zwischenspeicher,fehlermeldung).langnamezulang:length(zwischenspeicher)>laengefuernamen.raeumebildschirmauf:bsspeicherlesen(eingabefenster);raeumeeditierhilfeweg.END PROCparametereditieren;PROCpsetzeneuenfeldindex:IFtaste=hochTHENfeldnummerDECR1ELIFtaste=runterORtaste=returnTHENfeldnummerINCR1FI;IFfeldnummer<langTHENfeldnummer:=elanELIFfeldnummer>elanTHENfeldnummer:=langFI END PROCpsetzeneuenfeldindex;TEXT PROCtextfuereingabefeld(TEXT CONSTfeld,INT CONSTlaenge):TEXT VARergebnis:=text(feld,laenge);changeall(ergebnis," ",
"_");ergebnisEND PROCtextfuereingabefeld;TEXT PROCbereinigt(TEXT CONSTfeld):TEXT VARergebnis:=feld;changeall(ergebnis,underscore,blank);compress(ergebnis)END PROCbereinigt;PROCbelegefeld(TEXT CONSToriginal,TEXT VARfuerfeld,fuerzwischenspeicher,INT CONSTlaenge):fuerfeld:=textfuereingabefeld(original,laenge);fuerzwischenspeicher:=fuerfeld;END PROCbelegefeld;BOOL PROCelannamealphabetisch(TEXT CONSTname):INT VARi;IFersterbuchstabenichtimkleinenalphabetTHEN FALSE ELSE FORiFROM1UPTOlength(name)REP IFiteszeichennichtimkleinenalphabetodernumerischoderblankTHEN LEAVEelannamealphabetischWITH FALSE FI PER;TRUE FI.ersterbuchstabenichtimkleinenalphabet:NOTimkleinenalphabet(nameSUB1).iteszeichennichtimkleinenalphabetodernumerischoderblank:NOT(imkleinenalphabet(nameSUBi)ORnumerisch(nameSUBi)ORblank=(nameSUBi)).END PROCelannamealphabetisch;TEXT PROCelanname(TEXT CONSTname):INT VARi;TEXT VARneuername:="";FORiFROM1UPTOlength(name)REP IFiteszeichenimgrossenalphabetTHENneuernameCATcode(code(nameSUBi)+32)ELIFiteszeichenimkleinenalphabetodernumerischTHENneuernameCAT(nameSUBi)ELIFiteszeichenszTHENneuernameCAT"ss"FI PER;neuername.iteszeichenimgrossenalphabet:imgrossenalphabet(nameSUBi).iteszeichenimkleinenalphabetodernumerisch:imkleinenalphabet(nameSUBi)ORnumerisch(nameSUBi).iteszeichensz:(nameSUBi)="ß".END PROCelanname;BOOL PROCimgrossenalphabet(TEXT CONSTc):(code("A")<=code(c)ANDcode(c)<=code("Z"))ORpos("ÄÖÜ",c)>0END PROCimgrossenalphabet;BOOL PROCimkleinenalphabet(TEXT CONSTc):(code("a")<=code(c)ANDcode(c)<=code("z"))ORpos("äöü",c)>0END PROCimkleinenalphabet;BOOL PROCnumerisch(TEXT CONSTc):(code("0")<=code(c)ANDcode(c)<=code("9"))END PROCnumerisch;BOOL PROClangnameeindeutig(TEXT CONSTbezeichner,MPOS CONSTmp):INT VARimp:=impos(mp),jmp:=jmpos(mp),i,j;FORiFROM1UPTOmaxiREP FORjFROM1UPTOmaxjREP IFpositionbelegtCANDijnichtaktuellepositionTHEN IFlangname(objekt(cell(i,j)))=bezeichnerTHEN LEAVElangnameeindeutigWITH FALSE FI FI PER PER;TRUE.ijnichtaktuelleposition:NOT(i=impANDj=jmp).positionbelegt:belegt(cell(i,j)).END PROClangnameeindeutig;BOOL PROCelannameeindeutig(TEXT CONSTbezeichner,MPOS CONSTmp):INT VARimp:=impos(mp),jmp:=jmpos(mp),i,j;FORiFROM1UPTOmaxiREP FORjFROM1UPTOmaxjREP IFpositionbelegtANDijnichtaktuellepositionTHEN IFelanname(objekt(cell(i,j)))=bezeichnerTHEN LEAVEelannameeindeutigWITH FALSE FI FI PER PER;TRUE.ijnichtaktuelleposition:NOT(i=impANDj=jmp).positionbelegt:belegt(cell(i,j)).END PROCelannameeindeutig;BOOL PROCkurznameeindeutig(TEXT CONSTbezeichner,MPOS CONSTmp):INT VARimp:=impos(mp),jmp:=jmpos(mp),i,j;FORiFROM1UPTOmaxiREP FORjFROM1UPTOmaxjREP IFpositionbelegtANDijnichtaktuellepositionTHEN IFkurzname(objekt(cell(i,j)))=bezeichnerTHEN LEAVEkurznameeindeutigWITH FALSE FI FI PER PER;TRUE.ijnichtaktuelleposition:NOT(i=impANDj=jmp).positionbelegt:CELL CONSTc:=cell(i,j);belegt(c)AND NOT(typ(objekt(c))=parameter).END PROCkurznameeindeutig;BOOL PROCelannameistelanbezeichner(TEXT CONSTzwischenspeicher,TEXT VARfehlermeldung):TEXT CONSTvariablendefinition:=realvar+zwischenspeicher+";";ergebnisdescompilers(variablendefinition,fehlermeldung)END PROCelannameistelanbezeichner;BOOL PROCergebnisdescompilers(TEXT CONSTausdruck,TEXT VARfehlermeldung):BOOL VARfehler;fehlermeldung:="";IFausdruckzulangTHEN TRUE ELSEdisablestop;do(ausdruck);fehler:=iserror;IFiserrorTHENclearerror;enablestop;fehlermeldung:=errormessageELSEenablestopFI;NOTfehlerFI.ausdruckzulang:length(ausdruck)>maxlaengefuerdo.END PROCergebnisdescompilers;BOOL PROCarithmetischerausdruckistkorrekt(CELL CONSTactualcell,TEXT CONSTeingabe,TEXT VARfehlermeldung):TEXT CONSTrefinementname:="abcdefghijklmnopqrstuvwxyz0123456789";INT VARi,j;erstertestmitlokalenbezeichnern;zweitertestmitallenbezeichnern;TRUE.erstertestmitlokalenbezeichnern:kleinevariablenlistezusammenstellen;variablenlistemiteingabeverknuepfen;ausdruckpruefen.zweitertestmitallenbezeichnern:grossevariablenlistezusammenstellen;variablenlistemiteingabeverknuepfen;ausdruckpruefen.kleinevariablenlistezusammenstellen:TEXT VARausdruck:="";
FORiFROM1UPTOmaxlinkREP IFname(i)<>""CAND(NOTschondagewesen)THENausdruckCAT(realvar+name(i)+";")FI PER.grossevariablenlistezusammenstellen:ausdruck:=listeallerbezeichner(mpos(actualcell)).schondagewesen:FORjFROM1UPTOi-1REP IFname(j)=name(i)THEN LEAVEschondagewesenWITH TRUE FI PER;FALSE.variablenlistemiteingabeverknuepfen:ausdruckCAT("REAL "+procname+":"+refinementname+"."+refinementname+":"+eingabe+"END "+procname).procname:"PROC proc "+refinementname.ausdruckpruefen:IF NOTergebnisdescompilers(ausdruck,fehlermeldung)THEN LEAVEarithmetischerausdruckistkorrektWITH FALSE FI.END PROCarithmetischerausdruckistkorrekt;BOOL PROCtermistkorrekt(CELL CONSTactualcell,TEXT CONSTeingabe,liste,TEXT VARfehlermeldung):INT VARi,j;TEXT CONSTrefinementname:="abcdefghijklmnopqrstuvwxyz0123456789";erstertestmitlokalenbezeichnern;zweitertestmitallenbezeichnern;TRUE.erstertestmitlokalenbezeichnern:kleinevariablenlistezusammenstellen;variablenlistemiteingabeverknuepfen;ausdruckpruefen.zweitertestmitallenbezeichnern:grossevariablenlistezusammenstellen;variablenlistemiteingabeverknuepfen;ausdruckpruefen.kleinevariablenlistezusammenstellen:zulaessigebezeichnerzusammenstellen(actualcell);TEXT VARausdruck:="";FORiFROM1UPTOmaxlinkREP IFname(i)<>""CAND(NOTschondagewesen)THENausdruckCAT(realvar+name(i)+";")FI PER.grossevariablenlistezusammenstellen:ausdruck:=liste.schondagewesen:FORjFROM1UPTOi-1REP IFname(j)=name(i)THEN LEAVEschondagewesenWITH TRUE FI PER;FALSE.variablenlistemiteingabeverknuepfen:ausdruckCAT("REAL "+procname+":"+refinementname+"."+refinementname+":"+eingabe+"END "+procname).procname:"PROC proc "+refinementname.ausdruckpruefen:IF NOTergebnisdescompilers(ausdruck,fehlermeldung)THEN LEAVEtermistkorrektWITH FALSE FI.END PROCtermistkorrekt;PROCzulaessigebezeichnerzusammenstellen(CELL CONSTactualcell):INT VARi;FORiFROM1UPTOmaxlinkREP IF(actualcellEINGANGi)THENname(i):=compress(elanname(objekt(actualcellUEBERi)));changeall(name(i)," ","");ELSEname(i):=""FI PER END PROCzulaessigebezeichnerzusammenstellen;PROCfuehrenamensaenderunginallenabhaengigenformelnaus(CELL CONSTactualcell,TEXT CONSTneuername):OBJEKT CONSTaktuellesobjekt:=objekt(actualcell);INT VARi;FORiFROM1UPTOmaxlinkREP IFiterpfeilweistaufformelTHENaendereelannameninnachbarformelFI PER.iterpfeilweistaufformel:(actualcellAUSGANGi)AND(typ(objekt(actualcellUEBERi))=formel).aendereelannameninnachbarformel:TEXT CONSTaltername:=elanname(aktuellesobjekt);MPOS CONSTzielposition:=(actualcellUEBERi);OBJEKT VARzielformel:=objekt(zielposition);TEXT CONSTterm:=ausdruck(zielformel);TEXT VARneuerterm:="";scanneterminzielformel;schreibeneuentermzurueck.scanneterminzielformel:TEXT VARsymbol:="";INT VARtype:=0,lasttype:=0;scan(term);nextsymbol(symbol,type);WHILE NOTendeerreichtREPverarbeitesymbol;nextsymbol(symbol,type)PER.endeerreicht:type>delimiter.verarbeitesymbol:SELECTtypeOF CASEtag:neuertermCAT(ggfneuername+" ")CASEdelimiter:verarbeitedelimiterOTHERWISEneuertermCAT(symbol+" ")ENDSELECT;lasttype:=type.ggfneuername:IFsymbol=alternameTHENneuernameELSEsymbolFI.verarbeitedelimiter:IFletzteszeichenimneuentermblankAND(lasttype=delimiterORsymbol=")")THENneuerterm:=subtext(neuerterm,1,length(neuerterm)-1)FI;neuertermCATsymbol.letzteszeichenimneuentermblank:(neuertermSUBlength(neuerterm))=" ".schreibeneuentermzurueck:formelname(zielformel,namederformel,elannamederformel,neuerterm);zielformelWRITEzielposition.namederformel:langname(zielformel).elannamederformel:elanname(zielformel).END PROCfuehrenamensaenderunginallenabhaengigenformelnaus;TEXT PROClisteallerbezeichner(MPOS CONSTmp):TEXT VARdeklarationen:=realvar+"zeit";variablenanhaengen;ergebnisseanhaengen;parameteranhaengen;formelnanhaengen;listeabschliessen.variablenanhaengen:deklarationenCATteilliste(variablenthesaurus).ergebnisseanhaengen:deklarationenCATteilliste(ergebnisthesaurus).parameteranhaengen:deklarationenCATteilliste(parameterthesaurus).formelnanhaengen:deklarationenCATteilliste(formelthesaurus,mp).listeabschliessen:deklarationenCAT";";deklarationen.
END PROClisteallerbezeichner;TEXT PROCteilliste(THESAURUS CONSTpositionen):INT VARi:=0;MPOS VARmp;TEXT VARliste:="";WHILEi<highestentry(positionen)REPgetmpos(positionen,mp,i);listeCAT(","+elanname(objekt(mp)))PER;listeEND PROCteilliste;TEXT PROCteilliste(THESAURUS CONSTpositionen,MPOS CONSTactualmp):INT VARi:=0;MPOS VARmp;TEXT VARliste:="";WHILEi<highestentry(positionen)REPgetmpos(positionen,mp,i);IF NOT(mp=actualmp)THENlisteCAT(","+elanname(objekt(mp)))FI PER;listeEND PROCteilliste;WINDOW VARw:=window(6,12,69,10);BOOL VARhilfeschoneingeblendet:=FALSE;DATASPACE VARds;FILE VARhf;INT VARerstezeile:=3,erstespalte:=1;PROCraeumeeditierhilfeweg:IFhilfeschoneingeblendetTHENbsspeicherlesen(w);hilfeschoneingeblendet:=FALSE FI END PROCraeumeeditierhilfeweg;PROCgibeditierhilfe:MPOS VARmp;TEXT VARtaste:="";IF NOThilfeschoneingeblendetTHENstellehilfezusammen;erstezeile:=3;erstespalte:=1;outframe(w);FI;wechsleinfenstermithilfe.wechsleinfenstermithilfe:doublefootnote(anwendungstext(quithinweis));scroll(w,hf,1,3,0,erstezeile,erstespalte,zurueck,taste);doublefootnote(anwendungstext(standardhinweis)).stellehilfezusammen:forget(ds);ds:=nilspace;hf:=sequentialfile(output,ds);INT VARi,v:=0,e:=0,p:=0,f:=0;erstezeile:=1;erstespalte:=1;fischevariablenundihrenamenausmatrix;fischeergaenzungsvariablenundihrenamenausmatrix;fischeparameterundihrenamenausmatrix;fischeformelnundihrenamenausmatrix;ggfueberschrifttfuerleereliste;hilfeschoneingeblendet:=TRUE.ggfueberschrifttfuerleereliste:IFv+e+f+p=0THENputline(hf,anwendungstext(nochkeinenamenvergeben))FI.fischevariablenundihrenamenausmatrix:i:=0;WHILEi<highestentry(variablenthesaurus)REPgetmpos(variablenthesaurus,mp,i);behandlevariablePER;IFv>0THENputline(hf,anwendungstext(tabellenfuss));line(hf)FI.behandlevariable:IFv=0THENschreibeueberschriftfuernichtleerevlisteFI;vINCR1;neuezeile(langname(objekt(mp)),elanname(objekt(mp)),kurzname(objekt(mp)));.fischeergaenzungsvariablenundihrenamenausmatrix:i:=0;WHILEi<highestentry(ergebnisthesaurus)REPgetmpos(ergebnisthesaurus,mp,i);behandleergebnisPER;IFe>0THENputline(hf,anwendungstext(tabellenfuss));line(hf)FI.behandleergebnis:IFe=0THENschreibeueberschriftfuernichtleereelisteFI;eINCR1;neuezeile(langname(objekt(mp)),elanname(objekt(mp)),kurzname(objekt(mp))).fischeparameterundihrenamenausmatrix:i:=0;WHILEi<highestentry(parameterthesaurus)REPgetmpos(parameterthesaurus,mp,i);behandleparameterPER;IFp>0THENputline(hf,anwendungstext(tabellenfuss));line(hf)FI.behandleparameter:IFp=0THENschreibeueberschriftfuernichtleereplisteFI;pINCR1;neuezeile(langname(objekt(mp)),elanname(objekt(mp)),3*"-").fischeformelnundihrenamenausmatrix:i:=0;WHILEi<highestentry(formelthesaurus)REPgetmpos(formelthesaurus,mp,i);behandleformelPER;IFf>0THENputline(hf,anwendungstext(tabellenfuss));line(hf)FI.behandleformel:IFf=0THENschreibeueberschriftfuernichtleereflisteFI;fINCR1;neuezeile(langname(objekt(mp)),elanname(objekt(mp)),3*"-");.schreibeueberschriftfuernichtleerevliste:ggfueberschrift;putline(hf,anwendungstext(singularmodellgroesse)+"n");ueberschrift.schreibeueberschriftfuernichtleereeliste:ggfueberschrift;putline(hf,anwendungstext(singularergebnis)+"n");ueberschrift.schreibeueberschriftfuernichtleerepliste:ggfueberschrift;putline(hf,anwendungstext(singularparameter));ueberschrift.schreibeueberschriftfuernichtleerefliste:ggfueberschrift;putline(hf,anwendungstext(ueberschriftfuerformel));ueberschrift.ueberschriftfuerformel:IFf=1THENsingularformelELSEpluralformelFI.ggfueberschrift:IFv+e+f+p=0THENputline(hf,anwendungstext(listedernamen));putline(hf,length(anwendungstext(listedernamen))*waagerecht);line(hf)FI.END PROCgibeditierhilfe;PROCueberschrift:putline(hf,anwendungstext(tabellenkopf1));putline(hf,anwendungstext(tabellenkopf2));putline(hf,anwendungstext(tabellenkopf3));END PROCueberschrift;PROCneuezeile(TEXT CONSTl,e,k):TEXT VARzeile:=anwendungstext(tabellenrumpf);replace(zeile,3,l);replace(zeile,35,ausgabefuerelannamen);replace(zeile,56,k);putline(hf,zeile).ausgabefuerelannamen:IFlength(e)>17THEN
subtext(e,1,17)+"*"ELSEeFI.END PROCneuezeile;PROCmeldeleerennamen(INT VARfehlercode):fehlercode:=hinweisleerername;outfehler(fehlercode)END PROCmeldeleerennamen;PROCmeldeleerenausdruck(INT VARfehlercode):fehlercode:=hinweisleererausdruck;outfehler(fehlercode)END PROCmeldeleerenausdruck;PROCmeldefalschenanfang(INT VARfehlercode):fehlercode:=hinweisfalscheranfang;outfehler(fehlercode)END PROCmeldefalschenanfang;PROCmeldeformalenfehler(INT VARfehlercode):fehlercode:=hinweisformalerfehler;outfehler(fehlercode)END PROCmeldeformalenfehler;PROCmeldesyntaxverletzung(INT VARfehlercode,TEXT CONSTfehlermeldung):fehlercode:=hinweissyntaxfehler;doublefootnote(anwendungstext(hinweissyntaxfehler)+return+fehlermeldung)END PROCmeldesyntaxverletzung;PROCmeldezeitunzulaessig(INT VARfehlercode,TEXT CONSTfehlermeldung):fehlercode:=zeitnichtalsvariable;doublefootnote(anwendungstext(zeitnichtalsvariable)+return+fehlermeldung)END PROCmeldezeitunzulaessig;PROCmeldedoppeltennamen(INT VARfehlercode):fehlercode:=hinweisdoppeltername;outfehler(fehlercode)END PROCmeldedoppeltennamen;PROCmeldezulangennamen(INT VARfehlercode):fehlercode:=hinweislangername;outfehler(fehlercode)END PROCmeldezulangennamen;PROCoutfehler(INT CONSTfehlercode):doublefootnote(anwendungstext(fehlercode))END PROCoutfehler;END PACKETobjektrepraesentation2;