//accdis.hpp Copyright (C) 1990-91 I.Pedley (CTPP)  Mon 24-Feb-1992 at 21:59:17
//prototypes for ACCDIS TSR links
//accdis.h Copyright (C) 1989-96 I.Pedley (CTPP) Thu 24-Apr-1997 at 01:21:05
//newOS

//basic accept and display prototypes using default screen
SL  accept (CH* format,...);
SL  display(CH* format,...);

//basic display to memory buffer
SL  catprint(CH* buf,CH* format,...);
//new display routine using no heap memory allocation
SL  catdisp(UL row,UL col,CH* format,...);

//display to memory buffer with attribute bytes (virtual text screen)
SL  vdisplayat(CH* buf,UL row,UL col,CH* format,...);

//output to ChaOS command-line display
SL  clidisplay(CH* format,...);
SL  errdisplay(CH* format,...);
SL  clitype   (CH* str);
EX  SL  clicur;
EX  SL  clistartline;
EX  SL  cliendline;
VD  cliupline  (VD);
VD  clidownline(VD);
VD  cliscroll  (VD);
VD  clirevscroll(VD);
VD  clidisplayhex(VD* buf,UL offset,UL len);
VD  cliadvance(VD);


//prototypes, typedefs and structures for vaccept sub-layer
typedef VD (* KEYCALLBACK)    (UL key,UL row,UL col,VD* userptr);

struct  ACCDIS
{
    VD* usr;            //placeholder for graphics adapter structure
    VD  (*idle)(VD);
    VD  (*setfgd)   (VD*,UL);
    VD  (*setbgd)   (VD*,UL);
    VD  (*setcurpos)(VD*,UL,UL);
    VD  (*clrcurpos)(VD*,UL,UL);
    VD  (*setcursiz)(VD*,UL);
    VD  (*putc)     (VD*,CH,UL,UL);
    VD  (*putstr)   (VD*,CH*,UL,UL);
    VD  (*putstrn)  (VD*,CH*,UL,UL,UL);
    VD  (*scroll)   (VD*);
    SL  (*getkey1)  (VD);
    VD  (*callback)(UL,UL,UL,VD*);
    VD  (*switchframe)(VD*);
    VD* callbackuserptr;
    CH* mem;
    UI  fgd;
    UI  bgd;
    UI  row;
    UI  col;
    UI  cpl;            //cols per line
    UI  bpc;            //bytes per character in memory map
    UI  rows;
    UI  insert;
    UC* tvmem;          //text buffer

};
SL  vaccept(ACCDIS* A,SL row,SL col,CH* format,SL disp,CH* args[]);

//generic function sets supporting accept/display on CGA & MDA
VD  mdafgd      (VD* usr,UL colour);
VD  mdabgd      (VD* usr,UL colour);
VD  mdasetcurpos(VD* usr,UL row,UL col);
VD  mdagetcurpos(UL* row,UL* col);
VD  mdasetcursiz(VD* usr,UL val);
VD  mdaputc     (VD* usr,CH c,UL row,UL col);
VD  mdaprint    (VD* usr,CH* str,UL row,UL col);
VD  mdaprin     (VD* usr,CH* str,UL row,UL col,UL len);
VD  mdascroll   (VD* usr);

//generic function sets supporting display to memory buffer
VD  memfgd      (VD* usr,UL val);
VD  membgd      (VD* usr,UL val);
VD  memsetcurpos(VD* usr,UL row,UL col);
VD  memsetcursiz(VD* usr,UL val);
VD  memprint    (VD* usr,CH* str,UL row,UL col);
VD  memprin     (VD* usr,CH* str,UL row,UL col,UL len);
VD  memputc     (VD* usr,CH c,UL row,UL col);
VD  memscroll   (VD* usr);

//generic function sets supporting display to virtual display memory buffer
VD  vmemfgd      (VD* usr,UL val);
VD  vmembgd      (VD* usr,UL val);
VD  vmemsetcurpos(VD* usr,UL row,UL col);
VD  vmemsetcursiz(VD* usr,UL val);
VD  vmemprint    (VD* usr,CH* str,UL row,UL col);
VD  vmemprin     (VD* usr,CH* str,UL row,UL col,UL len);
VD  vmemputc     (VD* usr,CH c,UL row,UL col);
VD  vmemscroll   (VD* usr);

EX  ACCDIS* AA;
EX  ACCDIS  mem,vmem,cga,mda,avesa;

//
SL  mdaset(UL mode);
VD  mdaclear(VD);
VD  mdaclear(UL rows);
VD  mdacurb(UL row,UL col);
VD  mdasave (CH* dst,UL row,UL col,UL n);
VD  mdarestore (CH* src,UL row,UL col,UL n);

VD  mdaread (CH* dst,UL row,UL col,UL n);


VD  accdis_setkeycallback(KEYCALLBACK callbackfunc,VD* ptr);

VD  displaylist(CH* str,UL recsize,UL displen,UL items,UL row,UL col,UL offset);
SL  selectlist (CH* str,UL recsize,UL displen,UL items,UL row,UL col,UL visibles,UL scroll);
VD  displaylistitem(CH* data,UL len,UL row,UL col);
SL  acceptitem(CH* data,UL len,UL row,UL col);
SL  displayat(UL row,UL col,CH* format,...);
SL  acceptat(UL row,UL col,CH* format,...);
VD  clearrow(UL row,CH* format,UL len);

//UL  getkey(UL* key,CH* c,UL row,UL col);

VD  highlightlistitem  (UL index,CH* str,UL recsize,UL len,UL row,UL col);
VD  unhighlightlistitem(UL index,CH* str,UL recsize,UL len,UL row,UL col);

//new generic ACCDIS support

typedef VD (*VOIDFUNC)(VD);
VD  AccdisSetIdleFunction(VOIDFUNC idlefunc);

//13.12.09 CGA/VESA dual mode support
SL  dcat(UL row,UL col,CH* format,...);
VD  dvblit(VD);