summaryrefslogtreecommitdiff
path: root/app/schulis-simulationssystem/3.0/src/neue startschl
blob: 850f251cc939ea95872d713d6528fa9c9031a07b (plain)
1
2
3
PACKETstartinmanagergrafiktaskDEFINESmanagerschleife:INT CONSTeingabevomkanal:=-4,existiertnicht:=-1,nichtempfangsbereit:=-2;LETuebersetzungsfile="uebersetzungsdatei",kanalgeraetetask=1,modellbankverwaltung="MODELLBANKVERWALTUNG",menukarteinstallieren="installmenu(""ls-MENUKARTE:Simsel"",FALSE)",dglmodell=1,wdmodell=2,okcode=0,tasknamefuersohn="-",msgmodelldaten=2,msgoriginalkurve=3,msgvergleichskurve=4,msggleichungen=5,msgdglsimulation=6,msgwdinfotext=7,msgwdsimulation=9,wiederaufsetzen=10,aufruf="wahl der bearbeitung (PROC f , PROC co f, PROC darstellung 4) ;";TASK VARsohntask:=niltask;TEXT VARfehlertext:="";PROCmanagerschleife:DATASPACE VARtransportds;INT VARmesscode,retcode;INT VARinfoint:=0;TASK VARauftraggeber,kontrolltask:=/modellbankverwaltung;disablestop;break(quiet);REPkernvonmanagerschleifePER.kernvonmanagerschleife:retcode:=0;wait(transportds,messcode,auftraggeber);IFauftraggeber=kontrolltaskTHEN IFmesscode=msgmodelldatenTHENrichtesohneinundsendemodelldaten;ELIFmesscode=msgoriginalkurveTHENsendeaktuellenmesscode;ELIFmesscode=msgvergleichskurveTHENsendeaktuellenmesscode;ELIFmesscode=msggleichungenTHENsendeaktuellenmesscode;ELIFmesscode=msgdglsimulationTHENstartedglsimulationinsohntask;ELIFmesscode=msgwdinfotextTHENsendeaktuellenmesscode;ELIFmesscode=msgwdsimulationTHENstartewdsimulationinsohntask;FI;transportds:=nilspace;auftraggeber:=kontrolltask;infoint:=0;send(auftraggeber,retcode,transportds,infoint);forget(transportds);FI;fehlerbehandlung.fehlerbehandlung:IFiserrorTHENclearerrorFI.richtesohneinundsendemodelldaten:IFexists(son(myself))THENend(son(myself));FI;begin(tasknamefuersohn,PROCstartprocfuersimulationstask,sohntask);REP UNTILexists(sohntask)CANDstatus(sohntask)=2PER;schickeansohntask(transportds,messcode,retcode);.sendeaktuellenmesscode:schickeansohntask(transportds,messcode,retcode);.startedglsimulationinsohntask:schickeansohntask(transportds,messcode,retcode);end(son(myself));.startewdsimulationinsohntask:schickeansohntask(transportds,messcode,retcode);end(son(myself));.END PROCmanagerschleife;PROCschickeansohntask(DATASPACE VARdatenraum,INT CONSTverarbeitung,INT VARret):TASK VARzieltask:=sohntask,kontrolltask:=sohntask;ret:=okcode;REP REP UNTILstatus(zieltask)=2PER;zieltask:=sohntask;send(zieltask,verarbeitung,datenraum,ret);forget(datenraum);IFret<>existiertnichtCANDret<>nichtempfangsbereitTHENzieltask:=kontrolltask;wait(datenraum,ret,zieltask);forget(datenraum);FI;LEAVEschickeansohntask;PER;END PROCschickeansohntask;PROCstartprocfuersimulationstask:disablestop;bearbeiteauftrag;IFiserrorTHENclearerror;DATASPACE VARtransporter:=nilspace;INT VARnachricht:=wiederaufsetzen,return:=0;TASK VARdestinationtask:=father;REP UNTILstatus(destinationtask)=2PER;send(destinationtask,nachricht,transporter,return);FI;.END PROCstartprocfuersimulationstask;PROCbearbeiteauftrag:FILE VARfx;BOUND TEXT VARtx;DATASPACE VARtransportdatenraum;INT VARmsgtype;TASK VARsourcetask:=father,destinationtask:=father;enablestop;REPwait(transportdatenraum,msgtype,sourcetask);verarbeitebotschaft;UNTILinstallationfertigPER;.installationfertig:msgtype=msgdglsimulationORmsgtype=msgwdsimulation.verarbeitebotschaft:IFsourcetask=fatherTHEN IFmsgtype=msgmodelldatenTHENkopieremodelldaten;ELIFmsgtype=msgoriginalkurveTHENkopiereoriginalkurve;ELIFmsgtype=msgvergleichskurveTHENkopierevergleichskurve;ELIFmsgtype=msggleichungenTHENkopieregleichungen;ELIFmsgtype=msgdglsimulationTHENstartedglsimulation;ELIFmsgtype=msgwdinfotextTHENkopiereinfotextwd;ELIFmsgtype=msgwdsimulationTHENstartewdsimulation;ELIFmsgtype=eingabevomkanalTHEN REP UNTILincharety=""PER;forget(transportdatenraum);LEAVEverarbeitebotschaftELSEforget(transportdatenraum);LEAVEverarbeitebotschaftFI;ELSE IFmsgtype=eingabevomkanalTHEN REP UNTILincharety=""PER;FI;forget(transportdatenraum);LEAVEverarbeitebotschaftFI;sendeantwort;.kopieremodelldaten:BOUND MODELLDGL VARmodelltransporter;MODELLDGL VARaktuellesmodell;texteankoppeln;modelltransporter:=transportdatenraum;aktuellesmodell:=
modelltransporter;kopplean(aktuellesmodell);.kopiereoriginalkurve:forget(vorgabekurve,quiet);copy(transportdatenraum,vorgabekurve);.kopierevergleichskurve:forget(vorgabevergleichskurve,quiet);copy(transportdatenraum,vorgabevergleichskurve);.kopieregleichungen:forget(modelldatenraum,quiet);copy(transportdatenraum,modelldatenraum);kopplean(aktuellesmodell);.kopiereinfotextwd:uebergebeinfotextfuerwd(transportdatenraum);.startedglsimulation:startesimulation(dglmodell,transportdatenraum);forget(vorgabekurve,quiet);forget(vorgabevergleichskurve,quiet);forget(modelldatenraum,quiet);.startewdsimulation:startesimulation(wdmodell,transportdatenraum);.sendeantwort:transportdatenraum:=nilspace;msgtype:=okcode;destinationtask:=father;REP UNTILstatus(destinationtask)=2PER;send(destinationtask,msgtype,transportdatenraum).END PROCbearbeiteauftrag;PROCstartesimulation(INT CONSTmodelltyp,DATASPACE VARwddsfertigegleichungen):FILE VARrundatei;enablestop;continue(kanalgeraetetask);setzemodelltyp(modelltyp=wdmodell);forget(uebersetzungsfile,quiet);IFmodelltyp=dglmodellTHENgleichungsprozeduren(uebersetzungsfile)ELIFmodelltyp=wdmodellTHENcopy(wddsfertigegleichungen,uebersetzungsfile)FI;rundatei:=sequentialfile(output,uebersetzungsfile);putline(rundatei,"continue ( "+text(kanalgeraetetask)+");");putline(rundatei,aufruf);do(menukarteinstallieren);break(quiet);uebersetze;break(quiet);.uebersetze:run(uebersetzungsfile);forget(uebersetzungsfile,quiet);.END PROCstartesimulation;END PACKETstartinmanagergrafiktask;