efn/main.c

61 lines
1.1 KiB
C

char **
parse_command(char *input) {
static char com[COM_BUF_SIZE];
memcpy(com, input, COM_BUF_SIZE);
static char *starts[128];
memset(starts, 0, sizeof(starts));
int next_start = 0;
com[COM_BUF_SIZE - 1] = ' ';
for (int i = 0; i < COM_BUF_SIZE; i++) {
for (; com[i] == ' ' && i < COM_BUF_SIZE; i++);
if (i >= COM_BUF_SIZE) break;
starts[next_start] = com + i;
for(; i < COM_BUF_SIZE && com[i] != ' '; i++)
;
com[i] = '\0';
next_start++;
}
return &starts[0];
}
void
run_command(char *c) {
char **com = parse_command(c);
if(com[0] == NULL) return;
if(commands[com[0][0]] != NULL)
commands[com[0][0]](c, com);
else
puts("invalid command");
}
int
main(int argc, char **argv) {
static char buf[COM_BUF_SIZE];
if (argc >= 2) {
load_file(argv[1]);
}
while(1) {
memset(buf, 0, sizeof(buf));
printf(" > ");
fflush(stdout);
char *com = fgets(buf, sizeof(buf), stdin);
for (int i = 0; i < sizeof(buf); i++)
if (buf[i] == '\n')
buf[i] = '\0';
if (com != NULL) {
run_command(com);
}
}
return 0;
}