diff options
Diffstat (limited to 'todo.c')
-rw-r--r-- | todo.c | 62 |
1 files changed, 61 insertions, 1 deletions
@@ -59,7 +59,7 @@ int bbs_todo( term_screen *ts, const char *fname) { term_clr_scr( ts ); term_cur_set_c( ts, 0 ); - printf("(Q)uit"); fflush( stdout ); + printf("(A)dd,(Q)uit"); fflush( stdout ); //dispaly todo list row = term_get_maxrow( ts ); @@ -95,6 +95,11 @@ int bbs_todo( term_screen *ts, const char *fname) quit_loop = 1; break; + case 'a': + case 'A': + bbs_todo_add( ts, todo_list, todo_fname ); + break; + case 's': case 'S': { @@ -119,4 +124,59 @@ int bbs_todo( term_screen *ts, const char *fname) return ret; } +int bbs_todo_add( term_screen *ts, List *todo, const char *fname) +{ + int ret = -1; + int fret = -1; + const int buf_size = 64; + char buf[buf_size]; + + if ( ts == NULL ) + return -1; + + if ( fname == NULL ) + return -1; + + term_clr_scr( ts ); + term_cur_set_c( ts, 0 ); + term_cur_set_r( ts, 0 ); + printf("Add new todo task:\n"); fflush( stdout ); + + memset( buf, 0, buf_size ); + term_cur_set_c( ts, 0 ); + fret = term_readline( ts, buf, buf_size, READLINE_ALPHA ); + if ( fret > 0 ) + { + char *l = malloc( fret ); + memcpy( l, buf, fret ); + llist_push( todo, l ); + bbs_todo_save( fname, todo ); + ret = 0; + } else + { + return -1; + } + + return ret; +} + +int bbs_todo_save( const char *fname, List *todo ) +{ + int ret=-1; + + f_file *f=NULL; + struct ListNode *iter=todo->first; + + f = f_file_open( fname, F_FILE_WRITE ); + while ( iter->next != NULL ) + { + f_file_write( f, strlen(iter->val), iter->val ); + printf("%s\n", iter->val ); + iter = iter->next; + } + f_file_close( f ); + + return ret; +} + #endif
\ No newline at end of file |