|
|
1.1 ! root 1: /*********************************************************** ! 2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, ! 3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts. ! 4: ! 5: All Rights Reserved ! 6: ! 7: Permission to use, copy, modify, and distribute this software and its ! 8: documentation for any purpose and without fee is hereby granted, ! 9: provided that the above copyright notice appear in all copies and that ! 10: both that copyright notice and this permission notice appear in ! 11: supporting documentation, and that the names of Digital or MIT not be ! 12: used in advertising or publicity pertaining to distribution of the ! 13: software without specific, written prior permission. ! 14: ! 15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 21: SOFTWARE. ! 22: ! 23: ******************************************************************/ ! 24: /* $Header: mfbhrzvert.c,v 1.8 87/09/11 07:48:42 toddb Exp $ */ ! 25: #include "X.h" ! 26: ! 27: #include "gc.h" ! 28: #include "window.h" ! 29: #include "pixmap.h" ! 30: #include "region.h" ! 31: ! 32: #include "mfb.h" ! 33: #include "maskbits.h" ! 34: ! 35: /* horizontal solid line ! 36: abs(len) > 1 ! 37: */ ! 38: mfbHorzS(rop, addrl, nlwidth, x1, y1, len) ! 39: int rop; /* a reduced rasterop */ ! 40: register int *addrl; /* pointer to base of bitmap */ ! 41: register int nlwidth; /* width in longwords of bitmap */ ! 42: int x1; /* initial point */ ! 43: int y1; ! 44: int len; /* length of line */ ! 45: { ! 46: register int startmask; ! 47: register int endmask; ! 48: register int nlmiddle; ! 49: ! 50: ! 51: /* force the line to go left to right ! 52: but don't draw the last point ! 53: */ ! 54: if (len < 0) ! 55: { ! 56: x1 += len; ! 57: x1 += 1; ! 58: len = -len; ! 59: } ! 60: ! 61: addrl = addrl + (y1 * nlwidth) + (x1 >> 5); ! 62: ! 63: /* all bits inside same longword */ ! 64: if ( ((x1 & 0x1f) + len) < 32) ! 65: { ! 66: maskpartialbits(x1, len, startmask); ! 67: if (rop == RROP_BLACK) ! 68: { ! 69: *addrl &= ~startmask; ! 70: } ! 71: else if (rop == RROP_WHITE) ! 72: { ! 73: *addrl |= startmask; ! 74: } ! 75: else if (rop == RROP_INVERT) ! 76: { ! 77: *addrl ^= startmask; ! 78: } ! 79: } ! 80: else ! 81: { ! 82: maskbits(x1, len, startmask, endmask, nlmiddle); ! 83: if (rop == RROP_BLACK) ! 84: { ! 85: if (startmask) ! 86: *addrl++ &= ~startmask; ! 87: while (nlmiddle--) ! 88: *addrl++ = 0x0; ! 89: if (endmask) ! 90: *addrl &= ~endmask; ! 91: } ! 92: else if (rop == RROP_WHITE) ! 93: { ! 94: if (startmask) ! 95: *addrl++ |= startmask; ! 96: while (nlmiddle--) ! 97: *addrl++ = 0xffffffff; ! 98: if (endmask) ! 99: *addrl |= endmask; ! 100: } ! 101: else if (rop == RROP_INVERT) ! 102: { ! 103: if (startmask) ! 104: *addrl++ ^= startmask; ! 105: while (nlmiddle--) ! 106: *addrl++ ^= 0xffffffff; ! 107: if (endmask) ! 108: *addrl ^= endmask; ! 109: } ! 110: } ! 111: } ! 112: ! 113: /* vertical solid line ! 114: this uses do loops because pcc (Ultrix 1.2, bsd 4.2) generates ! 115: better code. sigh. we know that len will never be 0 or 1, so ! 116: it's OK to use it. ! 117: */ ! 118: ! 119: mfbVertS(rop, addrl, nlwidth, x1, y1, len) ! 120: int rop; /* a reduced rasterop */ ! 121: register int *addrl; /* pointer to base of bitmap */ ! 122: register int nlwidth; /* width in longwords of bitmap */ ! 123: int x1, y1; /* initial point */ ! 124: register int len; /* length of line */ ! 125: { ! 126: register int bitmask; ! 127: ! 128: addrl = addrl + (y1 * nlwidth) + (x1 >> 5); ! 129: ! 130: if (len < 0) ! 131: { ! 132: nlwidth = -nlwidth; ! 133: len = -len; ! 134: } ! 135: ! 136: if (rop == RROP_BLACK) ! 137: { ! 138: bitmask = rmask[x1&0x1f]; ! 139: do ! 140: { ! 141: *addrl &= bitmask; ! 142: addrl += nlwidth; ! 143: } ! 144: while (--len); ! 145: } ! 146: else if (rop == RROP_WHITE) ! 147: { ! 148: bitmask = mask[x1&0x1f]; ! 149: do ! 150: { ! 151: *addrl |= bitmask; ! 152: addrl += nlwidth; ! 153: } ! 154: while (--len); ! 155: } ! 156: else if (rop == RROP_INVERT) ! 157: { ! 158: bitmask = mask[x1&0x1f]; ! 159: do ! 160: { ! 161: *addrl ^= bitmask; ! 162: addrl += nlwidth; ! 163: } ! 164: while (--len); ! 165: } ! 166: } ! 167:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.