|
|
1.1 root 1: #include <stdio.h>
2: #include "pico.h"
3:
4: extern struct SRC src[MANY];
5: extern short CUROLD;
6: extern int DEF_LL, DEF_NL;
7:
8: getwindow(into, dest)
9: struct SRC *into;
10: char *dest;
11: {
12: register char *z = dest + (into->sy)*DEF_LL + (into->sx);
13: register int i;
14: register int w = into->ex - into->sx;
15: register int d = into->ey - into->sy;
16: int ll = into->ll, nl = into->nl;
17: int x = into->ox, y = into->oy;
18: int fd = into->fd;
19:
20: lseek(fd, (y*ll + x), 1);
21: for(i = 0; i < d; i++, z += DEF_LL)
22: { if (!eread(fd, z, w))
23: break;
24: lseek(fd, ll-w, 1);
25: }
26: lseek(fd, ll-x, 1);
27: lseek(fd, (nl-d-y-1)*ll, 1);
28:
29: }
30:
31: putwindow(fd, source, x, y, width, depth)
32: char *source;
33: {
34: register char *z = source + y*DEF_LL + x;
35: register int i;
36:
37: for (i = 0; i < depth; i++, z += DEF_LL)
38: if (!ewrite(fd, z, width))
39: break;
40: }
41:
42: eopen(infile)
43: char *infile;
44: { int from;
45: if ((from = open(infile, 0)) <= 0)
46: { fprintf(stderr, "pico: cannot open %s\n", infile);
47: return 0;
48: }
49: return from;
50: }
51:
52: eread(n, m, p)
53: char *m;
54: { int k;
55: if ((k=read(n, m, p)) != p)
56: { fprintf(stderr, "pico: read error..wanted %d got %d\n", p, k);
57: return 0;
58: }
59: return 1;
60: }
61:
62: ewrite(n, m, p)
63: char *m;
64: { int k;
65: if ((k=write(n, m, p)) != p)
66: { fprintf(stderr, "pico: write error..wrote %d iso %d\n", k, p);
67: return 0;
68: }
69: return 1;
70: }
71:
72: getpix(into, infile)
73: struct SRC *into;
74: char *infile;
75: {
76: fprintf(stderr, "reading %s...", into->fname);
77: if (into->incore == 0)
78: { into->pixred = (unsigned char *) Emalloc(DEF_LL*DEF_NL);
79: if (into->nchan >= 3)
80: { into->pixgrn = (unsigned char *) Emalloc(DEF_LL*DEF_NL);
81: into->pixblu = (unsigned char *) Emalloc(DEF_LL*DEF_NL);
82: }
83: into->incore = 1;
84: }
85: if (into->type == PICO || (into->type == DUMP && into->nchan == 1))
86: getfile(into);
87: else {
88: fprintf(stderr, "sorry, unsupported picture format\n");
89: return;
90: }
91: into->incore = 2;
92: fprintf(stderr, "\n");
93: }
94:
95: getfile(into)
96: struct SRC *into;
97: {
98: getwindow(into, into->pixred);
99: if (into->nchan == 1)
100: into->pixgrn = into->pixblu = into->pixred;
101: else
102: { getwindow(into, into->pixgrn);
103: getwindow(into, into->pixblu);
104: }
105: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.