home *** CD-ROM | disk | FTP | other *** search
- /*-------------------------------------------------------*/
- /* BIOS, XBIOS, and GEMDOS bindings */
- /* Written by Robert Fischer September 20, 1986 */
- /* Modified for C December 28, 1987 */
- /*-------------------------------------------------------*/
- /* This source file is part of the LynxLib miscellaneous library by
- Robert Fischer, and is Copyright 1990 by Robert Fischer. It costs no
- money, and you may not make money off of it, but you may redistribute
- it. It comes with ABSOLUTELY NO WARRANTY. See the file LYNXLIB.DOC
- for more details.
- To contact the author:
- Robert Fischer \\80 Killdeer Rd \\Hamden, CT 06517 USA
- (203) 288-9599 fischer-robert@cs.yale.edu */
-
- #ifndef TOS_H
- #define TOS_H
-
- #ifndef STDDEF_H
- #include <stddef.h>
- #endif
-
-
- /* ==================== ERROR CODES ==================== */
-
- /* BIOS error codes */
- #define E_OK 0
- #define E_ERROR -1 /* fundamental error */
- #define E_DRVNR -2 /* drive not ready */
- #define E_UNCMD -3 /* unknown command */
- #define E_CRC -4 /* CRC error */
- #define E_BADRQ -5 /* bad request */
- #define E_SEEK -6 /* seek error */
- #define E_MEDIA -7 /* unknown media */
- #define E_SECNF -8 /* sector not found */
- #define E_PAPER -9 /* no paper */
- #define E_WRITF -10 /* write fault */
- #define E_READF -11 /* read fault */
- #define E_GENRL -12 /* general error */
- #define E_WRPRO -13 /* write protect */
- #define E_CHNG -14 /* media change */
- #define E_UNDEV -15 /* unknown device */
- #define E_BADSF -16 /* bad sectors on format */
- #define E_OTHER -17 /* insert other disk */
-
- /* GEMDOS error codes */
- #define E_INVFN -32 /* invalid function number */
- #define E_FILNF -33 /* file not found */
- #define E_PTHNF -34 /* path not found */
- #define E_NHNDL -35 /* no handles left -- too many open files */
- #define E_ACCDN -36 /* access denied */
- #define E_IHNDL -37 /* invalid handle */
- #define E_NSMEM -39 /* insufficient memory */
- #define E_IMBA -40 /* invalid memory block address */
- #define E_DRIVE -46 /* invalid drive specified */
- #define E_NMFIL -49 /* no more files */
-
- /* other system error codes */
- #define E_RANGE -64 /* range error */
- #define E_INTRN -65 /* internal error */
- #define E_PLFMT -66 /* invalid program load format */
- #define E_GSBF -67 /* setblock failure due to growth restrictions */
-
- /* =================== CHARACTER I/O =================== */
-
- /* Crawio */
- #define READ_INPUT 0xFF
-
- /* Cconis, Cconos, Cprnos, Cauxis, Cauxos, Bcostat */
- #define CHAR_AVAIL -1
- #define NONE_AVAIL 0
-
- /* Bconstat, Bconin, Bconout */
- #define PRT 0
- #define AUX 1
- #define CON 2
- #define MIDI 3
- #define KEYBOARD 4
-
- /* Kbshift */
- #define R_SHIFT 1
- #define L_SHIFT 2
- #define CTRL 4
- #define ALT 8
- #define CAPS_LOCK 16
- #define R_MOUSE 32 /* Also CLR/HOME */
- #define L_MOUSE 64 /* Also Insert */
-
- /* Keytbl */
- typedef struct {
- BYTE *unshifted;
- BYTE *shifted;
- BYTE *capslock;
- } KEY_TABLES;
-
- /* ====================== FILE I/O ===================== */
-
- /* File I/O -- Fopen, Fcreate, Fsfirst, Fsnext */
- #define GFILE WORD /* GEMDOS file handle */
-
- /* File attributes -- Fcreate, Fattrib, Fsfirst */
- #define NO_ATTRIB 0
- #define READ_ONLY 1
- #define HIDDEN 2
- #define SYSTEM 4
- #define VOLUME 8
- #define FOLDER 0x10
- #define CLOSED 0x20
- #define ALL_FILES 0x27
- #define ALL_ATTRIB 0x3F
-
- /* Fopen */
- #define G_READ 0
- #define G_WRITE 1
- #define G_RW 2
- #define READ_MODE 0
- #define WRITE_MODE 1
- #define RW_MODE 2
-
- /* Fseek */
- #define FROM_BEGIN 0
- #define FROM_CURRENT 1
- #define FROM_END 2
-
- /* Fwrite */
- #define G_READ 0
- #define G_WRITE 1
-
- /* Fattrib */
- #define SET_ATTRIB 1
- #define GET_ATTRIB 0
-
- /* ====================== TIME AND DATE =================== */
- typedef struct {
- unsigned int second : 5;
- unsigned int minute : 6;
- unsigned int hour : 5;
- } time_rec;
- typedef struct {
- unsigned int day : 5;
- unsigned int month : 4;
- unsigned int year : 7;
- } date_rec;
-
- /* Settime, Gettime */
- typedef union {
- LONG l;
- struct {
- WORD date;
- WORD time;
- } i;
- struct {
- date_rec date;
- time_rec time;
- } dt;
- } BIOS_DT_REC;
-
- /* Fdatime, Tsettime, Tgettime, Tsetdate, Tgetdate */
- typedef union {
- LONG l;
- struct {
- WORD time;
- WORD date;
- } i;
- struct {
- time_rec time;
- date_rec date;
- } td;
- } GEMDOS_TD_REC;
-
- /* Fdatime */
- #define GET_FDTM 0
- #define SET_FDTM 1
-
- /* Fsfirst, Fsnext */
- typedef struct {
- BYTE reserve[20];
- WORD attrib;
- time_rec time;
- date_rec date;
- LONG size;
- char name[14];
- } TRANS_BUF;
- #define DTB TRANS_BUF
- #define DTA TRANS_BUF
-
- /* Dfree */
- typedef struct {
- LONG di_free; /* Free clusters */
- LONG di_many; /* # of clusters total */
- LONG di_ssiz; /* Size of sector in bytes */
- LONG di_spau; /* Sectors per cluster */
- } DISK_INFO;
-
- /* Rwabs */
- #define B_READ 0
- #define B_WRITE 1
- #define B_READ_NOCHANGE 2
- #define B_WRITE_NOCHANGE 3
-
- #define FLOP_A 0
- #define FLOP_B 1
-
- #define SEC_SIZE 512
-
- /* Mediach */
- #define CHANGE_NO 0
- #define CHANGE_MAYBE 1
- #define CHANGE_YES 2
-
- /* Getbpb */
- typedef struct {
- WORD recsize; /* physical sector size in bytes */
- WORD clsize; /* cluster size in sectors */
- WORD clsizeb; /* cluster size in bytes */
- WORD rdlen; /* root directory length in sectors */
- WORD fsize; /* FAT size in sectors */
- WORD fatrec; /* Sector # of first sector of 2nd FAT */
- WORD datarec; /* sector # of first data sector */
- WORD numcl; /* number of data clusters on disk */
- WORD bflags; /* various flags */
-
- /* === additional fields not strictly part of the bpb === */
- WORD ntracks; /* number of tracks on device */
- WORD nsides; /* number of sides on device */
- WORD spc; /* sectors per cylinder */
- WORD spt; /* sectors per track */
- WORD hidden; /* number of hidden sectors */
- LONG serial; /* Disk serial number */
- } BPB;
-
- /* Flopfmt */
- #define MAGIC_FORMAT 0x87654321L
- #define VIRGIN_VAL 0xE5E5
- typedef WORD FMT_BUF[5000]; /* 10 sector buffer */
-
- /* Protobt */
- #define LEAVE_ALONE -1
- #define T40_1SIDE 0
- #define T40_2SIDE 1
- #define T80_1SIDE 2
- #define T80_2SIDE 3
-
- #define EXECUTABLE 1
- #define NON_EXECUTABLE 0
- #define RAND_SER 0x1000000
-
- /* ==================== RS232 PORT ===================== */
-
- /* Rsconf */
- #define BAUD_19200 0
- #define BAUD_9600 1
- #define BAUD_4800 2
- #define BAUD_3600 3
- #define BAUD_2400 4
- #define BAUD_2000 5
- #define BAUD_1800 6
- #define BAUD_1200 7
- #define BAUD_600 8
- #define BAUD_300 9
- #define BAUD_200 10
- #define BAUD_150 11
- #define BAUD_134 12
- #define BAUD_110 13
- #define BAUD_75 14
- #define BAUD_50 15
-
- #define NOFLOW 0
- #define XON_XOFF 1
- #define RTS_CTS 2
-
- /* ====================== DISPLAY ====================== */
-
- /* Getrez (Getres) */
- #define LO_REZ 0
- #define MED_REZ 1
- #define HI_REZ 2
- #define LOW_RES 0
- #define MED_RES 1
- #define HIGH_RES 2
-
- /* Cursconf */
- #define HIDE_CURSOR 0
- #define SHOW_CURSOR 1
- #define BLINK_ON 2
- #define BLINK_OFF 3
- #define BLINK_SPEED 4
- #define RETURN_BLINK 5
-
- /* Setpalette, Setcolor */
- typedef WORD PALETTE[16];
-
- /* Dosound */
- typedef BYTE SOUND_BUF[21];
-
- /* ====================== PRINTER ====================== */
-
- /* Setprt */
- #define PR_DAISY 1
- #define PR_MONO 2
- #define PR_EPSON 4
- #define PR_FINAL 8
- #define PR_SERIAL 0x10
- #define PR_SINGLE 0x20
- #define PR_DOT 0
- #define PR_COLOR 0
- #define PR_ATARI 0
- #define PR_DRAFT 0
- #define PR_PARALLEL 0
- #define PR_FANFOLD 0
-
- /* Prtblk */
- #define PB_DRAFT 0 /* Low density pb_dstres */
- #define PB_FINAL 1 /* High density pb_dstres */
- #define PB_MONO160 0 /* Dot matrix 1/160 inch pb_type */
- #define PB_COLOR160 1 /* Dot matrix 1/160 inch pb_type */
- #define PB_DAISY 2 /* Daisy wheel pb_type (text only) */
- #define PB_MONO120 3 /* Dot matrix 1/120 inch pb_type */
- #define PB_PARALLEL 0 /* Parallel port pb_port */
- #define PB_SERIAL 1 /* Serial port pb_port */
-
- typedef BYTE HTONE[18];
-
- typedef struct {
- char *blkptr; /* Block to print */
- int offset; /* Bit offset */
- int width; /* x dimention */
- int height; /* y dimention */
- int left; /* left leading x */
- int right; /* right trailing x */
- int srcres; /* source resolution */
- int dstres; /* destination resolution */
- PALETTE *colpal; /* color palette pointer */
- int ptype; /* printer type */
- int port; /* printer port */
- HTONE *masks; /* Halftone mask pointer */
- } PRTARG;
-
- /* ================== Now the actual definitions ================== */
- /*
- * osbind.h -- define functions that use Atari calls bios, gemdos, and xbios.
- */
-
- extern LONG bios();
- extern LONG xbios();
- extern LONG gemdos();
-
- /* GEMDOS functions (trap #1) */
-
- #define Pterm0() gemdos(0x0)
- #define Cconin() gemdos(0x1)
- #define Cconout(a) gemdos(0x2,a)
- #define Cauxin() gemdos(0x3)
- #define Cauxout(a) gemdos(0x4,a)
- #define Cprnout(a) gemdos(0x5,a)
- #define Crawio(a) gemdos(0x6,a)
- #define Crawcin() gemdos(0x7)
- #define Cnecin() gemdos(0x8)
- #define Cconws(a) gemdos(0x9,a)
- #define Cconrs(a) gemdos(0x0A,a)
- #define Cconis() gemdos(0x0B)
- #define Dsetdrv(a) gemdos(0x0E,a)
- #define Cconos() gemdos(0x10)
- #define Cprnos() gemdos(0x11)
- #define Cauxis() gemdos(0x12)
- #define Cauxos() gemdos(0x13)
- #define Dgetdrv() gemdos(0x19)
- #define Fsetdta(a) gemdos(0x1A,a)
- #define Super(a) gemdos(0x20,(LONG)(a))
- #define Gosuper(a) ((a) = (Super(1) == 0 ? Super(0) : 0))
- #define Gouser(a) ((a) != 0 ? Super(a) : E_OK)
- #define Tgetdate() gemdos(0x2A)
- #define Tsetdate(a) gemdos(0x2B,a)
- #define Tgettime() gemdos(0x2C)
- #define Tsettime(a) gemdos(0x2D,a)
- #define Fgetdta() (TRANS_BUF *)gemdos(0x2F)
- #define Sversion() gemdos(0x30)
- #define Ptermres(a,b) gemdos(0x31,(LONG)(a),b)
- #define Dfree(a,b) gemdos(0x36,a,b)
- #define Dcreate(a) gemdos(0x39,a)
- #define Ddelete(a) gemdos(0x3A,a)
- #define Dsetpath(a) gemdos(0x3B,a)
- #define Fcreate(a,b) gemdos(0x3C,a,b)
- #define Fopen(a,b) gemdos(0x3D,a,b)
- #define Fclose(a) gemdos(0x3E,a)
- #define Fread(a,b,c) gemdos(0x3F,a,(LONG)(b),c)
- #define Fwrite(a,b,c) gemdos(0x40,a,(LONG)(b),c)
- #define Fdelete(a) gemdos(0x41,a)
- #define Fseek(a,b,c) gemdos(0x42,(LONG)(a),b,c)
- #define Fattrib(a,b,c) gemdos(0x43,a,b,c)
- #define Fdup(a) gemdos(0x45,a)
- #define Fforce(a,b) gemdos(0x46,a,b)
- #define Dgetpath(a,b) gemdos(0x47,a,b)
- #define Malloc(a) (char *)gemdos(0x48,(LONG)(a))
- #define Freebytes() gemdos(0x48, -1L)
- #define Mfree(a) gemdos(0x49,a)
- #define Mshrink(a,b) gemdos(0x4A,0,a,b)
- /* NOTE: NULL parameter added */
- #define Pexec(a,b,c,d) gemdos(0x4B,a,b,c,d)
- #define Pterm(a) gemdos(0x4C,a)
- #define Fsfirst(a,b) gemdos(0x4E,a,b)
- #define Fsnext() gemdos(0x4F)
- #define Frename(a,b,c) gemdos(0x56,a,b,c)
- #define Fdatime(a,b,c) gemdos(0x57,a,b,c)
-
- /* BIOS functions (trap #13) */
-
- #define Getmpb(a) bios(0,a)
- #define Bconstat(a) bios(1,a)
- #define Bconin(a) bios(2,a)
- #define Bconout(a,b) bios(3,a,b)
- #define Rwabs(a,b,c,d,e) bios(4,a,(LONG)(b),c,d,e)
- #define Setexc(a,b) bios(5,a,b)
- #define Tickcal() bios(6)
- #define Getbpb(a) (BPB *)bios(7,a)
- #define Bcostat(a) bios(8,a)
- #define Mediach(a) bios(9,a)
- #define Drvmap() bios(10)
- #define Getshift(a) bios(11,a)
-
- /* XBIOS functions (trap #14) */
-
- #define Initmous(a,b,c) (void) xbios(0,a,b,c)
- #define Physbase() (char *) xbios(2)
- #define Logbase() (char *) xbios(3)
- #define Getrez() (int) xbios(4)
- #define Getres() (int) xbios(4)
- #define Setscreen(log,phys,res) (void) xbios(5,(LONG)(log),(LONG)(phys),res)
- #define Setpalette(a) (void) xbios(6,a)
- #define Setcolor(a,b) (int) xbios(7,a,b)
- #define Floprd(a,b,c,d,e,f,g) (int) xbios(8,(LONG)(a),(LONG)(b),c,d,e,f,g)
- #define Flopwr(a,b,c,d,e,f,g) (int) xbios(9,(LONG)(a),(LONG)(b),c,d,e,f,g)
- #define Flopfmt(a,b,c,d,e,f,g,h,i) \
- (int) xbios(10,(LONG)(a),(LONG)(b),c,d,e,f,g,(LONG)(h),i)
- /* XBIOS function 11 is unused */
- #define Midiws(a,b) (void) xbios(12,a,b)
- #define Mfpint(a,b) (void) xbios(13,a,b)
- #define Iorec(a) (char *) xbios(14,a)
- #define Rsconf(a,b,c,d,e,f) (void) xbios(15,a,b,c,d,e,f)
- #define Keytbl(a,b,c) (char *) xbios(16,(LONG)(a),(LONG)(b), (LONG)(c))
- #define Random() xbios(17)
- #define Protobt(a,b,c,d) (void) xbios(18,a,b,c,d)
- #define Flopver(a,b,c,d,e,f,g) (int) xbios(19,a,b,c,d,e,f,g)
- #define Scrdmp() (void) xbios(20)
- #define Cursconf(a,b) (int) xbios(21,a,b)
- #define Settime(a) (void) xbios(22,a)
- #define Gettime() xbios(23)
- #define Bioskeys() (void) xbios(24)
- #define Ikbdws(a,b) (void) xbios(25,a,b)
- #define Jdisint(a) (void) xbios(26,a)
- #define Jenabint(a) (void) xbios(27,a)
- #define Giaccess(a,b) (char) xbios(28,a,b)
- #define Offgibit(a) (void) xbios(29,a)
- #define Ongibit(a) (void) xbios(30,a)
- #define Xbtimer(a,b,c,d) (void) xbios(31,a,b,c,d)
- #define Dosound(a) xbios(32,a)
- #define Setprt(a) (int) xbios(33,a)
- #define Kbdvbase() (char **) xbios(34)
- #define Kbrate(a,b) (int) xbios(35,a,b)
- #define Prtblk(a) (int) xbios(36,a)
- #define Vsync() (void) xbios(37)
- #define Supexec(a) (unsigned long) xbios(38,a)
- #define Puntaes() (void) xbios(39)
-
- /* End of tos.h */
- #endif
-