|
|
1.1 ! root 1: #include <u.h> ! 2: #include <libc.h> ! 3: #include <libg.h> ! 4: #include <gnot.h> ! 5: ! 6: void ! 7: gpoint(GBitmap *b, Point p, int s, Fcode c) ! 8: { ! 9: uchar *d; ! 10: uchar mask; ! 11: int l; ! 12: ! 13: if(!ptinrect(p, b->clipr)) ! 14: return; ! 15: d = gbaddr(b, p); ! 16: l = b->ldepth; ! 17: if(LENDIAN){ ! 18: mask = (1<<(1<<l))-1; ! 19: l = (p.x&(0x7>>l))<<l; ! 20: mask <<= l; ! 21: s <<= l; ! 22: }else{ ! 23: s <<= (8-(1<<l)); ! 24: mask = (~0UL)<<(8-(1<<l)); ! 25: l = (p.x&(0x7>>l))<<l; ! 26: s >>= l; ! 27: mask >>= l; ! 28: } ! 29: ! 30: switch(c&0x1F){ ! 31: case Zero: ! 32: *d &= ~mask; ! 33: break; ! 34: ! 35: case DnorS: ! 36: *d ^= (*d|~s)&mask; ! 37: break; ! 38: ! 39: case DandnotS: ! 40: *d ^= (*d&s)&mask; ! 41: break; ! 42: ! 43: case notS: ! 44: *d ^= (*d^~s)&mask; ! 45: break; ! 46: ! 47: case notDandS: ! 48: *d ^= (s|*d)&mask; ! 49: break; ! 50: ! 51: case notD: ! 52: *d ^= mask; ! 53: break; ! 54: ! 55: case DxorS: ! 56: *d ^= s&mask; ! 57: break; ! 58: ! 59: case DnandS: ! 60: *d ^= (s|~*d)&mask; ! 61: break; ! 62: ! 63: case DandS: ! 64: *d &= s|~mask; ! 65: break; ! 66: ! 67: case DxnorS: ! 68: *d ^= (~s)&mask; ! 69: break; ! 70: ! 71: case D: ! 72: break; ! 73: ! 74: case DornotS: ! 75: *d |= (~s)&mask; ! 76: break; ! 77: ! 78: case S: ! 79: *d ^= (s^*d)&mask; ! 80: break; ! 81: ! 82: case notDorS: ! 83: *d ^= (~(*d&s))&mask; ! 84: break; ! 85: ! 86: case DorS: ! 87: *d |= s&mask; ! 88: break; ! 89: ! 90: case F: ! 91: *d |= mask; ! 92: break; ! 93: } ! 94: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.