home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / PCHDECL.H < prev    next >
C/C++ Source or Header  |  1990-12-15  |  6KB  |  170 lines

  1. /*
  2.     pchdecl.h
  3.  
  4.     % declarations for PC hardware/event stuff
  5.  
  6.     2/28/89  by Ted.
  7.  
  8.     OWL-PC 1.2
  9.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      4/09/89 ted:    pulled static hdata struct out of pcdata struct and made it
  15.                     static on its own. Included a ptr to it in pcdatastruc.
  16.      5/09/89 ted    Renamed from pchard.h
  17.      8/24/89 ted    Added curmouseshape pointer to pchdata.
  18.  
  19.     11/05/89 ted    Added OAK_RATIONAL #ifdef for DOS_ZEROSEG macro for Rational's DOS extender.
  20.     11/08/89 ted    Added xdata and xdatasize pchdata elements for use by dispcurr.
  21.      2/22/90 ted    Made pc_hControl public.
  22.      2/28/90 ted    Added desqview #define's and flag.
  23.      2/29/90 ted    Added OCDECL's for assembly functions.
  24.      3/28/90 jmd    ansi-fied
  25.      5/29/90 ted    Added oak_int86ds for taking ds as input for new oakdir scheme.
  26.      6/05/90 mla    Added more DOS int 21 function code defines.
  27.      7/25/90 ted    Added OCDECL for DOS386 int86 functions.
  28.      7/28/90 ted    Added extended registers to 386 version of OREGS struct.
  29.      8/14/90 ted    Added another DOS int 21 function code define.
  30.      9/09/90 ted    Added element for extended keyboard access.
  31.     10/05/90 mla    Added another DOS int 21 function code define (DOS_GETCD).
  32.     10/10/90 ted    Replaced OCDECL with oasm_func for assembly funcs for TC++.
  33.     10/11/90 ted    Added pc_cbrk functions.
  34.     12/15/90 mla    Added DOS_GETDRIVE
  35. */
  36. #ifndef OAK_OS2
  37. #ifndef OAK_RATIONAL
  38. #ifndef OAK_DOS386
  39. #    define OAK_DESQVIEW
  40. #endif
  41. #endif
  42. #endif
  43.  
  44. #ifndef OAK_RATIONAL
  45. #ifndef OAK_DOS386
  46. #    define OAK_CBRK
  47. #endif
  48. #endif
  49. /* -------------------------------------------------------------------------- */
  50. #define getmoupos_func(fname)        boolean DIGPRIV fname(moupos_struct *mouposp)
  51. typedef                 boolean (DIGPRIV *getmoupos_fptr)(moupos_struct *mouposp);
  52.  
  53. typedef struct _pchdata {
  54.     int         ismouse;
  55.     boolean        eventchecked;
  56.     opcoord        xlastmou;
  57.     opcoord        ylastmou;
  58.     unsigned    blastmou;
  59.     opcoord        xmouscale;
  60.     opcoord        ymouscale;
  61.     getmoupos_fptr getmoupos;
  62.     mouseshape_struct *curmouseshape; /* backup copy of current mouse shape */
  63.  
  64.     boolean        soundon;
  65.     boolean        desqview;
  66.     byte        xkbint;        /* Offset for KBINT extended function calls */
  67.  
  68.     VOID       *xdata;        /* pointer for chaining to extended data block */
  69.     SIZE_T        xdatasize;    /* size of extended data block */
  70. } pchdata_struct;
  71.  
  72. OEXTERN pchdata_struct pchdatastruc;
  73. #define pchdata     (&(pchdatastruc))
  74.  
  75. /* PCHARD.C */
  76. extern void        pc_hOpen(dig_struct *digp);
  77. extern boolean    DIGPRIV pch_IsDESQview(void);
  78. extern dig_hTimer_func        (pc_hTimer);
  79. extern dig_hControl_func    (pc_hControl);
  80.  
  81. /* -------------------------------------------------------------------------- */
  82. #ifdef OAK_DOS386
  83.     typedef union _oregs {
  84.         struct { unsigned short ax, axh, bx, bxh, cx, cxh, dx, es, ds, si, sih, di, dih; } x;
  85.         struct { byte al, ah, ah1, ah2, bl, bh, bh1, bh2, cl, ch, ch1, ch2, dl, dh; } h;
  86.         struct { unsigned duma, dumb, dumc; VOID *esdx; } a; /* NOTE: no 'far' esdx */
  87.         struct { unsigned eax, ebx, ecx, edx; short dsdum; unsigned esi, edi; } d;
  88.     } OREGS;
  89.  
  90.     /* PLOINT86.ASM */
  91.     extern oasm_func(unsigned, oakint86, (unsigned intno, OREGS *regs));
  92.  
  93.     /* Note: as a kluge for DOS Extender, dx and di are identical for buffer ptrs */
  94.     extern oasm_func(unsigned, oakint86x, (unsigned intno, OREGS *regs, int opt, unsigned bufsize));
  95.  
  96. #    define oakint86es(intno, regs, bsiz)    oakint86x(intno, regs, 1, bsiz)
  97. #    define oakint86ds(intno, regs, bsiz)    oakint86x(intno, regs, 2, bsiz)
  98. #else
  99.     typedef union _oregs {
  100.         struct { unsigned short ax, bx, cx, dx, es, ds, si, di; } x;
  101.         struct { byte al, ah, bl, bh, cl, ch, dl, dh; } h;
  102.         struct { short duma, dumb, dumc; VOID far *esdx; } a;
  103.     } OREGS;
  104.  
  105.     /* PCOINT86.ASM */
  106.     /* NOTE: es & ds for output only, unless esdsin is not 0. 1 means es, 2 means ds */
  107.     extern oasm_func(unsigned, _oakint86, (unsigned intno, OREGS *regs, int esdsin));
  108.  
  109. #    define oakint86(intno, regs)            _oakint86(intno, regs, 0)
  110. #    define oakint86es(intno, regs, bsiz)    _oakint86(intno, regs, 1)
  111. #    define oakint86ds(intno, regs, bsiz)    _oakint86(intno, regs, 2)
  112.  
  113.     /* PCCBRK.ASM */
  114.     extern oasm_func(void, pc_catchcbrk, (void));
  115.     extern oasm_func(void, pc_restorecbrk, (void));
  116.     extern oasm_func(boolean, pc_checkcbrk, (int cleanup));
  117. #endif
  118. /* -------------------------------------------------------------------------- */
  119. /* BIOS & DOS interrupt definitions */
  120. /* -------------------------------------------------------------------------- */
  121. #define BIOS_KBINT            0x16
  122. #define KBINT_READ            0x00
  123. #define    KBINT_STATUS        0x01
  124. #define KBINT_GETSHIFT        0x02
  125. #define PC_CFLAG            0x01
  126. #define PC_ZFLAG            0x40
  127.  
  128. #define BIOS_MOUSEINT        0x33
  129. #define BMOU_INIT            0x00
  130. #define BMOU_SHOW            0x01
  131. #define BMOU_HIDE            0x02
  132. #define BMOU_GETPOS            0x03
  133. #define BMOU_XRANGE            0x07
  134. #define BMOU_YRANGE            0x08
  135. #define BMOU_MSHAPE            0x09
  136. #define BMOU_TMSHAPE        0x0A
  137.  
  138. #define DOS_INT                0x21
  139. #define DOS_KBCHK            0x0b
  140. #define DOS_SETDTA            0x1a
  141. #define DOS_GETDRIVE        0x19
  142. #define DOS_GETTIME            0x2c
  143. #define DOS_GETDTA            0x2f
  144. #define DOS_GETIVEC            0x35
  145. #define DOS_DELETE            0x41
  146. #define DOS_ATTR            0x43
  147. #define DOS_GETCD            0x47
  148. #define DOS_FINDFIRST        0x4e
  149. #define DOS_FINDNEXT        0x4f
  150. #define DOS_DVPRESENT        0x2B01
  151.  
  152. #define DV_INT        0x15
  153. #define DVC_PAUSE    0x1000
  154. /* -------------------------------------------------------------------------- */
  155. /* addresses and counts */
  156. /* -------------------------------------------------------------------------- */
  157. #define    DOS_PORTB        0x61        /* speaker control port */
  158. #define    SPKR_TIMER2        0x42        /* timer channel 2 addresses */
  159. #define SPKR_CNTRL2        0x43
  160. #define    SPKR_MODE3        0xB6        /* timer mode 3, square wave */
  161.  
  162. /* Use custom selector for the 0 segment for Rational Systems's 286 DOS Extender */
  163. #ifdef OAK_RATIONAL
  164. #    define DOS_ZEROSEG    0x38
  165. #else
  166. #    define DOS_ZEROSEG    0
  167. #endif
  168. /* -------------------------------------------------------------------------- */
  169.  
  170.