enum color {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
-void add(void){
- fp = fopen(TODOLIST, "a");
- if (fp != NULL){
- fputs(strcat(note,"\n"),fp);
- fclose(fp);
+void add(struct task t, int size){
+ int l,m,h,i;
+
+ h = linecount();
+ m = h / 2;
+ l = 0;
+
+ while (h != m && m != l){
+ i = strcmp(t.task,gettask().task);
+
+ if (i < 0) {
+ h = m;
+ } else if (i > 0) {
+ l = m;
+ } else {
+ dialogue("Task already on list",t.task, BLUE);
+ return;
+ }
+
+ m = (h + l)/2;
}
+
+ puttask(t);
+ return;
}
void rem(void){
free(c);
}
-int listcheck(void){
- char *s;
-
- fp = fopen(TODOLIST, "r");
- s = (char *) malloc(MAXLINE * sizeof(char));
-
- while (fgets(s, MAXLINE, fp) != NULL){
- s[strlen(s) - 1] = 0;
- if (strcmp(note, s) == 0){
- free(s);
- return 1;
- }
- }
- free(s);
- return 0;
-}
#include "odot.h"
enum color {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
+extern FILE *fp;
int listcheck(struct task t){
return NULL;
}
-int linecount(FILE *fp){
+int linecount(void){
int i = 0;
char c;
while ((c = fgetc(fp)) != EOF){
free(c);
}
-
- if (strlen(o) == 0)
- o = (listcheck() == 0) ? "n" : "d";
}
extern int urgency;
int main(int argc, char *argv[]){
- char op;
- int length,i;
- struct task t;
- note = (char *) malloc(MAXLINE * sizeof(char));
- o = (char *) malloc (3 * sizeof(char));
- t = maketask(argc, argv);
- getopt(argc, argv);
-
- for (i = 0; i < strlen(o); i++)
- switch (o[i]) {
- case 'n':
- if (listcheck(t) == 0){
- add();
- printf("\033[32mAdded to list\033[0m: %s\n", note);
- } else {
- printf("\033[33mAlready on list\033[0m: %s\nRemove from list? (y/\033[1mn\033[0m): ", note);
- if (getchar() == 'y')
- rem();
- }
- break;
- case 'd':
- if (listcheck(t) == 1) {
- rem();
- printf("\033[36mRemoved from list\033[0m: %s\n", note);
- } else {
- printf("\033[31mNot on list\033[0m: %s\nAdd to list? (y/\033[1mn\033[0m): ", note);
- if (getchar() == 'y')
- add();
- }
- break;
- case 's':
- printf("\n\tTODO LIST:\n");
- show();
- break;
- }
- free(note);
return 0;
}
char *getnote(int, char *[]);
void getopt(int, char *[]);
-void add(void);
+void add(struct task, int);
void rem(void);
void show(void);
void error(char);
-struct task maketask(int n, char **arg);
+int linecount(void);
+void dialogue(char *, char *, int);
+
+struct task maketask(char *, char *);
void puttask(struct task n);
struct task gettask(void);
extern FILE *fp;
-struct task maketask(int n, char **arg){
- struct task temp;
+struct task maketask(char *task, char *group){
+ struct task tmp;
- temp.task = getnote(n,arg);
- temp.length = strlen(temp.task);
- temp.date = gettime();
- temp.due = 0;
- temp.urgency = urgency;
+ tmp.task = task;
+ tmp.date = 0;
+ tmp.group = group;
- return temp;
+ return tmp;
}
void puttask(struct task n){
- fprintf(fp, "%i\t%s\t%s\t%s\t%i\n",n.length,n.task,n.date,n.due,n.urgency);
+ fprintf(fp, "%s\t%i\t%s\n",n.task,n.date,n.group);
}
struct task gettask(void){
struct task tmp;
- fscanf(fp,"%i\t%s\t%s\t%s\t%i\n",&tmp.length,tmp.task,tmp.date,tmp.due,&tmp.urgency);
+ fscanf(fp,"%s\t%i\t%s\n",tmp.task,&tmp.date,tmp.group);
return tmp;
}
enum color {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
-void add(void){
- fp = fopen(TODOLIST, "a");
- if (fp != NULL){
- fputs(strcat(note,"\n"),fp);
- fclose(fp);
+void add(struct task t, int size){
+ int l,m,h,i;
+
+ h = linecount();
+ m = h / 2;
+ l = 0;
+
+ while (h != m && m != l){
+ i = strcmp(t.task,gettask().task);
+
+ if (i < 0) {
+ h = m;
+ } else if (i > 0) {
+ l = m;
+ } else {
+ dialogue("Task already on list",t.task, BLUE);
+ return;
+ }
+
+ m = (h + l)/2;
}
+
+ puttask(t);
+ return;
}
void rem(void){
free(c);
}
-int listcheck(void){
- char *s;
-
- fp = fopen(TODOLIST, "r");
- s = (char *) malloc(MAXLINE * sizeof(char));
-
- while (fgets(s, MAXLINE, fp) != NULL){
- s[strlen(s) - 1] = 0;
- if (strcmp(note, s) == 0){
- free(s);
- return 1;
- }
- }
- free(s);
- return 0;
-}
#include "odot.h"
enum color {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
+extern FILE *fp;
int listcheck(struct task t){
return NULL;
}
-int linecount(FILE *fp){
+int linecount(void){
int i = 0;
char c;
while ((c = fgetc(fp)) != EOF){
free(c);
}
-
- if (strlen(o) == 0)
- o = (listcheck() == 0) ? "n" : "d";
}
extern int urgency;
int main(int argc, char *argv[]){
- char op;
- int length,i;
- struct task t;
- note = (char *) malloc(MAXLINE * sizeof(char));
- o = (char *) malloc (3 * sizeof(char));
- t = maketask(argc, argv);
- getopt(argc, argv);
-
- for (i = 0; i < strlen(o); i++)
- switch (o[i]) {
- case 'n':
- if (listcheck(t) == 0){
- add();
- printf("\033[32mAdded to list\033[0m: %s\n", note);
- } else {
- printf("\033[33mAlready on list\033[0m: %s\nRemove from list? (y/\033[1mn\033[0m): ", note);
- if (getchar() == 'y')
- rem();
- }
- break;
- case 'd':
- if (listcheck(t) == 1) {
- rem();
- printf("\033[36mRemoved from list\033[0m: %s\n", note);
- } else {
- printf("\033[31mNot on list\033[0m: %s\nAdd to list? (y/\033[1mn\033[0m): ", note);
- if (getchar() == 'y')
- add();
- }
- break;
- case 's':
- printf("\n\tTODO LIST:\n");
- show();
- break;
- }
- free(note);
return 0;
}
char *getnote(int, char *[]);
void getopt(int, char *[]);
-void add(void);
+void add(struct task, int);
void rem(void);
void show(void);
void error(char);
-struct task maketask(int n, char **arg);
+int linecount(void);
+void dialogue(char *, char *, int);
+
+struct task maketask(char *, char *);
void puttask(struct task n);
struct task gettask(void);
extern FILE *fp;
-struct task maketask(int n, char **arg){
- struct task temp;
+struct task maketask(char *task, char *group){
+ struct task tmp;
- temp.task = getnote(n,arg);
- temp.length = strlen(temp.task);
- temp.date = gettime();
- temp.due = 0;
- temp.urgency = urgency;
+ tmp.task = task;
+ tmp.date = 0;
+ tmp.group = group;
- return temp;
+ return tmp;
}
void puttask(struct task n){
- fprintf(fp, "%i\t%s\t%s\t%s\t%i\n",n.length,n.task,n.date,n.due,n.urgency);
+ fprintf(fp, "%s\t%i\t%s\n",n.task,n.date,n.group);
}
struct task gettask(void){
struct task tmp;
- fscanf(fp,"%i\t%s\t%s\t%s\t%i\n",&tmp.length,tmp.task,tmp.date,tmp.due,&tmp.urgency);
+ fscanf(fp,"%s\t%i\t%s\n",tmp.task,&tmp.date,tmp.group);
return tmp;
}