|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T b
Length: 7424 (0x1d00)
Types: TextFile
Names: »bitblt_int.h«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/libibm/bitblt/bitblt_int.h«
/* $Header: bitblt_int.h,v 10.1 86/11/19 10:52:05 jg Exp $ */
/*
* Copyright (c) 1986 Brown University
*
* Permission to use, copy, modify and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies, and that both
* that copyright notice and this permission notice appear in supporting
* documentation, and that the name of Brown University not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Brown University makes no
* representations about the suitability of this software for any purpose.
* It is provided "as-is" without express or implied warranty.
*
* Written by Daniel Stone, Brown University/IRIS (des@iris)
*/
/*
* BITBLT COMPILATION OPTIONS:
* define APA16 Bltter handles the APA16 screen.
* define APA8 Bltter handles the APA8 screen.
* define APA8C Bltter handles the APA8C screen.
* define AED Bltter handles the AED screen.
* define BLT_DEBUG Bltter debug messages on.
* define USE_APA16_HDWR Bltter will use screen hardware where
* implemented.
*/
#ifdef BLT_DEBUG
#define DEBUGF(cond,stmt) if (cond) { stmt; }
#else
#define DEBUGF(cond,stmt)
#endif
/*
* bitblt_ext.h needs this defined because of XAddr.
*/
#include <machinecons/xio.h>
/*
* Include the external interface routine to the bitblt routine, bitblt_ext.h.
*/
#include "bitblt_ext.h"
typedef Blt Blt_userdata;
typedef struct Blt_screen_info {
unsigned short *firstaddr; /* first address on the screen bitmap */
unsigned short *lastaddr; /* last address on the screen bitmap */
unsigned long cursortype; /* Indicate the type of cursor on this
screen. */
} Blt_screen_info;
typedef struct bitmap_info {
unsigned short *data; /* pointer to the starting place of the bit
blt. */
Blt_Rectangle rect; /* bounds of the area to be used or changed */
long nextline; /* The amount to be added to the pointer to
get to the next logical scanline */
} Blt_bitmap_info;
typedef struct Blt_sysdata {
long height,width; /* the height and width (in bits) of the
destination area to be changed */
short nshorts; /* number of destination shorts to be changed */
short top_to_bot; /* If non-zero it indicates the blt is to go
from right to left, bottom to top */
short is_src; /* Indicates that the rule uses the source */
short rule; /* combination rule or "mode" to be used with
the data */
short preload_src; /* Indicates 2 source words are needed to make
the first destination word. */
short preload_msk; /* Indicates 2 mask words are needed to make
the first destination word. */
short skew_src; /* The amount the source must be shifted to
line up with the destination */
short skew_msk; /* The amount the mask must be shifted to
line up with the destination */
unsigned short left_mask; /* left mask to protect those bits on the
left edge that are not to be changed */
unsigned short right_mask; /* right mask to protect those bits on the
right edge that are not to be changed */
unsigned short *tile_ptr; /* Points to the Tile to be used to tile
the destination */
Blt_bitmap_info dst; /* Internal information for the destination
bitmap. */
Blt_bitmap_info src; /* Internal information for the source bitmap */
Blt_bitmap_info msk; /* Internal information for the mask bitmap*/
#if (APA8 || APA8C)
short dst_plus; /* the amount to increment the destination
pointer to get to the next word. (usually
its 1, with the APA-8 its 2)*/
short src_plus; /* the amount to increment the source
pointer to get to the next word. (usually
its 1, with the APA-8 its 2)*/
#endif
} Blt_sysdata;
#define SETRECT(dst,l,t,r,b) { \
(dst)->origin_x = l; (dst)->origin_y = t; \
(dst)->corner_x = r; (dst)->corner_y = b; \
}
/*
* Macro to determine if a bitmap points to the APA-8 screen.
*/
#define APA8BASE 0xf4d00000
#define APA8_BYTE_SIZE (128*512)
/*
* Macro to determine if a bitmap points to the APA-8 screen.
*/
#define APA8CBASE 0xf4d20000
#define APA8C_BYTE_SIZE (128*512)
/*
* Macro to determine if a bitmap points to the APA-16 screen.
*/
#define APA16BASE 0xf4d80000
#define APA16_BYTE_SIZE (128*1024)
/*
* Macro to determine if a bitmap points to the AED's offscreen bitmap
*/
#define AEDBASE 0xEF100000
#define AED_BYTE_SIZE (128*800)
/*
* Macro to determine if a bitmap points to the screen.
*/
#define IS_APA8(BM) (APA8BASE <= (long)BM.base && \
(long)BM.base < (APA8BASE+(2*APA8_BYTE_SIZE)))
#define IS_APA8C(BM) (APA8CBASE <= (long)BM.base && \
(long)BM.base < (APA8CBASE+(2*APA8C_BYTE_SIZE)))
#define IS_APA8orAPA8C(BM) (APA8BASE <= (long)BM.base && \
(long)BM.base < (APA8CBASE+(2*APA8C_BYTE_SIZE)))
#define IS_APA16(BM) (APA16BASE <= (long)BM.base && \
(long)BM.base < (APA16BASE+APA16_BYTE_SIZE))
#define IS_AED(BM) (AEDBASE <= (long)BM.base && \
(long)BM.base < (AEDBASE+AED_BYTE_SIZE))
#define DstClear 0
#define SrcAnd 1
#define SrcAndNotDst 2
#define SrcCopy 3
#define NotSrcAnd 4
#define DstCopy 5
#define SrcXor 6
#define SrcOr 7
#define NotSrcAndNotDst 8
#define NotSrcXor 9
#define NotDstCopy 10
#define SrcOrNotDst 11
#define NotSrcCopy 12
#define NotSrcOr 13
#define NotSrcOrNotDst 14
#define DstSet 15
#define TileDstClear 16
#define TileAnd 17
#define TileAndNotDst 18
#define TileCopy 19
#define NotTileAnd 20
#define TileDstCopy 21
#define TileXor 22
#define TileOr 23
#define NotTileAndNotDst 24
#define NotTileXor 25
#define TileNotDstCopy 26
#define TileOrNotDst 27
#define NotTileCopy 28
#define NotTileOr 29
#define NotTileOrNotDst 30
#define TileDstSet 31
#define SRC_TO_TILE TileDstClear
/*
* Macros to determine if the given rule refers to a tile or a source
* bitmap.
* NOTE: This Macro depends on the order of the defines above.
*/
#define IS_SRC(rule) ((rule < TileDstClear) && (rule != DstSet) && \
(rule != DstClear) && (rule != NotDstCopy))
#define IS_SCREEN(bitmap) (blt_cur_screen.firstaddr <= bitmap.base && \
bitmap.base < blt_cur_screen.lastaddr)
#ifndef BPW
/*
* Macros for division from words and bytes.
*/
#define BPW 16 /* Bits per Word */
#define LOG2_BPW 4
#define MOD_BPW(value) ((value) & (BPW-1))
#define DIV_BPW(value) ((value) >> LOG2_BPW)
#define MUL_BPW(value) ((value) << LOG2_BPW)
/*
* Bits TO Words.
*/
#define BTOW(bits) (DIV_BPW((bits) + (BPW-1)))
#endif BPW
/*
* Macros for the division and multiplication by 2.
*/
#define DIV_2(n) ((n) >> 1)
#define MUL_2(n) ((n) << 1)
#define MOD_2(n) ((n) & 0x1)
/*
* Need to multiply by 4 when using the APA-8.
*/
#define MUL_4(n) ((n) << 2)
/*
* Bits Per Byte.
*/
#define BPB 8
#define LOG2_BPB 3
#define MOD_BPB(value) ((value) & (BPB-1))
#define DIV_BPB(value) ((value) >> LOG2_BPB)
#define MUL_BPB(value) ((value) << LOG2_BPB)
/*
* Bits TO Bytes.
*/
#define BTOB(bits) (DIV_BPB((bits) + (BPB-1)))
extern Blt_screen_info blt_cur_screen;
#ifdef BLT_DEBUG
extern int blt_debug;
#endif
#define MIN(a,b) ((a < b) ? (a) : (b))
#define MAX(a,b) ((a > b) ? (a) : (b))