More task refactoring

This commit is contained in:
Mike Dvorkin
2010-07-27 21:12:56 -07:00
parent d2ad4c529d
commit 33d51d70b6

View File

@@ -3,6 +3,13 @@
#include <stdio.h> #include <stdio.h>
#include "pit.h" #include "pit.h"
static void task_list(char *name, char *status, char *priority, time_t deadline);
static void task_create(char *name, char *status, char *priority, time_t deadline);
static void task_show(ulong number);
static void task_delete(ulong number);
static void task_update(ulong number, char *name, char *status, char *priority, time_t deadline);
static void task_parse_options(char **arg, char **name, char **status, char **priority, time_t *deadline);
/* /*
** CREATING TASKS: ** CREATING TASKS:
** pit task -c name [-s status] [-d deadline] [-p priority] ** pit task -c name [-s status] [-d deadline] [-p priority]
@@ -14,13 +21,13 @@
** pit task -d [number] ** pit task -d [number]
** **
** VIEWING TASK: ** VIEWING TASK:
** pit task [[-v] number] ** pit task [[-q] number]
** **
** LISTING TASKS: ** LISTING TASKS:
** pit task -v [-s status] [-d deadline] [-p priority] ** pit task -q [-s status] [-d deadline] [-p priority]
*/ */
static void list_tasks(char *name, char *status, char *priority, time_t deadline) static void task_list(char *name, char *status, char *priority, time_t deadline)
{ {
pit_db_load(); pit_db_load();
@@ -35,7 +42,7 @@ static void list_tasks(char *name, char *status, char *priority, time_t deadline
} }
} }
static void create_task(char *name, char *status, char *priority, time_t deadline) static void task_create(char *name, char *status, char *priority, time_t deadline)
{ {
pit_db_load(); pit_db_load();
@@ -75,56 +82,39 @@ static void create_task(char *name, char *status, char *priority, time_t deadlin
} }
} }
static void show_task(ulong number) static void task_show(ulong number)
{ {
printf("show_task(%lu)\n", number); printf("task_show(%lu)\n", number);
} }
static void delete_task(ulong number) static void task_delete(ulong number)
{ {
printf("delete_task(%lu)\n", number); printf("task_delete(%lu)\n", number);
} }
static void update_task(ulong number, char *name, char *status, char *priority, time_t deadline) static void task_update(ulong number, char *name, char *status, char *priority, time_t deadline)
{ {
printf("update_task: #%lu, name: %s, status: %s, priority: %s, deadline: %s", number, name, status, priority, ctime(&deadline)); printf("task_update: #%lu, name: %s, status: %s, priority: %s, deadline: %s", number, name, status, priority, ctime(&deadline));
} }
static void get_status_priority_and_deadline(char **arg, char *status, char *priority, time_t *deadline) static void task_parse_options(char **arg, char **name, char **status, char **priority, time_t *deadline)
{ {
while(*++arg) { while(*++arg) {
switch(pit_arg_option(arg)) { switch(pit_arg_option(arg)) {
case 's': case 's':
status = pit_arg_string(++arg, "task status"); *status = pit_arg_string(++arg, "task status");
break; break;
case 'p': case 'p':
priority = pit_arg_string(++arg, "task priority"); *priority = pit_arg_string(++arg, "task priority");
break; break;
case 'd': case 'd':
*deadline = pit_arg_time(++arg, "task deadline"); *deadline = pit_arg_time(++arg, "task deadline");
break; break;
default:
die("invalid task option: %s", *arg);
}
}
}
static void get_name_status_priority_and_deadline(char **arg, char *name, char *status, char *priority, time_t *deadline)
{
while(*++arg) {
switch(pit_arg_option(arg)) {
case 'n': case 'n':
name = pit_arg_string(++arg, "task name"); if (name) {
break; *name = pit_arg_string(++arg, "task name");
case 's': break;
status = pit_arg_string(++arg, "task status"); } /* else fall though */
break;
case 'p':
priority = pit_arg_string(++arg, "task priority");
break;
case 'd':
*deadline = pit_arg_time(++arg, "task deadline");
break;
default: default:
die("invalid task option: %s", *arg); die("invalid task option: %s", *arg);
} }
@@ -139,42 +129,42 @@ int pit_task(char *argv[])
ulong number = 0L; ulong number = 0L;
if (!*arg) { if (!*arg) {
list_tasks(NULL, NULL, NULL, 0); /* List all tasks (with default paramaters). */ task_list(NULL, NULL, NULL, 0); /* List all tasks (with default paramaters). */
} else { /* pit task [number] */ } else { /* pit task [number] */
number = pit_arg_number(arg, NULL); number = pit_arg_number(arg, NULL);
if (number) { if (number) {
show_task(number); task_show(number);
} else { } else {
switch(pit_arg_option(arg)) { switch(pit_arg_option(arg)) {
case 'c': /* pit task -c name [-s status] [-p priority] [-d deadline] */ case 'c': /* pit task -c name [-s status] [-p priority] [-d deadline] */
name = pit_arg_string(++arg, "task name"); name = pit_arg_string(++arg, "task name");
get_status_priority_and_deadline(arg, status, priority, &deadline); task_parse_options(arg, NULL, &status, &priority, &deadline);
create_task(name, status, priority, deadline); task_create(name, status, priority, deadline);
break; break;
case 'u': /* pit task -u [number] [-n name] [-s status] [-d deadline] [-p priority] */ case 'u': /* pit task -u [number] [-n name] [-s status] [-d deadline] [-p priority] */
number = pit_arg_number(++arg, NULL); number = pit_arg_number(++arg, NULL);
if (!number) --arg; if (!number) --arg;
get_name_status_priority_and_deadline(arg, name, status, priority, &deadline); task_parse_options(arg, &name, &status, &priority, &deadline);
if (!name && !status && !priority && !deadline) { if (!name && !status && !priority && !deadline) {
die("nothing to update"); die("nothing to update");
} else { } else {
update_task(number, name, status, priority, deadline); task_update(number, name, status, priority, deadline);
} }
break; break;
case 'd': /* pit task -d [number] */ case 'd': /* pit task -d [number] */
number = pit_arg_number(++arg, NULL); number = pit_arg_number(++arg, NULL);
delete_task(number); task_delete(number);
break; break;
case 'v': /* pit task -v [number | [-n name] [-s status] [-d deadline] [-p priority]] */ case 'q': /* pit task -q [number | [-n name] [-s status] [-d deadline] [-p priority]] */
number = pit_arg_number(++arg, NULL); number = pit_arg_number(++arg, NULL);
if (number) { if (number) {
show_task(number); task_show(number);
} else { } else {
get_name_status_priority_and_deadline(--arg, name, status, priority, &deadline); task_parse_options(--arg, &name, &status, &priority, &deadline);
if (!name && !status && !priority && !deadline) { if (!name && !status && !priority && !deadline) {
show_task(0); task_show(0);
} else { } else {
list_tasks(name, status, priority, deadline); task_list(name, status, priority, deadline);
} }
} }
break; break;