From d963745f754d618bd6a729633050c24831e727e0 Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Fri, 12 May 2017 13:46:22 +0200 Subject: [PATCH] further work on return values --- client/client.c | 4 ---- client/interpret.c | 5 +++-- client/task.c | 8 ++++++++ client/task.h | 1 + mTaskInterpret.dcl | 2 +- mTaskInterpret.icl | 7 ++++--- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/client/client.c b/client/client.c index 305f51d..19a68e9 100644 --- a/client/client.c +++ b/client/client.c @@ -52,10 +52,6 @@ void read_message(void) debug("Receiving a delete task request"); c = read16(); task_delete(c); - //Write acknowledgement - write_byte('d'); - write16(c); - write_byte('\n'); break; case MSG_GET_TASK: debug("Receiving a task"); diff --git a/client/interpret.c b/client/interpret.c index e5907cf..66173e2 100644 --- a/client/interpret.c +++ b/client/interpret.c @@ -163,9 +163,10 @@ void run_task(struct task *t) break; #endif case BCRETURN: trace("Return"); - pc = plen; t->value = (uint16_t) stack[sp-1]; - break; + debug("Task returned"); + task_delete(t->taskid); + return; default: trace("unrecognized"); die("Unrecognized command: %d", program[pc-1]); diff --git a/client/task.c b/client/task.c index 4ed23ee..2b42fd8 100644 --- a/client/task.c +++ b/client/task.c @@ -29,6 +29,9 @@ void task_register(void) } + //Read return type + t->type = read_byte(); + //Read tasklength t->tasklength = read16(); debug("task interval: %d, length: %d\n", t->interval, t->tasklength); @@ -92,6 +95,11 @@ void task_delete(uint8_t c) } t = task_next(t); } + //Write acknowledgement + write_byte('d'); + write16(c); + write16(t->value); + write_byte('\n'); if(t != NULL){ //We found the task, now we move everything from the end of the task up diff --git a/client/task.h b/client/task.h index bcd0783..253558e 100644 --- a/client/task.h +++ b/client/task.h @@ -14,6 +14,7 @@ struct task { uint8_t taskid; struct task *next; uint8_t *bc; + char type; int value; }; diff --git a/mTaskInterpret.dcl b/mTaskInterpret.dcl index 29e1fb9..63778bd 100644 --- a/mTaskInterpret.dcl +++ b/mTaskInterpret.dcl @@ -21,7 +21,7 @@ from Generics.gCons import class gCons, generic conses, generic consName, generi | MTEmpty :: MTaskMSGSend - = MTTask MTaskInterval String + = MTTask MTaskInterval Char String | MTTaskDel Int | MTSds Int BCValue | MTUpd Int BCValue diff --git a/mTaskInterpret.icl b/mTaskInterpret.icl index 5e17aeb..3b87789 100644 --- a/mTaskInterpret.icl +++ b/mTaskInterpret.icl @@ -41,7 +41,7 @@ import Text.Encodings.Base64 import Tasks.Examples encode :: MTaskMSGSend -> String -encode (MTTask to data) = "t" +++ toByteCode to +++ to16bit (size data) +++ data +++ "\n" +encode (MTTask to ret data) = "t" +++ toByteCode to +++ toString ret +++ to16bit (size data) +++ data +++ "\n" encode (MTTaskDel i) = "d" +++ to16bit i +++ "\n" encode (MTSds i v) = "s" +++ to16bit i +++ toByteCode v +++ "\n" encode (MTUpd i v) = "u" +++ to16bit i +++ toByteCode v +++ "\n" @@ -74,7 +74,8 @@ instance toString MTaskInterval where instance toString MTaskMSGSend where toString (MTSds i v) = "Sds id: " +++ toString i +++ " value " +++ safePrint v - toString (MTTask to data) = "Task timeout: " +++ toString to + toString (MTTask to ret data) = "Task timeout: " +++ toString to + +++ " return type: " +++ toString ret +++ " data " +++ safePrint data toString (MTTaskDel i) = "Task delete request: " +++ toString i toString (MTUpd i v) = "Update id: " +++ toString i @@ -342,7 +343,7 @@ toMessages interval x s | not (trace_tn $ printToString newstate.sdss) = undef | not (trace_tn $ printToString newsdss) = undef = ([MTSds sdsi e\\{sdsi,sdsval=e}<-newsdss] ++ - [MTTask interval bc], newstate) + [MTTask interval 'i' bc], newstate) instance == BCShare where (==) a b = a.sdsi == b.sdsi -- 2.20.1