summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAriadna Vigo <arivigodr@gmail.com>2020-09-29 22:23:50 +0200
committerAriadna Vigo <arivigodr@gmail.com>2020-09-29 22:23:50 +0200
commit4b988a705808217595fa9df9fce0c0e1b6e9b0da (patch)
tree7995f683885bb62a3edcbe8c5aece6e130d47b8a
parent9400c00b9a7fb535b2a36edc5948bc3833cbc629 (diff)
New delete mode implemented
-rw-r--r--cras.c33
-rw-r--r--tasklst.c3
2 files changed, 35 insertions, 1 deletions
diff --git a/cras.c b/cras.c
index d86ab38..f733323 100644
--- a/cras.c
+++ b/cras.c
@@ -25,6 +25,7 @@ enum {
APP_MODE,
NEW_MODE,
OUT_MODE,
+ DLT_MODE,
MARK_MODE
};
@@ -40,6 +41,7 @@ static int store_input(TaskLst *list, FILE *fp);
static void usage(void);
static void input_mode(const char *crasfile, int append);
static void output_mode(const char *crasfile, int mode);
+static void delete_mode(const char *crasfile, const char *id);
static void mark_list_mode(const char *crasfile, const char *id, int value);
static void
@@ -185,7 +187,7 @@ store_input(TaskLst *list, FILE *fp)
static void
usage(void)
{
- die("usage: cras [-anov] [-tT num] file");
+ die("usage: cras [-anov] [-dtT num] file");
}
static void
@@ -233,6 +235,26 @@ output_mode(const char *crasfile, int mode)
}
static void
+delete_mode(const char *crasfile, const char *id)
+{
+ int tasknum;
+ char *endptr;
+ TaskLst list;
+
+ tasknum = strtol(id, &endptr, 10);
+ if (endptr[0] != '\0')
+ die("'%s' not a number.", id);
+
+ task_lst_init(&list);
+ read_crasfile(&list, crasfile);
+
+ task_lst_del_task(&list, tasknum - 1);
+ write_crasfile(crasfile, list);
+
+ task_lst_cleanup(&list);
+}
+
+static void
mark_list_mode(const char *crasfile, const char *id, int value)
{
int tasknum;
@@ -297,6 +319,12 @@ main(int argc, char *argv[])
die("Cras %s. See LICENSE file for copyright and license "
"details.", VERSION);
break;
+ case 'd':
+ if (mode != DEF_MODE)
+ usage();
+ mode = DLT_MODE;
+ strncpy(numarg, EARGF(usage()), NUMARG_SIZE);
+ break;
case 't':
if (mode != DEF_MODE)
usage();
@@ -328,6 +356,9 @@ main(int argc, char *argv[])
case OUT_MODE:
output_mode(argv[0], SHORT_OUTPUT);
return 0;
+ case DLT_MODE:
+ delete_mode(argv[0], numarg);
+ return 0;
case MARK_MODE:
mark_list_mode(argv[0], numarg, task_value);
return 0;
diff --git a/tasklst.c b/tasklst.c
index a684b2e..d22169e 100644
--- a/tasklst.c
+++ b/tasklst.c
@@ -159,6 +159,9 @@ task_lst_del_task(TaskLst *list, int i)
if (next != NULL)
next->prev = prev;
+ if (list->first == del)
+ list->first = next;
+
free(del);
return 0;