#include #include #include #include typedef struct transfer { int id; char input; int next; char output; int move; bool end; } transfer; transfer transfers[128]; int transferptr = 0; int count = 0; char tape[4096] = {0}; char *head = tape; int main() { FILE *f = fopen("test.mac", "r"); strcat(tape, "1110"); char *line = malloc(128); while (fgets(line, 128, f) != NULL) { char *tok = strtok(line, " "); // input transfers[count].id = atoi(tok); tok = strtok(NULL, " "); if (tok[0] == '*') transfers[count].input = -1; else transfers[count].input = tok[0]; tok = strtok(NULL, " "); // next transfers[count].next = atoi(tok); tok = strtok(NULL, " "); // output transfers[count].output = tok[0]; tok = strtok(NULL, " "); // offset transfers[count].move = atoi(tok); tok = strtok(NULL, " "); // end transfers[count].end = atoi(tok); // must be 1 or 0 count++; line = malloc(128); } for (;;) { for (int i = 0; i < count; i++) { if (transfers[i].id == transferptr) { if (transfers[i].input == -1 || *head == transfers[i].input) { *head = transfers[i].output; head += transfers[i].move; transferptr = transfers[i].next; if (transfers[transferptr].end) break; break; } } } } printf("%s\n", tape); return 0; }