From aca4b1ad122434458125b4f25ea2d99a80370ee4 Mon Sep 17 00:00:00 2001 From: Artur Artamonov Date: Sun, 17 Aug 2014 19:40:06 +0100 Subject: Initial commit --- libterm/print_utils.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 libterm/print_utils.c (limited to 'libterm/print_utils.c') diff --git a/libterm/print_utils.c b/libterm/print_utils.c new file mode 100644 index 0000000..9d4bac0 --- /dev/null +++ b/libterm/print_utils.c @@ -0,0 +1,122 @@ +#include "print_utils.h" + +int term_fprint( screen_mode_e mode, FILE *f ) +{ + int ret=-1; + if (f == NULL) + return -1; + + switch ( mode ) + { + case SCREEN_MODE_80x24: + { + /* + const int m_x=80,m_y=24; + int x=0,y=0; + int fret=1; + char c; + while ((fret = fread(&c,1,1,f)) == 1) + { + if ( c != '\n' ) + { + if ( (x < m_x) && (y < m_y) ) + { + putc( c ); + } + x+=1; + } else if ( c == '\n' ) + { + x = 0; + y += 1; + } + } + */ + } + break; + default: + printf("Unknown screen mode\n"); + } + + return ret; +} + + +//print data to terminal starting from x,y +//return 0x0000yyyy0000xxxx, current stopped position +int term_print( term_screen *ts, const char *buf, size_t size, + int init_x, int init_y ) +{ + int posx=0, posy=0; + int ret=-1; + if ( buf == NULL ) + { + return -1; + } + + if ( size <= 0 ) + { + return -1; + } + + //calculate position + //fix for diff modes also needed + if ( ts->term_col > 80) + { + posx = (ts->term_col-80)/2; + } + if (ts->term_row > 24) + { + posy = (ts->term_row-24)/2; + } + + switch ( ts->mode ) + { + case SCREEN_MODE_80x24: + { + int m_x=80, m_y=24; + int x=init_x, y=init_y; + char c; + int i,j; + + + if (( init_x == 0 ) && (init_y == 0)) + { + for (i=0; i