Annotation of researchv10dc/cmd/pico/framebuffers/damn.c, revision 1.1.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.