#include <devices/printer.h>
#include "ownincs/xem.h"
#include "csource/IBM/IBM_models.h"

#define M_BLINK		(1<<27)
#define M_BOLD			(1<<28)
#define M_INVERSID	(1<<29)

#define NEWLINE			(1<<0)		/* für stat */
#define X_SCROLLCURSOR	(1<<1)
#define Y_SCROLLCURSOR	(1<<2)

#define SETUP			(1<<0)	/* für gstat */
#define TRANSFER		(1<<1)
#define SEND_BREAK	(1<<2)
#define HOLD			(1<<3)
#define PRINT			(1<<4)

#define NUL         '\x00'
#define STX         '\x02'
#define BEL         '\x07'
#define BS          '\x08'
#define HT          '\x09'
#define LF          '\x0A'
#define VT          '\x0B'
#define FF          '\x0C'
#define CR          '\x0D'
#define SO          '\x0E'
#define SI          '\x0F'
#define XON         '\x11'
#define XOFF        '\x13'
#define CAN         '\x18'
#define SUB         '\x1A'
#define ESC         '\x1B'
#define CSI         '\x9B'

#define XSIZE			8
#define FONT_YSIZE	8
#define BOTLINE		6
#define ARGUMENTS		16
#define MAXCOLUMNS	200	/* das entspricht einer Auflösung */
#define MAXROWS		200	/* von 1600 x 1600 Pixel bei einem 8'er Font..*/ 

#define MAXARGS 23
#define MAXINTER 10

#define BACKGROUND_PEN 0

struct IBMConsole {
	struct XEM_IO *io;
	struct MacroKeys *macrokeys;
	struct RastPort *rp;

	struct TextFont *font;
	BPTR	prt;

	BOOL	inESC;
	BOOL	inCSI;

	BOOL	interrupt_started;

	ULONG argc;

	UWORD lines;
	UWORD columns;
	UWORD width;
	UWORD	top;
	UWORD	bot;
	UWORD	col;
	UWORD	row;
	ULONG	attr;
	UWORD	apen;
	UWORD	bpen;
	UWORD	s_col;
	UWORD	s_row;
	ULONG	s_attr;
	UWORD	s_apen;
	UWORD	s_bpen;

	UWORD	foreground_pen;	/* default, don't change! */
	BOOL	bold;
	BOOL	mono;

	UWORD	stat;
	UWORD	s_stat;
	UWORD	r_stat;
	UWORD	gstat;

	UWORD	ordcol;
	UWORD	ordc;
	UWORD icnt;			/* offset für inter.. */



/* UBYTE-Array.. */

	UBYTE	ordtext[MAXCOLUMNS];
	UBYTE	tabs[MAXCOLUMNS];
	UBYTE args[MAXARGS+1];/* in inESC wird der KommandoChar mit abgespeichert */
	UBYTE	inter[MAXINTER+1];		/* intermediates like '#' '?'.. */
	UBYTE shift;
	UBYTE s_shift;
};
