summaryrefslogtreecommitdiff
path: root/libterm/print_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'libterm/print_utils.c')
-rw-r--r--libterm/print_utils.c122
1 files changed, 122 insertions, 0 deletions
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<posx;i++)
+ printf(" ");
+ }
+
+ //draw image according to mode
+ for (i=0; i<size; i++)
+ {
+ c = buf[i];
+ if ( c == '\n' )
+ {
+ printf("\n");
+ //set
+ for (j=0; j<posx; j++)
+ printf(" ");
+ x = 0;
+ y += 1;
+ //printf("asdasdsad\n");
+ } else if ( c != '\n' )
+ {
+ if ( (x < m_x ) && (y < m_y) )
+ {
+ printf("%c",c);
+ }
+ x += 1;
+ }
+ }
+ ret = x&0x0000ffff | ((y&0x0000ffff)<<16);
+ //printf( "%08x\n", ret );
+ }
+ break;
+ default:
+ printf("Unknown mode\n");
+ }
+
+ return ret;
+}
+
+
+