omgooien taken
[mTask.git] / int / int.c
index a946908..6ef8cc4 100644 (file)
--- a/int/int.c
+++ b/int/int.c
@@ -1,10 +1,17 @@
 #include <stdio.h>
 #include <stdbool.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdint.h>
 
 #include "mTaskSymbols.h"
 
+#define MAXTASKS 5
+#define MAXTASKSIZE 1024
+#define MAXSDS 50
 #define STACKSIZE 1024
-#define PROGRAMSIZE 1024
 
 #define DEBUG
 #ifdef DEBUG
 #define debug(s, ...) ;
 #endif
 
-#define die(s, ...) {fprintf(stderr, s, ##__VA_ARGS__); return 1;}
+#define pdie(s) {perror(s); exit(1);}
+#define die(s, ...) {fprintf(stderr, s, ##__VA_ARGS__); exit(1);}
 
-char program[PROGRAMSIZE+1] = {0};
-int stack[STACKSIZE+1] = {0};
+char tasks[MAXTASKS][MAXTASKSIZE] = {0};
 
-bool input_available(){
+void killHandler(int i)
+{
+       printf("%s caught, Bye...\n", strsignal(i));
+       exit(1);
+}
+
+bool input_available(int fd){
        struct timeval tv;
        fd_set fds;
        tv.tv_sec = 0;
        tv.tv_usec = 0;
        FD_ZERO(&fds);
-       FD_SET(0, &fds);
-       select(1, &fds, NULL, NULL, &tv);
-       return FD_ISSET(0, &fds);
+       FD_SET(fd, &fds);
+       if(select(fd+1, &fds, NULL, NULL, &tv) == -1){
+               pdie("select");
+       }
+       return FD_ISSET(fd, &fds);
 }
 
-
 int main(void)
 {
-       char c;
-       int pl, sp, pc;
+       uint8_t c;
+//     char taskindex = 0;
+//     int pl, sp, pc;
+//
+       int fd_in = 0;
+       int next_free_new_task = 0;
+       uint16_t tasklen = 0;
+
+       //Register signal handler
+       if(signal(SIGINT, killHandler) == SIG_ERR){
+               die("Couldn't register signal handler...\n");
+       }
+       if(signal(SIGTERM, killHandler) == SIG_ERR){
+               die("Couldn't register signal handler...\n");
+       }
+
+       while(true){
+               if(input_available(fd_in)){
+                       printf("Receiving input\n");
+                       read(fd_in, &c, 1);
+                       if((char) c == 's'){
+                               debug("Receiving an sds\n");
+                       } else if((char) c == 't'){
+                               read(fd_in, &c, 1);
+                               tasklen = 256*c;
+                               read(fd_in, &c, 1);
+                               tasklen += c;
+                               if(tasklen > MAXTASKSIZE){
+                                       die("Task is too long: %d\n", tasklen);
+                               }
+                               for(int i = 0; i<tasklen; i++){
+                                       debug("Read %d\n", i);
+                                       read(fd_in, tasks[next_free_new_task]+i, 1);
+                                       read(fd_in, tasks[next_free_new_task]+i, 1);
+                                       debug("t[][%i]: %d\n", i, tasks[next_free_new_task][i]);
+                               }
+                               debug("Receiving a task of length %d\n", tasklen);
+                       } else {
+                               die("Unknown message: %c?\n", c);
+                       }
+                       exit(1);
+               }
+               usleep(1);
+       }
 
-       //Read program
+/*     //Read program
        pc = 0;
        while ((c = getchar()) != EOF && pc < PROGRAMSIZE)
                program[pc++] = c;
@@ -50,72 +106,71 @@ int main(void)
        sp = 0;
        while(pc != pl){
                switch(program[pc++]){
-               case BCNop:;
+               case BCNOP:;
                        break;
-               case BCPush:
+               case BCPUSH:
                        stack[sp++] = program[pc++];
                        break;
-               case BCPop:
+               case BCPOP:
                        sp--;
                        break;
-               case BCNot:
+               case BCNOT:
                        stack[sp] = stack[sp] > 0 ? 0 : 1;
                        break;
-               case BCAdd:
+               case BCADD:
                        stack[sp-1] = stack[sp] + stack[sp-1];
                        sp -= 1;
                        break;
-               case BCSub:
+               case BCSUB:
                        stack[sp-1] = stack[sp] - stack[sp-1];
                        sp -= 1;
                        break;
-               case BCMul:
+               case BCMUL:
                        stack[sp-1] = stack[sp] * stack[sp-1];
                        sp -= 1;
                        break;
-               case BCDiv:
+               case BCDIV:
                        stack[sp-1] = stack[sp] / stack[sp-1];
                        sp -= 1;
                        break;
-               case BCAnd:
+               case BCAND:
                        stack[sp-1] = stack[sp] && stack[sp-1];
                        sp -= 1;
                        break;
-               case BCOr:
+               case BCOR:
                        stack[sp-1] = stack[sp] || stack[sp-1];
                        sp -= 1;
                        break;
-               case BCEq:
+               case BCEQ:
                        stack[sp-1] = stack[sp] == stack[sp-1];
                        sp -= 1;
                        break;
-               case BCNeq:
+               case BCNEQ:
                        stack[sp-1] = stack[sp] != stack[sp-1];
                        sp -= 1;
                        break;
-               case BCLes:
-                       stack[sp-1] = stack[sp] < stack[sp-1];
+               case BCLES: stack[sp-1] = stack[sp] < stack[sp-1];
                        sp -= 1;
                        break;
-               case BCGre:
+               case BCGRE:
                        stack[sp-1] = stack[sp] > stack[sp-1];
                        sp -= 1;
                        break;
-               case BCLeq:
+               case BCLEQ:
                        stack[sp-1] = stack[sp] <= stack[sp-1];
                        sp -= 1;
                        break;
-               case BCGeq:
+               case BCGEQ:
                        stack[sp-1] = stack[sp] >= stack[sp-1];
                        sp -= 1;
                        break;
-               case BCJmp:
+               case BCJMP:
                        pc = pc + program[pc];
                        break;
-               case BCJmpT:
+               case BCJMPT:
                        pc += stack[sp] ? program[pc] : 1;
                        break;
-               case BCJmpF:
+               case BCJMPF:
                        pc += stack[sp] ? 1 : program[pc];
                        break;
                case BCSERIALAVAIL:
@@ -142,5 +197,6 @@ int main(void)
                        die("Unrecognized command: %X\n", program[--pc]);
                }
        }
+*/
        return 0;
 }