/* simple curses for ATARI and MINT; Kees Lemmens Okt. 1992 */

#include <osbind.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termcap.h>
#include <curses.h>

#define NOSIGNAL

char	AM, BS, CA, DA, DB, EO, HC, HZ, IN, MI, MS, NC, NS, OS, UL,
		XB, XN, XT, XS, XX;
char	*AL, *BC, *BT, *CD, *CE, *CL, *CM, *CR, *CS, *DC, *DL,
		*DM, *DO, *ED, *EI, *K0, *K1, *K2, *K3, *K4, *K5, *K6,
		*K7, *K8, *K9, *HO, *IC, *IM, *IP, *KD, *KE, *KH, *KL,
		*KR, *KS, *KU, *LL, *MA, *ND, *NL, *RC, *SC, *SE, *SF,
		*SO, *SR, *TA, *TE, *TI, *UC, *UE, *UP, *US, *VB, *VS,
		*VE, *AL_PARM, *DL_PARM, *UP_PARM, *DOWN_PARM,
		*LEFT_PARM, *RIGHT_PARM;
static char	*sflags[] = {			&AM, &BS, &DA, &DB, &EO, &HC, &HZ, &IN, &MI,			&MS, &NC, &NS, &OS, &UL, &XB, &XN, &XT, &XS,			&XX		};static char	*_PC, **sstrs[] = {			&AL, &BC, &BT, &CD, &CE, &CL, &CM, &CR, &CS,			&DC, &DL, &DM, &DO, &ED, &EI, &K0, &K1, &K2,			&K3, &K4, &K5, &K6, &K7, &K8, &K9, &HO, &IC,			&IM, &IP, &KD, &KE, &KH, &KL, &KR, &KS, &KU,			&LL, &MA, &ND, &NL, &_PC, &RC, &SC, &SE, &SF,			&SO, &SR, &TA, &TE, &TI, &UC, &UE, &UP, &US,			&VB, &VS, &VE, &AL_PARM, &DL_PARM, &UP_PARM,			&DOWN_PARM, &LEFT_PARM, &RIGHT_PARM,		    };
static char	tcspace[2048];
char *tcpntr=tcspace;		/* Address of tspace for relocation */
int		LINES, COLS;
WINDOW	*stdscr, *curscr;

/* # define	getch()		*/

int outc(int c)	/* must be a real function */
{	Cconout(c);
	return 0;
}
void move(int rw,int cl)
{	tputs(tgoto(CM, cl, rw),1,outc);
	stdscr->_curx=cl;
	stdscr->_cury=rw;
}

int printw(char *fmt, ...)
{	char	buf[512];
	va_list argp;
	
	va_start(argp, fmt);
	vsprintf(buf, fmt, argp);
#ifdef __GNUC__
	return 0;
#else
	return addstr(buf);
#endif
}

int mvprintw(int rw,int cl,char *fmt, ...)
{	char	buf[512];
	va_list argp;
	
	move(rw,cl);
	va_start(argp, fmt);
	vsprintf(buf, fmt, argp);
#ifdef __GNUC__
	return 0;
#else
	return addstr(buf);
#endif
}

void inittcap(void){	register char	***sp,**fp;	char *ptflgs = "ambsdadbeohchzinmimsncnsosulxbxnxtxsxx";	char *ptstrs = "albcbtcdceclcmcrcsdcdldmdoedeik0k1k2k3k4k5k6k7"
	"k8k9hoicimipkdkekhklkrkskullmandnlpcrcscsesfsosrtatetiucueup"
	"usvbvsveALDLUPDOLERI";

	fp = sflags;	do
	{	*(*fp++) = tgetflag(ptflgs);		ptflgs += 2;	}while (*ptflgs);

	sp = sstrs;
	do
	{	*(*sp++) = tgetstr(ptstrs, &tcpntr);
		ptstrs += 2;	}while (*ptstrs);}
WINDOW *initscr(void)
{	static char	*type,tcbuf[1024];	stdscr=(WINDOW *)malloc(sizeof(WINDOW));
	
	if((type=getenv("TERM")) != NULL)
	{	if (tgetent(tcbuf, type) != 1)			strcpy(tcbuf, "xx|dumb:");		
	}
	else
		tgetent(tcbuf, "vt52");

	inittcap();
	LINES=tgetnum("li");
	COLS =tgetnum("co");

	stdscr->_cury = stdscr->_curx = 0;
	stdscr->_clear = FALSE;
	stdscr->_maxy = LINES;
	stdscr->_maxx = COLS;
	stdscr->_begy = 0;
	stdscr->_begx = 0;
	stdscr->_flags = 0;
	stdscr->_scroll = stdscr->_leave = FALSE;
	clear();
	return stdscr;
}

void endwin()
{	free(stdscr);
}