|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.