|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 3316 (0xcf4)
Types: TextFile
Names: »faxtopbm.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/others/quipu/photo/faxtopbm.c«
/* faxtopbm.c - FAX to pbm filter */
#ifndef lint
static char *rcsid = "$Header: /f/osi/others/quipu/photo/RCS/faxtopbm.c,v 7.0 89/11/23 22:01:41 mrose Rel $";
#endif
/*
* $Header: /f/osi/others/quipu/photo/RCS/faxtopbm.c,v 7.0 89/11/23 22:01:41 mrose Rel $
*
*
* $Log: faxtopbm.c,v $
* Revision 7.0 89/11/23 22:01:41 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 "psap.h"
#include "pbm/pbm.h"
/* \f
*/
static int passno;
static bit black, white;
/* \f
MAIN */
/* ARGSUSED */
main (argc, argv, envp)
int argc;
char **argv,
**envp;
{
char *cp,
*file;
FILE *fp;
PE pe;
PS ps;
black = PBM_BLACK, white = PBM_WHITE;
file = NULLCP, 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, white = PBM_BLACK;
continue;
}
goto usage;
}
else
if (file) {
usage: ;
fprintf (stderr, "usage: faxtopbm [file]\n"), exit (1);
}
else
if ((fp = fopen (file = cp, "r")) == NULL)
perror (file), exit (1);
if ((ps = ps_alloc (std_open)) == NULLPS)
fprintf (stderr, "ps_alloc: you lose\n"), exit (1);
if (std_setup (ps, fp) == NOTOK)
ps_die (ps, "std_setup");
if ((pe = ps2pe (ps)) == NULLPE)
ps_die (ps, "ps2pe");
if (pe_pullup (pe) == NOTOK)
pe_die (pe, "pe_pullup");
if (prim2bit (pe) == NULLPE)
pe_die (pe, "prim2bit");
for (passno = 1; passno < 3; passno++)
if (decode_t4 (pe -> pe_prim, file, ps_get_abs (pe)) == NOTOK)
fprintf (stderr, "\n"), exit (1);
pe_free (pe);
ps_free (ps);
exit (0);
}
/* \f
ERRORS */
static ps_die (ps, s)
register PS ps;
register char *s;
{
fprintf (stderr, "%s: %s\n", s, ps_error (ps -> ps_errno));
exit (1);
}
static pe_die (pe, s)
register PE pe;
register char *s;
{
fprintf (stderr, "%s: %s\n", s, pe_error (pe -> pe_errno));
exit (1);
}
/* \f
PHOTO */
static int x, y, maxx;
static bit *bitrow, *bP;
/* ARGSUSED */
photo_start(name)
char *name;
{
if (passno == 1)
maxx = 0;
x = y = 0;
return OK;
}
/* ARGSUSED */
photo_end (name)
char *name;
{
if (passno == 1) {
register int i;
x = maxx, y--;
pbm_writepbminit (stdout, maxx, y);
bitrow = pbm_allocrow (maxx);
for (i = maxx, bP = bitrow; i-- > 0; )
*bP++ = white;
bP = bitrow;
}
else
pbm_freerow (bitrow);
return OK;
}
photo_black (length)
int length;
{
if (passno == 2) {
register int i;
for (i = length; i > 0; i--)
*bP++ = black;
}
x += length;
return OK;
}
photo_white (length)
int length;
{
if (passno == 2)
bP += length;
x += length;
return OK;
}
/* ARGSUSED */
photo_line_end (line)
caddr_t line;
{
if (passno == 1) {
if (x > maxx)
maxx = x;
}
else {
register int i;
pbm_writepbmrow (stdout, bitrow, maxx);
for (i = maxx, bP = bitrow; i-- > 0; )
*bP++ = white;
bP = bitrow;
}
x = 0, y++;
return OK;
}