Annotation of 43BSDTahoe/new/X/libibm/bitblt/bitblt_int.h, revision 1.1.1.1

1.1       root        1: /* $Header: bitblt_int.h,v 10.1 86/11/19 10:52:05 jg Exp $ */
                      2: /*
                      3:  *             Copyright (c) 1986 Brown University
                      4:  *
                      5:  * Permission to use, copy, modify and distribute this software and its
                      6:  * documentation for any purpose and without fee is hereby granted, provided
                      7:  * that the above copyright notice appear in all copies, and that both
                      8:  * that copyright notice and this permission notice appear in supporting
                      9:  * documentation, and that the name of Brown University not be used in
                     10:  * advertising or publicity pertaining to distribution of the software without
                     11:  * specific, written prior permission. Brown University makes no
                     12:  * representations about the suitability of this software for any purpose.
                     13:  * It is provided "as-is" without express or implied warranty.
                     14:  *
                     15:  * Written by Daniel Stone, Brown University/IRIS  (des@iris)
                     16:  */
                     17: 
                     18: /*
                     19:  * BITBLT COMPILATION OPTIONS:
                     20:  *     define APA16            Bltter handles the APA16 screen.
                     21:  *     define APA8             Bltter handles the APA8 screen.
                     22:  *     define APA8C            Bltter handles the APA8C screen.
                     23:  *     define AED              Bltter handles the AED screen.
                     24:  *     define BLT_DEBUG        Bltter debug messages on.
                     25:  *     define USE_APA16_HDWR   Bltter will use screen hardware where
                     26:  *                             implemented.
                     27:  */
                     28: 
                     29: #ifdef BLT_DEBUG
                     30: #define DEBUGF(cond,stmt)      if (cond) { stmt; }
                     31: #else
                     32: #define DEBUGF(cond,stmt)
                     33: #endif
                     34: 
                     35: /*
                     36:  * bitblt_ext.h needs this defined because of XAddr.
                     37:  */
                     38: #include <machinecons/xio.h>
                     39: /*
                     40:  * Include the external interface routine to the bitblt routine, bitblt_ext.h.
                     41:  */
                     42: #include "bitblt_ext.h"
                     43: 
                     44: typedef Blt Blt_userdata;
                     45: 
                     46: typedef struct Blt_screen_info {
                     47:        unsigned short *firstaddr;      /* first address on the screen bitmap */
                     48:        unsigned short *lastaddr;       /* last address on the screen bitmap */
                     49:        unsigned long cursortype;       /* Indicate the type of cursor on this
                     50:                                           screen. */
                     51: } Blt_screen_info;
                     52:        
                     53: typedef struct bitmap_info {
                     54:        unsigned short *data;   /* pointer to the starting place of the bit
                     55:                                   blt. */
                     56:        Blt_Rectangle rect;     /* bounds of the area to be used or changed */
                     57:        long nextline;  /* The amount to be added to the pointer to
                     58:                           get to the next logical scanline */
                     59: } Blt_bitmap_info;
                     60: 
                     61: typedef struct Blt_sysdata {
                     62:        long height,width;      /* the height and width (in bits) of the
                     63:                                   destination area to be changed */
                     64:        short   nshorts;        /* number of destination shorts to be changed */
                     65:        short   top_to_bot;     /* If non-zero it indicates the blt is to go
                     66:                                   from right to left, bottom to top */
                     67:        short   is_src;         /* Indicates that the rule uses the source */
                     68:        short   rule;           /* combination rule or "mode" to be used with
                     69:                                   the data */
                     70:        short   preload_src;    /* Indicates 2 source words are needed to make
                     71:                                   the first destination word. */
                     72:        short   preload_msk;    /* Indicates 2 mask words are needed to make
                     73:                                   the first destination word. */
                     74:        short   skew_src;       /* The amount the source must be shifted to
                     75:                                   line up with the destination */
                     76:        short   skew_msk;       /* The amount the mask must be shifted to
                     77:                                   line up with the destination */
                     78:        unsigned short left_mask;  /* left mask to protect those bits on the
                     79:                                      left edge that are not to be changed */
                     80:        unsigned short right_mask; /* right mask to protect those bits on the
                     81:                                      right edge that are not to be changed */
                     82: 
                     83:        unsigned short *tile_ptr;  /* Points to the Tile to be used to tile
                     84:                                      the destination */
                     85:        Blt_bitmap_info dst;    /* Internal information for the destination 
                     86:                                   bitmap. */
                     87:        Blt_bitmap_info src;    /* Internal information for the source bitmap */
                     88:        Blt_bitmap_info msk;    /* Internal information for the mask bitmap*/
                     89: #if (APA8 || APA8C)
                     90:        short   dst_plus;       /* the amount to increment the destination
                     91:                                   pointer to get to the next word. (usually
                     92:                                   its 1, with the APA-8 its 2)*/
                     93:        short   src_plus;       /* the amount to increment the source 
                     94:                                   pointer to get to the next word. (usually
                     95:                                   its 1, with the APA-8 its 2)*/
                     96: #endif
                     97: } Blt_sysdata;
                     98: 
                     99: #define SETRECT(dst,l,t,r,b) {                 \
                    100:        (dst)->origin_x = l;  (dst)->origin_y = t;      \
                    101:        (dst)->corner_x = r; (dst)->corner_y = b;       \
                    102: }
                    103: 
                    104: /*
                    105:  * Macro to determine if a bitmap points to the APA-8 screen.
                    106:  */
                    107: #define APA8BASE       0xf4d00000
                    108: #define APA8_BYTE_SIZE (128*512)
                    109: 
                    110: /*
                    111:  * Macro to determine if a bitmap points to the APA-8 screen.
                    112:  */
                    113: #define APA8CBASE      0xf4d20000
                    114: #define APA8C_BYTE_SIZE        (128*512)
                    115: 
                    116: /*
                    117:  * Macro to determine if a bitmap points to the APA-16 screen.
                    118:  */
                    119: #define APA16BASE      0xf4d80000
                    120: #define APA16_BYTE_SIZE        (128*1024)
                    121: 
                    122: /*
                    123:  * Macro to determine if a bitmap points to the AED's offscreen bitmap
                    124:  */
                    125: #define AEDBASE                0xEF100000
                    126: #define AED_BYTE_SIZE  (128*800)
                    127: 
                    128: /*
                    129:  * Macro to determine if a bitmap points to the screen.
                    130:  */
                    131: #define IS_APA8(BM)    (APA8BASE <= (long)BM.base && \
                    132:                         (long)BM.base < (APA8BASE+(2*APA8_BYTE_SIZE)))
                    133: 
                    134: #define IS_APA8C(BM)   (APA8CBASE <= (long)BM.base && \
                    135:                         (long)BM.base < (APA8CBASE+(2*APA8C_BYTE_SIZE)))
                    136: 
                    137: #define IS_APA8orAPA8C(BM)     (APA8BASE <= (long)BM.base && \
                    138:                                (long)BM.base < (APA8CBASE+(2*APA8C_BYTE_SIZE)))
                    139: 
                    140: #define IS_APA16(BM)   (APA16BASE <= (long)BM.base && \
                    141:                        (long)BM.base < (APA16BASE+APA16_BYTE_SIZE))
                    142: 
                    143: #define IS_AED(BM)     (AEDBASE <= (long)BM.base && \
                    144:                        (long)BM.base < (AEDBASE+AED_BYTE_SIZE))
                    145: 
                    146: #define DstClear        0
                    147: #define SrcAnd          1
                    148: #define SrcAndNotDst    2
                    149: #define SrcCopy         3
                    150: #define NotSrcAnd       4
                    151: #define DstCopy         5
                    152: #define SrcXor          6
                    153: #define SrcOr           7
                    154: #define NotSrcAndNotDst 8
                    155: #define NotSrcXor       9
                    156: #define NotDstCopy      10
                    157: #define SrcOrNotDst     11
                    158: #define NotSrcCopy      12
                    159: #define NotSrcOr        13
                    160: #define NotSrcOrNotDst  14
                    161: #define DstSet          15
                    162:  
                    163: #define TileDstClear     16
                    164: #define TileAnd          17
                    165: #define TileAndNotDst    18
                    166: #define TileCopy         19
                    167: #define NotTileAnd       20
                    168: #define TileDstCopy      21
                    169: #define TileXor          22
                    170: #define TileOr           23
                    171: #define NotTileAndNotDst 24
                    172: #define NotTileXor       25
                    173: #define TileNotDstCopy   26
                    174: #define TileOrNotDst     27
                    175: #define NotTileCopy      28
                    176: #define NotTileOr        29
                    177: #define NotTileOrNotDst  30
                    178: #define TileDstSet       31
                    179: 
                    180: #define SRC_TO_TILE    TileDstClear
                    181: 
                    182: /*
                    183:  * Macros to determine if the given rule refers to a tile or a source
                    184:  * bitmap.
                    185:  * NOTE: This Macro depends on the order of the defines above.
                    186:  */
                    187: #define IS_SRC(rule)   ((rule < TileDstClear) && (rule != DstSet) && \
                    188:                         (rule != DstClear) && (rule != NotDstCopy))
                    189: 
                    190: #define IS_SCREEN(bitmap) (blt_cur_screen.firstaddr <= bitmap.base && \
                    191:                           bitmap.base < blt_cur_screen.lastaddr)
                    192: 
                    193: #ifndef BPW
                    194: /*
                    195:  * Macros for division from words and bytes.
                    196:  */
                    197: #define BPW            16 /* Bits per Word */
                    198: #define LOG2_BPW       4
                    199: #define MOD_BPW(value) ((value) & (BPW-1))
                    200: #define DIV_BPW(value) ((value) >> LOG2_BPW)
                    201: #define MUL_BPW(value) ((value) << LOG2_BPW)
                    202: 
                    203: /*
                    204:  * Bits TO Words.
                    205:  */
                    206: #define BTOW(bits)     (DIV_BPW((bits) + (BPW-1)))
                    207: #endif BPW
                    208: 
                    209: /*
                    210:  * Macros for the division and multiplication by 2.
                    211:  */
                    212: #define DIV_2(n) ((n) >> 1)
                    213: #define MUL_2(n) ((n) << 1)
                    214: #define MOD_2(n) ((n) & 0x1)
                    215: 
                    216: /*
                    217:  * Need to multiply by 4 when using the APA-8.
                    218:  */
                    219: #define MUL_4(n) ((n) << 2)
                    220: 
                    221: /*
                    222:  * Bits Per Byte.
                    223:  */
                    224: #define BPB             8
                    225: #define LOG2_BPB        3
                    226: #define MOD_BPB(value)  ((value) & (BPB-1))
                    227: #define DIV_BPB(value)  ((value) >> LOG2_BPB)
                    228: #define MUL_BPB(value)  ((value) << LOG2_BPB)
                    229: /*
                    230:  * Bits TO Bytes.
                    231:  */
                    232: #define BTOB(bits)      (DIV_BPB((bits) + (BPB-1)))
                    233: 
                    234: extern Blt_screen_info blt_cur_screen;
                    235: #ifdef BLT_DEBUG
                    236: extern int blt_debug;
                    237: #endif
                    238: 
                    239: #define MIN(a,b)       ((a < b) ? (a) : (b))
                    240: #define MAX(a,b)       ((a > b) ? (a) : (b))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.