138 lines
3.6 KiB
Plaintext
138 lines
3.6 KiB
Plaintext
--- pbm/pbmto10x.c.orig Mon Oct 4 10:10:42 1993
|
|
+++ pbm/pbmto10x.c Sun Jan 10 23:48:40 1999
|
|
@@ -1,6 +1,6 @@
|
|
/* pbmto10x.c - read a portable bitmap and produce a Gemini 10X printer file
|
|
**
|
|
-** Copyright (C) 1990 by Ken Yap
|
|
+** Copyright (C) 1990, 1994 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
|
|
@@ -8,6 +8,8 @@
|
|
** copyright notice and this permission notice appear in supporting
|
|
** documentation. This software is provided "as is" without express or
|
|
** implied warranty.
|
|
+**
|
|
+** Modified to shorten stripes and eliminate blank stripes. Dec 1994.
|
|
*/
|
|
|
|
#include "pbm.h"
|
|
@@ -52,15 +54,40 @@
|
|
}
|
|
|
|
static void
|
|
+outstripe(stripe, sP, reschar)
|
|
+ register char *stripe, *sP;
|
|
+ register int reschar;
|
|
+{
|
|
+ register int ncols;
|
|
+
|
|
+ /* scan backwards, removing empty columns */
|
|
+ while (sP != stripe)
|
|
+ if (*--sP != 0)
|
|
+ {
|
|
+ ++sP;
|
|
+ break;
|
|
+ }
|
|
+ ncols = sP - stripe;
|
|
+ if (ncols > 0)
|
|
+ {
|
|
+ printf("\033%c%c%c", reschar, ncols % 256, ncols / 256);
|
|
+ fwrite(stripe, sizeof(char), ncols, stdout);
|
|
+ }
|
|
+ putchar('\n'); /* flush buffer */
|
|
+}
|
|
+
|
|
+static void
|
|
res_60x72()
|
|
{
|
|
register int i, item, npins, row, col;
|
|
bit *bitrows[LOW_RES_ROWS], *bP[LOW_RES_ROWS];
|
|
+ char *stripe, *sP;
|
|
|
|
+ stripe = malloc(cols);
|
|
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)
|
|
+ for (row = 0, sP = stripe; row < rows; row += LOW_RES_ROWS, sP = stripe)
|
|
{
|
|
if (row + LOW_RES_ROWS <= rows)
|
|
npins = LOW_RES_ROWS;
|
|
@@ -68,17 +95,18 @@
|
|
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);
|
|
+ *sP++ = item;
|
|
}
|
|
- putchar('\n');
|
|
+ outstripe(stripe, sP, 'K');
|
|
}
|
|
+ printf("\033@");
|
|
+ free(stripe);
|
|
}
|
|
|
|
static void
|
|
@@ -86,11 +114,13 @@
|
|
{
|
|
register int i, pin, item, npins, row, col;
|
|
bit *bitrows[HIGH_RES_ROWS], *bP[HIGH_RES_ROWS];
|
|
+ char *stripe, *sP;
|
|
|
|
+ stripe = malloc(cols);
|
|
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)
|
|
+ printf("\0333\001"); /* \n = 1/144" */
|
|
+ for (row = 0, sP = stripe; row < rows; row += HIGH_RES_ROWS, sP = stripe)
|
|
{
|
|
if (row + HIGH_RES_ROWS <= rows)
|
|
npins = HIGH_RES_ROWS;
|
|
@@ -98,7 +128,6 @@
|
|
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;
|
|
@@ -106,11 +135,10 @@
|
|
for (pin = i = 0; i < npins; i += 2, ++pin)
|
|
if (*(bP[i]++) == PBM_BLACK)
|
|
item |= 1 << (7 - pin);
|
|
- putchar(item);
|
|
+ *sP++ = item;
|
|
}
|
|
- putchar('\n'); /* flush buffer */
|
|
- printf("\033J\001"); /* 1/144 down */
|
|
- printf("\033L%c%c", cols % 256, cols / 256);
|
|
+ outstripe(stripe, sP, 'L');
|
|
+ sP = stripe;
|
|
for (col = 0; col < cols; ++col)
|
|
{
|
|
item = 0;
|
|
@@ -118,9 +146,11 @@
|
|
for (i = 1, pin = 0; i < npins; i += 2, ++pin)
|
|
if (*(bP[i]++) == PBM_BLACK)
|
|
item |= 1 << (7 - pin);
|
|
- putchar(item);
|
|
+ *sP++ = item;
|
|
}
|
|
- putchar('\n'); /* flush buffer */
|
|
- printf("\033J\017"); /* 15/144 down */
|
|
+ outstripe(stripe, sP, 'L');
|
|
+ printf("\033J\016"); /* 14/144 down, \n did 1/144 */
|
|
}
|
|
+ printf("\033@");
|
|
+ free(stripe);
|
|
}
|