home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / program / lynxlib.zoo / tos.h < prev    next >
C/C++ Source or Header  |  1991-01-27  |  14KB  |  466 lines

  1. /*-------------------------------------------------------*/
  2. /* BIOS, XBIOS, and GEMDOS bindings                      */
  3. /* Written by Robert Fischer September 20, 1986          */
  4. /* Modified for C December 28, 1987                      */
  5. /*-------------------------------------------------------*/
  6. /* This source file is part of the LynxLib miscellaneous library by
  7. Robert Fischer, and is Copyright 1990 by Robert Fischer.  It costs no
  8. money, and you may not make money off of it, but you may redistribute
  9. it.  It comes with ABSOLUTELY NO WARRANTY.  See the file LYNXLIB.DOC
  10. for more details.
  11. To contact the author:
  12.     Robert Fischer \\80 Killdeer Rd \\Hamden, CT   06517   USA
  13.     (203) 288-9599     fischer-robert@cs.yale.edu                 */
  14.  
  15. #ifndef TOS_H
  16. #define TOS_H
  17.  
  18. #ifndef STDDEF_H
  19. #include <stddef.h>
  20. #endif
  21.  
  22.  
  23. /* ==================== ERROR CODES ==================== */
  24.  
  25. /* BIOS error codes */
  26. #define E_OK 0
  27. #define E_ERROR -1  /* fundamental error */
  28. #define E_DRVNR -2  /* drive not ready */
  29. #define E_UNCMD -3  /* unknown command */
  30. #define E_CRC -4    /* CRC error */
  31. #define E_BADRQ -5  /* bad request */
  32. #define E_SEEK -6   /* seek error */
  33. #define E_MEDIA -7  /* unknown media */
  34. #define E_SECNF -8  /* sector not found */
  35. #define E_PAPER -9  /* no paper */
  36. #define E_WRITF -10 /* write fault */
  37. #define E_READF -11 /* read fault */
  38. #define E_GENRL -12 /* general error */
  39. #define E_WRPRO -13 /* write protect */
  40. #define E_CHNG -14  /* media change */
  41. #define E_UNDEV -15 /* unknown device */
  42. #define E_BADSF -16 /* bad sectors on format */
  43. #define E_OTHER -17 /* insert other disk */
  44.  
  45. /* GEMDOS error codes */
  46. #define E_INVFN -32 /* invalid function number */
  47. #define E_FILNF -33 /* file not found */
  48. #define E_PTHNF -34 /* path not found */
  49. #define E_NHNDL -35 /* no handles left -- too many open files */
  50. #define E_ACCDN -36 /* access denied */
  51. #define E_IHNDL -37 /* invalid handle */
  52. #define E_NSMEM -39 /* insufficient memory */
  53. #define E_IMBA -40  /* invalid memory block address */
  54. #define E_DRIVE -46 /* invalid drive specified */
  55. #define E_NMFIL -49 /* no more files */
  56.  
  57. /* other system error codes */
  58. #define E_RANGE -64 /* range error */
  59. #define E_INTRN -65 /* internal error */
  60. #define E_PLFMT -66 /* invalid program load format */
  61. #define E_GSBF -67  /* setblock failure due to growth restrictions */
  62.  
  63. /* =================== CHARACTER I/O =================== */
  64.  
  65. /* Crawio */
  66. #define READ_INPUT 0xFF
  67.  
  68. /* Cconis, Cconos, Cprnos, Cauxis, Cauxos, Bcostat */
  69. #define CHAR_AVAIL -1
  70. #define NONE_AVAIL 0
  71.  
  72. /* Bconstat, Bconin, Bconout */
  73. #define PRT 0
  74. #define AUX 1
  75. #define CON 2
  76. #define MIDI 3
  77. #define KEYBOARD 4
  78.  
  79. /* Kbshift */
  80. #define R_SHIFT 1
  81. #define L_SHIFT 2
  82. #define CTRL 4
  83. #define ALT 8
  84. #define CAPS_LOCK 16
  85. #define R_MOUSE 32  /* Also CLR/HOME */
  86. #define L_MOUSE 64  /* Also Insert */
  87.  
  88. /* Keytbl */
  89. typedef struct {
  90.     BYTE *unshifted;
  91.     BYTE *shifted;
  92.     BYTE *capslock;
  93. } KEY_TABLES;
  94.  
  95. /* ====================== FILE I/O ===================== */
  96.  
  97. /* File I/O -- Fopen, Fcreate, Fsfirst, Fsnext */
  98. #define GFILE WORD      /* GEMDOS file handle */
  99.  
  100. /* File attributes -- Fcreate, Fattrib, Fsfirst */
  101. #define NO_ATTRIB 0
  102. #define READ_ONLY 1
  103. #define HIDDEN    2
  104. #define SYSTEM    4
  105. #define VOLUME    8
  106. #define FOLDER    0x10
  107. #define CLOSED    0x20
  108. #define ALL_FILES 0x27
  109. #define ALL_ATTRIB 0x3F
  110.  
  111. /* Fopen */
  112. #define G_READ 0
  113. #define G_WRITE 1
  114. #define G_RW 2
  115. #define READ_MODE 0
  116. #define WRITE_MODE 1
  117. #define RW_MODE 2
  118.  
  119. /* Fseek */
  120. #define FROM_BEGIN 0
  121. #define FROM_CURRENT 1
  122. #define FROM_END 2
  123.  
  124. /* Fwrite */
  125. #define G_READ 0
  126. #define G_WRITE 1
  127.  
  128. /* Fattrib */
  129. #define SET_ATTRIB 1
  130. #define GET_ATTRIB 0
  131.  
  132. /* ====================== TIME AND DATE =================== */
  133. typedef struct {
  134.     unsigned int second : 5;
  135.     unsigned int minute : 6;
  136.     unsigned int hour : 5;
  137. } time_rec;
  138. typedef struct {
  139.     unsigned int day : 5;
  140.     unsigned int month : 4;
  141.     unsigned int year : 7;
  142. } date_rec;
  143.  
  144. /* Settime, Gettime */
  145. typedef union {
  146.     LONG l;
  147.     struct {
  148.         WORD date;
  149.         WORD time;
  150.     } i;
  151.     struct {
  152.         date_rec date;
  153.         time_rec time;
  154.     } dt;
  155. } BIOS_DT_REC;
  156.  
  157. /* Fdatime, Tsettime, Tgettime, Tsetdate, Tgetdate */
  158. typedef union {
  159.     LONG l;
  160.     struct {
  161.         WORD time;
  162.         WORD date;
  163.     } i;
  164.     struct {
  165.         time_rec time;
  166.         date_rec date;
  167.     } td;
  168. } GEMDOS_TD_REC;
  169.  
  170. /* Fdatime */
  171. #define GET_FDTM 0
  172. #define SET_FDTM 1
  173.  
  174. /* Fsfirst, Fsnext */
  175. typedef struct {
  176.     BYTE reserve[20];
  177.     WORD attrib;
  178.     time_rec time;
  179.     date_rec date;
  180.     LONG size;
  181.     char name[14];
  182. } TRANS_BUF;
  183. #define DTB TRANS_BUF
  184. #define DTA TRANS_BUF
  185.  
  186. /* Dfree */
  187. typedef struct {
  188.     LONG di_free;   /* Free clusters */
  189.     LONG di_many;   /* # of clusters total */
  190.     LONG di_ssiz;   /* Size of sector in bytes */
  191.     LONG di_spau;   /* Sectors per cluster */
  192. } DISK_INFO;
  193.  
  194. /* Rwabs */
  195. #define B_READ 0
  196. #define B_WRITE 1
  197. #define B_READ_NOCHANGE 2
  198. #define B_WRITE_NOCHANGE 3
  199.  
  200. #define FLOP_A 0
  201. #define FLOP_B 1
  202.  
  203. #define SEC_SIZE 512
  204.  
  205. /* Mediach */
  206. #define CHANGE_NO 0
  207. #define CHANGE_MAYBE 1
  208. #define CHANGE_YES 2
  209.  
  210. /* Getbpb */
  211. typedef struct {
  212.     WORD recsize;   /* physical sector size in bytes */
  213.     WORD clsize;        /* cluster size in sectors */
  214.     WORD clsizeb;   /* cluster size in bytes */
  215.     WORD rdlen;     /* root directory length in sectors */
  216.     WORD fsize;     /* FAT size in sectors */
  217.     WORD fatrec;        /* Sector # of first sector of 2nd FAT */
  218.     WORD datarec;   /* sector # of first data sector */
  219.     WORD numcl;     /* number of data clusters on disk */
  220.     WORD bflags;        /* various flags */
  221.  
  222.     /* === additional fields not strictly part of the bpb === */
  223.     WORD ntracks;   /* number of tracks on device */
  224.     WORD nsides;        /* number of sides on device */
  225.     WORD spc;       /* sectors per cylinder */
  226.     WORD spt;       /* sectors per track */
  227.     WORD hidden;        /* number of hidden sectors */
  228.     LONG serial; /* Disk serial number */
  229. } BPB;
  230.  
  231. /* Flopfmt */
  232. #define MAGIC_FORMAT 0x87654321L
  233. #define VIRGIN_VAL 0xE5E5
  234. typedef WORD FMT_BUF[5000]; /* 10 sector buffer */
  235.  
  236. /* Protobt */
  237. #define LEAVE_ALONE -1
  238. #define T40_1SIDE 0
  239. #define T40_2SIDE 1
  240. #define T80_1SIDE 2
  241. #define T80_2SIDE 3
  242.  
  243. #define EXECUTABLE 1
  244. #define NON_EXECUTABLE 0
  245. #define RAND_SER 0x1000000
  246.  
  247. /* ==================== RS232 PORT ===================== */
  248.  
  249. /* Rsconf */
  250. #define BAUD_19200 0
  251. #define BAUD_9600  1
  252. #define BAUD_4800  2
  253. #define BAUD_3600  3
  254. #define BAUD_2400  4
  255. #define BAUD_2000  5
  256. #define BAUD_1800  6
  257. #define BAUD_1200  7
  258. #define BAUD_600   8
  259. #define BAUD_300   9
  260. #define BAUD_200   10
  261. #define BAUD_150   11
  262. #define BAUD_134   12
  263. #define BAUD_110   13
  264. #define BAUD_75    14
  265. #define BAUD_50    15
  266.  
  267. #define NOFLOW 0
  268. #define XON_XOFF 1
  269. #define RTS_CTS 2
  270.  
  271. /* ====================== DISPLAY ====================== */
  272.  
  273. /* Getrez (Getres) */
  274. #define LO_REZ 0
  275. #define MED_REZ 1
  276. #define HI_REZ 2
  277. #define LOW_RES 0
  278. #define MED_RES 1
  279. #define HIGH_RES 2
  280.  
  281. /* Cursconf */
  282. #define HIDE_CURSOR 0
  283. #define SHOW_CURSOR 1
  284. #define BLINK_ON 2
  285. #define BLINK_OFF 3
  286. #define BLINK_SPEED 4
  287. #define RETURN_BLINK 5
  288.  
  289. /* Setpalette, Setcolor */
  290. typedef WORD PALETTE[16];
  291.  
  292. /* Dosound */
  293. typedef BYTE SOUND_BUF[21];
  294.  
  295. /* ====================== PRINTER ====================== */
  296.  
  297. /* Setprt */
  298. #define PR_DAISY 1
  299. #define PR_MONO 2
  300. #define PR_EPSON 4
  301. #define PR_FINAL 8
  302. #define PR_SERIAL 0x10
  303. #define PR_SINGLE 0x20
  304. #define PR_DOT 0
  305. #define PR_COLOR 0
  306. #define PR_ATARI 0
  307. #define PR_DRAFT 0
  308. #define PR_PARALLEL 0
  309. #define PR_FANFOLD 0
  310.  
  311. /* Prtblk */
  312. #define PB_DRAFT 0      /* Low density pb_dstres */
  313. #define PB_FINAL 1      /* High density pb_dstres */
  314. #define PB_MONO160 0        /* Dot matrix 1/160 inch pb_type */
  315. #define PB_COLOR160 1       /* Dot matrix 1/160 inch pb_type */
  316. #define PB_DAISY 2      /* Daisy wheel pb_type (text only) */
  317. #define PB_MONO120 3        /* Dot matrix 1/120 inch pb_type */
  318. #define PB_PARALLEL 0       /* Parallel port pb_port */
  319. #define PB_SERIAL 1     /* Serial port pb_port */
  320.  
  321. typedef BYTE HTONE[18];
  322.  
  323. typedef struct {
  324.     char *blkptr;   /* Block to print */
  325.     int offset; /* Bit offset */
  326.     int width;  /* x dimention */
  327.     int height; /* y dimention */
  328.     int left;   /* left leading x */
  329.     int right;  /* right trailing x */
  330.     int srcres; /* source resolution */
  331.     int dstres; /* destination resolution */
  332.     PALETTE *colpal;    /* color palette pointer */
  333.     int ptype;  /* printer type */
  334.     int port;   /* printer port */
  335.     HTONE *masks;   /* Halftone mask pointer */
  336. } PRTARG;
  337.  
  338. /* ================== Now the actual definitions ================== */
  339. /*
  340.  * osbind.h -- define functions that use Atari calls bios, gemdos, and xbios.
  341.  */
  342.  
  343. extern LONG bios();
  344. extern LONG xbios();
  345. extern LONG gemdos();
  346.  
  347. /* GEMDOS functions (trap #1) */
  348.  
  349. #define Pterm0()        gemdos(0x0)
  350. #define Cconin()        gemdos(0x1)
  351. #define Cconout(a)      gemdos(0x2,a)
  352. #define Cauxin()        gemdos(0x3)
  353. #define Cauxout(a)      gemdos(0x4,a)
  354. #define Cprnout(a)      gemdos(0x5,a)
  355. #define Crawio(a)       gemdos(0x6,a)
  356. #define Crawcin()       gemdos(0x7)
  357. #define Cnecin()        gemdos(0x8)
  358. #define Cconws(a)       gemdos(0x9,a)
  359. #define Cconrs(a)       gemdos(0x0A,a)
  360. #define Cconis()        gemdos(0x0B)
  361. #define Dsetdrv(a)      gemdos(0x0E,a)
  362. #define Cconos()        gemdos(0x10)
  363. #define Cprnos()        gemdos(0x11)
  364. #define Cauxis()        gemdos(0x12)
  365. #define Cauxos()        gemdos(0x13)
  366. #define Dgetdrv()       gemdos(0x19)
  367. #define Fsetdta(a)      gemdos(0x1A,a)
  368. #define Super(a)        gemdos(0x20,(LONG)(a))
  369. #define Gosuper(a)        ((a) = (Super(1) == 0 ? Super(0) : 0))
  370. #define Gouser(a)        ((a) != 0 ? Super(a) : E_OK)
  371. #define Tgetdate()      gemdos(0x2A)
  372. #define Tsetdate(a)     gemdos(0x2B,a)
  373. #define Tgettime()      gemdos(0x2C)
  374. #define Tsettime(a)     gemdos(0x2D,a)
  375. #define Fgetdta()       (TRANS_BUF *)gemdos(0x2F)
  376. #define Sversion()      gemdos(0x30)
  377. #define Ptermres(a,b)   gemdos(0x31,(LONG)(a),b)
  378. #define Dfree(a,b)      gemdos(0x36,a,b)
  379. #define Dcreate(a)      gemdos(0x39,a)
  380. #define Ddelete(a)      gemdos(0x3A,a)
  381. #define Dsetpath(a)     gemdos(0x3B,a)
  382. #define Fcreate(a,b)    gemdos(0x3C,a,b)
  383. #define Fopen(a,b)      gemdos(0x3D,a,b)
  384. #define Fclose(a)       gemdos(0x3E,a)
  385. #define Fread(a,b,c)    gemdos(0x3F,a,(LONG)(b),c)
  386. #define Fwrite(a,b,c)   gemdos(0x40,a,(LONG)(b),c)
  387. #define Fdelete(a)      gemdos(0x41,a)
  388. #define Fseek(a,b,c)    gemdos(0x42,(LONG)(a),b,c)
  389. #define Fattrib(a,b,c)  gemdos(0x43,a,b,c)
  390. #define Fdup(a)         gemdos(0x45,a)
  391. #define Fforce(a,b)     gemdos(0x46,a,b)
  392. #define Dgetpath(a,b)   gemdos(0x47,a,b)
  393. #define Malloc(a)       (char *)gemdos(0x48,(LONG)(a))
  394. #define Freebytes()     gemdos(0x48, -1L)
  395. #define Mfree(a)        gemdos(0x49,a)
  396. #define Mshrink(a,b)    gemdos(0x4A,0,a,b)
  397.                 /* NOTE: NULL parameter added */
  398. #define Pexec(a,b,c,d)  gemdos(0x4B,a,b,c,d)
  399. #define Pterm(a)        gemdos(0x4C,a)
  400. #define Fsfirst(a,b)    gemdos(0x4E,a,b)
  401. #define Fsnext()        gemdos(0x4F)
  402. #define Frename(a,b,c)  gemdos(0x56,a,b,c)
  403. #define Fdatime(a,b,c)  gemdos(0x57,a,b,c)
  404.  
  405. /* BIOS functions (trap #13) */
  406.  
  407. #define Getmpb(a)       bios(0,a)
  408. #define Bconstat(a)     bios(1,a)
  409. #define Bconin(a)       bios(2,a)
  410. #define Bconout(a,b)    bios(3,a,b)
  411. #define Rwabs(a,b,c,d,e)    bios(4,a,(LONG)(b),c,d,e)
  412. #define Setexc(a,b)     bios(5,a,b)
  413. #define Tickcal()       bios(6)
  414. #define Getbpb(a)       (BPB *)bios(7,a)
  415. #define Bcostat(a)      bios(8,a)
  416. #define Mediach(a)      bios(9,a)
  417. #define Drvmap()        bios(10)
  418. #define Getshift(a)     bios(11,a)
  419.  
  420. /* XBIOS functions (trap #14) */
  421.  
  422. #define Initmous(a,b,c)         (void) xbios(0,a,b,c)
  423. #define Physbase()              (char *) xbios(2)
  424. #define Logbase()               (char *) xbios(3)
  425. #define Getrez()                (int) xbios(4)
  426. #define Getres()                (int) xbios(4)
  427. #define Setscreen(log,phys,res) (void) xbios(5,(LONG)(log),(LONG)(phys),res)
  428. #define Setpalette(a)           (void) xbios(6,a)
  429. #define Setcolor(a,b)           (int) xbios(7,a,b)
  430. #define Floprd(a,b,c,d,e,f,g)   (int) xbios(8,(LONG)(a),(LONG)(b),c,d,e,f,g)
  431. #define Flopwr(a,b,c,d,e,f,g)   (int) xbios(9,(LONG)(a),(LONG)(b),c,d,e,f,g)
  432. #define Flopfmt(a,b,c,d,e,f,g,h,i) \
  433.     (int) xbios(10,(LONG)(a),(LONG)(b),c,d,e,f,g,(LONG)(h),i)
  434. /* XBIOS function 11 is unused */
  435. #define Midiws(a,b)     (void) xbios(12,a,b)
  436. #define Mfpint(a,b)     (void) xbios(13,a,b)
  437. #define Iorec(a)        (char *) xbios(14,a)
  438. #define Rsconf(a,b,c,d,e,f) (void) xbios(15,a,b,c,d,e,f)
  439. #define Keytbl(a,b,c)   (char *) xbios(16,(LONG)(a),(LONG)(b), (LONG)(c))
  440. #define Random()        xbios(17)
  441. #define Protobt(a,b,c,d)    (void) xbios(18,a,b,c,d)
  442. #define Flopver(a,b,c,d,e,f,g)  (int) xbios(19,a,b,c,d,e,f,g)
  443. #define Scrdmp()        (void) xbios(20)
  444. #define Cursconf(a,b)   (int) xbios(21,a,b)
  445. #define Settime(a)      (void) xbios(22,a)
  446. #define Gettime()       xbios(23)
  447. #define Bioskeys()      (void) xbios(24)
  448. #define Ikbdws(a,b)     (void) xbios(25,a,b)
  449. #define Jdisint(a)      (void) xbios(26,a)
  450. #define Jenabint(a)     (void) xbios(27,a)
  451. #define Giaccess(a,b)   (char) xbios(28,a,b)
  452. #define Offgibit(a)     (void) xbios(29,a)
  453. #define Ongibit(a)      (void) xbios(30,a)
  454. #define Xbtimer(a,b,c,d)    (void) xbios(31,a,b,c,d)
  455. #define Dosound(a)      xbios(32,a)
  456. #define Setprt(a)       (int) xbios(33,a)
  457. #define Kbdvbase()      (char **) xbios(34)
  458. #define Kbrate(a,b)     (int) xbios(35,a,b)
  459. #define Prtblk(a)       (int) xbios(36,a)
  460. #define Vsync()         (void) xbios(37)
  461. #define Supexec(a)      (unsigned long) xbios(38,a)
  462. #define Puntaes()       (void) xbios(39)
  463.  
  464. /* End of tos.h */
  465. #endif
  466.