int main(int argc, char *argv[]) { login(); read_cmds(); return 0; }
static int process_command(usb_dev_handle *handle, char *cmd) { int tube = 0; int value = 0; int anim = 0; int speed = 0; int r = 0; int g = 0; int b = 0; if (sscanf(cmd, "t%d:%d", &tube, &value) == 2 && tube >= 0 && value >= 0) { printf("Setting nixie tube %u to %u.\n", tube, value); return set_tube(handle, tube, value); } else if (sscanf(cmd, "l%d:%d/%d/%d", &tube, &r, &g, &b) == 4 && tube >= 0) { printf("Setting nixie LED %u to %u/%u/%u.\n", tube, r, g, b); return set_led(handle, tube, r, g, b); } else if (sscanf(cmd, "anim:%d:%d", &anim, &speed) == 2 && anim >= 0 && anim >= 0) { printf("Setting animation style %u with speed %u.\n", anim, speed); return set_animation(handle, anim, speed); } else if (sscanf(cmd, "lnum:%d", &value) == 1 && value >= 0) { printf("Setting number %u\n", value); return set_number(handle, value, 1); } else if (sscanf(cmd, "num:%d", &value) == 1 && value >= 0) { printf("Setting number %u\n", value); return set_number(handle, value, 0); } else if (sscanf(cmd, "color:%d/%d/%d", &r, &g, &b) == 3) { printf("Setting color %u/%u/%u\n", r, g, b); return set_color(handle, r, g, b); } else if (strcmp(cmd, "off") == 0) { printf("Turning off all tubes...\n"); return tubes_off(handle); } else if (strcmp(cmd, "read") == 0) { printf("Reading commands from stdin...\n"); return read_cmds(handle, 0); } else if (strcmp(cmd, "readf") == 0) { printf("Reading commands from stdin (autofail)...\n"); return read_cmds(handle, 1); } else { fprintf(stderr, "Unable to parse command: %s\n", cmd); return 2; } return 0; }
/* read stdin */ int get_cmds(char *buf, int size) { buf = read_cmds(buf, size); if (!buf) return -1; if (!*buf) return 0; struct cmd *cmd_cur = cmd_pipes; int i = 0; while (buf[i]) { if (buf[i] == '|') { ++i; continue; } for (; isspace(buf[i]); ++i); int j = i; for(; buf[i] && !isspace(buf[i]) && buf[i] != '|'; i++); strncpy(cmd_cur->name, buf + j, i - j); cmd_cur->name[i - j] = 0; for (; isspace(buf[i]); ++i); int arg_count = 0; while (buf[i] && buf[i] != '|') { j = i; for (; buf[i] && !isspace(buf[i]) && buf[i] != '|'; i++); char *dst = NULL; if (buf[j] == '-') { ++j; dst = cmd_cur->opts + strlen(cmd_cur->opts); } else { cmd_cur->args[arg_count] = malloc(i - j + 1); dst = cmd_cur->args[arg_count++]; } strncpy(dst, buf + j, i - j); dst[i - j] = 0; for (; isspace(buf[i]); ++i); } ++cmd_cur; } return cmd_cur - cmd_pipes; }