#include "util.h" #include "parser.h" #include "search.h" #include "foodopts.h" #include "eval.h" #include "lib.h" static struct opts { int new; int change; int eval; char title[2048]; char includes[100][2048]; int includes_n; char ing[100][2048]; int ing_n; char step[100][2048]; int step_n; int help; } opt = { .new = 0, .change = 0, .eval = 0, .title = "", .includes = {""}, .includes_n = 0, .ing = {""}, .ing_n = 0, .step = {""}, .step_n = 0, .help = 0, }; int main(int argc, char * argv[]) { fdebug("--- Debug mode is on ---\n"); int c; struct foodoption long_options[] = {/* name, has_arg, flag, val, help, arg */ {"help", no_argument, 0, 'h', "Print this help", 0, "General" }, {"include", required_argument, 0, 'I', "Path to recipe library, can be passed multiple times", "PATH", 0 }, {"eval", no_argument, 0, 'e', "Eval recipe before output", 0, 0 }, {"new", required_argument, 0, 'n', "Create recipe", "TITLE", "Commands" }, {"change", required_argument, 0, 'c', "Change recipe", "FILE", 0 }, {"title", required_argument, 0, 't', "Set recipe title", "TITLE", "Options" }, {"ingredient", required_argument, 0, 'i', "Add an ingredient", "INGREDIENT", 0 }, {"step", required_argument, 0, 's', "Add a step", "STEP", 0 }, {0, 0, 0, 0, 0} }; while (1) { int option_index = 0; c = get_foodopt (argc, argv, "ehI:n:c:t:i:s:", long_options, &option_index); printf("ASDASDASDA\n"); if (c == -1) break; switch (c) { case 0: break; case 'I': strcpy(opt.includes[opt.includes_n++], optarg); break; case 'i': strcpy(opt.ing[opt.ing_n++], optarg); break; case 's': strcpy(opt.step[opt.step_n++], optarg); break; case 't': strcpy(opt.title, optarg); break; case 'h': opt.help = 1; break; case 'n': opt.new = 1; strcpy(opt.title, optarg); break; case 'c': opt.change = 1; break; case 'e': opt.eval = 1; break; case '?': fprintf(stderr, "%s: option '%c' not recognised, try -h for help\n", argv[0], optopt); return -1; break; case ':': switch (optopt) { /* case 'l': */ /* opt.list = 1; */ /* strcpy(opt.listfmt, "DEFAULT"); */ /* break; */ default: fprintf(stderr, "%s: missing argument %s for -%c\n", argv[0], get_argument(optopt, long_options), optopt); return -1; break; } break; default: abort (); } } if (opt.help) { foodopt_help(argv[0], long_options); return 0; } /* if (opt.new) { */ /* if (strcmp(opt.title, "")) */ /* printf("@%s\n\n", opt.title); */ /* for (int i = 0; i < opt.ing_n; i++) */ /* printf("%s\n", opt.ing[i]); */ /* if (opt.step_n) */ /* printf("\n---\n\n"); */ /* for (int i = 0; i < opt.step_n; i++) */ /* printf("%s\n", opt.step[i]); */ /* } */ if (opt.new) { recipe * r = new_recipe(); r->path = strdup("."); r->filename = strdup(opt.title); char err[1000] = ""; int rc = 0; if (strcmp(opt.title, "")) r->title = strdup(opt.title); for (int i = 0; i < opt.ing_n; i++) { rc = parse_item(opt.ing[i], r, NULL, err); if (rc) { fprintf(stderr, "ERROR: %s\n", err); } } for (int i = 0; i < opt.step_n; i++) { rc = parse_step(opt.step[i], r, err); if (rc) { fprintf(stderr, "ERROR: %s\n", err); } } if (opt.eval) { recipe * r_eval = eval(r); free_recipe(r); r = r_eval; } if (!rc) torcp(r); free_recipe(r); } return 0; }