From 04e68443040c7abad84d66477e98f93bed701760 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 4 Feb 2019 13:09:03 +0100 Subject: Initial import --- app/baisy/2.2.1-schulis/src/aufruf manager | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 app/baisy/2.2.1-schulis/src/aufruf manager (limited to 'app/baisy/2.2.1-schulis/src/aufruf manager') diff --git a/app/baisy/2.2.1-schulis/src/aufruf manager b/app/baisy/2.2.1-schulis/src/aufruf manager new file mode 100644 index 0000000..9577a95 --- /dev/null +++ b/app/baisy/2.2.1-schulis/src/aufruf manager @@ -0,0 +1,39 @@ +PACKET aufrufmanagerDEFINES starteaufrufmanager:LET ack=0,nak=1,naksingletask +=2;LET modussingleuser=1;PROC starteaufrufmanager:starteaufrufmanager(0)END +PROC starteaufrufmanager;PROC starteaufrufmanager(INT CONST modus):TASK VAR +sohn;initialisiere;REP warteaufdatenbankkennungundkanal;IF korrektTHEN +gruendesohntaskmitkanalnrunddatenbankkennungFI PER .initialisiere:break; +disablestop;setautonom;initsybifunktionen;.warteaufdatenbankkennungundkanal: +TASK VAR sender;INT VAR kanalnr;DATASPACE VAR datenbankkennung;clearerror; +wait(datenbankkennung,kanalnr,sender).korrekt:NOT iserror. +gruendesohntaskmitkanalnrunddatenbankkennung:IF modus=modussingleuserCAND +sohntaskschoneingerichtetTHEN quittung:=naksingletask;send(sender,quittung, +niltask)ELSE gruendesohntask;meldesohnnameansenderFI .gruendesohntask: +gruenden;IF korrektTHEN mitkanalnrunddatenbankkennungversorgenFI .gruenden: +begin(PROC stellvertreter,sohn).mitkanalnrunddatenbankkennungversorgen:BOOL +VAR erfolg;call(sohn,kanalnr,datenbankkennung,erfolg).meldesohnnameansender: +INT VAR quittung;IF erfolgTHEN quittung:=ackELSE quittung:=nakFI ;send(sender +,quittung,sohn).END PROC starteaufrufmanager;BOOL PROC +sohntaskschoneingerichtet:accesscatalogue;exists(son(myself))END PROC +sohntaskschoneingerichtet;PROC stellvertreter: +warteaufkanalnrunddatenbankkennung;geheaufkanalundsetzewerte;IF erfolgTHEN +warteaufauftrag;fuehreauftragausFI ;selbstmord.erfolg:NOT iserror.selbstmord: +end(myself).warteaufkanalnrunddatenbankkennung:disablestop;DATASPACE VAR ds; +TASK VAR vater;INT VAR kanalnr;wait(ds,kanalnr,vater). +geheaufkanalundsetzewerte:INT VAR quittung;IF erfolgTHEN #quittung:=ack; +oeffnedatenbank(ds)#datenbankeneroeffnenELSE quittung:=nakFI ;continue( +kanalnr);send(vater,quittung,ds);forget(ds);initmeldungsfunktionen. +datenbankeneroeffnen:oeffnedatenbank;fetchdd(schulisdbname);IF dbopen( +schulisdbname)THEN systemdboff;quittung:=ackELSE quittung:=nakFI . +warteaufauftrag:INT VAR knotenname;TASK VAR auftraggeber;REP wait(ds, +knotenname,auftraggeber)UNTIL korrekterauftragPER .korrekterauftrag: +knotenname>0.fuehreauftragaus:setzesystembaumundaktuellenknoten(ds,knotenname +);starteanwendung;IF erfolgTHEN quittung:=ackELSE quittung:=nakFI ;break( +quiet);send(auftraggeber,quittung,ds);forget(ds).END PROC stellvertreter; +PROC call(TASK CONST zielmanager,INT CONST kanal,DATASPACE VAR ds,BOOL VAR +erfolg):INT VAR replycode;call(zielmanager,kanal,ds,replycode);erfolg:= +replycode=ack;forget(ds)END PROC call;PROC send(TASK CONST sender,INT CONST +quittung,TASK CONST sohn):DATASPACE VAR ds:=nilspace;IF quittung=ackTHEN +BOUND TASK VAR t:=ds;t:=sohnFI ;send(sender,quittung,ds);forget(ds)END PROC +send;END PACKET aufrufmanager; + -- cgit v1.2.3