app/schulis-mathematiksystem/1.0/src/mat.formeleditormanager

Raw file
Back to index

1
2
3
PACKETformeleditormanagerDEFINESformelmanager:LETniltext="",funktionsauswertungssymbol="A",unsichtbareklammerauf="(:",unsichtbareklammerzu=":)",klammeraufsymbol="(",klammerzusymbol=")",differenziersymbol="D",diffklammeraufsymbol="D:",diffklammerzusymbol=":D",selektionsklammeraufsymbol="{{",selektionsklammerzusymbol="}}",ifsymbol="<",endifsymbol=">",elifsymbol=";",thensymbol=":",selektionsthensymbol="::",selektionselifsymbol=";;",formeleditorundsymbol="&",undsymbol="UND",formeleditorodersymbol="$",odersymbol="ODER",formelindateischreiben=1,zeichensatzumstellen=2,formeleditieren=3,allesok=5,fehler=6,offset=258,erlaubtezeichen="?ilmw",tempdatname="temporaerer datenraum",anzahlzeilen=67,erstefensterzeile=6,fensterzeilen=12,erstefensterspalte=2,verlasszeichen="19wm",auf="�",bell="�",ab="
",hop="",esc="";TEXT VARaktuellearbeitsfkt:=niltext;PROCformelmanager:DATASPACE VARds;TASK VARsourcetask;INT VARnachricht;disablestop;grundeinstellungen;REPwait(ds,nachricht,sourcetask);SELECTnachrichtOF CASEformelindateischreiben:schreibeformelindateiCASEzeichensatzumstellen:stellezeichensatzumCASEformeleditieren:continue(1);cursorgrundeinstellungen;editieredieformel;break(quiet)END SELECT;send(sourcetask,nachricht,ds);forget(ds);forget(tempdatname,quiet)END REP.schreibeformelindatei:BOUND TEXT VARformelstring:=ds;arithnotation(formelstring);IFiserrorTHENclearerror;nachricht:=fehler;LEAVEschreibeformelindateiEND IF;forget(tempdatname,quiet);FILE VARf:=sequentialfile(output,tempdatname);writeformula(f);IFiserrorTHENclearerror;forget(tempdatname,quiet);nachricht:=fehler;LEAVEschreibeformelindateiEND IF;line(f);forget(ds);ds:=old(tempdatname);forget(tempdatname,quiet);nachricht:=allesok.stellezeichensatzum:BOUND TEXT VARanzukoppelnderzeichensatz:=ds;loadops(anzukoppelnderzeichensatz);arithnotation(niltext);nachricht:=allesok.editieredieformel:BOUND TEXT VARzueditierendeformel:=ds;IFzueditierendeformel<>niltextTHENarithnotation(aktuellearbeitsfkt);ELSEaktuellearbeitsfkt:=niltext;arithnotation(niltext)END IF;footnote(anwendungstext(326));REP REP IFiserrorTHENclearerror;out(bell);loescheformelfenster;aktuellearbeitsfkt:=niltextEND IF;editformulaUNTIL NOTiserrorEND REP;TEXT VARausstieg:=formeditexitkeySUB2;SELECTpos(erlaubtezeichen,ausstieg)OF CASE1:gibinformationenzumformeleditorCASE2:schaltemarkierungumCASE3:loescheformelfensterCASE4:arithnotation(niltext);verlasseformeleditorCASE5:verlasseformeleditorEND SELECT END REP.gibinformationenzumformeleditor:footnote(anwendungstext(327));formeleditorinfo(ausstieg);IFausstieg="m"THENarithnotation(niltext);verlasseformeleditorEND IF;footnote(anwendungstext(326)).schaltemarkierungum:defformeditmark(NOTformeditmark).loescheformelfenster:cursorgrundeinstellungen;arithnotation(niltext).verlasseformeleditor:forget(tempdatname,quiet);aktuellearbeitsfkt:=arithnotation;BOUND TEXT VARfstring:=new(tempdatname);fstring:=parserformat(aktuellearbeitsfkt);forget(ds);ds:=old(tempdatname);forget(tempdatname,quiet);nachricht:=allesok;LEAVEeditieredieformelEND PROCformelmanager;PROCgrundeinstellungen:resetformulaeditor;defformeditwindow(2,6,78,18);defformeditexitkeys(niltext,niltext,erlaubtezeichen);defformeditmark("    ","    ");defformeditmark(TRUE);defformeditbeep(FALSE);defformeditlearn(FALSE);defformeditbuffer(0,0,78);defformeditarith(0,0,78);defformediterror(1,21,78);defformeditrubin(2,20);defformeditlearn(0,0);defformeditkeys(0,0);aktuellearbeitsfkt:=niltext;arithnotation(niltext)END PROCgrundeinstellungen;PROCcursorgrundeinstellungen:defformeditoffset(1,5);defformeditcursor(3,5)END PROCcursorgrundeinstellungen;TEXT PROCparserformat(TEXT CONSTstring):TEXT VARstr:=string;IFpos(str,differenziersymbol)<>0THENsonderbehandlungableitungenEND IF;defaultbehandlung;IFpos(str,selektionsklammeraufsymbol)<>0THENsonderbehandlungselektionEND IF;str.sonderbehandlungableitungen:changeall(str,diffklammeraufsymbol,niltext);changeall(str,diffklammerzusymbol,niltext);changeall(str,"(: D ",differenziersymbol);changeall(str,
":) / D","/ D").defaultbehandlung:changeall(str,funktionsauswertungssymbol,niltext);changeall(str,unsichtbareklammerauf,klammeraufsymbol);changeall(str,unsichtbareklammerzu,klammerzusymbol).sonderbehandlungselektion:changeall(str,selektionsklammeraufsymbol,ifsymbol);changeall(str,selektionsklammerzusymbol,endifsymbol);changeall(str,selektionsthensymbol,thensymbol);changeall(str,selektionselifsymbol,elifsymbol);changeall(str,formeleditorundsymbol,undsymbol);changeall(str,formeleditorodersymbol,odersymbol)END PROCparserformat;PROCformeleditorinfo(TEXT VARausstieg):INT VARersteausgabezeile:=1,maximum:=anzahlzeilen-fensterzeilen;BOOL VARneuausgeben:=TRUE;REP IFneuausgebenTHENgibteiltextausEND IF;werteeingabezeichenausEND REP.gibteiltextaus:INT VARi,zeile:=erstefensterzeile,letzteausgabezeile:=ersteausgabezeile+fensterzeilen;FORiFROMersteausgabezeileUPTOletzteausgabezeileREPcursor(erstefensterspalte,zeile);out(text(anwendungstext(i+offset),77));zeileINCR1END REP.werteeingabezeichenaus:TEXT VARch;inchar(ch);IFch=aufCANDersteausgabezeile>1THENersteausgabezeileDECR1;neuausgeben:=TRUE ELIFch=abCANDersteausgabezeile<maximumTHENersteausgabezeileINCR1;neuausgeben:=TRUE ELIFch=hopTHENinchar(ch);IFch=aufCANDersteausgabezeile<>1THENersteausgabezeileDECRfensterzeilen;ersteausgabezeile:=max(ersteausgabezeile,1);neuausgeben:=TRUE ELIFch=abTHENersteausgabezeileINCRfensterzeilen;ersteausgabezeile:=min(ersteausgabezeile,maximum);neuausgeben:=TRUE ELSEneuausgeben:=FALSE END IF ELIFch=escTHENinchar(ch);SELECTpos(verlasszeichen,ch)OF CASE1:neuausgeben:=ersteausgabezeile<>1;ersteausgabezeile:=1CASE2:neuausgeben:=ersteausgabezeile<>maximum;ersteausgabezeile:=maximumCASE3,4:ausstieg:=ch;LEAVEformeleditorinfoOTHERWISEneuausgeben:=FALSE END SELECT ELSEneuausgeben:=FALSE END IF END PROCformeleditorinfo;END PACKETformeleditormanager;