summaryrefslogtreecommitdiff
path: root/History/rcons/raster.h
diff options
context:
space:
mode:
Diffstat (limited to 'History/rcons/raster.h')
-rw-r--r--History/rcons/raster.h259
1 files changed, 259 insertions, 0 deletions
diff --git a/History/rcons/raster.h b/History/rcons/raster.h
new file mode 100644
index 0000000..a513c45
--- /dev/null
+++ b/History/rcons/raster.h
@@ -0,0 +1,259 @@
+/*-
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory and to the University
+ * of California at Berkeley by Jef Poskanzer.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)raster.h 7.1 (Berkeley) 7/13/92
+ *
+ * from: $Header: raster.h,v 1.14 92/06/17 08:14:43 torek Exp $
+ */
+
+/*
+ * Simple raster and frame buffer routines.
+ *
+ * Currently this set of routines is fairly minimal. It's enough to
+ * implement a console terminal emulator on monochrome and pseudocolor
+ * screens, and that's about it.
+ *
+ * Future additions might be other kinds of frame buffers (direct color?),
+ * lines, dashed lines, three-operand blits (stipples/stencils), etc.
+ */
+
+#ifndef _RASTER_H_
+#define _RASTER_H_
+
+/* Configurable definitions. */
+
+/* CONFIGURE: define or undef for your machine's byte order */
+#define MSBYTE_FIRST
+
+/* CONFIGURE: define or under for your frame buffer's bit order */
+#define MSBIT_FIRST
+
+/* CONFIGURE: The text routines can optionally keep a cache of 8-bit
+** characters. This uses about 30K, but makes text on a color screen
+** go 3.2 times faster.
+*/
+#undef COLORFONT_CACHE
+
+
+/* Definitions. */
+
+/* ANSI prototype conditionalizer. */
+#ifndef ARGS
+#if __STDC__
+#define ARGS(alist) alist
+#else /*__STDC__*/
+#define ARGS(alist) ()
+#endif /*__STDC__*/
+#endif /*ARGS*/
+
+/* Raster struct. */
+struct raster {
+ int width, height; /* size in pixels */
+ int depth; /* bits per pixel - 1 or 8 */
+ int linelongs; /* longs from one line to the next - for padding */
+ u_long* pixels; /* pointer to the actual bits */
+ caddr_t data; /* special pointer for frame buffers and subregions */
+ };
+
+/* Colormap struct. */
+struct raster_colormap {
+ int length;
+ u_char* red;
+ u_char* grn;
+ u_char* blu;
+ };
+
+/* Font character struct. */
+struct raster_char {
+ struct raster* r;
+ int homex, homey;
+ int nextx, nexty;
+ };
+
+#ifdef COLORFONT_CACHE
+struct raster_fontcache {
+ struct raster* cr[256];
+ u_char color[256];
+ };
+#endif /*COLORFONT_CACHE*/
+
+/* Font struct. */
+struct raster_font {
+ int width, height; /* nominal character size */
+ int flags;
+#define RASFONT_FIXEDWIDTH 0x1
+#define RASFONT_NOVERTICALMOVEMENT 0x2
+ struct raster_char chars[256];
+#ifdef COLORFONT_CACHE
+ struct raster_fontcache* cache;
+#endif /*COLORFONT_CACHE*/
+ };
+
+/* Defines for the raster_op() and raster_text() rop parameter - the bitblit
+** operation. A rop can be some Boolean combination of RAS_SRC and
+** RAS_DST. For instance, just RAS_SRC means copy the source to the
+** destination without modification. RAS_SRC|RAS_DST means "or" the source
+** and destination together, while "xor" would be RAS_SRC^RAS_DST. The
+** RAS_NOT macro should be used to express negation - RAS_NOT(RAS_SRC)&RAS_DST
+** would "and" the complement of the source with the destination.
+**
+** Or, you can just use one of the pre-defined ops. There are only 16
+** possible combinations, so all 16 are defined here.
+**
+** For color rasters, you specify the color of the operation by simply
+** oring RAS_COLOR(color) into the rop.
+*/
+
+#define RAS_NOT(op) ( 0xf & ( ~ (op) ) )
+
+#define RAS_CLEAR 0x0 /* 0 */
+#define RAS_NOTOR 0x1 /* !( src | dst ) */
+#define RAS_NOTSRC_AND_DST 0x2 /* !src & dst */
+#define RAS_INVERTSRC 0x3 /* !src */
+#define RAS_SRC_AND_NOTDST 0x4 /* src & !dst */
+#define RAS_INVERT 0x5 /* !dst */
+#define RAS_XOR 0x6 /* src ^ dst */
+#define RAS_NOTAND 0x7 /* !( src & dst ) */
+#define RAS_AND 0x8 /* src & dst */
+#define RAS_NOTXOR 0x9 /* !( src ^ dst ) */
+#define RAS_DST 0xa /* dst */
+#define RAS_NOTSRC_OR_DST 0xb /* !src | dst */
+#define RAS_SRC 0xc /* src */
+#define RAS_SRC_OR_NOTDST 0xd /* src | !dst */
+#define RAS_OR 0xe /* src | dst */
+#define RAS_SET 0xf /* 1 */
+
+#define RAS_COLOR(color) ( ( (color) & 0xff ) << 4 )
+
+/* Get the op from a rop. */
+#define RAS_GETOP(op) ( (op) & 0xf )
+/* Get the color from a rop. */
+#define RAS_GETCOLOR(op) ( ( (op) >> 4 ) & 0xff )
+/* Get the longword address of a pixel. */
+#define RAS_ADDR( r, x, y ) \
+ ( (r)->pixels + (y) * (r)->linelongs + (x) * (r)->depth / 32 )
+
+
+/* Raster routines. */
+
+extern struct raster* raster_alloc ARGS(( int width, int height, int depth ));
+/* Allocates a raster. Returns (struct raster*) 0 on failure. */
+
+extern void raster_free ARGS(( struct raster* r ));
+/* Frees/closes a raster. */
+
+extern int raster_get ARGS(( struct raster* r, int x, int y ));
+/* Gets a single pixel from a raster. */
+
+extern void raster_put ARGS(( struct raster* r, int x, int y, int v ));
+/* Puts a single pixel into a raster. */
+
+extern struct raster* raster_subregion ARGS(( struct raster* r, int x, int y, int width, int height ));
+/* Makes a raster that points to a region of another. Returns
+** (struct raster*) 0 on failure.
+*/
+
+
+/* Raster operations. */
+
+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 ));
+/* Performs a bitblit. Returns 0 on success, -1 on failure. */
+
+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 ));
+/* Bitblit without clipping. Returns 0 on success, -1 on failure. */
+
+extern int raster_op_nosrc_noclip ARGS(( struct raster* dst, int dx, int dy, int w, int h, int rop ));
+/* No-src bitblit without clipping. Returns 0 on success, -1 on failure. */
+
+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 ));
+/* Tiles the src to fit the dst. Returns 0 on success, -1 on failure. Only
+** implements RAS_SRC.
+*/
+
+
+/* Raster text routines */
+
+extern struct raster_font* raster_fontopen ARGS(( char* fontname ));
+/* Opens a font. Returns (struct raster_font*) 0 on failure. */
+
+extern int raster_text ARGS(( struct raster* r, int x, int y, int rop, struct raster_font* rf, char* text ));
+/* Draws text. Returns 0 on success, -1 on failure. */
+
+extern int raster_textn ARGS(( struct raster* r, int x, int y, int rop, struct raster_font* rf, char* text, int len ));
+/* Draws n characters of text. Returns 0 on success, -1 on failure. */
+
+extern void raster_fontclose ARGS(( struct raster_font* rf ));
+/* Closes a font. */
+
+
+/* Frame buffer routines. */
+
+extern struct raster* raster_open ARGS(( char* fbname ));
+/* Opens a frame buffer as a raster. Returns (struct raster*) 0 on failure. */
+
+extern struct raster* raster_coloropen ARGS(( void ));
+/* Opens a color frame buffer if there is one. Returns (struct raster*) 0 on
+** failure.
+*/
+
+extern int raster_video_off ARGS(( struct raster* r ));
+/* Blanks the screen. Returns 0 on success, -1 on failure. This might
+** be implemented as actual video blanking, or it might just load black
+** into all colormap entries (and disable further colormap changes).
+*/
+
+extern int raster_video_on ARGS(( struct raster* r ));
+/* Re-enables video. Returns 0 on success, -1 on failure. */
+
+extern struct raster_colormap* raster_colormap_alloc ARGS(( int length ));
+/* Allocates a colormap structure, returns 0 on failure. */
+
+extern struct raster_colormap* raster_colormap_get ARGS(( struct raster* r ));
+/* Allocates a colormap structure and returns the frame buffer's
+** current colormap, or (struct raster_colormap*) 0 on failure. The raster
+** must be one returned by raster_open(), not raster_alloc().
+*/
+
+extern int raster_colormap_set ARGS(( struct raster* r, struct raster_colormap* cm ));
+/* Sets a frame buffer's colormap. The raster must be one returned
+** by raster_open(), not raster_alloc(). Returns 0 on success, -1 on
+** failure.
+*/
+
+extern void raster_colormap_free ARGS(( struct raster_colormap* cm ));
+/* Frees a colormap. */
+
+#endif /*_RASTER_H_*/