#include <libraries/dos.h>
#include <libraries/dosextens.h>

#define BUFLEN 256
#define BUFMAX 255
#define CONSPEC "con:10/10/350/120/Test/CLOSE/WAIT\0"

struct FileHandle *fh;
long DosBase;
char buf[BUFLEN];

void ConWriteStr(text) char *text; { 
	int l;
	l=strlen(text);
	if(l) Write(fh,text,l); 
	}
void ConWriteInt(val) int val; {
	sprintf(buf,"%d",val);
	ConWriteStr(buf);
	}       

void ConReadStr(prompt,adr,nmax) char *prompt,*adr; int nmax;
	{
	int l;
	if(nmax>BUFMAX) nmax=BUFMAX;
	ConWriteStr(prompt);
	l=Read(fh,adr,nmax);
	adr[l]=0;
	}
int ConReadInt(prompt) char *prompt; {
	ConReadStr(prompt,buf,BUFMAX);
	return(strtol(buf,(char **) NULL,10));
	}

void Locate(z,s) { 
	sprintf(buf,"\x9b%d;%d;H\0",z,s); 
	ConWriteStr(buf);
	}

void SetCursor(bool) int bool; {
	if(bool) ConWriteStr("\x9b"" p"); else ConWriteStr("\x9b""0 p");
	}
void SetBold(bool) int bool; {
	if(bool) ConWriteStr("\x9b""1m"); else ConWriteStr("\x9b""22m");
	}
void SetItalic(bool) int bool; {
	if(bool) ConWriteStr("\x9b""3m"); else ConWriteStr("\x9b""23m");
	}
void SetUnderline(bool) int bool; {
	if(bool) ConWriteStr("\x9b""4m"); else ConWriteStr("\x9b""24m");
	}
void SetInvers(bool) int bool; {
	if(bool) ConWriteStr("\x9b""7m"); else ConWriteStr("\x9b""27m");
	}
void SetColor(bg,fg) int bg,fg; {
	sprintf(buf,"\x9b""3%d;4%dm",fg,bg);
	ConWriteStr(buf);
	}
void ConClear() { ConWriteStr("\x0c"); }
void ConBeep() { ConWriteStr("\x07"); }

main() {
	char Name[80];
	int jahre;
	if(!(DosBase=OpenLibrary("dos.library",0L))) exit(20);
	if(!(fh=(struct FileHandle *)Open(CONSPEC,MODE_NEWFILE)))
		{
		printf ("Konnte CON nicht öffnen...");
		exit(20);
		}
	ConBeep();
	Locate(2,3); ConReadStr("Bitte Namen eingeben: ",Name,80);
	Locate(4,3); jahre=ConReadInt("und Ihr Alter in Jahren: ");
	ConClear(); SetCursor(0); 
	Locate(4,2); ConWriteStr("Hallo ");
	SetColor(0,2); ConWriteStr(Name); SetColor(0,1); 
	Locate(5,2); ConWriteStr("Sie sind ungefähr "); 
	ConWriteInt(jahre*365); ConWriteStr(" Tage alt."); 
	Close(fh); CloseLibrary(DosBase);
	}
