/*
 * this points to the structure that has all the useful functions that
 * the kernel told us about
 */

#ifndef _kernel_h
#define _kernel_h

extern struct kerinfo *kernel;

/* BIOS entry points */
#define BIOS(code)	(*kernel->bios_tab[code])
#define DRVMAP()	(BIOS(0x10) ())

/* GEMDOS entry points */
#define GEMDOS(code)	(*kernel->dos_tab[code])
#define CCONWS(s)			(GEMDOS(9) (s))
#define FGETDTA()			(GEMDOS(0x2f) ())
#define CCONOUT(a)		(GEMDOS(2) (a))
#define TGETDATE()		(GEMDOS(0x2a) ())
#define TGETTIME()		(GEMDOS(0x2c) ())
#define PTERMRES(a,b)	(GEMDOS(0x31) (a,b))
#define MALLOC(a)			(GEMDOS(0x48) (a))
#define FSELECT(a,b,c,d)	(GEMDOS(0x11d) (a,b,c,d))
#define DCNTL(a,b,c)	(GEMDOS(0x130) (a,b,c))
#define PGETPID()	(GEMDOS(0x10b) ())
#define PGETPPID()	(GEMDOS(0x10c) ())
#define PGETPGRP()	(GEMDOS(0x10d) ())
#define PGETUID()	(GEMDOS(0x10f) ())
#define PGETGID()	(GEMDOS(0x114) ())
#define PGETEUID()	(GEMDOS(0x138) ())
#define PGETEGID()	(GEMDOS(0x139) ())

/* Kernel entry points */

/* media change vector */
#define drvchng	(*kernel->drvchng)

/* Debugging stuff */
#define TRACE(x)	(*kernel->trace) x
#define DEBUG(x)	(*kernel->debug) x
#define ALERT(x)	(*kernel->alert) x
#define FATAL(x)	(*kernel->fatal) x

/* memory allocation functions */
#define kmalloc	(*kernel->kmalloc)
#define kfree	(*kernel->kfree)
#define umalloc	(*kernel->umalloc)
#define ufree	(*kernel->ufree)

/* utility functions for string manipulation */
#define strnicmp	(*kernel->strnicmp)
#define stricmp	(*kernel->stricmp)
#define strlwr	(*kernel->strlwr)
#define strupr	(*kernel->strupr)
#define sprintf	(*kernel->sprintf)

/* utility functions for manipulating time */
#define millis_time	(*kernel->millis_time)
#define unixtim	(*kernel->unixtim)
#define dostim	(*kernel->dostim)

/* utility functions for dealing with pauses */
#define nap	(*kernel->nap)
#define sleep	(*kernel->sleep)
#define wake	(*kernel->wake)
#define wakeselect	(*kernel->wakeselect)

/* file system utility functions */
#define denyshare	(*kernel->denyshare)
#define denylock	(*kernel->denylock)

/* functions for adding/cancelling timeouts */
#define addtimeout	(*kernel->addtimeout)
#define canceltimeout	(*kernel->canceltimeout)

/* Some useful kernel defines */
#define CURPROC_Q	0
#define READY_Q		1
#define WAIT_Q		2
#define IO_Q		3
#define ZOMBIE_Q	4
#define TSR_Q		5
#define STOP_Q		6
#define SELECT_Q	7

#endif /* _kernel_h */
