1 /* $NetBSD: grfabs_reg.h,v 1.2 1995/03/28 06:35:42 leo Exp $ */ 2 3 /* 4 * Copyright (c) 1995 Leo Weppelman 5 * Copyright (c) 1994 Christian E. Hopps 6 * All rights reserved. 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by Christian E. Hopps. 18 * 4. The name of the author may not be used to endorse or promote products 19 * derived from this software without specific prior written permission 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #ifndef _GRFABS_REG_H 34 #define _GRFABS_REG_H 35 36 struct point { 37 long x; 38 long y; 39 }; 40 typedef struct point point_t; 41 42 struct dimension { 43 u_long width; 44 u_long height; 45 }; 46 typedef struct dimension dimen_t; 47 48 struct box { 49 long x; 50 long y; 51 u_long width; 52 u_long height; 53 }; 54 typedef struct box box_t; 55 56 struct rectangle { 57 long left; 58 long top; 59 long right; 60 long bottom; 61 }; 62 typedef struct rectangle rect_t; 63 64 typedef struct bitmap bmap_t; 65 typedef struct colormap colormap_t; 66 typedef struct display_mode dmode_t; 67 68 /* 69 * View stuff. 70 */ 71 72 struct view { 73 bmap_t *bitmap; /* bitmap. */ 74 box_t display; /* viewable area. */ 75 dmode_t *mode; /* the mode for this view */ 76 colormap_t *colormap; /* the colormap for this view */ 77 int flags; 78 }; 79 typedef struct view view_t; 80 81 /* View-flags: */ 82 #define VF_DISPLAY 1 /* view is on the air now */ 83 84 /* 85 * Bitmap stuff. 86 */ 87 struct bitmap { 88 u_short bytes_per_row; /* number of bytes per display row. */ 89 u_short rows; /* number of display rows. */ 90 u_short depth; /* depth of bitmap. */ 91 u_char *plane; /* plane data for bitmap. */ 92 u_char *hw_address; /* mappable bitplane pointer. */ 93 }; 94 95 /* 96 * Colormap stuff. 97 */ 98 struct colormap { 99 u_char type; /* what type of entries these are. */ 100 union { 101 u_char grey; /* CM_GREYSCALE */ 102 struct { /* CM_COLOR */ 103 u_char red; 104 u_char green; 105 u_char blue; 106 } rgb_mask; 107 } valid_mask; 108 u_short first; /* color register entry[0] refers to */ 109 u_short size; /* number of entries */ 110 u_long *entry; /* the table of actual color values */ 111 }; 112 113 /* 114 * Mask short-hands 115 */ 116 #define grey_mask valid_mask.grey 117 #define red_mask valid_mask.rgb_mask.red 118 #define green_mask valid_mask.rgb_mask.green 119 #define blue_mask valid_mask.rgb_mask.blue 120 121 enum colormap_type { 122 CM_MONO, /* only on or off allowed */ 123 CM_GREYSCALE, /* grey values */ 124 CM_COLOR /* RGB values */ 125 }; 126 127 #define MAX_CENTRIES 256 /* that all there is */ 128 /* 129 * Create a colormap entry 130 */ 131 #define MAKE_COLOR_ENTRY(r,g,b) (((r & 0xff)<<16)|((g & 0xff)<<8)|(b & 0xf)) 132 #define MAKE_MONO_ENTRY(x) ((x) ? 1 : 0) 133 #define MAKE_GREY_ENTRY(l) (l & 0xff) 134 135 #define CM_LTOW(v) \ 136 (((0x000f0000 & (v)) >> 8) | ((0x00000f00 & (v)) >> 4) | (0xf & (v))) 137 #define CM_WTOL(v) \ 138 (((0xf00 & (v)) << 8) | ((0x0f0 & (v)) << 4) | (0xf & (v))) 139 140 /* display mode */ 141 struct display_mode { 142 LIST_ENTRY(display_mode) link; 143 u_char *name; /* logical name for mode. */ 144 dimen_t size; /* screen size */ 145 u_char depth; /* screen depth */ 146 u_short vm_reg; /* video mode register */ 147 view_t *current_view; /* view displaying me */ 148 }; 149 150 /* 151 * Misc draw related macros. 152 */ 153 #define INIT_BOX(b,xx,yy,ww,hh) \ 154 do { \ 155 (b)->x = xx; \ 156 (b)->y = yy; \ 157 (b)->width = ww; \ 158 (b)->height = hh; \ 159 } while(0) 160 161 /* 162 * Prototypes: 163 */ 164 view_t *grf_alloc_view __P((dmode_t *d, dimen_t *dim, u_char depth)); 165 void grf_display_view __P((view_t *v)); 166 void grf_remove_view __P((view_t *v)); 167 void grf_free_view __P((view_t *v)); 168 int grf_get_colormap __P((view_t *, colormap_t *)); 169 int grf_use_colormap __P((view_t *, colormap_t *)); 170 171 #endif /* _GRFABS_REG_H */ 172