int main(int argc, char* argv[]) { _debug_ = 0; samplecat_init(); gtk_init_check(&argc, &argv); type_init(); pixmaps_init(); icon_theme_init(); Window win; GLXContext ctx; GLboolean fullscreen = GL_FALSE; static int width = 400, height = 300; int i; for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-verbose") == 0) { _debug_ = 1; } #if 0 else if (strcmp(argv[i], "-swap") == 0 && i + 1 < argc) { swap_interval = atoi( argv[i+1] ); do_swap_interval = GL_TRUE; i++; } else if (strcmp(argv[i], "-forcegetrate") == 0) { /* This option was put in because some DRI drivers don't support the * full GLX_OML_sync_control extension, but they do support * glXGetMscRateOML. */ force_get_rate = GL_TRUE; } #endif else if (strcmp(argv[i], "-fullscreen") == 0) { fullscreen = GL_TRUE; } else if (strcmp(argv[i], "-help") == 0) { printf("Usage:\n"); printf(" glx [options]\n"); printf("Options:\n"); printf(" -help Print this information\n"); printf(" -verbose Output info to stdout\n"); printf(" -swap N Swap no more than once per N vertical refreshes\n"); printf(" -forcegetrate Try to use glXGetMscRateOML function\n"); printf(" -fullscreen Full-screen window\n"); return 0; } } Display* dpy = XOpenDisplay(NULL); if(!dpy){ printf("Error: couldn't open display %s\n", XDisplayName(NULL)); return -1; } int screen = DefaultScreen(dpy); make_window(dpy, "Samplcecat", (XDisplayWidth(dpy, screen) - width) / 2, (XDisplayHeight(dpy, screen) - height) / 2, width, height, fullscreen, &win, &ctx); agl_get_extensions(); glx_init(dpy); g_main_loop_new(NULL, true); scene = (AGlRootActor*)agl_actor__new_root_(CONTEXT_TYPE_GLX); void scene_needs_redraw(AGlScene* scene, gpointer _){ need_draw = true; } scene->draw = scene_needs_redraw; gboolean add_content(gpointer _) { app->config_ctx.filename = g_strdup_printf("%s/.config/" PACKAGE "/" PACKAGE, g_get_home_dir()); config_load(&app->config_ctx, &app->config); if (app->config.database_backend && can_use(samplecat.model->backends, app->config.database_backend)) { #define list_clear(L) g_list_free(L); L = NULL; list_clear(samplecat.model->backends); samplecat_model_add_backend(app->config.database_backend); } db_init( #ifdef USE_MYSQL &app->config.mysql #else NULL #endif ); if (!db_connect()) { g_warning("cannot connect to any database.\n"); return EXIT_FAILURE; } samplecat_list_store_do_search((SamplecatListStore*)samplecat.store); Waveform* w = NULL; WaveformCanvas* wfc = wf_context_new(scene); agl_actor__add_child((AGlActor*)scene, actors.bg = background_actor(NULL)); actors.bg->region.x2 = 1; actors.bg->region.y2 = 1; agl_actor__add_child((AGlActor*)scene, actors.search = search_view(NULL)); agl_actor__add_child((AGlActor*)scene, actors.list = list_view(NULL)); agl_actor__add_child((AGlActor*)scene, actors.wave = (AGlActor*)wf_canvas_add_new_actor(wfc, w)); void scene_set_size(AGlActor* scene) { #define SPACING 2 int vspace = scene->region.y2 - 40; int y = 20; int h = search_view_height((SearchView*)actors.search); actors.search->region = (AGliRegion){20, y, scene->region.x2 - 20, y + h}; agl_actor__set_size(actors.search); vspace -= h + SPACING; y += h + SPACING; actors.list->region = (AGliRegion){20, y, scene->region.x2 - 20, y + vspace / 2}; vspace -= vspace / 2; y += vspace; agl_actor__set_size(actors.list); // clear cache actors.wave->region = (AGliRegion){ 20, y, scene->region.x2 - 20, y + vspace }; wf_actor_set_rect((WaveformActor*)actors.wave, &(WfRectangle){ 0.0, 0.0, agl_actor__width(actors.wave), agl_actor__height(actors.wave) }); need_draw = true; }
static int view_driver(struct view *view, enum request request) { int i; if (request == REQ_NONE) return TRUE; if (request >= REQ_RUN_REQUESTS) { request = open_run_request(view, request); // exit quickly rather than going through view_request and back if (request == REQ_QUIT) return FALSE; } request = view_request(view, request); if (request == REQ_NONE) return TRUE; switch (request) { case REQ_MOVE_UP: case REQ_MOVE_DOWN: case REQ_MOVE_PAGE_UP: case REQ_MOVE_PAGE_DOWN: case REQ_MOVE_FIRST_LINE: case REQ_MOVE_LAST_LINE: move_view(view, request); break; case REQ_SCROLL_FIRST_COL: case REQ_SCROLL_LEFT: case REQ_SCROLL_RIGHT: case REQ_SCROLL_LINE_DOWN: case REQ_SCROLL_LINE_UP: case REQ_SCROLL_PAGE_DOWN: case REQ_SCROLL_PAGE_UP: case REQ_SCROLL_WHEEL_DOWN: case REQ_SCROLL_WHEEL_UP: scroll_view(view, request); break; case REQ_VIEW_GREP: open_grep_view(view); break; case REQ_VIEW_MAIN: case REQ_VIEW_DIFF: case REQ_VIEW_LOG: case REQ_VIEW_TREE: case REQ_VIEW_HELP: case REQ_VIEW_BRANCH: case REQ_VIEW_BLAME: case REQ_VIEW_BLOB: case REQ_VIEW_STATUS: case REQ_VIEW_STAGE: case REQ_VIEW_PAGER: case REQ_VIEW_STASH: open_view(view, request, OPEN_DEFAULT); break; case REQ_NEXT: case REQ_PREVIOUS: if (view->parent) { int line; view = view->parent; line = view->pos.lineno; view_request(view, request); move_view(view, request); if (view_is_displayed(view)) update_view_title(view); if (line != view->pos.lineno) view_request(view, REQ_ENTER); } else { move_view(view, request); } break; case REQ_VIEW_NEXT: { int nviews = displayed_views(); int next_view = (current_view + 1) % nviews; if (next_view == current_view) { report("Only one view is displayed"); break; } current_view = next_view; /* Blur out the title of the previous view. */ update_view_title(view); report_clear(); break; } case REQ_REFRESH: report("Refreshing is not supported by the %s view", view->name); break; case REQ_PARENT: report("Moving to parent is not supported by the the %s view", view->name); break; case REQ_BACK: report("Going back is not supported for by %s view", view->name); break; case REQ_MAXIMIZE: if (displayed_views() == 2) maximize_view(view, TRUE); break; case REQ_OPTIONS: case REQ_TOGGLE_LINENO: case REQ_TOGGLE_DATE: case REQ_TOGGLE_AUTHOR: case REQ_TOGGLE_FILENAME: case REQ_TOGGLE_GRAPHIC: case REQ_TOGGLE_REV_GRAPH: case REQ_TOGGLE_REFS: case REQ_TOGGLE_CHANGES: case REQ_TOGGLE_IGNORE_SPACE: case REQ_TOGGLE_ID: case REQ_TOGGLE_FILES: case REQ_TOGGLE_TITLE_OVERFLOW: case REQ_TOGGLE_FILE_SIZE: case REQ_TOGGLE_UNTRACKED_DIRS: case REQ_TOGGLE_VERTICAL_SPLIT: { char action[SIZEOF_STR] = ""; enum view_flag flags = toggle_option(view, request, action); if (flags == VIEW_FLAG_RESET_DISPLAY) { resize_display(); redraw_display(TRUE); } else { foreach_displayed_view(view, i) { if (view_has_flags(view, flags) && !view->unrefreshable) reload_view(view); else redraw_view(view); } } if (*action) report("%s", action); } break; case REQ_TOGGLE_SORT_FIELD: case REQ_TOGGLE_SORT_ORDER: report("Sorting is not yet supported for the %s view", view->name); break; case REQ_DIFF_CONTEXT_UP: case REQ_DIFF_CONTEXT_DOWN: report("Changing the diff context is not yet supported for the %s view", view->name); break; case REQ_SEARCH: case REQ_SEARCH_BACK: search_view(view, request); break; case REQ_FIND_NEXT: case REQ_FIND_PREV: find_next(view, request); break; case REQ_STOP_LOADING: foreach_view(view, i) { if (view->pipe) report("Stopped loading the %s view", view->name), end_update(view, TRUE); } break; case REQ_SHOW_VERSION: report("tig-%s (built %s)", TIG_VERSION, __DATE__); return TRUE; case REQ_SCREEN_REDRAW: redraw_display(TRUE); break; case REQ_EDIT: report("Nothing to edit"); break; case REQ_ENTER: report("Nothing to enter"); break; case REQ_VIEW_CLOSE: /* XXX: Mark closed views by letting view->prev point to the * view itself. Parents to closed view should never be * followed. */ if (view->prev && view->prev != view) { maximize_view(view->prev, TRUE); view->prev = view; break; } /* Fall-through */ case REQ_QUIT: return FALSE; default: report("Unknown key, press %s for help", get_view_key(view, REQ_VIEW_HELP)); return TRUE; } return TRUE; }
static bool view_driver(struct view *view, enum request request) { int i; if (request == REQ_NONE) return true; if (request >= REQ_RUN_REQUESTS) { request = open_run_request(view, request); // exit quickly rather than going through view_request and back if (request == REQ_QUIT) return false; } request = view_request(view, request); if (request == REQ_NONE) return true; switch (request) { case REQ_MOVE_UP: case REQ_MOVE_DOWN: case REQ_MOVE_PAGE_UP: case REQ_MOVE_PAGE_DOWN: case REQ_MOVE_HALF_PAGE_UP: case REQ_MOVE_HALF_PAGE_DOWN: case REQ_MOVE_FIRST_LINE: case REQ_MOVE_LAST_LINE: move_view(view, request); break; case REQ_SCROLL_FIRST_COL: case REQ_SCROLL_LEFT: case REQ_SCROLL_RIGHT: case REQ_SCROLL_LINE_DOWN: case REQ_SCROLL_LINE_UP: case REQ_SCROLL_PAGE_DOWN: case REQ_SCROLL_PAGE_UP: case REQ_SCROLL_WHEEL_DOWN: case REQ_SCROLL_WHEEL_UP: scroll_view(view, request); break; case REQ_VIEW_GREP: open_grep_view(view); break; case REQ_VIEW_MAIN: open_main_view(view, OPEN_DEFAULT); break; case REQ_VIEW_DIFF: open_diff_view(view, OPEN_DEFAULT); break; case REQ_VIEW_LOG: open_log_view(view, OPEN_DEFAULT); break; case REQ_VIEW_TREE: open_tree_view(view, OPEN_DEFAULT); break; case REQ_VIEW_HELP: open_help_view(view, OPEN_DEFAULT); break; case REQ_VIEW_REFS: open_refs_view(view, OPEN_DEFAULT); break; case REQ_VIEW_BLAME: open_blame_view(view, OPEN_DEFAULT); break; case REQ_VIEW_BLOB: open_blob_view(view, OPEN_DEFAULT); break; case REQ_VIEW_STATUS: open_status_view(view, OPEN_DEFAULT); break; case REQ_VIEW_STAGE: open_stage_view(view, NULL, 0, OPEN_DEFAULT); break; case REQ_VIEW_PAGER: open_pager_view(view, OPEN_DEFAULT); break; case REQ_VIEW_STASH: open_stash_view(view, OPEN_DEFAULT); break; case REQ_NEXT: case REQ_PREVIOUS: if (view->parent) { int line; view = view->parent; line = view->pos.lineno; view_request(view, request); move_view(view, request); if (view_is_displayed(view)) update_view_title(view); if (line != view->pos.lineno) view_request(view, REQ_ENTER); } else { move_view(view, request); } break; case REQ_VIEW_NEXT: { int nviews = displayed_views(); int next_view = nviews ? (current_view + 1) % nviews : current_view; if (next_view == current_view) { report("Only one view is displayed"); break; } current_view = next_view; /* Blur out the title of the previous view. */ update_view_title(view); report_clear(); break; } case REQ_REFRESH: report("Refreshing is not supported by the %s view", view->name); break; case REQ_PARENT: report("Moving to parent is not supported by the %s view", view->name); break; case REQ_BACK: report("Going back is not supported by the %s view", view->name); break; case REQ_MAXIMIZE: if (displayed_views() == 2) maximize_view(view, true); break; case REQ_OPTIONS: toggle_option(view); break; case REQ_SEARCH: case REQ_SEARCH_BACK: search_view(view, request); break; case REQ_FIND_NEXT: case REQ_FIND_PREV: find_next(view, request); break; case REQ_MOVE_NEXT_MERGE: case REQ_MOVE_PREV_MERGE: report("Moving between merge commits is not supported by the %s view", view->name); break; case REQ_STOP_LOADING: foreach_view(view, i) { if (view->pipe) report("Stopped loading the %s view", view->name), end_update(view, true); } break; case REQ_SHOW_VERSION: report("tig-%s (built %s)", TIG_VERSION, __DATE__); return true; case REQ_SCREEN_REDRAW: redraw_display(true); break; case REQ_EDIT: report("Nothing to edit"); break; case REQ_ENTER: report("Nothing to enter"); break; case REQ_VIEW_CLOSE: /* XXX: Mark closed views by letting view->prev point to the * view itself. Parents to closed view should never be * followed. */ if (view->prev && view->prev != view) { maximize_view(view->prev, true); view->prev = view; watch_unregister(&view->watch); view->parent = NULL; break; } /* Fall-through */ case REQ_QUIT: return false; default: report("Unknown key, press %s for help", get_view_key(view, REQ_VIEW_HELP)); return true; } return true; }
int main (int argc, char* argv[]) { int optc, optindex; short filter, pact, ppri, pday, pmonth, pyear, pfin; char padded[T_S_ADDED], pdue[T_S_DUE], pfinished[T_S_FINISHED], pproject[T_S_PROJECT], pdescription[T_S_DESCRIPTION]; bask_core tcore; bask_theme btheme; bask_priority* bprioritys = NULL; bask_filter bfilter; struct bask_task* first = NULL; struct option long_options[] = { {"help", no_argument, 0, B_CMD_ARG_HELP}, {"about", no_argument, 0, B_CMD_ARG_ABOUT}, {"day", required_argument, 0, B_CMD_ARG_DAY}, {"month", required_argument, 0, B_CMD_ARG_MONTH}, {"year", required_argument, 0, B_CMD_ARG_YEAR}, {"due", required_argument, 0, B_CMD_ARG_DUE}, {"today", no_argument, 0, B_CMD_ARG_TODAY}, {0,0,0,0} }; optindex = filter = tcore.priority_min = tcore.priority_max = 0; ppri = pact = pday = pmonth = pyear = pfin = -1; strcpy (padded, ""); strcpy (pdue, ""); strcpy (pfinished, ""); strcpy (pproject, ""); strcpy (pdescription, ""); strcpy (tcore.path_baskpath, secure_getenv("HOME")); if (tcore.path_baskpath == NULL || *tcore.path_baskpath == '\0') { errors_homedirnotgot (); exit (EXIT_FAILURE); } strcat (tcore.path_baskpath, "/.local/share/bask/"); bask_get_baskpath (&tcore, tcore.path_baskconf, BASKCONFFILE); bask_get_baskpath (&tcore, tcore.path_basktheme, BASKTHEMEFILE); bask_get_baskpath (&tcore, tcore.path_baskbin, BASKBINFILE); config_init (&tcore); /* NOTE: These are cmd's that don't need the tasks data, so it wont be loaded. */ if (argc <= 1) { usage (); exit (EXIT_FAILURE); } else if (argc == 2) { if (utils_streq (argv[optind], B_CMD_HELP) == 0) { print_help (); exit (EXIT_SUCCESS); } else if (utils_streq (argv[optind], B_CMD_ABOUT) == 0) { print_about (); exit (EXIT_SUCCESS); } else if (utils_streq (argv[optind], B_CMD_INIT) == 0) { bask_init_local (&tcore); exit (EXIT_SUCCESS); } } else if (argc == 3) { if (utils_streq (argv[optind], B_CMD_INIT) == 0) { if (utils_streq (argv[optind+1], B_CMD_BASKCONF) == 0) { /* Saving the default values and exit. */ config_save (&tcore); exit (EXIT_SUCCESS); } else if (utils_streq (argv[optind+1], B_CMD_BASKBIN) == 0) { bask_init_baskbin (&tcore); exit (EXIT_SUCCESS); } else if (utils_streq (argv[optind+1], B_CMD_BASKTHEME) == 0) { bask_init_basktheme (&tcore); exit (EXIT_SUCCESS); } } } config_load (&tcore); ui_theme_load (&tcore, &btheme); /* Default Prioritys */ priority_create (&tcore, &bprioritys, 0, btheme.color_normal, "L", "Normal"); priority_create (&tcore, &bprioritys, 1, btheme.color_important, "I", "Important"); priority_create (&tcore, &bprioritys, 2, btheme.color_today, "T", "Today"); priority_create (&tcore, &bprioritys, 3, btheme.color_critical, "C", "Critical"); while ((optc = getopt_long (argc, argv, "p:P:a:D:F:A:s:fh", long_options, &optindex)) != -1) { switch (optc) { case 'p': ppri = priority_get_idfromstr (&bprioritys, optarg); break; case 'P': if (strlen (optarg) < sizeof (pproject)) { strcpy (pproject, optarg); } break; case 'a': if (utils_atos (&pact, optarg) == -2 || ISBOOL (pact) != TRUE) { errors_outofrange_int ("-a", FALSE, TRUE); } break; case 'D': if (strlen (optarg) < sizeof (pdescription)) { strcpy (pdescription, optarg); } break; case 'F': time_get_str_described (pfinished, sizeof (pfinished), optarg); break; case 'A': time_get_str_described (padded, sizeof (padded), optarg); break; case 's': if (utils_atos (&pfin, optarg) == -2 || ISBOOL (pfin) != TRUE) { errors_outofrange_int ("-s", FALSE, TRUE); } break; case 'f': filter = TRUE; break; case B_CMD_ARG_HELP: print_help (); exit (EXIT_SUCCESS); break; case B_CMD_ARG_ABOUT: print_about (); exit (EXIT_SUCCESS); break; case B_CMD_ARG_DAY: if (utils_atos (&pday, optarg) == -2 || pday < 1 || pday > 31) { errors_outofrange_int ("--day", 1, 31); } break; case B_CMD_ARG_MONTH: if (utils_atos (&pmonth, optarg) == -2 || pmonth < 1 || pmonth > 12) { errors_outofrange_int ("--month", 1, 12); } break; case B_CMD_ARG_YEAR: if (utils_atos (&pyear, optarg) == -2) { errors_outofrange_int ("--year", SHRT_MIN, SHRT_MAX); } break; case B_CMD_ARG_DUE: time_get_str_described (pdue, sizeof (pdue), optarg); break; case B_CMD_ARG_TODAY: /* TODO: Improve this. */ if (time_get_str (padded, sizeof (padded)) == 0) { pday = (short) time_get_day (padded); pmonth = (short) time_get_month (padded); pyear = (short) time_get_year (padded); } break; default: break; } } if (filter == TRUE) { filter_init (&bfilter, pact, pfin, ppri, pday, pmonth, pyear); } else { filter_init (&bfilter, TRUE, -1, -1, -1, -1, -1); } bask_init (&tcore, &first); if (optind > 1) { if (argc-optind == 1) { if (utils_streq (argv[optind], B_CMD_LIST) == 0) { view_tasklist (&tcore, &btheme, &bprioritys, &first, &bfilter); } else if (utils_streq (argv[optind], B_CMD_SUMMARY) == 0) { view_summary (&tcore, &btheme, &first, &bfilter); } else if (utils_streq (argv[optind], B_CMD_HISTORY) == 0) { view_history (&tcore, &btheme, &first, &bfilter); } else { usage (); } } else if (argc-optind == 2) { if (utils_streq (argv[optind], B_CMD_MOD) == 0) { task_modificate_cmd (&tcore, &first, atoi (argv[optind+1]), pact, -1, ppri, padded, pdue, pfinished, pproject, pdescription); } else if (utils_streq (argv[optind], B_CMD_SEARCH) == 0) { search_view (&tcore, &btheme, &bprioritys, &bfilter, &first, argv[optind+1], BVIEW_TASKLIST); } else { usage (); } } else if (argc-optind == 3) { if (utils_streq (argv[optind], B_CMD_SEARCH) == 0) { if (utils_streq (argv[optind+1], B_CMD_TASKLIST) == 0) { search_view (&tcore, &btheme, &bprioritys, &bfilter, &first, argv[optind+2], BVIEW_TASKLIST); } else if (utils_streq (argv[optind+1], B_CMD_SUMMARY) == 0) { search_view (&tcore, &btheme, &bprioritys, &bfilter, &first, argv[optind+2], BVIEW_SUMMARY); } else if (utils_streq (argv[optind+1], B_CMD_DETAILED) == 0) { search_view (&tcore, &btheme, &bprioritys, &bfilter, &first, argv[optind+2], BVIEW_DETAILED); } else { usage (); } } } else { usage (); } } else if (argc == 2) { if (utils_streq (argv[optind], B_CMD_LIST) == 0) { view_tasklist (&tcore, &btheme, &bprioritys, &first, &bfilter); } else if (utils_streq (argv[optind], B_CMD_SUMMARY) == 0) { view_summary (&tcore, &btheme, &first, &bfilter); } else if (utils_streq (argv[optind], B_CMD_HISTORY) == 0) { /* This allows History to use all tasks including the hidden ones. */ filter_init (&bfilter, -1, -1, -1, -1, -1, -1); view_history (&tcore, &btheme, &first, &bfilter); } else { usage (); } } else if (argc == 3) { if (utils_streq (argv[optind], B_CMD_FINISH) == 0) { task_finish_cmd (&tcore, &first, atoi (argv[optind+1])); } else if (utils_streq (argv[optind], B_CMD_REMOVE) == 0) { task_remove_cmd (&tcore, &first, atoi (argv[optind+1])); } else if (utils_streq (argv[optind], B_CMD_SEARCH) == 0) { search_view (&tcore, &btheme, &bprioritys, &bfilter, &first, argv[optind+1], BVIEW_TASKLIST); } else if (utils_streq (argv[optind], B_CMD_STOP) == 0) { task_deactivate_cmd (&tcore, &first, atoi (argv[optind+1])); } else if (utils_streq (argv[optind], B_CMD_SHOW) == 0) { view_single (&tcore, &first, &bfilter, atoi (argv[optind+1]), FALSE); } else if (utils_streq (argv[optind], B_CMD_EXPORT) == 0) { export_baskbin_cmd (&tcore, &first, argv[optind+1]); } else if (utils_streq (argv[optind], B_CMD_IMPORT) == 0) { import_baskbin_cmd (&tcore, &first, argv[optind+1]); } else if (utils_streq (argv[optind], B_CMD_CONFIG) == 0) { config_set_str_cmd (&tcore, argv[optind+1]); } else { usage (); } } else if (argc == 4) { if (utils_streq (argv[optind], B_CMD_SEARCH) == 0) { if (utils_streq (argv[optind+1], B_CMD_TASKLIST) == 0) { search_view (&tcore, &btheme, &bprioritys, &bfilter, &first, argv[optind+2], BVIEW_TASKLIST); } else if (utils_streq (argv[optind+1], B_CMD_SUMMARY) == 0) { search_view (&tcore, &btheme, &bprioritys, &bfilter, &first, argv[optind+2], BVIEW_SUMMARY); } else if (utils_streq (argv[optind+1], B_CMD_DETAILED) == 0) { search_view (&tcore, &btheme, &bprioritys, &bfilter, &first, argv[optind+2], BVIEW_DETAILED); } else { usage (); } } else if (utils_streq (argv[optind], B_CMD_EXPORT) == 0) { if (utils_streq (argv[optind+1], B_CMD_BASKBIN) == 0) { export_baskbin_cmd (&tcore, &first, argv[optind+2]); } else if (utils_streq (argv[optind+1], B_CMD_CSV) == 0) { export_csv_cmd (&tcore, &first, argv[optind+2]); } else if (utils_streq (argv[optind+1], B_CMD_ICAL) == 0) { export_ical_cmd (&tcore, &first, argv[optind+2]); } else if (utils_streq (argv[optind+1], B_CMD_WEB) == 0) { export_web (&tcore, &first, argv[optind+2]); } else { usage (); } } else if (utils_streq (argv[optind], B_CMD_IMPORT) == 0) { if (utils_streq (argv[optind+1], B_CMD_BASKBIN) == 0) { import_baskbin_cmd (&tcore, &first, argv[optind+2]); } else if (utils_streq (argv[optind+1], B_CMD_CSV) == 0) { import_csv_cmd (&tcore, &first, argv[optind+2]); } else if (utils_streq (argv[optind+1], B_CMD_ICAL) == 0) { import_ical_cmd (&tcore, &first, argv[optind+2]); } else { usage (); } } else if (utils_streq (argv[optind], B_CMD_DUE) == 0) { time_get_str_described (pdue, sizeof (pdue), argv[optind+2]); task_due_cmd (&tcore, &first, atoi (argv[optind+1]), pdue); } else { usage (); } } else if (argc == 5) { if (utils_streq (argv[optind], B_CMD_ADD) == 0) { task_create_cmd (&tcore, &first, priority_get_idfromstr (&bprioritys, argv[optind+1]), argv[optind+2], argv[optind+3]); } else { usage (); } } else { usage (); } config_save (&tcore); bask_unload (&bprioritys, &first); return 0; }