#line 1/*ACE 4 0110 */
/*
 *      OSBIND.H        Mnemonic names for operating system calls
 */

/*
   CHANGES:

   Harald Binder 12.12.92
		* added several system structures
		* added new system calls for STE & TT

   Holger Weets  24.02.93
		* correction of some changes
		* resorting functions by their numbers
*/


#ifndef OSBIND_H
#define OSBIND_H

extern  long    gemdos();
extern  long    bios();
extern  long    xbios();
extern  int     bdos();


/* GEMDOS - structures */

typedef struct {
   char maxlen;
   char actuallen;
   char buffer[255];
} LINE;

typedef struct {
   long b_free;
   long b_total;
   long b_secsiz;
   long b_clsiz;
} DISKINFO;

typedef struct {
   unsigned int time;
   unsigned int date;
} DOSTIME;

typedef struct {
   char         d_reserved[21];
   char         d_attrib;
   unsigned int d_time;
   unsigned int d_date;
   long         d_length;
   char         d_fname[14];
} DTA;

typedef struct {
   int recsiz;
   int clsiz;
   int clsizb;
   int rdlen;
   int fsiz;
   int fatrec;
   int datrec;
   int numcl;
   int bflags;
} BPB;

typedef struct {
   char          dir_name[11];
   char          dir_attr;
   char          dir_dummy[10];
   unsigned int  dir_time;
   unsigned int  dir_date;
   unsigned int  dir_stcl;
   unsigned long dir_flen;
} DIR;

typedef struct _bcb {
   struct _bcb *b_link;
   int         b_negl;
   int         b_private[5];
   void        *b_buf;
} BCB;

typedef struct {
   int          puns;
   char         pun[16];
   long         part_start[16];
   long         P_cookie;
   long         *P_cookptr;
   unsigned int P_version;
   unsigned int P_max_sector;
   long         reserved[16];
} PUN_INFO;


/* GEMDOS - defines */

#define FA_RDONLY 0x01
#define FA_HIDDEN 0x02
#define FA_SYSTEM 0x04
#define FA_LABEL  0x08
#define FA_DIREC  0x10
#define FA_ARCH   0x20
#define FA_ATTRIB (FA_DIREC|FA_RDONLY|FA_HIDDEN|FA_SYSTEM)


/* BIOS - structures */

#include <basepage.h>

typedef struct md {
   struct md *m_link;
   long      m_start;
   long      m_length;
   BASEPAGE  *m_own;
} MD;

typedef struct {
   MD *mp_mfl;
   MD *mp_mal;
   MD *mp_rover;
} MPB;


/* XBIOS - structures */

typedef struct {
   char topmode;
   char buttons;
   char xparam;
   char yparam;
} PARAM;

typedef struct {
   int xmax;
   int ymax;
   int xinitial;
   int yinitial;
} EXTRA;

typedef struct {
   long ibuf;
   int  ibufsiz;
   int  ibufhd;
   int  ibuftl;
   int  ibuflow;
   int  ibufhi;
} IOREC;

typedef struct {
   void (*midivec)();
   void (*vkbderr)();
   void (*vmiderr)();
   void (*statvec)();
   void (*mousevec)();
   void (*clockvec)();
   void (*joyvec)();
   void (*midisys)();
   void (*ikbdsys)();
   int  drvstat;
} KBDVECS;

typedef struct {
   char *unshift;
   char *shift;
   char *capslock;
} KEYTAB;

typedef struct {
   unsigned long drivemap;
   char          *version;
   long          reserved[2];
} METAINFO;

typedef struct {
   long pb_scrptr;
   int  pb_offset;
   int  pb_width;
   int  pb_height;
   int  pb_left;
   int  pb_right;
   int  pb_screz;
   int  pb_prrez;
   long pb_colptr;
   int  pb_prtype;
   int  pb_prport;
   long pb_mask;
} PBDEF;

typedef struct {
   int           (*Bconstat)();
   long          (*Bconin)();
   long          (*Bcostat)();
   void          (*Bconout)();
   unsigned long (*Rsconf)();
   IOREC         *iorec;
} MAPTAB;

typedef struct {
   MAPTAB *maptab;
   int    maptabsize;
} BCONMAP;


/* special system structures */

typedef struct {
   char xb_magic[4];
   char xb_id[4];
   long xb_oldvec;
} XBRA;

typedef struct {
   long gm_magic;
   void *gm_end;
   void *gm_init;
} GEM_MUPB;

typedef struct _osheader {
   unsigned int     os_entry;
   unsigned int     os_version;
   void             *reseth;
   struct _osheader *os_beg;
   void             *os_end;
   long             os_rsvl;
   GEM_MUPB         *os_magic;
   long             os_date;
   unsigned int     os_conf;
   unsigned int     os_dosdate;
   /* Folgendes gibt es erst ab TOS 1.02 */
   char             **p_root;
   char             **pkb_shift;
   BASEPAGE         **p_run;
   char             *p_rsv3;
} OSHEADER;


/*
 *      GEMDOS  (trap #1)
 */
#define Pterm0()                    gemdos(0x00)
#define Cconin()                    gemdos(0x01)
#define Cconout(c)                  gemdos(0x02,c)
#define Cauxin()                    (int)gemdos(0x03)
#define Cauxout(c)                  gemdos(0x04,c)
#define Cprnout(c)                  (int)gemdos(0x05,c)
#define Crawio(data)                gemdos(0x06,data)
#define Crawcin()                   gemdos(0x07)
#define Cnecin()                    gemdos(0x08)
#define Cconws(s)                   gemdos(0x09,s)
#define Cconrs(buf)                 gemdos(0x0A,buf)
#define Cconis()                    (int)gemdos(0x0B)
#define Dsetdrv(d)                  gemdos(0x0E,d)
#define Cconos()                    (int)gemdos(0x10)
#define Cprnos()                    (int)gemdos(0x11)
#define Cauxis()                    (int)gemdos(0x12)
#define Cauxos()                    (int)gemdos(0x13)
#define Maddalt(start,size)         gemdos(0x14,start,size)
#define Dgetdrv()                   (int)gemdos(0x19)
#define Fsetdta(dta)                gemdos(0x1A,dta)
#define Super(ptr)                  gemdos(0x20,ptr)
#define Tgetdate()                  (unsigned int)gemdos(0x2A)
#define Tsetdate(date)              (int)gemdos(0x2B,date)
#define Tgettime()                  (unsigned int)gemdos(0x2C)
#define Tsettime(time)              (int)gemdos(0x2D,time)
#define Fgetdta()                   (DTA *)gemdos(0x2F)
#define Sversion()                  (int)gemdos(0x30)
#define Ptermres(save,rv)           gemdos(0x31,save,rv)
#define Dfree(buf,d)                gemdos(0x36,buf,d)
#define Dcreate(path)               (int)gemdos(0x39,path)
#define Ddelete(path)               (int)gemdos(0x3A,path)
#define Dsetpath(path)              (int)gemdos(0x3B,path)
#define Fcreate(fn,mode)            (int)gemdos(0x3C,fn,mode)
#define Fopen(fn,mode)              (int)gemdos(0x3D,fn,mode)
#define Fclose(h)                   (int)gemdos(0x3E,h)
#define Fread(h,cnt,buf)            gemdos(0x3F,h,cnt,buf)
#define Fwrite(h,cnt,buf)           gemdos(0x40,h,cnt,buf)
#define Fdelete(fn)                 (int)gemdos(0x41,fn)
#define Fseek(where,h,how)          gemdos(0x42,where,h,how)
#define Fattrib(fn,rwflag,attr)     (int)gemdos(0x43,fn,rwflag,attr)
#define Mxalloc(size,mode)          (void *)gemdos(0x44,size,mode)
#define Fdup(h)                     (int)gemdos(0x45,h)
#define Fforce(hstd,hnew)           (int)gemdos(0x46,hstd,hnew)
#define Dgetpath(buf,d)             (int)gemdos(0x47,buf,d)
//- #define Malloc(size)                (void *)gemdos(0x48,size)
#define Malloc(size)                gemdos(0x48,size)
#define Mfree(ptr)                  (int)gemdos(0x49,ptr)
#define Mshrink(ptr,size)           (int)gemdos(0x4A,0,ptr,size)
#define Pexec(mode,prog,tail,env)   gemdos(0x4B,mode,prog,tail,env)
#define Pterm(rv)                   gemdos(0x4C,rv)
#define Fsfirst(filespec,attr)      (int)gemdos(0x4E,filespec,attr)
#define Fsnext()                    (int)gemdos(0x4F)
#define Frename(zero,old,new)       (int)gemdos(0x56,zero,old,new)
#define Fdatime(timeptr,h,rwflag)   gemdos(0x57,timeptr,h,rwflag)
#define Flock(h,mode,start,lenght)  gemdos(0x5C,h,mode,start,length)

/*
 *      BIOS    (trap #13)
 */
#define Bconstat(dev)                   (int)bios(1,dev)
#define Bconin(dev)                     bios(2,dev)
#define Bconout(dev,c)                  bios(3,dev,c)
#define Rwabs(rwflag,buf,n,sector,d,lr) bios(4,rwflag,buf,n,sector,d,lr)
#define Setexc(vnum,vptr)               bios(5,vnum,vptr)
#define Tickcal()                       bios(6)
#define Getbpb(d)                       (BPB *)bios(7,d)
#define Getmpb(p_mpb)                   gemdos(0,p_mpb)
#define Bcostat(dev)                    bios(8,dev)
#define Mediach(d)                      bios(9,d)
#define Drvmap()                        bios(10)
#define Getshift()                      bios(11,-1)
#define Kbshift(data)                   bios(11,data)

/*
 *      XBIOS   (trap #14)
 */
#define Initmous(type,param,vptr)       xbios(0,type,param,vptr)
#define Ssbrk(amount)                   xbios(1,amount)
#define Physbase()                      (void *)xbios(2)
#define Logbase()                       (void *)xbios(3)
#define Getrez()                        (int)xbios(4)
#define Setscreen(lscrn,pscrn,rez)      xbios(5,lscrn,pscrn,rez)
#define Setpalette(palptr)              xbios(6,palptr)
#define Setcolor(colornum,mixture)      (int)xbios(7,colornum,mixture)
#define Floprd(buf,x,d,sect,trk,side,n) (int)xbios(8,buf,x,d,sect,trk,side,n)
#define Flopwr(buf,x,d,sect,trk,side,n) (int)xbios(9,buf,x,d,sect,trk,side,n)
#define Flopfmt(b,x,d,spt,trk,sd,i,m,v) (int)xbios(10,b,x,d,spt,trk,sd,i,m,v)

#define Midiws(cnt,ptr)                 xbios(12,cnt,ptr)
#define Mfpint(vnum,vptr)               xbios(13,vnum,vptr)
#define Iorec(iodev)                    (IOREC *)xbios(14,iodev)
#define Rsconf(baud,flow,uc,rs,ts,sc)   (unsigend long)xbios(15,baud,flow,uc,rs,ts,sc)
#define Keytbl(nrml,shft,caps)          (KEYTAB *)xbios(16,nrml,shft,caps)
#define Random()                        xbios(17)
#define Protobt(buf,serial,dsktyp,exec) xbios(18,buf,serial,dsktyp,exec)
#define Flopver(buf,x,d,sect,trk,sd,n)  (int)xbios(19,buf,x,d,sect,trk,sd,n)
#define Scrdmp()                        xbios(20)
#define Cursconf(func,rate)             (int)xbios(21,func,rate)
#define Settime(time)                   xbios(22,time)
#define Gettime()                       xbios(23)
#define Bioskeys()                      xbios(24)
#define Ikbdws(len_minus1,ptr)          xbios(25,len_minus1,ptr)
#define Jdisint(vnum)                   xbios(26,vnum)
#define Jenabint(vnum)                  xbios(27,vnum)
#define Giaccess(data,reg)              (char)xbios(28,data,reg)
#define Offgibit(ormask)                xbios(29,ormask)
#define Ongibit(andmask)                xbios(30,andmask)
#define Xbtimer(timer,ctrl,data,vnum)   xbios(31,timer,ctrl,data,vnum)
#define Dosound(ptr)                    xbios(32,ptr)
#define Setprt(config)                  (int)xbios(33,config)
#define Kbdvbase()                      (KBDVECS *)xbios(34)
#define Kbrate(delay,reprate)           (int)xbios(35,delay,reprate)
#define Prtblk(pblkptr)                 xbios(36,pblkptr)
#define Vsync()                         xbios(37)
#define Supexec(funcptr)                xbios(38,funcptr)
#define Puntaes()                       xbios(39)

#define Floprate(drive,rate)            (int)xbios(41,drive,rate)
#define DMAread(sect,cnt,buf,dev)       xbios(42,sect,cnt,buf,dev)
#define DMAwrite(sect,cnt,buf,dev)      xbios(43,sect,cnt,buf,dev)
#define Bconmap(devno)                  xbios(44,devno)
#define NVMaccess(op,start,cnt,buf)     (int)xbios(46,op,start,cnt,buf)
#define Metainit(buf)                   xbios(48,buf)

#define Blitmode(mode)                  (int)xbios(64,mode)
#define EsetShift(shftmode)             (int)xbios(80,shftmode)
#define EgetShift()                     (int)xbios(81)
#define EsetBank(banknum)               (int)xbios(82,banknum)
#define EsetColor(colnum,col)           (int)xbios(83,colnum,col)
#define EsetPalette(colnum,cnt,pal_p)   xbios(84,colnum,cnt,pal_p)
#define EgetPalette(colnum,cnt,pal_p)   xbios(85,colnum,cnt,pal_p)
#define EsetGray(switch)                (int)xbios(86,switch)
#define EsetSmear(switch)               (int)xbios(87,switch)

#endif  OSBIND_H
