summaryrefslogblamecommitdiffstats
path: root/src/tests/curses_scr.c
blob: 6c2989764d4f919afcbfc41223fe812832a77544 (plain) (tree)
1
                              


















                                                          
                                     



                                                          

                              
                                                   













                                                                                       

                                       
                                                                   


                                                  
                         



                                                   
                                         












                                   
#include "../include/curses.h"
#include <termios.h>
#include <stddef.h>
#include <stdio.h>

#define ESC 27
#define MODE 3

unsigned int _COLOUR_PAIRS = 4;
unsigned int _COLOURS = 8;
unsigned short _COLS = 80;
unsigned short _LINES = 25;

static struct termios original, runtime;

void _init_screen( struct _curses_screen *scr __unused ) {
	tcgetattr(fileno(stdin),&original);
	tcgetattr(fileno(stdin),&runtime);
	runtime.c_lflag &= ~(ICANON|ECHO);
	tcsetattr(fileno(stdin),TCSANOW,&runtime);
	//printf("%c[=%dh",ESC,MODE);
	LINES = 25; COLS = 80;
}

void _exit_screen( struct _curses_screen *scr __unused ) {
	printf("%c[1;1H",ESC);
	printf("%c[2J",ESC);
	tcsetattr(fileno(stdin),TCSANOW,&original);
}

void _movetoyx( struct _curses_screen *scr __unused, unsigned int y, unsigned int x ) {
	printf( "%c[%d;%dH", ESC, y+1, x+1 );
}

void _putc( struct _curses_screen *scr __unused, chtype c ) {
	unsigned short pairno;
	pairno = (unsigned short)(( c & A_COLOUR ) >> CPAIR_SHIFT);
	
	// print rendition (colour and attrs)
	//printf( "%c[%d;%d",ESC, 
	//	cpairs[pairno][0], cpairs[pairno][1] );
	// print rendition (character)
	//printf("char is \"%d\"", c );
	putchar( c );
	fflush(stdout); // There must be a better way to do this...
}

int _getc( struct _curses_screen *scr __unused ) {
	return getchar();
}

bool _peek( struct _curses_screen *scr __unused ) {
	int c;
	if ( ( c = getchar() ) != EOF ) {
		ungetc( c, stdin );
		return TRUE;
	} else { return FALSE; }
}

SCREEN _curscr = {
	.init = _init_screen,
	.exit = _exit_screen,
	.movetoyx = _movetoyx,
	.putc = _putc,
	.getc = _getc,
	.peek = _peek,
};