#define FILEHANDLE                  BPTR
#define OPEN_FOR_READING(name)      Open(name,MODE_OLDFILE)
#define OPEN_FOR_WRITING(name)      Open(name,MODE_NEWFILE)
#define CLOSEFILE(handle)           Close(handle)
#define READ(handle,buffer,length)  Read(handle,buffer,length)
#define WRITE(handle,buffer,length) Write(handle,buffer,length)

#define HOSTSETUP       "VTDIR:host.setup"
#define PRINTERSETUP    "VTDIR:printer.setup"
#define TERMINALSETUP   "VTDIR:terminal.setup"
#define PRINTERNAME     "PRT:"
#define NILDEVICE       "NIL:"

#define ABORTASYNC      2
#define ABORTDELAY      50

extern struct KeyMap keymap;
extern struct Library *IntuitionBase,*GfxBase,*DiskfontBase;

#define ARGUMENTS   16
#define SETS        4

#define ASCII               0
#define SUPPLEMENTAL        1
#define GRAPHICS            2
#define BRITISH             3
#define DUTCH               4
#define FINNISH             5
#define FRENCH              6
#define FRENCH_CANADIAN     7
#define GERMAN              8
#define ITALIAN             9
#define NORWEGIAN           10
#define SPANISH             11
#define SWEDISH             12
#define SWISS               13
#define TECHNICAL           14
#define DISPLAY_CONTROLS    15
#define FONTS               16

#define FIRSTLCHAR          32
#define FIRSTRCHAR          (FIRSTLCHAR + 128)
#define CHARCOUNT           (128 - FIRSTLCHAR)
#define TOTALCOUNT          256

#define BUFSIZE     10240
#define CONVSIZE    (BUFSIZE + BUFSIZE / 2)
#define SECSIZE     (BUFSIZE / 10)

#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 DLE         '\x10'
#define XON         '\x11'
#define XOFF        '\x13'
#define CAN         '\x18'
#define ESC         '\x1B'
#define DEL         '\x7F'
#define IND         '\x84'
#define NEL         '\x85'
#define HTS         '\x88'
#define PLD         '\x8B'
#define PLU         '\x8C'
#define RI          '\x8D'
#define SS2         '\x8E'
#define SS3         '\x8F'
#define DCS         '\x90'
#define PU1         '\x91'
#define PU2         '\x92'
#define STS         '\x93'
#define CSI         '\x9B'
#define ST          '\x9C'
#define END         '\xFF'
#define CANCEL      '\x18'

#define forever     for(;;)
typedef short       BOOL;

#define ON              (1<<0)
#define GAD             (1<<1)
#define LOCKED          (1<<2)
#define SETUP           (1<<3)
#define TRANSFER        (1<<4)
#define SEND_BREAK      (1<<5)
#define HOLD            (1<<6)
#define PRINT           (1<<7)

#define SEQ_ESC         1
#define SEQ_CSI         2
#define SEQ_MOD         3
#define SEQ_DCS         4
#define SEQ_SPC         5
#define SEQ_SEC         6
#define SEQ_SET         7
#define SEQ_RES         8
#define SEQ_ONE         9
#define SEQ_G0          10
#define SEQ_G1          11
#define SEQ_G2          12
#define SEQ_G3          13
#define SEQ_LWIDTH      14
#define SEQ_ENDDCS      15

#define MASK        0xFF
#define NEGATIVE    0x80

extern char wrapon[];
extern char wrapoff[];
extern char cursen[];
extern char cursdis[];
extern char cursreq[];
extern char setpos[];
extern char home[];
extern char clrdown[];
extern char forw[];
extern char backw[];
extern char primda[];
extern char secda[];
extern char tstat[];
extern char pstat[];
extern char ustat[];
extern char klang[];
extern char marg[];

extern USHORT   rows;

#define BACKGROUND_PEN  0
#define FOREGROUND_PEN  1

#define COLUMNS     80
#define XSIZE       8
#define YSIZE       8
#define BOTLINE     6
#define WIDTH       (COLUMNS * XSIZE)
#define DEPTH       1

#define PYSIZE      1
#define PXSIZE      16
#define SPRITESIZE  ((2 * YSIZE + 4) * 2)
#define DUMMYSIZE   ((2 * PYSIZE + 4) * 2)

#define MOVE(rp,row,col)      Move(rp,(col-1)*XSIZE,(row-1)*YSIZE+BOTLINE)
#define DRAWCURSOR(srp,drp,row,col) ClipBlit(srp,(col-1)*XSIZE+1,(row-1)*YSIZE,drp,16,0,XSIZE/2+2,YSIZE,ABC|NABC|ABNC|NABNC)

#define DOUBLE      2
#define UPPER_SIDE  3
#define LOWER_SIDE  4
#define HORIZ_ONLY  6

#define BEEPPRIORITY    64
#define BEEPPERIOD      440
#define BEEPVOLUME      64
#define BEEPCYCLES      150

#define WRAP        (1<<0)
#define INSERT      (1<<1)
#define CURSOR      (1<<2)
#define GXGL        (1<<3)
#define CONVERT     (1<<4)
#define NEWLINE     (1<<5)
#define DCONTLO     (1<<6)
#define DCONTHI     (1<<7)

#define NATIONAL    (1<<0)

struct serial {
    struct IOExtSer *rreq,*wreq;
    struct MsgPort  *rport,*wport;
    UBYTE           requested;
    char            character;
    };

struct console {
    struct serial       *ser;
    struct Screen       *scr;
    struct Window       *win;
    struct IOStdReq     *rreq,*wreq;
    struct MsgPort      *rport,*wport;
    struct TextFont     *font[FONTS];
    struct SimpleSprite *sp;
    struct RastPort     *rp,srp;
    struct BitMap       sbm;
    struct IOAudio      *audio;
    struct Unit         *channels;
    BPTR                prt;
    char                *buf,*conv;
    UWORD               *dat,*dummy;
    UBYTE               *rows;
    USHORT              sound;
    USHORT              top,bot;
    USHORT              col,row;
    USHORT              gset[SETS];
    USHORT              mset[SETS];
    USHORT              lset,rset,slset;
    USHORT              argi,carg,args[ARGUMENTS];
    USHORT              s_col,s_row;
    USHORT              s_gset[SETS];
    USHORT              s_mset[SETS];
    USHORT              s_lset,s_rset;
    USHORT              ordcol,ordc;
    UBYTE               stat,tstat,gstat,nstat,attr;
    UBYTE               s_tstat,s_attr;
    char                ordtext[COLUMNS];
    char                tabs[COLUMNS + 2];
    char                character;
    };

struct so {
    struct so       *next;
    char            *name;
    APTR            setup;
    USHORT          type;
    UBYTE           col,row;
    BOOL            active;
    UBYTE           id;
    };

#define SO_SAVE         1
#define SO_LOAD         2
#define SO_KEYMAP       3
#define SO_SETUP        4

extern struct so save;
extern struct so appl;
extern struct so num;
extern struct so ins;
extern struct so over;
extern struct so cret;
extern struct so newl;
extern struct so wrap;
extern struct so trunc;
extern struct so bit_7;
extern struct so bit_8;
extern struct so mult;
extern struct so nat;
extern struct so br_set;
extern struct so du_set;
extern struct so fi_set;
extern struct so fr_set;
extern struct so fc_set;
extern struct so ger_set;
extern struct so ita_set;
extern struct so nor_set;
extern struct so spa_set;
extern struct so swe_set;
extern struct so swi_set;
extern struct so curson;
extern struct so cursoff;
extern struct so dn_km;
extern struct so fl_km;
extern struct so ic_km;
extern struct so po_km;
extern struct so us_km;
extern struct so br_km;
extern struct so du_km;
extern struct so fi_km;
extern struct so bf_km;
extern struct so cf_km;
extern struct so ag_km;
extern struct so it_km;
extern struct so no_km;
extern struct so sp_km;
extern struct so sw_km;
extern struct so sf_km;
extern struct so sg_km;
extern struct so res;

extern void reset(register struct console *);
extern void cursorup(register struct console *,USHORT);
extern void cursordown(register struct console *,USHORT);
extern void cursorleft(register struct console *,register USHORT);
extern void cursorright(register struct console *,register USHORT);
extern void cursornextline(register struct console *);
extern void cursoraboveline(register struct console *);
extern void hidecursor(register struct console *);
extern void showcursor(register struct console *);
extern void modifyattr(register struct console *);
extern void insertlines(register struct console *,USHORT);
extern void insertchars(register struct console *,USHORT);
extern void deletechars(register struct console *,USHORT);
extern void deletelines(register struct console *,USHORT);
extern void erasechars(register struct console *,register USHORT);
extern void eraselines(register struct console *,register USHORT);
extern void eraselinebeg(register struct console *);
extern void erasescrbeg(register struct console *);
extern void newline(register struct console *);
extern void cleararea(struct RastPort *,USHORT,USHORT,USHORT,USHORT);
extern void textout(register struct console *);
extern void cursorout(register struct console *);
extern void lwcheck(register struct console *);
