summaryrefslogtreecommitdiffstats
path: root/cras.c
diff options
context:
space:
mode:
authorAriadna Vigo <arivigodr@gmail.com>2020-06-24 18:13:54 +0200
committerAriadna Vigo <arivigodr@gmail.com>2020-06-24 18:13:54 +0200
commit2cfc535d80a15536fd1a441ba725d5961cdf9d7c (patch)
tree52f68de70da909863717d1974853ea5e29e3f548 /cras.c
parent445bc4c3386d05513d3e140f2b02d2a1d2cd6543 (diff)
Cras now uses a filepath provided at the CLI
Diffstat (limited to 'cras.c')
-rw-r--r--cras.c69
1 files changed, 48 insertions, 21 deletions
diff --git a/cras.c b/cras.c
index b97aaa8..3462402 100644
--- a/cras.c
+++ b/cras.c
@@ -15,11 +15,20 @@ static char *argv0; /* Required here by arg.h */
#define TASK_TODO_STR "\033[31;1m[TODO]\033[0m"
#define TASK_DONE_STR "\033[32;1m[DONE]\033[0m"
+#define NUMARG_SIZE 5 /* 4 digits + '\0' for the numerical arg of -t/-T */
+
enum {
SHORT_OUTPUT,
LONG_OUTPUT
};
+enum {
+ DEF_MODE,
+ SET_MODE,
+ OUT_MODE,
+ MARK_MODE
+};
+
static void die(const char *fmt, ...);
static char *print_task_status(TaskLst tasks, int num);
static void print_short_output(TaskLst tasks);
@@ -31,13 +40,7 @@ static void read_user_input(TaskLst *tasks, FILE *fp);
static void usage(void);
static void set_tasks_mode(const char *crasfile);
static void output_mode(const char *crasfile, int mode);
-static void mark_tasks_mode(const char *crasfile, const char *id, int mode);
-
-/*
- * crasfile_path defined here just for testing. It will be moved later to
- * config.(def.)h
- */
-static char crasfile_path[] = "crasfile";
+static void mark_tasks_mode(const char *crasfile, const char *id, int value);
static void die(const char *fmt, ...)
{
@@ -170,7 +173,7 @@ output_mode(const char *crasfile, int mode)
}
static void
-mark_tasks_mode(const char *crasfile, const char *id, int mode)
+mark_tasks_mode(const char *crasfile, const char *id, int value)
{
int tasknum;
char *endptr;
@@ -178,13 +181,16 @@ mark_tasks_mode(const char *crasfile, const char *id, int mode)
tasknum = strtol(id, &endptr, 10);
if (endptr[0] != '\0')
- die("%s not a number", id);
+ die("'%s' not a number.", id);
tasklst_init(&tasks);
read_crasfile(&tasks, crasfile);
+ if (tasknum <= 0)
+ die("Task number must be greater than zero.");
+
if (tasknum <= tasklst_tasks_total(tasks))
- tasks.status[tasknum - 1] = mode;
+ tasks.status[tasknum - 1] = value;
else
die("Task #%d does not exist.", tasknum);
@@ -194,26 +200,47 @@ mark_tasks_mode(const char *crasfile, const char *id, int mode)
int
main(int argc, char *argv[])
{
+ char numarg[NUMARG_SIZE];
+ int mode, task_value;
+
+ mode = DEF_MODE;
ARGBEGIN {
case 's':
- set_tasks_mode(crasfile_path);
- return 0;
+ mode = SET_MODE;
+ break;
case 'o':
- output_mode(crasfile_path, SHORT_OUTPUT);
- return 0;
+ mode = OUT_MODE;
+ break;
case 't':
- mark_tasks_mode(crasfile_path, EARGF(usage()),
- TASK_DONE);
- return 0;
+ mode = MARK_MODE;
+ task_value = TASK_DONE;
+ strncpy(numarg, EARGF(usage()), NUMARG_SIZE);
+ break;
case 'T':
- mark_tasks_mode(crasfile_path, EARGF(usage()),
- TASK_TODO);
- return 0;
+ mode = MARK_MODE;
+ task_value = TASK_TODO;
+ strncpy(numarg, EARGF(usage()), NUMARG_SIZE);
+ break;
default:
usage(); /* usage() dies, so nothing else needed. */
} ARGEND;
+ if (argc <= 0)
+ usage();
+
+ switch (mode) {
+ case SET_MODE:
+ set_tasks_mode(argv[0]);
+ return 0;
+ case OUT_MODE:
+ output_mode(argv[0], SHORT_OUTPUT);
+ return 0;
+ case MARK_MODE:
+ mark_tasks_mode(argv[0], numarg, task_value);
+ return 0;
+ }
+
/* Default behavior: long-form output */
- output_mode(crasfile_path, LONG_OUTPUT);
+ output_mode(argv[0], LONG_OUTPUT);
return 0;
}