/*
 CONIO.H - Console I/O library for the Amsrad CPC
 To use with the Small Devices C Compiler
 CONIO.H is a implementation of the Contiki CONIO.H (Derived from the borland CONIO.H)

 2003 H. Hansen
*/

#ifndef  __conio_h__
#define __conio_h__

#include <stdio.h>
#include <stdlib.h>
#include "arch.h"

#define CH_ULCORNER 0x096
#define CH_URCORNER 0x09c
#define CH_LLCORNER 0x093
#define CH_LRCORNER 0x099

void clrscr (void);

unsigned char kbhit (void);

void gotox (unsigned char x) __preserves_regs(b, c, d, e);

void gotoy (unsigned char y) __preserves_regs(b, c, d, e);

void gotoxy (unsigned char x, unsigned char y) __preserves_regs(b, c, d, e);

unsigned char wherex (void);

unsigned char wherey (void);

#define cputc ((void (*)(unsigned char))0xBB5D)

void cputcxy (unsigned char x, unsigned char y, char c) __z88dk_callee;

void cputs (const char* s);
void cputsn(const char *str, unsigned char len) __z88dk_callee;

char cgetc (void);

#define textcolor ((void(*)(unsigned char))0xBB90)
#define bgcolor ((void(*)(unsigned char))0xBB96)

void  bordercolor (unsigned char color);

void chline (unsigned char length);

void chlinexy (unsigned char x, unsigned char y, unsigned char length) __z88dk_callee;

void cvline (unsigned char length);

void cvlinexy (unsigned char x, unsigned char y, unsigned char length) __z88dk_callee;

void cclear (unsigned char length);

void screensize (unsigned char* x, unsigned char* y) __preserves_regs(b,c);

#endif /* __conio_h__ */

