X-Git-Url: http://pileus.org/git/?p=lackey;a=blobdiff_plain;f=src%2Fargs.c;fp=src%2Fargs.c;h=49fe2f104ace9edd92180ac5ae20137df57f0c46;hp=9ad0640351f706123fcd385e2c19e95bf9937031;hb=7edd7d3a9f0bdaaa8df9f68a73f7c84e2b514ce6;hpb=9a9c6808d386091c75bbc00b764d308034ac1c0f diff --git a/src/args.c b/src/args.c index 9ad0640..49fe2f1 100644 --- a/src/args.c +++ b/src/args.c @@ -19,29 +19,25 @@ #include #include -#include "args.h" #include "util.h" -#include "conf.h" +#include "args.h" #include "date.h" #include "cal.h" -/* Setup info */ -static int argc; -static char **argv; +/* Global data */ +int PRINT = 0; + +/* Local data */ +char **calendars = NULL; /* Options */ -const char *short_options = "hdw"; +static char *short_options = "hp::d"; struct option long_options[] = { - {"help", 0, NULL, 'h'}, - {"day", 2, NULL, 'd'}, - {"week", 2, NULL, 'w'}, + {"help", 0, NULL, 'h'}, + {"print", 2, NULL, 'p'}, }; -static int print_day = 0; -static int print_week = 0; -static char *calendar = NULL; - /* Usage */ static void usage(char *name) { @@ -49,20 +45,12 @@ static void usage(char *name) printf(" %s [OPTION...] [CALENDAR]\n", name); printf("\n"); printf("Options:\n"); - printf(" -h, --help Print usage information\n"); - printf(" -d, --day Show today's events\n"); - printf(" -w, --week Show this week's events\n"); -} - -/* Initialize */ -void args_setup(int _argc, char **_argv) -{ - argc = _argc; - argv = _argv; + printf(" -h, --help Print usage information\n"); + printf(" -p, --print=[dw] Show upcomming events\n"); } /* Initialize */ -void args_init(void) +void args_setup(int argc, char **argv) { /* Parse arguments */ while (1) { @@ -75,95 +63,43 @@ void args_init(void) usage(argv[0]); exit(0); break; - case 'd': - print_day = 1; - break; - case 'w': - print_week = 1; + case 'p': + PRINT = match(optarg, NULL) ? 1 : + match(optarg, "d") ? 1 : + match(optarg, "day") ? 1 : + match(optarg, "w") ? 7 : + match(optarg, "week") ? 7 : -1; break; } } /* Save default calendar */ - calendar = argv[optind]; - - /* Load calendars */ - for (int i = optind; i < argc; i++) - cal_config("ical", argv[i], "location", argv[i]); + calendars = &argv[optind]; /* Validate arguments */ - if (print_day && print_week) - error("Cannot print both day and week"); + if (PRINT < 0) + error("Unknown print: %s\n", optarg); + + /* Load calendars */ + for (int i = 0; calendars[i]; i++) + cal_config("ical", calendars[i], "location", calendars[i]); } -void args_main(void) +void args_start(void) { /* Focus the default calendar */ - if (calendar) { + if (calendars[0]) { event_t *event = EVENTS; date_t start = {SEL.year, SEL.month, SEL.day, 0, 0}; while (event && compare(&start, &event->start) > 0) event = event->next; - while (event && !match(calendar, event->cal->name)) + while (event && !match(calendars[0], event->cal->name)) event = event->next; if (!event) event = EVENTS; - while (event && !match(calendar, event->cal->name)) + while (event && !match(calendars[0], event->cal->name)) event = event->next; if (event) SEL = event->start; } - - /* Print days or week */ - if (print_day || print_week) { - event_t *event = EVENTS; - for (int d = 0; d < (print_day ? 1 : 7); d++) { - /* Get start and end of the day */ - date_t start = {SEL.year, SEL.month, SEL.day, 0, 0}; - date_t end = {SEL.year, SEL.month, SEL.day, 24, 0}; - - add_days(&start.year, &start.month, &start.day, d); - add_days(&end.year, &end.month, &end.day, d); - - /* Print day header */ - wday_t wday = day_of_week(start.year, start.month, start.day); - if (d > 0) - printf("\n"); - printf("%s, %s %d, %d\n", - day_to_string(wday), - month_to_string(start.month), - start.day+1, - start.year); - - /* Skip forward to the day */ - while (event && compare(&start, &event->start) > 0) - event = event->next; - - /* Print event info */ - int printed = 0; - while (event && compare(&end, &event->start) > 0) { - if (printed > 0) - printf("\n"); - printf("* %02d:%02d - %02d:%02d", - event->start.hour, event->start.min, - event->end.hour, event->end.min); - if (!event->name) - printf("\n"); - if (event->name) - printf(" %s\n", event->name); - if (event->loc) - printf(" Location: %s\n", event->loc); - if (event->desc) - printf(" Description: %s\n", event->desc); - printed++; - event = event->next; - } - - /* Print no events */ - if (!printed) - printf(" No events\n"); - } - - exit(0); - } }