diff options
Diffstat (limited to 'articles.c')
-rw-r--r-- | articles.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/articles.c b/articles.c new file mode 100644 index 0000000..b5c5ea3 --- /dev/null +++ b/articles.c @@ -0,0 +1,80 @@ +#include "articles.h" + + +int bbs_article( term_screen *ts, const char *fname ) +{ + int ret=-1; + int i=0; + + FILE *f; + size_t str_size=0, fret=1; + char *str=NULL; + size_t in_size=0; + char *in_buf=NULL; + int max_x, max_y, ret_len; + int quit_loop=0; + + if ( ts->mode == SCREEN_MODE_80x24 ) + { + max_x = 80; + max_y = 24; + } else + { + max_x = 80; + max_y = 24; + } + + if ( fname != NULL ) + { + f = fopen( fname, "r" ); + if ( f == NULL ) + { + printf("Cannot open article file\n"); + return -1; + } + + fret = 1; + i = 0; + while ( (fret > 0) && (quit_loop == 0) ) + { + fret = getline( &str, &str_size, f ); + if ( fret > 0 ) + { + printf("%s", str); + i += 1; + } + + //if ( ((i > 0) && (fret == -1)) || + // ((fret > 0) && (i > max_x-1)) ) + if ( i >= max_y-1 ) + { + printf("(N)ext,(Q)uit:"); + ret_len = getline( &in_buf, &in_size, stdin ); + if ( ret_len > 0 ) + { + char ch = in_buf[0]; + switch( ch ) + { + case 'q': + quit_loop = 1; + break; + case 'n': + i = 0; + break; + default: + printf("Try more\n"); + } + } + } + + if ( (fret == -1) ) + break; + + } + + fclose( f ); + ret = 0; + } + + return ret; +} |