home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / DISPPROT.H < prev    next >
C/C++ Source or Header  |  1990-11-06  |  10KB  |  252 lines

  1. /*
  2.     dispprot.h
  3.  
  4.     % Header for display manager
  5.  
  6.     5/16/88  by Ted.
  7.  
  8.     OWL 1.2
  9.     Copyright (c) 1988, by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      8/24/88 Ted    Merged driver and mode in to one stub function pointer.
  15.     11/22/88 Ted    Added CheckMouse and ReadEvent functions
  16.     12/07/88 Ted    Put init function into dControl structure.
  17.     12/12/88 Ted    Merged CheckKey and CheckMouse into CheckEvent.
  18.     12/16/88 jmd    made ddisp_GetWidth/Height into functions
  19.      1/18/89 Ted    Changed call to PlotText for simplified interface.
  20.      3/20/89 Ted    Made everything refer to static curr_dmgr.
  21.      5/09/89 ted    Changed Alloc/Free terms to Open/Close.
  22.      5/11/89 ted    Added macros for setting and getting the CloseDIG fptr.
  23.      7/29/89 ted    Resurrected disp_GetInfo() macro.
  24.      8/07/89 ted    Made GetShift() related macros return 1 or 0, nothing else.
  25.      8/14/89 jmd    Added disp_EvCheck() macros
  26.      8/31/89 jmd    Added disp_EvCheck() macros (again)
  27.      9/11/89 jmd    Added disp_IsMouseTrapped() macro
  28.     11/27/89 ted    Moved disp_IsMouseTrapped() macro to winproto where it can be happy with its sisters.
  29.      2/14/90 ted    Got rid of fontreq_struct. Just use fontdesc_struct.
  30.      3/11/90 ted    Added prototypes for disp_GetBiggerFont & disp_MapPcColors.
  31.      3/21/90 ted    disp_HideMouse disp_ShowMouse macros now use DC_HIDE/SHOWMOUSE msgs.
  32.      3/28/90 jmd    ansi-fied
  33.      5/12/90 jmd    changed the ascii macro, converted scancodes to ints
  34.      9/06/90 jmd    converted the ascii macro into a function
  35.     10/10/90 ted    Added disp_IsTextMode macro.
  36.     11/06/90 ted    moved pmapioreq stuff here from pmapdecl.h
  37. */
  38. /* -------------------------------------------------------------------------- */
  39. /* Global display manager structure declarations */
  40.  
  41. OEXTERN dmgr_struct curr_dmgrstruc;
  42. #define curr_dmgr     (&curr_dmgrstruc)
  43. #define curr_wmgr     (&curr_dmgrstruc.wmgr)
  44. #define disp_id()    (curr_dmgr->id)
  45. /* -------------------------------------------------------------------------- */
  46. /* Prototypes */
  47.  
  48. /* DISPINIT.C */
  49. extern boolean    disp_Init(dmode_fptr dmode, class_fptr backwin);
  50. extern void        disp_Close(void);
  51.  
  52. /* DISPREIN.C */
  53. extern boolean    disp_ReInit(dmode_fptr dmode);
  54.  
  55. /* DISPCURR.C */
  56. extern VOID       *disp_GetCurrent(void);
  57. extern boolean    disp_SetCurrent(VOID *dispp);
  58. extern boolean    disp_RestoreCurrent(VOID *dispp);
  59.  
  60. /* DISP.C */
  61. extern boolean    disp_Ok(void);
  62. extern int        disp_GetHeight(void);
  63. extern int        disp_GetWidth(void);
  64. extern ofont_type disp_OpenFont(fontdesc_struct *fontreq);
  65. extern void        disp_CloseFont(ofont_type font);
  66. extern void        disp_SetAttrColors(byte attr, opixval bg, opixval fg);
  67. extern opixval    disp_GetAttrFgColor(byte attr);
  68. extern opixval    disp_GetAttrBgColor(byte attr);
  69. extern void        disp_SetColMapEntry(opixval icol, olevel red, olevel green, olevel blue);
  70. extern boolean    ptd_SetInner(ptd_struct *ptd, ptd_struct *inptd, opbox *inboxp);
  71.  
  72. /* Character attribute mapping */
  73. #define disp_SetMapEntry(attr, bg, fg)                \
  74.     disp_SetAttrColors(attr, bg, fg)
  75. #define disp_GetMapEntry(attr, bgp, fgp)            \
  76.     disp_GetAttrColors(attr, bgp, fgp)
  77.  
  78. /* DISPCLR.C */
  79. extern void        disp_Clear(opixval color);
  80. extern void        disp_Repaint(void);
  81.  
  82. /* DISPMONO.C */
  83. extern void        disp_MapMono(boolean mono);
  84.  
  85. /* DISPPCCO.C */
  86. extern void        disp_MapPcColors(void);
  87. extern void        disp_MapAttrColors(ocolmap_type cmap);
  88.  
  89. /* DISPBFON.C */
  90. extern ofont_type disp_GetBiggerFont(ofont_type font);
  91. extern ofont_type disp_GetSmallerFont(ofont_type font);
  92.  
  93. /* PMAPLOAD.C */
  94. extern void         pmap_IoInitFunc(pmapioreq_fptr iofunc);
  95. extern pmapioreq_func (pmap_IoNullReq);
  96.  
  97. /* pmap input/output enabling initialization function */
  98. #define pmap_IoInit()                pmap_IoInitFunc(def_PmapIoReq)
  99. /* -------------------------------------------------------------------------- */
  100. /* Device info request macros */
  101.  
  102. #define disp_GetInfo()                (curr_dmgr->disp.info)
  103. #define disp_GetMode()                (disp_GetInfo()->mode)
  104. #define disp_GetPixWidth()            pmap_GetWidth(disp_GetInfo()->dispmap)
  105. #define disp_GetPixHeight()            pmap_GetHeight(disp_GetInfo()->dispmap)
  106. #define disp_GetColMapNentries()    (disp_GetInfo()->defcolmap.nentries)
  107. #define disp_GetDefColMapp()        (disp_GetInfo()->defcolmap)
  108. #define disp_GetColors()            (disp_GetInfo()->ncolors)
  109. #define disp_hardcursor()            (disp_GetInfo()->hardcursor)
  110. #define disp_GetByteOrder()            (disp_GetInfo()->byteorder)
  111. #define disp_dispmap()                (disp_GetInfo()->dispmap)
  112. #define disp_GetDefFont()            (&disp_GetInfo()->def_font)
  113. #define disp_IsTextMode()            (ofont_GetHeight(disp_GetDefFont()) == 1)
  114.  
  115. #define disp_vtscroll()                ((boolean) curr_dmgr->disp.dig.vtscroll)
  116. #define disp_hzscroll()                ((boolean) curr_dmgr->disp.dig.hzscroll)
  117. #define disp_TextFree()                ((boolean) curr_dmgr->disp.dig.textfree)
  118. #define disp_type()                    (curr_dmgr->disp.dig.type)
  119. #define disp_version()                (curr_dmgr->disp.dig.version)
  120.  
  121. #define disp_EvCheck()                ((boolean) curr_dmgr->disp.dig.evcheck)
  122. #define disp_SetEvCheck(c)            (curr_dmgr->disp.dig.evcheck = (c))
  123.  
  124. #define disp_MouseDistout()            (curr_dmgr->disp.mouse_distout)
  125. #define disp_MouseTimeout()            (curr_dmgr->disp.mouse_timeout)
  126.  
  127. #define disp_clipbox(boxp)            pmap_clipbox(disp_dispmap(), boxp)
  128. #define disp_clippoint(xp, yp)        pmap_clippoint(disp_dispmap(), xp, yp)
  129. /* -------------------------------------------------------------------------- */
  130. /* DIG control function ptr macros */
  131.  
  132. #define    disp_Control(msg, indata, outdata)        \
  133.     (*curr_dmgr->disp.dig.dControl)(msg, (VOID *)(indata), (VOID *)(outdata))
  134.  
  135. #define    pmap_Control(msg, indata, outdata)        \
  136.     (*curr_dmgr->disp.dig.pControl)(msg, (VOID *)(indata), (VOID *)(outdata))
  137.  
  138. #define    hard_Control(msg, indata, outdata)            \
  139.     (*curr_dmgr->disp.dig.hControl)(msg, (VOID *)(indata), (VOID *)(outdata))
  140.  
  141. #define    disp_CloseDIG()                                \
  142.     ((*curr_dmgr->disp.dig.CloseDIG)(&curr_dmgr->disp.dig), curr_dmgr->disp.dig.data = NULL)
  143.  
  144. /* Macros for getting and setting the CloseDIG function ptr */
  145. #define disp_GetCloseDIG()            (curr_dmgr->disp.dig.CloseDIG)
  146. #define disp_SetCloseDIG(cd)        (curr_dmgr->disp.dig.CloseDIG = (cd))
  147. /* -------------------------------------------------------------------------- */
  148. /* DIG ptd function ptr macros */
  149.  
  150. #define ptd_DrawCursor(ptd, ctype)    (*curr_dmgr->disp.dig.pDrawCursor)(ptd, ctype)
  151.  
  152. #define ptd_PlotText(ptd, x, y, cbuf, rc, ra, slen)            \
  153.     (*curr_dmgr->disp.dig.pPlotText)(ptd, x, y, cbuf, rc, ra, slen)
  154.  
  155. #define ptd_Clear(ptd, color)        (*curr_dmgr->disp.dig.pClear)(ptd, color)
  156.  
  157. #define ptd_ScrollBoxVt(ptd, n)        (*curr_dmgr->disp.dig.pScrollBoxVt)(ptd, n)
  158.  
  159. #define ptd_ScrollBoxHz(ptd, n)        (*curr_dmgr->disp.dig.pScrollBoxHz)(ptd, n)
  160.  
  161. #define ptd_DrawPixmap(ptd, pixmap, pmboxp)                    \
  162.     (*curr_dmgr->disp.dig.pDrawPixmap)(ptd, pixmap, pmboxp)
  163.  
  164. #define ptd_ReadPixmap(ptd, pixmap, pmboxp)                    \
  165.     (*curr_dmgr->disp.dig.pReadPixmap)(ptd, pixmap, pmboxp)
  166.  
  167. #define ptd_PlotTextbuf(ptd, x, y, cbuf, ra, slen)            \
  168.     ptd_PlotText(ptd, x, y, cbuf, 0, ra, slen)
  169.  
  170. #define ptd_PlotChar(ptd, x, y, rc, ra, slen)                \
  171.     ptd_PlotText(ptd, x, y, NULL, rc, ra, slen)
  172.  
  173. #define ptd_EraseCursor(ptd)                                \
  174.     ptd_DrawCursor(ptd, CURSOR_NONE)
  175. /* -------------------------------------------------------------------------- */
  176. /* Disp function macros */
  177.  
  178. #define disp_InitMode()                disp_Control(DC_INITMODE, NULL, NULL)
  179. #define disp_RestoreMode()            disp_Control(DC_RESTOREMODE, NULL, NULL)
  180.  
  181. #define disp_Cache()                disp_Control(DC_CACHE, NULL, NULL)
  182. #define disp_Flush()                disp_Control(DC_FLUSH, NULL, NULL)
  183. #define disp_HideMouse()            disp_Control(DC_HIDEMOUSE, NULL, NULL)
  184. #define disp_ShowMouse()            disp_Control(DC_SHOWMOUSE, NULL, NULL)
  185.  
  186. /* Character attribute mapping */
  187. #define disp_GetAttrColors(attr, bgp, fgp)            \
  188.     (*(bgp) = disp_GetAttrBgColor(attr),            \
  189.      *(fgp) = disp_GetAttrFgColor(attr))
  190.  
  191. #define disp_getattrbg(attrp, bgp) disp_Control(DC_GETATTRBG, attrp, bgp)
  192. #define disp_getattrfg(attrp, fgp) disp_Control(DC_GETATTRFG, attrp, fgp)
  193.  
  194. /* Hardware pixval-to-RGB color palette mapping */
  195. #define disp_SetColMap(colmap)        disp_Control(DC_SETCOLMAP, (VOID *)colmap, NULL)
  196. #define disp_GetColMap(colmap)        disp_Control(DC_GETCOLMAP, NULL, (VOID *)colmap)
  197. #define disp_SetColMapDefault()        disp_SetColMap(disp_GetDefColMapp())
  198. /* -------------------------------------------------------------------------- */
  199. /* Hardware functions and function ptr macros */
  200.  
  201. /* KBREAD.C */
  202. extern int        kb_Read(void);
  203. extern boolean    kb_CheckWait(unsigned wait);
  204. extern void        kb_Clear(void);
  205. extern int         ascii(int scancode);
  206.  
  207. /* MOUSEINI.C */
  208. extern boolean    hard_InitMouse(void);
  209. extern void        hard_DeinitMouse(void);
  210.  
  211. #define hard_GetMouseTimeout()        (curr_dmgr->disp.mouse_timeout)
  212. #define hard_SetMouseTimeout(t)     (curr_dmgr->disp.mouse_timeout = (t))
  213.  
  214. #define kb_Check()                    kb_CheckWait(0)
  215. #define hard_CheckEvent(wait)        (*curr_dmgr->disp.dig.hCheckEvent)(wait)
  216. #define hard_ReadEvent(evp)            (*curr_dmgr->disp.dig.hReadEvent)(evp)
  217. #define kb_GetShift()                (*curr_dmgr->disp.dig.hGetShift)()
  218.  
  219. #define kb_Shift()                    ((kb_GetShift() & 0x03) != 0)
  220. #define kb_Control()                ((kb_GetShift() & 0x04) != 0)
  221. #define kb_Alt()                    ((kb_GetShift() & 0x08) != 0)
  222. #define kb_ScrollLock()                ((kb_GetShift() & 0x10) != 0)
  223. #define kb_NumLock()                ((kb_GetShift() & 0x20) != 0)
  224. #define kb_CapsLock()                ((kb_GetShift() & 0x40) != 0)
  225. #define kb_Insert()                    ((kb_GetShift() & 0x80) != 0)
  226.  
  227. #define TIMER_LIMIT        ((unsigned)(10*60*100))    /* Ten minutes in hundredths */
  228.  
  229. #define    hard_Timer()                (*curr_dmgr->disp.dig.hTimer)()
  230. #define    hard_Pause(duration)        (*curr_dmgr->disp.dig.hPause)(duration)
  231. #define    hard_Sound(pitch, duration)                    \
  232.     (*curr_dmgr->disp.dig.hSound)(pitch, duration)
  233.  
  234. #define hard_Tone()                    hard_Sound(1500, 1)
  235.  
  236. /* Alias hard_Speaker to hard_Sound */
  237. #define    hard_Speaker(pitch, dur)    hard_Sound(pitch, dur)
  238. #define    tone()                        hard_Tone()
  239.  
  240. #define    hard_SetSound(on)                            \
  241.     ((on) ? hard_Control(HC_SETSOUNDON, NULL, NULL) : \
  242.             hard_Control(HC_SETSOUNDOFF, NULL, NULL))
  243.  
  244. #define    hard_IsSoundOn()            ((boolean)hard_Control(HC_GETSOUNDON, NULL, NULL))
  245. #define    hard_IsMouseOn()            ((boolean)hard_Control(HC_ISMOUSEON, NULL, NULL))
  246.  
  247. /* reentrancy protection functions */
  248. #define hard_ProtectDmgr()            hard_Control(HC_PROTECT, NULL, NULL)
  249. #define hard_UnProtectDmgr()        hard_Control(HC_UNPROTECT, NULL, NULL)
  250. /* -------------------------------------------------------------------------- */
  251.  
  252.