|
|
1.1 root 1: /* pbmtofax.c - pbm to FAX filter */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/others/quipu/photo/RCS/pbmtofax.c,v 7.1 90/07/09 14:40:29 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/others/quipu/photo/RCS/pbmtofax.c,v 7.1 90/07/09 14:40:29 mrose Exp $
9: *
10: *
11: * $Log: pbmtofax.c,v $
12: * Revision 7.1 90/07/09 14:40:29 mrose
13: * sync
14: *
15: * Revision 7.0 89/11/23 22:01:46 mrose
16: * Release 6.0
17: *
18: */
19:
20: /*
21: * NOTICE
22: *
23: * Acquisition, use, and distribution of this module and related
24: * materials are subject to the restrictions of a license agreement.
25: * Consult the Preface in the User's Manual for the full terms of
26: * this agreement.
27: *
28: */
29:
30:
31: #include <stdio.h>
32: #include "quipu/photo.h"
33: #include "pbm/pbm.h"
34:
35: /* DATA */
36:
37: int PIC_LINESIZE, STOP, NUMLINES;
38:
39: extern int optlen;
40:
41:
42: char *encode_t4 ();
43:
44:
45: char *malloc ();
46:
47: /* MAIN */
48:
49: /* ARGSUSED */
50:
51: main (argc, argv, envp)
52: int argc;
53: char **argv,
54: **envp;
55: {
56: int cols,
57: format,
58: rows,
59: skip;
60: char *cp,
61: *data,
62: *file,
63: *optbuf;
64: bit black;
65: FILE *fp;
66:
67: black = PBM_BLACK;
68:
69: file = NULL, fp = stdin;
70: for (argv++; cp = *argv; argv++)
71: if (*cp == '-') {
72: if (cp[1] == NULL)
73: goto usage;
74:
75: if (strncmp (cp, "-reversebits", strlen (cp)) == 0) {
76: black = PBM_WHITE;
77: continue;
78: }
79: goto usage;
80: }
81: else
82: if (file) {
83: usage: ;
84: fprintf (stderr, "usage: pbmtofax [file]\n");
85: exit (1);
86: }
87: else
88: if ((fp = pm_openr (file = cp)) == NULL)
89: perror (file), exit (1);
90:
91: {
92: int bitcount;
93: register int i,
94: j;
95: unsigned char *byteP;
96: bit *bitrow;
97: register bit *bP;
98:
99: pbm_readpbminit (fp, &cols, &rows, &format);
100: bitrow = pbm_allocrow (cols);
101:
102: data = malloc ((unsigned) (cols * rows));
103: byteP = (unsigned char *) data;
104:
105: for (i = rows; i-- > 0; ) {
106: pbm_readpbmrow (fp, bP = bitrow, cols, format);
107: *byteP = NULL, bitcount = 7;
108:
109: for (j = cols; j-- > 0; ) {
110: unsigned char mask = 1 << bitcount;
111:
112: if (*bP++ == black)
113: *byteP |= mask;
114: else
115: *byteP &= ~mask;
116: if (--bitcount < 0)
117: *++byteP = NULL, bitcount = 7;
118: }
119: if (bitcount != 7)
120: byteP++;
121: }
122:
123: pm_close (fp);
124: }
125:
126: STOP = (PIC_LINESIZE = cols) + 1;
127: NUMLINES = rows;
128: if ((skip = 8 - (PIC_LINESIZE % 8)) == 8)
129: skip = 0;
130:
131: optbuf = encode_t4 (4, data, skip);
132: *(optbuf + optlen) = NULL;
133:
134: (void) fwrite (optbuf, optlen + 1, sizeof *optbuf, stdout);
135:
136: exit (0);
137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.