DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T p

⟦7de49bd5e⟧ TextFile

    Length: 2420 (0x974)
    Types: TextFile
    Names: »pbmtofax.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« 
        └─⟦de7628f85⟧ 
            └─⟦this⟧ »isode-6.0/others/quipu/photo/pbmtofax.c« 

TextFile

/* pbmtofax.c - pbm to FAX filter */

#ifndef	lint
static char *rcsid = "$Header: /f/osi/others/quipu/photo/RCS/pbmtofax.c,v 7.0 89/11/23 22:01:46 mrose Rel $";
#endif

/* 
 * $Header: /f/osi/others/quipu/photo/RCS/pbmtofax.c,v 7.0 89/11/23 22:01:46 mrose Rel $
 *
 *
 * $Log:	pbmtofax.c,v $
 * Revision 7.0  89/11/23  22:01:46  mrose
 * Release 6.0
 * 
 */

/*
 *				  NOTICE
 *
 *    Acquisition, use, and distribution of this module and related
 *    materials are subject to the restrictions of a license agreement.
 *    Consult the Preface in the User's Manual for the full terms of
 *    this agreement.
 *
 */


#include <stdio.h>
#include "quipu/photo.h"
#include "pbm/pbm.h"

/* \f

   DATA */

int	PIC_LINESIZE, STOP, NUMLINES;

extern	int	optlen;


char   *encode_t4 ();


char   *malloc ();

/* \f

   MAIN */

/* ARGSUSED */

main (argc, argv, envp)
int	argc;
char  **argv,
      **envp;
{
    int	    cols,
	    format,
	    rows,
	    skip;
    char   *cp,
	   *data,
	   *file,
	   *optbuf;
    bit	    black;
    FILE   *fp;
    
    black = PBM_BLACK;

    file = NULL, fp = stdin;
    for (argv++; cp = *argv; argv++)
	if (*cp == '-') {
	    if (cp[1] == NULL)
		goto usage;

	    if (strncmp (cp, "-reversebits", strlen (cp)) == 0) {
		black = PBM_WHITE;
		continue;
	    }
	    goto usage;
	}
	else
	    if (file) {
usage: ;
		fprintf (stderr, "usage: pbmtofax [file]\n");
		exit (1);
	    }
	    else
		if ((fp = pm_openr (file = cp)) == NULL)
		    perror (file), exit (1);

    {
	int	bitcount;
	register int    i,
			j;
	unsigned char *byteP;
	bit    *bitrow;
	register bit *bP;

	pbm_readpbminit (fp, &cols, &rows, &format);
	bitrow = pbm_allocrow (cols);

	data = malloc ((unsigned) (cols * rows));
	byteP = (unsigned char *) data;

	for (i = rows; i-- > 0; ) {
	    pbm_readpbmrow (fp, bP = bitrow, cols, format);
	    *byteP = NULL, bitcount = 7;

	    for (j = cols; j-- > 0; ) {
		unsigned char mask = 1 << bitcount;

		if (*bP++ == black)
		    *byteP |= mask;
		else
		    *byteP &= ~mask;
		if (--bitcount < 0)
		    *++byteP = NULL, bitcount = 7;
	    }
	    if (bitcount != 7)
		byteP++;
	}

	pm_close (fp);
    }
    
    STOP = (PIC_LINESIZE = cols) + 1;
    NUMLINES = rows;
    if ((skip = 8 - (PIC_LINESIZE % 8)) == 8)
	skip = 0;

    optbuf = encode_t4 (1, data, skip);
    *(optbuf + optlen) = NULL;

    (void) fwrite (optbuf, optlen + 1, sizeof *optbuf, stdout);

    exit (0);
}