Annotation of lucent/sys/src/libgnot/gpoint.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

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