Annotation of researchv10no/cmd/pico/framebuffers/damn.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: #include <fb.h>
        !             3: #include "pico.h"
        !             4: 
        !             5: extern struct  SRC src[MANY];
        !             6: extern short   CUROLD, CURSCRATCH;
        !             7: extern int     DEF_LL, DEF_NL;
        !             8: 
        !             9: gettd(into)
        !            10:        struct SRC *into;
        !            11: {
        !            12:        unsigned char *r = into->pixred + (into->sy)*DEF_LL + (into->sx);
        !            13:        unsigned char *g = into->pixgrn + (into->sy)*DEF_LL + (into->sx);
        !            14:        unsigned char *b = into->pixblu + (into->sy)*DEF_LL + (into->sx);
        !            15:        PICFILE *tmp = picopen(into->fname);
        !            16:        int nc = into->nchan;
        !            17:        int  w = into->ex - into->sx;
        !            18:        int  d = into->ey - into->sy;
        !            19:        unsigned char *z = (unsigned char *) Emalloc(w*nc*sizeof(unsigned char));
        !            20:        int i;
        !            21: 
        !            22:        for (i = 0; i < d; i++)
        !            23:        {       if (readpic(tmp, z) == -1)
        !            24:                {       fprintf(stderr, "unexpected eof\n");
        !            25:                        break;
        !            26:                }
        !            27:                if (i < into->oy) continue;
        !            28:                unwind(z+nc*into->ox, r, g, b, w, nc);
        !            29:                r += DEF_LL; g += DEF_LL; b += DEF_LL;
        !            30:        }
        !            31:        closepic(tmp);
        !            32:        free(z);
        !            33: }
        !            34: 
        !            35: unwind(p, R, G, B, w, nc)
        !            36:        unsigned char *p, *R, *G, *B;
        !            37: {
        !            38:        register unsigned char *r = R, *g = G, *b = B;
        !            39:        register unsigned char *z = p;
        !            40:        register int i;
        !            41: 
        !            42:        switch (nc) {
        !            43:        default: whoops("unwind: bad number of channels");
        !            44:        case 4: for(i=0; i<w; i++){ *r++=*z++; *g++=*z++; *b++=*z++; z++; } break;
        !            45:        case 3: for(i=0; i<w; i++){ *r++=*z++; *g++=*z++; *b++=*z++;      } break;
        !            46:        case 2: for(i=0; i<w; i++){ *r++=*z++; *g++=*z++;                 } break;
        !            47:        case 1: for(i=0; i<w; i++){ *r++=*z++;                            } break;
        !            48:        }
        !            49: }
        !            50: 
        !            51: puttd(fd, x, y, w, d)
        !            52: {
        !            53:        register unsigned char *r = Old->pixred + y*DEF_LL + x;
        !            54:        register unsigned char *g = Old->pixgrn + y*DEF_LL + x;
        !            55:        register unsigned char *b = Old->pixblu + y*DEF_LL + x;
        !            56:        register int i, j, nc = Old->nchan;
        !            57:        char *zz, *tmp = (char *) Emalloc(w*nc*sizeof(char));
        !            58: 
        !            59:        for (i = 0; i < d; i++)
        !            60:        {       switch (nc) {
        !            61:                default: for (j = 0, zz = tmp; j < w; j++)
        !            62:                         {      *zz++ = *r++, *zz++ = *g++, *zz++ = *b++;
        !            63:                                zz += nc - 3;
        !            64:                         }
        !            65:                         break;
        !            66:                case  3: for (j = 0, zz = tmp; j < w; j++)
        !            67:                         {      *zz++ = *r++, *zz++ = *g++, *zz++ = *b++; }
        !            68:                         break;
        !            69:                case  2: for (j = 0, zz = tmp; j < w; j++)
        !            70:                         {      *zz++ = *r++, *zz++ = *g++; }
        !            71:                         break;
        !            72:                case  1: for (j = 0, zz = tmp; j < w; j++) *zz++ = *r++;
        !            73:                         break;
        !            74:                }
        !            75: 
        !            76:                if (!ewrite(fd, tmp, w*nc))
        !            77:                        break;
        !            78: 
        !            79:                r += DEF_LL-w, g += DEF_LL-w, b += DEF_LL-w;
        !            80:        }
        !            81:        free(tmp);
        !            82: }
        !            83: 
        !            84: tdheader(fd, n, a, b, c, d)
        !            85: {      char line[128];
        !            86: 
        !            87:        sprintf(line, "TYPE=dump\nWINDOW=%d %d %d %d\nNCHAN=%d\n\n", a,b,c,d,n);
        !            88:        write(fd, line, strlen(line));
        !            89: }

unix.superglobalmegacorp.com

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