#include #include #include #include #include "fakedisc.h" /* Reminders from fakedisc.h typedef unsigned char byte; typedef byte block[512]; int createdisc(const char *name, int number_of_blocks); int mountdisc(const char *name); void dismountdisc(int discnum); int discsize(int discnum); int writeblock(int discnum, int blocknum, void *b); int readblock(int discnum, int blocknum, void *b); */ void main() { char line[1000]; char * part[100]; int numparts, dnum = -1; while (true) { printf("> "); char * s = fgets(line, 999, stdin); if (s==NULL) break; numparts = 0; s = strtok(line, " \r\n"); while (s != NULL) { part[numparts] = s; numparts += 1; s = strtok(NULL, " \r\n"); } if (numparts == 0) continue; else if (strcmp(part[0], "?") == 0) { printf(" create name number-of-blocks\n"); printf(" m name\n"); printf(" r block-number\n"); printf(" w block-number string-with-no-spaces\n"); printf(" x\n"); } else if (strcasecmp(part[0], "create") == 0) { bool ok = createdisc(part[1], atol(part[2])); if (ok) { dnum = mountdisc(part[1]); printf("OK, \"%s\", %d blocks\n", part[1], discsize(dnum)); } else printf("create failed\n"); } else if (strcasecmp(part[0], "m") == 0) { dnum = mountdisc(part[1]); if (dnum < 0) printf("mount failed\n"); else printf("%d blocks\n", discsize(dnum)); } else if (strcasecmp(part[0], "r") == 0) { if (dnum < 0) { printf("no disc mounted\n"); continue; } int blocknum = atol(part[1]); block buffer; bool ok = readblock(dnum, blocknum, buffer); if (ok) printf("%s\n", (char *)buffer); else printf("read failed\n"); } else if (strcasecmp(part[0], "w") == 0) { if (dnum < 0) { printf("no disc mounted\n"); continue; } int blocknum = atol(part[1]); bool ok = writeblock(dnum, blocknum, part[2]); if (!ok) printf("write failed\n"); } else if (strcasecmp(part[0], "x") == 0) { if (dnum >= 0) dismountdisc(dnum); break; } else printf("unrecognised command \"%s\"\n", part[0]); } }