further work on return values
authorMart Lubbers <mart@martlubbers.net>
Fri, 12 May 2017 11:46:22 +0000 (13:46 +0200)
committerMart Lubbers <mart@martlubbers.net>
Fri, 12 May 2017 12:28:30 +0000 (14:28 +0200)
client/client.c
client/interpret.c
client/task.c
client/task.h
mTaskInterpret.dcl
mTaskInterpret.icl

index 305f51d..19a68e9 100644 (file)
@@ -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");
index e5907cf..66173e2 100644 (file)
@@ -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]);
index 4ed23ee..2b42fd8 100644 (file)
@@ -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
index bcd0783..253558e 100644 (file)
@@ -14,6 +14,7 @@ struct task {
        uint8_t taskid;
        struct task *next;
        uint8_t *bc;
+       char type;
        int value;
 };
 
index 29e1fb9..63778bd 100644 (file)
@@ -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
index 5e17aeb..3b87789 100644 (file)
@@ -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