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

  1. /*
  2.     pmapdecl.h
  3.  
  4.     % declarations for pixel maps
  5.  
  6.     OWL 1.2
  7.     Copyright (c) 1988 by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      2/04/89 ted:    Moved device-specific stuff into dig level (dpmap_Control)
  13.      2/23/88 ted:    Added pmap_Copy.
  14.      5/09/89 ted    Changed Alloc/Free terms to Open/Close.
  15.      7/05/89 ted    Added pmap_IoInit macros and related stuff.
  16.      7/12/89 ted    Converted '_func' prototypes from typedef to macro.
  17.      8/08/89 ted    Added bmap stuff.
  18.  
  19.      3/28/90 jmd    ansi-fied
  20.      5/08/90 jmd    added underscores to func macros for vms compiler
  21.     11/06/90 ted    moved the pmapioreq stuff to dispdecl.h and dispprot.h.
  22. */
  23.  
  24. /* -------------------------------------------------------------------------- */
  25. /* Bitmap stuff */
  26. #define bmap_GetArraySize(w,h)        ((h) * (((w) + 7) / 8))
  27. #define bmap_GetSize(w,h)            (bmap_GetArraySize(w, h) + 2*sizeof(odim))
  28. #define bmap_GetLineBytes(bm)        (((bm)->width + 7) / 8)
  29. #define bmap_GetLine(bm,l)            ((bm)->array + (l) * bmap_GetLineBytes(bm))
  30.  
  31. #define bmap_struct(w, h)                            \
  32.             struct {odim width; odim height; byte array[bmap_GetArraySize(w, h)];}
  33.  
  34. typedef bmap_struct(1,1) *bmap_type;
  35. /* -------------------------------------------------------------------------- */
  36.  
  37. typedef struct pmap_struct {
  38.     odim     width;        /* width  of pixmap in pixels */
  39.     odim     height;        /* height of pixmap in pixels */
  40.     boolean onboard;    /* to request pixmap in display memory */
  41.     boolean onscreen;    /* if onboard, to request pixmap in visible display */
  42.     opcoord xpos;        /* if onscreen, position of requested pixmap on screen */
  43.     opcoord ypos;        /* if onscreen, position of requested pixmap on screen */
  44.     VOID   *xdata;        /* pointer to implementation-specific data */
  45. } *pmap_type;
  46.  
  47. typedef struct pmap_struct pmapreq_struct;
  48.  
  49. typedef struct _pmapclearreq {
  50.     pmap_type pmap;
  51.     opixval   color;
  52. } pmapclearreq_struct;
  53.  
  54. typedef struct _pmapcopyreq {
  55.     pmap_type spmap;
  56.     pmap_type dpmap;
  57. } pmapcopyreq_struct;
  58. /* -------------------------------------------------------------------------- */
  59.  
  60. /* PMAPX.C */
  61. extern void        pmap_Clear(pmap_type pmap, opixval color);
  62. extern void        pmap_Copy(pmap_type dpmap, pmap_type spmap);
  63.  
  64. /* PMAPOPEN.C */
  65. extern pmap_type pmap_OpenOnboard(odim width, odim height, boolean onboard, boolean onscreen, opcoord xpos, opcoord ypos);
  66.  
  67. /* PMAPLOAD.C */
  68. extern pmap_type pmap_Load(FILE *fd, ocolmap_type crange);
  69. extern pmap_type pmap_LoadBfile(VOID *xbfile, char *name, ocolmap_type crange);
  70. extern boolean     pmap_Save(FILE *fd, pmap_type pmap, ocolmap_type cmap);
  71. extern boolean     pmap_SaveBfile(VOID *xbfile, char *name, pmap_type pmap, ocolmap_type cmap);
  72. /* -------------------------------------------------------------------------- */
  73.  
  74. #define pmap_Open(width, height)    pmap_OpenOnboard(width, height, FALSE, FALSE, 0, 0)
  75. #define pmap_Close(pmap)            pmap_Control(PC_CLOSEPMAP, pmap, NULL)
  76.  
  77. #define pmap_GetWidth(pmap)            ((pmap)->width)
  78. #define pmap_GetHeight(pmap)        ((pmap)->height)
  79.  
  80. #define pmap_clippoint(pmap,xp,yp)                    \
  81.     opwh_clippoint(pmap_GetWidth(pmap), pmap_GetHeight(pmap), (xp), (yp))
  82. #define pmap_clipbox(pmap,boxp)                        \
  83.     opwh_clipbox(pmap_GetWidth(pmap), pmap_GetHeight(pmap), (boxp))
  84.  
  85. /*    This pmap_Ok macro assumes that a valid pixel map will:
  86.         - have its boolean variable values either 0 or 1.
  87.         - have its xpos set non-negative.
  88.         - have its xpos non-zero if onboard is FALSE
  89. */
  90. #define pmap_Ok(pm)                    ((pm) != NULL && \
  91.     ((unsigned)(pm)->onboard) <= 1 &&                \
  92.     ((unsigned)(pm)->onscreen) <= 1 &&                \
  93.     ( ((pm)->onboard == FALSE) ? ((pm)->xpos > 0) : ((pm)->xpos >= 0) ))
  94. /* -------------------------------------------------------------------------- */
  95.  
  96.