9 #include "mTaskSymbols.h"
12 #define MAXTASKSIZE 1024
14 #define STACKSIZE 1024
18 #define debug(s, ...) printf(s, ##__VA_ARGS__);
20 #define debug(s, ...) ;
23 #define pdie(s) {perror(s); exit(1);}
24 #define die(s, ...) {fprintf(stderr, s, ##__VA_ARGS__); exit(1);}
26 char tasks
[MAXTASKS
][MAXTASKSIZE
] = {0};
28 void killHandler(int i
)
30 printf("%s caught, Bye...\n", strsignal(i
));
34 bool input_available(int fd
){
41 if(select(fd
+1, &fds
, NULL
, NULL
, &tv
) == -1){
44 return FD_ISSET(fd
, &fds
);
50 // char taskindex = 0;
54 int next_free_new_task
= 0;
57 //Register signal handler
58 if(signal(SIGINT
, killHandler
) == SIG_ERR
){
59 die("Couldn't register signal handler...\n");
61 if(signal(SIGTERM
, killHandler
) == SIG_ERR
){
62 die("Couldn't register signal handler...\n");
66 if(input_available(fd_in
)){
67 printf("Receiving input\n");
70 debug("Receiving an sds\n");
71 } else if((char) c
== 't'){
76 if(tasklen
> MAXTASKSIZE
){
77 die("Task is too long: %d\n", tasklen
);
79 for(int i
= 0; i
<tasklen
; i
++){
80 debug("Read %d\n", i
);
81 read(fd_in
, tasks
[next_free_new_task
]+i
, 1);
82 read(fd_in
, tasks
[next_free_new_task
]+i
, 1);
83 debug("t[][%i]: %d\n", i
, tasks
[next_free_new_task
][i
]);
85 debug("Receiving a task of length %d\n", tasklen
);
87 die("Unknown message: %c?\n", c
);
96 while ((c = getchar()) != EOF && pc < PROGRAMSIZE)
98 if (pc >= PROGRAMSIZE)
99 die("Max program size: %d\n", PROGRAMSIZE);
101 debug("Done reading, program length: %d\n", pl);
104 //Reset program counter and stack counter
108 switch(program[pc++]){
112 stack[sp++] = program[pc++];
118 stack[sp] = stack[sp] > 0 ? 0 : 1;
121 stack[sp-1] = stack[sp] + stack[sp-1];
125 stack[sp-1] = stack[sp] - stack[sp-1];
129 stack[sp-1] = stack[sp] * stack[sp-1];
133 stack[sp-1] = stack[sp] / stack[sp-1];
137 stack[sp-1] = stack[sp] && stack[sp-1];
141 stack[sp-1] = stack[sp] || stack[sp-1];
145 stack[sp-1] = stack[sp] == stack[sp-1];
149 stack[sp-1] = stack[sp] != stack[sp-1];
152 case BCLES: stack[sp-1] = stack[sp] < stack[sp-1];
156 stack[sp-1] = stack[sp] > stack[sp-1];
160 stack[sp-1] = stack[sp] <= stack[sp-1];
164 stack[sp-1] = stack[sp] >= stack[sp-1];
168 pc = pc + program[pc];
171 pc += stack[sp] ? program[pc] : 1;
174 pc += stack[sp] ? 1 : program[pc];
177 printf("SerialAvailable()\n");
180 printf("SerialPrint()\n");
182 case BCSERIALPRINTLN:
183 printf("SerialPrintln()\n");
186 printf("SerialRead()\n");
188 case BCSERIALPARSEINT:
189 printf("SerialParseInt()\n");
192 printf("AnalogRead()\n");
195 printf("AnalogWrite()\n");
197 die("Unrecognized command: %X\n", program[--pc]);