X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=int%2Fint.c;h=6ef8cc45b7afc70056053788c40979ece5c83536;hb=f63e9891ef344e992a8a837cd3301ba3209f1e5c;hp=9dc52a248f3771f84c1bfc646d9e412851912ca4;hpb=2936e3ba44acd430c2b3290801ab1ffa700a8c25;p=mTask.git diff --git a/int/int.c b/int/int.c index 9dc52a2..6ef8cc4 100644 --- a/int/int.c +++ b/int/int.c @@ -1,9 +1,17 @@ #include +#include +#include +#include +#include +#include +#include #include "mTaskSymbols.h" +#define MAXTASKS 5 +#define MAXTASKSIZE 1024 +#define MAXSDS 50 #define STACKSIZE 1024 -#define PROGRAMSIZE 1024 #define DEBUG #ifdef DEBUG @@ -12,17 +20,78 @@ #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}; + +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(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 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: @@ -129,5 +197,6 @@ int main(void) die("Unrecognized command: %X\n", program[--pc]); } } +*/ return 0; }