/*
 *	OSBIND.H	Mnemonic names for operating system calls
 *
 * Adapted from Dale Schumacher's version to Mark Johnson C by Eric Gisin.
 */

/* hacked by jrd for GNU */

/*	
 *	GEMDOS	(trap1)
 */
#define	Pterm0()	(void)		trap_1_w(0x00)
#define	Cconin()	(char)		trap_1_w(0x01)
#define	Cconout(c)	(short)		trap_1_ww(0x02,c)
#define	Cauxin()	(char)		trap_1_w(0x03)
#define	Cauxout(c)	(short)		trap_1_ww(0x04,c)
#define	Cprnout(c)	(short)		trap_1_ww(0x05,c)
#define	Crawio(data)	(void)		trap_1_ww(0x06,data)
#define	Crawcin()	(char)		trap_1_w(0x07)
#define	Cnecin()	(char)		trap_1_w(0x08)
#define	Cconws(s)	(void)		trap_1_wl(0x09,s)
#define	Cconrs(buf)	(short)		trap_1_wl(0x0A,buf)
#define	Cconis()	(short)		trap_1_w(0x0B)
#define	Dsetdrv(d)	(short)		trap_1_ww(0x0E,d)
#define	Cconos()	(short)		trap_1_w(0x10)
#define	Cprnos()	(short)		trap_1_w(0x11)
#define	Cauxis()	(short)		trap_1_w(0x12)
#define	Cauxos()	(short)		trap_1_w(0x13)
#define	Dgetdrv()	(short)		trap_1_w(0x19)
#define	Fsetdta(dta)	(short)		trap_1_wl(0x1A,dta)
#define	Super(ptr)	(void * )	trap_1_wl(0x20,ptr)
#define	Tgetdate()	(short)		trap_1_w(0x2A)
#define	Tsetdate(date)	(void)		trap_1_wl(0x2B,date)
#define	Tgettime()	(short)		trap_1_w(0x2C)
#define	Tsettime(time)	(void)		trap_1_wl(0x2D,time)
#define	Fgetdta()	(void * )	trap_1_w(0x2F)
#define	Sversion()	(short)		trap_1_w(0x30)

/* ??? */
#define	Ptermres(save,rv) (void)	trap_1_wlw(0x31,save,rv)
#define	Dfree(buf,d)	(long)		trap_1_wlw(0x36,buf,d)
#define	Dcreate(path)	(short)		trap_1_wl(0x39,path)
#define	Ddelete(path)	(short)		trap_1_wl(0x3A,path)
#define	Dsetpath(path)	(short)		trap_1_wl(0x3B,path)
#define	Fcreate(fn,mode) (short)	trap_1_wlw(0x3C,fn,mode)
#define	Fopen(fn,mode)	(short)		trap_1_wlw(0x3D,fn,mode)
#define	Fclose(H)	(short)		trap_1_ww(0x3E,H)
#define	Fread(H,cnt,buf) (long)		trap_1_wwll(0x3F,H,cnt,buf)
#define	Fwrite(H,cnt,buf) (long)	trap_1_wwll(0x40,H,cnt,buf)
#define	Fdelete(fn)	(short)		trap_1_wl(0x41,fn)
#define	Fseek(where,H,how) (long)	trap_1_wlww(0x42,where,H,how)
#define	Fattrib(fn,rwflag,attr)	(short)	trap_1_wlww(0x43,fn,rwflag,attr)
#define	Fdup(H)		(short)		trap_1_ww(0x45,H)
#define	Fforce(Hstd,Hnew) (short)	trap_1_www(0x46,Hstd,Hnew)
#define	Dgetpath(buf,d)	(short)		trap_1_wlw(0x47,buf,d)
#define	Malloc(size)	(void * )	trap_1_wl(0x48,size)
#define	Mfree(ptr)	(void)		trap_1_wl(0x49,ptr)
#define	Mshrink(ptr,size) (void)	trap_1_wwll(0x4A,0,ptr,size)
#define	Pexec(mode,prog,tail,env) (long) trap_1_wwlll(0x4B,mode,prog,tail,env)
#define	Pterm(rv)	(void)		trap_1_ww(0x4C,rv)
#define	Fsfirst(filespec,attr) (short)	trap_1_wlw(0x4E,filespec,attr)
#define	Fsnext()	(short)		trap_1_w(0x4F)
#define	Frename(zero,old,new) (short)	trap_1_wwll(0x56,zero,old,new)
#define	Fdatime(timeptr,file_handle,rwflag) (short) trap_1_wlww(0x57,timeptr,file_handle,rwflag)

/* codes for Pexec */

#define	PE_LOADGO		0		/* load & go */
#define	PE_LOAD			1		/* just load */
#define	PE_CBASEPAGE		2		/* just create basepage */
#define	PE_GO			3		/* just go */

/*
 *	BIOS	(trap13)
 */

#define	Bconstat(DEV)	(long)		trap_13_ww(1,DEV)
#define	Bconin(DEV)	(long)		trap_13_ww(2,DEV)
#define	Bconout(DEV,c)	(void)		trap_13_www(3,DEV,((c) & 0xFF))
/* #define	Rwabs(rwflag,buf,n,sector,d)	trap_13_wwl(4,rwflag,buf,n,sector,d) */
#define	Setexc(vnum,vptr) (long)	trap_13_wwl(5,vnum,vptr)
#define	Tickcal()	(long)		trap_13_w(6)
#define	Getbpb(d)	(long)		trap_13_ww(7,d)
#define	Bcostat(DEV)	(long)		trap_13_ww(8,DEV)
#define	Mediach(d)	(short)		trap_13_ww(9,d)
#define	Drvmap()	(long)		trap_13_w(10)
#define	Getshift()	(short)		trap_13_ww(11,-1)
#define	Kbshift(data)	(short)		trap_13_ww(11,data)

/*
 *	XBIOS	(trap14)
 */

/* the struct returned by kbdvbase().  I think this is right... */
struct _kbd_vectors
	{
	void ( * midivec)();		/* Midi input */
	void ( * vkbderr)();		/* Keyboard error */
	void ( * vmiderr)();		/* Midi error */
	void ( * statvec)();		/* IDBD status */
	void ( * mousevec)();		/* Mouse routines */
	void ( * clockvec)();		/* clock time routine */
	void ( * joyvec)();		/* joystick routines */
	void ( * midisys)();		/* system MIDI vector */
	void ( * ikbdsys)();		/* IKBD system vector */
	};
typedef struct _kbd_vectors kbdvecs;
	
#define	Initmous(type,param,vptr) (void)	trap_14_wwwl(0,type,param,vptr)
#define	Physbase()	(long)		trap_14_w(2)
#define	Logbase()	(long)		trap_14_w(3)
#define	Getrez()	(short)		trap_14_w(4)
#define	Setscreen(lscrn,pscrn,rez) (void)	trap_14_wllw(5,lscrn,pscrn,rez)
#define	Setpallete(palptr)	(void)	trap_14_wl(6,palptr)
#define	Setcolor(colornum,mixture) (short)	trap_14_www(7,colornum,mixture)
#define	Floprd(buf,x,d,sect,trk,side,n)	trap(14,8,buf,x,d,sect,trk,side,n)
#define	Flopwr(buf,x,d,sect,trk,side,n)	trap(14,9,buf,x,d,sect,trk,side,n)
#define	Flopfmt(b,x,d,spt,trk,sd,i,m,v)	trap(14,10,b,x,d,spt,trk,sd,i,m,v)
#define	Midiws(cnt,ptr)			trap_14_wwl(12,cnt,ptr)
#define	Mfpint(vnum,vptr)		trap_14_wwl(13,vnum,vptr)
#define	Iorec(ioDEV)			trap_14_ww(14,ioDEV)
#define	Rsconf(baud,flow,uc,rs,ts,sc)	trap_14_wwwwwww(15,baud,flow,uc,rs,ts,sc)
#define	Keytbl(nrml,shft,caps)		trap_14_wlll(16,nrml,shft,caps)
#define	Random()			trap_14_ww(14,17)
#define	Protobt(buf,serial,dsktyp,exec)	trap(14,18,buf,serial,dsktyp,exec)
#define	Flopver(buf,x,d,sect,trk,sd,n)	trap(14,19,buf,x,d,sect,trk,sd,n)
#define	Scrdmp()			trap_14_w(20)
#define	Cursconf(func,rate)		trap_14_www(21,func,rate)
#define	Settime(time)			trap_14_wl(22,time)
#define	Gettime()			trap_14_w(23)
#define	Bioskeys()			trap_14_w(24)
#define	Ikbdws(len_minus1,ptr)		trap_14_wwl(25,len_minus1,ptr)
#define	Jdisint(vnum)			trap_14_ww(26,vnum)
#define	Jenabint(vnum)			trap_14_ww(27,vnum)
#define	Giaccess(data,reg)		trap_14_www(28,data,reg)
#define	Offgibit(ormask)		trap_14_ww(29,ormask)
#define	Ongibit(andmask)		trap_14_ww(30,andmask)
#define	Xbtimer(timer,ctrl,data,vnum)	trap_14_wwwwwww(31,timer,ctrl,data,vnum)
#define	Dosound(ptr)			trap_14_wl(32,ptr)
#define	Setprt(config)			trap_14_wl(33,config)
#define	Kbdvbase()	(kbdvecs * )	trap_14_w(34)
#define	Kbrate(delay,reprate)		trap_14_www(35,delay,reprate)
#define	Prtblk(pblkptr)			trap_14_wl(36,pblkptr)
#define	Vsync()				trap_14_w(37)
#define	Supexec(funcptr)		trap_14_wl(38,funcptr)

