🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sources.bugs
Article #722

Official Patch 7 for Psroff 3.0

#722
From: Chris Lewis
Date: Sun, 05 Jan 1992 06:36
701 lines
20961 bytes
Archive-name: psroff3.0/Patch.07
Submitted-by: clewis@ferret.ocunix.on.ca (Chris Lewis)

    This is official patch 07 for Psroff 3.0.
    Please apply it by:
	cd <psroff source directory>
	patch -N -p < <this file>

These patches primarily impact people who are driving psroff from
groff or ditroff, especially when generating HP Laserjet.

Highlights:
	1) ditroff *input* coredumped when no character extensions
	   (-Tlj personality) sometimes.  Null dereference fixed.
	2) When Postscript&optimizer turned on, "period leaders" (eg:
	   in table of contents) looked awful.  Disabled optimization on "."
	   character.  Problem seems to be that Postscript treats a
	   period's width differently when adjacent to another period.
	   (No, I don't really believe this either, but I don't believe
	   the width generator is wrong either)
	3) ditroff input with optimizer on would die with "can't open
	   ftS2".  This is non-fatal, so error disabled for this font.
	4) Included shell script to permit building laserjet fonts for
	   psroff from the Jetroff 1.0 font distribution (available from
	   c.s.u).  (Ie: If you don't have perl and thus can't run the
	   intelligent font generator, you can use this shell script.
	   See LASERFONTS file)
	5) Without a DESC file for lj, you couldn't use it with
	   ditroff or groff.

../widths/widthlj/DESC	Needed for ditroff/groff driving Laserjet.
../widths/Makefile	References DESC
../utils/calcfonts.S	Minor mods for generating commands from file lists.
../utils/pk2ditwid.c	Put "name" into generated width files.
../utils/psxlate.c	Memory allocation checking, minor botch in long lines.
../utils.c		Failed open of ftS2 no longer fatal. (optimizer)
../dit.c			Coredumps on null dereference.
../defs.h		PL7
../psroff.S		Finally fixed bloody v flag.
../opt.c			disable of . optimization
../zap			missing reference to utils, and fixes for broken shells
../LASERFONTS		How to build Laserjet fonts without Perl

Patchwrapped: 920105005055

Index: ./widths/widthlj/DESC
0a1,26
> # DESC for LaserJet - dummied for ljroff using pk's or SFP's. 1.1 91/12/26
> fonts 6 R I B H HI S
> sizes 6 7 8 9 10 11 12 14 16 18 20 22 24 28 36 0
> unitwidth 10
> paperwidth 2550
> paperlength 3300
> hor 1
> vert 1
> 
> res 300
> 
> charset
> \| \^ \- \` \'
> em hy bu sq ru fi fl ff Fi Fl de dg fm ct rg co
> sc aa ga dd
> *A *B *C *D *E *F *G *H *I *K *L *M *N *O *P *Q *R *S *T *U *W *X *Y *Z
> *a *b *c *d *e *f *g *h *i *k *l *m *n *o *p *q *r *s *t *u *w *x *y *z
> pl mi eq ** ul sl sr rn >= <= == ~= ap != -> <- ua da mu di +- ts
> cu ca sb sp ib ip if pd gr no is pt es mo
> br or ci lt lb rt rb lk rk bv lf rf lc rc
> 12 13 14 18 23 34 38 58 78 rh lh
> $J '' .. AE I! I? O/ PL Pl ae be bq cd d< d> dt hc l< lq ma n' o/ oe og
> pm po pp r> ri rq sd ss ui um a~ a^ OE A: O: U: a: o: u:
> !m nm !s :> <: <> a+ ag al an ax bt cm cr dm fa im io la lo m. mt te tf tm =~
> AL Cc Cd Ch Cs L< R> r1 r2 u= d=
> bx bs
Index: ./widths/Makefile
*** /tmp/PATCHold/./widths/Makefile	Sun Jan  5 00:48:19 1992
--- ./widths/Makefile	Sun Jan  5 00:48:21 1992
***************
*** 4,10 ****
  #    See the LICENSE file for a full description of the restrictions
  #    under which this software is provided.
  #
! #2.19 91/07/31
  SCRIPTS	= gfnttab genext installdit
  TD	= testdir
  PSW	= \
--- 4,10 ----
  #    See the LICENSE file for a full description of the restrictions
  #    under which this software is provided.
  #
! #2.20 91/12/26
  SCRIPTS	= gfnttab genext installdit
  TD	= testdir
  PSW	= \
***************
*** 16,22 ****
  	widthps/B  widthps/CO widthps/Hb widthps/NX widthps/ZC \
  	widthps/BB widthps/CX widthps/Hi widthps/PB widthps/ZD \
  	widthps/BI widthps/Hr widthps/PI widthps/BO widthps/H \
! 	widthps/Hx widthps/PR
  LJ3W	= \
  	widthlj3/DESC widthlj3/S2 \
  	    widthlj3/B widthlj3/I widthlj3/R widthlj3/S widthlj3/X \
--- 16,23 ----
  	widthps/B  widthps/CO widthps/Hb widthps/NX widthps/ZC \
  	widthps/BB widthps/CX widthps/Hi widthps/PB widthps/ZD \
  	widthps/BI widthps/Hr widthps/PI widthps/BO widthps/H \
! 	widthps/Hx widthps/PR \
! 	widthlj/DESC
  LJ3W	= \
  	widthlj3/DESC widthlj3/S2 \
  	    widthlj3/B widthlj3/I widthlj3/R widthlj3/S widthlj3/X \
Index: ./utils/calcfonts.S
*** /tmp/PATCHold/./utils/calcfonts.S	Sun Jan  5 00:48:30 1992
--- ./utils/calcfonts.S	Sun Jan  5 00:48:31 1992
***************
*** 7,13 ****
  #    See the LICENSE file for a full description of the restrictions
  #    under which this software is provided.
  #
! #Copyright 1991/09/27 Chris Lewis 2.3
  
  #	Set to path of sfp2pk if you have it, otherwise NULL.
  $sfp2pk	= '';
--- 7,13 ----
  #    See the LICENSE file for a full description of the restrictions
  #    under which this software is provided.
  #
! #Copyright 1991/12/26 Chris Lewis 2.4
  
  #	Set to path of sfp2pk if you have it, otherwise NULL.
  $sfp2pk	= '';
***************
*** 106,127 ****
  	    $found[$pointsize] = 1;
  	    chop($usedfonts);
  	    printf STDERR ("Generating $outf at $pointsize using $usedfonts\n");
! 	    if (system($cmdline)) {
! 		printf STDERR ("failed ($!) $cmdline\n");
! 		exit(1);
! 	    }
! 	    if (system("$basedir/pk2sfp t > $newfonts/$outf.$pointsize.sfp")) {
! 		printf STDERR ("pk2sfp sort to build $outf.$pointsize.sfp failed\n");
! 		exit(1);
! 	    }
! 	    unlink('t');
! 	    if ($sfp2pk) {
! 		if (system("$sfp2pk < $newfonts/$outf.$pointsize.sfp " .
! 		    "> $newfonts/$outf.$pointsize.pk")) {
! 		    printf STDERR ("sfp2pk < $outf.$pointsize.sfp failed\n");
  		    exit(1);
  		}
! 		unlink("$newfonts/$outf.$pointsize.sfp");
  	    }
  	    close(GEN);
  	}
--- 106,132 ----
  	    $found[$pointsize] = 1;
  	    chop($usedfonts);
  	    printf STDERR ("Generating $outf at $pointsize using $usedfonts\n");
! 	    if ($nogenerate) {
! 		printf "$cmdline\n";
! 		printf "$basedir/pk2sfp t > $newfonts/$outf.$pointsize.sfp\n";
! 	    } else {
! 		if (system($cmdline)) {
! 		    printf STDERR ("failed ($!) $cmdline\n");
! 		    exit(1);
! 		}
! 		if (system("$basedir/pk2sfp t > $newfonts/$outf.$pointsize.sfp")) {
! 		    printf STDERR ("pk2sfp sort to build $outf.$pointsize.sfp failed\n");
  		    exit(1);
  		}
! 		unlink('t');
! 		if ($sfp2pk) {
! 		    if (system("$sfp2pk < $newfonts/$outf.$pointsize.sfp " .
! 			"> $newfonts/$outf.$pointsize.pk")) {
! 			printf STDERR ("sfp2pk < $outf.$pointsize.sfp failed\n");
! 			exit(1);
! 		    }
! 		    unlink("$newfonts/$outf.$pointsize.sfp");
! 		}
  	    }
  	    close(GEN);
  	}
***************
*** 184,189 ****
--- 189,198 ----
  	$sfp2pk = $1;
      } elsif ($arg =~ /^-f(.*)/) {
  	$newfonts = $1;
+     } elsif ($arg =~ /^-F(.*)/) {
+ 	$fontfilelist = $1;
+     } elsif ($arg =~ /^-O/) {
+ 	$nogenerate = 1;
      } elsif ($arg !~ /^-/) {
  	if (-d $arg) {
  	    $dirlist = "$dirlist $arg";
***************
*** 202,209 ****
      $sfp2pk = '';
  }
  
! if (!$dirlist) {
!     printf STDERR ("No directories to search - aborting\n");
      exit(0);
  }
  
--- 211,218 ----
      $sfp2pk = '';
  }
  
! if (!$dirlist && !$fontfilelist) {
!     printf STDERR ("No directories or files to search - aborting\n");
      exit(0);
  }
  
***************
*** 215,223 ****
  open(DISCARD, ">discard");
  
  $cmdline =
!     "find $dirlist -type f '(' -name '*pk' -o -name '*.sfp' ')' -print";
  printf STDERR ("Commandline: $cmdline\n");
! open(INLIST, "$cmdline|") || die "Cannot start $cmdline\n";
  
  while(<INLIST>) {
      chop;
--- 224,235 ----
  open(DISCARD, ">discard");
  
  $cmdline =
!     "find $dirlist -type f '(' -name '*pk' -o -name '*.sfp' ')' -print|";
! if ($fontfilelist) {
!     $cmdline = "<$fontfilelist";
! }
  printf STDERR ("Commandline: $cmdline\n");
! open(INLIST, "$cmdline") || die "Cannot start $cmdline\n";
  
  while(<INLIST>) {
      chop;
***************
*** 319,325 ****
      'cmr,jmr', 'cmsy,jmsy', 'cmti,jmti', 'cmtrf,jmtrf');
  
  do gen('I', 'Times-Italic', '\033(8U\033(s1p1s-3b05T', 'ROMAN8',
!     'cmsl,jmsl/cmr', 'cmsy,jmsy', 'cmti,jmti', 'cmtrf,jmtrf');
  
  do gen('B', 'Times-Bold', '\033(8U\033(s1p0s03b05T', 'ROMAN8',
      'cmbx,jmbx/cmr', 'cmsy,jmsy', 'cmti,jmti', 'cmtrf,jmtrf');
--- 331,337 ----
      'cmr,jmr', 'cmsy,jmsy', 'cmti,jmti', 'cmtrf,jmtrf');
  
  do gen('I', 'Times-Italic', '\033(8U\033(s1p1s-3b05T', 'ROMAN8',
!     'cmti,cmsl,jmsl/cmr', 'cmsy,jmsy', 'cmti,jmti', 'cmtrf,jmtrf');
  
  do gen('B', 'Times-Bold', '\033(8U\033(s1p0s03b05T', 'ROMAN8',
      'cmbx,jmbx/cmr', 'cmsy,jmsy', 'cmti,jmti', 'cmtrf,jmtrf');
Index: ./utils/pk2ditwid.c
*** /tmp/PATCHold/./utils/pk2ditwid.c	Sun Jan  5 00:48:41 1992
--- ./utils/pk2ditwid.c	Sun Jan  5 00:48:42 1992
***************
*** 10,16 ****
  
  #ifndef	lint
  static char SCCSID[] =
!     "@(#)pk2ditwid.c 2.3 Copyright 91/02/20 09:09:45 Chris Lewis";
  #endif
  
  #include "defs.h"
--- 10,16 ----
  
  #ifndef	lint
  static char SCCSID[] =
!     "@(#)pk2ditwid.c 2.4 Copyright 91/12/26 17:59:20 Chris Lewis";
  #endif
  
  #include "defs.h"
***************
*** 131,136 ****
--- 131,137 ----
  	} else {
  	    fprintf(fout, "# %s\n", buf);
  	    fprintf(fout, "# Generated by pk2ditwid\n");
+ 	    fprintf(fout, "name %s\n", buf);
  	    fprintf(fout, "spacewidth 22\n");
  	    fprintf(fout, "charset\n");
  	}
Index: ./utils/psxlate.c
*** /tmp/PATCHold/./utils/psxlate.c	Sun Jan  5 00:48:52 1992
--- ./utils/psxlate.c	Sun Jan  5 00:48:54 1992
***************
*** 23,29 ****
   */
  #ifndef	lint
  static char SCCSid[] =
!     "@(#)psxlate.c: 2.17 Copyright 91/10/23 10:47:15 Chris Lewis";
  #endif
  
  #ifdef	ALONE
--- 23,29 ----
   */
  #ifndef	lint
  static char SCCSid[] =
!     "@(#)psxlate.c: 2.18 Copyright 91/12/21 13:13:44 Chris Lewis";
  #endif
  
  #ifdef	ALONE
***************
*** 228,233 ****
--- 228,234 ----
      int nest = 0;
  
      magicstr = malloc(strlen(buffer) + 1);
+     allchk(magicstr);
      strcpy(magicstr, buffer);
  
      while(1) {
***************
*** 452,457 ****
--- 453,459 ----
      append(2);
  
      p = (struct pagedesc *) malloc(sizeof(struct pagedesc) * pagecnt);
+     allchk(p);
  
      mid = pagecnt / 2;
  
***************
*** 508,513 ****
--- 510,516 ----
      append(4);
  
      p = (struct pagedesc *) malloc(sizeof(struct pagedesc) * pagecnt);
+     allchk(p);
      mid = pagecnt / 2;
      for (i = 0, end = pagecnt - 1; i < mid; i += 2, end -= 2) {
  	p[i] = pageidx[end];
***************
*** 544,549 ****
--- 547,553 ----
  
      if (buffer == NULL) {
  	buffer = malloc(4096);
+ 	allchk(buffer);
  	buflimit = 4096;
      }
  
***************
*** 552,559 ****
--- 556,566 ----
  	putc(ch, out);
  	curcount++;
  	if (p - buffer > buflimit-3) {
+ 	    int offset = p - buffer;
  	    buflimit += CHUNK;
  	    buffer = realloc(buffer, buflimit);
+ 	    allchk(buffer);
+ 	    p = buffer + offset;
  	}
  	*p++ = ch;
  	if (ch == '\n')
***************
*** 690,693 ****
--- 697,709 ----
  	fputs(cmdbuffer, stdout);
  
      fclose(f);
+ }
+ 
+ allchk(p)
+ register char *p; {
+     if (!p) {
+ 	fprintf(stderr, "%s: [re|m]alloc failed - out of memory\n",
+ 	    progname);
+ 	exit(1);
+     }
  }
Index: ./utils.c
*** /tmp/PATCHold/./utils.c	Sun Jan  5 00:49:12 1992
--- ./utils.c	Sun Jan  5 00:49:22 1992
***************
*** 12,18 ****
  
  #ifndef	lint
  static char SCCSid[] =
!     "@(#)utils.c: 2.21 Copyright 91/11/22 03:21:21 Chris Lewis";
  #endif
  
  #ifndef	HEADERSIZE
--- 12,18 ----
  
  #ifndef	lint
  static char SCCSid[] =
!     "@(#)utils.c: 2.22 Copyright 91/12/26 17:58:48 Chris Lewis";
  #endif
  
  #ifndef	HEADERSIZE
***************
*** 527,536 ****
  	DBP((D_SPEC, "Failed to open widthtable %s\n", widthtables));
  	free(p->widthtable);
  	p->widthtable = (char *) 1;
! 	fprintf(stderr, "%s: failed to open width table %s\n",
! 	    progname, widthtables);
! 	fprintf(stderr, "\trecheck -W option\n");
! 	exit(1);
      }
  }
  
--- 527,539 ----
  	DBP((D_SPEC, "Failed to open widthtable %s\n", widthtables));
  	free(p->widthtable);
  	p->widthtable = (char *) 1;
! 	/* This isn't really the right way to do this, but.... */
! 	if (strcmp(p->troffName, "S2") != 0) {
! 	    fprintf(stderr, "%s: failed to open width table %s\n",
! 		progname, widthtables);
! 	    fprintf(stderr, "\trecheck -W option\n");
! 	    exit(1);
! 	}
      }
  }
  
Index: ./dit.c
*** /tmp/PATCHold/./dit.c	Sun Jan  5 00:49:43 1992
--- ./dit.c	Sun Jan  5 00:49:46 1992
***************
*** 12,18 ****
  
  #ifndef	lint
  static char SCCSid[] =
!     "@(#)dit.c: Copyright 91/11/22 03:53:18 Chris Lewis";
  #endif
  
  extern struct cattab tabN[], tabS[], *extidx;
--- 12,18 ----
  
  #ifndef	lint
  static char SCCSid[] =
!     "@(#)dit.c: Copyright 91/12/26 17:58:58 Chris Lewis";
  #endif
  
  extern struct cattab tabN[], tabS[], *extidx;
***************
*** 93,99 ****
  
      addtab(tabN);
      addtab(tabS);
!     addtab(extidx);
  
      /*	Magic */
      dittab['-'] = &tabN[31];
--- 93,100 ----
  
      addtab(tabN);
      addtab(tabS);
!     if (extidx)
! 	addtab(extidx);
  
      /*	Magic */
      dittab['-'] = &tabN[31];
Index: ./defs.h
*** /tmp/PATCHold/./defs.h	Sun Jan  5 00:49:58 1992
--- ./defs.h	Sun Jan  5 00:50:00 1992
***************
*** 9,15 ****
   */
  
  /*	Official Release and Patch level:	*/
! #define	T2VERSION	"@(#)PSROFF Copyright 91/11/22 Chris Lewis - R3 PL6"
  
  /*	Configuration parameters:
   */
--- 9,15 ----
   */
  
  /*	Official Release and Patch level:	*/
! #define	T2VERSION	"@(#)PSROFF Copyright 91/12/26 Chris Lewis - R3 PL7"
  
  /*	Configuration parameters:
   */
Index: ./psroff.S
*** /tmp/PATCHold/./psroff.S	Sun Jan  5 00:50:13 1992
--- ./psroff.S	Sun Jan  5 00:50:15 1992
***************
*** 7,13 ****
  #
  #	Specs:		troff2ps driver
  #
! #ident  "@(#)psroff.sh: 2.18 Copyright 91/11/22 03:21:09 Chris Lewis"
  
  LIBDIR="%%LIBDIR%%"
  FONTDIR="%%FONTDIR%%"
--- 7,13 ----
  #
  #	Specs:		troff2ps driver
  #
! #ident  "@(#)psroff.sh: 2.19 Copyright 91/12/26 17:58:37 Chris Lewis"
  
  LIBDIR="%%LIBDIR%%"
  FONTDIR="%%FONTDIR%%"
***************
*** 298,304 ****
  
      cat $files |
  
!     if [ -f "%%PERL%%" -a -z "$v" ]
      then
  	%%LIBDIR%%/catconv
      else
--- 298,304 ----
  
      cat $files |
  
!     if [ -f "%%PERL%%" -a -n "$v" ]
      then
  	%%LIBDIR%%/catconv
      else
Index: ./opt.c
*** /tmp/PATCHold/./opt.c	Sun Jan  5 00:50:24 1992
--- ./opt.c	Sun Jan  5 00:50:25 1992
***************
*** 16,22 ****
  #ifdef	OPT
  #ifndef	lint
  static char SCCSid[] =
!     "@(#)opt.c: 2.6 Copyright 91/08/12 23:52:41 Chris Lewis";
  #endif
  
  struct insbuf {
--- 16,22 ----
  #ifdef	OPT
  #ifndef	lint
  static char SCCSid[] =
!     "@(#)opt.c: 2.7 Copyright 92/01/03 11:33:47 Chris Lewis";
  #endif
  
  struct insbuf {
***************
*** 247,259 ****
      }
  
      cantcache = !wp || (int) wp == 1 || (font == symidx ? bp->t2b_font != S:
! 			     bp->t2b_font != N);
  
!     if (bp->t2b_xc || bp->t2b_yc || bp->t2b_scale || cantcache)
  	optflush();
  
      DBP((D_CAT, "opt: font: %d/%d xpos: %d/%d\n",
  	optfont, font, optxpos, xpos));
      if (optxpos != xpos)	/* handle spaces one day... */
  	optflush();
  
--- 247,265 ----
      }
  
      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();
  
Index: ./zap
*** /tmp/PATCHold/./zap	Sun Jan  5 00:50:33 1992
--- ./zap	Sun Jan  5 00:50:34 1992
***************
*** 1,9 ****
  :
! #1.3 91/07/23: Used to bypass broken makes - see MISC "Broken makes"
  if [ $# = 0 ]
  then
      make sedscript makeincl
!     for i in adapters lib widths tests man
      do
  	cd $i
  	for j in *.S
--- 1,9 ----
  :
! #1.4 91/12/26: Used to bypass broken makes - see MISC "Broken makes"
  if [ $# = 0 ]
  then
      make sedscript makeincl
!     for i in adapters lib widths tests man utils
      do
  	cd $i
  	for j in *.S
***************
*** 15,21 ****
  		    ;;
  		'*.S')
  		    echo "No .S files in $i"
! 		    continue
  		    ;;
  	    esac
  	    f=`basename $j .S`
--- 15,21 ----
  		    ;;
  		'*.S')
  		    echo "No .S files in $i"
! 		    break
  		    ;;
  	    esac
  	    f=`basename $j .S`
Index: ./LASERFONTS
*** /tmp/PATCHold/./LASERFONTS	Sun Jan  5 00:50:44 1992
--- ./LASERFONTS	Sun Jan  5 00:50:45 1992
***************
*** 1,5 ****
  	How to build Fonts and Width Tables for your Laserjet
! 			2.4 91/07/20
  
  This readme presents a general discussion on how to build fonts
  for psroff.  The first part gives a complete description of what
--- 1,5 ----
  	How to build Fonts and Width Tables for your Laserjet
! 			2.5 91/12/26
  
  This readme presents a general discussion on how to build fonts
  for psroff.  The first part gives a complete description of what
***************
*** 131,136 ****
--- 131,138 ----
  There is a perl script in utils called "calcfonts", which if invoked
  in the top level make via:
  
+ [If you don't have Perl, go to "AUTOMATING IF YOU DON'T HAVE PERL"]
+ 
  	make buildljfonts
  
  Will traverse every directory you've specified for PKFONTS during
***************
*** 172,174 ****
--- 174,230 ----
  only used if you've selected a point size which is marked "b" (builtin),
  or is marked "n" (non-existent), and the bestmatch code in lj.c didn't
  find an existing font (same typeface) at a "close enough" pointsize.
+ 
+ AUTOMATING IF YOU DON'T HAVE PERL
+ 
+ If you don't have perl, the following script will construct R, I, B
+ and C at point sizes 6 through 28 from the Jetroff 1.0 font distribution.
+ Run this in place of "make buildljfonts".  After running it,
+ copy all of the files from /tmp/newfonts into $LJF. Then
+ mark point sizes 6 thru 28 (in R, I, B and C) as "s" in lj.fonts, then:
+ 
+ 	make register
+ 	su root
+ 	make install
+ 	make installwidths
+ 
+ ---------------------- Snip here ---------------------
+ PSRC=<path to psroff source>
+ JFONTS=<path to jetroff fonts>
+ NEWFONT=/tmp/newfonts
+ if [ ! -d /tmp/newfonts ]
+ then
+     mkdir /tmp/newfonts
+ fi
+ for i in 6 7 8 9 10 11 12 14 16 18 20 22 24 28
+ do
+     $PSRC/utils/pk2sfp -m \
+ 	$PSRC/utils/maps/cmr.ROMAN8 $JFONTS/devjet/pk/cmr$i.300pk \
+ 	$PSRC/utils/maps/cmsy.ROMAN8 $JFONTS/devjet/pk/cmsy$i.300pk \
+ 	$PSRC/utils/maps/cmti.ROMAN8 $JFONTS/devjet/pk/cmti$i.300pk \
+ 	$PSRC/utils/maps/cmtrf.ROMAN8 $JFONTS/devjet/pk/cmtrf$i.300pk \
+ 		> t
+     $PSRC/utils/pk2sfp t > $NEWFONT/R.$i.sfp
+     $PSRC/utils/pk2sfp -m \
+ 	$PSRC/utils/maps/cmr.ROMAN8 $JFONTS/devjet/pk/cmbx$i.300pk \
+ 	$PSRC/utils/maps/cmsy.ROMAN8 $JFONTS/devjet/pk/cmsy$i.300pk \
+ 	$PSRC/utils/maps/cmti.ROMAN8 $JFONTS/devjet/pk/cmti$i.300pk \
+ 	$PSRC/utils/maps/cmtrf.ROMAN8 $JFONTS/devjet/pk/cmtrf$i.300pk \
+ 		> t
+     $PSRC/utils/pk2sfp t > $NEWFONT/B.$i.sfp
+     $PSRC/utils/pk2sfp -m \
+ 	$PSRC/utils/maps/cmtt.ROMAN8 $JFONTS/devjet/pk/cmtt$i.300pk \
+ 	$PSRC/utils/maps/cmsy.ROMAN8 $JFONTS/devjet/pk/cmsy$i.300pk \
+ 	$PSRC/utils/maps/cmti.ROMAN8 $JFONTS/devjet/pk/cmti$i.300pk \
+ 	$PSRC/utils/maps/cmtrf.ROMAN8 $JFONTS/devjet/pk/cmtrf$i.300pk \
+ 		> t
+     $PSRC/utils/pk2sfp t > $NEWFONT/C.$i.sfp
+     $PSRC/utils/pk2sfp -m \
+ 	$PSRC/utils/maps/cmr.ROMAN8 $JFONTS/devjet/pk/cmti$i.300pk \
+ 	$PSRC/utils/maps/cmsy.ROMAN8 $JFONTS/devjet/pk/cmsy$i.300pk \
+ 	$PSRC/utils/maps/cmti.ROMAN8 $JFONTS/devjet/pk/cmti$i.300pk \
+ 	$PSRC/utils/maps/cmtrf.ROMAN8 $JFONTS/devjet/pk/cmtrf$i.300pk \
+ 		> t
+     $PSRC/utils/pk2sfp t > $NEWFONT/I.$i.sfp
+ done
+ ---------------------- Snip here ---------------------
Technical Details
Message-ID: <2974@ecicrl.ocunix.on.ca>
Path: arc1-ca.pugleaf.net!wupost!cs.utexas.edu!utgpu!cunews!revcan!infotax!ecicrl!ferret.ocunix.on.ca!clewis

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!wupost!cs.utexas.edu!utgpu!cunews!revcan!infotax!ecicrl!ferret.ocunix.on.ca!clewis
From: clewis@ferret.ocunix.on.ca (Chris Lewis)
Newsgroups: comp.sources.bugs,comp.lang.postscript,comp.text,alt.sources
Subject: Official Patch 7 for Psroff 3.0
Message-ID: <2974@ecicrl.ocunix.on.ca>
Date: 5 Jan 92 06:36:14 GMT
Sender: clewis@ferret.ocunix.on.ca
Followup-To: comp.sources.bugs
Organization: Elegant Communications Inc., Ottawa, Canada
Lines: 701