|
|
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.