home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
netpbma.zip
/
pbm
/
pbmto10x.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-04
|
3KB
|
127 lines
/* pbmto10x.c - read a portable bitmap and produce a Gemini 10X printer file
**
** Copyright (C) 1990 by Ken Yap
**
** Permission to use, copy, modify, and distribute this software and its
** documentation for any purpose and without fee is hereby granted, provided
** that the above copyright notice appear in all copies and that both that
** copyright notice and this permission notice appear in supporting
** documentation. This software is provided "as is" without express or
** implied warranty.
*/
#include "pbm.h"
#define LOW_RES_ROWS 8 /* printed per pass */
#define HIGH_RES_ROWS 16 /* printed per pass */
static void res_60x72 ARGS(( void ));
static void res_120x144 ARGS(( void ));
static int highres = 0;
static FILE *ifp;
static int rows, cols, format;
int
main(argc, argv)
int argc;
char *argv[];
{
pbm_init( &argc, argv );
if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'h')
{
highres = 1;
--argc;
++argv;
}
if (argc > 2)
pm_usage("[pbmfile]");
if (argc == 2)
ifp = pm_openr(argv[1]);
else
ifp = stdin;
pbm_readpbminit(ifp, &cols, &rows, &format);
if (highres)
res_120x144();
else
res_60x72();
pm_close(ifp);
exit(0);
}
static void
res_60x72()
{
register int i, item, npins, row, col;
bit *bitrows[LOW_RES_ROWS], *bP[LOW_RES_ROWS];
for (i = 0; i < LOW_RES_ROWS; ++i)
bitrows[i] = pbm_allocrow(cols);
printf("\033A\010"); /* '\n' = 8/72 */
for (row = 0; row < rows; row += LOW_RES_ROWS)
{
if (row + LOW_RES_ROWS <= rows)
npins = LOW_RES_ROWS;
else
npins = rows - row;
for (i = 0; i < npins; ++i)
pbm_readpbmrow(ifp, bP[i] = bitrows[i], cols, format);
printf("\033K%c%c", cols % 256, cols / 256);
for (col = 0; col < cols; ++col)
{
item = 0;
for (i = 0; i < npins; ++i)
if (*(bP[i]++) == PBM_BLACK)
item |= 1 << (7 - i);
putchar(item);
}
putchar('\n');
}
}
static void
res_120x144()
{
register int i, pin, item, npins, row, col;
bit *bitrows[HIGH_RES_ROWS], *bP[HIGH_RES_ROWS];
for (i = 0; i < HIGH_RES_ROWS; ++i)
bitrows[i] = pbm_allocrow(cols);
putchar('\033'); putchar('3'); putchar('\0');
for (row = 0; row < rows; row += HIGH_RES_ROWS)
{
if (row + HIGH_RES_ROWS <= rows)
npins = HIGH_RES_ROWS;
else
npins = rows - row;
for (i = 0; i < npins; ++i)
pbm_readpbmrow(ifp, bP[i] = bitrows[i], cols, format);
printf("\033L%c%c", cols % 256, cols / 256);
for (col = 0; col < cols; ++col)
{
item = 0;
/* even rows */
for (pin = i = 0; i < npins; i += 2, ++pin)
if (*(bP[i]++) == PBM_BLACK)
item |= 1 << (7 - pin);
putchar(item);
}
putchar('\n'); /* flush buffer */
printf("\033J\001"); /* 1/144 down */
printf("\033L%c%c", cols % 256, cols / 256);
for (col = 0; col < cols; ++col)
{
item = 0;
/* odd rows */
for (i = 1, pin = 0; i < npins; i += 2, ++pin)
if (*(bP[i]++) == PBM_BLACK)
item |= 1 << (7 - pin);
putchar(item);
}
putchar('\n'); /* flush buffer */
printf("\033J\017"); /* 15/144 down */
}
}