home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume26
/
psroff3.0
/
patch11
< prev
next >
Wrap
Text File
|
1993-05-02
|
82KB
|
3,103 lines
Newsgroups: comp.sources.unix
From: clewis@ferret.ocunix.on.ca (Chris Lewis)
Subject: v26i202: psroff 3.0, Patch11
Sender: unix-sources-moderator@efficacy.home.vix.com
Approved: WhoAmI@efficacy.home.vix.com
Submitted-By: clewis@ferret.ocunix.on.ca (Chris Lewis)
Posting-Number: Volume 26, Issue 202
Archive-Name: psroff3.0/patch11
Return-Path: @mail.uunet.ca:clewis@ecicrl
Received: by cognition.pa.dec.com; id AA13413; Sat, 23 May 92 23:36:10 -0700
Received: by inet-gw-2.pa.dec.com; id AA10808; Sat, 23 May 92 23:35:56 -0700
Received: from relay1.UU.NET by rodan.UU.NET with SMTP (5.61/UUNET-mail-drop) id AA06901; Sun, 24 May 92 02:35:50 -0400
Received: from mail.uunet.ca (via uunet.ca) by relay1.UU.NET with SMTP (5.61/UUNET-internet-primary) id AA19773; Sun, 24 May 92 02:35:21 -0400
Received: from ecicrl by mail.uunet.ca with UUCP id <10267>; Sun, 24 May 1992 02:35:14 -0400
Received: by ferret.ocunix.on.ca (smail2.5)id AA23512; 24 May 92 01:48:39 EDT (Sun)
Message-Id: <9205240148.AA23512@ferret.ocunix.on.ca>
Date: Sun, 24 May 1992 01:48:39 -0400
From: clewis@ferret.ocunix.on.ca (Chris Lewis)
To: comp-sources-unix@uunet.UU.NET
Archive-name: psroff3.0/patch.11
Submitted-by: clewis@ferret.ocunix.on.ca (Chris Lewis)
This is official patch 11 for Psroff 3.0.
Please apply it by:
cd <psroff source directory>
touch checker.S pkscale.c (some v's of patch need this)
patch -N -p < <this file>
The base release of psroff3.0 patches 1-4 were in
comp.sources.unix volume 24, 5-7 in volume 25 and 8-10
in volume26.
Highlights:
- Many optimization improvements of PostScript output:
- shortened font change sequences.
- can optimize horizontal line drawing (LJ3 too)
- line optimization (as opposed to "word")
- parameterize "." widths.
- parameterizable in psrofflib.S
For some metrics: perl man page: 1.5Mb unoptimized;
550K optimized; 270K with line optimization (better than
groff!!! ;-). Shortened font change stuff saves ~5%.
Period width saves ~5%. See troff2ps manual page "-g"
option for more detail. Default: same as before - set
in psrofflib.S file.
- brand new configuration checker. Try "make check".
Much simpler and more accurate. "audit" is now obsolete.
- pk2sfp can now scale Laserjet fonts. Not real well,
but usable, particularly when you're creating small
point sizes from big ones. See manual page. Eventually,
pkscale may be automatic in troff2ps, but for now, strictly
an auxiliary program.
- PostScript now supports European character set, compatible
with LJIII and "standard" troff naming conventions.
This is only available from CAT troff now. The width
tables will be fixed for ditroff in next patch. Note
"RE" function in ps.lib, and "_" prefixes in ps.fonts.
- line widths in LJ3 fixed to be consistant with box
characters and groff.
- installdit can now handle other ASCII-width-table-needing
ditroffs (eg: DWB 3.x), and installs groff tables properly.
- install permission fixing.
- Can handle font numbers > 9 (nonstandard ditroffs,
groff and DWB 3)
Files affected in this patch:
./man/pk2sfp.1.S
./man/troff2ps.1.S
./lib/lj3.fonts
./lib/lj3.lib
./lib/ps.fonts
./lib/ps.lib
./lib/psrofflib.S
./lib/lj3u.fonts
./widths/installdit.S
./utils/Makefile
./utils/pk2ps.c
./utils/pk2sfp.c
./utils/psxlate.c
./utils/showfont.S
./adapters/Makefile
./checker.S
./utils.c
./ps.c
./dit.c
./README
./troff2.c
./defs.h
./INSTALL
./Makefile
./opt.c
./pkscale.c
./pk.c
Patchwrapped: 920523223715
Index: ./man/pk2sfp.1.S
*** /tmp/PATCHold/./man/pk2sfp.1.S Sat May 23 22:29:26 1992
--- ./man/pk2sfp.1.S Sat May 23 22:29:32 1992
***************
*** 1,4 ****
! .\"Copyright 1988 by Chris Lewis 91/03/20
.TH PK2SFP %%MANEXT%% "Psroff %%T2VERSION%%"
.SH NAME
pk2sfp,pk2ditwid,pktype,pk2ps \- PK/SFP format font file handling utilities
--- 1,4 ----
! .\"Copyright 1988 by Chris Lewis 92/05/19
.TH PK2SFP %%MANEXT%% "Psroff %%T2VERSION%%"
.SH NAME
pk2sfp,pk2ditwid,pktype,pk2ps \- PK/SFP format font file handling utilities
***************
*** 108,113 ****
--- 108,119 ----
.SH "Additional options for pk2sfp"
.PP
The
+ .BI "\-o" size
+ option will scale the input fonts to the point size specified
+ by
+ .BR size .
+ .PP
+ The
.BI "\-s" na
option will set the symbol set.
Eg:
***************
*** 529,534 ****
--- 535,543 ----
.B pk2sfp "'s"
partial downloading feature (by including characters that you don't
really need - which is harmless).
+ .PP
+ The \-o option only really works well when you're going *down*
+ in size.
.SH "SEE ALSO"
troff2ps(%%MANEXT%%), \fIlj.fonts\fP,
Hewlett Packard's HP Laserjet Reference Manuals.
Index: ./man/troff2ps.1.S
*** /tmp/PATCHold/./man/troff2ps.1.S Sat May 23 22:29:54 1992
--- ./man/troff2ps.1.S Sat May 23 22:29:56 1992
***************
*** 1,4 ****
! .\"Copyright 1988 by Chris Lewis 2.14 91/11/13
.TH TROFF2PS %%MANEXT%% "Psroff %%T2VERSION%%"
.SH NAME
troff2ps, troff2lj, troff2xx \- convert troff output to Postscript, HP etc.
--- 1,4 ----
! .\"Copyright 1988 by Chris Lewis 2.16 92/05/23
.TH TROFF2PS %%MANEXT%% "Psroff %%T2VERSION%%"
.SH NAME
troff2ps, troff2lj, troff2xx \- convert troff output to Postscript, HP etc.
***************
*** 20,25 ****
--- 20,26 ----
.B "[\-M]"
.B "[\-S]"
.BI "[\-G" ss "]"
+ .BI "[\-g" opt "]"
.SH DESCRIPTION
.I Troff2ps
takes
***************
*** 166,172 ****
else, or the final directory name is different from the
.B \-T
value (ie: with ditroff).
- See psrofflib entry "ops" for an example.
The
.B \-W
option is ignored unless
--- 167,172 ----
***************
*** 173,178 ****
--- 173,219 ----
.B \-Z
is specified.
.PP
+ The
+ .B \-g
+ option is an extended version of
+ .BR \-Z .
+ .B \-g
+ consists of a string containing one or more of the following:
+ a period (``.''), or an l (lower case L) or a decimal number.
+ The decimal number must be last.
+ The period indicates that the width table entries for a period
+ are correct.
+ Many PostScript printers have slightly different metrics for
+ periods.
+ To test, run ``showfont | <your printer>'' and examine the
+ box containing the period.
+ The number second from the bottom on the left side should be 25.
+ If it is, you can supply the ``.'' option.
+ If not, you will have to regenerate all of your width tables
+ using psdtwid before you can safely specify ``.''.
+ Turning ``.'' on typically saves about 10-15% in PostScript
+ file size.
+ .PP
+ The ``l'' suboption enables line optimization.
+ This causes
+ .B troff2ps
+ to assemble whole lines worth of
+ text into single string emissions rather than breaking on
+ inter-word spaces.
+ This can save as much as 50% of the file size and transmission
+ time, as well as significantly speeding up your printer.
+ .PP
+ The decimal number tells the optimizer how big a string to
+ coalesce.
+ The default is 15.
+ Setting ``l'' implies 150.
+ .PP
+ .B \-Z
+ is equivalent to
+ .BR \-g15 .
+ .B \-g.l
+ is the highest possible optimization level.
+ .PP
Ditroff output is a special case with respect to optimization.
The optimal form for emitting characters in ditroff is something
like ``\f3c\f2CnnCnnCnnC\f3w\f1'',
***************
*** 187,192 ****
--- 228,235 ----
.PP
If
.B \-Z
+ or
+ .B \-g
is specified,
but
.B \-n
***************
*** 195,200 ****
--- 238,245 ----
with any ditroff backend.
If both
.B \-Z
+ or
+ .B \-g
and
.B \-n
are specified, ``words'' are emitted as ``\f3t\f2CCCCC\f1'', which
Index: ./lib/lj3.fonts
*** /tmp/PATCHold/./lib/lj3.fonts Sat May 23 22:30:11 1992
--- ./lib/lj3.fonts Sat May 23 22:30:12 1992
***************
*** 1,4 ****
! #@(#)lj3.fonts 2.13 92/03/03
# Laserjet III fonts file.
# See lj.fonts for more explanation.
# The first ten fonts are the built-in scaleable typefaces.
--- 1,4 ----
! #@(#)lj3.fonts 2.14 92/04/12
# Laserjet III fonts file.
# See lj.fonts for more explanation.
# The first ten fonts are the built-in scaleable typefaces.
***************
*** 53,59 ****
co N \033(7J\245\033(8U
sq N \033(7J\273\033(8U
symbol
! br N | -92 0
eq S =
ts S \133
mi S -
--- 53,59 ----
co N \033(7J\245\033(8U
sq N \033(7J\273\033(8U
symbol
! br N | -80 0
eq S =
ts S \133
mi S -
Index: ./lib/lj3.lib
*** /tmp/PATCHold/./lib/lj3.lib Sat May 23 22:30:20 1992
--- ./lib/lj3.lib Sat May 23 22:30:21 1992
***************
*** 29,41 ****
% \xAABB \022 A %hello
% Passes the following bytes: 0xAA, 0xBB, 022, and "A"
% through to the laserjet.
! %ident @(#)lj3.lib: 2.3 Copyright 92/02/10 16:48:46 Chris Lewis"
\033E\033&k2G %reset printer, set CR=CR,LF=CRLF,FF=CRFF
\033&l6d66p0o0e66f0L %letter size, portrait, no perf skip
\0339 %reset side margins
\033&a0h0V %move cursor to 0,0
\033*c6120x7920y0T\033\045 1B %set HP-GL/2 picture frame, go to HP-GL/2
! IN;WU0;PW0.36;SP1; %initialize, pen widths in MM, 0.36MM for pen 1
LA1,4,2,4; %set round line caps & joins
TR0; %set transparency mode off
IP0,11176,8636,0; %set orientation to match PCL
--- 29,41 ----
% \xAABB \022 A %hello
% Passes the following bytes: 0xAA, 0xBB, 022, and "A"
% through to the laserjet.
! %ident @(#)lj3.lib: 2.4 Copyright 92/04/12 22:01:19 Chris Lewis"
\033E\033&k2G %reset printer, set CR=CR,LF=CRLF,FF=CRFF
\033&l6d66p0o0e66f0L %letter size, portrait, no perf skip
\0339 %reset side margins
\033&a0h0V %move cursor to 0,0
\033*c6120x7920y0T\033\045 1B %set HP-GL/2 picture frame, go to HP-GL/2
! IN;WU0;PW0.2;SP1; %initialize, pen widths in MM, 0.36MM for pen 1
LA1,4,2,4; %set round line caps & joins
TR0; %set transparency mode off
IP0,11176,8636,0; %set orientation to match PCL
Index: ./lib/ps.fonts
*** /tmp/PATCHold/./lib/ps.fonts Sat May 23 22:30:29 1992
--- ./lib/ps.fonts Sat May 23 22:30:30 1992
***************
*** 1,4 ****
! #@(#)ps.fonts 2.5 91/08/29
# DO NOT CHANGE THE ORDER OF THE FIRST FOUR LINES - THESE ARE
# THE DEFAULT TROFF FONTS IN POSITIONS 1-5. IN PARTICULAR, IF
# SYMBOL ISN'T THE FOURTH ENTRY AND BRACKETFONT ISN'T THE FIFTH,
--- 1,4 ----
! #@(#)ps.fonts 2.6 92/05/21 01:56:49
# DO NOT CHANGE THE ORDER OF THE FIRST FOUR LINES - THESE ARE
# THE DEFAULT TROFF FONTS IN POSITIONS 1-5. IN PARTICULAR, IF
# SYMBOL ISN'T THE FOURTH ENTRY AND BRACKETFONT ISN'T THE FIFTH,
***************
*** 7,15 ****
# The first token is the CAT name, the second is the postscript
# name, and the third (if present) is a file to punt to the
# printer when the font is first referenced.
! R Times-Roman
! I Times-Italic
! B Times-Bold
S Symbol
S2 BracketFont
AB AvantGarde-Demi
--- 7,17 ----
# The first token is the CAT name, the second is the postscript
# name, and the third (if present) is a file to punt to the
# printer when the font is first referenced.
! # If the font name starts with an underscore, the font
! # is reencoded to permit access to the European character set.
! R _Times-Roman
! I _Times-Italic
! B _Times-Bold
S Symbol
S2 BracketFont
AB AvantGarde-Demi
***************
*** 47,137 ****
HW HaeberliWriting /usr/lib/troff2/lib/lj/hwfont
TE Tymes-Elfin /usr/lib/troff2/lib/lj/tefont
extensions
! a^ N \136
! a~ N \176
! I! N \241
! po N \243
! $J N \245
! lq N \252
! d< N \253
! l< N \254
! r> N \255
! pp N \266
! bq N \271
! rq N \272
! d> N \273
! pm N \275
! I? N \277
! ma N \305
! be N \306
! dt N \307
! .. N \310
! ri N \312
! cd N \313
! '' N \315
! og N \316
! hc N \317
! a: N \321
! o: N \322
! u: N \323
! A: N \324
! O: N \325
! U: N \326
! AE N \341
! PL N \350
! O/ N \351
OE N \352
- ae N \361
- ui N \365
- Pl N \370
- o/ N \371
oe N \372
! ss N \373
! fa S \042
! te S \044
! cm S \047
! =~ S \100
! *A S \101
! *B S \102
! *X S \103
! *E S \105
! *Y S \110
! *I S \111
! *K S \113
! *M S \115
! *N S \116
! *O S \117
! *R S \122
! *T S \124
! *Z S \132
! tf S \134
! bt S \136
! mt S \242
! Cc S \247
! Cd S \250
! Ch S \251
! Cs S \252
! <> S \253
! sd S \262
! cr S \277
! al S \300
! ax S \304
! a+ S \305
! !s S \313
! !m S \317
! ag S \320
! m. S \327
! an S \331
! lo S \332
! io S \333
! <: S \334
! u= S \335
! :> S \336
! d= S \337
! dm S \340
! L< S \341
! tm S \344
! AL S \360
! R> S \361
! r1 4 \121
! r2 4 \122
--- 49,118 ----
HW HaeberliWriting /usr/lib/troff2/lib/lj/hwfont
TE Tymes-Elfin /usr/lib/troff2/lib/lj/tefont
extensions
! r! N \241
! r? N \277
! 'A N \001
! 'a N \002
! ^A N \003
! ^a N \004
! :A N \005
! :a N \006
! `A N \007
! `a N \010
! oA N \011
! oa N \012
! ~A N \013
! ~a N \014
! ,C N \015
! ,c N \016
! 'E N \017
! 'e N \020
! ^E N \021
! ^e N \022
! :E N \023
! :e N \024
! `E N \025
! `e N \026
! 'I N \027
! 'i N \030
! ^I N \031
! ^i N \032
! :I N \033
! :i N \034
! `I N \035
! `i N \036
! ~N N \037
! ~n N \200
! 'O N \201
! 'o N \202
! ^O N \203
! ^o N \204
! :O N \205
! :o N \206
! `O N \207
! `o N \210
! ~O N \211
! ~o N \212
! vS N \213
! vs N \214
! 'U N \215
! 'u N \216
! ^U N \217
! ^u N \220
! :U N \221
! :u N \222
! `U N \223
! `u N \224
! :Y N \225
! :y N \226
! vZ N \227
! vz N \230
! /O N \351
! /o N \371
OE N \352
oe N \372
! ae N \361
! AE N \341
! Ye N \245
! .. N \310
!
Index: ./lib/ps.lib
*** /tmp/PATCHold/./lib/ps.lib Sat May 23 22:30:38 1992
--- ./lib/ps.lib Sat May 23 22:30:40 1992
***************
*** 9,18 ****
% Module: ps.lib
% Author: Chris Lewis
% Specs: Predefinitions for PostScript
! %ident @(#)ps.lib: 2.12 Copyright 92/02/13 01:44:51 Chris Lewis"
/Y { 3 1 roll dup /CurY exch def moveto show } bind def
/X { exch CurY moveto show } bind def
/hits 0 def
/misses 0 def
/pagecount 0 def
--- 9,27 ----
% Module: ps.lib
% Author: Chris Lewis
% Specs: Predefinitions for PostScript
! %ident @(#)ps.lib: 92/05/21 Copyright 92/05/21 01:56:54 Chris Lewis"
/Y { 3 1 roll dup /CurY exch def moveto show } bind def
/X { exch CurY moveto show } bind def
+ % s cx x y W -
+ /W {
+ dup % s cx x y y
+ /CurY exch def % s cx x y
+ moveto % s cx
+ 0 8#040 % s cx 0 8#040
+ 4 -1 roll % cx 0 8#040 s
+ widthshow % -
+ } bind def
/hits 0 def
/misses 0 def
/pagecount 0 def
***************
*** 76,82 ****
% pages.
%
% Trial font cache - I can't think in Polish... ;-)
! /SetFont {
/curPoints exch def
/curFont exch def
% Concatenate the curFont string with the curPoints to create
--- 85,91 ----
% pages.
%
% Trial font cache - I can't think in Polish... ;-)
! /S {
/curPoints exch def
/curFont exch def
% Concatenate the curFont string with the curPoints to create
***************
*** 110,116 ****
/metrics {
/psize 16 def
! /Times-Roman psize SetFont
/charcount exch def
/curpos 720 def
/xpos 72 def
--- 119,125 ----
/metrics {
/psize 16 def
! /Times-Roman psize S
/charcount exch def
/curpos 720 def
/xpos 72 def
***************
*** 405,411 ****
40 C.setl 0 -250 moveto 0 1000 rlineto stroke
} def
/Cru {
! 0 0 -50 -250 1000 0 setcachedevice
40 C.setl 0 -250 moveto 500 0 rlineto stroke
} def
/Crn {
--- 414,420 ----
40 C.setl 0 -250 moveto 0 1000 rlineto stroke
} def
/Cru {
! 500 0 -50 -250 1000 0 setcachedevice
40 C.setl 0 -250 moveto 500 0 rlineto stroke
} def
/Crn {
***************
*** 445,450 ****
--- 454,461 ----
} def end
/BracketFont BracketFontDict definefont pop
+ %Drawing support
+
/Ellipse {
/Yaxis exch 2 div def
/Xaxis exch 2 div def
***************
*** 487,492 ****
--- 498,547 ----
/dost{
currentlinewidth exch 6 div setlinewidth stroke setlinewidth
} bind def
+
+
+ % Font reencoding support function for European characters.
+ % Requires a leading _ on the ps.fonts files.
+ % Green book, pg 115-117
+ % encmap f1 f2 RE
+ % reencodes f2 to create f1, using map in encmap.
+ /RE {
+ findfont begin
+ currentdict dup length dict begin
+ { %forall
+ 1 index /FID ne {def} {pop pop} ifelse
+ } forall
+ /FontName exch def dup length 0 ne { %if
+ /Encoding Encoding 256 array copy def
+ 0 exch { %forall
+ dup type /nametype eq { %ifelse
+ Encoding 2 index 2 index put
+ pop 1 add
+ }{ %else
+ exch pop
+ } ifelse
+ } forall
+ } if pop
+ currentdict dup end end
+ /FontName get exch definefont pop
+ } bind def
+
+ % Standard encoding for psroff.
+ % places 32 characters starting at 0, then the rest at 128.
+ /stdencoding [ 1
+ /Aacute /aacute /Acircumflex /acircumflex /Adieresis /adieresis /Agrave /agrave
+ /Aring /aring /Atilde /atilde
+ /Ccedilla /ccedilla
+ /Eacute /eacute /Ecircumflex /ecircumflex /Edieresis /edieresis /Egrave /egrave
+ /Iacute /iacute /Icircumflex /icircumflex /Idieresis /idieresis /Igrave /igrave
+ /Ntilde
+ 128
+ /ntilde
+ /Oacute /oacute /Ocircumflex /ocircumflex /Odieresis /odieresis /Ograve /ograve
+ /Otilde /otilde
+ /Scaron /scaron /Uacute /uacute /Ucircumflex /ucircumflex /Udieresis /udieresis
+ /Ugrave /ugrave /Ydieresis /ydieresis /Zcaron /zcaron
+ ] def
% This macro is invoked by ShowPage to display the current form.
% Usually redefined to point at a form loaded by an include
Index: ./lib/psrofflib.S
*** /tmp/PATCHold/./lib/psrofflib.S Sat May 23 22:30:54 1992
--- ./lib/psrofflib.S Sat May 23 22:30:55 1992
***************
*** 1,4 ****
! # 2.25 92/02/10
# This file controls psroff, you can insert additional printer
# types here. These are eval'd *late* in processing, so that
# you can insert $copies etc.
--- 1,4 ----
! # 2.27 92/05/23
# This file controls psroff, you can insert additional printer
# types here. These are eval'd *late* in processing, so that
# you can insert $copies etc.
***************
*** 60,70 ****
# -G<sizescale> If you're driving with groff, and the sizescale
# parameter is specified in the DESC file, you
# have to supply the sizescale parameter here.
! # -Z optimizer
! # -S Use "stop" to terminate Postscript instead
! # of control-D
# -W<directory> location of CAT width tables. Defaults
# to FONTDIR/<type>/ft*
#
# lparg: how to get output to printer. Note the "-n$copies" and
# -d$ptr. The $ptr is the psroff selected physical printer
--- 60,73 ----
# -G<sizescale> If you're driving with groff, and the sizescale
# parameter is specified in the DESC file, you
# have to supply the sizescale parameter here.
! # -Z optimizer. If you are using a version of
! # DWB that needs ASCII width tables, set -G1.
! # -g[.][l]nnn Optimizer control. Leave out initially.
! # Consult troff2ps man page for more details.
# -W<directory> location of CAT width tables. Defaults
# to FONTDIR/<type>/ft*
+ # -S Use "stop" to terminate Postscript instead
+ # of control-D
#
# lparg: how to get output to printer. Note the "-n$copies" and
# -d$ptr. The $ptr is the psroff selected physical printer
Index: ./lib/lj3u.fonts
*** /tmp/PATCHold/./lib/lj3u.fonts Sat May 23 22:31:09 1992
--- ./lib/lj3u.fonts Sat May 23 22:31:10 1992
***************
*** 1,4 ****
! #@(#)lj3u.fonts 2.7 92/03/03
# Laserjet III fonts file. Shuffled for Universal as primary typeface.
# See lj.fonts for more explanation.
# The first ten fonts are the built-in scaleable typefaces.
--- 1,4 ----
! #@(#)lj3u.fonts 2.8 92/04/12
# Laserjet III fonts file. Shuffled for Universal as primary typeface.
# See lj.fonts for more explanation.
# The first ten fonts are the built-in scaleable typefaces.
***************
*** 53,59 ****
co N \033(7J\245\033(8U
sq N \033(7J\273\033(8U
symbol
! br N | -92 0
eq S =
ts S \133
mi S -
--- 53,59 ----
co N \033(7J\245\033(8U
sq N \033(7J\273\033(8U
symbol
! br N | -80 0
eq S =
ts S \133
mi S -
Index: ./widths/installdit.S
*** /tmp/PATCHold/./widths/installdit.S Sat May 23 22:31:21 1992
--- ./widths/installdit.S Sat May 23 22:31:22 1992
***************
*** 5,11 ****
# See the LICENSE file for a full description of the restrictions
# under which this software is provided.
#
! #1.7 92/02/21
MAKEDEV=%%MAKEDEV%%
if [ ! -f "$MAKEDEV" ]
then
--- 5,11 ----
# See the LICENSE file for a full description of the restrictions
# under which this software is provided.
#
! #1.8 92/04/12
MAKEDEV=%%MAKEDEV%%
if [ ! -f "$MAKEDEV" ]
then
***************
*** 96,102 ****
continue
fi
cd $dir
! list="`find . -name '[A-Z]*' -a ! -name '*.out' -print`"
if [ -n "$list" ]
then
echo "INSTALLING ditroff widths from $dir into $destdir"
--- 96,108 ----
continue
fi
cd $dir
! if [ -z "$Garg" ]
! then
! list="`find . -name '*.out' -print`"
! else
! list="`find . -name '[A-Z]*' -a ! -name '*.out' -print`"
! fi
!
if [ -n "$list" ]
then
echo "INSTALLING ditroff widths from $dir into $destdir"
Index: ./utils/Makefile
*** /tmp/PATCHold/./utils/Makefile Sat May 23 22:31:31 1992
--- ./utils/Makefile Sat May 23 22:31:32 1992
***************
*** 4,10 ****
# See the LICENSE file for a full description of the restrictions
# under which this software is provided.
#
! #2.9 91/10/17
SCRIPTS = psdtwd showfont mkenctab calcfonts catconv dodps
PROGRAMS = hpinterp psxlate pk2sfp pk2ditwid pktype dumpft pk2ps lj2ps \
asc2ps
--- 4,10 ----
# See the LICENSE file for a full description of the restrictions
# under which this software is provided.
#
! #2.11 92/05/19
SCRIPTS = psdtwd showfont mkenctab calcfonts catconv dodps
PROGRAMS = hpinterp psxlate pk2sfp pk2ditwid pktype dumpft pk2ps lj2ps \
asc2ps
***************
*** 69,76 ****
$(CC) $(CFLAGS) -o pk2ditwid pk2ditwid.o ../debug.o ../pk.o ljtab.o \
$(LIBFLAGS)
! pk2sfp: ../pk.o ../debug.o pk2sfp.o ljtab.o
! $(CC) $(CFLAGS) -o pk2sfp pk2sfp.o ../debug.o ../pk.o ljtab.o \
$(LIBFLAGS)
dumpft: dumpft.o ../cattab.o
--- 69,76 ----
$(CC) $(CFLAGS) -o pk2ditwid pk2ditwid.o ../debug.o ../pk.o ljtab.o \
$(LIBFLAGS)
! pk2sfp: ../pk.o ../debug.o pk2sfp.o ljtab.o ../pkscale.o
! $(CC) $(CFLAGS) -o pk2sfp pk2sfp.o ../debug.o ../pk.o ljtab.o ../pkscale.o \
$(LIBFLAGS)
dumpft: dumpft.o ../cattab.o
***************
*** 84,91 ****
install:
cd $(LIBDIR) ; rm -f $(SCRIPTS)
! $(IGNORESH) cp $(SCRIPTS) $(LIBDIR)
! for i in $(PROGRAMS) ; \
do \
if [ -f $(LIBDIR)/$$i ] ; \
then \
--- 84,92 ----
install:
cd $(LIBDIR) ; rm -f $(SCRIPTS)
! cp $(SCRIPTS) $(LIBDIR)
! cd $(LIBDIR) ; chmod 555 $(SCRIPTS)
! $(IGNORSH) for i in $(PROGRAMS) ; \
do \
if [ -f $(LIBDIR)/$$i ] ; \
then \
***************
*** 93,98 ****
--- 94,100 ----
cp $(LIBDIR)/$$i $(LIBDIR)/$$i.old 2> /dev/null ; \
fi ; \
cp $$i $(LIBDIR)/$$i ; \
+ chmod 555 $(LIBDIR)/$$i ; \
done
# Try to convert a vendor supplied ft into dit2catwid input
Index: ./utils/pk2ps.c
*** /tmp/PATCHold/./utils/pk2ps.c Sat May 23 22:31:41 1992
--- ./utils/pk2ps.c Sat May 23 22:31:42 1992
***************
*** 14,20 ****
#ifndef lint
static char SCCSID[] =
! "@(#)pk2ps.c 2.3 Copyright 91/10/22 03:03:11 Chris Lewis";
#endif
#include "defs.h"
#include "pk.h"
--- 14,20 ----
#ifndef lint
static char SCCSID[] =
! "@(#)pk2ps.c 2.4 Copyright 92/03/12 01:11:48 Chris Lewis";
#endif
#include "defs.h"
#include "pk.h"
***************
*** 26,31 ****
--- 26,53 ----
long highest = 0;
int fontonly = 0;
+ /* character names in standard Adobe encoding */
+ char *adobecharnames[95] =
+ { "space", "exclam", "quotedbl", "numbersign",
+ "dollar", "percent", "ampersand", "quoteright",
+ "parenleft", "parenright", "asterisk", "plus",
+ "comma", "hyphen", "period", "slash",
+ "zero", "one", "two", "three", "four", "five",
+ "six", "seven", "eight", "nine", "colon", "semicolon",
+ "less", "equal", "greater", "question",
+ "at", "A", "B", "C", "D", "E", "F", "G",
+ "H", "I", "J", "K", "L", "M", "N", "O",
+ "P", "Q", "R", "S", "T", "U", "V", "W",
+ "X", "Y", "Z", "bracketleft",
+ "backslash", "bracketright", "asciicircum", "underscore",
+ "quoteleft", "a", "b", "c", "d", "e", "f", "g",
+ "h", "i", "j", "k", "l", "m", "n", "o",
+ "p", "q", "r", "s", "t", "u", "v", "w",
+ "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde"
+ };
+
+ extern long sfp_hmi; /* pitch (default HMI) -- width of space */
+
/* Dummied out for pk.c */
needchar(a, b)
int a, b; {
***************
*** 44,52 ****
struct pkp *pk_read();
register int i, len;
int chcount;
progname = argv[0];
! while((c = getopt(argc, argv, "fD:v")) != EOF)
switch(c) {
case 'D':
#ifdef DEBUG
--- 66,78 ----
struct pkp *pk_read();
register int i, len;
int chcount;
+ int saw_space;
+ int lx, ly, ux, uy; /* character bounding box */
+ int flx, fly, fux, fuy; /* font bounding box */
+ char *fontname = NULL;
progname = argv[0];
! while((c = getopt(argc, argv, "fD:n:v")) != EOF)
switch(c) {
case 'D':
#ifdef DEBUG
***************
*** 57,62 ****
--- 83,91 ----
progname);
exit(1);
#endif
+ case 'n':
+ fontname = optarg;
+ break;
case 'v':
verbose = 1;
break;
***************
*** 71,80 ****
char *filebuf = mustmalloc(strlen(argv[optind]) + 10);
register char *cp;
- printf("%%FILE: %s\n", argv[optind]);
-
highest = 0;
cp = strrchr(argv[optind], '/');
if (cp)
--- 100,109 ----
char *filebuf = mustmalloc(strlen(argv[optind]) + 10);
register char *cp;
highest = 0;
+ saw_space = 0;
+
cp = strrchr(argv[optind], '/');
if (cp)
***************
*** 85,116 ****
if (cp)
*cp = '\0';
if (!fontonly) {
printf("/saveobj save def\n");
}
printf("10 dict dup begin\n");
printf("/FontType 3 def\n");
! printf("/FontMatrix [1 0 0 1 0 0] def\n");
! printf("/FontBBox [1.28 1.2 -0.16 -.024] def\n");
printf("/FontInfo 5 dict def\n");
printf("FontInfo begin\n");
printf(" /isFixedPitch false def\n");
printf("end\n");
printf("/Encoding 256 array def\n");
printf("0 1 255 {Encoding exch /.notdef put} for\n");
! printf("Encoding\n");
!
! p = pk_read(argv[optind]);
!
chcount = 0;
for (pc = p->pkp_chars; pc; pc = pc->pkc_next) {
! if (pc->pkc_next)
printf("dup ");
! printf("%ld /ch%ld put\n", pc->pkc_char, pc->pkc_char);
! highest = max(highest, pc->pkc_char);
chcount++;
}
if (verbose) {
fprintf(stderr, "Emitting %s, %d codes\n", filebuf, chcount);
--- 114,162 ----
if (cp)
*cp = '\0';
+ if (fontname != NULL) filebuf = fontname;
+
+ printf("%%%%BeginFont: %s\n", filebuf);
+
if (!fontonly) {
printf("/saveobj save def\n");
}
+ p = pk_read(argv[optind]);
+
+ /* allocate a new dictionary for the font description */
printf("10 dict dup begin\n");
+ /* this is a Type 3 font */
printf("/FontType 3 def\n");
! /* font translation matrix */
! printf("/FontMatrix [.001 0 0 .001 0 0] def\n");
! #ifdef NEVER
printf("/FontInfo 5 dict def\n");
printf("FontInfo begin\n");
printf(" /isFixedPitch false def\n");
printf("end\n");
+ #endif
+ /* set up the encoding array */
printf("/Encoding 256 array def\n");
printf("0 1 255 {Encoding exch /.notdef put} for\n");
! printf("Encoding");
chcount = 0;
for (pc = p->pkp_chars; pc; pc = pc->pkc_next) {
! c = pc->pkc_char;
! if (c == 32) saw_space++;
! printf ((chcount % 3) ? " " : "\n ");
! if (pc->pkc_next || !saw_space)
printf("dup ");
! if (c >= 32 && c <= 126)
! printf("%d /%s put", c, adobecharnames[c-32]);
! else printf("%d /ch%d put", c, c);
! highest = max(highest, c);
chcount++;
}
+ if (!saw_space) {
+ printf ((chcount % 3) ? " " : "\n ");
+ printf ("32 /space put\n");
+ } else putchar ('\n');
if (verbose) {
fprintf(stderr, "Emitting %s, %d codes\n", filebuf, chcount);
***************
*** 121,176 ****
else
highest = 256;
printf("/BuildChar\n");
! printf(" { 0 begin\n");
printf(" /char exch def\n");
printf(" /fontdict exch def\n");
printf(" /charname fontdict /Encoding get char get def\n");
! printf(" /charinfo fontdict /CharData get charname\n");
! printf(" get def\n");
printf(" /wx charinfo 0 get def\n");
printf(" /charbbox charinfo 1 4 getinterval def\n");
printf(" wx 0 charbbox aload pop setcachedevice\n");
printf(" charinfo 5 get charinfo 6 get true\n");
printf(" fontdict /imagemaskmatrix get\n");
printf(" dup 4 charinfo 7 get put\n");
printf(" dup 5 charinfo 8 get put\n");
printf(" charinfo 9 1 getinterval cvx\n");
printf(" imagemask\n");
printf(" end\n");
! printf("} def\n");
printf("\n");
printf("/BuildChar load 0 6 dict put\n");
! #define DOTS2UNITS(x) ((x) / ((p->pkp_npts / POINT) * 300))
! printf("/imagemaskmatrix [%.2f 0 0 -%.2f 0 0] def\n",
! 1 / DOTS2UNITS((double) 1),
! 1 / DOTS2UNITS((double) 1)
);
printf("/CharData %d dict def\n", chcount+1);
printf("CharData begin\n");
!
for (pc = p->pkp_chars; pc; pc = pc->pkc_next) {
register struct ras *r;
r = pkrast(pc);
if (!r) {
fprintf(stderr, "%0: no raster image for %02x\n",
! progname, pc->pkc_char);
continue;
}
! printf(
! " /ch%ld [ %.2f %.2f %.2f %.2f %.2f %ld %ld %.2f %.2f\n\t<",
! pc->pkc_char,
!
! DOTS2UNITS((double) pc->pkc_dx / pow2(16)), /* width */
!
! DOTS2UNITS((double) -pc->pkc_x_off), /* bblx */
! DOTS2UNITS((double) pc->pkc_y_off -
! pc->pkc_height + 1), /* bbly */
! DOTS2UNITS((double) -pc->pkc_x_off + pc->pkc_width),/* bbux */
! DOTS2UNITS((double) pc->pkc_height + pc->pkc_y_off),/* bbuy */
!
r->ras_width,
r->ras_height,
(double) pc->pkc_x_off - .5, /* shift x */
--- 167,245 ----
else
highest = 256;
+ /* define the "BuildChar" routine to generate a character */
printf("/BuildChar\n");
! /* the "0" will be filled in with a new dictionary below */
! printf("{ 0 begin\n");
! /* get the "font dictionary" parameter */
printf(" /char exch def\n");
+ /* get the "character number" parameter */
printf(" /fontdict exch def\n");
+ /* translate character number into character name from encoding */
printf(" /charname fontdict /Encoding get char get def\n");
! /* get character info array */
! printf(" /charinfo fontdict /CharData get charname get def\n");
! /* get character width from character info array */
printf(" /wx charinfo 0 get def\n");
+ /* get character bounding box from character info array */
printf(" /charbbox charinfo 1 4 getinterval def\n");
+ /* arrange to save the character in the font cache */
printf(" wx 0 charbbox aload pop setcachedevice\n");
+ /* get bit array dimensions for "imagemask".
+ * "true" means to paint where the 1-bits are */
printf(" charinfo 5 get charinfo 6 get true\n");
+ /* get image mask matrix */
printf(" fontdict /imagemaskmatrix get\n");
+ /* insert character translation info into image mask matrix */
printf(" dup 4 charinfo 7 get put\n");
printf(" dup 5 charinfo 8 get put\n");
+ /* get bitmap data for the character */
printf(" charinfo 9 1 getinterval cvx\n");
+ /* generate the character */
printf(" imagemask\n");
printf(" end\n");
! printf("} def %% BuildChar\n");
printf("\n");
+ /* replace the first element (#0) of "BuildChar"
+ * with a reference to a brand-new, empty dictionary */
printf("/BuildChar load 0 6 dict put\n");
! #define KDOTS2UNITS(x) (double) ((1000*(x)) / ((p->pkp_ds / (pow2(20) * POINT)) * 300))
! /* define the image mask matrix */
! printf("/imagemaskmatrix [%.4f 0 0 -%.4f 0 0] def\n",
! 1.0 / KDOTS2UNITS((double) 1),
! 1.0 / KDOTS2UNITS((double) 1)
);
+
+ /* define the character data (bitmaps) */
+ if (!saw_space) chcount++;
printf("/CharData %d dict def\n", chcount+1);
printf("CharData begin\n");
! flx = fly = fux = fuy = 0;
for (pc = p->pkp_chars; pc; pc = pc->pkc_next) {
register struct ras *r;
+ c = pc->pkc_char;
r = pkrast(pc);
if (!r) {
fprintf(stderr, "%0: no raster image for %02x\n",
! progname, c);
continue;
}
! lx = KDOTS2UNITS((double) -pc->pkc_x_off) + 0.5;
! ly = KDOTS2UNITS((double) pc->pkc_y_off - pc->pkc_height + 1) + 0.5;
! ux = KDOTS2UNITS((double) -pc->pkc_x_off + pc->pkc_width) + 0.5;
! uy = KDOTS2UNITS((double) pc->pkc_y_off + 1) + 0.5;
! if (lx < flx) flx = lx;
! if (ly < fly) fly = ly;
! if (ux > fux) fux = ux;
! if (uy > fuy) fuy = uy;
! if (c >= 32 && c <= 126)
! printf (" /%s ", adobecharnames[c-32]);
! else printf (" /ch%d ", c);
! printf("[ %d %d %d %d %d %ld %ld %.1f %.1f\n\t<",
! (int) (KDOTS2UNITS((double) pc->pkc_dx / pow2(16)) + 0.5),
! lx, ly, ux, uy,
r->ras_width,
r->ras_height,
(double) pc->pkc_x_off - .5, /* shift x */
***************
*** 179,198 ****
len = r->ras_height * r->ras_bline;
for (i = 0; i < len; i++) {
printf("%02x", r->ras_raster[i]);
! if (i % 30 == 29)
! putchar('\n');
}
printf(">]\n def\n");
free(r->ras_raster);
free(r);
}
! printf(" /.notdef [ .24 0 0 0 0 1 0 0 0 <>] def\n");
! printf(" end\n");
! /* Should be unique enough between Postscript runs */
! printf(" /UniqueID %ld def\n", (long) getpid() + (optind << 16));
printf("end\n");
printf("/%s exch definefont pop\n", filebuf);
/* end of font definition */
if (!fontonly) {
--- 248,279 ----
len = r->ras_height * r->ras_bline;
for (i = 0; i < len; i++) {
printf("%02x", r->ras_raster[i]);
! if (i % 30 == 29 && i < len) printf ("\n\t ");
}
printf(">]\n def\n");
free(r->ras_raster);
free(r);
}
! if (!saw_space)
! printf(" /space [ %d 0 0 0 0 1 1 0 0 <>] def\n",
! (int) (KDOTS2UNITS((double) sfp_hmi) + 0.5));
! printf(" /.notdef [ 0 0 0 0 0 1 0 0 0 <>] def\n");
! printf("end %% CharData\n");
!
! /* now that we've seen the whole font,
! * we know the font bounding box values */
! printf("/FontBBox [%d %d %d %d] def\n", flx, fly, fux, fuy);
!
! /* set the "unique ID" to a random value.
! * Adobe guarantees values from 4,000,000 to 4,999,999
! * will never be assigned to a commercial font. */
! printf("/UniqueID %ld def\n",
! 4000000 + ((long) getpid() + (optind << 16)) % 1000000);
! /* give the font its name */
printf("end\n");
printf("/%s exch definefont pop\n", filebuf);
+ printf("%%%%EndFont: %s\n", filebuf);
/* end of font definition */
if (!fontonly) {
Index: ./utils/pk2sfp.c
*** /tmp/PATCHold/./utils/pk2sfp.c Sat May 23 22:32:04 1992
--- ./utils/pk2sfp.c Sat May 23 22:32:08 1992
***************
*** 10,16 ****
#ifndef lint
static char SCCSID[] =
! "@(#)pk2sfp.c 2.4 Copyright 91/02/20 09:09:52 Chris Lewis";
#endif
#include "defs.h"
--- 10,16 ----
#ifndef lint
static char SCCSID[] =
! "@(#)pk2sfp.c 2.6 Copyright 92/05/19 23:14:44 Chris Lewis";
#endif
#include "defs.h"
***************
*** 73,78 ****
--- 73,80 ----
}
#endif
+ int outscale = 0;
+
main(argc, argv)
int argc;
char **argv; {
***************
*** 87,94 ****
progname = argv[0];
! while((c = getopt(argc, argv, "D:s:t:w:f:i:vmSpP")) != EOF) {
switch(c) {
case 'D':
#ifdef DEBUG
setdebug(optarg, "diagnostics");
--- 89,104 ----
progname = argv[0];
! while((c = getopt(argc, argv, "o:D:s:t:w:f:i:vmSpP")) != EOF) {
switch(c) {
+ case 'o':
+ outscale = atoi(optarg);
+ if (outscale <= 0) {
+ fprintf(stderr, "%s: invalid -o value: %s\n",
+ progname, optarg);
+ exit(1);
+ }
+ break;
case 'D':
#ifdef DEBUG
setdebug(optarg, "diagnostics");
***************
*** 164,169 ****
--- 174,185 ----
/* Read the PK file in-core */
pk = pk_read(buf);
+ if (outscale) {
+ struct pkp *opkp;
+ opkp = pk;
+ pk = pkscale(opkp, outscale);
+ pk_destroy(opkp);
+ }
/* Overrides */
if (symset != NOTSET)
***************
*** 267,273 ****
/* similar to strtol */
short
! cvt(p)
register char *p; {
register short ret = 0;
int base = 10;
--- 283,289 ----
/* similar to strtol */
short
! strtl(p)
register char *p; {
register short ret = 0;
int base = 10;
***************
*** 282,292 ****
} else
base = 8;
while(*p)
! ret = ret * base + ccvt(*p++);
return(ret);
}
! ccvt(c)
int c; {
if (isdigit(c))
return(c - '0');
--- 298,308 ----
} else
base = 8;
while(*p)
! ret = ret * base + cstrtl(*p++);
return(ret);
}
! cstrtl(c)
int c; {
if (isdigit(c))
return(c - '0');
***************
*** 350,357 ****
exit(1);
}
! flast->from = cvt(from);
! flast->to = cvt(to);
flast++;
} while (fgets(buffer, sizeof(buffer), f));
fclose(f);
--- 366,373 ----
exit(1);
}
! flast->from = strtl(from);
! flast->to = strtl(to);
flast++;
} while (fgets(buffer, sizeof(buffer), f));
fclose(f);
Index: ./utils/psxlate.c
*** /tmp/PATCHold/./utils/psxlate.c Sat May 23 22:32:29 1992
--- ./utils/psxlate.c Sat May 23 22:32:36 1992
***************
*** 23,29 ****
*/
#ifndef lint
static char SCCSid[] =
! "@(#)psxlate.c: 2.19 Copyright 92/01/23 14:22:16 Chris Lewis";
#endif
#ifdef ALONE
--- 23,29 ----
*/
#ifndef lint
static char SCCSid[] =
! "@(#)psxlate.c: 2.20 Copyright 92/03/12 01:11:56 Chris Lewis";
#endif
#ifdef ALONE
***************
*** 496,502 ****
p[i+mid] = pageidx[i * 2 + 1];
}
! memcpy((char *) pageidx, p, sizeof(struct pagedesc) * pagecnt);
free(p);
}
--- 496,502 ----
p[i+mid] = pageidx[i * 2 + 1];
}
! memcpy((char *) pageidx, (char *) p, sizeof(struct pagedesc) * pagecnt);
free(p);
}
***************
*** 554,560 ****
p[i] = pageidx[i - mid + 1];
p[i+1] = pageidx[end-1];
}
! memcpy((char *) pageidx, p, sizeof(struct pagedesc) * pagecnt);
free(p);
}
--- 554,560 ----
p[i] = pageidx[i - mid + 1];
p[i+1] = pageidx[end-1];
}
! memcpy((char *) pageidx, (char *) p, sizeof(struct pagedesc) * pagecnt);
free(p);
}
Index: ./utils/showfont.S
*** /tmp/PATCHold/./utils/showfont.S Sat May 23 22:33:02 1992
--- ./utils/showfont.S Sat May 23 22:33:04 1992
***************
*** 5,11 ****
# See the LICENSE file for a full description of the restrictions
# under which this software is provided.
#
! #@(#)showfont 2.2 91/02/20
# Shell script to dump postscript fonts with widths into a pretty table
# usage: showfont <fontname>
# emits postscript to display the font called <fontname> along with
--- 5,11 ----
# See the LICENSE file for a full description of the restrictions
# under which this software is provided.
#
! #@(#)showfont 2.3 92/05/21
# Shell script to dump postscript fonts with widths into a pretty table
# usage: showfont <fontname>
# emits postscript to display the font called <fontname> along with
***************
*** 24,34 ****
# the Character is displayed at 18 point.
copies=1
- if [ $# = 0 ]
- then
- echo "usage: showfont <fontname>" >&2
- exit 1
- fi
(
cat << !END!
%! PS-Adobe 1.0
--- 24,29 ----
***************
*** 49,54 ****
--- 44,52 ----
case $font in
/*)
font=`echo $font | sed -e 's/^.//'`
+ ;;
+ '')
+ font='Times-Roman'
;;
esac
cat << !ENDTHING!
Index: ./adapters/Makefile
*** /tmp/PATCHold/./adapters/Makefile Sat May 23 22:33:14 1992
--- ./adapters/Makefile Sat May 23 22:33:14 1992
***************
*** 1,4 ****
! # 2.5 91/03/19
ADAPTERS = cmn.post cmn.pre tmac.an tmac.m tmac.s tmac.e cmn.dit
MACROS = tmac.t2
--- 1,4 ----
! # 2.7 92/04/26
ADAPTERS = cmn.post cmn.pre tmac.an tmac.m tmac.s tmac.e cmn.dit
MACROS = tmac.t2
***************
*** 16,20 ****
--- 16,22 ----
install:
cd $(LIBDIR)/adapters ; rm -f $(ADAPTERS)
cp $(ADAPTERS) $(LIBDIR)/adapters
+ cd $(LIBDIR)/adapters ; chmod 444 $(ADAPTERS)
cd $(RTMACDIR) ; rm -f $(MACROS)
cp $(MACROS) $(T2DIR)
+ cd $(T2DIR) ; chmod 444 $(MACROS)
Index: ./checker.S
*** /tmp/PATCHold/./checker.S Sat May 23 22:33:21 1992
--- ./checker.S Sat May 23 22:33:23 1992
***************
*** 0 ****
--- 1,238 ----
+ trap "rm -f /tmp/$$.? ; exit 1" 0 1 2 3 15
+ echo "Automatic Psroff configuration tester. V1.2 92/04/12"
+ type=
+ header=
+ troffnames="gtroff troff otroff cattroff catroff ditroff"
+ AS=undef
+ make=make
+ perl=
+ shell=/bin/sh
+ if [ -f /usr/apollo/bin/coffdump ]
+ then
+ echo "You're an Apollo!"
+ type=apollo
+ shell=/bin/ksh
+ fi
+ if [ -f /ultrixboot ]
+ then
+ case "`uname -a`" in
+ *RISC*)
+ type=rult
+ echo "You're a RISC/Ultrix machine!"
+ ;;
+ esac
+ shell=/usr/bin/sh5
+ make=s5make
+ fi
+ if [ -r /usr/lib/font/ftR ]
+ then
+ header=/usr/lib/font/ftR
+ else
+ echo "No /usr/lib/font/ftR file: Can't check it for CAT troff HEADERSIZE."
+ either=' either'
+ fi
+ cat > /tmp/$$.c <<\!
+ #include <stdio.h>
+ #include <a.out.h>
+ main() {
+ printf("%d\n", sizeof(struct exec));
+ exit(0);
+ }
+ !
+ cc -o /tmp/$$.a /tmp/$$.c > /dev/null 2>&1
+ if [ $? = 0 -a -f /tmp/$$.a ]
+ then
+ t=`/tmp/$$.a`
+ if [ $? = 0 ]
+ then
+ aoutheader=$t
+ fi
+ fi
+ if [ -z "$aoutheader" ]
+ then
+ echo "Can't compile a.out.h test: Can't check it for CAT troff HEADERSIZE$either."
+ echo "(This test only works on V7 or BSDish machines (Ultrix, Sun etc.) anyways.)"
+ fi
+ if [ -n "$header" ]
+ then
+ case "$type" in
+ apollo)
+ set A `/usr/apollo/bin/coffdump -h $header | grep '\.data'`
+ HS=`echo "16 i $5 p q" | sed -e 's/0x0*//' | dc`
+ note=' /* Apollo cannot read own width tables - calc from coffdump */'
+ ;;
+ rult)
+ AS=define
+ HS=0
+ note=' /* ignored on Risc/Ultrix */'
+ ;;
+ *)
+ set A `ls -l $header`
+ case $5 in
+ [0-9]*)
+ v=$5
+ ;;
+ *)
+ v=$6
+ ;;
+ esac
+ HS=`expr $v - 224`
+ ;;
+ esac
+ fi
+
+ case $aoutheader.$HS in
+ [0-9]*.[0-9]*)
+ if [ $aoutheader -lt $HS ]
+ then
+ note=" /* though, might be $HS */"
+ HS=$aoutheader
+ elif [ $HS -lt $aoutheader ]
+ then
+ note=" /* remotely $aoutheader */"
+ else
+ note=" /* a.out.h and .../ftR agree */"
+ fi
+ ;;
+ .)
+ note=" Nope, can't figure out HEADERSIZE"
+ ;;
+ esac
+
+ paths=`echo $PATH | sed -e 's/:/ /g'`
+ for i in $paths
+ do
+ for j in $troffnames
+ do
+ if [ -f $i/$j ]
+ then
+ troffs="$troffs $i/$j"
+ fi
+ done
+ if [ -f $i/lpr ]
+ then
+ lpr=1
+ fi
+ if [ -f $i/lp ]
+ then
+ lp=1
+ fi
+ if [ -f $i/hostname -a -z "$uuname" ]
+ then
+ uuname=hostname
+ fi
+ if [ -f $i/uuname -a -z "$uuname" ]
+ then
+ uuname='uuname -l'
+ fi
+ if [ -f $i/uname -a -z "$uuname" ]
+ then
+ uuname='uname -n'
+ fi
+ if [ -f $i/perl -a -z "$perl" ]
+ then
+ perl=$i/perl
+ fi
+ done
+ if [ -z "$perl" ]
+ then
+ perl="Not found: Won't be able to use catconv or buildljfonts"
+ fi
+ if [ -z "$uuname" ]
+ then
+ uuname='echo <your node name>'
+ fi
+
+ echo "*** Recommended defs.h settings: ***"
+ echo
+ echo "#define HEADERSIZE $HS$note"
+ echo "#$AS ASCIIWIDTHS"
+ echo '#define NODECMD "'"$uuname"'"'
+ echo
+ echo "*** Recommended Makefile settings: ***"
+ echo
+ echo "MAKE = $make"
+ echo "SHELL = $shell"
+ echo "PERL = $perl"
+ echo
+ echo "*** psrofflib-related stuff: ***"
+ echo
+ if [ -n "$troffs" ]
+ then
+ for i in $troffs
+ do
+ echo "In order to use $i as your troff, you need to set:"
+ echo hello | $i > /dev/null 2>&1
+ ditroffokay=$?
+ echo hello | $i -t > /dev/null 2>&1
+ cattroffokay=$?
+
+ if [ $ditroffokay = 0 -a $cattroffokay != 0 ]
+ then
+ echo " troff=$i # ditroff: use -N option in t2arg"
+ ditroff=1
+ continue
+ fi
+ if [ $ditroffokay != 0 -a $cattroffokay = 0 ]
+ then
+ echo " troff=$i # is CAT troff"
+ cattroff=1
+ if echo hello | $i -F/usr/lib/font/ftXX -t > /dev/null 2>&1
+ then
+ echo " trofftype='-F%%FONTDIR%%/\$width/ftXX'"
+ elif echo hello | $i -T. -t > /dev/null 2>&1
+ then
+ echo " trofftype='-T\$width'"
+ echo " [ps: FONTDIR MUST be /usr/lib/font]"
+ else
+ echo " trofftype= # Neither -F nor -T seem to work"
+ fi
+ continue
+ fi
+ echo "Can't tell what kind of troff $i is"
+ done
+ else
+ echo "Couldn't seem to find any versions of troff out there in your PATH"
+ echo " (And I looked for $troffnames)"
+ notroff=1
+ fi
+ echo
+ if [ -n "$lpr" ]
+ then
+ echo "You have Berkeley style 'lpr'. The lparg entry will typically"
+ echo "be something like lparg=| [F |] lpr -P\$ptr -#\$copies'"
+ fi
+ if [ -n "$lp" ]
+ then
+ echo "You have System V style 'lp'. The lparg entry will typically"
+ echo "be something like lparg=| [F |] lp -n\$copies -d\$ptr'"
+ fi
+ if [ -n "$lp" -o -n "$lpr" ]
+ then
+ echo "Where 'F' is an additional filter, such as psxlate for PostScript"
+ fi
+
+ if [ -z "$lp" -a -z "$lpr" ]
+ then
+ echo "Can't find lp or lpr, so I can't make any suggestions on the lparg"
+ echo "entry."
+ fi
+
+ echo
+ echo "*** Overall automatic configurator error report) ***"
+ if [ -z "$cattroff" -a -z "$ditroff" ]
+ then
+ echo "- You con't have any kind of troff in your search path."
+ echo " Unless you can find one, you can't use psroff."
+ fi
+ if [ -n "$cattroff" -a -z "$HS" ]
+ then
+ echo "- You have CAT troff, but I couldn't figure out your HEADERSIZE."
+ echo " You should probably ask for help."
+ fi
+ if [ -z "$perl" ]
+ then
+ echo "- Couldn't find perl - just means you can't emulate ditroff in CAT troff"
+ fi
+ trap '' 0
+ exit 0
Index: ./utils.c
*** /tmp/PATCHold/./utils.c Sat May 23 22:33:32 1992
--- ./utils.c Sat May 23 22:33:34 1992
***************
*** 12,18 ****
#ifndef lint
static char SCCSid[] =
! "@(#)utils.c: 2.23 Copyright 92/01/12 03:55:40 Chris Lewis";
#endif
#ifndef HEADERSIZE
--- 12,18 ----
#ifndef lint
static char SCCSid[] =
! "@(#)utils.c: 2.24 Copyright 92/05/21 02:58:25 Chris Lewis";
#endif
#ifndef HEADERSIZE
***************
*** 410,431 ****
}
FontSel(from, to)
! char from, *to; {
#ifdef DEBUG
register int i;
#endif
register struct fonttable *p;
int intfont;
! DBP((D_SPEC, "FontSel: %c -> %s\n", from, to));
! #ifdef DIT
! if (from < (ditroff? '0' : '1') || from > '9') {
! #else
! if (from < '1' || from > '9') {
! #endif
! fprintf(stderr, "Bad arguments to FontSel: %c %s\n", from, to);
return;
}
! intfont = from - '1';
if (intfont < 0)
intfont = INTFONTS - 1;
if (strcmp(to, "S") == 0) {
--- 410,432 ----
}
FontSel(from, to)
! char *from, *to; {
#ifdef DEBUG
register int i;
#endif
register struct fonttable *p;
int intfont;
! DBP((D_SPEC, "FontSel: %s -> %s\n", from, to));
!
! intfont = atoi(from);
!
! if (intfont < (ditroff? 0 : 1) || intfont >= INTFONTS) {
! fprintf(stderr, "Bad arguments to FontSel: %s %s\n", intfont, to);
return;
}
!
! intfont -= 1;
!
if (intfont < 0)
intfont = INTFONTS - 1;
if (strcmp(to, "S") == 0) {
***************
*** 443,449 ****
break;
}
if (!p->troffName) {
! fprintf(stderr, "Could not translate font %c (%s)\n", from, to);
}
#ifdef OPT
if (p->troffName && !p->widthtable)
--- 444,450 ----
break;
}
if (!p->troffName) {
! fprintf(stderr, "Could not translate font %s (%s)\n", from, to);
}
#ifdef OPT
if (p->troffName && !p->widthtable)
Index: ./ps.c
*** /tmp/PATCHold/./ps.c Sat May 23 22:33:46 1992
--- ./ps.c Sat May 23 22:33:48 1992
***************
*** 15,21 ****
#ifndef lint
static char SCCSid[] =
! "@(#)ps.c: 2.18 Copyright 92/01/12 03:55:46 Chris Lewis";
#endif
/* ps.c will generate some additional "print" commands to cause
--- 15,21 ----
#ifndef lint
static char SCCSid[] =
! "@(#)ps.c: 2.19 Copyright 92/05/19 23:11:03 Chris Lewis";
#endif
/* ps.c will generate some additional "print" commands to cause
***************
*** 341,358 ****
}
fp->flags |= USED;
#ifdef FONTMACRO
! printf("/%s %d SetFont\n", fp->fontName, points);
#else
printf("/%s dup /curFont exch def findfont\n",
fp->fontName);
printf("%d dup /curPoints exch def scalefont setfont\n", points);
#endif
lastPoints = points;
lastFont = font;
}
}
psChar(x, y, font, points, troffChar, sequence)
int x, y;
int font, points, troffChar;
--- 341,378 ----
}
fp->flags |= USED;
+ #define NEW
+ #ifdef NEW
+ printf("%d F%d\n", points, fp - fonttable);
+ #else
#ifdef FONTMACRO
! printf("/%s %d S\n", fp->fontName, points);
#else
printf("/%s dup /curFont exch def findfont\n",
fp->fontName);
printf("%d dup /curPoints exch def scalefont setfont\n", points);
#endif
+ #endif
lastPoints = points;
lastFont = font;
}
}
+ putseq(sequence)
+ register char *sequence; {
+ putchar('(');
+ while(*sequence) {
+ if ((*sequence)&0x80)
+ printf("\\%03o", (*sequence++)&0xff);
+ else if (*sequence == '(' || *sequence == ')' ||
+ *sequence == '\\')
+ printf("\\%c", *sequence++);
+ else
+ putchar(*sequence++);
+ }
+ putchar(')');
+ }
+
psChar(x, y, font, points, troffChar, sequence)
int x, y;
int font, points, troffChar;
***************
*** 423,428 ****
--- 443,462 ----
DBP((D_BEND,"AFTER (sequence,x,y,font,points) = (%s,%d,%d,%d,%d)\n",
sequence, nx, ny, font, points));
+
+ #ifdef SPACEOPT
+ { extern int spcwidth, spccount, spcnom;
+ if (spcwidth && spcwidth != spcnom) {
+ putseq(sequence);
+ lastYPos = ny;
+ emitnums(TROFF2PSX(spcwidth) - TROFF2PSX(spcnom)); /* accurate enough? */
+ emitnums(nx);
+ emitnums(ny);
+ putnl("W");
+ return;
+ }
+ }
+ #endif
if (rp->t2b_font == D) {
emitnums(nx);
***************
*** 434,450 ****
putchar(' ');
emitnum(ny);
}
! putchar('(');
! while(*sequence) {
! if ((*sequence)&0x80)
! printf("\\%03o", (*sequence++)&0xff);
! else if (*sequence == '(' || *sequence == ')' ||
! *sequence == '\\')
! printf("\\%c", *sequence++);
! else
! putchar(*sequence++);
! }
! putchar(')');
if (lastYPos != ny) {
lastYPos = ny;
putchar('Y');
--- 468,474 ----
putchar(' ');
emitnum(ny);
}
! putseq(sequence);
if (lastYPos != ny) {
lastYPos = ny;
putchar('Y');
***************
*** 499,504 ****
--- 523,529 ----
char buffer[30];
FILE *library;
long curtime;
+ register struct fonttable *p;
currentPage = 0;
pagePending = 1;
***************
*** 537,542 ****
--- 562,575 ----
#endif
printf("usertime /btime exch def\n");
psXlate(library, "lib.ps");
+
+ for (p = fonttable; p->troffName; p++) {
+ if (p->fontName[0] == '_')
+ printf("stdencoding /%s /%s RE\n",
+ p->fontName, p->fontName+1);
+ printf("/F%d { /%s exch S } bind def\n",
+ p - fonttable, p->fontName);
+ }
doprologs();
printf("%%%%EndProlog\n");
fclose(library);
Index: ./dit.c
*** /tmp/PATCHold/./dit.c Sat May 23 22:34:04 1992
--- ./dit.c Sat May 23 22:34:06 1992
***************
*** 12,18 ****
#ifndef lint
static char SCCSid[] =
! "@(#)dit.c: Copyright 92/03/03 02:25:40 Chris Lewis";
#endif
extern struct cattab tabN[], tabS[], *extidx;
--- 12,18 ----
#ifndef lint
static char SCCSid[] =
! "@(#)dit.c: Copyright 92/05/21 02:58:07 Chris Lewis";
#endif
extern struct cattab tabN[], tabS[], *extidx;
***************
*** 151,158 ****
char special[512];
fixtab();
DBP((D_CAT, "Finished fixtab\n"));
while(1) {
! switch(cmd = skipwhite()) {
case EOF:
goto finish;
case 's':
--- 151,170 ----
char special[512];
fixtab();
DBP((D_CAT, "Finished fixtab\n"));
+ cmd = skipwhite();
+ if (cmd == 0x40) {
+ fprintf(stderr, "%s: illegal starting sequence for ditroff.\n",
+ progname);
+ fprintf(stderr, "I think this is really CAT troff output.\n");
+ fprintf(stderr, "Please double check your troff & -N settings.\n");
+ exit(1);
+ }
while(1) {
! switch(cmd) {
! default:
! fprintf(stderr, "%s: illegal command 0x%02x.\n", progname, cmd);
! break;
! /*NOTREACHED*/
case EOF:
goto finish;
case 's':
***************
*** 278,284 ****
canonflush();
#endif
/* synchronize special X & Y to current position
! (ie: so psfig will work */
specXPos = DIT2CAT(xpos);
specYPos = DIT2CAT(ypos);
--- 290,296 ----
canonflush();
#endif
/* synchronize special X & Y to current position
! (ie: so psfig will work) */
specXPos = DIT2CAT(xpos);
specYPos = DIT2CAT(ypos);
***************
*** 307,313 ****
}
sprintf(special, "F%s%s", a1, a2);
DBP((D_CAT, "FONT %s %s\n", a1, a2));
! dospecial(special);
break;
case 'r': /* specify resolution */
if (i != 4) {
--- 319,328 ----
}
sprintf(special, "F%s%s", a1, a2);
DBP((D_CAT, "FONT %s %s\n", a1, a2));
!
! if (be->befontsel)
! (*be->befontsel)(a1,a2);
!
break;
case 'r': /* specify resolution */
if (i != 4) {
***************
*** 469,474 ****
--- 484,490 ----
}
break;
}
+ cmd = skipwhite();
}
finish: ;
}
Index: ./README
*** /tmp/PATCHold/./README Sat May 23 22:34:19 1992
--- ./README Sat May 23 22:34:24 1992
***************
*** 1,4 ****
! PSROFF RELEASE 3.0 README 2.23 92/01/28
Feb 19, 1991
Chris Lewis
--- 1,4 ----
! PSROFF RELEASE 3.0 README 2.24 92/05/23
Feb 19, 1991
Chris Lewis
***************
*** 397,417 ****
special commands (eg: the .fp fakeouts) will be converted over to the FSA
mechanism.
- You may have noticed a compile flag called "OPT" which is defined in
- the distributed version of defs.h. If enabled (via -Z/W), this enables the
- optimizer. It works well with Postscript output, but not with laserjet
- unless the fonts you use are VERY good. It's enabled by default for ps.
- The optimizer does two things: it emits as many characters as it can as one
- print directive, rather than one CAT code per print. On postscript and
- HPLJ's this is a BIG win (printer execution speeds 3 or more times faster),
- and is essential with ditroff output to psdit and xtroff. The optimizer
- requires access to the CAT troff width tables (even when used with ditroff),
- and if troff2ps can't find them, it will abort.
-
Hpinterp was borrowed and converted into a general HP LJ to PBM
converter. This permits the output of psroff to be printed on
just about ANY printer. The new version of hpinterp (now called
! hp2pbm) will eventually be reintegrated back into psroff.
Psroff limitations:
- With the use of catconv and CAT troff, psroff supports:
--- 397,407 ----
special commands (eg: the .fp fakeouts) will be converted over to the FSA
mechanism.
Hpinterp was borrowed and converted into a general HP LJ to PBM
converter. This permits the output of psroff to be printed on
just about ANY printer. The new version of hpinterp (now called
! hp2pbm) will eventually be reintegrated back into psroff. Hp2pbm is
! currently available from comp.sources.misc archives.
Psroff limitations:
- With the use of catconv and CAT troff, psroff supports:
***************
*** 432,440 ****
- Psroff only supports CAT troff sizes in HPPCL (some mechanism to relax
this for HPLJIII's is easy to implement). All sizes are available in
Postscript and ditroff.
- - psroff doesn't implement "w" (word breaks in ditroff output).
- - psroff doesn't support "stipple" (I have NO idea what this is -
- apparently a Berkeleyism.)
CONTACT INFO (note that I've moved):
--- 422,427 ----
Index: ./troff2.c
*** /tmp/PATCHold/./troff2.c Sat May 23 22:34:41 1992
--- ./troff2.c Sat May 23 22:34:43 1992
***************
*** 12,18 ****
#ifndef lint
static char SCCSid[] =
! "@(#)troff2.c: 2.22 Copyright 91/10/17 11:58:25 Chris Lewis";
#endif
#define ESC 0x80
--- 12,18 ----
#ifndef lint
static char SCCSid[] =
! "@(#)troff2.c: 2.25 Copyright 92/05/21 02:58:15 Chris Lewis";
#endif
#define ESC 0x80
***************
*** 92,98 ****
extern char *realloc();
! #define OPTLIST "d:O:Y:T:VD:l:MR:P::zp:W:ZNnSG:"
/* On 386/ix 1.0.6 profiling has a bug in it that leaves
two extra longs on the stack between the stack frame and
--- 92,98 ----
extern char *realloc();
! #define OPTLIST "d:O:Y:T:VD:l:MR:P::zp:W:ZNnSG:g:"
/* On 386/ix 1.0.6 profiling has a bug in it that leaves
two extra longs on the stack between the stack frame and
***************
*** 114,119 ****
--- 114,120 ----
register int nc, c;
register int units;
register int rail, mag, tilt, half, escape, lead;
+ char *p;
extern int getopt();
extern char *optarg;
***************
*** 158,163 ****
--- 159,181 ----
case 'Z':
optimize = 1;
break;
+ case 'g':
+ optimize = 1;
+ for (p = optarg; *p; p++) {
+ if (*p == '.')
+ fixedperiodwidth = 1;
+ else if (*p == 'l') {
+ spaceopt = 1;
+ optrun = OPTSIZ - 5;
+ } else {
+ optrun = atoi(p);
+ if (optrun > OPTSIZ - 5)
+ optrun = OPTSIZ - 5;
+ break;
+ }
+ }
+ break;
+
case 'W':
widthtables = mustmalloc(strlen(optarg) + 10, "widthname");
strcpy(widthtables, optarg);
***************
*** 321,326 ****
--- 339,353 ----
}
#endif
+ c = getc(stdin);
+ if (c != 0x40) {
+ fprintf(stderr, "%s: first character 0x%02x - not CAT troff output.\n",
+ progname, c);
+ fprintf(stderr,
+ "Probably ditroff. Did you forget -N in command line or psrofflib?\n");
+ exit(1);
+ }
+
if (be->beprolog)
(*be->beprolog)();
***************
*** 338,344 ****
tilt = DOWN;
calcfont;
! while ((c = getc(stdin)) != EOF) {
switch(c) {
case 0x00:
DBP((D_CAT,"NOP\n"));
--- 365,372 ----
tilt = DOWN;
calcfont;
!
! while (c != EOF) {
switch(c) {
case 0x00:
DBP((D_CAT,"NOP\n"));
***************
*** 610,615 ****
--- 638,644 ----
DBP((D_CAT,"Illegal: %02x\n", c));
break;
}
+ c = getc(stdin);
}
#ifdef OPT
canonflush();
***************
*** 802,809 ****
}
case 'F':
! if (be->befontsel)
! (*be->befontsel)(*(string+1), string+2);
*string ='\0';
return;
#ifdef FORM
--- 831,842 ----
}
case 'F':
! if (be->befontsel) {
! char tmp[2];
! tmp[0] = string[1];
! tmp[1] = 0;
! (*be->befontsel)(tmp, string+2);
! }
*string ='\0';
return;
#ifdef FORM
Index: ./defs.h
*** /tmp/PATCHold/./defs.h Sat May 23 22:34:57 1992
--- ./defs.h Sat May 23 22:34:59 1992
***************
*** 9,15 ****
*/
/* Official Release and Patch level: */
! #define T2VERSION "@(#)PSROFF Copyright 92/02/10 Chris Lewis - R3 PL10"
/* Configuration parameters:
*/
--- 9,15 ----
*/
/* Official Release and Patch level: */
! #define T2VERSION "@(#)PSROFF Copyright 92/05/21 Chris Lewis - R3 PL11"
/* Configuration parameters:
*/
***************
*** 121,131 ****
*/
/* Basic drivers: */
#define PS /* Postscript */
#define LJ /* Laserjet - utils programs will not build with this undef'd */
#define LJ3 /* Laserjet 3 - does LJ + HP-GL/2 for PIC */
#define DT /* ditroff */
- #define DIT /* ditroff *front-end* */
/* Laserjet driver config: */
#define PK /* enable PK font downloading (needs LJ) */
--- 121,132 ----
*/
/* Basic drivers: */
+ #define DIT /* ditroff *front-end* */
#define PS /* Postscript */
+ #ifndef PSONLY
#define LJ /* Laserjet - utils programs will not build with this undef'd */
#define LJ3 /* Laserjet 3 - does LJ + HP-GL/2 for PIC */
#define DT /* ditroff */
/* Laserjet driver config: */
#define PK /* enable PK font downloading (needs LJ) */
***************
*** 137,142 ****
--- 138,144 ----
#define PARTIAL /* partial (not incremental) font downloading */
#define INCR /* enable incremental font downloading (needs PARTIAL) */
+ #endif
#define MDLF 16 /* Max # downloaded fonts permitted by your laserjet
per *page*. 16 is correct for HPLJ+ and most II's.
***************
*** 155,160 ****
--- 157,164 ----
to have this turned on */
#define OPT /* CAT code reorder and optimizer */
+ #define SPACEOPT /* hyperoptimization */
+ #define OPTSIZ 200 /* size of optimizer buffer */
#define DEFPL 11 /* Default page length (11 inches).
DO NOT change unless you absolutely HAVE to.
***************
*** 225,231 ****
#include "Can't define SFP without PK"
#endif
! #if !defined(LJ) || !defined(PK)
#include "Sorry, can't compile without LJ and PK (for now)"
#endif
--- 229,235 ----
#include "Can't define SFP without PK"
#endif
! #if !defined(PSONLY) && (!defined(LJ) || !defined(PK))
#include "Sorry, can't compile without LJ and PK (for now)"
#endif
***************
*** 430,435 ****
--- 434,441 ----
extern char *mustmalloc();
extern char *version, *shortversion;
+
+ extern int optrun, fixedperiodwidth, spaceopt;
#define MAXPAGE 2000
#ifdef ALONE
Index: ./INSTALL
*** /tmp/PATCHold/./INSTALL Sat May 23 22:35:21 1992
--- ./INSTALL Sat May 23 22:35:25 1992
***************
*** 1,5 ****
Psroff 3.0 Installation Instructions
! 2.17 92/01/12
Please see the TROUBLE file if you have difficulties.
The README file does provide a bit more background on some
--- 1,5 ----
Psroff 3.0 Installation Instructions
! 2.18 92/05/23
Please see the TROUBLE file if you have difficulties.
The README file does provide a bit more background on some
***************
*** 89,98 ****
see if we can get DEC to put it in as a update]
Apollos need the -F trofftype variant. Their HEADERSIZE
! calculation is strange. If you are SR10.3, set HEADERSIZE
! to 304. On SR10.2 and earlier, set HEADERSIZE to 336.
! If this doesn't work out, consult the TROUBLE file
! on "HEADERSIZE calculations".
- NOTE: during installs as root, the makefiles attempt to be
careful about the modes of the files it creates. HOWEVER,
--- 89,97 ----
see if we can get DEC to put it in as a update]
Apollos need the -F trofftype variant. Their HEADERSIZE
! calculation is strange. It appears that HEADERSIZE should
! always be set to 304. "make check" should give the right
! result.
- NOTE: during installs as root, the makefiles attempt to be
careful about the modes of the files it creates. HOWEVER,
***************
*** 121,138 ****
lib/*.lib) are field-configurable, and it is possible I
will patch a few of them later (particularly lj.fonts).
! - If you are using the supplied width tables (widths/widthps),
! all is fine. But, if you're going to be driving another
! package (eg: jetroff, tpscript, psdit etc.) I suggest
! you find the ditroff-format ASCII width tables (DESC, R, I,
! S etc.), copy them to the appropriate widths/width<xx> area,
! modify psrofflib.S to know how to use these width tables,
! and possibly create *.fonts and *.lib files. psrofflib.S
! has copious comments on how to configure psroff.
! xtroff is supposedly already set - it should work
! "out-of-the-box". Patch level 10 for xtroff is preferred.
! [Contact moraes@cs.toronto.edu for more details]
psdit, tpscript, xtroff, Pageview, Display Postscript and
xproof work reasonably well using the Postscript widths in
--- 120,134 ----
lib/*.lib) are field-configurable, and it is possible I
will patch a few of them later (particularly lj.fonts).
! - Any of the configurations mentioned in psrofflib.S should
! work fine, given that you make the proper configuration
! changes for your system. In some cases, particularly
! when you want to use a different ditroff-2-something converter
! from CAT troff, you will have to copy the width tables into
! widths/widthxx, and make up your own psrofflib.S entries.
! Patch level 10 for xtroff is preferred. [Contact
! moraes@cs.toronto.edu for more details]
psdit, tpscript, xtroff, Pageview, Display Postscript and
xproof work reasonably well using the Postscript widths in
Index: ./Makefile
*** /tmp/PATCHold/./Makefile Sat May 23 22:35:59 1992
--- ./Makefile Sat May 23 22:36:06 1992
***************
*** 7,13 ****
# Function: Upper level makefile; configuration options.
#
#
! #ident "@(#)Makefile: 2.31 Copyright 92/02/21 09:31:19 Chris Lewis"
# If you're not sure whether you have a System V make, leave
# this alone, and run the make anyways. If it dies horribly
--- 7,13 ----
# Function: Upper level makefile; configuration options.
#
#
! #ident "@(#)Makefile: 2.33 Copyright 92/05/21 02:21:05 Chris Lewis"
# If you're not sure whether you have a System V make, leave
# this alone, and run the make anyways. If it dies horribly
***************
*** 212,218 ****
CFLAGS = $(DEFINES)
all: troff2ps myuid subst.done makeincl psroff README TROUBLE LASERFONTS \
! MISC DITROFF INSTALL LICENSE LJIII zap submakes
subst.done: sedscript
rm -f psroff makeincl
--- 212,218 ----
CFLAGS = $(DEFINES)
all: troff2ps myuid subst.done makeincl psroff README TROUBLE LASERFONTS \
! MISC DITROFF INSTALL LICENSE LJIII zap pkscale.o submakes
subst.done: sedscript
rm -f psroff makeincl
***************
*** 284,289 ****
--- 284,290 ----
test -d $(LIBDIR) || mkdir $(LIBDIR)
test -d $(LIBDIR)/lib || mkdir $(LIBDIR)/lib
test -d $(LIBDIR)/lib/lj || mkdir $(LIBDIR)/lib/lj
+ chmod 755 $(LIBDIR) $(LIBDIR)/lib $(LIBDIR)/lib/lj
$(IGNORESH) files=`echo fonts.lj/*.pk` ; \
if [ "$$files" != 'fonts.lj/*.pk' ] ; \
then \
***************
*** 312,325 ****
install: makeincl myuid
test "`./myuid`" = 0 || \
( echo "ERROR: You must be root to install" ; exit 1 )
! test -d $(BINDIR) || mkdir $(BINDIR)
test -d $(MANDIR) || \
echo "No MANDIR directory. Have you got MANDIR right?"
test -d $(LIBDIR) || mkdir $(LIBDIR)
test -d $(LIBDIR)/adapters || mkdir $(LIBDIR)/adapters
test -d $(LIBDIR)/lib || mkdir $(LIBDIR)/lib
! test -d $(RTMACDIR) || mkdir $(RTMACDIR)
! test -d $(FONTDIR) || mkdir $(FONTDIR)
rm -f $(BINDIR)/psroff.old
-cp $(BINDIR)/psroff $(BINDIR)/psroff.old 2> /dev/null
cp psroff $(BINDIR)/psroff
--- 313,327 ----
install: makeincl myuid
test "`./myuid`" = 0 || \
( echo "ERROR: You must be root to install" ; exit 1 )
! test -d $(BINDIR) || (mkdir $(BINDIR) ; chmod 755 $(BINDIR) )
test -d $(MANDIR) || \
echo "No MANDIR directory. Have you got MANDIR right?"
test -d $(LIBDIR) || mkdir $(LIBDIR)
test -d $(LIBDIR)/adapters || mkdir $(LIBDIR)/adapters
test -d $(LIBDIR)/lib || mkdir $(LIBDIR)/lib
! test -d $(RTMACDIR) || (mkdir $(RTMACDIR) ; chmod 755 $(RTMACDIR) )
! test -d $(FONTDIR) || (mkdir $(FONTDIR) ; chmod 755 $(FONTDIR) )
! chmod 755 $(LIBDIR) $(LIBDIR)/adapters $(LIBDIR)/lib
rm -f $(BINDIR)/psroff.old
-cp $(BINDIR)/psroff $(BINDIR)/psroff.old 2> /dev/null
cp psroff $(BINDIR)/psroff
***************
*** 440,452 ****
dittest: DITTEST
eqn DITTEST | tbl | PATH=:.:$(LIBDIR):$$PATH psroff -T$(TTYPE) $(TFLAGS)
! check: audit sedscript makeincl
! cd lib ; $(MAKE)
! ./audit
! checkinstall: audit sedscript makeincl
! cd lib ; $(MAKE)
! ./audit install
# This is how I build a release - don't even try running this...!
buildrelease: clean unpackljfonts
--- 442,452 ----
dittest: DITTEST
eqn DITTEST | tbl | PATH=:.:$(LIBDIR):$$PATH psroff -T$(TTYPE) $(TFLAGS)
! check: checker.S
! sh ./checker.S
! checkinstall:
! @echo "No longer supported"
# This is how I build a release - don't even try running this...!
buildrelease: clean unpackljfonts
***************
*** 480,482 ****
--- 480,486 ----
( echo "ERROR: You must be root to fixperms" ; exit 1 )
find $(LIBDIR) -type f -exec chmod +r '{}' ';'
find $(LIBDIR) $(FONTDIR) -type d -exec chmod +rx '{}' ';'
+
+ # Leaves manual pages and width tables installed. Oh well.
+ deinstall:
+ rm -fr $(LIBDIR) $(RTMACDIR)/tmac.t2 $(BINDIR)/psroff
Index: ./opt.c
*** /tmp/PATCHold/./opt.c Sat May 23 22:36:24 1992
--- ./opt.c Sat May 23 22:36:29 1992
***************
*** 10,22 ****
#include "defs.h"
int specXPos, specYPos;
extern struct cattab tabN[], tabS[];
#ifdef OPT
#ifndef lint
static char SCCSid[] =
! "@(#)opt.c: 2.8 Copyright 92/01/23 14:23:52 Chris Lewis";
#endif
struct insbuf {
--- 10,29 ----
#include "defs.h"
+ int optrun = 15;
+ int fixedperiodwidth = 0;
+ int spaceopt = 0;
+
int specXPos, specYPos;
extern struct cattab tabN[], tabS[];
+ #ifdef SPACEOPT
+ int spcwidth, spccount, spcnom;
+ #endif
#ifdef OPT
#ifndef lint
static char SCCSid[] =
! "@(#)opt.c: 2.11 Copyright 92/05/21 02:21:16 Chris Lewis";
#endif
struct insbuf {
***************
*** 25,31 ****
};
#define INSBUFSIZ 200
- #define OPTSIZ 100
struct insbuf insbuf[INSBUFSIZ];
static struct insbuf *insptr = insbuf;
static int insypos = -1;
--- 32,37 ----
***************
*** 181,187 ****
}
int optxpos, optypos;
! int optfont, optpoints, optnc, origxpos;
char optbuffer[OPTSIZ];
short optloc[OPTSIZ];
short *optloci;
--- 187,193 ----
}
int optxpos, optypos;
! int optfont, optpoints, optnc, origxpos, optsymset, optcnt=0;
char optbuffer[OPTSIZ];
short optloc[OPTSIZ];
short *optloci;
***************
*** 191,196 ****
--- 197,208 ----
if (!optimize)
return;
+ #if defined(DEBUG) && defined(SPACEOPT)
+ if ((debug&D_CHAR) && spcwidth) {
+ DBP((D_CHAR, "LOPT: x,y,sw,sc,nl,s: %d,%d,%d,%d,%d\n",
+ origxpos, optypos, spcwidth, spccount, spcnom, optbuffer));
+ }
+ #endif
if (optbuffer[0] && be->beputchar)
(*be->beputchar)(origxpos, optypos, optfont, optpoints, optnc,
***************
*** 198,203 ****
--- 210,219 ----
optbuffer[0] = '\0';
optp = optbuffer;
optloci = optloc;
+ optcnt = 0;
+ #ifdef SPACEOPT
+ spccount = spcwidth = 0;
+ #endif
}
optinsert(xpos, ypos, font, points, nc)
***************
*** 209,215 ****
struct cattab *ct;
register char *from;
int cantcache;
! static int ditind = 0;
if (!optimize) {
if (be->beputchar)
--- 225,231 ----
struct cattab *ct;
register char *from;
int cantcache;
! static int ditind = 0, psind = 0;
if (!optimize) {
if (be->beputchar)
***************
*** 232,238 ****
long multiple-character sequences */
if (ypos != optypos || optfont != font || optpoints != points ||
! wp != xlatetable[font]->widthtable ||
optp > optbuffer + OPTSIZ - 10)
optflush();
--- 248,254 ----
long multiple-character sequences */
if (ypos != optypos || optfont != font || optpoints != points ||
! wp != xlatetable[font]->widthtable || optcnt >= optrun ||
optp > optbuffer + OPTSIZ - 10)
optflush();
***************
*** 246,266 ****
ct = &tabN[nc];
}
! cantcache = !wp || (int) wp == 1 || (font == symidx ? bp->t2b_font != S:
! bp->t2b_font != N)
! #ifndef FIXEDPERIODWIDTH
! /* period widths are screwed in Postscript */
! || (font != symidx && nc == 35)
! #endif
;
! if (cantcache || bp->t2b_xc || bp->t2b_yc || bp->t2b_scale)
optflush();
DBP((D_CAT, "opt: font: %d/%d xpos: %d/%d\n",
optfont, font, optxpos, xpos));
! if (optxpos != xpos) /* handle spaces one day... */
optflush();
if (!optbuffer[0]) {
--- 262,321 ----
ct = &tabN[nc];
}
! cantcache = !wp || (int) wp == 1
! || bp->t2b_xc || bp->t2b_yc || bp->t2b_scale
! || bp->t2b_font == D
! /* period widths are screwed in some Postscript
! interpreters */
! || (!fixedperiodwidth && (font != symidx && nc == 35))
;
! if (cantcache ||
! (optbuffer[0] ? (bp->t2b_font != optsymset) :
! (font == symidx ? bp->t2b_font != S : bp->t2b_font != N)))
optflush();
DBP((D_CAT, "opt: font: %d/%d xpos: %d/%d\n",
optfont, font, optxpos, xpos));
! #ifdef SPACEOPT
! if (!psind)
! if (strcmp(be->bename, "ps") == 0)
! psind = 1;
! else
! psind = -1;
! if (spaceopt && psind == 1 && optbuffer[0] && optxpos != xpos &&
! optcnt < optrun - 5 && bp->t2b_font == N) {
! /* possible blank/space optimization */
!
! if (!spcwidth) { /* first space we've seen this line */
! spcnom = (wp[0] * points + 3) / 6; /* *nominal* space width. CAT
! doesn't read it - hardcoded.
! GRRRR. */
! spcwidth = xpos - optxpos;
! spccount = 1;
! *optloci = optxpos;
! optxpos = xpos;
! *optp++ = ' ';
! *optp = '\0';
! } else if ((xpos - optxpos) % spcwidth == 0) {
! int sw;
! sw = (xpos - optxpos) / spcwidth;
! if (sw + optcnt < optrun - 5) {
! while(sw--) {
! optcnt++;
! spccount++;
! *optloci++ = optxpos;
! *optp++ = ' ';
! }
! *optp = '\0';
! optxpos = xpos;
! }
! }
! }
! #endif
!
! if (optxpos != xpos)
optflush();
if (!optbuffer[0]) {
***************
*** 268,273 ****
--- 323,329 ----
optxpos = xpos;
origxpos = xpos;
optfont = font;
+ optsymset = bp->t2b_font;
optnc = nc;
optpoints = points;
}
***************
*** 284,301 ****
from = bp->t2b_charseq;
if (ditind == 1) {
! if (*from == '\\')
*optp++ = '\\';
! else if (*(from+1)) {
*optp++ = '\\';
*optp++ = '(';
*optp++ = *from++;
}
*optp++ = *from++;
} else
! for (; *from;)
*optp++ = *from++;
*optp = '\0';
}
#endif
--- 340,362 ----
from = bp->t2b_charseq;
if (ditind == 1) {
! if (*from == '\\') {
*optp++ = '\\';
! optcnt++;
! } else if (*(from+1)) {
*optp++ = '\\';
*optp++ = '(';
*optp++ = *from++;
+ optcnt += 3;
}
*optp++ = *from++;
+ optcnt++;
} else
! for (; *from;) {
! optcnt++;
*optp++ = *from++;
+ }
*optp = '\0';
}
#endif
Index: ./pkscale.c
*** /tmp/PATCHold/./pkscale.c Sat May 23 22:36:40 1992
--- ./pkscale.c Sat May 23 22:36:42 1992
***************
*** 0 ****
--- 1,202 ----
+ /* Copyright 1992 Chris Lewis
+ All Rights Reserved
+
+ See the LICENSE file for a full description of restrictions under which
+ this software is provided.
+
+ Function: PK/SFP font scaling. Much hackery. Results so-so.
+ */
+
+ #include "defs.h"
+
+ #ifdef PK
+
+ #ifndef lint
+ static char SCCSid[] = "@(#)pkscale.c 1.2 Copyright 92/05/19 23:10:53 Chris Lewis";
+ #endif
+
+ #include "pk.h"
+
+ long
+ scalenum(sf, num)
+ double sf;
+ long num; {
+ if (num < 0)
+ return((long) (sf * num - .5));
+ else
+ return((long) (sf * num + .5));
+ }
+
+ static short *sl = (short *) NULL;
+ static sln = 0;
+
+ struct pkp *
+ pkscale(pkp, target)
+ struct pkp *pkp;
+ int target; {
+ struct pkp *npkp;
+ register int i,j;
+ register struct pkc *pc, *npc;
+ extern struct ras *pkrast();
+ double sf;
+
+ if (!target || target == pkp->pkp_npts)
+ return(pkp);
+
+ if (sl) {
+ free(sl);
+ sl = (short *) NULL;
+ sln = 0;
+ }
+
+ sf = (double) target / pkp->pkp_npts;
+
+ npkp = (struct pkp *) mustmalloc(sizeof(struct pkp),
+ "New PK header for scale");
+ *npkp = *pkp;
+ npkp->pkp_list = (struct pkc **)
+ mustmalloc(sizeof(struct pkc *) * pkp->pkp_num,
+ "New PK sort list for scale");
+
+ npkp->pkp_chars = (struct pkc *) NULL;
+ npkp->pkp_last = (struct pkc *) NULL;
+
+ npkp->pkp_ds = scalenum(sf, npkp->pkp_ds);
+ npkp->pkp_npts = scalenum(sf, npkp->pkp_npts);
+ npkp->pkp_bmax = scalenum(sf, npkp->pkp_bmax);
+ npkp->pkp_dmax = scalenum(sf, npkp->pkp_dmax);
+ npkp->pkp_wmax = scalenum(sf, npkp->pkp_wmax);
+ npkp->pkp_xomax = scalenum(sf, npkp->pkp_xomax);
+ npkp->pkp_kh = scalenum(sf, npkp->pkp_kh);
+ npkp->pkp_kl = scalenum(sf, npkp->pkp_kl);
+
+ for (i = 0; i < pkp->pkp_num; i++) {
+ register struct ras *r;
+ pc = pkp->pkp_list[i];
+
+ /* create new char descriptor, initialized to old */
+ npc = (struct pkc *) mustmalloc(sizeof(struct pkc),
+ "New PK character descriptor");
+ *npc = *pc;
+ if (!npkp->pkp_chars)
+ npkp->pkp_chars = npc;
+ npkp->pkp_last = npc;
+ npkp->pkp_list[i] = npc;
+
+ /* get a raster to play with */
+ pc->pkc_sfpr = pkrast(pc);
+ if (pc->pkc_pkr)
+ free((char *) pc->pkc_pkr);
+ pc->pkc_pkr = (int8 *) NULL;
+
+ npc->pkc_sfpr = r = (struct ras *) mustmalloc(sizeof(struct ras),
+ "SFP raster header for scale");
+
+ npc->pkc_height = scalenum(sf, npc->pkc_height)+1;
+ npc->pkc_width = scalenum(sf, npc->pkc_width)+1;
+ npc->pkc_dx = scalenum(sf, npc->pkc_dx);
+ npc->pkc_dy = scalenum(sf, npc->pkc_dy);
+ npc->pkc_x_off = scalenum(sf, npc->pkc_x_off);
+ npc->pkc_y_off = scalenum(sf, npc->pkc_y_off);
+
+ r->ras_height = npc->pkc_height;
+ r->ras_width = npc->pkc_width;
+ r->ras_bline = (npc->pkc_width + 7) / 8;
+ r->ras_bytes = r->ras_height * r->ras_bline;
+ r->ras_raster = (int8 *) mustmalloc((int) r->ras_bytes,
+ "SFP raster for scale");
+
+ rastscale(r, pc->pkc_sfpr, sf);
+
+ }
+ pk_destroy(pkp);
+ return(npkp);
+ }
+
+ #define seton(x,y,r) r->ras_raster[y * r->ras_bline + (x >> 3)] |= (0x80 >> (x&7))
+ #define biton(x,y,r) r->ras_raster[y * r->ras_bline + (x >> 3)] & (0x80 >> (x&7))
+
+ #define BLOT
+ #ifdef BLOT
+ short blot1[] = {-1, 0,
+ 0, 1,
+ 1, 0,
+ 0, -1,
+ 0, 0};
+ short blot2[] = {-2,0,
+ -1,0,
+ -1,1,
+ 0,1,
+ 0,2,
+ 1,1,
+ 1,0,
+ 2,0,
+ 1,-1,
+ 0,-1,
+ 0,-2,
+ -1,-1,
+ 0,0};
+ short *blotlist[] = {blot1, blot2, blot2, blot2, blot2, blot2};
+ #endif
+
+ rastscale(to, from, scale)
+ register struct ras *to, *from;
+ double scale; {
+ register int x, y;
+ register int ct = scale;
+ register struct ras *nr;
+
+ /* optimization to avoid floating point */
+ x = max(from->ras_height, from->ras_width) + 10;
+ if (x > sln) {
+ register short *p;
+ if (sl)
+ free(sl);
+ p = sl = (short *)mustmalloc(sizeof(short) * x,
+ "SFP raster scale array");
+ sln = x;
+ for (x = 0, p = sl; x < sln; x++)
+ *p++ = scale * x + .5;
+ }
+
+ clrarray(to->ras_raster, to->ras_bytes);
+
+ /* dumb scaling algorithm. */
+ for (y = 0; y < from->ras_height; y++)
+ for (x = 0; x < from->ras_width; x++) {
+ if (biton(x, y, from)) {
+ register int sy = sl[y], sx = sl[x];
+ seton(sx, sy, to);
+
+ /* if scale > 1, we centre a ct*ct box on it */
+ #ifdef BLOT
+ if (ct) {
+ register int tsx, tsy;
+ register short *p = blotlist[ct-1];
+
+ while(*p || *(p+1)) {
+ tsx = sx + *p++;
+ tsy = sy + *p++;
+ if (tsx < 0 || tsx >= to->ras_width ||
+ tsy < 0 || tsy >= to->ras_height)
+ continue;
+ seton(tsx, tsy, to);
+ }
+ }
+ #else
+ if (ct) {
+ register int tsy, tsx, limx, limy;
+ limy = min(sy + ct + 1, to->ras_height);
+ for (tsy = max(sy-ct,0) ; tsy < limy; tsy++) {
+ limx = min(sx + ct + 1, to->ras_width);
+ for (tsx = max(sx-ct, 0); tsx < limx; tsx++) {
+ }
+ }
+ }
+ #endif
+ }
+ }
+
+ }
+
+ #endif
Index: ./pk.c
*** /tmp/PATCHold/./pk.c Sat May 23 22:36:55 1992
--- ./pk.c Sat May 23 22:36:57 1992
***************
*** 13,19 ****
#ifdef PK
#ifndef lint
! static char SCCSid[] = "@(#)pk.c 2.3 Copyright 91/02/20 09:02:17 Chris Lewis";
#endif
#define DRAW
--- 13,19 ----
#ifdef PK
#ifndef lint
! static char SCCSid[] = "@(#)pk.c 2.4 Copyright 92/03/12 01:11:09 Chris Lewis";
#endif
#define DRAW
***************
*** 28,33 ****
--- 28,35 ----
extern char *progname;
+ long sfp_hmi; /* pitch (default HMI) from SFP font header */
+
static FILE *fin;
static char *filename; /* name of *current* font being read */
extern char *malloc();
***************
*** 668,676 ****
p->pkp_symset = get2int();
! get2int(); /* pitch - we calculate this from height */
c = get2int(); /* retrieved *height* */
! p->pkp_npts = c * POINT / (OUTRES*4) + .5;
get2int(); /* dummy */
get1int(); /* dummy */
--- 670,681 ----
p->pkp_symset = get2int();
! c = get2int(); /* pitch (default HMI) */
! sfp_hmi = (double) c / 4 + .5;
!
c = get2int(); /* retrieved *height* */
! p->pkp_ds = (c * POINT * pow2(20)) / (OUTRES*4);
! p->pkp_npts = (p->pkp_ds / pow2(20)) + 0.5;
get2int(); /* dummy */
get1int(); /* dummy */
***************
*** 682,688 ****
p->pkp_xomax = 0;
/* These are simulated so that the PK handlers can figure the font out */
- p->pkp_ds = p->pkp_npts * pow2(20);
p->pkp_cs = 0;
p->pkp_hppp = OUTRES * pow2(16) / POINT;
p->pkp_vppp = OUTRES * pow2(16) / POINT;
--- 687,692 ----