v17i080: PostScript pretty-printers for common languages, etc.
Rich Salz
rsalz at uunet.uu.net
Wed Feb 8 04:41:53 AEST 1989
Submitted-by: Smadi Paradise <rlgvax!smadi>
Posting-number: Volume 17, Issue 80
Archive-name: pps
Pps is a pretty printer for PostScript devices. It handles C, awk, sh,
lisp, mail, PostScript and English; adding more languages is simple.
Pps is almost as fast as plain text-to-PostScript filters, so some
people here use it daily for source-code listing. Most of the work is
done by the printer: Unix just separates the input into tokens, using
different lex(1) programs for each language.
Slide does the same, but ``expands'' the output to fit over a full
page. This is useful for making overhead projection transparencies.
Both pps and slide run on Sun, Vax, Gould, CCI, RT and other BSD
machines; they used to cope with SVR2, but that was a long time ago.
On Paradise
(a guest of) uunet!rlgvax!smadi
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
# READ_ME
# pps.man
# slide.man
# Makefile
# pps.h
# lind.c
# prc.c
# text.c
# awk.l
# c.l
# csh.l
# lisp.l
# mail.l
# ps.l
# sh.l
# pps.sh
# slide.sh
# pps.pro
# slide.pro
# fonts
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'READ_ME'" '(887 characters)'
if test -f 'READ_ME'
then
echo shar: "will not over-write existing file 'READ_ME'"
else
sed 's/^X//' << \SHAR_EOF > 'READ_ME'
XPps is a pretty printer for PostScript devices. It handles C, awk, sh,
Xlisp, mail, PostScript and English; adding more languages is simple.
X
XPps is almost as fast as plain text-to-PostScript filters, so some
Xpeople here use it daily for source-code listing. Most of the work is
Xdone by the printer: Unix just separates the input into tokens, using
Xdifferent lex(1) programs for each language.
X
XSlide does the same, but ``expands'' the output to fit over a full
Xpage. This is useful for making overhead projection transparencies.
X
XBoth pps and slide run on Sun, Vax, Gould, CCI, RT and other BSD
Xmachines; they used to cope with SVR2, but that was a long time ago.
X
XEdit the three first lines in Makefile to reflect your system
Xconventions, then ``make install''.
X
XEnjoy!
X
XOn Paradise, The Hebrew University of Jerusalem, Israel.
Xon at hujics.bitnet on at humus.huji.ac.il ...!mcvax!huji!on
SHAR_EOF
if test 887 -ne "`wc -c < 'READ_ME'`"
then
echo shar: "error transmitting 'READ_ME'" '(should have been 887 characters)'
fi
fi
echo shar: "extracting 'pps.man'" '(2206 characters)'
if test -f 'pps.man'
then
echo shar: "will not over-write existing file 'pps.man'"
else
sed 's/^X//' << \SHAR_EOF > 'pps.man'
X. \"$Header: pps.man,v 0.0 88/06/22 05:22:23 on Rel $
X.TH PPS 1 huji.ac.il
X.if '\*(lb''.ds lb Library
X.if '\*(lg''.ds lg C, awk, csh...
X.if t .ds tm \(tm
X.SH NAME
Xpps \- pretty printer for PostScript
X.SH SYNOPSIS
X.B pps
X[-h header] [-l language] [-s style] [-t tabs] [-v pitch] files
X.SH DESCRIPTION
X.B Pps
Xtranslates its input
X.I files
Xto PostScript\*(tm
Xfor printing on the
XApple LaserWriter\*(tm and similar devices.
XWhen no input files are specified
X(or when a ``-'' is given)
Xthe standard input is read.
X.PP
X.B Pps
Xprints a header at the top of each page,
Xsimilar to the one printed by
X.BR pr(1) .
XThe
X.BI -h " text"
Xflag replaces the file name in the header with
X.IR text .
XSubtitles
Xare printed along the right edge of the page
Xwhenever a new function is declared.
X.PP
XFormatting is language-sensitive:
XThe input language is specified by the
X.BI -l " language"
Xflag
X(default is C, see ``FILES'' below).
X.PP
XSince ``pretty'' is a matter of taste,
Xthere are zillions of flags to modify the output style:
X.IP "\fB-C \fP\fIfont\fP"
XUse
X.I font
Xfor comments (default: New Century Schoolbook Roman).
X.I Font
Xshould be a PostScript name of an available font,
Xor a reasonable abbreviation.
X.IP "\fB-K \fP\fIfont\fP"
XSame, for keywords
X(default: \f(CBCourier-Bold\fP).
X.IP "\fB-S \fP\fIfont\fP"
XSame, for strings and character constant
X(default: \f(COCourier-Oblique\fP).
X.IP "\fB-I \fP\fIfont\fP"
XSame, for the rest of the text (default: \fCCourier\fP).
X.IP "\fB-n \fP\fIn\fP"
Xprints line numbers every \fIn\fPth line (default 10).
X.IP "\fB-t \fP\fIn\fP"
Xsets the tab stops to be
X.I n
Xcharacters wide.
XOn proportional spacing fonts,
Xa character width is taken to be the width of
Xthe letter ``n''
Xof the normal font.
X.IP "\fB-v \fP\fIn\fP"
XSet the vertical pitch to be
X.I n
Xlines per inch
X(default 7).
X.PP
X.IP "\fB-s \fPstyle"
XSource a PostScript program in file
X.I style
Xto override some of the
Xconstants and macros,
Xhence get a different formatting style.
X.SH FILES
X.nf
X\*(lb/{\*(lg} \-
X language sensitive front end processors
X\*(lb/fonts \- list of font names and abbreviations
X.fi
X.SH "SEE ALSO"
Xvgrind(1), pr(1)
X.SH BUGS
X.nf
XFunction declarations are naively detected.
XThere are too many options.
X.fi
SHAR_EOF
if test 2206 -ne "`wc -c < 'pps.man'`"
then
echo shar: "error transmitting 'pps.man'" '(should have been 2206 characters)'
fi
fi
echo shar: "extracting 'slide.man'" '(879 characters)'
if test -f 'slide.man'
then
echo shar: "will not over-write existing file 'slide.man'"
else
sed 's/^X//' << \SHAR_EOF > 'slide.man'
X. \"$Header: slide.man,v 0.0 88/06/22 05:22:41 on Rel $
X.TH SLIDE 1 huji.ac.il
X.if '\*(lb''.ds lb Library
X.if '\*(lg''.ds lg C, awk, csh...
X.if t .ds tm \(tm
X.SH NAME
Xslide \- produce overhead transparencies on a PostScript printer
X.SH SYNOPSIS
X.B slide
X[-l language] [-t tabs] files
X.SH DESCRIPTION
X.B Slide
Xproduces a PostScript\*(tm program that prints
X.I files
Xon the Apple LaserWriter\*(tm and similar devices.
XThe output scale is set
Xso the largest file
Xfits on a single page.
X.PP
XFormatting is language-sensitive:
XThe input language is specified by the
X.BI -l " language"
Xflag
X(default is C, see ``FILES'' below).
X.PP
XThe
X"\fB-t \fP\fIn\fP"
Xflag
Xsets the tab stops to be
X.I n
Xcharacters wide.
X.SH FILES
X.nf
X\*(lb/{\*(lg} \-
X language sensitive front end processors
X.fi
X.SH "SEE ALSO"
Xpps(1), vgrind(1)
X.SH BUGS
X.nf
XSlides full of code may bore your audience to death.
X.fi
SHAR_EOF
if test 879 -ne "`wc -c < 'slide.man'`"
then
echo shar: "error transmitting 'slide.man'" '(should have been 879 characters)'
fi
fi
echo shar: "extracting 'Makefile'" '(1642 characters)'
if test -f 'Makefile'
then
echo shar: "will not over-write existing file 'Makefile'"
else
sed 's/^X//' << \SHAR_EOF > 'Makefile'
X# $Header: Makefile,v 0.0 88/06/22 05:21:37 on Rel $
X# Edit the three lines below to suit your system conventions
XBIN = .
XLIB = .
XCHAP = n
XMAN = /usr/man/man$(CHAP)
X
XLANG = awk c csh lisp mail ps text sh
XAUX = prc
XPRO = *.pro
XFRONT = pps slide
XMANS = pps.$(CHAP) slide.$(CHAP)
XSOURCES = READ_ME *.man Makefile *.h *.c *.l *.sh *.pro fonts
XAR = shar
XARFLG = -a
X
X.SUFFIXES: .$(CHAP) .man
X
X.man.$(CHAP):
X echo .ds lb $(LIB) > $@
X echo $(LANG) | sed 's/ /,/g;s/^/.ds lg /' >> $@
X cat $*.man >> $@
X
X
Xall: $(LANG) $(AUX) $(FRONT) $(MANS)
X
X
Xawk: awk.o lind.o
X $(CC) $(CFLAGS) -o $@ $@.o lind.o -ll
X
Xc: c.o lind.o
X $(CC) $(CFLAGS) -o $@ $@.o lind.o -ll
X
Xcsh: csh.o lind.o
X $(CC) $(CFLAGS) -o $@ $@.o lind.o -ll
X
Xmail: mail.o lind.o
X $(CC) $(CFLAGS) -o $@ $@.o lind.o -ll
X
Xps: ps.o lind.o
X $(CC) $(CFLAGS) -o $@ $@.o lind.o -ll
X
Xsh: sh.o lind.o
X $(CC) $(CFLAGS) -o $@ $@.o lind.o -ll
X
Xtext: text.o lind.o
X $(CC) $(CFLAGS) -o $@ $@.o lind.o -ll
X
Xlisp: lisp.o lind.o
X @echo warning: $@ has no built-ins -- see comment.
X $(CC) $(CFLAGS) -o $@ $@.o lind.o -ll
X
Xawk.o c.o csh.o sh.o lisp.o: pps.h
X
X
Xpps: pps.sh
X sed 's|^lib=.*|lib=$(LIB)|' pps.sh > $@
X chmod 755 $@
X
Xslide: slide.sh
X sed 's|^lib=.*|lib=$(LIB)|' slide.sh > $@
X chmod 755 $@
X
X
Xprc: prc.c
X $(CC) $(CFLAGS) -o $@ prc.c
X
X
Xinstall: $(LIB) $(BIN) $(MAN)
X
X$(LIB): $(LANG) $(AUX) $(PRO) fonts
X -(cd $@; rm -f $(PRO) fonts) || mkdir $@
X cp $(LANG) $(AUX) $(PRO) fonts $@
X
X$(BIN): $(FRONT)
X cp $(FRONT) $@
X
X$(MAN): $(MANS)
X cp $(MANS) $@
X man pps > /dev/null
X man slide > /dev/null
X
X
Xpps.$(AR): $(SOURCES)
X $(AR) $(ARFLG) $(SOURCES) > $@
X
Xclean:
X rm -f $(FRONT) $(LANG) $(AUX) $(MANS) *.o pps.$(AR)
SHAR_EOF
if test 1642 -ne "`wc -c < 'Makefile'`"
then
echo shar: "error transmitting 'Makefile'" '(should have been 1642 characters)'
fi
fi
echo shar: "extracting 'pps.h'" '(400 characters)'
if test -f 'pps.h'
then
echo shar: "will not over-write existing file 'pps.h'"
else
sed 's/^X//' << \SHAR_EOF > 'pps.h'
X/* $Header: pps.h,v 0.0 88/06/22 05:22:20 on Rel $ */
X/*
X * Interface from lex front-end to pps.c
X */
X/*
X * The postscript routines assume that *font is one of the following:
X * I - variables and operators.
X * C - comments
X * S - strings
X * K - keywords
X */
Xextern char *font;
X#define begin(S) (sput(), (BEGIN (S)), font = "S") /* Yech! */
X
X#ifdef ECHO
X#undef ECHO
X#endif
X#define ECHO echo(yytext)
SHAR_EOF
if test 400 -ne "`wc -c < 'pps.h'`"
then
echo shar: "error transmitting 'pps.h'" '(should have been 400 characters)'
fi
fi
echo shar: "extracting 'lind.c'" '(2824 characters)'
if test -f 'lind.c'
then
echo shar: "will not over-write existing file 'lind.c'"
else
sed 's/^X//' << \SHAR_EOF > 'lind.c'
X#ifndef lint
Xstatic char rcsid[] = "$Header: lind.c,v 0.0 88/06/22 05:22:17 on Rel $";
X#endif
X#include <stdio.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X
X/*
X * Language-independent PostScript Interface.
X *
X * Use language dependent yylex() to output Postscript Macros:
X * (string) fname - take string to be the current filename.
X * (string) funct - take string to be the current function name.
X * (string) Font s - put string at current location, using Font.
X * n t - put n tabs
X * n n - put n newlines
X * n f - put n newpages
X */
Xextern char *keywords[]; /* must be defined in lexer */
XFILE *yyin;
XFILE *yyout;
X#define yyoutput(C) putc((C), yyout)
X
Xchar *font = "INITIAL";
Xint bdone; /* a string is being output */
X
X/*
X * Print yytext[], escaping postscript 'dirty' characters.
X * Start a postscript string output sequence, if necessary.
X */
Xecho(cp)
Xregister char *cp;
X{
X if (!*cp)
X return;
X
X if (bdone++ == 0)
X yyoutput('(');
X for (; *cp; cp++)
X switch (*cp) {
X case '(':
X case ')':
X case '\\':
X yyoutput('\\');
X default:
X yyoutput(*cp);
X }
X}
X
X/*
X * Terminate a string output sequence.
X */
Xsput()
X{
X if (bdone == 0)
X return;
X fprintf(yyout, ") %c s ", *font);
X bdone = 0;
X}
X
X/*
X * Output a string of tabs, newlines or formfeeds.
X */
Xspace(s)
Xregister char *s;
X{
X register n, prev;
X char *fmt;
X
X while (*s) {
X for (prev = *s, n = 0; prev == *s; s++, n++)
X ;
X switch (prev) {
X case '\t':
X fmt = "%d t\t";
X break;
X case '\n':
X fmt = "%d n\n";
X break;
X case '\f':
X fmt = "%d f\n";
X break;
X }
X sput();
X fprintf(yyout, fmt, n);
X }
X}
X
X/*
X * Print a subtitle.
X */
Xfunct(s)
Xregister char *s;
X{
X if (!*s)
X return;
X sput();
X echo(s);
X fprintf(yyout, ") funct\n", s);
X bdone = 0;
X}
X/*
X * Is s a keyword?
X */
Xiskw(s)
Xregister char *s;
X{
X register char **kw;
X
X for (kw = &keywords[1]; *kw; kw++) {
X register char *kp = *kw;
X register char *sp = s;
X
X while (*kp == *sp++)
X if (*kp++ == '\0')
X return(kw - keywords);
X }
X return(0);
X}
X
X/*
X * Given a file descriptor, print its modification date.
X */
Xvoid
Xfdate(fd)
Xint fd;
X{
X struct stat st;
X register char *cp;
X extern char *ctime();
X
X if (fstat(fd, &st) < 0 || (st.st_mode & S_IFMT) != S_IFREG)
X time(&st.st_mtime);
X cp = ctime(&st.st_mtime);
X strcpy(&cp[16], &cp[19]);
X fprintf(yyout, "(%.17s) fdate\n", &cp[4]);
X}
X
X/*
X * yyelx() each input file.
X */
Xmain(argc, argv)
Xchar **argv;
X{
X int i;
X
X if (argc == 1) {
X fdate(fileno(yyin = stdin));
X fprintf(yyout, "() fname\n");
X yylex();
X sput();
X }
X for (i = 1; i < argc; i++) {
X if (*argv[i] == '-') {
X yyin = stdin;
X *argv[i] = '\0';
X } else if ((yyin = fopen(argv[i], "r")) == NULL) {
X perror(argv[i]);
X continue;
X }
X
X fdate(fileno(yyin));
X fprintf(yyout, "(%s) fname\n", argv[i]);
X yylex();
X sput();
X if (yyin != stdin)
X fclose(yyin);
X }
X exit(0);
X}
SHAR_EOF
if test 2824 -ne "`wc -c < 'lind.c'`"
then
echo shar: "error transmitting 'lind.c'" '(should have been 2824 characters)'
fi
fi
echo shar: "extracting 'prc.c'" '(1972 characters)'
if test -f 'prc.c'
then
echo shar: "will not over-write existing file 'prc.c'"
else
sed 's/^X//' << \SHAR_EOF > 'prc.c'
X#include <stdio.h>
X
Xchar *wd = "prc";
Xstruct prc {
X int page;
X int row;
X int col;
X};
X
Xstruct prc zero, max;
Xint tab = 8;
X
Xmain(argc, argv)
Xchar **argv;
X{
X int i;
X register FILE *fp;
X
X while (argc > 1 && *argv[1] == '-') {
X switch (argv[1][1]) {
X case 'p':
X case 'r':
X case 'c':
X wd = argv[1]+1;
X break;
X case 't':
X if (tab = atoi(&argv[1][2]))
X break;
X argc--;
X argv++;
X tab = atoi(argv[1]);
X break;
X default:
X fprintf(stderr,
X "Usage: prc [-prc] [-t tab] [files]\n");
X exit(1);
X }
X argc--;
X argv++;
X }
X
X i = 1;
X fp = stdin;
X
X do {
X if (argc > 1 && (fp = fopen(argv[i], "r")) == NULL) {
X perror(argv[i]);
X continue;
X }
X prc1(fp);
X if (argc > 2)
X printf(" %s", argv[i]);
X putchar('\n');
X fclose(fp);
X } while(++i < argc);
X
X if (argc > 2) {
X prprc(&max);
X printf(" maximum\n");
X }
X exit(0);
X}
X
X#define MAX(A, B) ((A) > (B) ? (A) : (B))
X#define ROUND(A, B) ((A + B) / (B) * (B))
X
Xprprc(prcp)
Xstruct prc *prcp;
X{
X register char *wdp = wd;
X
X while (*wdp) switch (*wdp++) {
X case 'p':
X ipr(prcp->page);
X break;
X
X case 'r':
X ipr(prcp->row);
X break;
X
X case 'c':
X ipr(prcp->col);
X break;
X
X }
X}
X
Xipr(num)
Xint num;
X{
X printf(" %7d", num);
X}
X
Xprc1(fp)
XFILE *fp;
X{
X register int c;
X struct prc cur;
X struct prc fil;
X
X cur = zero;
X fil = zero;
X if ((c = getc(fp)) == EOF) {
X prprc(&fil);
X return;
X }
X ungetc(c, fp);
X
X while ((c = getc(fp)) != EOF) {
X switch (c) {
X case '\b':
X if (cur.col > 0)
X cur.col--;
X break;
X case '\f':
X cur.page++;
X fil.row = MAX(cur.row, fil.row);
X cur.row = -1;
X case '\n':
X cur.row++;
X fil.col = MAX(cur.col, fil.col);
X cur.col = 0;
X break;
X case '\t':
X cur.col = ROUND(cur.col, tab);
X break;
X default:
X cur.col++;
X break;
X };
X }
X
X fil.col = MAX(cur.col, fil.col);
X fil.row = MAX(cur.row, fil.row);
X fil.page = cur.page + 1;
X
X prprc(&fil);
X
X max.page = MAX(fil.page, max.page);
X max.row = MAX(fil.row, max.row);
X max.col = MAX(fil.col, max.col);
X}
SHAR_EOF
if test 1972 -ne "`wc -c < 'prc.c'`"
then
echo shar: "error transmitting 'prc.c'" '(should have been 1972 characters)'
fi
fi
echo shar: "extracting 'text.c'" '(1829 characters)'
if test -f 'text.c'
then
echo shar: "will not over-write existing file 'text.c'"
else
sed 's/^X//' << \SHAR_EOF > 'text.c'
X#ifndef lint
Xstatic char rcsid[] = "$Header: text.c,v 0.0 88/06/22 05:22:51 on Rel $";
X#endif
X#include <stdio.h>
X#include <ctype.h>
X#include "pps.h"
X/*
X * "Lexical analizer" for plain text (e.g. the output of nroff(1)):
X * Prints _\b. and .\b_ in italics; c\bc in bold.
X */
XFILE *yyin = stdin;
XFILE *yyout = stdout;
Xchar *keywords[1];
X
Xstatic
Xstruct ca {
X char c; /* character to print */
X char a; /* font to use */
X} ca[BUFSIZ];
X
X#define ITALIC 'S'
X#define NORM 'I'
X#define BOLD 'K'
X
X/*
X * Add character c at position cap.
X */
Xstatic
Xcaput(c, cap)
Xregister c;
Xregister struct ca *cap;
X{
X switch (cap->c) {
X case '_':
X cap->a = ITALIC;
X break;
X case '\0':
X case ' ':
X cap->a = NORM;
X break;
X default:
X switch (c) {
X case '_':
X cap->a = ITALIC;
X return;
X default:
X if (cap->c == c)
X cap->a = BOLD;
X case ' ':
X break;
X }
X }
X cap->c = c;
X}
X
X/*
X * Print text collected so far.
X */
Xstatic
Xcaflush(caend)
Xstruct ca *caend;
X{
X char buf[BUFSIZ];
X register struct ca *cap;
X static struct ca zeroca;
X
X for (cap = ca; cap < caend;) {
X register char *cp = buf;
X
X while (cap < caend && cap->a == *font) {
X *cp++ = cap->c;
X *cap++ = zeroca;
X }
X *cp = '\0';
X echo(buf);
X sput();
X if (cap->a)
X *font = cap->a;
X }
X}
X
X/*
X * Process input text:
X * Call space() for [\t\n\f],
X * Save others in ca.
X */
Xyylex()
X{
X register struct ca *cap = ca;
X static char sp[2];
X
X for (;;) {
X register c;
X
X while (isprint(c = getc(yyin)) || c == ' ')
X caput(c, cap++);
X
X switch (c) {
X default:
X continue;
X case '\b':
X if (cap > ca)
X cap--;
X continue;
X case '\r': /* BUG -- won't work after \t */
X cap = ca;
X continue;
X case '\t':
X case '\n':
X case '\f':
X case EOF:
X break;
X }
X caflush(cap);
X cap = ca;
X if (c == EOF)
X return;
X *sp = c;
X space(sp);
X }
X}
SHAR_EOF
if test 1829 -ne "`wc -c < 'text.c'`"
then
echo shar: "error transmitting 'text.c'" '(should have been 1829 characters)'
fi
fi
echo shar: "extracting 'awk.l'" '(1238 characters)'
if test -f 'awk.l'
then
echo shar: "will not over-write existing file 'awk.l'"
else
sed 's/^X//' << \SHAR_EOF > 'awk.l'
X%{
X#ifndef lint
Xstatic char rcsid[] = "$Header: awk.l,v 0.0 88/06/22 05:21:58 on Rel $";
X#endif
X#include "pps.h"
X#include <ctype.h>
X
Xint nbrace;
X%}
Xletter [A-Za-z_]
Xdigit [0-9]
Xwhite [ \t]
X%Start COMMENT STRING1 STRING2 KEYWORD
X%%
X<INITIAL>{letter}({letter}|{digit})*/{white}*: {
X funct(yytext);
X REJECT;
X }
X<INITIAL>{letter}({letter}|{digit})* {
X int kw = iskw(yytext);
X if (kw)
X begin(KEYWORD);
X ECHO;
X if (kw)
X begin(INITIAL);
X }
X<INITIAL>\" { ECHO; begin(STRING1); }
X<STRING1>\\. { ECHO; }
X<STRING1>\" { begin(INITIAL); ECHO; }
X<INITIAL>~[ \t]*\/ { ECHO; begin(STRING2); }
X<INITIAL>^[ \t]*\/ {
X if (!nbrace) {
X ECHO;
X begin(STRING2);
X } else
X REJECT;
X }
X<STRING2>\\. { ECHO; }
X<STRING2>\/ { begin(INITIAL); ECHO; }
X<INITIAL>\{ { ECHO; nbrace++; }
X<INITIAL>\} { ECHO; nbrace--; }
X<INITIAL>#.* { begin(COMMENT); ECHO; begin(INITIAL); }
X[\t\n\f]+ { space(yytext); }
X. { ECHO; }
X%%
Xchar *keywords[] = {
X "",
X "BEGIN",
X "END",
X "FILENAME",
X "FS",
X "NF",
X "NR",
X "OFMT",
X "OFS",
X "ORS",
X "RS",
X "break",
X "continue",
X "else",
X "exit",
X "exp",
X "for",
X "getline",
X "if",
X "in",
X "int",
X "index",
X "length",
X "log",
X "next",
X "print",
X "printf",
X "split",
X "sprintf",
X "sqrt",
X "substr",
X "while",
X NULL
X};
SHAR_EOF
if test 1238 -ne "`wc -c < 'awk.l'`"
then
echo shar: "error transmitting 'awk.l'" '(should have been 1238 characters)'
fi
fi
echo shar: "extracting 'c.l'" '(1411 characters)'
if test -f 'c.l'
then
echo shar: "will not over-write existing file 'c.l'"
else
sed 's/^X//' << \SHAR_EOF > 'c.l'
X%{
X#ifndef lint
Xstatic char rcsid[] = "$Header: c.l,v 0.0 88/06/22 05:22:01 on Rel $";
X#endif
X#include "pps.h"
X#include <ctype.h>
X
Xint nbrace;
X%}
Xletter [A-Za-z_]
Xdigit [0-9]
Xwhite [ \t]
X%Start COMMENT STRING1 STRING2 KEYWORD
X%%
X<INITIAL>^{white}*{letter}({letter}|{digit})*/{white}*\( {
X register char *cp = yytext;
X if (nbrace == 0) {
X while (isspace(*cp++))
X ;
X funct(--cp);
X }
X REJECT;
X }
X<INITIAL>{letter}({letter}|{digit})* {
X int kw = iskw(yytext);
X if (kw)
X begin(KEYWORD);
X ECHO;
X if (kw)
X begin(INITIAL);
X }
X<INITIAL>\" { begin(STRING1); ECHO; }
X<INITIAL>\' { begin(STRING2); ECHO; }
X<INITIAL>\/\* { begin(COMMENT); ECHO; }
X<STRING1>\\. { ECHO; }
X<STRING2>\\. { ECHO; }
X<STRING1>\" { ECHO; begin(INITIAL); }
X<STRING2>\' { ECHO; begin(INITIAL); }
X<COMMENT>\*\/ { ECHO; begin(INITIAL); }
X[\t\n\f]+ { space(yytext); }
X<INITIAL>\{ { nbrace++; REJECT; }
X<INITIAL>\} { nbrace--; REJECT; }
X. { ECHO; }
X%%
X/*
X * This should better be sorted by frequency.
X */
Xchar *keywords[] = {
X " ",
X "asm",
X "auto",
X "break",
X "case",
X "char",
X "continue",
X "default",
X "define",
X "do",
X "double",
X "else",
X "endif",
X "enum",
X "extern",
X "float",
X "for",
X "fortran",
X "goto",
X "if",
X "ifdef",
X "ifndef",
X "include",
X "int",
X "long",
X "register",
X "return",
X "short",
X "sizeof",
X "static",
X "struct",
X "switch",
X "typedef",
X "undef",
X "union",
X "unsigned",
X "void",
X "while",
X NULL
X};
SHAR_EOF
if test 1411 -ne "`wc -c < 'c.l'`"
then
echo shar: "error transmitting 'c.l'" '(should have been 1411 characters)'
fi
fi
echo shar: "extracting 'csh.l'" '(1574 characters)'
if test -f 'csh.l'
then
echo shar: "will not over-write existing file 'csh.l'"
else
sed 's/^X//' << \SHAR_EOF > 'csh.l'
X%{
X#ifndef lint
Xstatic char rcsid[] = "$Header: csh.l,v 0.0 88/06/22 05:22:04 on Rel $";
X#endif
X#include "pps.h"
X#include <ctype.h>
X
Xint nbrace;
X%}
Xletter [A-Za-z_]
Xdigit [0-9]
Xwhite [ \t]
Xbuiltin [\$\<\*0-9]
X%Start COMMENT STRING1 STRING2 KEYWORD
X%%
X<INITIAL>{letter}({letter}|{digit})*/{white}*: {
X funct(yytext);
X REJECT;
X }
X<INITIAL>{letter}({letter}|{digit})* {
X int kw = iskw(yytext);
X if (kw)
X begin(KEYWORD);
X ECHO;
X if (kw)
X begin(INITIAL);
X }
X<INITIAL>\" { begin(STRING1); ECHO; }
X<INITIAL>\' { begin(STRING2); ECHO; }
X<INITIAL>#.* { begin(COMMENT); ECHO; begin(INITIAL); }
X<STRING1>\\. { ECHO; }
X<STRING2>\\. { ECHO; }
X<STRING1>\" { ECHO; begin(INITIAL); }
X<STRING2>\' { ECHO; begin(INITIAL); }
X<INITIAL>\${builtin} { begin(KEYWORD); ECHO; begin(INITIAL); }
X<STRING1>\${builtin} { begin(KEYWORD); ECHO; begin(STRING1); }
X<INITIAL>\$ { begin(KEYWORD); ECHO; begin(INITIAL); }
X<STRING1>\$ { begin(KEYWORD); ECHO; begin(STRING1); }
X[\t\n\f]+ { space(yytext); }
X. { ECHO; }
X%%
Xchar *keywords[] = {
X "",
X "alias",
X "alloc",
X "break",
X "breaksw",
X "case",
X "cd",
X "chdir",
X "continue",
X "default",
X "echo",
X "else",
X "end",
X "endif",
X "endsw",
X "exec",
X "exit",
X "foreach",
X "glob",
X "goto",
X "history",
X "if",
X "logout",
X "nice",
X "nohup",
X "onintr",
X "repeat",
X "set",
X "setenv",
X "shift",
X "source",
X "switch",
X "then",
X "time",
X "while",
X "umask",
X "unalias",
X "unset",
X "wait",
X "while",
X "@",
X "env",
X "argv",
X "child",
X "home",
X "ignoreeof",
X "noclobber",
X "noglob",
X "nomatch",
X "path",
X "prompt",
X "shell",
X "status",
X "verbose",
X NULL
X};
SHAR_EOF
if test 1574 -ne "`wc -c < 'csh.l'`"
then
echo shar: "error transmitting 'csh.l'" '(should have been 1574 characters)'
fi
fi
echo shar: "extracting 'lisp.l'" '(938 characters)'
if test -f 'lisp.l'
then
echo shar: "will not over-write existing file 'lisp.l'"
else
sed 's/^X//' << \SHAR_EOF > 'lisp.l'
X%{
X#ifndef lint
Xstatic char rcsid[] = "$Header: lisp.l,v 0.0 88/06/22 05:22:11 on Rel $";
X#endif
X#include <ctype.h>
X#include "pps.h"
X
Xint def;
X%}
Xletter [@A-Za-z_\-:\$]
Xdigit [0-9]
Xwhite [ \t]
X%Start COMMENT STRING1 STRING2 KEYWORD
X%%
X<INITIAL>c[ad]+r { begin(KEYWORD); ECHO; begin(INITIAL); }
X<INITIAL>def { def++; REJECT; }
X<INITIAL>{letter}({letter}|{digit})* { /* BUG */
X int kw = iskw(yytext);
X
X if (kw)
X begin(KEYWORD);
X else if (def) {
X funct(yytext);
X def = 0;
X }
X ECHO;
X if (kw)
X begin(INITIAL);
X }
X<INITIAL>\" { begin(STRING1); ECHO; }
X<INITIAL>\# { begin(COMMENT); ECHO; begin(INITIAL); }
X<INITIAL>; { begin(COMMENT); ECHO; begin(INITIAL); }
X<STRING1>\\. { ECHO; }
X<STRING1>\" { ECHO; begin(INITIAL); }
X[\t\n\f]+ { space(yytext); }
X. { ECHO; }
X%%
X/*
X * Your pet lisp dialect has other built-ins than ours;
X * anyway, the list is too long to ship over the net...
X */
Xchar *keywords[] = {
X "",
X NULL
X};
SHAR_EOF
if test 938 -ne "`wc -c < 'lisp.l'`"
then
echo shar: "error transmitting 'lisp.l'" '(should have been 938 characters)'
fi
fi
echo shar: "extracting 'mail.l'" '(476 characters)'
if test -f 'mail.l'
then
echo shar: "will not over-write existing file 'mail.l'"
else
sed 's/^X//' << \SHAR_EOF > 'mail.l'
X%{
X#ifndef lint
Xstatic char rcsid[] = "$Header: mail.l,v 0.0 88/06/22 05:22:14 on Rel $";
X#endif
X#include "pps.h"
X#define KEYWORD INITIAL
X%}
Xfield ^[^ \t:]+:
X%Start COMMENT
X%%
X<INITIAL>{field} {
X begin(KEYWORD);
X ECHO;
X if (!iskw(yytext))
X begin(INITIAL);
X }
X<INITIAL>\n\n+ { begin(COMMENT); REJECT; }
X<COMMENT>^From { begin(INITIAL); REJECT; }
X[\t\n\f]+ { space(yytext); }
X. { ECHO; }
X%%
Xchar *keywords[] = {
X "",
X "Date:",
X "From:",
X "Subject:",
X "To:",
X NULL
X};
SHAR_EOF
if test 476 -ne "`wc -c < 'mail.l'`"
then
echo shar: "error transmitting 'mail.l'" '(should have been 476 characters)'
fi
fi
echo shar: "extracting 'ps.l'" '(3710 characters)'
if test -f 'ps.l'
then
echo shar: "will not over-write existing file 'ps.l'"
else
sed 's/^X//' << \SHAR_EOF > 'ps.l'
X%{
X#ifndef lint
Xstatic char rcsid[] = "$Header: ps.l,v 0.0 88/06/22 05:22:35 on Rel $";
X#endif
X#include "pps.h"
X
Xint nbrace;
X%}
Xnonspecial [^ \t\n\f()<>[\]/]
X%S STRING KEYWORD COMMENT
X%%
X<INITIAL>^\/{nonspecial}+/[ \t]*\{ {
X funct(yytext + 1);
X REJECT;
X }
X<INITIAL>{nonspecial}+ {
X int kw = iskw(yytext);
X if (kw)
X begin(KEYWORD);
X ECHO;
X if (kw)
X begin(INITIAL);
X }
X<INITIAL>\( { begin(STRING); ECHO; }
X<STRING>\\. { ECHO; }
X<STRING>\) { ECHO; begin(INITIAL); }
X<INITIAL>%.* { begin(COMMENT); ECHO; begin(INITIAL); }
X[\t\n\f]+ { space(yytext); }
X. { ECHO; }
X%%
Xchar *keywords[] = {
X "",
X "=",
X "==",
X "VMerror",
X "[",
X "]",
X "abs",
X "add",
X "aload",
X "anchorsearch",
X "and",
X "arc",
X "arcn",
X "arcto",
X "array",
X "ashow",
X "astore",
X "atan",
X "awidthshow",
X "bitshift",
X "bytesavailable",
X "cachestatus",
X "ceiling",
X "charpath",
X "clear",
X "cleartomark",
X "clip",
X "clippath",
X "closefile",
X "closepath",
X "concat",
X "concatmatrix",
X "copy",
X "copypage",
X "cos",
X "count",
X "countdictstack",
X "countexecstack",
X "counttomark",
X "currentcacheparams",
X "currentdash",
X "currentfile",
X "currentflat",
X "currentfont",
X "currentgray",
X "currenthsbcolor",
X "currentlinecap",
X "currentlinejoin",
X "currentlinewidth",
X "currentmatrix",
X "currentmiterlimit",
X "currentpacking",
X "currentpoint",
X "currentrgbcolor",
X "currentscreen",
X "currenttransfer",
X "curveto",
X "cvi",
X "cvlit",
X "cvn",
X "cvr",
X "cvrs",
X "cvs",
X "cvx",
X "def",
X "defaultmatrix",
X "definefont",
X "dict",
X "dictfull",
X "dictstack",
X "dictstackoverflow",
X "dictstackunderflow",
X "div",
X "dtransform",
X "dup",
X "echo",
X "eoclip",
X "eofill",
X "eq",
X "erasepage",
X "exch",
X "exec",
X "execstack",
X "execstackoverflow",
X "executeonly",
X "exit",
X "exp",
X "false",
X "file",
X "fill",
X "findfont",
X "flattenpath",
X "floor",
X "flush",
X "flushfile",
X "for",
X "forall",
X "framedevice",
X "ge",
X "get",
X "getinterval",
X "grestore",
X "grestoreall",
X "gsave",
X "gt",
X "identmatrix",
X "idiv",
X "idtransform",
X "if",
X "ifelse",
X "image",
X "imagemask",
X "index",
X "initclip",
X "initgraphics",
X "initmatrix",
X "interrupt",
X "invalidaccess",
X "invalidexit",
X "invalidfileaccess",
X "invalidfont",
X "invalidrestore",
X "invertmatrix",
X "ioerror",
X "itransform",
X "known",
X "kshow",
X "le",
X "limitcheck",
X "lineto",
X "ln",
X "load",
X "log",
X "loop",
X "lt",
X "makefont",
X "mark",
X "matrix",
X "maxlength",
X "mod",
X "moveto",
X "mul",
X "ne",
X "neg",
X "newpath",
X "nocurrentpoint",
X "not",
X "null",
X "nulldevice",
X "or",
X "packedarray",
X "pathbbox",
X "pathforall",
X "pop",
X "print",
X "prompt",
X "pstack",
X "put",
X "putinterval",
X "quit",
X "rand",
X "rangecheck",
X "rcheck",
X "rcurveto",
X "read",
X "readhexstring",
X "readline",
X "readonly",
X "readstring",
X "repeat",
X "restore",
X "reversepath",
X "rlineto",
X "rmoveto",
X "roll",
X "rotate",
X "round",
X "rrand",
X "run",
X "save",
X "scale",
X "scalefont",
X "search",
X "setcachedevice",
X "setcachelimit",
X "setcacheparams",
X "setcharwidth",
X "setdash",
X "setflat",
X "setfont",
X "setgray",
X "sethsbcolor",
X "setlinecap",
X "setlinejoin",
X "setlinewidth",
X "setmatrix",
X "setmitrlimit",
X "setpacking",
X "setrgbcolor",
X "setscreen",
X "settransfer",
X "show",
X "showpage",
X "sin",
X "sqrt",
X "srand",
X "stack",
X "stackoverflow",
X "stackunderflow",
X "start",
X "status",
X "stop",
X "stopped",
X "store",
X "string",
X "stringwidth",
X "stroke",
X "strokepath",
X "sub",
X "syntaxerror",
X "systemdict",
X "token",
X "transform",
X "translate",
X "true",
X "truncate",
X "type",
X "typecheck",
X "undefined",
X "undefinedfilename",
X "undefinedresult",
X "unmatchedmark",
X "unregistered",
X "userdict",
X "usertime",
X "version",
X "vmstatus",
X "wcheck",
X "where",
X "widthshow",
X "write",
X "writehexstring",
X "writestring",
X "xcheck",
X "xor",
X NULL
X};
SHAR_EOF
if test 3710 -ne "`wc -c < 'ps.l'`"
then
echo shar: "error transmitting 'ps.l'" '(should have been 3710 characters)'
fi
fi
echo shar: "extracting 'sh.l'" '(1261 characters)'
if test -f 'sh.l'
then
echo shar: "will not over-write existing file 'sh.l'"
else
sed 's/^X//' << \SHAR_EOF > 'sh.l'
X%{
X#ifndef lint
Xstatic char rcsid[] = "$Header: sh.l,v 0.0 88/06/22 05:22:38 on Rel $";
X#endif
X#include <ctype.h>
X#include "pps.h"
X
Xint nbrace;
X%}
Xletter [A-Za-z_]
Xdigit [0-9]
Xwhite [ \t]
Xbuiltin [#\*@\-\?\$\!0-9]
X%Start COMMENT STRING1 STRING2 KEYWORD
X%%
X<INITIAL>{letter}({letter}|{digit})* {
X int kw = iskw(yytext);
X if (kw)
X begin(KEYWORD);
X ECHO;
X if (kw)
X begin(INITIAL);
X }
X<INITIAL>\" { begin(STRING1); ECHO; }
X<INITIAL>\' { begin(STRING2); ECHO; }
X<INITIAL>#.* { begin(COMMENT); ECHO; begin(INITIAL); }
X<STRING1>\\. { ECHO; }
X<STRING2>\\. { ECHO; }
X<STRING1>\" { ECHO; begin(INITIAL); }
X<STRING2>\' { ECHO; begin(INITIAL); }
X<INITIAL>\${builtin} { begin(KEYWORD); ECHO; begin(INITIAL); }
X<STRING1>\${builtin} { begin(KEYWORD); ECHO; begin(STRING1); }
X<INITIAL>\$ { begin(KEYWORD); ECHO; begin(INITIAL); }
X<STRING1>\$ { begin(KEYWORD); ECHO; begin(STRING1); }
X[\t\n\f]+ { space(yytext); }
X. { ECHO; }
X%%
Xchar *keywords[] = {
X "",
X "for",
X "in",
X "do",
X "done",
X "case",
X "if",
X "then",
X "else",
X "elif",
X "fi",
X "while",
X "break",
X "cd",
X "chdir",
X "continue",
X "eval",
X "exec",
X "exit",
X "export",
X "read",
X "readonly",
X "set",
X "shift",
X "times",
X "trap",
X "umsak",
X "wait",
X "HOME",
X "IFS",
X "MAIL",
X "PATH",
X "PS1",
X "PS2",
X NULL
X};
SHAR_EOF
if test 1261 -ne "`wc -c < 'sh.l'`"
then
echo shar: "error transmitting 'sh.l'" '(should have been 1261 characters)'
fi
fi
echo shar: "extracting 'pps.sh'" '(1515 characters)'
if test -f 'pps.sh'
then
echo shar: "will not over-write existing file 'pps.sh'"
else
sed 's/^X//' << \SHAR_EOF > 'pps.sh'
Xrcsid='$Header: pps.sh,v 0.0 88/06/22 05:22:29 on Rel $'
X#
X# Argument processor and handshaker for C to postscript pretty printer
X#
Xlib=.
Xusage="Usage: $0 [-C font] [-h heder] [-l lang] [-t tabs] [-v pitch] [files]"
Xinit=ppsinit
Xwhile [ x"$*" != x ]
Xdo
X case $1 in
X -[ICSK])
X: ${2?$usage}
X if font=`grep -w -i $2 $lib/fonts`
X then
X font=`echo $font | sed 's/ .*//'`
X else
X echo ${0}: ${2}: Unknown font 1>&2
X exit 17
X fi
X pos=`echo $1 | sed 's/-//'`
X init="fonts /$pos /$font put $init"
X shift
X ;;
X -h)
X: ${2?$usage}
X header=`echo "$2" | sed 's/[\\()]/\\\&/g'`
X init="/header ($header) def $init"
X shift
X ;;
X -l)
X: ${2?$usage}
X if [ ! -r $lib/$2 ]
X then
X echo ${0}: ${2}: Unknown language 1>&2
X exit 17
X fi
X lang=$2
X shift
X ;;
X -n)
X init="/lineres ${2?$usage} def $init"
X shift;
X ;;
X -p)
X init="/progsize ${2?$usage} def $init"
X shift;
X ;;
X -s)
X if [ ! -r ${2?$usage} ]
X then
X echo ${0}: ${2} unreadable 1>&2
X exit 17
X fi
X shift
X ;;
X -t)
X init="/tabstop ${2?$usage} def $init"
X shift;
X ;;
X -v)
X init="/lpi ${2?$usage} def $init"
X shift;
X ;;
X -?*)
X echo $usage 1>&2
X exit 19
X ;;
X *)
X files="$files $1"
X ;;
X esac
X shift
Xdone
X
Xcat - ${prog-$lib/pps.pro} $style << EOC
X%!PS-Adobe-1.0
X%%Title: ${files-standard input}
X%%Creator: $0 ($rcsid)
X%%CreationDate: `date`
X%%For: ${USER-unknown}@${HOST-`hostname || uuname -l`}
X%%EndComments
XEOC
Xecho $init && ${lib}/${lang=c} $files && echo "%%Trailer
Xppsdone"
SHAR_EOF
if test 1515 -ne "`wc -c < 'pps.sh'`"
then
echo shar: "error transmitting 'pps.sh'" '(should have been 1515 characters)'
fi
chmod +x 'pps.sh'
fi
echo shar: "extracting 'slide.sh'" '(954 characters)'
if test -f 'slide.sh'
then
echo shar: "will not over-write existing file 'slide.sh'"
else
sed 's/^X//' << \SHAR_EOF > 'slide.sh'
Xrcsid='$Header: slide.sh,v 0.0 88/06/22 05:22:48 on Rel $'
X#
X# Argument processor and handshaker for slide maker.
X#
Xusage="usage: ${0} [ -l language ] [ -t tabstop ] files"
Xlib=.
XPATH=/bin:/usr/bin
X
Xwhile [ "$*" ]
Xdo
X case $1 in
X -l)
X if [ ! -r $lib/${2?$usage} ]
X then
X echo ${0}: ${2}: Unknown language 1>&2
X exit 17
X fi
X lang=$2
X shift
X ;;
X -t)
X tab=${2?$usage} ; shift
X ;;
X -*)
X echo $uasge 1>&2
X exit 1
X ;;
X *)
X files="$files $1"
X esac
X shift
Xdone
X
X# Sainity check
X: ${files?"Sorry, cannot read standard input."}
X: ${lang=c}
X: ${tab=8}
Xcolrow=`$lib/prc -cr -t $tab $files | sed -n '$s/[^0-9][^0-9]*/ /gp'`
X
Xcat - ${prog-$lib/slide.pro} $style << EOC
X%!PS-Adobe-1.0
X%%Title: ${files-standard input}
X%%Creator: $0 ($rcsid)
X%%CreationDate: `date`
X%%For: ${USER-unknown}@${HOST-`hostname || uuname -l`}
X%%EndComments
XEOC
Xecho "
X/tabstop $tab def
X$colrow ppsinit
X" && ${lib}/${lang=c} $files && echo "%%Trailer
Xppsdone"
SHAR_EOF
if test 954 -ne "`wc -c < 'slide.sh'`"
then
echo shar: "error transmitting 'slide.sh'" '(should have been 954 characters)'
fi
chmod +x 'slide.sh'
fi
echo shar: "extracting 'pps.pro'" '(4116 characters)'
if test -f 'pps.pro'
then
echo shar: "will not over-write existing file 'pps.pro'"
else
sed 's/^X//' << \SHAR_EOF > 'pps.pro'
X%%$Header: pps.pro,v 0.0 88/06/22 05:22:26 on Rel $
X
X% General macros ( should be builtins :-)
X
X/inch { 72 mul } def
X/min { 2 copy gt { exch } if pop } def
X/max { 2 copy lt { exch } if pop } def
X/curx { currentpoint pop } def
X/cury { currentpoint exch pop } def
X
X% Show a string, right justified, and move to its beginning.
X/rshow { % string
X dup stringwidth pop neg % string width, negative
X dup 0 rmoveto
X exch show
X 0 rmoveto % to beginning of string
X} def
X
X% Commands
X
X/fname { % string fname -
X /filename exch def
X /pageno 0 def
X /lineno 1 def
X 1 f
X} def
X
X/fdate { % string fdate -
X /date exch def
X} def
X
X/funct { % string funct -
X gsave
X C titlesize scalefont setfont
X
X fbase
X dontstep ( ) stringwidth pop sub cury min
X moveto
X 90 rotate
X rshow
X /dontstep curx ( ) stringwidth pop sub def % Yech!
X
X grestore
X} def
X
X/t { % ntabs t -
X {
X curx 1 add
X tabwidth div ceiling
X tabwidth mul
X dup rlimit gt {
X pop
X lcont marshow
X 1 nl
X } {
X cury moveto
X } ifelse
X } repeat
X} def
X
X/nl { % nlines nl - (internal use)
X {
X cury dy add
X dup
X highth neg le {
X pop
X 1 f
X } {
X 0 exch
X moveto
X } ifelse
X } repeat
X} def
X
X% Show a string in margins, if there is enough room.
X/marshow { % string marshow - (internal)
X cury dight add dontstep lt {
X gsave
X
X C setfont
X width cury moveto
X rshow
X /dontstep cury def
X
X grestore
X } if
X} def
X
X/n { % nlines n -
X dup lineno add
X /lineno exch def
X
X nl
X % Bug: does not number blank lines!
X lineres 0 gt {
X lineno lineres mod 0 eq {
X lineno maxline cvs marshow
X } if
X } if
X} def
X
X/np { % npages np - (internal)
X totalpage 0 gt {
X showpage
X } if
X /totalpage totalpage 1 add def
X margin ury translate
X 0 0 moveto
X} def
X
X/f { % npages f -
X {
X np
X /pageno pageno 1 add def
X titleput
X pageno 1 gt {
X lineno maxline cvs marshow
X } if
X } repeat
X} def
X
X/s { % string font s -
X setfont
X
X dup stringwidth pop
X curx add
X rlimit gt {
X lcont marshow
X 1 nl
X } if
X show
X} def
X
X% This is a halfhearted attempt.
X% The ultimate thing is a printf() like specification from argv[].
X/titleput { % - titleput -
X 0 dy 3 mul rmoveto % space for title
X
X C setfont
X date show
X
X C titlesize scalefont setfont
X
X width cury moveto
X pageno maxpage cvs rshow
X
X curx ( ) stringwidth pop sub rlimit min
X cury moveto
X currentdict /header known {
X header
X } {
X filename
X } ifelse rshow
X
X /dontstep cury def
X 0 cury dy 2 mul add moveto
X} def
X
X% Init macro - must be called after definitions are changed.
X
X/ppsinit { % - ppsinit -
X gsave
X
X /dy 1 inch lpi div neg def
X fonts {
X findfont dy neg progsize mul scalefont def
X } forall
X
X % Paper limits
X initclip clippath pathbbox
X /ury exch def
X /urx exch 5 sub def % margin may be set wrong
X /lly exch def
X /llx exch def
X
X % Line numbers are right justified to width.
X % We force a newline when rlimit is exceeded by text.
X /highth ury lly sub dy add def
X /margin llx 1 inch add def
X /width urx margin sub def
X
X % UnderlinePosition or FontBBox may be missing...
X % Measure sizes of things we print in margins.
X C setfont
X /rlimit width maxline stringwidth pop sub def % right limit
X
X newpath 0 0 moveto
X (670) true charpath flattenpath pathbbox
X /dight exch def % digit ht
X pop pop pop
X
X C titlesize scalefont setfont
X newpath 0 0 moveto
X (qypfgj\(\),_) true charpath flattenpath pathbbox
X pop pop exch pop width add
X /fbase exch def % function base
X
X I setfont
X /tabwidth (n) stringwidth pop tabstop mul def
X
X /totalpage 0 def
X
X grestore
X} def
X
X/ppsdone {
X showpage
X} def
X
X% Page style -- may be modified.
X
X/tabstop 8 def % Charcters per tabstop
X/lineres 10 def % Line numbering resolution
X/maxline (9999) def % Maximum lines / file
X/maxpage (999) def % Maximum pages / file
X
X/lpi 7 def % Lines per inch
X/progsize 70 72 div def % Program point size / line spacing
X/titlesize 1.2 def % Title point size / program point size
X
X% Default fonts -- need not be fixed pitch.
X/fonts 4 dict def
Xfonts begin
X /C /NewCenturySchlbk-Roman def % Comments
X /K /Courier-Bold def % Keywords
X /S /Courier-Oblique def % Strings
X /I /Courier def % The rest
Xend
X
X/lcont (\274) def % Line continuation char (ellipsis)
X%%EndProlog
SHAR_EOF
if test 4116 -ne "`wc -c < 'pps.pro'`"
then
echo shar: "error transmitting 'pps.pro'" '(should have been 4116 characters)'
fi
fi
echo shar: "extracting 'slide.pro'" '(2458 characters)'
if test -f 'slide.pro'
then
echo shar: "will not over-write existing file 'slide.pro'"
else
sed 's/^X//' << \SHAR_EOF > 'slide.pro'
X% $Header: slide.pro,v 0.0 88/06/22 05:22:44 on Rel $
X% General macros
X/curx { currentpoint pop } def
X/cury { currentpoint exch pop } def
X/min { 2 copy gt { exch } if pop } def
X/max { 2 copy lt { exch } if pop } def
X
X/vecop {
X% [ v1x v1y ] [ v2x v2y ] { op } vecop [ v1x v2x { op } v1y v2y { op } ]
X 3 1 roll aload pop
X 3 2 roll aload pop
X 3 2 roll
X 5 -1 roll dup 6 1 roll exec
X exch 4 2 roll exch exec
X exch
X [ 3 1 roll ]
X} def
X
X% Automatic stretching
X/pagedim { % - pagedim [ llx lly ] [ urx ury ]
X initclip clippath pathbbox
X [ 3 1 roll ]
X 3 1 roll
X [ 3 1 roll ]
X} def
X
X/ndim { % - ndim [ nx ny ]
X [ I setfont (n) stringwidth pop dy ]
X} def
X
X/stretch { % w h stretch -
X dup
X % How much can we magnify?
X pagedim { sub } vecop margin { sub } vecop % page space
X exch { div } vecop
X aload pop min exch
X % How much can we magnify on rotated page?
X [ pagedim { sub } vecop margin { sub } vecop aload pop exch ]
X exch { div } vecop
X aload pop min exch
X
X gsave
X 2 copy
X gt { % landscape
X pagedim exch pop
X margin [ 2 2 ] { div } vecop { add } vecop
X aload pop translate
X 90 rotate
X pop dup scale
X } { % portrait
X [ pagedim 0 get exch 1 get ]
X margin [ 2 -2 ] { div } vecop { add } vecop
X aload pop translate
X dup scale pop
X } ifelse
X /txfrm matrix currentmatrix def
X grestore
X} def
X
X% pps instructions
X/fname { % string fname -
X /filename exch def
X /pageno 0 def
X 1 f
X} def
X
X/fdate { /date exch def } def
X/funct { pop } def
X
X/t { % ntabs t -
X {
X curx 1 add
X tabwidth div ceiling
X tabwidth mul
X cury moveto
X } repeat
X} def
X
X/n { % nlines n -
X { 0 cury dy sub moveto } repeat
X} def
X
X/f { % npages f -
X {
X totalpage 0 gt {
X showpage
X } if
X /totalpage totalpage 1 add def
X /pageno pageno 1 add def
X } repeat
X
X txfrm setmatrix
X 0 0 moveto
X 1 n
X} def
X
X/s { % string font s -
X setfont
X show
X} def
X
X/ppsinit { % width ht ppsinit -
X fonts {
X findfont ppoints scalefont def
X } forall
X [ 3 1 roll ] ndim { mul } vecop stretch
X /tabwidth ndim 0 get tabstop mul def
X /totalpage 0 def
X} def
X
X/ppsdone { % - ppsdone -
X 1 f
X} def
X
X% Fonts -- should better be fixed pitch.
X/fonts 4 dict def
Xfonts begin
X /C /NewCenturySchlbk-Roman def % Comments
X /K /Courier-Bold def % Keywords
X /S /Courier-Oblique def % Strings
X /I /Courier def % The rest
Xend
X
X% Page parameters
X/margin [ 60 60 ] def % x, y margin in points
X/ppoints 10 def % pointsize -- do not change!
X/dy ppoints def % line spacing, >= ppoints
X/tabstop 8 def % ens per tabstop
X%%EndProlog
SHAR_EOF
if test 2458 -ne "`wc -c < 'slide.pro'`"
then
echo shar: "error transmitting 'slide.pro'" '(should have been 2458 characters)'
fi
fi
echo shar: "extracting 'fonts'" '(1016 characters)'
if test -f 'fonts'
then
echo shar: "will not over-write existing file 'fonts'"
else
sed 's/^X//' << \SHAR_EOF > 'fonts'
X# $Header: fonts,v 0.0 88/06/22 05:22:07 on Rel $
X# Font name aliases for pps
X# Has all LaserWriter+ fonts.
X# PostScript Nicknames
XCourier c
XCourier-Bold cb
XCourier-Oblique co ci
XCourier-BoldObluique cbo cbi cib cob cd
XTimes-Roman t
XTimes-Bold tb
XTimes-Italic to ti
XTimes-BoldItalic tbi tbo tib tob td
XHelvetica h
XHelvetica-Bold hb
XHelvetica-Oblique ho hi
XHelvetica-BoldObluique hbo hbi hib hob hd
XSymbol
XAvantGarde-Book avantgarde ag
XAvantGarde-BookOblique ago ao
XAvantGarde-Demi agb ab
XAvantGrade-DemiOblique agd ad aib abi aob abo
XBookman-Demi bb
XBookman-DemiItalic bd bib bbi bob bbo
XBookman-Light bookman b
XBookman-LightItalic bi bo
XHelvetica-Narrow hn n
XHelvetica-Narrow-Bold hnb nb
XHelvetica-Narrow-Oblique hno hni no ni
XHelvetica-Narrow-BoldOblique hnbo nbo hnd nd hnob nob
XNewCenturySchlbk-Roman newentury schoolbook century ncs ncsr
XNewCenturySchlbk-Bold ncsb
XNewCenturySchlbk-Italic ncsi ncso
XNewCenturySchlbk-BoldItalic ncsni ncsbo ncsd
XZapfChancery-MediumItalic zcmi zc z
XZapfDingbats
SHAR_EOF
if test 1016 -ne "`wc -c < 'fonts'`"
then
echo shar: "error transmitting 'fonts'" '(should have been 1016 characters)'
fi
fi
exit 0
# End of shell archive
--
Please send comp.sources.unix-related mail to rsalz at uunet.uu.net.
More information about the Comp.sources.unix
mailing list