The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/rcons/raster.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: raster.h,v 1.6 2003/08/07 16:31:20 agc Exp $ */
    2 
    3 /*-
    4  * Copyright (c) 1991, 1993
    5  *      The Regents of the University of California.  All rights reserved.
    6  *
    7  * This code is derived from software contributed to the Computer Systems
    8  * Engineering Group at Lawrence Berkeley Laboratory and to the University
    9  * of California at Berkeley by Jef Poskanzer.
   10  *
   11  * Redistribution and use in source and binary forms, with or without
   12  * modification, are permitted provided that the following conditions
   13  * are met:
   14  * 1. Redistributions of source code must retain the above copyright
   15  *    notice, this list of conditions and the following disclaimer.
   16  * 2. Redistributions in binary form must reproduce the above copyright
   17  *    notice, this list of conditions and the following disclaimer in the
   18  *    documentation and/or other materials provided with the distribution.
   19  * 3. Neither the name of the University nor the names of its contributors
   20  *    may be used to endorse or promote products derived from this software
   21  *    without specific prior written permission.
   22  *
   23  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   33  * SUCH DAMAGE.
   34  *
   35  *      @(#)raster.h    8.1 (Berkeley) 6/11/93
   36  */
   37 
   38 /*
   39  * Simple raster and frame buffer routines.
   40  *
   41  * Currently this set of routines is fairly minimal.  It's enough to
   42  * implement a console terminal emulator on monochrome and pseudocolor
   43  * screens, and that's about it.
   44  *
   45  * Future additions might be other kinds of frame buffers (direct color?),
   46  * lines, dashed lines, three-operand blits (stipples/stencils), etc.
   47  */
   48 
   49 #ifndef _RASTER_H_
   50 #define _RASTER_H_
   51 
   52 /* Configurable definitions. */
   53 
   54 
   55 #include <machine/endian.h>
   56 #if BYTE_ORDER == BIG_ENDIAN
   57 /* CONFIGURE: define or undef for your machine's byte order */
   58 #define MSBYTE_FIRST
   59 /* CONFIGURE: define or under for your frame buffer's bit order */
   60 #define MSBIT_FIRST
   61 #endif
   62 
   63 /* CONFIGURE: The text routines can optionally keep a cache of 8-bit
   64 ** characters.  This uses about 30K, but makes text on a color screen
   65 ** go 3.2 times faster.  XXX: it will also break 2bpp displays.
   66 */
   67 #undef COLORFONT_CACHE
   68 
   69 
   70 /* Definitions. */
   71 
   72 /* ANSI prototype conditionalizer.  */
   73 #ifndef ARGS
   74 #if __STDC__
   75 #define ARGS(alist) alist
   76 #else /*__STDC__*/
   77 #define ARGS(alist) ()
   78 #endif /*__STDC__*/
   79 #endif /*ARGS*/
   80 
   81 /* Raster struct. */
   82 struct raster {
   83     int width, height;  /* size in pixels */
   84     int depth;          /* bits per pixel - 1, 2, or 8 */
   85     int linelongs;      /* longs from one line to the next - for padding */
   86     u_int32_t *pixels;  /* pointer to the actual bits */
   87     caddr_t data;       /* special pointer for frame buffers and subregions */
   88     };
   89 
   90 /* Colormap struct. */
   91 struct raster_colormap {
   92     int length;
   93     u_char* red;
   94     u_char* grn;
   95     u_char* blu;
   96     };
   97 
   98 /* Font character struct. */
   99 struct raster_char {
  100     struct raster* r;
  101     int homex, homey;
  102     int nextx, nexty;
  103     };
  104 
  105 #ifdef COLORFONT_CACHE
  106 struct raster_fontcache {
  107     struct raster* cr[256];
  108     u_char color[256];
  109     };
  110 #endif /*COLORFONT_CACHE*/
  111 
  112 /* Font struct. */
  113 struct raster_font {
  114     int width, height, ascent;  /* nominal character size */
  115     int flags;
  116 #define RASFONT_FIXEDWIDTH              0x1
  117 #define RASFONT_NOVERTICALMOVEMENT      0x2
  118     struct raster_char chars[256];
  119 #ifdef COLORFONT_CACHE
  120     struct raster_fontcache* cache;
  121 #endif /*COLORFONT_CACHE*/
  122     };
  123 
  124 /* Defines for the raster_op() and raster_text() rop parameter - the bitblit
  125 ** operation.  A rop can be some Boolean combination of RAS_SRC and
  126 ** RAS_DST.  For instance, just RAS_SRC means copy the source to the
  127 ** destination without modification.  RAS_SRC|RAS_DST means "or" the source
  128 ** and destination together, while "xor" would be RAS_SRC^RAS_DST.  The
  129 ** RAS_NOT macro should be used to express negation - RAS_NOT(RAS_SRC)&RAS_DST
  130 ** would "and" the complement of the source with the destination.
  131 **
  132 ** Or, you can just use one of the pre-defined ops.  There are only 16
  133 ** possible combinations, so all 16 are defined here.
  134 **
  135 ** For color rasters, you specify the color of the operation by simply
  136 ** oring RAS_COLOR(color) into the rop.
  137 */
  138 
  139 #define RAS_NOT(op) ( 0xf & ( ~ (op) ) )
  140 
  141 #define RAS_CLEAR               0x0     /* 0 */
  142 #define RAS_NOTOR               0x1     /* !( src | dst ) */
  143 #define RAS_NOTSRC_AND_DST      0x2     /* !src & dst */
  144 #define RAS_INVERTSRC           0x3     /* !src */
  145 #define RAS_SRC_AND_NOTDST      0x4     /* src & !dst */
  146 #define RAS_INVERT              0x5     /* !dst */
  147 #define RAS_XOR                 0x6     /* src ^ dst */
  148 #define RAS_NOTAND              0x7     /* !( src & dst ) */
  149 #define RAS_AND                 0x8     /* src & dst */
  150 #define RAS_NOTXOR              0x9     /* !( src ^ dst ) */
  151 #define RAS_DST                 0xa     /* dst */
  152 #define RAS_NOTSRC_OR_DST       0xb     /* !src | dst */
  153 #define RAS_SRC                 0xc     /* src */
  154 #define RAS_SRC_OR_NOTDST       0xd     /* src | !dst */
  155 #define RAS_OR                  0xe     /* src | dst */
  156 #define RAS_SET                 0xf     /* 1 */
  157 
  158 #ifndef RCONS_16BPP
  159 #define RAS_COLOR(color) ( ( (color) & 0xff ) << 4 )
  160 #else
  161 #define RAS_COLOR(color) ( ( (color) & 0xffff ) << 4 )
  162 #endif
  163 
  164 /* Get the op from a rop. */
  165 #define RAS_GETOP(op) ( (op) & 0xf )
  166 /* Get the color from a rop. */
  167 #ifndef RCONS_16BPP
  168 #define RAS_GETCOLOR(op) ( ( (op) >> 4 ) & 0xff )
  169 #else
  170 #define RAS_GETCOLOR(op) ( ( (op) >> 4 ) & 0xffff )
  171 #endif
  172 /* Get the longword address of a pixel. */
  173 #define RAS_ADDR( r, x, y ) \
  174     ( (r)->pixels + (y) * (r)->linelongs + (x) * (r)->depth / 32 )
  175 
  176 
  177 /* Raster routines. */
  178 
  179 extern struct raster* raster_alloc ARGS(( int width, int height, int depth ));
  180 /* Allocates a raster.  Returns (struct raster*) 0 on failure. */
  181 
  182 extern void raster_free ARGS(( struct raster* r ));
  183 /* Frees/closes a raster. */
  184 
  185 extern int raster_get ARGS(( struct raster* r, int x, int y ));
  186 /* Gets a single pixel from a raster. */
  187 
  188 extern void raster_put ARGS(( struct raster* r, int x, int y, int v ));
  189 /* Puts a single pixel into a raster. */
  190 
  191 extern struct raster* raster_subregion ARGS(( struct raster* r, int x, int y, int width, int height ));
  192 /* Makes a raster that points to a region of another.  Returns
  193 ** (struct raster*) 0 on failure.
  194 */
  195 
  196 
  197 /* Raster operations.  */
  198 
  199 extern int raster_op ARGS(( struct raster* dst, int dx, int dy, int w, int h, int rop, struct raster* src, int sx, int sy ));
  200 /* Performs a bitblit.  Returns 0 on success, -1 on failure.  */
  201 
  202 extern int raster_op_noclip ARGS(( struct raster* dst, int dx, int dy, int w, int h, int rop, struct raster* src, int sx, int sy ));
  203 /* Bitblit without clipping.  Returns 0 on success, -1 on failure. */
  204 
  205 extern int raster_op_nosrc_noclip ARGS(( struct raster* dst, int dx, int dy, int w, int h, int rop ));
  206 /* No-src bitblit without clipping.  Returns 0 on success, -1 on failure. */
  207 
  208 extern int raster_replsrc ARGS(( struct raster* dst, int dx, int dy, int w, int h, int rop, struct raster* src, int sx, int sy ));
  209 /* Tiles the src to fit the dst.  Returns 0 on success, -1 on failure.  Only
  210 ** implements RAS_SRC.
  211 */
  212 
  213 
  214 /* Raster text routines */
  215 
  216 extern struct raster_font* raster_fontopen ARGS(( char* fontname ));
  217 /* Opens a font. Returns (struct raster_font*) 0 on failure. */
  218 
  219 extern int raster_text ARGS(( struct raster* r, int x, int y, int rop, struct raster_font* rf, unsigned char* text ));
  220 /* Draws text.  Returns 0 on success, -1 on failure. */
  221 
  222 extern int raster_textn ARGS(( struct raster* r, int x, int y, int rop, struct raster_font* rf, unsigned char* text, int len ));
  223 /* Draws n characters of text.  Returns 0 on success, -1 on failure. */
  224 
  225 extern void raster_fontclose ARGS(( struct raster_font* rf ));
  226 /* Closes a font. */
  227 
  228 
  229 /* Frame buffer routines. */
  230 
  231 extern struct raster* raster_open ARGS(( char* fbname ));
  232 /* Opens a frame buffer as a raster.  Returns (struct raster*) 0 on failure. */
  233 
  234 extern struct raster* raster_coloropen ARGS(( void ));
  235 /* Opens a color frame buffer if there is one.  Returns (struct raster*) 0 on
  236 ** failure.
  237 */
  238 
  239 extern int raster_video_off ARGS(( struct raster* r ));
  240 /* Blanks the screen.  Returns 0 on success, -1 on failure.  This might
  241 ** be implemented as actual video blanking, or it might just load black
  242 ** into all colormap entries (and disable further colormap changes).
  243 */
  244 
  245 extern int raster_video_on ARGS(( struct raster* r ));
  246 /* Re-enables video.  Returns 0 on success, -1 on failure. */
  247 
  248 extern struct raster_colormap* raster_colormap_alloc ARGS(( int length ));
  249 /* Allocates a colormap structure, returns 0 on failure. */
  250 
  251 extern struct raster_colormap* raster_colormap_get ARGS(( struct raster* r ));
  252 /* Allocates a colormap structure and returns the frame buffer's
  253 ** current colormap, or (struct raster_colormap*) 0 on failure.  The raster
  254 ** must be one returned by raster_open(), not raster_alloc().
  255 */
  256 
  257 extern int raster_colormap_set ARGS(( struct raster* r, struct raster_colormap* cm ));
  258 /* Sets a frame buffer's colormap.  The raster must be one returned
  259 ** by raster_open(), not raster_alloc().  Returns 0 on success, -1 on
  260 ** failure.
  261 */
  262 
  263 extern void raster_colormap_free ARGS(( struct raster_colormap* cm ));
  264 /* Frees a colormap. */
  265 
  266 #endif /*_RASTER_H_*/

Cache object: 19a3ca3590cbcc792ccd876e84c3956a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.