#include #include "src/util.h" #include "src/parser.h" #include "src/search.h" #include "src/eval.h" recipe ** cookbook; static struct opts { int json; int html; int rcp; char query[2048]; int eval; int list; int search; int search_strict; int help; } opt = { .json = 0, .html = 0, .rcp = 0, .query = "", .eval = 1, .list = 0, .search = 0, .search_strict = 0, .help = 0, }; void print_help(char * argv0) { printf("%s [OPTION] FILE ...\n", argv0); printf("OPTIONS:\n"); printf("--format json,html,rcp\n"); printf("--to-{json,html,rcp}\n"); printf("-j json\n"); printf("-w html\n"); printf("-r rcp\n"); printf("-l, --list-ingredients\n"); printf("-s TERMS, --search TERMS\n"); printf("-S TERMS, --strict TERMS\n"); printf("-n, --no-eval\n"); } int main(int argc, char * argv[]) { fdebug("--- Debug mode is on ---\n"); int c; while (1) { static struct option long_options[] = { /* These options set a flag. */ // {"verbose", no_argument, &verbose_flag, 1}, // {"brief", no_argument, &verbose_flag, 0}, {"help", no_argument, 0, 'h'}, {"no-eval", no_argument, 0, 'n'}, {"to-json", no_argument, 0, 'j'}, {"to-html", no_argument, 0, 'w'}, {"to-rcp", no_argument, 0, 'r'}, {"format", required_argument, 0, 'f'}, {"search", required_argument, 0, 's'}, {"strict", required_argument, 0, 'S'}, {"list-ingredients", no_argument, 0, 'l'}, // {"to-rcp", required_argument, 0, 'r'}, {0, 0, 0, 0} }; int option_index = 0; c = getopt_long (argc, argv, "jnlhrwf:s:S:", long_options, &option_index); if (c == -1) break; switch (c) { case 0: if (long_options[option_index].flag != 0) break; printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case 'f': if (!strcmp(optarg, "json")) opt.json = 1; else if (!strcmp(optarg, "rcp")) opt.rcp = 1; else if (!strcmp(optarg, "html")) opt.html = 1; else fprintf(stderr, "invalid format: %s\n", optarg); break; case 's': opt.search = 1; strcpy(opt.query, optarg); break; case 'S': opt.search = 1; opt.search_strict = 1; strcpy(opt.query, optarg); break; case 'j': opt.json = 1; break; case 'w': opt.html = 1; break; case 'r': opt.rcp = 1; break; case 'l': opt.list = 1; break; case 'h': opt.help = 1; break; case 'n': opt.eval = 0; break; case '?': return -1; break; default: abort (); } } if (opt.help) { print_help(argv[0]); return 0; } if (optind < argc) { while (optind < argc) { recipe * r = parse(argv[optind++], NULL); if (r) { if (opt.search) { if (!query_for_items(r, opt.query, opt.search_strict)) continue; } if (opt.eval) { recipe * r_eval = eval(r); free_recipe(r); r = r_eval; } if (opt.list) { pprint_items(r); } else { if (opt.json) tojson(r); if (opt.html) tohtml(r); if (opt.rcp) torcp(r); } free_recipe(r); } } } else { fprintf(stderr, "Specify filenames\n"); } return 0; }