summaryrefslogtreecommitdiff
path: root/articles.c
diff options
context:
space:
mode:
Diffstat (limited to 'articles.c')
-rw-r--r--articles.c80
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;
+}