Thread View: comp.sources.bugs
1 messages
1 total messages
Started by Chris Lewis
Mon, 06 Jan 1992 05:07
Official Patch 1 for Hp2pbm
Author: Chris Lewis
Date: Mon, 06 Jan 1992 05:07
Date: Mon, 06 Jan 1992 05:07
1096 lines
28953 bytes
28953 bytes
Archive-name: hp2pbm/patch.01
Submitted-by: clewis@ferret.ocunix.on.ca (Chris Lewis)
This is official patch 01 for Hp2pbm.
Please apply it by:
cd <hp2pbm source directory>
patch -N -p < <this file>
Michael Haws, uunet!yonder!michael, did a fair amount of work
on hp2pbm, and they comprise most of the changes in this patch.
I include his description here:
| Items that still require some work include: All measurements should
| be kept in units of 1/3600 inches as opposed to dots (1/300). The HPLJII uses
| 1/3600 inches as it's unit of measure. THe HPLJII then converts this unit
| to dots (1/300) just prior to printing (see HP Technical Reference Manual).
|
| Fixed underlining is now supported correctly, floating underlining is yet
| to be added.
|
| All in all I am very pleased with hp2pbm and want to thank all involved
| for their efforts.
|
| My changes to hp2pbm include:
|
| 1. Left and right margins are now stored in units of dots and
| not columns. Column positions are affected by changes in
| HMI, while left and right margins need to be fixed positions.
|
| 2. Type of clen variable was changed from short to double so
| that it could handle fractional lengths.
|
| 3. Left edge of the logical page is defined to be 50 dots and
| is stored in LEFT_LOGICAL. Right edge of logical page is
| stored in RITE_LOGICAL. BMX must never be less than
| LEFT_LOGICAL nor greater than RITE_LOGICAL.
|
| 4. getcfn() now makes certain that the current font meets the
| latest font selection criteria.
|
| 5. Resetting text length now works correctly.
|
| 6. Resetting column now works correctly.
|
| 7. Improved method for underlining. Still needs work.
|
| 8. Added code to handle the tab character.
|
| 9. Carriage return now works properly.
|
| 10. Formfeeds now work properly.
Thank you Michael!
Further, I modified the "-r" option to permit the specification of
a pipeline. So, for example, you can use this with psroff driving
an Epson 24 pin printer thusly:
psroff -Tlj -t ... | hp2e24 '-r|pbm2e24' | <your spooler>
../hp2pbm.S -r documentation, general fixups
../Makefile added a regression test
../hpfntwrite.c Michael's changes plus -r
../hpp.c -r
../hptopbm.h Version now is V1.01
Patchwrapped: 920105232033
Index: ./hp2pbm.S
*** /tmp/PATCHold/./hp2pbm.S Sun Jan 5 23:18:30 1992
--- ./hp2pbm.S Sun Jan 5 23:18:31 1992
***************
*** 1,4 ****
! .\"Copyright 1989, 1990, 1991 by Chris Lewis 1.1 91/12/03
.TH HP2PBM %%MANEXT%% "standalone"
.SH NAME
hp2pbm,hp2hifax,hp2lofax,hp2sun,hp2e24 \- Translate HPLJ codes to to Postscript or PBM
--- 1,4 ----
! .\"Copyright 1989, 1990, 1991 by Chris Lewis 1.2 92/01/05
.TH HP2PBM %%MANEXT%% "standalone"
.SH NAME
hp2pbm,hp2hifax,hp2lofax,hp2sun,hp2e24 \- Translate HPLJ codes to to Postscript or PBM
***************
*** 14,21 ****
.SH DESCRIPTION
The
.B hp2pbm
! program (linked to any of its aliases) is a program that interprets HP PCL (Hewlett Packard Printer Control
! Language - the language of HP Laserjets)
escape code sequences.
.B Hp2pbm
can then generate an english description of the codes, translate the input
--- 14,21 ----
.SH DESCRIPTION
The
.B hp2pbm
! program (linked to any of its aliases) is a program that interprets HP PCL
! (Hewlett Packard Printer Control Language - the language of HP Laserjets)
escape code sequences.
.B Hp2pbm
can then generate an english description of the codes, translate the input
***************
*** 31,37 ****
that has been extended to optionally emit PBM.
.B Hpinterp
is a part of
! .BR psroff
This can be considered to be an ``after market'' optional upgrade
to
.BR psroff .
--- 31,37 ----
that has been extended to optionally emit PBM.
.B Hpinterp
is a part of
! .BR psroff .
This can be considered to be an ``after market'' optional upgrade
to
.BR psroff .
***************
*** 48,56 ****
.BR CorelDraw ,
including (some) built in and all downloaded fonts (except
compressed ones) and including built in and downloaded graphics and rasters.
! hp2pbm can be used to drive a number of different configurations, such as
Postscript printers, Klaus Schallhorn's
! .B faxpak
(to transmit faxes using a fax modem),
or other devices using PBM converters, such as Epson 24 pin printers,
Sun displays, 3b1 consoles etc.
--- 48,57 ----
.BR CorelDraw ,
including (some) built in and all downloaded fonts (except
compressed ones) and including built in and downloaded graphics and rasters.
! .B Hp2pbm
! can be used to drive a number of different configurations, such as
Postscript printers, Klaus Schallhorn's
! .B faxpak
(to transmit faxes using a fax modem),
or other devices using PBM converters, such as Epson 24 pin printers,
Sun displays, 3b1 consoles etc.
***************
*** 68,74 ****
option tells
.B hp2pbm
to emit Postscript to standard output.
! (Specifying both \-v and \-p at the same time is rather confusing)
Note: unless
.B hp2pbm
is used with the rest of the
--- 69,75 ----
option tells
.B hp2pbm
to emit Postscript to standard output.
! Specifying both \-v and \-p at the same time is rather confusing.
Note: unless
.B hp2pbm
is used with the rest of the
***************
*** 90,102 ****
.BI f n
where \f2n\fP is the HP PCL font ID number.
The ``FONTS'' directory should be created manually before running
! .B hp2pbm.
A file called
.BI f n .desc
is also created in the ``FONTS'' directory, which contains a description of
each character.
If the \-c option is specified, an ASCII drawing will be made
! of each glyph in the font in the
.B .desc
file.
This is very useful for examining HP PCL fonts, whether they are
--- 91,103 ----
.BI f n
where \f2n\fP is the HP PCL font ID number.
The ``FONTS'' directory should be created manually before running
! .B hp2pbm .
A file called
.BI f n .desc
is also created in the ``FONTS'' directory, which contains a description of
each character.
If the \-c option is specified, an ASCII drawing will be made
! of each glyph in the font in the
.B .desc
file.
This is very useful for examining HP PCL fonts, whether they are
***************
*** 106,115 ****
.BI \-r value
option is specified,
.B hp2pbm
! (hp2??fax and hp2e24)
! creates PBM files. The associated argument is
! the basename for the generated files.
The first page is named ``value.0'', second ``value.1'' etc.
The \-d option specifies a resolution not automatically assumed
from argv[0].
It is specified as
--- 107,130 ----
.BI \-r value
option is specified,
.B hp2pbm
! (hp2??fax and hp2e24) creates PBM files.
! The associated argument is the basename for the generated files.
The first page is named ``value.0'', second ``value.1'' etc.
+ If
+ .I value
+ has a pipe symbol (``|'') as the first character, the rest
+ .I value
+ is used as a pipeline to send each page.
+ Hence, for example, you can use
+ .B hp2pbm
+ with psroff like so:
+ .sp
+ .nf
+ .in +1i
+ psroff -Tlj -t file | hp2e24 '-r|pbm2e24' | lp
+ .in -1i
+ .fi
+ .P
The \-d option specifies a resolution not automatically assumed
from argv[0].
It is specified as
***************
*** 145,160 ****
Hewlett Packard Laserjet documentation.
Adobe Systems Postscript documentation.
.SH WARNINGS
- .B Hp2pbm's
- handling of downloaded macros is not fully tested.
- Compressed fonts (Laserjet II) and scalable built in fonts (Laserjet
- III) are not supported. Except for these limitations
- .B Hp2pbm
- should be fully compatible with Laserjet II printers.
.P
! PBM file sizes are resolution dependent (legal size or A4 paper
! at 300DPI: as much as 1.2Mb for each page).
.P
The
.B \-p
option was implemented soley as a test jig for the HP PCL output
--- 160,179 ----
Hewlett Packard Laserjet documentation.
Adobe Systems Postscript documentation.
.SH WARNINGS
.P
! .B "Hp2pbm output can be huge!"
! PBM file sizes are resolution dependent.
! At 300DPI a legal size sheet is 1.2 megabytes
! .B "PER PAGE" !
.P
+ .B "Hp2pbm's"
+ handling of downloaded macros is not fully tested.
+ Compressed fonts (Laserjet II) and scalable built in fonts (Laserjet
+ III) are not supported.
+ Except for these limitations
+ .B Hp2pbm
+ should be fully compatible with Laserjet II printers.
+ .P
The
.B \-p
option was implemented soley as a test jig for the HP PCL output
***************
*** 164,174 ****
The Postscript generating code isn't complete, but this will
probably be rectified in future.
.P
! .B Hp2ps
will not create a FONTS directory if one doesn't exist, and will die if
there isn't one.
! .PP
! .B "Hp2ps \-p"
will attempt to do something sane with selecting a font by characteristic,
but be warned, these use the printer's built-in fonts (which are likely
to be radically different from a LJ's), so the widths may be different and
--- 183,193 ----
The Postscript generating code isn't complete, but this will
probably be rectified in future.
.P
! .B Hp2pbm
will not create a FONTS directory if one doesn't exist, and will die if
there isn't one.
! .P
! .B "Hp2pbm \-p"
will attempt to do something sane with selecting a font by characteristic,
but be warned, these use the printer's built-in fonts (which are likely
to be radically different from a LJ's), so the widths may be different and
Index: ./Makefile
*** /tmp/PATCHold/./Makefile Sun Jan 5 23:18:40 1992
--- ./Makefile Sun Jan 5 23:18:41 1992
***************
*** 1,4 ****
! # Makefile for hptopbm standalone release 1.2 91/12/03
# Configuration:
--- 1,4 ----
! # Makefile for hptopbm standalone release 1.3 92/01/05
# Configuration:
***************
*** 61,74 ****
@chmod 444 $@
# components
! mem.o: mem.c
! $(CC) -c $(CFLAGS) mem.c
! hpp.o: hptopbm.h hpp.c
! $(CC) -c $(CFLAGS) hpp.c
hpfntwrite.o: hptopbm.h hpfntwrite.c
! $(CC) -c $(CFLAGS) hpfntwrite.c
pbm2e24: pbm2e24.o mem.o
$(CC) $(CFLAGS) -o pbm2e24 pbm2e24.o mem.o $(LIBFLAGS)
--- 61,74 ----
@chmod 444 $@
# components
! #mem.o: mem.c
! # $(CC) -c $(CFLAGS) mem.c
! hpp.o: hptopbm.h # hpp.c
! # $(CC) -c $(CFLAGS) hpp.c
hpfntwrite.o: hptopbm.h hpfntwrite.c
! # $(CC) -c $(CFLAGS) hpfntwrite.c
pbm2e24: pbm2e24.o mem.o
$(CC) $(CFLAGS) -o pbm2e24 pbm2e24.o mem.o $(LIBFLAGS)
***************
*** 78,88 ****
--- 78,95 ----
$(LIBFILES):
uudecode < $@.UU
+ chmod 444 $@
myuid:
echo 'main() { printf("%d%c", getuid(), 10); exit(0); }' > myuid.c
$(CC) -o myuid myuid.c
rm -f myuid.c
+
+ regression: hp2pbm
+ psroff -t -Tlj testdoc > /tmp/testdoc.lj
+ ./hp2pbm -r/tmp/new -d80,80 < /tmp/testdoc.lj
+ $(BINDIR)/hp2pbm -r/tmp/old -d80,80 < /tmp/testdoc.lj
+ ./hp2pbm '-r|pbm2e24' -d80,80 > /tmp/pipe < /tmp/testdoc.lj
install: hp2pbm myuid
test "`./myuid`" = 0 || \
Index: ./hpfntwrite.c
*** /tmp/PATCHold/./hpfntwrite.c Sun Jan 5 23:18:51 1992
--- ./hpfntwrite.c Sun Jan 5 23:18:55 1992
***************
*** 18,24 ****
#include "hptopbm.h"
#ifndef lint
! char SCCSid[] = "@(#)hpfntwrite.c: 1.1 91/12/03 00:34:42";
#endif
#ifdef FAXPAK
--- 18,24 ----
#include "hptopbm.h"
#ifndef lint
! char SCCSid[] = "@(#)hpfntwrite.c: 1.3 92/01/05 23:16:27";
#endif
#ifdef FAXPAK
***************
*** 66,72 ****
dpi,
pID,
top_dots,
- left_dots,
text_len;
double hmi,
lhite,
--- 66,71 ----
***************
*** 118,124 ****
struct CHAR_BITMAP
{
! short len, hite, clen, toffs, loffs;
uchar **CH;
};
--- 117,124 ----
struct CHAR_BITMAP
{
! short len, hite, toffs, loffs;
! double clen;
uchar **CH;
};
***************
*** 214,226 ****
lpi = 6.0;
orgenv.page_len = PAGE_LEN;
orgenv.top_margin = new_topmargin = TOP_MARGIN;
! orgenv.left_margin = LEFT_MARGIN;
! orgenv.rite_margin = RITE_MARGIN;
orgenv.text_len = PAGE_LEN - TOP_MARGIN;
orgenv.text_len -= 3;
orgenv.lhite = 50;
orgenv.top_dots = fax_head_size + orgenv.top_margin*orgenv.lhite;
- orgenv.left_dots = 47; /* dots = .157 in */
orgenv.dpi = 75; /* hp 2686a */
stackpos = 0;
try_select = 0;
--- 214,225 ----
lpi = 6.0;
orgenv.page_len = PAGE_LEN;
orgenv.top_margin = new_topmargin = TOP_MARGIN;
! orgenv.left_margin = LEFT_LOGICAL;
! orgenv.rite_margin = RITE_LOGICAL;
orgenv.text_len = PAGE_LEN - TOP_MARGIN;
orgenv.text_len -= 3;
orgenv.lhite = 50;
orgenv.top_dots = fax_head_size + orgenv.top_margin*orgenv.lhite;
orgenv.dpi = 75; /* hp 2686a */
stackpos = 0;
try_select = 0;
***************
*** 257,263 ****
{
cf = &hf->chars[i];
cf->CH = (uchar **)NULL;
! cf->len = cf->hite = cf->clen = cf->toffs = cf->loffs = 0;
}
}
hf = &hpfonts[LINEPRINTER];
--- 256,263 ----
{
cf = &hf->chars[i];
cf->CH = (uchar **)NULL;
! cf->len = cf->hite = cf->toffs = cf->loffs = 0;
! cf->clen = 0;
}
}
hf = &hpfonts[LINEPRINTER];
***************
*** 302,308 ****
xyinit()
{
BMY = orgenv.top_dots;
! BMX = 0.0;
GRAPHX = 0.0;
}
ovlyinit()
--- 302,308 ----
xyinit()
{
BMY = orgenv.top_dots;
! BMX = LEFT_LOGICAL;
GRAPHX = 0.0;
}
ovlyinit()
***************
*** 420,430 ****
end_bitmap(tname)
char *tname;
{
! int i, j, xmax;
FILE *fp;
! if ((fp = fopen(tname, "w")) == NULL)
! die("cannot create pbm file %s\n",tname);
ymax_used = yscale[max_ln-1];
#ifdef FAXPAK
--- 420,438 ----
end_bitmap(tname)
char *tname;
{
! int i, j, xmax, pipe;
FILE *fp;
! if (tname[0] == '|') {
! fp = popen(tname+1, "w");
! pipe = 1;
! } else {
! fp = fopen(tname, "w");
! pipe = 0;
! }
!
! if (fp == NULL)
! die("cannot create pbm file `%s'\n",tname);
ymax_used = yscale[max_ln-1];
#ifdef FAXPAK
***************
*** 442,448 ****
j,xmax,i,ymax_used);
(void)memset((char*)block[i], '\0', xmax);
}
! fclose(fp);
ymax_used = xmax_used = 0;
orgenv.top_margin = new_topmargin;
--- 450,460 ----
j,xmax,i,ymax_used);
(void)memset((char*)block[i], '\0', xmax);
}
! if (pipe) {
! if (pclose(fp))
! die("Pipe failure in `%s'\n", tname);
! } else
! fclose(fp);
ymax_used = xmax_used = 0;
orgenv.top_margin = new_topmargin;
***************
*** 458,463 ****
--- 470,477 ----
{
struct HPFONT *hpf;
+ if (try_select)
+ best_match();
if (curenv->cur_fnt < 0 || curenv->cur_fnt >= MAX_FONT)
die("don't know font %d\n",curenv->cur_fnt);
hpf = &hpfonts[curenv->cur_fnt];
***************
*** 492,500 ****
}
lr_default()
{
! curenv->left_margin = LEFT_MARGIN;
! curenv->left_dots = 47;
! curenv->rite_margin = RITE_MARGIN;
}
hmi_default()
{
--- 506,513 ----
}
lr_default()
{
! curenv->left_margin = LEFT_LOGICAL;
! curenv->rite_margin = RITE_LOGICAL;
}
hmi_default()
{
***************
*** 526,532 ****
if (cptr->CH)
free((char*)cptr->CH);
cptr->CH = (uchar **)NULL;
! cptr->len = cptr->hite = cptr->clen = cptr->toffs = cptr->loffs = 0;
}
clear1font(fptr)
struct HPFONT *fptr;
--- 539,546 ----
if (cptr->CH)
free((char*)cptr->CH);
cptr->CH = (uchar **)NULL;
! cptr->len = cptr->hite = cptr->toffs = cptr->loffs = 0;
! cptr->clen = 0;
}
clear1font(fptr)
struct HPFONT *fptr;
***************
*** 702,708 ****
rs_tlen(n)
double n;
{
! if (n && (n <= (curenv->page_len - curenv->top_margin)))
curenv->text_len = (int)n;
else if (!n)
tlen_default();
--- 716,722 ----
rs_tlen(n)
double n;
{
! if (n && (n * curenv->lhite <= (PAGE_LEN*50) - curenv->top_dots - 150))
curenv->text_len = (int)n;
else if (!n)
tlen_default();
***************
*** 711,720 ****
double n;
{
cfn = getcfn();
! if (n < curenv->rite_margin)
{
! curenv->left_margin = (int)n;
! curenv->left_dots = curenv->left_margin * cfn->space_len;
}
}
rs_mright(n)
--- 725,735 ----
double n;
{
cfn = getcfn();
! if (LEFT_LOGICAL + (n * cfn->space_len) < curenv->rite_margin)
{
! curenv->left_margin = n * cfn->space_len + LEFT_LOGICAL;
! if (BMX < curenv->left_margin)
! BMX = curenv->left_margin;
}
}
rs_mright(n)
***************
*** 728,739 ****
{
cfn = getcfn();
if (relative())
! BMX += n*cfn->space_len;
! else if (!(int)n)
! BMX = curenv->left_dots;
! else BMX = n*cfn->space_len;
! BMX = max(0.0, BMX);
! BMX = min(BMX, (double)((RITE_MARGIN-1)*30)); /* using 10cpi for max */
}
rs_row(n)
double n;
--- 743,752 ----
{
cfn = getcfn();
if (relative())
! BMX = ((int)(BMX * 12) + (int)(n*cfn->space_len*12)) / 12.0;
! else BMX = LEFT_LOGICAL + n*cfn->space_len;
! BMX = max(LEFT_LOGICAL,BMX);
! BMX = min(BMX, RITE_LOGICAL);
}
rs_row(n)
double n;
***************
*** 744,750 ****
{
curenv->top_margin = new_topmargin;
curenv->top_dots = fax_head_size + curenv->top_margin*curenv->lhite;
! BMY = (double)curenv->top_dots * curenv->lhite;
return;
}
if (relative())
--- 757,763 ----
{
curenv->top_margin = new_topmargin;
curenv->top_dots = fax_head_size + curenv->top_margin*curenv->lhite;
! BMY = (double)curenv->top_dots;
return;
}
if (relative())
***************
*** 757,763 ****
--- 770,779 ----
return;
}
else if (BMY < 0)
+ /*
BMY = curenv->top_dots * curenv->lhite;
+ */
+ BMY = curenv->top_dots;
}
else
BMY = curenv->top_dots + n * curenv->lhite;
***************
*** 811,822 ****
double x;
{
if (relative())
! BMX += x;
else BMX = x;
! BMX = max(0.0, BMX);
/* max == rightmost legal pixel */
! /* would be pixel 29 if RIGHT_MARGIN == 0 */
! BMX = min(BMX, (double)((1+RITE_MARGIN)*30)-1);
}
rs_Y(y,decipt)
double y;
--- 827,837 ----
double x;
{
if (relative())
! BMX = ((int)(BMX * 12) + (int)(x * 12)) / 12.0;
else BMX = x;
! BMX = max(LEFT_LOGICAL, BMX);
/* max == rightmost legal pixel */
! BMX = min(BMX, RITE_LOGICAL);
}
rs_Y(y,decipt)
double y;
***************
*** 836,853 ****
int set;
{
lastspec.symset = set;
}
rs_spacing(n)
int n;
{
- cfn = getcfn();
- cfn->prop_spaced = n;
- if (cfn->real_spaced)
- {
- cfn->space_len = cfn->real_space_len;
- curenv->hmi = cfn->real_space_len;
- }
lastspec.prop_spaced = n;
}
rs_pitch(n)
double n;
--- 851,863 ----
int set;
{
lastspec.symset = set;
+ try_select = 1;
}
rs_spacing(n)
int n;
{
lastspec.prop_spaced = n;
+ try_select = 1;
}
rs_pitch(n)
double n;
***************
*** 893,899 ****
rs_ul(n)
double n;
{
! curenv->underline = (int)n;
}
rs_thru(n)
double n;
--- 903,914 ----
rs_ul(n)
double n;
{
! curenv->underline = 1; /* can't handle floating yet */
! }
! rs_ul_off(n)
! double n;
! {
! curenv->underline = 0;
}
rs_thru(n)
double n;
***************
*** 1052,1059 ****
cbm->len = width/8 + 1;
else cbm->len = width/8;
cbm->hite = hite;
! if ((cbm->clen = delta/4) == 0)
! cbm->clen = 8*cbm->len; /* yes, I do have some strange fonts */
if (!cf->prop_spaced && c == 'x' && (!cf->chars[' '].clen))
cf->space_len = cbm->clen;
--- 1067,1075 ----
cbm->len = width/8 + 1;
else cbm->len = width/8;
cbm->hite = hite;
! cbm->clen = delta/4.0;
! if (cbm->clen == 0)
! cbm->clen = 8.0*cbm->len; /* yes, I do have some strange fonts */
if (!cf->prop_spaced && c == 'x' && (!cf->chars[' '].clen))
cf->space_len = cbm->clen;
***************
*** 1228,1235 ****
--- 1244,1255 ----
if (k < 0 || k >= MAX_PAT)
k = SOLID;
+ /*
bmx = (int)(BMX + .5);
bmy = (int)(BMY + .5);
+ */
+ bmx = BMX;
+ bmy = BMY;
hlen = (int)(curenv->Hlen + .5);
vlen = (int)(curenv->Vlen + .5);
***************
*** 1265,1271 ****
int c;
{
struct CHAR_BITMAP *cbm, *ubm;
! int i, j, k, curx, cury, localy, clen, before;
if (see_thru)
return;
--- 1285,1292 ----
int c;
{
struct CHAR_BITMAP *cbm, *ubm;
! int i, j, k, curx, cury, localy, before,startx,endx,curcol,newcol;
! double clen;
if (see_thru)
return;
***************
*** 1275,1282 ****
switch(c)
{
case 0x0a: rs_row(1.0); return;
! case 0x0d: rs_col((double)curenv->left_margin); return;
case 0x0e: setshift(SECONDARY); return;
case 0x0f: setshift(PRIMARY); return;
}
--- 1296,1308 ----
switch(c)
{
+ case 0x09: curcol = (BMX - curenv->left_margin) / cfn->space_len;
+ newcol = ((curcol + 8) / 8) * 8.0;
+ rs_X((double)curenv->left_margin +
+ newcol * cfn->space_len);
+ return;
case 0x0a: rs_row(1.0); return;
! case 0x0d: rs_X((double)curenv->left_margin); return;
case 0x0e: setshift(SECONDARY); return;
case 0x0f: setshift(PRIMARY); return;
}
***************
*** 1293,1300 ****
if ((!cbm->len) && c != ' ' && c != '\b')
return;
! bmx = (int)(BMX + .5);
! bmy = (int)(BMY + .5);
if (bmx + clen + cbm->loffs >= max_col)
return;
cury = bmy - cbm->toffs;
--- 1319,1328 ----
if ((!cbm->len) && c != ' ' && c != '\b')
return;
! bmx = (int)BMX; /* positions should be truncated not rounded */
! bmy = (int)BMY;
! startx = bmx;
!
if (bmx + clen + cbm->loffs >= max_col)
return;
cury = bmy - cbm->toffs;
***************
*** 1319,1325 ****
if (c > ' ')
{
! BMX += (double)clen;
ymax_used = max(ymax_used,yscale[cury + cbm->hite]);
xmax_used = max(xmax_used,xscale[curx]);
}
--- 1347,1353 ----
if (c > ' ')
{
! BMX = ((int)(BMX * 12) + (int)(clen * 12)) / 12.0;
ymax_used = max(ymax_used,yscale[cury + cbm->hite]);
xmax_used = max(xmax_used,xscale[curx]);
}
***************
*** 1326,1350 ****
else
{
if (c != '\b')
! BMX += (double)clen;
! else BMX -= (double)clen;
xmax_used = max(xmax_used,xscale[bmx]);
}
if (curenv->underline)
{
! int after = curx;
!
! ubm = &cfn->chars['_'];
! for (i=0; i<cbm->hite; i++)
{
! curx = before;
! localy = yscale[cury+i];
!
! for (j=0; curx<after; )
! for (k=0; k<8 && curx<after; k++,curx++)
! if (ubm->CH[i][j] & bit[k])
! setpix(localy,xscale[curx]);
}
}
dotted = TRUE;
--- 1354,1373 ----
else
{
if (c != '\b')
! BMX = ((int)(BMX * 12) + (int)(clen * 12)) / 12.0;
! else BMX = ((int)(BMX * 12) - (int)(clen * 12)) / 12.0;
xmax_used = max(xmax_used,xscale[bmx]);
}
if (curenv->underline)
{
! endx = BMX;
! for (i = 5; i < 8 ; i++) /* fixed underlining */
{
! curx = startx;
! localy = yscale[bmy+i];
! for (j=0; curx<endx ; curx++)
! setpix(localy,xscale[curx]);
}
}
dotted = TRUE;
Index: ./hpp.c
*** /tmp/PATCHold/./hpp.c Sun Jan 5 23:19:27 1992
--- ./hpp.c Sun Jan 5 23:19:33 1992
***************
*** 21,27 ****
#ifndef lint
static char SCCSID[] =
! "@(#)hpp.c 1.2 91/12/04 04:03:57";
#endif
#include "hptopbm.h"
--- 21,27 ----
#ifndef lint
static char SCCSID[] =
! "@(#)hpp.c 1.4 92/01/05 23:16:48";
#endif
#include "hptopbm.h"
***************
*** 157,163 ****
int rs_lpi(), rs_plen(), rs_mtop(),
create_fnthdr(), rs_dpi(), rs_graphxy(),
rs_pitch(), rs_tlen(), rs_mleft(), rs_mright(),
! rs_vmi(), rs_row(), rs_col(), rs_ul(), rs_thru(),
rs_hmi(), rs_lterm(), rs_setpitch(),
rs_fc_ctl(), rs_stack(), rs_hsize(), rs_hdsize(),
rs_vsize(), rs_vdsize(), rs_pid(), rs_prnpat();
--- 157,163 ----
int rs_lpi(), rs_plen(), rs_mtop(),
create_fnthdr(), rs_dpi(), rs_graphxy(),
rs_pitch(), rs_tlen(), rs_mleft(), rs_mright(),
! rs_vmi(), rs_row(), rs_col(), rs_ul(), rs_ul_off(), rs_thru(),
rs_hmi(), rs_lterm(), rs_setpitch(),
rs_fc_ctl(), rs_stack(), rs_hsize(), rs_hdsize(),
rs_vsize(), rs_vdsize(), rs_pid(), rs_prnpat();
***************
*** 201,207 ****
{"&aH", "Move to Column (Decipoints)",NULL,movedx },
{"&aV", "Move to Row (Decipoints)",NULL,movedy },
{"&dD", "Underline on", NULL, NULL, rs_ul },
! {"&d@", "Underline off", NULL, NULL, rs_ul },
{"&pX", "Transparent Print", NULL, NULL, rs_thru },
{"&lL", "Perf Skip", pscont },
{"&kH", "HMI", NULL, NULL, rs_hmi },
--- 201,207 ----
{"&aH", "Move to Column (Decipoints)",NULL,movedx },
{"&aV", "Move to Row (Decipoints)",NULL,movedy },
{"&dD", "Underline on", NULL, NULL, rs_ul },
! {"&d@", "Underline off", NULL, NULL, rs_ul_off },
{"&pX", "Transparent Print", NULL, NULL, rs_thru },
{"&lL", "Perf Skip", pscont },
{"&kH", "HMI", NULL, NULL, rs_hmi },
***************
*** 827,834 ****
if (c == '\n')
movetype = RELATIVE;
! if (c == '\f')
pbmeject(TRUE);
else prt_hpchr(c);
movetype = ABSOLUTE;
}
--- 827,836 ----
if (c == '\n')
movetype = RELATIVE;
! if (c == '\f') {
pbmeject(TRUE);
+ rs_row(0.0);
+ }
else prt_hpchr(c);
movetype = ABSOLUTE;
}
***************
*** 841,846 ****
--- 843,850 ----
movex(num)
double num; {
curX = num;
+ if (movetype == ABSOLUTE)
+ curX += LEFT_LOGICAL;
if (rast)
rs_X(curX);
if (genps)
***************
*** 859,864 ****
--- 863,870 ----
movedx(num)
double num; {
curX = num * 300.0 / 720.0;
+ if (movetype == ABSOLUTE)
+ curX += LEFT_LOGICAL;
if (rast)
rs_X(curX);
if (genps)
***************
*** 1005,1011 ****
int inc; {
int (*old_func)();
! sprintf(pbmtname,"%s.%d",pbmname,pbmpage);
pbmpage += inc;
if (have_auto_macro > -1) {
old_func = getchar_func;
--- 1011,1020 ----
int inc; {
int (*old_func)();
! if (pbmname[0] == '|')
! strcpy(pbmtname, pbmname);
! else
! sprintf(pbmtname,"%s.%d",pbmname,pbmpage);
pbmpage += inc;
if (have_auto_macro > -1) {
old_func = getchar_func;
Index: ./hptopbm.h
*** /tmp/PATCHold/./hptopbm.h Sun Jan 5 23:20:12 1992
--- ./hptopbm.h Sun Jan 5 23:20:19 1992
***************
*** 16,25 ****
Canada K0A 1T0
(613) 832-0541
! Function: Header file for hp2pbm. 1.1 91/12/03 00:34:41
*/
! #define VERSION "hp2pbm V1.00"
#include <stdio.h>
#include <ctype.h>
--- 16,25 ----
Canada K0A 1T0
(613) 832-0541
! Function: Header file for hp2pbm. 1.3 92/01/05 23:17:02
*/
! #define VERSION "hp2pbm V1.01"
#include <stdio.h>
#include <ctype.h>
***************
*** 51,56 ****
--- 51,57 ----
#define TOP_MARGIN 3 /* half inch, 300/6lpi = 3 lines */
#define LEFT_MARGIN 0 /* char column pos, not dots */
+ #define LEFT_LOGICAL 50
/* CONFIG: if !A4, define your default paper size (A4/LETTER are best for fax) */
#if (!A4) && (!LETTER) && (!LEGAL) && (!B5)
***************
*** 60,80 ****
--- 61,85 ----
#if LETTER
#define PAGE_LEN 66
#define RITE_MARGIN 80
+ #define RITE_LOGICAL LEFT_LOGICAL+2400
#endif
#if A4
#define PAGE_LEN 70
#define RITE_MARGIN 77
+ #define RITE_LOGICAL LEFT_LOGICAL+2338
#endif
#if LEGAL
#define PAGE_LEN 84
#define RITE_MARGIN 80
+ #define RITE_LOGICAL LEFT_LOGICAL+2400
#endif
#if B5
#define PAGE_LEN 60
#define RITE_MARGIN 66
+ #define RITE_LOGICAL LEFT_LOGICAL+2400 /* dont know about B5's */
#endif
#define PRIMARY 1
--
Chris Lewis; clewis@ferret.ocunix.on.ca; Phone: Canada 613 832-0541
Psroff 3.0 info: psroff-request@ferret.ocunix.on.ca
Moderator of the ferret list: ferret-request@ferret.ocunix.on.ca
**** NEVER let something mechanical know you're in a hurry. ****
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads