Annotation of researchv10no/cmd/pico/pfb.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: #include <fb.h>
        !             3: #include "pico.h"
        !             4: 
        !             5: extern short   CURSCRATCH, CUROLD;
        !             6: extern struct  SRC src[MANY];
        !             7: extern char    frameb, metheus;
        !             8: extern int     DEF_LL, DEF_NL;
        !             9: 
        !            10: fbreg  G;      /* place holder (68 bytes) */
        !            11: fbreg *F = &G; /* initial value */
        !            12: int delay=0;
        !            13: 
        !            14: #define Delay  delay+=2
        !            15: 
        !            16: fbsnore()
        !            17: {      int it;
        !            18:        if (!frameb) return;
        !            19:        if((it=open("/dev/iti0", 2))<0 || ioctl(it, ITIADDR, &fb.addr)<0)
        !            20:        {       fprintf(stderr, "pico: cannot open framebuffer\n");
        !            21:                frameb = 0;
        !            22:        } else
        !            23:        {       fb.fd = it;
        !            24:                F=fb.addr;
        !            25:        }
        !            26: }
        !            27: 
        !            28: closefb()
        !            29: {      close(fb.fd);
        !            30: }
        !            31: 
        !            32: fbputitall(k)
        !            33: {      register fbreg *f=F;
        !            34:        register unsigned char *pr, *pg, *pb;
        !            35:        struct SRC *from = &src[k];
        !            36:        register int j, ex = from->sx + from->ex;
        !            37:        int i, offset, delta, sx = from->sx;
        !            38:        int sy = from->sy, ey = from->sy + from->ey;
        !            39: 
        !            40:        if (!frameb) return;
        !            41: 
        !            42:        offset = sy*DEF_LL + sx;
        !            43:        delta  = DEF_LL - ex + sx;
        !            44: 
        !            45:        pr = from->pixred+offset;
        !            46:        pg = from->pixgrn+offset;
        !            47:        pb = from->pixblu+offset;
        !            48: 
        !            49:        f->red.csr=f->grn.csr=f->blu.csr=F_IXW;
        !            50: 
        !            51:        switch (from->nchan)
        !            52:        {       case 1:
        !            53:                        for (i = sy; i < ey; i++, pr+=delta)
        !            54:                        {       f->red.x=f->grn.x=f->blu.x=sx;
        !            55:                                f->red.y=f->grn.y=f->blu.y=i;
        !            56:                                for (j = sx; j < ex; j++)
        !            57:                                {       f->red.z=f->grn.z=f->blu.z= (*pr++);
        !            58:                                        Delay;
        !            59:                                }
        !            60:                        }
        !            61:                        break;
        !            62:                case 4:
        !            63:                case 3:
        !            64:                        for (i = sy; i < ey; i++, pr+=delta, pg+=delta, pb+=delta)
        !            65:                        {       f->red.x=f->grn.x=f->blu.x=sx;
        !            66:                                f->red.y=f->grn.y=f->blu.y=i;
        !            67:                                for (j = sx; j < ex; j++)
        !            68:                                {       f->red.z=*pr++; Delay;
        !            69:                                        f->grn.z=*pg++; Delay;
        !            70:                                        f->blu.z=*pb++; Delay;
        !            71:                        }       }
        !            72:                        break;
        !            73:                default:
        !            74:                        fprintf(stderr, "undefined number of channels\n");
        !            75:                        break;
        !            76:                }
        !            77: }
        !            78: 
        !            79: fbgetitall(from)
        !            80:        struct SRC *from;
        !            81: {
        !            82:        register fbreg *f=F;
        !            83:        register unsigned char *pr, *pg, *pb;
        !            84:        register int j, ex = from->sx + from->ex;
        !            85:        int i, offset, delta, sx = from->sx;
        !            86:        int sy = from->sy, ey = from->sy + from->ey;
        !            87: 
        !            88:        if (!frameb) yyerror("framebuffer is not open");
        !            89: 
        !            90:        if (from == Old)
        !            91:                fprintf(stderr, "reading screen...");
        !            92: 
        !            93:        offset = sy*DEF_LL + sx;
        !            94:        delta  = DEF_LL - ex + sx;
        !            95: 
        !            96:        pr = from->pixred+offset;
        !            97:        pg = from->pixgrn+offset;
        !            98:        pb = from->pixblu+offset;
        !            99: 
        !           100:        f->red.csr=f->blu.csr=f->grn.csr=F_IXR;
        !           101: 
        !           102:        switch (from->nchan)
        !           103:        {       case 1:
        !           104:                        for (i = sy; i < ey; i++, pr+=delta, pg+=delta, pb+=delta)
        !           105:                        {       f->red.x=f->grn.x=f->blu.x=sx;
        !           106:                                f->red.y=f->grn.y=f->blu.y=i;
        !           107:                                for (j = sx; j < ex; j++)
        !           108:                                {       *pg = *pb = *pr = f->grn.z; Delay;
        !           109:                                        pg++; pb++; pr++;
        !           110:                                }
        !           111:                        }
        !           112:                        break;
        !           113:                case 4:
        !           114:                case 3:
        !           115:                        for (i = sy; i < ey; i++, pr+=delta, pg+=delta, pb+=delta)
        !           116:                        {       f->red.x=f->grn.x=f->blu.x=sx;
        !           117:                                f->red.y=f->grn.y=f->blu.y=i;
        !           118:                                for (j = sx; j < ex; j++)
        !           119:                                {       *pr++ = f->red.z; Delay;
        !           120:                                        *pg++ = f->grn.z; Delay;
        !           121:                                        *pb++ = f->blu.z; Delay;
        !           122:                        }       }
        !           123:                        break;
        !           124:                default:
        !           125:                        fprintf(stderr, "undefined number of channels\n");
        !           126:                        break;
        !           127:        }
        !           128:        RESIDENT;
        !           129: }
        !           130: 
        !           131: fbup()  
        !           132: {      if (!frameb) yyerror("up: no access to framebuffer");
        !           133:        F->red.scroll = F->grn.scroll = F->blu.scroll = 32;
        !           134: }
        !           135: 
        !           136: fbdown()
        !           137: {      if (!frameb) yyerror("down: no access to framebuffer");
        !           138:        F->red.scroll = F->grn.scroll = F->blu.scroll =  0;
        !           139: }
        !           140: 
        !           141: fblyank(x, y)
        !           142: {      register fbreg *f=F;
        !           143:        register int i;
        !           144:        register unsigned char *pr, *pg, *pb;
        !           145:        extern char faster;
        !           146: 
        !           147:        if (!faster)
        !           148:        {       fbyank(x, y);
        !           149:                return;
        !           150:        } else
        !           151:        {       if (x != 0)
        !           152:                        return;
        !           153:        }
        !           154:        i = (y < 1 || y >= DEF_LL) ? 0 : DEF_LL*(y-1);
        !           155:        pr = scratchred+i;
        !           156:        pg = scratchgrn+i;
        !           157:        pb = scratchblu+i;
        !           158: 
        !           159:        f->red.y=f->grn.y=f->blu.y=y-1; Delay;
        !           160:        for (i = 0; i < DEF_LL; i++)
        !           161:        {       f->red.x=f->grn.x=f->blu.x=i; Delay;
        !           162:                f->red.z = *pr++; Delay;
        !           163:                f->grn.z = *pg++; Delay;
        !           164:                f->blu.z = *pb++; Delay;
        !           165:        }
        !           166:        return 1;
        !           167: }
        !           168: 
        !           169: fbyank(x, y)
        !           170: {      register fbreg *f=F;
        !           171:        register int i = DEF_LL*y+x;
        !           172:        unsigned char *pr = scratchred+i;
        !           173:        unsigned char *pg = scratchgrn+i;
        !           174:        unsigned char *pb = scratchblu+i;
        !           175: 
        !           176:        f->red.x=f->grn.x=f->blu.x=x; Delay;
        !           177:        f->red.y=f->grn.y=f->blu.y=y; Delay;
        !           178: 
        !           179:        f->red.z = *pr; Delay;
        !           180:        f->grn.z = *pg; Delay;
        !           181:        f->blu.z = *pb; Delay;
        !           182: 
        !           183:        return *pr;
        !           184: }
        !           185: 
        !           186: redcmap(i, z)
        !           187: {      if (frameb) fbredcmap(i, z);
        !           188:        else if (metheus) metredcmap(i, z);
        !           189: }
        !           190: 
        !           191: grncmap(i, z)
        !           192: {      if (frameb) fbgrncmap(i, z);
        !           193:        else if (metheus) metgrncmap(i, z);
        !           194: }
        !           195: 
        !           196: blucmap(i, z)
        !           197: {      if (frameb) fbblucmap(i, z);
        !           198:        else if (metheus) metblucmap(i, z);
        !           199: }
        !           200: 
        !           201: getcmap(i, r,g,b)
        !           202: {
        !           203:        if (frameb) return fbgetcmap(i, r,g,b);
        !           204:        else if (metheus) return metgetcmap(i, r,g,b);
        !           205:        return 0;
        !           206: }
        !           207: 
        !           208: fbredcmap(i, z)
        !           209: {      F->map.addr = i%256;
        !           210:        F->map.sele =  0;
        !           211:        F->map.data = z;
        !           212:        return z;
        !           213: }
        !           214: fbgrncmap(i, z)
        !           215: {      F->map.addr = i%256;
        !           216:        F->map.sele = 16;
        !           217:        F->map.data = z;
        !           218:        return z;
        !           219: }
        !           220: fbblucmap(i, z)
        !           221: {      F->map.addr = i%256;
        !           222:        F->map.sele = 32;
        !           223:        F->map.data = z;
        !           224:        return z;
        !           225: }
        !           226: 
        !           227: fbgetcmap(i, r,g,b)
        !           228: {      fbreg *f=F;
        !           229:        int h = 0, k = 0;
        !           230: 
        !           231:        f->map.addr = i%256;
        !           232:        if (r) { h++; f->map.sele =  0; k += f->map.data; }
        !           233:        if (g) { h++; f->map.sele = 16; k += f->map.data; }
        !           234:        if (b) { h++; f->map.sele = 32; k += f->map.data; }
        !           235:        if (h > 1)
        !           236:                k /= h;
        !           237:        return k;
        !           238: }

unix.superglobalmegacorp.com

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