|
|
1.1 root 1: /* faxtopbm.c - FAX to pbm filter */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/others/quipu/photo/RCS/faxtopbm.c,v 7.0 89/11/23 22:01:41 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/others/quipu/photo/RCS/faxtopbm.c,v 7.0 89/11/23 22:01:41 mrose Rel $
9: *
10: *
11: * $Log: faxtopbm.c,v $
12: * Revision 7.0 89/11/23 22:01:41 mrose
13: * Release 6.0
14: *
15: */
16:
17: /*
18: * NOTICE
19: *
20: * Acquisition, use, and distribution of this module and related
21: * materials are subject to the restrictions of a license agreement.
22: * Consult the Preface in the User's Manual for the full terms of
23: * this agreement.
24: *
25: */
26:
27:
28: #include <stdio.h>
29: #include "psap.h"
30: #include "pbm/pbm.h"
31:
32: /* */
33:
34: static int passno;
35:
36: static bit black, white;
37:
38: /* MAIN */
39:
40: /* ARGSUSED */
41:
42: main (argc, argv, envp)
43: int argc;
44: char **argv,
45: **envp;
46: {
47: char *cp,
48: *file;
49: FILE *fp;
50: PE pe;
51: PS ps;
52:
53: black = PBM_BLACK, white = PBM_WHITE;
54:
55: file = NULLCP, fp = stdin;
56: for (argv++; cp = *argv; argv++)
57: if (*cp == '-') {
58: if (cp[1] == NULL)
59: goto usage;
60:
61: if (strncmp (cp, "-reversebits", strlen (cp)) == 0) {
62: black = PBM_WHITE, white = PBM_BLACK;
63: continue;
64: }
65: goto usage;
66: }
67: else
68: if (file) {
69: usage: ;
70: fprintf (stderr, "usage: faxtopbm [file]\n"), exit (1);
71: }
72: else
73: if ((fp = fopen (file = cp, "r")) == NULL)
74: perror (file), exit (1);
75:
76: if ((ps = ps_alloc (std_open)) == NULLPS)
77: fprintf (stderr, "ps_alloc: you lose\n"), exit (1);
78: if (std_setup (ps, fp) == NOTOK)
79: ps_die (ps, "std_setup");
80: if ((pe = ps2pe (ps)) == NULLPE)
81: ps_die (ps, "ps2pe");
82: if (pe_pullup (pe) == NOTOK)
83: pe_die (pe, "pe_pullup");
84: if (prim2bit (pe) == NULLPE)
85: pe_die (pe, "prim2bit");
86:
87: for (passno = 1; passno < 3; passno++)
88: if (decode_t4 (pe -> pe_prim, file, ps_get_abs (pe)) == NOTOK)
89: fprintf (stderr, "\n"), exit (1);
90:
91: pe_free (pe);
92: ps_free (ps);
93:
94: exit (0);
95: }
96:
97: /* ERRORS */
98:
99: static ps_die (ps, s)
100: register PS ps;
101: register char *s;
102: {
103: fprintf (stderr, "%s: %s\n", s, ps_error (ps -> ps_errno));
104: exit (1);
105: }
106:
107:
108: static pe_die (pe, s)
109: register PE pe;
110: register char *s;
111: {
112: fprintf (stderr, "%s: %s\n", s, pe_error (pe -> pe_errno));
113: exit (1);
114: }
115:
116: /* PHOTO */
117:
118: static int x, y, maxx;
119:
120: static bit *bitrow, *bP;
121:
122:
123: /* ARGSUSED */
124:
125: photo_start(name)
126: char *name;
127: {
128: if (passno == 1)
129: maxx = 0;
130: x = y = 0;
131:
132: return OK;
133: }
134:
135:
136: /* ARGSUSED */
137:
138: photo_end (name)
139: char *name;
140: {
141: if (passno == 1) {
142: register int i;
143:
144: x = maxx, y--;
145:
146: pbm_writepbminit (stdout, maxx, y);
147: bitrow = pbm_allocrow (maxx);
148:
149: for (i = maxx, bP = bitrow; i-- > 0; )
150: *bP++ = white;
151: bP = bitrow;
152: }
153: else
154: pbm_freerow (bitrow);
155:
156: return OK;
157: }
158:
159:
160: photo_black (length)
161: int length;
162: {
163: if (passno == 2) {
164: register int i;
165:
166: for (i = length; i > 0; i--)
167: *bP++ = black;
168: }
169:
170: x += length;
171:
172: return OK;
173: }
174:
175:
176: photo_white (length)
177: int length;
178: {
179: if (passno == 2)
180: bP += length;
181:
182: x += length;
183:
184: return OK;
185: }
186:
187:
188: /* ARGSUSED */
189:
190: photo_line_end (line)
191: caddr_t line;
192: {
193: if (passno == 1) {
194: if (x > maxx)
195: maxx = x;
196: }
197: else {
198: register int i;
199:
200: pbm_writepbmrow (stdout, bitrow, maxx);
201:
202: for (i = maxx, bP = bitrow; i-- > 0; )
203: *bP++ = white;
204: bP = bitrow;
205: }
206:
207: x = 0, y++;
208:
209: return OK;
210: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.