diff options
-rw-r--r-- | articles.c | 20 | ||||
-rw-r--r-- | bbsconfig.h | 1 | ||||
-rw-r--r-- | captcha.c | 4 | ||||
-rw-r--r-- | door.c | 17 | ||||
-rw-r--r-- | door.h | 1 | ||||
-rw-r--r-- | file_use.c | 1 | ||||
-rw-r--r-- | libterm/term.c | 2 | ||||
-rw-r--r-- | libterm/term_io.c | 59 | ||||
-rw-r--r-- | libterm/term_io.h | 13 | ||||
-rw-r--r-- | microbbs.c | 31 | ||||
-rw-r--r-- | motd.c | 7 | ||||
-rw-r--r-- | sysinfo.c | 22 | ||||
-rw-r--r-- | todo.c | 30 | ||||
-rw-r--r-- | twit.c | 12 | ||||
-rw-r--r-- | user.c | 2 |
15 files changed, 143 insertions, 79 deletions
@@ -24,7 +24,7 @@ int bbs_article( term_screen *ts, const char *fname ) f = fopen( fname, "r" ); if ( f == NULL ) { - printf("Cannot open article file\n"); + term_printf( ts, "Cannot open article file\n"); return -1; } @@ -47,7 +47,7 @@ int bbs_article( term_screen *ts, const char *fname ) { term_cur_set_c( ts, 0 ); term_cur_set_r( ts, max_row ); - printf("(N)ext,(D)ump,(Q)uit:"); fflush( stdout ); + term_printf( ts, "(N)ext,(D)ump,(Q)uit:"); menu_input = term_getc( ts ); //if something whent wrong dont know why, need to get some test case @@ -76,7 +76,7 @@ int bbs_article( term_screen *ts, const char *fname ) while( (tmp_size = getline(&dump_line, &dump_line_size, f)) != -1 ) { term_cur_set_c( ts, 0 ); - printf("%s", dump_line); + term_printf( ts, "%s", dump_line); } FREE( dump_line ); term_getc( ts ); @@ -84,7 +84,7 @@ int bbs_article( term_screen *ts, const char *fname ) i = 0; break; default: - printf("Try more\n"); + term_printf( ts, "Try more\n"); } } @@ -160,7 +160,7 @@ int bbs_article_list( term_screen *ts, const char *dir_name ) free( eps ); } else { - printf("Err\n"); + term_printf( ts, "Err\n"); ERROR("Cannot open article directory\n"); } ret = 0; @@ -172,12 +172,12 @@ int bbs_article_list( term_screen *ts, const char *dir_name ) { term_clr_scr( ts ); term_cur_set_c( ts, 0 ); - printf("(L)ist articles,(R)read article,(Q)uit"); + term_printf( ts, "(L)ist articles,(R)read article,(Q)uit"); fflush( stdout ); term_cur_set_c( ts, 0 ); term_cur_set_r( ts, term_get_maxrow( ts ) ); - printf(":"); fflush( stdout ); + term_printf( ts, ":"); menu_input = term_getc( ts ); //if something whent wrong dont know why, need to get some test case @@ -206,7 +206,7 @@ int bbs_article_list( term_screen *ts, const char *dir_name ) //get stat structure and get filesize stat( iter->val, &art_stat );//no err check - printf( "[%02d] %s ( %ld bytes)\n", cnt, (char *)iter->val, art_stat.st_size ); + term_printf( ts, "[%02d] %s ( %ld bytes)\n", cnt, (char *)iter->val, art_stat.st_size ); cnt += 1; iter = iter->next; } @@ -219,7 +219,7 @@ int bbs_article_list( term_screen *ts, const char *dir_name ) //while there is no more 10 articles use only 1 number //TODO fix that term_cur_set_c( ts, 0 ); - printf("Input article number 1-9:"); fflush( stdout ); + term_printf( ts, "Input article number 1-9:"); int article_input = term_getc( ts ); //if something whent wrong dont know why, need to get some test case char article_number = (char)article_input-'0'; @@ -242,7 +242,7 @@ int bbs_article_list( term_screen *ts, const char *dir_name ) } break; default: - printf("Try more\n"); + term_printf( ts, "Try more\n"); } } //needed special care to free sds strings diff --git a/bbsconfig.h b/bbsconfig.h index 459aeae..e676b74 100644 --- a/bbsconfig.h +++ b/bbsconfig.h @@ -8,6 +8,7 @@ #include <unistd.h> #include <string.h> #include <assert.h> +#include <ctype.h> #define ASSERT assert @@ -9,6 +9,8 @@ int captcha_test1( term_screen *ts) { int ret = 0; + const int s_size = 2; + char s[s_size]; int column=0, row=0; int c=0; @@ -20,7 +22,7 @@ int captcha_test1( term_screen *ts) term_cur_set_r( ts, row/2 ); //just ask question - printf("Are you bot?(y/n):\n"); + term_printf( ts, "Are you bot?(y/n):\n"); c = term_getc( ts ); if ( (c == 'n') || ( c == 'N') ) ret = 1; @@ -17,8 +17,8 @@ int bbs_door_start( term_screen *ts, const char *cmd ) int restore_mode=1; - struct termios orig_i; - struct termios orig_o; + //struct termios orig_i; + //struct termios orig_o; term_clr_scr( ts ); @@ -31,7 +31,7 @@ int bbs_door_start( term_screen *ts, const char *cmd ) //term_clr_scr( ts ); if ( system( cmd ) == -1 ) { - bbs_log( NULL, "couldnt execute %s", cmd ); + bbs_log( "DOOR", "couldnt execute doorgame"); } if ( restore_mode ) @@ -51,7 +51,6 @@ int bbs_door( term_screen *ts, const char *dir_name ) int quit_loop=0; int menu_input = 0; char menu_cmd = 0; - int row = 0; const char *door_game_dir=NULL; if ( ts == NULL ) @@ -112,7 +111,7 @@ int bbs_door( term_screen *ts, const char *dir_name ) free( eps ); } else { - printf("Err\n"); + term_printf( ts, "Err\n"); ERROR("Cannot open article directory\n"); } ret = 0; @@ -122,12 +121,12 @@ int bbs_door( term_screen *ts, const char *dir_name ) { term_clr_scr( ts ); term_cur_set_c( ts, 0 ); - printf("(L)ist games, (P)lay game, (Q)uit"); fflush( stdout ); + term_printf( ts, "(L)ist games, (P)lay game, (Q)uit"); term_cur_set_c( ts, 0 ); term_cur_set_r( ts, term_get_maxrow( ts ) ); - printf(":"); fflush( stdout ); + term_printf( ts, ":"); menu_input = term_getc( ts ); //if something whent wrong dont know why, need to get some test case @@ -171,7 +170,7 @@ int bbs_door( term_screen *ts, const char *dir_name ) case 'P': { term_cur_set_c( ts, 0 ); - printf("Input game number 1-9:"); fflush( stdout ); + term_printf( ts, "Input game number 1-9:"); int game_input = term_getc( ts ); //if something whent wrong dont know why, need to get some test case char game_number = (char)game_input-'0'; @@ -194,7 +193,7 @@ int bbs_door( term_screen *ts, const char *dir_name ) } break; default: - printf("Try more\n"); + term_printf( ts, "Try more\n"); } } @@ -15,6 +15,7 @@ #include "kconfig.h" #include "list.h" #include "sds.h" +#include "logs.h" #include "libterm/term.h" #include "libterm/term_io.h" @@ -149,6 +149,7 @@ int f_file_size( f_file *f_f ) //--------------------------------------------------------------------- size_t f_file_write( f_file *f_f, size_t size, void *ptr ) { + size_t ret = -1; //PRINT("\n"); if ( f_f ) { diff --git a/libterm/term.c b/libterm/term.c index 532dc92..2a726b4 100644 --- a/libterm/term.c +++ b/libterm/term.c @@ -27,6 +27,8 @@ int term_init( term_screen *term ) //if you whant raw mode then you should set it man if ( tcgetattr( term->ifd, &term->orig_i ) == -1 ) goto exit_error; term->raw_i = term->orig_i; + if ( tcgetattr( term->ofd, &term->orig_o ) == -1 ) goto exit_error; + term->raw_o = term->orig_o; term->mode = SCREEN_MODE_80x25; diff --git a/libterm/term_io.c b/libterm/term_io.c index cd1b3c1..d305f51 100644 --- a/libterm/term_io.c +++ b/libterm/term_io.c @@ -140,23 +140,51 @@ int term_readline( term_screen *ts, char *str, size_t str_size, int flag ) menu_cmd = 0; buf_curent = 0; + //finsih when escape button is setted while ( menu_cmd != TK_ESC ) { menu_input = term_getc( ts ); if ( menu_input != -1 ) { menu_cmd = (char)menu_input; - //add to buffer any pritable char - //if ( (isgraph( menu_cmd ) && flag == READLINE_TEXT ) || - // (isalpha( menu_cmd ) && flag == READLINE_ALPHA ) ) - if ( isalpha( menu_cmd ) ) + //add to buffer any printable alpahnumeric char + if ( isalpha( menu_cmd ) && + (flag == READLINE_TEXT || flag == READLINE_ALPHA + || flag == READLINE_HIDDEN) ) { if ( buf_curent < buf_size ) { buf[ buf_curent ] = menu_cmd; buf_curent += 1; } - //deleteone char from buffer + //add to buffer number 0-9 + } else if ( isdigit( menu_cmd ) && + ( flag == READLINE_TEXT || flag == READLINE_NUMBER + || flag == READLINE_HIDDEN )) + { + if ( buf_curent < buf_size ) + { + buf[ buf_curent ] = menu_cmd; + buf_curent += 1; + } + //if space allowed + } else if ( (menu_cmd == ' ') && (flag == READLINE_TEXT) ) + { + if ( buf_curent < buf_size ) + { + buf[ buf_curent ] = menu_cmd; + buf_curent += 1; + } + //remaining printable chars for READLINE_TEXT + } else if ( ispunct( menu_cmd ) && + (flag == READLINE_TEXT )) + { + if ( buf_curent < buf_size ) + { + buf[ buf_curent ] = menu_cmd; + buf_curent += 1; + } + //deleteone char from buffer with backspace } else if ( menu_cmd == TK_BACKSPACE ) { if ( buf_curent > 0) @@ -164,13 +192,14 @@ int term_readline( term_screen *ts, char *str, size_t str_size, int flag ) buf[ buf_curent ] = 0x0; buf_curent -= 1; } - //input ready + //input ready lets finish input } else if ( menu_cmd == TK_ENTER ) { ret = buf_curent; memcpy( str, buf, buf_size ); str[ str_size-1 ] = 0x0; break; + //finsih input without saving result } else if ( menu_cmd == TK_ESC ) { ret = -1; @@ -184,7 +213,8 @@ int term_readline( term_screen *ts, char *str, size_t str_size, int flag ) { if ( i < buf_curent ) { - if ( (flag == READLINE_TEXT) || (flag == READLINE_ALPHA) ) + if ( (flag == READLINE_TEXT) || (flag == READLINE_ALPHA) + || (flag == READLINE_NUMBER) ) { term_putc( ts, buf[i] ); } else if ( flag == READLINE_HIDDEN ) @@ -210,3 +240,18 @@ int term_readline( term_screen *ts, char *str, size_t str_size, int flag ) return ret; } + +//this is to replace printf,flush code +int term_printf( term_screen *ts, const char *format, ...) +{ + int ret=0; + + va_list args; + va_start(args, format); + + vdprintf(ts->ofd, format, args); + + va_end(args); + + return ret; +} diff --git a/libterm/term_io.h b/libterm/term_io.h index 3c84972..b05af39 100644 --- a/libterm/term_io.h +++ b/libterm/term_io.h @@ -3,14 +3,18 @@ #include <stdio.h> #include <stdlib.h> +#include <stdarg.h> #include "screen_modes.h" #include "term.h" -#define READLINE_NONE 0 -#define READLINE_ALPHA 1 -#define READLINE_TEXT 2 -#define READLINE_HIDDEN 3 +#define READLINE_NONE 0 //none +#define READLINE_ALPHA 1 //isalpsha +#define READLINE_TEXT 2 //[a-zA-Z0-9] + ispunct +#define READLINE_HIDDEN 3 //[a-zA-Z] +#define READLINE_NUMBER 4 //[0-9] +#define READLINE_SYMBOL 5 //not yet +#define READLINE_ALPHANUM 6 //not yet int term_fprint( screen_mode_e mode, FILE *f ); @@ -21,5 +25,6 @@ int term_draw_hline( term_screen *ts, int pc, int pr, int sz, char ch ); int term_getc( term_screen *ts ); int term_putc( term_screen *ts, char c ); int term_readline( term_screen *ts, char *str, size_t str_size, int flag ); +int term_printf( term_screen *ts, const char *format, ...); #endif @@ -13,6 +13,7 @@ #include "bbsconfig.h" #include "twit.h" #include "todo.h" +#include "door.h" #include "libterm/term.h" #include "libterm/term_io.h" @@ -67,47 +68,47 @@ int main( int argc, char **argv ) #ifdef CONFIG_LOGIN if ( bbs_user_get_status( &g_user ) == BBS_USER_LOGEDIN ) - printf("[LOGEDIN] "); + term_printf( &ts, "[LOGEDIN] "); #endif #ifdef CONFIG_MOTD - printf("(M)otd "); + term_printf( &ts, "(M)otd "); #endif #ifdef CONFIG_ARTICLES - printf("(A)rticles "); + term_printf( &ts, "(A)rticles "); #endif #ifdef CONFIG_DOORGAMES - printf("(D)oor games "); + term_printf( &ts, "(D)oor games "); #endif #ifdef CONFIG_TWIT - printf("(T)wit "); + term_printf( &ts, "(T)wit "); #endif #ifdef CONFIG_BOARD - printf("(B)oard "); + term_printf( &ts, "(B)oard "); #endif #ifdef CONFIG_LOGIN if ( bbs_user_get_status( &g_user ) != BBS_USER_LOGEDIN ) - printf("(L)ogin "); + term_printf( &ts, "(L)ogin "); #endif #ifdef CONFIG_TODO - printf("T(o)do "); + term_printf( &ts, "T(o)do "); #endif #ifdef CONFIG_MESSAGING - printf("Mesa(G)es "); + term_printf( &ts, "Mesa(G)es "); #endif - printf("(Q)uit (S)ysinfo"); fflush( stdout ); + term_printf( &ts, "(Q)uit (S)ysinfo"); term_cur_set_c( &ts, 0 ); term_cur_set_r( &ts, term_get_maxrow( &ts ) ); - printf(":"); fflush( stdout ); + term_printf( &ts, ":"); //ret_len = getline( &str, &str_size, stdin ); main_menu_input = term_getc( &ts ); //if something whent wrong dont know why, need to get some test case @@ -172,7 +173,7 @@ int main( int argc, char **argv ) case 'g': case 'G': { - printf("Messages\n"); + term_printf( &ts, "Messages\n"); } break; #endif @@ -182,7 +183,7 @@ int main( int argc, char **argv ) case 'b': case 'B': { - printf("Board\n"); + term_printf( &ts, "Board\n"); } break; #endif @@ -203,7 +204,7 @@ int main( int argc, char **argv ) case 'o': case 'O': { - printf("Todo list\n"); + term_printf( &ts, "Todo list\n"); bbs_todo( &ts, NULL ); } break; @@ -216,7 +217,7 @@ int main( int argc, char **argv ) bbs_log_quit( NULL ); break; default: - printf("Unknow command\n"); + term_printf( &ts, "Unknow command\n"); } } #ifdef CONFIG_MOTD @@ -6,18 +6,17 @@ //TODO complcations with libterm int bbs_motd_draw( term_screen *ts, const char *fname ) { - int posc=0, posr=0; + int posr=0; int ret=0; const int buf_size=80*26+1; char buf[buf_size]; - int x=0,y=0; int row=0,column=0; FILE *f = fopen( fname, "r" ); if ( f == NULL ) { - printf("Cannot open file %s\n", fname); + term_printf( ts, "Cannot open file %s\n", fname); return -1; } @@ -37,7 +36,7 @@ int bbs_motd_draw( term_screen *ts, const char *fname ) { if ( buf[i] != '\n' ) { - printf("%c",buf[i] ); + term_printf( ts, "%c",buf[i] ); } else if ( buf[i] == '\n') { @@ -7,39 +7,39 @@ int bbs_sysinfo( term_screen *ts ) //setup screen to show stuff term_clr_scr( ts ); - printf("Press ANYKEY \n\n\n"); + term_printf( ts, "Press ANYKEY \n\n\n"); term_cur_set_c( ts, 0 ); - printf("BBS:MicroBBS %s (%s)\n", BUILD_VERSION, BUILD_DATE); + term_printf( ts, "BBS:MicroBBS %s (%s)\n", BUILD_VERSION, BUILD_DATE); term_cur_set_c( ts, 0 ); - printf("Author: FreeArtMan\n"); + term_printf( ts, "Author: FreeArtMan\n"); term_cur_set_c( ts, 0 ); - printf("Contributor: epoch\n"); + term_printf( ts, "Contributor: epoch\n"); term_cur_set_c( ts, 0 ); - printf("Main chan: irc://irc.freenode.net#mainlv\n"); + term_printf( ts, "Main chan: irc://irc.freenode.net#mainlv\n"); term_cur_set_c( ts, 0 ); - printf("Ideological support: irc://hacking.allowed.org#default\n"); + term_printf( ts, "Ideological support: irc://hacking.allowed.org#default\n"); term_cur_set_c( ts, 0 ); - printf("Root dir: %s\n",g_config.root_dir ); + term_printf( ts, "Root dir: %s\n",g_config.root_dir ); term_cur_set_c( ts, 0 ); - printf("Users dir: %s\n", g_config.user_dir ); + term_printf( ts, "Users dir: %s\n", g_config.user_dir ); term_cur_set_c( ts, 0 ); - printf("Article dir: %s\n", g_config.article_dir ); + term_printf( ts, "Article dir: %s\n", g_config.article_dir ); term_cur_set_c( ts, 0 ); - printf("Syslog : %d\n", g_config.syslog ); + term_printf( ts, "Syslog : %d\n", g_config.syslog ); //main loop wait while press something term_cur_set_r( ts, term_get_maxrow( ts ) ); term_cur_set_c( ts, 0 ); - printf(":"); fflush( stdout ); + term_printf( ts, ":"); term_getc( ts ); return ret; @@ -6,14 +6,11 @@ int bbs_todo( term_screen *ts, const char *fname) { int ret=0; - int ret_len; - size_t in_size=0; - char *in_buf=NULL; int quit_loop=0; int menu_input = 0; char menu_cmd = 0; int row = 0; - char *todo_fname = NULL; + const char *todo_fname = NULL; if ( ts == NULL ) return ret; @@ -59,7 +56,7 @@ int bbs_todo( term_screen *ts, const char *fname) { term_clr_scr( ts ); term_cur_set_c( ts, 0 ); - printf("(A)dd,(Q)uit"); fflush( stdout ); + term_printf( ts, "(A)dd,(R)emove,(Q)uit"); //dispaly todo list row = term_get_maxrow( ts ); @@ -71,7 +68,7 @@ int bbs_todo( term_screen *ts, const char *fname) { term_cur_set_c( ts, 0 ); term_cur_set_r( ts, 1+cnt ); - printf( "[%02d] -> %s\n", cnt, (char *)iter->val); + term_printf( ts, "[%02d] -> %s\n", cnt, (char *)iter->val); cnt += 1; iter = iter->next; } @@ -80,7 +77,7 @@ int bbs_todo( term_screen *ts, const char *fname) term_cur_set_c( ts, 0 ); term_cur_set_r( ts, term_get_maxrow( ts ) ); - printf(":"); fflush( stdout ); + term_printf( ts, ":"); menu_input = term_getc( ts ); //if something whent wrong dont know why, need to get some test case @@ -107,15 +104,22 @@ int bbs_todo( term_screen *ts, const char *fname) int cnt = 1; while (iter != NULL) { - printf( "[%02d] -> %s\n", cnt, (char *)iter->val); + term_printf( ts, "[%02d] -> %s\n", cnt, (char *)iter->val); cnt += 1; iter = iter->next; } } break; + case 'r': + case 'R': + { + bbs_todo_remove( ts, todo_list, todo_fname ); + } + break; + default: - printf("Try more\n"); + term_printf( ts, "Try more\n"); } } @@ -140,11 +144,11 @@ int bbs_todo_add( term_screen *ts, List *todo, const char *fname) term_clr_scr( ts ); term_cur_set_c( ts, 0 ); term_cur_set_r( ts, 0 ); - printf("Add new todo task:\n"); fflush( stdout ); + term_printf( ts, "Add new todo task:\n"); memset( buf, 0, buf_size ); term_cur_set_c( ts, 0 ); - fret = term_readline( ts, buf, buf_size, READLINE_ALPHA ); + fret = term_readline( ts, buf, buf_size, READLINE_TEXT ); if ( fret > 0 ) { char *l = malloc( fret+1 ); @@ -177,7 +181,9 @@ int bbs_todo_remove( term_screen *ts, List *todo, const char *fname ) term_clr_scr( ts ); term_cur_set_c( ts, 0 ); term_cur_set_r( ts, 0 ); - printf("Remove entry from todo:\n"); fflush( stdout ); + term_printf( ts, "Remove entry from todo:\n"); + + return ret; @@ -42,7 +42,7 @@ int bbs_twit( term_screen *ts, char *fn ) { term_clr_scr( ts ); term_cur_set_c( ts, 0 ); - printf("(A)dd,(Q)uit"); fflush( stdout ); + term_printf( ts, "(A)dd,(Q)uit"); //dispaly todo list row = term_get_maxrow( ts ); @@ -54,7 +54,7 @@ int bbs_twit( term_screen *ts, char *fn ) { term_cur_set_c( ts, 0 ); term_cur_set_r( ts, 1+cnt ); - printf( "[%02d] -> %s\n", cnt, (char *)iter->val); + term_printf( ts, "[%02d] -> %s\n", cnt, (char *)iter->val); cnt += 1; iter = iter->next; } @@ -63,7 +63,7 @@ int bbs_twit( term_screen *ts, char *fn ) term_cur_set_c( ts, 0 ); term_cur_set_r( ts, term_get_maxrow( ts ) ); - printf(":"); fflush( stdout ); + term_printf( ts, ":"); menu_input = term_getc( ts ); //if something whent wrong dont know why, need to get some test case @@ -84,7 +84,7 @@ int bbs_twit( term_screen *ts, char *fn ) break; default: - printf("Try more\n"); + term_printf( ts, "Try more\n"); } } @@ -109,11 +109,11 @@ int bbs_twit_add( term_screen *ts, List *twit, const char *fname) term_clr_scr( ts ); term_cur_set_c( ts, 0 ); term_cur_set_r( ts, 0 ); - printf("Put new twit:\n"); fflush( stdout ); + term_printf( ts, "Put new twit:\n"); memset( buf, 0, buf_size ); term_cur_set_c( ts, 0 ); - fret = term_readline( ts, buf, buf_size, READLINE_ALPHA ); + fret = term_readline( ts, buf, buf_size, READLINE_TEXT ); if ( fret > 0 ) { char *l = malloc( fret+1 ); @@ -78,6 +78,8 @@ int bbs_login( term_screen *ts ) fret = bbs_login_auth( userdata_dir, username_buf, password_buf ); if ( fret == -1 ) { + term_cur_set_r( ts, 0 ); + term_cur_set_c( ts, 0 ); ERROR("No such user\n"); sleep(3); } else if ( fret == 0 ) { |