V10/cmd/post.src/post.src.cpio
0707070014231030370407550057030000000000400277220522634650100001100000000000post.src 0707070014230361420407550057030057030000021040140522633073100002000000000000post.src/common 0707070014230361431006440057030057030000011040300522627500500003200000007173post.src/common/request.c /*
*
* Things used to handle special requests (eg. manual feed) globally or on a per
* page basis. Requests are passed through to the translator using the -R option.
* The argument to -R can be "request", "request:page", or "request:page:file".
* If page is omitted (as in the first form) or set to 0 request will be applied
* to the global environment. In all other cases it applies only to the selected
* page. If a file is given, page must be supplied, and the lookup is in that file
* rather than *requestfile.
*
*/
#include <stdio.h>
#include "gen.h" /* general purpose definitions */
#include "request.h" /* a few special definitions */
#include "path.h" /* for the default request file */
Request request[MAXREQUEST]; /* next page or global request */
int nextreq = 0; /* goes in request[nextreq] */
char *requestfile = REQUESTFILE; /* default lookup file */
/*****************************************************************************/
saverequest(want)
char *want; /* grab code for this stuff */
{
char *page; /* and save it for this page */
char *strtok();
/*
*
* Save the request until we get to appropriate page - don't even bother with
* the lookup right now. Format of *want string is "request", "request:page", or
* "request:page:file", and we assume we can change the string here as needed.
* If page is omitted or given as 0 the request will be done globally. If *want
* includes a file, request and page must also be given, and in that case *file
* will be used for the lookup.
*
*/
if ( nextreq < MAXREQUEST ) {
request[nextreq].want = strtok(want, ": ");
if ( (page = strtok(NULL, ": ")) == NULL )
request[nextreq].page = 0;
else request[nextreq].page = atoi(page);
if ( (request[nextreq].file = strtok(NULL, ": ")) == NULL )
request[nextreq].file = requestfile;
nextreq++;
} else error(NON_FATAL, "too many requests - ignoring %s", want);
} /* End of saverequest */
/*****************************************************************************/
writerequest(page, fp_out)
int page; /* write everything for this page */
FILE *fp_out; /* to this file */
{
int i; /* loop index */
/*
*
* Writes out all the requests that have been saved for page. Page 0 refers to
* the global environment and is done during initial setup.
*
*/
for ( i = 0; i < nextreq; i++ )
if ( request[i].page == page )
dumprequest(request[i].want, request[i].file, fp_out);
} /* End of writerequest */
/*****************************************************************************/
dumprequest(want, file, fp_out)
char *want; /* look for this string */
char *file; /* in this file */
FILE *fp_out; /* and write the value out here */
{
char buf[100]; /* line buffer for reading *file */
FILE *fp_in;
/*
*
* Looks for *want in the request file and if it's found the associated value
* is copied to the output file. Keywords (ie. the *want strings) begin an @ in
* the first column of file, while the values (ie. the stuff that's copied to
* the output file) starts on the next line and extends to the next keyword or
* to the end of file.
*
*/
if ( (fp_in = fopen(file, "r")) != NULL ) {
while ( fgets(buf, sizeof(buf), fp_in) != NULL )
if ( buf[0] == '@' && strncmp(want, &buf[1], strlen(want)) == 0 )
while ( fgets(buf, sizeof(buf), fp_in) != NULL )
if ( buf[0] == '#' || buf[0] == '%' )
continue;
else if ( buf[0] != '@' )
fprintf(fp_out, "%s", buf);
else break;
fclose(fp_in);
} /* End if */
} /* End of dumprequest */
/*****************************************************************************/
0707070014230361441006440057030057030000011040150522627500500003200000001035post.src/common/tempnam.c #include <stdio.h>
#include <errno.h>
#if defined(V9) || defined(BSD4_2)
char *tempnam(dir, pfx)
char *dir, *pfx;
{
int pid;
unsigned int len;
char *tnm, *malloc();
static int seq = 0;
pid = getpid();
len = strlen(dir) + strlen(pfx) + 10;
if ((tnm = malloc(len)) != NULL) {
sprintf(tnm, "%s", dir);
if (access(tnm, 7) == -1)
return(NULL);
do {
sprintf(tnm, "%s/%s%d%d", dir, pfx, pid, seq++);
errno = 0;
if (access(tnm, 7) == -1)
if (errno == ENOENT)
return(tnm);
} while (1);
}
return(tnm);
}
#endif
0707070014230361451006440057030057030000011040160522627500500003200000001432post.src/common/request.h /*
*
* Things used to handle special PostScript requests (like manual feed) globally
* or on a per page basis. All the translators I've supplied accept the -R option
* that can be used to insert special PostScript code before the global setup is
* done, or at the start of named pages. The argument to the -R option is a string
* that can be "request", "request:page", or "request:page:file". If page isn't
* given (as in the first form) or if it's 0 in the last two, the request applies
* to the global environment, otherwise request holds only for the named page.
* If a file name is given a page number must be supplied, and in that case the
* request will be looked up in that file.
*
*/
#define MAXREQUEST 30
typedef struct {
char *want;
int page;
char *file;
} Request;
0707070014230361461006440057030057030000011041310522633073100002700000002213post.src/common/path.h /*
*
* pathname definitions for important files and directories.
*
*/
#define DPOST "/usr/lib/postscript/dpost.ps"
#define POSTBGI "/usr/lib/postscript/postbgi.ps"
#define POSTDAISY "/usr/lib/postscript/postdaisy.ps"
#define POSTDMD "/usr/lib/postscript/postdmd.ps"
#define POSTMD "/usr/lib/postscript/postmd.ps"
#define POSTPLOT "/usr/lib/postscript/postplot.ps"
#define POSTPRINT "/usr/lib/postscript/postprint.ps"
#define POSTNPRINT "/usr/lib/postscript/postnprint.ps"
#define POSTTEK "/usr/lib/postscript/posttek.ps"
#define POSTGIF "/usr/lib/postscript/postgif.ps"
#define BASELINE "/usr/lib/postscript/baseline.ps"
#define COLOR "/usr/lib/postscript/color.ps"
#define DRAW "/usr/lib/postscript/draw.ps"
#define FORMFILE "/usr/lib/postscript/forms.ps"
#define SHADEFILE "/usr/lib/postscript/shade.ps"
#define KERNING "/usr/lib/postscript/kerning.ps"
#define REQUESTFILE "/usr/lib/postscript/ps.requests"
#define ROUNDPAGE "/usr/lib/postscript/roundpage.ps"
#define ENCODINGDIR "/usr/lib/postscript"
#define HOSTDIR "/usr/lib/font/postscript"
#define FONTDIR "/usr/lib/font"
#define POSTLIBDIR "/usr/lib/postscript"
#define TEMPDIR "/tmp"
0707070014230357551006400057030057030000011024350522633073100002600000002157post.src/common/gen.h /*
*
* A few definitions that shouldn't have to change. Used by most programs in
* this package.
*
*/
#define PROGRAMVERSION "3.3.2"
#define NON_FATAL 0
#define FATAL 1
#define USER_FATAL 2
#define OFF 0
#define ON 1
#define FALSE 0
#define TRUE 1
#define BYTE 8
#define BMASK 0377
#define POINTS 72.3
#ifndef PI
#define PI 3.141592654
#endif
#define ONEBYTE 0
#define UTFENCODING 1
#define READING ONEBYTE
#define WRITING ONEBYTE
/*
*
* DOROUND controls whether some translators include file ROUNDPAGE (path.h)
* after the prologue. Used to round page dimensions obtained from the clippath
* to know paper sizes. Enabled by setting DOROUND to TRUE (or 1).
*
*/
#define DOROUND TRUE
/*
*
* Default resolution and the height and width of a page (in case we need to get
* to upper left corner) - only used in BoundingBox calculations!!
*
*/
#define DEFAULT_RES 72
#define PAGEHEIGHT 11.0 * DEFAULT_RES
#define PAGEWIDTH 8.5 * DEFAULT_RES
/*
*
* Simple macros.
*
*/
#define ABS(A) ((A) >= 0 ? (A) : -(A))
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define MAX(A, B) ((A) > (B) ? (A) : (B))
0707070014230361501006440057030057030000011040500522627500500002700000007564post.src/common/misc.c /*
*
* General purpose routines.
*
*/
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include "gen.h"
#include "ext.h"
#include "path.h"
int nolist = 0; /* number of specified ranges */
int olist[50]; /* processing range pairs */
/*****************************************************************************/
out_list(str)
char *str;
{
int start, stop;
/*
*
* Grab page ranges from str, save them in olist[], and update the nolist
* count. Range syntax matches nroff/troff syntax.
*
*/
while ( *str && nolist < sizeof(olist) - 2 ) {
start = stop = str_convert(&str, 0);
if ( *str == '-' && *str++ )
stop = str_convert(&str, 9999);
if ( start > stop )
error(FATAL, "illegal range %d-%d", start, stop);
olist[nolist++] = start;
olist[nolist++] = stop;
if ( *str != '\0' ) str++;
} /* End while */
olist[nolist] = 0;
} /* End of out_list */
/*****************************************************************************/
in_olist(num)
int num;
{
int i;
/*
*
* Return ON if num is in the current page range list. Print everything if
* there's no list.
*
*/
if ( nolist == 0 )
return(ON);
for ( i = 0; i < nolist; i += 2 )
if ( num >= olist[i] && num <= olist[i+1] )
return(ON);
return(OFF);
} /* End of in_olist */
/*****************************************************************************/
setencoding(name)
char *name;
{
char path[150];
/*
*
* Include the font encoding file selected by name. It's a full pathname if
* it begins with /, otherwise append suffix ".enc" and look for the file in
* ENCODINGDIR. Missing files are silently ignored.
*
*/
if ( name == NULL )
name = "Default";
if ( *name == '/' )
strcpy(path, name);
else sprintf(path, "%s/%s.enc", ENCODINGDIR, name);
if ( cat(path) == TRUE )
writing = strncmp(name, "UTF", 3) == 0;
} /* End of setencoding */
/*****************************************************************************/
cat(file)
char *file;
{
int fd_in;
int fd_out;
char buf[512];
int count;
/*
*
* Copy *file to stdout. Return FALSE is there was a problem.
*
*/
fflush(stdout);
if ( (fd_in = open(file, O_RDONLY)) == -1 )
return(FALSE);
fd_out = fileno(stdout);
while ( (count = read(fd_in, buf, sizeof(buf))) > 0 )
write(fd_out, buf, count);
close(fd_in);
return(TRUE);
} /* End of cat */
/*****************************************************************************/
str_convert(str, err)
char **str;
int err;
{
int i;
/*
*
* Grab the next integer from **str and return its value or err if *str
* isn't an integer. *str is modified after each digit is read.
*
*/
if ( ! isdigit(**str) )
return(err);
for ( i = 0; isdigit(**str); *str += 1 )
i = 10 * i + **str - '0';
return(i);
} /* End of str_convert */
/*****************************************************************************/
error(kind, mesg, a1, a2, a3)
int kind;
char *mesg;
unsigned a1, a2, a3;
{
/*
*
* Print an error message and quit if kind is FATAL.
*
*/
if ( mesg != NULL && *mesg != '\0' ) {
fprintf(stderr, "%s: ", prog_name);
fprintf(stderr, mesg, a1, a2, a3);
if ( lineno > 0 )
fprintf(stderr, " (line %d)", lineno);
if ( position > 0 )
fprintf(stderr, " (near byte %d)", position);
putc('\n', stderr);
} /* End if */
if ( kind == FATAL && ignore == OFF ) {
if ( temp_file != NULL )
unlink(temp_file);
exit(x_stat | 01);
} /* End if */
} /* End of error */
/*****************************************************************************/
void interrupt(sig)
int sig;
{
/*
*
* Signal handler for translators.
*
*/
if ( temp_file != NULL )
unlink(temp_file);
exit(1);
} /* End of interrupt */
/*****************************************************************************/
0707070014230361511006440057030057030000011040540522627500500002600000002032post.src/common/ext.h /*
*
* External varibles - most are in glob.c.
*
*/
extern char **argv; /* global so everyone can use them */
extern int argc;
extern int x_stat; /* program exit status */
extern int debug; /* debug flag */
extern int ignore; /* what we do with FATAL errors */
extern long lineno; /* line number */
extern long position; /* byte position */
extern char *prog_name; /* and program name - for errors */
extern char *temp_file; /* temporary file - for some programs */
extern char *fontencoding; /* text font encoding scheme */
extern int dobbox; /* enable BoundingBox stuff if TRUE */
extern double pageheight; /* only for BoundingBox calculations! */
extern double pagewidth;
extern int reading; /* input */
extern int writing; /* and output encoding */
extern char *optarg; /* for getopt() */
extern int optind;
extern void interrupt();
extern char *malloc();
extern char *calloc();
extern char *tempnam();
extern char *strtok();
extern long ftell();
extern double atof();
extern double sqrt();
extern double atan2();
0707070014230361521006440057030057030000011040170522627500500002700000001461post.src/common/glob.c /*
*
* Global varibles - for PostScript translators.
*
*/
#include <stdio.h>
#include "gen.h"
char **argv; /* global so everyone can use them */
int argc;
int x_stat = 0; /* program exit status */
int debug = OFF; /* debug flag */
int ignore = OFF; /* what we do with FATAL errors */
long lineno = 0; /* line number */
long position = 0; /* byte position */
char *prog_name = ""; /* and program name - for errors */
char *temp_file = NULL; /* temporary file - for some programs */
char *fontencoding = NULL; /* text font encoding scheme */
int dobbox = FALSE; /* enable BoundingBox stuff if TRUE */
double pageheight = PAGEHEIGHT; /* only for BoundingBox calculations! */
double pagewidth = PAGEWIDTH;
int reading = READING; /* input */
int writing = WRITING; /* and output encoding */
0707070014230361531006440057030057030000011040700522627500500003300000007534post.src/common/comments.h /*
*
* Currently defined file structuring comments from Adobe - plus a few others.
* Ones that end with a colon expect arguments, while those ending with a newline
* stand on their own. Truly overkill on Adobe's part and mine for including them
* all!
*
* All PostScript files should begin with a header that starts with one of the
* following comments.
*
*/
#define NONCONFORMING "%!PS\n"
#define MINCONFORMING "%!PS-Adobe-\n"
#define OLDCONFORMING "%!PS-Adobe-1.0\n"
#define CONFORMING "%!PS-Adobe-2.0\n"
#define CONFORMINGEPS "%!PS-Adobe-2.0 EPS\n"
#define CONFORMINGQUERY "%!PS-Adobe-2.0 Query\n"
#define CONFORMINGEXITSERVER "%!PS-Adobe-2.0 ExitServer\n"
/*
*
* Header comments - immediately follow the appropriate document classification
* comment.
*
*/
#define TITLE "%%Title:"
#define CREATOR "%%Creator:"
#define CREATIONDATE "%%CreationDate:"
#define FOR "%%For:"
#define ROUTING "%%Routing:"
#define BOUNDINGBOX "%%BoundingBox:"
#define PAGES "%%Pages:"
#define REQUIREMENTS "%%Requirements:"
#define DOCUMENTFONTS "%%DocumentFonts:"
#define DOCUMENTNEEDEDFONTS "%%DocumentNeededFonts:"
#define DOCUMENTSUPPLIEDFONTS "%%DocumentSuppliedFonts:"
#define DOCUMENTNEEDEDPROCSETS "%%DocumentNeededProcSets:"
#define DOCUMENTSUPPLIEDPROCSETS "%%DocumentSuppliedProcSets:"
#define DOCUMENTNEEDEDFILES "%%DocumentNeededFiles:"
#define DOCUMENTSUPPLIEDFILES "%%DocumentSuppliedFiles:"
#define DOCUMENTPAPERSIZES "%%DocumentPaperSizes:"
#define DOCUMENTPAPERFORMS "%%DocumentPaperForms:"
#define DOCUMENTPAPERCOLORS "%%DocumentPaperColors:"
#define DOCUMENTPAPERWEIGHTS "%%DocumentPaperWeights:"
#define DOCUMENTPRINTERREQUIRED "%%DocumentPrinterREquired:"
#define ENDCOMMENTS "%%EndComments\n"
#define ENDPROLOG "%%EndProlog\n"
/*
*
* Body comments - can appear anywhere in a document.
*
*/
#define BEGINSETUP "%%BeginSetup\n"
#define ENDSETUP "%%EndSetup\n"
#define BEGINDOCUMENT "%%BeginDocument:"
#define ENDDOCUMENT "%%EndDocument\n"
#define BEGINFILE "%%BeginFile:"
#define ENDFILE "%%EndFile\n"
#define BEGINPROCSET "%%BeginProcSet:"
#define ENDPROCSET "%%EndProcSet\n"
#define BEGINBINARY "%%BeginBinary:"
#define ENDBINARY "%%EndBinary\n"
#define BEGINPAPERSIZE "%%BeginePaperSize:"
#define ENDPAPERSIZE "%%EndPaperSize\n"
#define BEGINFEATURE "%%BeginFeature:"
#define ENDFEATURE "%%EndFeature\n"
#define BEGINEXITSERVER "%%BeginExitServer:"
#define ENDEXITSERVER "%%EndExitServer\n"
#define TRAILER "%%Trailer\n"
/*
*
* Page level comments - usually will occur once per page.
*
*/
#define PAGE "%%Page:"
#define PAGEFONTS "%%PageFonts:"
#define PAGEFILES "%%PageFiles:"
#define PAGEBOUNDINGBOX "%%PageBoundingBox:"
#define BEGINPAGESETUP "%%BeginPageSetup\n"
#define BEGINOBJECT "%%BeginObject:"
#define ENDOBJECT "%%EndObject\n"
/*
*
* Resource requirements - again can appear anywhere in a document.
*
*/
#define INCLUDEFONT "%%IncludeFont:"
#define INCLUDEPROCSET "%%IncludeProcSet:"
#define INCLUDEFILE "%%IncludeFile:"
#define EXECUTEFILE "%%ExecuteFile:"
#define CHANGEFONT "%%ChangeFont:"
#define PAPERFORM "%%PaparForm:"
#define PAPERCOLOR "%%PaperColor:"
#define PAPERWEIGHT "%%PaperWeight:"
#define PAPERSIZE "%%PaperSize:"
#define FEATURE "%%Feature:"
#define ENDOFFILE "%%EOF\n"
#define CONTINUECOMMENT "%%+"
#define ATEND "(atend)"
/*
*
* Some non-standard document comments. Global definitions are occasionally used
* in dpost and are marked by BEGINGLOBAL and ENDGLOBAL. The resulting document
* violates page independence, but can easily be converted to a conforming file
* using a utililty program.
*
*/
#define BEGINSCRIPT "%%BeginScript\n"
#define BEGINGLOBAL "%%BeginGlobal\n"
#define ENDGLOBAL "%%EndGlobal\n"
#define ENDPAGE "%%EndPage:"
#define FORMSPERPAGE "%%FormsPerPage:"
#define VERSION "%%Version:"
0707070014230361541006440057030057030000011041100522627500600002700000012551post.src/common/bbox.c /*
*
* Boundingbox code for PostScript translators. The boundingbox for each page
* is accumulated in bbox - the one for the whole document goes in docbbox. A
* call to writebbox() puts out an appropriate comment, updates docbbox, and
* resets bbox for the next page. The assumption made at the end of writebbox()
* is that we're really printing the current page only if output is now going
* to stdout - a valid assumption for all supplied translators. Needs the math
* library.
*
*/
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <math.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* a few general purpose definitions */
#include "ext.h" /* external variable declarations */
typedef struct bbox {
int set;
double llx, lly;
double urx, ury;
} Bbox;
Bbox bbox = {FALSE, 0.0, 0.0, 0.0, 0.0};
Bbox docbbox = {FALSE, 0.0, 0.0, 0.0, 0.0};
double ctm[6] = {1.0, 0.0, 0.0, 1.0, 0.0, 0.0};
double matrix1[6], matrix2[6];
/*****************************************************************************/
cover(x, y)
double x, y;
{
/*
*
* Adds point (x, y) to bbox. Coordinates are in user space - the transformation
* to default coordinates happens in writebbox().
*
*/
if ( bbox.set == FALSE ) {
bbox.llx = bbox.urx = x;
bbox.lly = bbox.ury = y;
bbox.set = TRUE;
} else {
if ( x < bbox.llx )
bbox.llx = x;
if ( y < bbox.lly )
bbox.lly = y;
if ( x > bbox.urx )
bbox.urx = x;
if ( y > bbox.ury )
bbox.ury = y;
} /* End else */
} /* End of cover */
/*****************************************************************************/
writebbox(fp, keyword, slop)
FILE *fp; /* the comment is written here */
char *keyword; /* the boundingbox comment string */
int slop; /* expand (or contract?) the box a bit */
{
Bbox ubbox; /* user space bounding box */
double x, y;
/*
*
* Transforms the numbers in the bbox[] using ctm[], adjusts the corners a bit
* (depending on slop) and then writes comment. If *keyword is BoundingBox use
* whatever's been saved in docbbox, otherwise assume the comment is just for
* the current page.
*
*/
if ( strcmp(keyword, BOUNDINGBOX) == 0 )
bbox = docbbox;
if ( bbox.set == TRUE ) {
ubbox = bbox;
bbox.set = FALSE; /* so cover() works properly */
x = ctm[0] * ubbox.llx + ctm[2] * ubbox.lly + ctm[4];
y = ctm[1] * ubbox.llx + ctm[3] * ubbox.lly + ctm[5];
cover(x, y);
x = ctm[0] * ubbox.llx + ctm[2] * ubbox.ury + ctm[4];
y = ctm[1] * ubbox.llx + ctm[3] * ubbox.ury + ctm[5];
cover(x, y);
x = ctm[0] * ubbox.urx + ctm[2] * ubbox.ury + ctm[4];
y = ctm[1] * ubbox.urx + ctm[3] * ubbox.ury + ctm[5];
cover(x, y);
x = ctm[0] * ubbox.urx + ctm[2] * ubbox.lly + ctm[4];
y = ctm[1] * ubbox.urx + ctm[3] * ubbox.lly + ctm[5];
cover(x, y);
bbox.llx -= slop + 0.5;
bbox.lly -= slop + 0.5;
bbox.urx += slop + 0.5;
bbox.ury += slop + 0.5;
fprintf(fp, "%s %d %d %d %d\n", keyword, (int)bbox.llx, (int)bbox.lly,(int)bbox.urx, (int)bbox.ury);
bbox = ubbox;
} /* End if */
resetbbox((fp == stdout) ? TRUE : FALSE);
} /* End of writebbox */
/*****************************************************************************/
resetbbox(output)
int output;
{
/*
*
* Adds bbox to docbbox and resets bbox for the next page. Only update docbbox
* if we really did output on the last page.
*
*/
if ( docbbox.set == TRUE ) {
cover(docbbox.llx, docbbox.lly);
cover(docbbox.urx, docbbox.ury);
} /* End if */
if ( output == TRUE ) {
docbbox = bbox;
docbbox.set = TRUE;
} /* End if */
bbox.set = FALSE;
} /* End of resetbbox */
/*****************************************************************************/
scale(sx, sy)
double sx, sy;
{
/*
*
* Scales the default matrix.
*
*/
matrix1[0] = sx;
matrix1[1] = 0;
matrix1[2] = 0;
matrix1[3] = sy;
matrix1[4] = 0;
matrix1[5] = 0;
concat(matrix1);
} /* End of scale */
/*****************************************************************************/
translate(tx, ty)
double tx, ty;
{
/*
*
* Translates the default matrix.
*
*/
matrix1[0] = 1.0;
matrix1[1] = 0.0;
matrix1[2] = 0.0;
matrix1[3] = 1.0;
matrix1[4] = tx;
matrix1[5] = ty;
concat(matrix1);
} /* End of translate */
/*****************************************************************************/
rotate(angle)
double angle;
{
/*
*
* Rotates by angle degrees.
*
*/
angle *= 3.1416 / 180;
matrix1[0] = matrix1[3] = cos(angle);
matrix1[1] = sin(angle);
matrix1[2] = -matrix1[1];
matrix1[4] = 0.0;
matrix1[5] = 0.0;
concat(matrix1);
} /* End of rotate */
/*****************************************************************************/
concat(m1)
double m1[];
{
double m2[6];
/*
*
* Replaces the ctm[] by the result of the matrix multiplication m1[] x ctm[].
*
*/
m2[0] = ctm[0];
m2[1] = ctm[1];
m2[2] = ctm[2];
m2[3] = ctm[3];
m2[4] = ctm[4];
m2[5] = ctm[5];
ctm[0] = m1[0] * m2[0] + m1[1] * m2[2];
ctm[1] = m1[0] * m2[1] + m1[1] * m2[3];
ctm[2] = m1[2] * m2[0] + m1[3] * m2[2];
ctm[3] = m1[2] * m2[1] + m1[3] * m2[3];
ctm[4] = m1[4] * m2[0] + m1[5] * m2[2] + m2[4];
ctm[5] = m1[4] * m2[1] + m1[5] * m2[3] + m2[5];
} /* End of concat */
/*****************************************************************************/
0707070014230361551006440057030057030000011040560522627500600003500000001604post.src/common/pathtemplate /*
*
* pathname definitions for important files and directories.
*
*/
#define DPOST "POSTLIB/dpost.ps"
#define POSTBGI "POSTLIB/postbgi.ps"
#define POSTDAISY "POSTLIB/postdaisy.ps"
#define POSTDMD "POSTLIB/postdmd.ps"
#define POSTMD "POSTLIB/postmd.ps"
#define POSTPLOT "POSTLIB/postplot.ps"
#define POSTPRINT "POSTLIB/postprint.ps"
#define POSTNPRINT "POSTLIB/postnprint.ps"
#define POSTTEK "POSTLIB/posttek.ps"
#define POSTGIF "POSTLIB/postgif.ps"
#define BASELINE "POSTLIB/baseline.ps"
#define COLOR "POSTLIB/color.ps"
#define DRAW "POSTLIB/draw.ps"
#define FORMFILE "POSTLIB/forms.ps"
#define SHADEFILE "POSTLIB/shade.ps"
#define KERNING "POSTLIB/kerning.ps"
#define REQUESTFILE "POSTLIB/ps.requests"
#define ROUNDPAGE "POSTLIB/roundpage.ps"
#define ENCODINGDIR "POSTLIB"
#define HOSTDIR "HOSTDIR"
#define FONTDIR "FONTDIR"
#define POSTLIBDIR "POSTLIB"
#define TEMPDIR "/tmp"
0707070014230357541006400057030057030000011040360522633073100003200000002342post.src/common/common.mk MAKE=/bin/make
MAKEFILE=common.mk
SYSTEM=V9
VERSION=3.3.2
FONTDIR=/usr/lib/font
HOSTDIR=/usr/lib/font/postscript
POSTLIB=/usr/lib/postscript
ROUNDPAGE=TRUE
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS)
LDFLAGS=$(LDFLGS)
all :
install : all
clean :
rm -f *.o
clobber : clean
bbox.o : bbox.c ext.h gen.h
$(CC) $(CFLAGS) -c bbox.c
glob.o : glob.c gen.h
$(CC) $(CFLAGS) -c glob.c
misc.o : misc.c ext.h gen.h path.h
$(CC) $(CFLAGS) -c misc.c
request.o : request.c gen.h path.h request.h
$(CC) $(CFLAGS) -c request.c
rune.o : rune.c rune.h
$(CC) $(CFLAGS) -c rune.c
tempnam.o : tempnam.c
$(CC) $(CFLAGS) -D$(SYSTEM) -c tempnam.c
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^FONTDIR=.*'FONTDIR=$(FONTDIR)'" \
-e "s'^HOSTDIR=.*'HOSTDIR=$(HOSTDIR)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
-e "s'^ROUNDPAGE=.*'ROUNDPAGE=$(ROUNDPAGE)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e 's:"FONTDIR:"$(FONTDIR):' \
-e 's:"HOSTDIR:"$(HOSTDIR):' \
-e 's:"POSTLIB:"$(POSTLIB):' \
pathtemplate >path.h; \
sed \
-e "s'^#define.*DOROUND.*'#define DOROUND $(ROUNDPAGE)'" \
gen.h >Xgen.h; \
mv Xgen.h gen.h
0707070014230361571006440057030057030000011040570522627500600002700000000566post.src/common/rune.h /*
*
* Rune declarations - for supporting UTF encoding.
*
*/
#define RUNELIB 1
#ifdef RUNELIB
typedef unsigned short Rune;
enum
{
UTFmax = 3, /* maximum bytes per rune */
Runesync = 0x21, /* cannot represent part of a utf sequence (<) */
Runeself = 0xA0, /* rune and utf sequences are the same (<) */
Runeerror = 0x80, /* decoding error in utf */
};
#endif
0707070014230361601006440057030057030000011040740522627500600002700000004760post.src/common/rune.c /*
*
* Rune library routines for supporting UTF encoding.
*
*/
#include "rune.h"
#ifdef RUNELIB
enum
{
Char1 = Runeself, Rune1 = Runeself,
Char21 = 0xA1, Rune21 = 0x0100,
Char22 = 0xF6, Rune22 = 0x4016,
Char3 = 0xFC, Rune3 = 0x10000, /* really 0x38E2E */
Esc = 0xBE, Bad = Runeerror,
};
static unsigned char U[256];
static unsigned char T[256];
static
void
mktable()
{
int i, u;
for(i=0; i<256; i++) {
u = i + (0x5E-0xA0);
if(i < 0xA0)
u = i + (0xDF-0x7F);
if(i < 0x7F)
u = i + (0x00-0x21);
if(i < 0x21)
u = i + (0xBE-0x00);
U[i] = u;
T[u] = i;
}
}
int
chartorune(rune, str)
Rune *rune;
char *str;
{
int c, c1, c2;
long l;
if(U[0] == 0)
mktable();
/*
* one character sequence
* 00000-0009F => 00-9F
*/
c = *(unsigned char*)str;
if(c < Char1) {
*rune = c;
return 1;
}
/*
* two character sequence
* 000A0-000FF => A0; A0-FF
*/
c1 = *(unsigned char*)(str+1);
if(c < Char21) {
if(c1 >= Rune1 && c1 < Rune21) {
*rune = c1;
return 2;
}
goto bad;
}
/*
* two character sequence
* 00100-04015 => A1-F5; 21-7E/A0-FF
*/
c1 = U[c1];
if(c1 >= Esc)
goto bad;
if(c < Char22) {
*rune = (c-Char21)*Esc + c1 + Rune21;
return 2;
}
/*
* three character sequence
* 04016-38E2D => A6-FB; 21-7E/A0-FF
*/
c2 = U[*(unsigned char*)(str+2)];
if(c2 >= Esc)
goto bad;
if(c < Char3) {
l = (c-Char22)*Esc*Esc + c1*Esc + c2 + Rune22;
if(l >= Rune3)
goto bad;
*rune = l;
return 3;
}
/*
* bad decoding
*/
bad:
*rune = Bad;
return 1;
}
int
runetochar(str, rune)
char *str;
Rune *rune;
{
long c;
if(T[0] == 0)
mktable();
/*
* one character sequence
* 00000-0009F => 00-9F
*/
c = *rune;
if(c < Rune1) {
str[0] = c;
return 1;
}
/*
* two character sequence
* 000A0-000FF => A0; A0-FF
*/
if(c < Rune21) {
str[0] = Char1;
str[1] = c;
return 2;
}
/*
* two character sequence
* 00100-04015 => A1-F5; 21-7E/A0-FF
*/
if(c < Rune22) {
c -= Rune21;
str[0] = c/Esc + Char21;
str[1] = T[c%Esc];
return 2;
}
/*
* three character sequence
* 04016-38E2D => A6-FB; 21-7E/A0-FF
*/
c -= Rune22;
str[0] = c/(Esc*Esc) + Char22;
str[1] = T[c/Esc%Esc];
str[2] = T[c%Esc];
return 3;
}
int
runelen(c)
long c;
{
Rune rune;
char str[10];
rune = c;
return runetochar(str, &rune);
}
int
fullrune(str, n)
char *str;
int n;
{
int c;
if(n > 0) {
c = *(unsigned char*)str;
if(c < Char1)
return 1;
if(n > 1)
if(c < Char22 || n > 2)
return 1;
}
return 0;
}
#endif RUNELIB
0707070014231030400407550057030057030000020277230522633100400001700000000000post.src/dpost 0707070014231030411006440057030057030000010277240522627500600002600000002711post.src/dpost/README
Troff to PostScript translator. The big change is in the font table
routines. The old binary format and makedev are gone. Troff and dpost
now both read ASCII tables. Translating the ASCII font tables in dpost
(and troff) means some startup overhead. Both programs run a bit slower,
but it's a small price to pay for the added flexibility.
Long PostScript font names can now be included in the font tables.
They should follow the fontname keyword as in,
fontname Times-Roman
The fontname field helps with the DocumentFonts comment, font name
abbreviations (formally required to be in the prologue), and is used
to manage host resident fonts.
dpost can also now calculate a reasonably tight BoundingBox, which
helps picture inclusion. By default the calculations are disabled.
Use the -B option when you BoundingBox and PageBoundingBox comments.
If you're stubborn and always want the comment set dobbox (in file
dpost.c) to TRUE. You'll still need -B to get the the best fit.
Most other changes are bug fixes. Color support has been improved,
and now works with the drawing routines. The different text encoding
schemes are all still in. Level 2 is well tested and is now the default.
For a different default change DFLTENCODING (file dpost.h). Don't make
level 3 the default unless you can live with ragged right margins.
A typical command line would be,
pic file | tbl | eqn | troff -mm | dpost >file.ps
file.ps is PostScript and can be sent directly to a printer.
0707070014231030421006440057030057030000010277400522627500600002700000015654post.src/dpost/color.c /*
*
* Routines that handle color requests passed through as device control commands
* in the form "x X SetColor:red". The following PostScript procedures are needed:
*
* setcolor
*
* mark /color setcolor mark
* mark /color1 /color2 setcolor mark
*
* Called whenever we want to change PostScript's current color graphics
* state parameter. One or two color arguments can be given. In each case
* the colors are looked up in the PostScript colordict dictionary that's
* defined in *colorfile. Two named colors implies reverse video printing
* with the background given in /color2 and the text printed in /color1.
* Unknown colors are mapped into defaults - black for a single color and
* white on black for reverse video.
*
* drawrvbox
*
* leftx rightx drawrvbox -
*
* Fills a box that extends from leftx to rightx with the background color
* that was requested when setcolor set things up for reverse video mode.
* The vertical extent of the box is determined using FontBBox just before
* the first string is printed, and the height remains in effect until
* there's an explicit color change. In otherwords font or size changes
* won't always produce correct result in reverse video mode.
*
* setdecoding
*
* num setdecoding -
*
* Selects the text decoding procedure (ie. what's assigned to PostScript
* procedure t) from the decodingdefs array defined in the prologue. num
* should be the value assigned to variable encoding (in dpost) and will
* remain constant throughout a job, unless special features, like reverse
* video printing, are requested. The text encoding scheme can be set on
* the command line using the -e option. Print time and the size of the
* output file will usually decrease as the value assigned to encoding
* increases.
*
*
* The recognized collection of "x X SetColor:" commands are:
*
* x X SetColor: selects black
* x X SetColor:color selects color
* x X SetColor:color1 on color2 reverse video
* x X SetColor:color1 color2 reverse video again
* x X SetColor:num1 num2 num3 rgb explicit rgb color request
* x X SetColor:num1 num2 num3 hsb explicit hsb color request
*
* In the last three examples num1, num2, and num3 should be numbers between 0 and
* 1 inclusive and are passed on as aguments to the approrpriate PostScript color
* command (eg. setrgbcolor). Unknown color names (ie. the ones that setcolor
* doesn't find in colordict) are mapped into defaults. For one color the default
* is black, while for reverse video it's white text on a black background.
*
* dpost makes sure the current color is maintained across page boundaries, which
* may not be what you want if you're using a macro package like mm that puts out
* page footers and headers. Adding a color request to troff and keeping track of
* the color in each environment may be the best solution.
*
* To get reverse video printing follow the "x X SetColor:" command with two or
* three arguments. "x X SetColor:white on black" or "x X SetColor:white black"
* both produce white text on a black background. Any two colors named in colordict
* (in file *colorfile) can be chosen so "x X SetColor:yellow on blue" also works.
* Each reverse video mode request selects the vertical extent of the background
* box based on the font and size in use just before the first string is printed.
* Font and/or size changes aren't guaranteed to work properly in reverse video
* printing.
*
*/
#include <stdio.h>
#include <ctype.h>
#include "gen.h" /* general purpose definitions */
#include "ext.h" /* external variable definitions */
#define DEFAULTCOLOR "black"
char color[50] = DEFAULTCOLOR; /* current color */
int gotcolor = FALSE; /* TRUE after *colorfile is downloaded */
int wantcolor = FALSE; /* TRUE if we really ask for a color */
/*
*
* All these should be defined in dpost.c.
*
*/
extern int lastend;
extern int encoding;
extern int maxencoding;
extern int realencoding;
extern char *colorfile;
extern FILE *tf;
/*****************************************************************************/
getcolor()
{
/*
*
* Responsible for making sure the PostScript color procedures are downloaded from
* *colorfile. Done at most once per job, and only if the job really uses color.
* For now I've decided not to quit if we can't read the color file.
*
*/
if ( gotcolor == FALSE )
exportfile(colorfile);
if ( tf == stdout )
gotcolor = TRUE;
} /* End of getcolor */
/*****************************************************************************/
newcolor(name)
char *name; /* of the color */
{
char *p; /* next character in *name */
int i; /* goes in color[i] */
/*
*
* Converts *name to lower case and saves the result in color[] for use as the
* current color. The first time something other than DEFAULTCOLOR is requested
* sets wantcolor to TRUE. Characters are converted to lower case as they're put
* in color[] and we quit when we find a newline or get to the end of *name. The
* isupper() test is for Berkley systems.
*
*/
for ( p = name; *p && (*p == ' ' || *p == ':'); p++ ) ;
for ( i = 0; i < sizeof(color) - 1 && *p != '\n' && *p; i++, p++ )
if ( isupper(*p) )
color[i] = tolower(*p);
else color[i] = *p;
if ( i == 0 )
strcpy(color, DEFAULTCOLOR);
else color[i] = '\0';
if ( strcmp(color, DEFAULTCOLOR) != 0 )
wantcolor = TRUE;
} /* End of newcolor */
/*****************************************************************************/
setcolor()
{
int newencoding; /* text encoding scheme that's needed */
char *p; /* for converting what's in color[] */
/*
*
* Sets the color being used by the printer to whatever's stored as the current
* color (ie. the string in color[]). wantcolor is only set to TRUE if we've been
* through newcolor() and asked for something other than DEFAULTCOLOR (probably
* black). While in reverse video mode encoding gets set to maxencoding + 1 in
* dpost and 0 on the printer. Didn't see much point in trying to extend reverse
* video to all the different encoding schemes. realencoding is restored when we
* leave reverse video mode.
*
*/
if ( wantcolor == TRUE ) {
flushtext();
getcolor();
lastend = -1;
newencoding = realencoding;
if ( islower(color[0]) == 0 ) /* explicit rgb or hsb request */
fprintf(tf, "%s\n", color);
else {
putc('/', tf);
for ( p = color; *p && *p != ' '; p++ )
putc(*p, tf);
for ( ; *p && *p == ' '; p++ ) ;
if ( strncmp(p, "on ", 3) == 0 ) p += 3;
if ( *p != '\0' ) {
fprintf(tf, " /%s", p);
newencoding = maxencoding + 1;
} /* End if */
fprintf(tf, " setcolor\n");
} /* End else */
if ( newencoding != encoding ) {
encoding = newencoding;
fprintf(tf, "%d setdecoding\n", encoding);
resetpos();
} /* End if */
} /* End if */
} /* End of setcolor */
/*****************************************************************************/
0707070014231027441006400057030057030000010254600522633100400002700000012240post.src/dpost/dpost.1 .ds dF /usr/lib/font
.ds dQ /usr/lib/postscript
.TH DPOST 1 "DWB 3.2"
.SH NAME
.B dpost
\-
.B troff
postprocessor for PostScript printers
.SH SYNOPSIS
\*(mBdpost\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B dpost
translates
.I files
created by
.BR troff (1)
into PostScript and writes the results on the
standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP
.OP \-m num
Magnify each logical page by the factor
.IR num
(default is 1.0).
Pages are scaled uniformly about the origin,
which is located near the upper left corner of
each page.
.TP
.OP \-n num
Print
.I num
logical pages on each piece of paper,
where
.I num
can be any positive integer.
By default,
.I num
is set to 1.
.TP
.OP \-o list
Print pages whose numbers are given in the comma-separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP mode.
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP
.OP \-w num
Set the line width used to implement
.B troff
graphics commands to
.I num
points, where a point is approximately 1/72
of an inch.
By default
.I num
is set to 0.3 points.
.TP
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed near the
upper left corner of the page, with positive
x to the right and positive y down the page.
Positive
.I num
moves everything right.
The default offset is 0 inches.
.TP
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves text down the page.
The default offset is 0.
.TP
.OP \-B
Include
.MW %%BoundingBox
comments in the output file.
Should only be used when the comments are needed
for picture inclusion.
Output is forced onto an 8.5\(mu11-inch page.
.TP
.OP \-E name
Set the character encoding for text fonts to
.IR name .
Requesting
.I name
means include file
.MI \*(dQ/ name .enc \f1.
A nonexistent encoding file is silently ignored.
There is no default.
.TP
.OP \-F dir
Use
.I dir
as the font directory.
The default
.I dir
is
.MR \*(dF ,
and
.B dpost
reads
.SM ASCII
font files from directory
.MR \*(dF/devpost .
.TP
.OP \-H dir
Use
.I dir
as the host-resident font directory.
A file in
.I dir
that matches the name of the
.B troff
font is assumed to be a host resident font program
and is included in
.B dpost
output.
There is no default.
.TP
.OP \-L \^file
Use
.I file
as the PostScript prologue.
The default is
.MR \*(dQ/dpost.ps .
.TP
.OP \-T name
Use font files for device
.I name
as the best description of available PostScript fonts.
By default,
.I name
is
\*(mBpost\fP
and
.B dpost
reads
.SM ASCII
files from
.MR \*(dF/devpost .
.br
.ne 1i
.PP
Three options allow insertion of arbitrary PostScript
at controlled points in the translation process:
.TP 0.75i
.OP \-C \^file
Copy
.I file
to the output file;
.I file
must contain legitimate PostScript.
.TP
.OP \-P string
Include
.I string
in the output file;
.I string
must be legitimate PostScript.
.TP
.OP \-R action
Requests special
.I action
(e.g.,
.MR manualfeed )
on a per page or global basis.
The
.I action
string can be given as
.IR request \|,
.IM request : page\f1\|,
or
.IM request : page : file\f1\|.
If
.I page
is omitted or given as 0 the request
applies to all pages.
If
.I file
is omitted the request
lookup is done in
.MR \*(dQ/ps.requests .
.PP
All
.I files
should be prepared by
.B troff
for the same device.
Device tables that describe real PostScript fonts that can be
used by
.B dpost
should include
.EX
PDL PostScript
.EE
in their
.SM DESC
file.
Tables that depend on a non-standard character set encoding indicate
that fact by an
.MW Encoding
entry in their
.SM DESC
file.
For example,
.EX
Encoding Latin1
.EE
means include file
.MR \*(dQ/Latin1.enc .
The
.OP \-E
option overrides the
.SM DESC
setting.
.SH EXAMPLES
.PP
A typical command line might be:
.EX
pic \f2files\fP | tbl | eqn | troff -mm | dpost
.EE
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully translated,
while 2 often indicates a syntax error in the input
.IR files .
.SH WARNINGS
.PP
.B dpost
output does not usually conform to Adobe's file-structuring conventions.
Send the output through
.B postreverse
to produce a minimally conforming PostScript file.
.PP
Emulation is expensive and does not always produce satisfactory results.
No attempt has been made to implement the character sets or fonts available
on all devices supported by
.BR troff .
Missing characters are replaced by white space, and unrecognized
fonts default to one of the Times fonts (e.g.,
.MR R ,
.MR I ,
.MR B ,
or
.MR BI ).
.SH FILES
.MW \*(dF/devpost/*
.br
.MW \*(dF/devpost/charlib/*
.br
.MW \*(dQ/dpost.ps
.br
.MW \*(dQ/color.ps
.br
.MW \*(dQ/draw.ps
.br
.MW \*(dQ/forms.ps
.br
.MW \*(dQ/ps.requests
.SH SEE ALSO
.BR buildtables (1),
.BR postio (1),
.BR postprint (1),
.BR postreverse (1),
.BR psencoding (1),
.BR troff (1),
.BR font (5),
.BR troff (5)
0707070014231030441006440057030057030000010300000522627500600002700000130466post.src/dpost/dpost.c /*
*
* dpost - troff post-processor for PostScript printers.
*
* A program that translates output generated by the device independent troff
* into PostScript. Much was borrowed from dimpress and dps (formally dlzw),
* and even though the code has changed, credit has to be given to Richard
* Flood for his early work on the PostScript driver.
*
* The big change is in the font table routines. The old binary format and
* makedev are gone. dpost and troff now read ASCII tables, and both skip
* unrecognized entries in the ASCII tables. That means problems, like where
* to put the real name of the PostScript font, have disappeared. The added
* flexibility means some overhead translating the ASCII tables, but the
* overhead isn't too bad.
*
* dpost can also now calculate a reasonably tight BoundingBox, which helps
* picture inclusion. The calculations, by default, are disabled. Couldn't
* justify the overhead for a comment, particularly one that's only needed
* occasionally. Use the -B option to get the comment.
*
* Output produced by dpost is still nonconforming. Definitions made in pages
* and exported to the job's global environment are the primary problem. It's
* an efficient approach, but means pages are not independent. Violations are
* bracketed by %%BeginGlobal and %%EndGlobal comments and can be pulled into
* the prologue by utility programs (like postreverse) that recognize the new
* comments.
*
* The program handles files formatted for any device, although the best and
* most efficient output is generated when the font and description files
* match PostScript's resident fonts. Emulation is relatively expensive, and
* can produce output files that are more than twice the size of the input
* files.
*
* Several different methods can be used to encode lines of text. What's done
* depends on the value assigned to encoding. Print time should decrease as
* encoding increases (up to MAXENCODING). Setting encoding to 3 (or higher)
* is not normally recommended. It's fast and produces very compact output,
* but rounding errors in troff's width tables can accumulate and lead to a
* ragged right margin. encoding can be changed on the command line using the
* -e option.
*
* PostScript fonts don't support all of troff's characters. Some are built
* by special PostScript procedures in directory *fontdir/devpost/charlib.
* The charlib approach is not meant to replace user defined fonts. It was
* a quick implementation designed to handle characters that aren't used
* often - charlib should not be overused! The charlib lookup is triggered
* when a character in a font table is assigned a code less than 32.
*
* Most defaults are set in the prologue, but can be changed by options. The
* -P option passes arbitrary PostScript into the setup section of the output
* file. It can be used to set (or change) values that can't be accessed by
* other options. For example,
*
* dpost -P'/useclippath false def' file > file.ps
*
* defines useclippath to be false. Everything passed through using the -P
* (-C to copy a file) options become part of the job's global environment.
* Definitions override defaults in the prologue.
*
* dpost expects to find the following procedures in the prologue:
*
* setup
*
* mark ... setup -
*
* Initialization procedure mainly responsible for setting up an
* appropriate coordinate system.
*
* pagesetup
*
* page pagesetup -
*
* Called at the start of each page, immediately after the page
* level save. Argument is the current page number.
*
* setdecoding
*
* num setdecoding -
*
* Select the decoding procedure used to print text strings encoded
* by dpost. num is whatever has been assigned to encoding.
*
* f
*
* size font f -
*
* Set the font and size used for character imaging. The font name
* argument is (normally) the name troff used. Mapping to the real
* PostScript font name is made using the fontname field in the
* ASCII width tables.
*
* m
*
* x y m -
*
* Move to point (x, y). Not used for positioning words in text
* strings.
*
* t
*
* mark text t mark
*
* Everything on the stack (up to the mark) is treated as a line
* of text to be decoded and printed. What's on the stack depends
* on encoding.
*
* w
*
* string x y w -
*
* Print a single word starting at position (x, y). Only used in
* the more complicated encoding schemes, like the ones based on
* widthshow.
*
* done
*
* Make sure the last page prints. Always called, but only needed
* when printing more than one page on each sheet of paper.
*
* output language from troff:
* all numbers are character strings
*
* sn size in points
* fn font as number from 1-n
* cx ascii character x
* Cxyz funny char xyz. terminated by white space
* Hn go to absolute horizontal position n
* Vn go to absolute vertical position n (down is positive)
* hn go n units horizontally (relative)
* vn ditto vertically
* nnc move right nn, then print c (exactly 2 digits!)
* (this wart is an optimization that shrinks output file size
* about 35% and run-time about 15% while preserving ascii-ness)
* Dt ...\n draw operation 't':
* Dl x y line from here by x,y
* Dc d circle of diameter d with left side here
* De x y ellipse of axes x,y with left side here
* Da x1 y1 x2 y2 arc counter-clockwise from current point (x, y) to
* (x + x1 + x2, y + y1 + y2)
* D~ x y x y ... wiggly line by x,y then x,y ...
* nb a end of line (information only -- no action needed)
* b = space before line, a = after
* p new page begins -- set v to 0
* #...\n comment
* x ...\n device control functions:
* x i init
* x T s name of device is s
* x r n h v resolution is n/inch
* h = min horizontal motion, v = min vert
* x p pause (can restart)
* x s stop -- done forever
* x t generate trailer
* x f n s font position n contains font s
* x H n set character height to n
* x S n set slant to N
*
* Subcommands like "i" are often spelled out like "init".
*
*/
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
#include <math.h>
#include <ctype.h>
#include <time.h>
#include "comments.h" /* structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* prologue and a few other files */
#include "ext.h" /* external variable declarations */
#include "font.h" /* font table definitions */
#include "dpost.h" /* a few definitions just used here */
#include "motion.h" /* positioning macros */
char *prologue = DPOST; /* the PostScript prologue */
char *colorfile = COLOR; /* color support */
char *drawfile = DRAW; /* drawing routines */
char *formfile = FORMFILE; /* multiple pages on each sheet */
char *baselinefile = BASELINE; /* for text along curved baseline */
char *fontdir = FONTDIR; /* font table directories */
char *hostfontdir = NULL; /* host resident font directory */
char *realdev = DEVNAME; /* use these width tables */
char devname[20] = ""; /* job formatted for this device */
Fontmap fontmap[] = FONTMAP; /* font translation table - emulation */
char *useencoding = NULL; /* text font encoding - from -E option */
int copies = 1; /* copies of each sheet */
int printed = 0; /* pages processed and printed */
int formsperpage = 1; /* pages on each sheet of paper */
int picflag = ON; /* enable/disable picture inclusion */
int encoding = DFLTENCODING; /* how text is translated to PostScript */
int realencoding = DFLTENCODING; /* where we started */
int maxencoding = MAXENCODING; /* max that users can select */
int landscape = FALSE; /* for BoundingBox calculations only */
double magnification = 1.0;
double xoffset = 0.0;
double yoffset = 0.0;
int smnt; /* special fonts start here */
int devres; /* device resolution */
int unitwidth; /* and unitwidth - from DESC file */
char downloaded[MAXCH+32+ALPHABET]; /* status of charlib characters */
int nfonts = 0; /* number of font positions */
int size = 10; /* current point size */
int font = 0; /* and font position */
int hpos = 0; /* where troff wants to be */
int vpos = 0;
float lastw = 0; /* width of the last input character */
int lastc = 0; /* its name (or index) - for charlib() */
int fontheight = 0; /* points from x H ... */
int fontslant = 0; /* angle from x S ... */
int res; /* resolution assumed in input file */
float widthfac = 1.0; /* for emulation = res/devres */
int lastsize = -1; /* for tracking printer's current size */
int lastfont = -1; /* current font */
float lastx = -1; /* and current position */
int lasty = -1;
int lastend; /* where last character on this line was */
int seenpage = FALSE; /* expect fonts are now all mounted */
int gotspecial = FALSE; /* append special fonts - emulation */
float pointslop = SLOP; /* horizontal error in points */
int slop; /* and machine units */
int rvslop; /* to extend box in reverse video mode */
int textcount = 0; /* strings accumulated so far */
int stringstart = 0; /* where the next one starts */
int spacecount = 0; /* spaces in current string */
Line line[MAXSTACK+3]; /* data about words accumulated so far */
char strings[STRINGSPACE]; /* strings temporarily saved here */
char *strptr; /* next free slot in strings[] */
FILE *tf = NULL; /* most output goes here */
FILE *fp_acct = NULL; /* accounting file */
char *optnames = "a:c:e:m:n:o:p:tw:x:y:A:BC:E:J:F:H:L:OP:R:S:T:DI";
extern int gotcolor; /* read *colorfile when TRUE */
extern Font fonts[]; /* data about every font we see */
extern Font *mount[]; /* troff mounts fonts here */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* Translates output from troff into PostScript. Input files must be formatted
* for the same device. Each input file begins on a new page.
*
*/
argc = agc; /* global so everyone can use them */
argv = agv;
prog_name = argv[0]; /* for error messages */
init_signals(); /* interrupt handling */
header(); /* structuring comments */
options(); /* command line options */
arguments(); /* translate the input files */
done(); /* add trailing comments etc. */
account(); /* job accounting data */
exit(x_stat);
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Make sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch;
int old_optind = optind;
/*
*
* Scan the option list for things needed now (e.g. prologue file), but could
* be changed from defaults. An attempt to follow to Adobe's 2.0 structuring
* conventions.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
setpaths(optarg);
else if ( ch == 'B' )
dobbox = TRUE;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* restored for options() */
fprintf(stdout, "%s", NONCONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
if ( dobbox == TRUE )
fprintf(stdout, "%s %s\n", BOUNDINGBOX, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
if ( DOROUND )
cat(ROUNDPAGE);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch;
extern char *optarg;
extern int optind;
/*
*
* Command line options - there are too many!
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* number of copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'e': /* select the encoding scheme */
if ( (encoding = atoi(optarg)) < 0 || encoding > MAXENCODING )
encoding = DFLTENCODING;
realencoding = encoding;
break;
case 'm': /* magnification */
magnification = atof(optarg);
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
landscape = (*optarg == 'l') ? TRUE : FALSE;
if ( landscape == TRUE )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 't': /* compatibility */
break;
case 'w': /* line width - for drawing */
fprintf(stdout, "/linewidth %s def\n", optarg);
break;
case 'x': /* shift horizontally */
xoffset = atof(optarg);
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* shift vertically */
yoffset = atof(optarg);
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'B': /* enable BoundingBox calculations */
dobbox = TRUE;
fprintf(stdout, "/rotation 1 def\n");
fprintf(stdout, "/gotpagebbox true def\n");
break;
case 'C': /* copy file to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding - override DESC */
useencoding = optarg;
break;
case 'F': /* font table directory */
fontdir = optarg;
break;
case 'H': /* host resident font directory */
hostfontdir = optarg;
break;
case 'L': /* prologue file */
setpaths(optarg); /* already been done in header() */
break;
case 'O': /* disable picture inclusion */
picflag = OFF;
break;
case 'P': /* copy string to output */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* global or page level request */
saverequest(optarg);
break;
case 'S': /* horizontal position error */
if ( (pointslop = atof(optarg)) < 0 )
pointslop = 0;
break;
case 'T': /* target printer */
realdev = optarg;
break;
case 'D': /* debug flag */
debug = ON;
tf = stdout;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't know the option */
error(FATAL, "");
break;
default:
error(FATAL, "missing case for option %c", ch);
break;
} /* End switch */
} /* End while */
argc -= optind;
argv += optind;
} /* End of options */
/*****************************************************************************/
setpaths(name)
char *name;
{
char *path;
/*
*
* Extends the -L option to permit modification of more than just the prologue
* file pathname. Syntax is -Lpath or -Lname:path. For debugging and development
* only!
*
*/
for ( path = name; *path; path++ )
if ( *path == ':' || *path == ' ' ) {
while ( *path == ':' || *path == ' ' ) path++;
break;
} /* End if */
if ( *path == '\0' ) /* didn't find "name:" prefix */
path = name;
if ( path == name || strncmp(name, "prologue", strlen("prologue")) == 0 )
prologue = path;
else if ( strncmp(name, "draw", strlen("draw")) == 0 )
drawfile = path;
else if ( strncmp(name, "color", strlen("color")) == 0 )
colorfile = path;
else if ( strncmp(name, "form", strlen("form")) == 0 )
formfile = path;
else if ( strncmp(name, "baseline", strlen("baseline")) == 0 )
baselinefile = path;
} /* End of setpaths */
/*****************************************************************************/
setup()
{
double t;
/*
*
* Job and BoundingBox initialization. Called once from t_init() - must know
* the resolution before generating the PostScript call to setup. dpost only
* includes an encoding file if it's set in the DESC file or requested with
* the -E option.
*
*/
writerequest(0, stdout); /* global requests e.g. manual feed */
fprintf(stdout, "/resolution %d def\n", res);
if ( useencoding != NULL || fontencoding != NULL )
setencoding((useencoding != NULL) ? useencoding : fontencoding);
fprintf(stdout, "setup\n");
fprintf(stdout, "%d setdecoding\n", realencoding);
if ( formsperpage > 1 ) { /* multiple pages */
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
if ( dobbox == TRUE ) { /* ctm[] - must agree with prologue */
translate(pagewidth/2.0, pageheight/2.0);
if ( landscape == TRUE ) {
rotate(90.0);
t = pagewidth;
pagewidth = pageheight;
pageheight = t;
} /* End if */
translate(-pagewidth/2.0, pageheight/2.0);
translate(72.0 * xoffset, -72.0 * yoffset);
scale(magnification, magnification);
scale(72.0/devres, 72.0/devres);
} /* End if */
} /* End of setup */
/*****************************************************************************/
arguments()
{
FILE *fp;
/*
*
* Everything else is an input file. No arguments or '-' means stdin.
*
*/
if ( argc < 1 )
conv(stdin);
else
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp = stdin;
else if ( (fp = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
conv(fp);
if ( fp != stdin )
fclose(fp);
argc--;
argv++;
} /* End while */
} /* End of arguments */
/*****************************************************************************/
done()
{
int i;
int n;
/*
*
* Force out the last page and add trailing comments.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s %d\n", PAGES, printed);
for ( i = 0, n = 0; i < MAXFONTS+1; i++ )
if ( (fonts[i].flags & USED) && fonts[i].fontname != NULL ) {
if ( n++ == 0 )
fprintf(stdout, "%s", DOCUMENTFONTS);
else if ( (n - 1) % 8 == 0 )
fprintf(stdout, "\n%s", CONTINUECOMMENT);
fprintf(stdout, " %s", fonts[i].fontname);
} /* End if */
if ( n > 0 )
putc('\n', stdout);
if ( dobbox == TRUE )
writebbox(stdout, BOUNDINGBOX, 10);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Accounting record to fp_acct - provided it's not NULL.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
conv(fp)
register FILE *fp;
{
register int c;
int m, n, n1, m1;
char str[50];
/*
*
* Read troff output from file fp and translate it into PostScript. The final
* t_page() call means input files start on a new page.
*
*/
redirect(-1); /* do output only after a page command */
lineno = 1;
while ((c = getc(fp)) != EOF) {
switch (c) {
case '\n': /* just count this line */
lineno++;
break;
case ' ': /* when input is text */
case 0: /* occasional noise creeps in */
break;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
/* two motion digits plus a character */
hmot((c-'0')*10 + getc(fp)-'0');
put1(getc(fp));
break;
case 'c': /* single ascii character */
put1(getc(fp));
break;
case 'C': /* special character */
fscanf(fp, "%s", str);
put1(chindex(str));
break;
case 'N': /* character at position n */
fscanf(fp, "%d", &m);
flushtext();
oput(m);
break;
case 'D': /* drawing functions */
flushtext();
getdraw();
if ( size != lastsize )
t_sf();
switch ((c=getc(fp))) {
case 'p': /* draw a path */
while (fscanf(fp, "%d %d", &n, &m) == 2)
drawline(n, m);
lineno++;
break;
case 'l': /* draw a line */
fscanf(fp, "%d %d %c", &n, &m, &n1);
drawline(n, m);
break;
case 'c': /* circle */
fscanf(fp, "%d", &n);
drawcirc(n);
break;
case 'e': /* ellipse */
fscanf(fp, "%d %d", &m, &n);
drawellip(m, n);
break;
case 'a': /* counter-clockwise arc */
case 'A': /* clockwise arc */
fscanf(fp, "%d %d %d %d", &n, &m, &n1, &m1);
drawarc(n, m, n1, m1, c);
break;
case 'q': /* spline without end points */
drawspline(fp, 1);
lineno++;
break;
case '~': /* wiggly line */
drawspline(fp, 2);
lineno++;
break;
default:
error(FATAL, "unknown drawing function %c", c);
break;
} /* End switch */
break;
case 's': /* use this point size */
fscanf(fp, "%d", &size); /* ignore fractional sizes */
break;
case 'f': /* use font mounted here */
fscanf(fp, "%s", str);
setfont(t_font(str));
break;
case 'H': /* absolute horizontal motion */
fscanf(fp, "%d", &n);
hgoto(n);
break;
case 'h': /* relative horizontal motion */
fscanf(fp, "%d", &n);
hmot(n);
break;
case 'w': /* word space */
break;
case 'V': /* absolute vertical position */
fscanf(fp, "%d", &n);
vgoto(n);
break;
case 'v': /* relative vertical motion */
fscanf(fp, "%d", &n);
vmot(n);
break;
case 'p': /* new page */
fscanf(fp, "%d", &n);
t_page(n);
break;
case 'n': /* end of line */
while ( (c = getc(fp)) != '\n' && c != EOF ) ;
hgoto(0);
lineno++;
break;
case '#': /* comment */
while ( (c = getc(fp)) != '\n' && c != EOF ) ;
lineno++;
break;
case 'x': /* device control function */
devcntrl(fp);
lineno++;
break;
default:
error(FATAL, "unknown input character %o %c", c, c);
done();
} /* End switch */
} /* End while */
t_page(-1); /* print the last page */
flushtext();
} /* End of conv */
/*****************************************************************************/
devcntrl(fp)
FILE *fp;
{
char str[50], buf[256], str1[100];
int c, n;
/*
*
* Interpret device control commands, ignoring any we don't recognize. The
* "x X ..." commands are a device dependent collection generated by troff's
* \X'...' request.
*
*/
fscanf(fp, "%s", str);
switch ( str[0] ) {
case 'f': /* load font in a position */
fscanf(fp, "%d %s", &n, str);
fgets(buf, sizeof buf, fp); /* in case there's a filename */
ungetc('\n', fp); /* fgets() goes too far */
str1[0] = '\0'; /* in case there's nothing to come in */
sscanf(buf, "%s", str1);
loadfont(n, str, str1);
break;
case 'i': /* initialize */
t_init();
break;
case 'p': /* pause */
break;
case 'r': /* resolution assumed when prepared */
fscanf(fp, "%d", &res);
break;
case 's': /* stop */
case 't': /* trailer */
flushtext();
break;
case 'H': /* char height */
fscanf(fp, "%d", &n);
t_charht(n);
break;
case 'S': /* slant */
fscanf(fp, "%d", &n);
t_slant(n);
break;
case 'T': /* device name */
fscanf(fp, "%s", devname);
break;
case 'X': /* copy through - from troff */
fscanf(fp, " %[^: \n]:", str);
fgets(buf, sizeof(buf), fp);
ungetc('\n', fp);
if ( strcmp(str, "PI") == 0 || strcmp(str, "PictureInclusion") == 0 )
picture(buf);
else if ( strcmp(str, "InlinePicture") == 0 )
inlinepic(fp, buf);
else if ( strcmp(str, "BeginPath") == 0 )
beginpath(buf, FALSE);
else if ( strcmp(str, "DrawPath") == 0 )
drawpath(buf, FALSE);
else if ( strcmp(str, "BeginObject") == 0 )
beginpath(buf, TRUE);
else if ( strcmp(str, "EndObject") == 0 )
drawpath(buf, TRUE);
else if ( strcmp(str, "NewBaseline") == 0 )
newbaseline(buf);
else if ( strcmp(str, "DrawText") == 0 )
drawtext(buf);
else if ( strcmp(str, "SetText") == 0 )
settext(buf);
else if ( strcmp(str, "SetColor") == 0 ) {
newcolor(buf);
setcolor();
} else if ( strcmp(str, "INFO") == 0 ) {
flushtext();
fprintf(tf, "%%INFO%s", buf);
} else if ( strcmp(str, "PS") == 0 || strcmp(str, "PostScript") == 0 ) {
flushtext();
fprintf(tf, "%s", buf);
} else if ( strcmp(str, "ExportPS") == 0 ) { /* dangerous!! */
if ( tf == stdout ) {
restore();
fprintf(tf, "%s", buf);
save();
} /* End if */
} /* End else */
break;
} /* End switch */
while ( (c = getc(fp)) != '\n' && c != EOF ) ;
} /* End of devcntrl */
/*****************************************************************************/
loadfont(m, f, name)
int m;
char *f;
char *name;
{
char path[150];
/*
*
* Load position m with font f. Font file pathname is *fontdir/dev*realdev/*f
* or name, if name isn't empty. Use mapfont() to replace the missing font
* if we're emulating another device, name is empty, and the first mount
* fails.
*
*/
if ( name[0] == '\0' )
sprintf(path, "%s/dev%s/%s", fontdir, realdev, f);
else sprintf(path, "%s", name);
if ( mountfont(path, m) == -1 ) {
if ( name[0] == '\0' ) {
sprintf(path, "%s/dev%s/%s", fontdir, realdev, mapfont(f));
if ( mountfont(path, m) == -1 ) {
sprintf(path, "%s/dev%s/%s", fontdir, realdev, f);
error(FATAL, "can't load %s at %d", path, m);
} /* End if */
} else error(FATAL, "can't load %s at %d", path, m);
} /* End if */
if ( smnt == 0 && mount[m]->specfont )
smnt = m;
if ( m == lastfont ) /* force a call to t_sf() */
lastfont = -1;
if ( m > nfonts ) { /* got more positions */
nfonts = m;
gotspecial = FALSE;
} /* End if */
} /* End of loadfont */
/*****************************************************************************/
char *mapfont(name)
char *name;
{
int i;
/*
*
* Map a missing font name into one that should be available. Only used when
* we're emulating another device and the first mount fails. Consider deleting
* this routine.
*
*/
for ( i = 0; fontmap[i].name != NULL; i++ )
if ( strcmp(name, fontmap[i].name) == 0 )
return(fontmap[i].use);
switch ( *++name ) {
case 'I': return("I");
case 'B': return("B");
case 'X': return("BI");
default: return("R");
} /* End switch */
} /* End of mapfont */
/*****************************************************************************/
loadspecial()
{
/*
*
* Fix - later.
*
*/
gotspecial = TRUE;
} /* End of loadspecial */
/*****************************************************************************/
t_init()
{
char path[150];
static int initialized = FALSE;
/*
*
* Finish initialization - just read an "x init" command. Assumes we already
* know the input file resolution.
*
*/
flushtext(); /* moved - for cat'ed troff files */
if ( initialized == FALSE ) {
if ( strcmp(devname, realdev) ) {
sprintf(path, "%s/dev%s/DESC", fontdir, devname);
if ( checkdesc(path) )
realdev = devname;
} /* End if */
sprintf(path, "%s/dev%s/DESC", fontdir, realdev);
if ( getdesc(path) == -1 )
error(FATAL, "can't open %s", path);
nfonts = 0;
gotspecial = FALSE;
widthfac = (float) res /devres;
slop = pointslop * res / POINTS + .5;
rvslop = res * .025;
setup();
initialized = TRUE;
} /* End if */
hpos = vpos = 0;
size = 10;
reset();
} /* End of t_init */
/*****************************************************************************/
t_page(pg)
int pg;
{
static int lastpg = 0;
/*
*
* Finish the previous page and get ready for the next one. End page output
* goes to /dev/null at the start of each input file. Start page output goes
* to /dev/null at the end of each input file.
*
* Consider doing showpage after page level restore (as Adobe recommends). If
* the order is changed use restore() and save(). forms.ps will likely also
* need fixing.
*
*/
if ( tf == stdout )
printed++;
flushtext(); /* just in case */
fprintf(tf, "cleartomark\n");
fprintf(tf, "showpage\n");
fprintf(tf, "saveobj restore\n");
if ( dobbox == TRUE )
writebbox(tf, PAGEBOUNDINGBOX, 10);
fprintf(tf, "%s %d %d\n", ENDPAGE, lastpg, printed);
redirect(pg);
fprintf(tf, "%s %d %d\n", PAGE, pg, printed+1);
if ( dobbox == TRUE )
fprintf(tf, "%s %s\n", PAGEBOUNDINGBOX, ATEND);
fprintf(tf, "/saveobj save def\n");
fprintf(tf, "mark\n");
writerequest(printed+1, tf);
fprintf(tf, "%d pagesetup\n", printed+1);
if ( encoding != realencoding )
fprintf(tf, "%d setdecoding\n", encoding);
if ( gotcolor == TRUE )
setcolor();
lastpg = pg; /* for the next ENDPAGE comment */
hpos = vpos = 0; /* get ready for the next page */
reset(); /* force position and font stuff - later */
seenpage = TRUE;
} /* End of t_page */
/*****************************************************************************/
t_font(s)
char *s;
{
int n;
/*
*
* Converts the string *s into an integer and checks to make sure it's a legal
* font position. Also arranges to mount all the special fonts after the last
* legitimate font (by calling loadspecial()), provided it hasn't already been
* done.
*
*/
n = atoi(s);
if ( seenpage == TRUE ) {
if ( n < 0 || n > nfonts )
error(FATAL, "illegal font position %d", n);
if ( gotspecial == FALSE )
loadspecial();
} /* End if */
return(n);
} /* End of t_font */
/*****************************************************************************/
setfont(m)
int m;
{
/*
*
* Use the font mounted at position m. Bounds checks are probably unnecessary.
* Changing the font and size used by the printer is handled in t_sf().
*
*/
if ( m < 0 || m > MAXFONTS )
error(FATAL, "illegal font %d", m);
font = m;
} /* End of setfont */
/*****************************************************************************/
t_sf()
{
Font *fpos;
char temp[150];
/*
*
* Force a new font or size. Generates name definitions for fonts that haven't
* been named, grabs host resident font files and keeps track of the fonts used
* by this job. When necessary also adjusts the font's height and slant. Should
* only be called immediately before printing a character.
*
*/
if ( tf == stdout && mounted(font) ) {
flushtext();
fpos = mount[font];
if ( (fpos->flags & USED) == 0 ) {
if ( (fpos->flags & NAMED) == 0 && fpos->fontname != NULL ) {
sprintf(temp, "/%s /%s def\n", fpos->name, fpos->fontname);
exportstring(temp);
fpos->flags |= NAMED; /* unnecessary */
} /* End if */
if ( hostfontdir != NULL ) {
sprintf(temp, "%s/%s", hostfontdir, fpos->name);
exportfile(temp);
} /* End if */
} /* End if */
fprintf(tf, "%d %s f\n", size, fpos->name);
if ( fontheight != 0 || fontslant != 0 )
fprintf(tf, "%d %d changefont\n", fontslant, (fontheight != 0) ? fontheight : size);
lastfont = font;
lastsize = size;
fpos->flags |= USED;
} /* End if */
} /* End of t_sf */
/*****************************************************************************/
t_charht(n)
int n;
{
/*
*
* Set character height to n points. Disabled if n is 0 or the current size.
*
*/
fontheight = (n == size) ? 0 : n;
lastfont = -1;
} /* End of t_charht */
/*****************************************************************************/
t_slant(n)
int n;
{
/*
*
* Set slant to n degrees. Disable slanting if n is 0.
*
*/
fontslant = n;
lastfont = -1;
} /* End of t_slant */
/*****************************************************************************/
xymove(x, y)
int x, y;
{
/*
*
* Make the the printer and post-processor agree about the current position.
*
*/
flushtext();
hgoto(x);
vgoto(y);
fprintf(tf, "%d %d m\n", hpos, vpos);
lastx = hpos;
lasty = vpos;
} /* End of xymove */
/*****************************************************************************/
put1(c)
register int c;
{
register int i;
register int j;
register int k;
int code;
int ofont;
/*
*
* Print character c. ASCII if c < ALPHABET, otherwise it's special. Look for
* c in the current font, then in others starting at the first special font.
* Save c in lastc so it's available when oput() runs. Restore original font
* before leaving.
*
*/
lastc = c; /* charlib() needs name not code */
if ( (c -= 32) <= 0 )
return;
k = ofont = font;
if ( (i = onfont(lastc, k)) == -1 && smnt > 0 )
for ( k = smnt, j = 0; j < nfonts; j++, k = k % nfonts + 1 ) {
if ( (i = onfont(lastc, k)) != -1 ) {
setfont(k);
break;
} /* End if */
} /* End for */
if ( i != -1 && (code = mount[k]->wp[i].code) != 0 ) {
lastw = widthfac * (((int)mount[k]->wp[i].wid * size + unitwidth/2) / unitwidth);
oput(code);
} /* End if */
if ( font != ofont )
setfont(ofont);
} /* End of put1 */
/*****************************************************************************/
oput(c)
int c;
{
double llx, lly, urx, ury; /* boundingbox corners */
/*
*
* Arranges to print the character whose code is c in the current font. All the
* actual positioning is done here, in charlib(), or in the drawing routines.
*
*/
if ( textcount > MAXSTACK ) /* don't put too much on the stack? */
flushtext();
if ( font != lastfont || size != lastsize )
t_sf();
if ( vpos != lasty )
endline();
starttext();
if ( ABS(hpos - lastx) > slop )
endstring();
if ( isascii(c) && isprint(c) )
switch ( c ) {
case '(':
case ')':
case '\\':
addchar('\\');
default:
addchar(c);
} /* End switch */
else if ( c > 040 )
addoctal(c);
else charlib(c);
if ( dobbox == TRUE ) {
llx = lastx;
lly = -(vpos + 0.5 * (devres * size / 72.0));
urx = lastx + lastw;
ury = -(vpos - (devres * size / 72.0));
cover(llx, lly);
cover(urx, ury);
} /* End if */
lastx += lastw;
} /* End of oput */
/*****************************************************************************/
starttext()
{
/*
* Called whenever we want to be sure we're ready to start collecting characters
* for the next call to PostScript procedure t (ie. the one that prints them). If
* textcount is positive we've already started, so there's nothing to do. The more
* complicated encoding schemes save text strings in the strings[] array and need
* detailed information about the strings when they're written to the output file
* in flushtext().
*
*/
if ( textcount < 1 ) {
switch ( encoding ) {
case 0:
case 1:
putc('(', tf);
break;
case 2:
case 3:
strptr = strings;
spacecount = 0;
line[1].str = strptr;
line[1].dx = 0;
line[1].spaces = 0;
line[1].start = hpos;
line[1].width = 0;
break;
case MAXENCODING+1: /* reverse video */
if ( lastend == -1 )
lastend = hpos;
putc('(', tf);
break;
case MAXENCODING+2: /* follow a funny baseline */
putc('(', tf);
break;
} /* End switch */
textcount = 1;
lastx = stringstart = hpos;
} /* End if */
} /* End of starttext */
/*****************************************************************************/
flushtext()
{
int i;
/*
*
* Generates a call to the PostScript procedure that processes all the text we've
* accumulated - provided textcount is positive.
*
*/
if ( textcount > 0 ) {
switch ( encoding ) {
case 0:
fprintf(tf, ")%d t\n", stringstart);
break;
case 1:
fprintf(tf, ")%d %d t\n", stringstart, lasty);
break;
case 2:
*strptr = '\0';
line[textcount].width = lastx - line[textcount].start;
if ( spacecount != 0 || textcount != 1 ) {
for ( i = textcount; i > 0; i-- )
fprintf(tf, "(%s)%d %d", line[i].str, line[i].spaces, line[i].width);
fprintf(tf, " %d %d %d t\n", textcount, stringstart, lasty);
} else fprintf(tf, "(%s)%d %d w\n", line[1].str, stringstart, lasty);
break;
case 3:
*strptr = '\0';
if ( spacecount != 0 || textcount != 1 ) {
for ( i = textcount; i > 0; i-- )
fprintf(tf, "(%s)%d", line[i].str, line[i].dx);
fprintf(tf, " %d %d %d t\n", textcount, stringstart, lasty);
} else fprintf(tf, "(%s)%d %d w\n", line[1].str, stringstart, lasty);
break;
case MAXENCODING+1:
fprintf(tf, ")%d ", stringstart);
fprintf(tf, "%d %d drawrvbox ", lastend - rvslop, (int)(lastx + .5) + rvslop);
fprintf(tf, "t\n", stringstart);
lastend = (lastx + .5) + 2 * rvslop;
break;
case MAXENCODING+2:
fprintf(tf, ")%d %d t\n", stringstart, lasty);
break;
} /* End switch */
} /* End if */
textcount = 0;
} /* End of flushtext */
/*****************************************************************************/
endstring()
{
int dx;
/*
*
* Horizontal positions are out of sync. End the last open string, adjust the
* printer's position, and start a new string. Assumes we've already started
* accumulating text.
*
*/
switch ( encoding ) {
case 0:
case 1:
fprintf(tf, ")%d(", stringstart);
textcount++;
lastx = stringstart = hpos;
break;
case 2:
case 3:
dx = hpos - lastx;
if ( spacecount++ == 0 )
line[textcount].dx = dx;
if ( line[textcount].dx != dx ) {
*strptr++ = '\0';
line[textcount].width = lastx - line[textcount].start;
line[++textcount].str = strptr;
*strptr++ = ' ';
line[textcount].dx = dx;
line[textcount].start = lastx;
line[textcount].width = 0;
line[textcount].spaces = 1;
} else {
*strptr++ = ' ';
line[textcount].spaces++;
} /* End else */
lastx += dx;
break;
case MAXENCODING+1:
fprintf(tf, ")%d(", stringstart);
textcount++;
lastx = stringstart = hpos;
break;
case MAXENCODING+2:
flushtext();
starttext();
break;
} /* End switch */
} /* End of endstring */
/*****************************************************************************/
endline()
{
/*
*
* The vertical position has changed. Dump any accumulated text, then adjust
* the printer's vertical position.
*
*/
flushtext();
if ( encoding == 0 || encoding == MAXENCODING+1 )
fprintf(tf, "%d %d m\n", hpos, vpos);
lastx = stringstart = lastend = hpos;
lasty = vpos;
} /* End of endline */
/*****************************************************************************/
addchar(c)
int c;
{
/*
*
* Does whatever is needed to add character c to the current string.
*
*/
switch ( encoding ) {
case 0:
case 1:
putc(c, tf);
break;
case 2:
case 3:
*strptr++ = c;
break;
case MAXENCODING+1:
case MAXENCODING+2:
putc(c, tf);
break;
} /* End switch */
} /* End of addchar */
/*****************************************************************************/
addoctal(c)
int c;
{
/*
*
* Add c to the current string as an octal escape.
*
*/
switch ( encoding ) {
case 0:
case 1:
fprintf(tf, "\\%o", c);
break;
case 2:
case 3:
sprintf(strptr, "\\%o", c);
strptr += strlen(strptr);
break;
case MAXENCODING+1:
case MAXENCODING+2:
fprintf(tf, "\\%o", c);
break;
} /* End switch */
} /* End of addoctal */
/*****************************************************************************/
charlib(code)
int code; /* either 1 or 2 */
{
char *name; /* name of the character */
char tname[10]; /* in case it's a single ASCII character */
char temp[150];
/*
*
* Called from oput() for characters having codes less than 040. Special files
* that define PostScript procedures for certain characters can be found in
* directory *fontdir/devpost/charlib. If there's a file that has the same name as
* the character we're trying to print it's copied to the output file, otherwise
* nothing, except some positioning, is done.
*
* All character definitions are only made once. Subsequent requests to print the
* character generate a call to a procedure that begins with the prefix build_ and
* ends with the character's name. Special characters that are assigned codes
* other than 1 are assumed to have additional data files that should be copied
* to the output file immediately after the build_ call. Those data files should
* end in the suffix .map, and usually will be a hex representation of a bitmap.
*
*/
flushtext();
if ( lastc < ALPHABET ) { /* ASCII character */
sprintf(tname, "%.3o", lastc);
name = tname;
} else name = chname(lastc);
if ( downloaded[lastc] == 0 ) {
sprintf(temp, "%s/dev%s/charlib/%s", fontdir, realdev, name);
if ( exportfile(temp) == TRUE ) {
downloaded[lastc] = 1;
t_sf();
} /* End if */
} /* End if */
if ( downloaded[lastc] == 1 ) {
xymove(hpos, vpos);
fprintf(tf, "%d build_%s\n", (int) lastw, name);
if ( code != 1 ) { /* get the bitmap or whatever */
sprintf(temp, "%s/dev%s/charlib/%s.map", fontdir, realdev, name);
if ( access(temp, 04) == 0 && tf == stdout )
cat(temp);
} /* End if */
fprintf(tf, "%d %d m\n", stringstart = hpos + lastw, vpos);
} /* End if */
} /* End of charlib */
/*****************************************************************************/
reset()
{
/*
*
* Reset variables that keep track of the printer's current position, size and
* font. Eventually forces things back in sync before oput() prints the next
* character.
*
*/
lastx = -(slop + 1);
lasty = -1;
lastfont = lastsize = -1;
} /* End of reset */
/*****************************************************************************/
resetpos()
{
/*
*
* Reset the position tracking variables. Forces oput() to get positions back
* in sync before printing the next character.
*
*/
lastx = -(slop + 1);
lasty = -1;
} /* End of resetpos */
/*****************************************************************************/
save()
{
/*
*
* Save the current PostScript environment. Initialize things that may have
* disappeared after the preceeding restore.
*
*/
fprintf(tf, "/saveobj save def\n");
fprintf(tf, "mark\n");
if ( encoding != realencoding )
fprintf(tf, "%d setdecoding\n", encoding);
if ( gotcolor == TRUE ) /* prevent getcolor() recursion */
setcolor();
} /* End of save */
/*****************************************************************************/
restore()
{
/*
*
* Restore the previous PostScript environment.
*
*/
flushtext();
fprintf(tf, "cleartomark\n");
fprintf(tf, "saveobj restore\n");
reset();
} /* End of restore */
/*****************************************************************************/
exportfile(path)
char *path;
{
int val = FALSE;
/*
*
* Exports the contents of file path to the global environment. Returns TRUE
* if we're doing output (i.e. tf == stdout) and the copy worked.
*
*/
if ( tf == stdout && access(path, 04) == 0 ) {
restore();
fprintf(tf, "%s", BEGINGLOBAL);
val = cat(path);
fprintf(tf, "%s", ENDGLOBAL);
save();
} /* End if */
return(val);
} /* End of exportfile */
/*****************************************************************************/
exportstring(str)
char *str;
{
/*
*
* Exports string str to the global environment. No return value needed yet.
*
*/
if ( tf == stdout && str != NULL && *str != '\0' ) {
restore();
fprintf(tf, "%s", BEGINGLOBAL);
fprintf(tf, "%s", str);
fprintf(tf, "%s", ENDGLOBAL);
save();
} /* End if */
} /* End of exportstring */
/*****************************************************************************/
redirect(pg)
int pg;
{
static FILE *fp_null = NULL;
/*
*
* If we're not supposed to print page pg, tf will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
tf = stdout;
else if ( (tf = fp_null) == NULL )
tf = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014231030451006440057030057030000010301400522627500600002700000010457post.src/dpost/dpost.h /*
*
* DEVNAME should be the name of a device whose font files accurately describe
* what's available on the target printer. It's a string that's combined with
* "/usr/lib/font/dev" to locate the final font directory. It can be changed
* using the -T option, but you may end up getting garbage - the character code
* field must agree with PostScript's character encoding scheme for each font and
* troff's one or two character font names must be mapped into the appropriate
* PostScript font names (typically in the prologue)
*
*
*/
#define DEVNAME "post" /* name of the target printer */
/*
*
* SLOP controls how much horizontal positioning error we'll accept and primarily
* helps when we're emulating another device. It's used when we output characters
* in oput() to check if troff and the printer have gotten too far out of sync.
* Given in units of points and can be changed using the -S option. Converted to
* machine units in t_init() after the resolution is known.
*
*/
#define SLOP .2 /* horizontal error - in points */
/*
*
* Several different text line encoding schemes are supported. Print time should
* decrease as the value assigned to encoding (in dpost.c) increases, although the
* only encoding that's well tested is the lowest level one, which produces output
* essentially identical to the original version of dpost. Setting DFLTENCODING to
* 0 will give you the most stable (but slowest) encoding. The encoding scheme can
* also be set on the command line using the -e option. Faster methods are based
* on widthshow and may not place words exactly where troff wanted, but errors will
* usually not be noticeable.
*
*/
#define MAXENCODING 3
#ifndef DFLTENCODING
#define DFLTENCODING 2
#endif
/*
*
* The encoding scheme controls how lines of text are output. In the lower level
* schemes words and horizontal positions are put on the stack as they're read and
* when they're printed it's done in reverse order - the first string printed is
* the one on top of the stack and it's the last one on the line. Faster methods
* may be forced to reverse the order of strings on the stack, making the top one
* the first string on the line. STRINGSPACE sets the size of a character array
* that's used to save the strings that make up a line of text so they can be
* output in reverse order or perhaps combined in groups for widthshow.
*
* MAXSTACK controls how far we let PostScript's operand stack grow and determines
* the number of strings we'll save before printing all or part of a line of text.
* The internal limit in PostScript printers built by Adobe is 500, so MAXSTACK
* should never be bigger than about 240!
*
* Line is a structure used to keep track of the words (or rather strings) on the
* current line that have been read but not printed. dx is the width troff wants
* to use for a space in the current string. start is where the string began, width
* is the total width of the string, and spaces is the number of space characters
* in the current string. *str points to the start of the string in the strings[]
* array. The Line structure is only used in the higher level encoding schemes.
*
*/
#define MAXSTACK 50 /* most strings we'll save at once */
#define STRINGSPACE 2000 /* bytes available for string storage */
typedef struct {
char *str; /* where the string is stored */
int dx; /* width of a space */
int spaces; /* number of space characters */
int start; /* horizontal starting position */
int width; /* and its total width */
} Line;
/*
*
* Simple stuff used to map unrecognized font names into something reasonable. The
* mapping array is initialized using FONTMAP and used in loadfont() whenever the
* job tries to use a font that we don't recognize. Normally only needed when we're
* emulating another device.
*
*/
typedef struct {
char *name; /* font name we're looking for */
char *use; /* and this is what we should use */
} Fontmap;
#define FONTMAP \
\
{ \
"G", "H", \
"LO", "S", \
"S2", "S", \
"GI", "HI", \
"HM", "H", \
"HK", "H", \
"HL", "H", \
"PA", "R", \
"PI", "I", \
"PB", "B", \
"PX", "BI", \
NULL, NULL, \
}
/*
*
* Non-integer valued functions.
*
*/
extern char *mapfont();
0707070014231027401006400057030057030000010310030522633100300003000000005210post.src/dpost/dpost.mk MAKE=/bin/make
MAKEFILE=dpost.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
FONTDIR=/usr/lib/font
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=dpost.h\
font.h\
motion.h\
ps_include.h\
$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=dpost.o\
draw.o\
color.o\
font.o\
pictures.o\
ps_include.o\
$(COMMONDIR)/bbox.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o\
$(COMMONDIR)/tempnam.o
all : dpost
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp dpost $(POSTBIN)/dpost
@chmod 755 $(POSTBIN)/dpost
@chgrp $(GROUP) $(POSTBIN)/dpost
@chown $(OWNER) $(POSTBIN)/dpost
cp dpost.ps $(POSTLIB)/dpost.ps
@chmod 644 $(POSTLIB)/dpost.ps
@chgrp $(GROUP) $(POSTLIB)/dpost.ps
@chown $(OWNER) $(POSTLIB)/dpost.ps
cp draw.ps $(POSTLIB)/draw.ps
@chmod 644 $(POSTLIB)/draw.ps
@chgrp $(GROUP) $(POSTLIB)/draw.ps
@chown $(OWNER) $(POSTLIB)/draw.ps
cp dpost.1 $(MAN1DIR)/dpost.1
@chmod 644 $(MAN1DIR)/dpost.1
@chgrp $(GROUP) $(MAN1DIR)/dpost.1
@chown $(OWNER) $(MAN1DIR)/dpost.1
clean :
rm -f *.o
clobber : clean
rm -f dpost
dpost : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o dpost $(OFILES) -lm
dpost.o : $(HFILES)
color.o : $(COMMONDIR)/ext.h $(COMMONDIR)/gen.h
draw.o : motion.h $(COMMONDIR)/ext.h $(COMMONDIR)/gen.h
font.o : font.h $(COMMONDIR)/gen.h
pictures.o : $(COMMONDIR)/comments.h $(COMMONDIR)/gen.h
ps_include.o : ps_include.h
$(COMMONDIR)/bbox.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o\
$(COMMONDIR)/tempnam.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk SYSTEM=$(SYSTEM) `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^FONTDIR=.*'FONTDIR=$(FONTDIR)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dF.*'.ds dF $(FONTDIR)'" \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
dpost.1 >XXX.1; \
mv XXX.1 dpost.1
0707070014231030471006440057030057030000010301600522627500600003000000011014post.src/dpost/dpost.ps %
% Version 3.3.2 prologue for troff files.
%
/#copies 1 store
/aspectratio 1 def
/formsperpage 1 def
/landscape false def
/linewidth .3 def
/magnification 1 def
/margin 0 def
/orientation 0 def
/resolution 720 def
/rotation 1 def
/xoffset 0 def
/yoffset 0 def
/roundpage true def
/useclippath true def
/pagebbox [0 0 612 792] def
/R /Times-Roman def
/I /Times-Italic def
/B /Times-Bold def
/BI /Times-BoldItalic def
/H /Helvetica def
/HI /Helvetica-Oblique def
/HB /Helvetica-Bold def
/HX /Helvetica-BoldOblique def
/CW /Courier def
/CO /Courier def
/CI /Courier-Oblique def
/CB /Courier-Bold def
/CX /Courier-BoldOblique def
/PA /Palatino-Roman def
/PI /Palatino-Italic def
/PB /Palatino-Bold def
/PX /Palatino-BoldItalic def
/Hr /Helvetica-Narrow def
/Hi /Helvetica-Narrow-Oblique def
/Hb /Helvetica-Narrow-Bold def
/Hx /Helvetica-Narrow-BoldOblique def
/KR /Bookman-Light def
/KI /Bookman-LightItalic def
/KB /Bookman-Demi def
/KX /Bookman-DemiItalic def
/AR /AvantGarde-Book def
/AI /AvantGarde-BookOblique def
/AB /AvantGarde-Demi def
/AX /AvantGarde-DemiOblique def
/NR /NewCenturySchlbk-Roman def
/NI /NewCenturySchlbk-Italic def
/NB /NewCenturySchlbk-Bold def
/NX /NewCenturySchlbk-BoldItalic def
/ZD /ZapfDingbats def
/ZI /ZapfChancery-MediumItalic def
/S /S def
/S1 /S1 def
/GR /Symbol def
/inch {72 mul} bind def
/min {2 copy gt {exch} if pop} bind def
/setup {
counttomark 2 idiv {def} repeat pop
landscape {/orientation 90 orientation add def} if
/scaling 72 resolution div def
linewidth setlinewidth
1 setlinecap
pagedimensions
xcenter ycenter translate
orientation rotation mul rotate
width 2 div neg height 2 div translate
xoffset inch yoffset inch neg translate
margin 2 div dup neg translate
magnification dup aspectratio mul scale
scaling scaling scale
addmetrics
0 0 moveto
} def
/pagedimensions {
useclippath userdict /gotpagebbox known not and {
/pagebbox [clippath pathbbox newpath] def
roundpage currentdict /roundpagebbox known and {roundpagebbox} if
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
userdict /gotpagebbox true put
} def
/addmetrics {
/Symbol /S null Sdefs cf
/Times-Roman /S1 StandardEncoding dup length array copy S1defs cf
} def
/pagesetup {
/page exch def
currentdict /pagedict known currentdict page known and {
page load pagedict exch get cvx exec
} if
} def
/decodingdefs [
{counttomark 2 idiv {y moveto show} repeat}
{neg /y exch def counttomark 2 idiv {y moveto show} repeat}
{neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat}
{neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat}
{counttomark 2 idiv {y moveto show} repeat}
{neg setfunnytext}
] def
/setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def
/w {neg moveto show} bind def
/m {neg dup /y exch def moveto} bind def
/done {/lastpage where {pop lastpage} if} def
/f {
dup /font exch def findfont exch
dup /ptsize exch def scaling div dup /size exch def scalefont setfont
linewidth ptsize mul scaling 10 mul div setlinewidth
/spacewidth ( ) stringwidth pop def
} bind def
/changefont {
/fontheight exch def
/fontslant exch def
currentfont [
1 0
fontheight ptsize div fontslant sin mul fontslant cos div
fontheight ptsize div
0 0
] makefont setfont
} bind def
/sf {f} bind def
/cf {
dup length 2 idiv
/entries exch def
/chtab exch def
/newencoding exch def
/newfont exch def
findfont dup length 1 add dict
/newdict exch def
{1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall
newencoding type /arraytype eq {newdict /Encoding newencoding put} if
newdict /Metrics entries dict put
newdict /Metrics get
begin
chtab aload pop
1 1 entries {pop def} for
newfont newdict definefont pop
end
} bind def
%
% A few arrays used to adjust reference points and character widths in some
% of the printer resident fonts. If square roots are too high try changing
% the lines describing /radical and /radicalex to,
%
% /radical [0 -75 550 0]
% /radicalex [-50 -75 500 0]
%
% Move braceleftbt a bit - default PostScript character is off a bit.
%
/Sdefs [
/bracketlefttp [201 500]
/bracketleftbt [201 500]
/bracketrighttp [-81 380]
/bracketrightbt [-83 380]
/braceleftbt [203 490]
/bracketrightex [220 -125 500 0]
/radical [0 0 550 0]
/radicalex [-50 0 500 0]
/parenleftex [-20 -170 0 0]
/integral [100 -50 500 0]
/infinity [10 -75 730 0]
] def
/S1defs [
/underscore [0 80 500 0]
/endash [7 90 650 0]
] def
0707070014231030501006440057030057030000010302000522627500600002600000061605post.src/dpost/draw.c /*
*
* Drawing routines used by dpost. Almost no real work is done here. Instead
* the required calculations are done in special Postscript procedures that
* include:
*
*
* Dl
*
* x1 y1 x y Dl -
*
* Starts a new path and then draws a line from the current point
* (x, y) to (x1, y1).
*
* De
*
* x y a b De -
*
* Starts a new path and then draws an ellipse that has its left side
* at the current point (x, y) and horizontal and vertical axes lengths
* given by a and b respectively.
*
* Da
*
* x y dx1 dy1 dx2 dy2 Da -
*
* Starts a new segment and then draws a circular arc from the current
* point (x, y) to (x + dx1 + dx2, y + dy1 + dy2). The center of the
* circle is at (x + dx1, y + dy1). Arcs always go counter-clockwise
* from the starting point to the end point.
*
* DA
*
* x y dx1 dy1 dx2 dy2 DA -
*
* Draws a clockwise arc from (x, y) to (x + dx1 + dx2, y + dy1 + dy2)
* with center at (x + dx1, y + dy1). Only needed when we're building
* large paths that use arcs and want to control the current point. The
* arguments passed to drawarc() will be whatever they would have been
* for a counter-clockwise arc, so we need to map them into appropriate
* arguments for PostScript's arcn operator. The mapping is,
*
* x = hpos + dx1' + dx2'
* y = vpos + dy1' + dy2'
* dx1 = -dx2'
* dy1 = -dy2'
* dx2 = -dx1'
* dy2 = -dy1'
*
* where primed values represent the drawarc() arguments and (hpos, vpos)
* is our current position.
*
* Ds
*
* x0 y0 x1 y1 x2 y2 Ds -
*
* Starts a new segment and then draws a quadratic spline connecting
* point ((x0 + x1)/2, (y0 + y1)/2) to ((x1 + x2)/2, (y1 + y2)/2).
* The points used in Postscript's curveto procedure are given by,
*
* x0' = (x0 + 5 * x1) / 6
* x1' = (x2 + 5 * x1) / 6
* x2' = (x1 + x2) / 2
*
* with similar equations for the y coordinates.
*
* By default all the PostScript drawing procedures begin with a newpath (just to
* be safe) and end with a stroke, which essentially isolates the path elements
* built by the drawing procedures. In order to accommodate big paths built from
* smaller pieces each of the PostScript drawing procedures can forced to retain
* the path that's being built. That's what happens in beginpath() when an "x X
* BeginPath" command is read. beginpath() sets the PostScript variable inpath to
* true, and that essentially eliminates the newpath/stroke pair that bracket the
* individual pieces. In that case the path is terminated and drawn when dpost
* reads an "x X DrawPath" command.
*
* Early versions of dpost included the PostScript drawing procedures as part of
* the prologue, and as a result they were included with every job, even if they
* were never used. This version has separated the drawing procedures from the
* default prologue (they're now in *drawfile) and only includes them if they're
* really needed, which is yet another convenient violation of page independence.
* Routine getdraw() is responsible for adding *drawfile to the output file, and
* if it can't read *drawfile it continues on as if nothing happened. That means
* everything should still work if you append *drawfile to *prologue and then
* delete *drawfile.
*
*/
#include <stdio.h>
#include <math.h>
#include "gen.h" /* general purpose definitions */
#include "ext.h" /* external variable definitions */
#include "motion.h" /* positioning macros */
int gotdraw = FALSE; /* TRUE when *drawfile has been added */
int gotbaseline = FALSE; /* TRUE after *baselinefile is added */
int inpath = FALSE; /* TRUE if we're putting pieces together */
/*
*
* All these should be defined in file dpost.c.
*
*/
extern int hpos;
extern int vpos;
extern int encoding;
extern int maxencoding;
extern int realencoding;
extern char *drawfile;
extern char *baselinefile;
extern FILE *tf;
/*****************************************************************************/
getdraw()
{
/*
*
* Responsible for making sure the PostScript drawing procedures are downloaded
* from *drawfile. Stuff is done at most once per job, and only if the job needs
* them. For now I've decided not to quit if we can't read the drawing file. That
* pretty much assumes an old version of prologue is being used that includes all
* the drawing procedures.
*
*/
if ( gotdraw == FALSE )
exportfile(drawfile);
if ( tf == stdout )
gotdraw = TRUE;
} /* End of getdraw */
/*****************************************************************************/
drawline(dx, dy)
int dx, dy; /* endpoint is (hpos+dx, vpos+dy) */
{
/*
*
* Draws a line from (hpos, vpos) to (hpos+dx, vpos+dy), and leaves the current
* position at the endpoint.
*
*/
if ( dx == 0 && dy == 0 )
drawcirc(1);
else fprintf(tf, "%d %d %d %d Dl\n", hpos + dx, vpos + dy, hpos, vpos);
if ( dobbox == TRUE ) {
cover((double)hpos, (double)-vpos);
cover((double)(hpos + dx), (double)-(vpos + dy));
} /* End if */
hgoto(hpos+dx); /* where troff expects to be */
vgoto(vpos+dy);
resetpos(); /* not sure where the printer is */
} /* End of drawline */
/*****************************************************************************/
drawcirc(d)
int d; /* diameter of the circle */
{
/*
*
* Draws a circle of diameter d with the left 'side' of the circle at the
* current point. After we're finished drawing we move the current position
* to the right side.
*
*/
drawellip(d, d);
} /* End of drawcirc */
/*****************************************************************************/
drawellip(a, b)
int a, b; /* axes lengths for the ellipse */
{
/*
*
* Draws an ellipse having axes lengths horizontally and vertically of a and
* b. The left side of the ellipse is at the current point. After we're done
* drawing the path we move the current position to the right side.
*
*/
if ( a == 0 && b == 0 )
return;
fprintf(tf, "%d %d %d %d De\n", hpos, vpos, a, b);
if ( dobbox == TRUE ) {
cover((double)hpos, (double)-(vpos + b/2));
cover((double)(hpos+a), (double)-(vpos - b/2));
} /* End if */
hgoto(hpos + a); /* where troff expects to be */
vgoto(vpos);
resetpos(); /* not sure where the printer is */
} /* End of drawellip */
/*****************************************************************************/
drawarc(dx1, dy1, dx2, dy2, c)
int dx1, dy1; /* vector from current pos to center */
int dx2, dy2; /* from center to end of the arc */
int c; /* clockwise if c is A */
{
/*
*
* If c isn't set to 'A' a counter-clockwise arc is drawn from the current point
* (hpos, vpos) to (hpos+dx1+dx2, vpos+dy1+dy2). The center of the circle is the
* point (hpos+dx1, vpos+dy1). If c is 'A' the arc goes clockwise from the point
* (hpos+dx1+dx2, vpos+dy1+dy2) to (hpos, vpos). Clockwise arcs are only needed
* if we're building a larger path out of pieces that include arcs, and want to
* have PostScript manage the path for us. Arguments (for a clockwise arc) are
* what would have been supplied if the arc was drawn in a counter-clockwise
* direction, and are converted to values suitable for use with PostScript's arcn
* operator.
*
*/
if ( (dx1 != 0 || dy1 != 0) && (dx2 != 0 || dy2 != 0) ) {
if ( c != 'A' )
fprintf(tf, "%d %d %d %d %d %d Da\n", hpos, vpos, dx1, dy1, dx2, dy2);
else fprintf(tf, "%d %d %d %d %d %d DA\n", hpos+dx1+dx2, vpos+dy1+dy2,
-dx2, -dy2, -dx1, -dy1);
if ( dobbox == TRUE )
arc_extreme(dx1, dy1, dx2, dy2);
} /* End if */
hgoto(hpos + dx1 + dx2); /* where troff expects to be */
vgoto(vpos + dy1 + dy2);
resetpos(); /* not sure where the printer is */
} /* End of drawarc */
/*****************************************************************************/
drawspline(fp, flag)
FILE *fp; /* input for point list */
int flag; /* flag!=1 connect end points */
{
int x[100], y[100];
int i, N;
/*
*
* Spline drawing routine for Postscript printers. The complicated stuff is
* handled by procedure Ds, which should be defined in the library file. I've
* seen wrong implementations of troff's spline drawing, so fo the record I'll
* write down the parametric equations and the necessary conversions to Bezier
* cubic splines (as used in Postscript).
*
*
* Parametric equation (x coordinate only):
*
*
* (x2 - 2 * x1 + x0) 2 (x0 + x1)
* x = ------------------ * t + (x1 - x0) * t + ---------
* 2 2
*
*
* The coefficients in the Bezier cubic are,
*
*
* A = 0
* B = (x2 - 2 * x1 + x0) / 2
* C = x1 - x0
*
*
* while the current point is,
*
* current-point = (x0 + x1) / 2
*
* Using the relationships given in the Postscript manual (page 121) it's easy to
* see that the control points are given by,
*
*
* x0' = (x0 + 5 * x1) / 6
* x1' = (x2 + 5 * x1) / 6
* x2' = (x1 + x2) / 2
*
*
* where the primed variables are the ones used by curveto. The calculations
* shown above are done in procedure Ds using the coordinates set up in both
* the x[] and y[] arrays.
*
* A simple test of whether your spline drawing is correct would be to use cip
* to draw a spline and some tangent lines at appropriate points and then print
* the file.
*
*/
for ( N = 2; N < sizeof(x)/sizeof(x[0]); N++ )
if (fscanf(fp, "%d %d", &x[N], &y[N]) != 2)
break;
x[0] = x[1] = hpos;
y[0] = y[1] = vpos;
for (i = 1; i < N; i++) {
x[i+1] += x[i];
y[i+1] += y[i];
} /* End for */
x[N] = x[N-1];
y[N] = y[N-1];
for (i = ((flag!=1)?0:1); i < ((flag!=1)?N-1:N-2); i++) {
fprintf(tf, "%d %d %d %d %d %d Ds\n", x[i], y[i], x[i+1], y[i+1], x[i+2], y[i+2]);
if ( dobbox == TRUE ) { /* could be better */
cover((double)(x[i] + x[i+1])/2,(double)-(y[i] + y[i+1])/2);
cover((double)x[i+1], (double)-y[i+1]);
cover((double)(x[i+1] + x[i+2])/2, (double)-(y[i+1] + y[i+2])/2);
} /* End if */
} /* End for */
hgoto(x[N]); /* where troff expects to be */
vgoto(y[N]);
resetpos(); /* not sure where the printer is */
} /* End of drawspline */
/*****************************************************************************/
arc_extreme(dx1, dy1, dx2, dy2)
int dx1, dy1, dx2, dy2;
{
double x0, y0, x1, y1, xc, yc; /* start, end, center */
double r, xmin, ymin, xmax, ymax;
int j, k;
/*
*
* bounding box of a circular arc Eric Grosse 24 May 84
*
* Conceptually, this routine generates a list consisting of the start,
* end, and whichever north, east, south, and west points lie on the arc.
* The bounding box is then the range of this list.
* list = {start,end}
* j = quadrant(start)
* k = quadrant(end)
* if( j==k && long way 'round ) append north,west,south,east
* else
* while( j != k )
* append center+radius*[j-th of north,west,south,east unit vectors]
* j += 1 (mod 4)
* return( bounding box of list )
* The following code implements this, with simple optimizations.
*
*/
x0 = hpos;
y0 = -vpos;
x1 = hpos + dx1 + dx2;
y1 = -(vpos + dy1 + dy2);
xc = hpos + dx1;
yc = -(vpos + dy1);
x0 -= xc; y0 -= yc; /* move to center */
x1 -= xc; y1 -= yc;
xmin = (x0<x1)?x0:x1; ymin = (y0<y1)?y0:y1;
xmax = (x0>x1)?x0:x1; ymax = (y0>y1)?y0:y1;
r = sqrt(x0*x0 + y0*y0);
if (r > 0.0) {
j = quadrant(x0,y0);
k = quadrant(x1,y1);
if (j == k && y1*x0 < x1*y0) {
/* viewed as complex numbers, if Im(z1/z0)<0, arc is big */
if( xmin > -r) xmin = -r; if( ymin > -r) ymin = -r;
if( xmax < r) xmax = r; if( ymax < r) ymax = r;
} else {
while (j != k) {
switch (j) {
case 1: if( ymax < r) ymax = r; break; /* north */
case 2: if( xmin > -r) xmin = -r; break; /* west */
case 3: if( ymin > -r) ymin = -r; break; /* south */
case 4: if( xmax < r) xmax = r; break; /* east */
} /* End switch */
j = j%4 + 1;
} /* End while */
} /* End else */
} /* End if */
xmin += xc; ymin += yc;
xmax += xc; ymax += yc;
cover(xmin, ymin);
cover(xmax, ymax);
} /* End of arc_extreme */
/*****************************************************************************/
quadrant(x,y)
double x, y;
{
if ( x>=0.0 && y> 0.0) return(1);
else if( x< 0.0 && y>=0.0) return(2);
else if( x<=0.0 && y< 0.0) return(3);
else if( x> 0.0 && y<=0.0) return(4);
else return 0; /* shut up lint */
} /* End of quadrant */
/*****************************************************************************/
beginpath(buf, copy)
char *buf; /* whatever followed "x X BeginPath" */
int copy; /* ignore *buf if FALSE */
{
/*
*
* Called from devcntrl() whenever an "x X BeginPath" command is read. It's used
* to mark the start of a sequence of drawing commands that should be grouped
* together and treated as a single path. By default the drawing procedures in
* *drawfile treat each drawing command as a separate object, and usually start
* with a newpath (just as a precaution) and end with a stroke. The newpath and
* stroke isolate individual drawing commands and make it impossible to deal with
* composite objects. "x X BeginPath" can be used to mark the start of drawing
* commands that should be grouped together and treated as a single object, and
* part of what's done here ensures that the PostScript drawing commands defined
* in *drawfile skip the newpath and stroke, until after the next "x X DrawPath"
* command. At that point the path that's been built up can be manipulated in
* various ways (eg. filled and/or stroked with a different line width).
*
* String *buf is unnecessary and is only included for compatibility with an early
* verion of that's still in use. In that version "x X BeginObject" marked the
* start of a graphical object, and whatever followed it was passed along in *buf
* and copied to the output file. Color selection is one of the options that's
* available in parsebuf(), so if we get here we add *colorfile to the output
* file before doing anything important.
*
*/
if ( inpath == FALSE ) {
flushtext();
getdraw();
getcolor();
fprintf(tf, "gsave\n");
fprintf(tf, "newpath\n");
fprintf(tf, "%d %d m\n", hpos, vpos);
fprintf(tf, "/inpath true def\n");
if ( copy == TRUE )
fprintf(tf, "%s", buf);
inpath = TRUE;
} /* End if */
} /* End of beginpath */
/*****************************************************************************/
drawpath(buf, copy)
char *buf;
int copy;
{
/*
*
* Called from devcntrl() whenever an "x X DrawPath" command is read. It marks the
* end of the path started by the last "x X BeginPath" command and uses whatever
* has been passed along in *buf to manipulate the path (eg. fill and/or stroke
* the path). Once that's been done the drawing procedures are restored to their
* default behavior in which each drawing command is treated as an isolated path.
* The new version (called after "x X DrawPath") has copy set to FALSE, and calls
* parsebuf() to figure out what goes in the output file. It's a feeble attempt
* to free users and preprocessors (like pic) from having to know PostScript. The
* comments in parsebuf() describe what's handled.
*
* In the early version a path was started with "x X BeginObject" and ended with
* "x X EndObject". In both cases *buf was just copied to the output file, and
* was expected to be legitimate PostScript that manipulated the current path.
* The old escape sequence will be supported for a while (for Ravi), and always
* call this routine with copy set to TRUE.
*
*
*/
if ( inpath == TRUE ) {
if ( copy == TRUE )
fprintf(tf, "%s", buf);
else parsebuf(buf);
fprintf(tf, "grestore\n");
fprintf(tf, "/inpath false def\n");
reset();
inpath = FALSE;
} /* End if */
} /* End of drawpath */
/*****************************************************************************/
parsebuf(buf)
char *buf; /* whatever followed "x X DrawPath" */
{
char *p; /* usually the next token */
char *p1; /* for grabbing arguments */
char *pend; /* end of the original string (ie. *buf) */
int gsavelevel = 0; /* non-zero if we've done a gsave */
/*
*
* Simple minded attempt at parsing the string that followed an "x X DrawPath"
* command. Everything not recognized here is simply ignored - there's absolutely
* no error checking and what was originally in buf is clobbered by strtok().
* A typical *buf might look like,
*
* gray .9 fill stroke
*
* to fill the current path with a gray level of .9 and follow that by stroking the
* outline of the path. Since unrecognized tokens are ignored the last example
* could also be written as,
*
* with gray .9 fill then stroke
*
* The "with" and "then" strings aren't recognized tokens and are simply discarded.
* The "stroke", "fill", and "wfill" force out appropriate PostScript code and are
* followed by a grestore. In otherwords changes to the grahics state (eg. a gray
* level or color) are reset to default values immediately after the stroke, fill,
* or wfill tokens. For now "fill" gets invokes PostScript's eofill operator and
* "wfill" calls fill (ie. the operator that uses the non-zero winding rule).
*
* The tokens that cause temporary changes to the graphics state are "gray" (for
* setting the gray level), "color" (for selecting a known color from the colordict
* dictionary defined in *colorfile), and "line" (for setting the line width). All
* three tokens can be extended since strncmp() makes the comparison. For example
* the strings "line" and "linewidth" accomplish the same thing. Colors are named
* (eg. "red"), but must be appropriately defined in *colorfile. For now all three
* tokens must be followed immediately by their single argument. The gray level
* (ie. the argument that follows "gray") should be a number between 0 and 1, with
* 0 for black and 1 for white.
*
* To pass straight PostScript through enclose the appropriate commands in double
* quotes. Straight PostScript is only bracketed by the outermost gsave/grestore
* pair (ie. the one from the initial "x X BeginPath") although that's probably
* a mistake. Suspect I may have to change the double quote delimiters.
*
*/
pend = buf + strlen(buf);
p = strtok(buf, " \n");
while ( p != NULL ) {
if ( gsavelevel == 0 ) {
fprintf(tf, "gsave\n");
gsavelevel++;
} /* End if */
if ( strcmp(p, "stroke") == 0 ) {
fprintf(tf, "closepath stroke\ngrestore\n");
gsavelevel--;
} else if ( strcmp(p, "openstroke") == 0 ) {
fprintf(tf, "stroke\ngrestore\n");
gsavelevel--;
} else if ( strcmp(p, "fill") == 0 ) {
fprintf(tf, "eofill\ngrestore\n");
gsavelevel--;
} else if ( strcmp(p, "wfill") == 0 ) {
fprintf(tf, "fill\ngrestore\n");
gsavelevel--;
} else if ( strcmp(p, "sfill") == 0 ) {
fprintf(tf, "eofill\ngrestore\ngsave\nstroke\ngrestore\n");
gsavelevel--;
} else if ( strncmp(p, "gray", strlen("gray")) == 0 ) {
p1 = strtok(NULL, " \n");
fprintf(tf, "%s setgray\n", p1);
} else if ( strncmp(p, "color", strlen("color")) == 0 ) {
p1 = strtok(NULL, " \n");
fprintf(tf, "/%s setcolor\n", p1);
} else if ( strncmp(p, "line", strlen("line")) == 0 ) {
p1 = strtok(NULL, " \n");
fprintf(tf, "%s resolution mul 2 div setlinewidth\n", p1);
} else if ( strncmp(p, "reverse", strlen("reverse")) == 0 )
fprintf(tf, "reversepath\n");
else if ( *p == '"' ) {
for ( ; gsavelevel > 0; gsavelevel-- )
fprintf(tf, "grestore\n");
if ( (p1 = p + strlen(p)) < pend )
*p1 = ' ';
p = strtok(p, "\"\n");
fprintf(tf, "%s\n", p);
} /* End else */
p = strtok(NULL, " \n");
} /* End while */
for ( ; gsavelevel > 0; gsavelevel-- )
fprintf(tf, "grestore\n");
} /* End of parsebuf */
/*****************************************************************************/
getbaseline()
{
/*
*
* Responsible for making sure the PostScript procedures needed for printing text
* along an arbitrary baseline are downloaded from *baselinefile. Done at most
* once per job, and only if the the stuff is really used.
*
*/
if ( gotbaseline == FALSE )
exportfile(baselinefile);
if ( tf == stdout )
gotbaseline = TRUE;
} /* End of getbaseline */
/*****************************************************************************/
newbaseline(buf)
char *buf; /* whatever followed "x X NewBaseline" */
{
char *p; /* for eliminating white space etc. */
/*
*
* Called from devcntrl() whenever an "x X NewBaseline" command is recognized. We
* assume whatever is in *buf is a set of parametric equations that describe the
* new baseline. Equations for x(t), y(t), dx/dt, and dy/dt must be written in
* PostScript, bracketed by { and } characters, and supplied in exactly that order.
* In particular the equation for x must come first in *buf and it ends up as the
* last one on the stack, while the equation for dy/dt comes last (in *buf) and
* ends up on the top of the PostScript stack. For example if *buf is given by,
*
* {} {180 mul 3.1416 div cos} {pop 1} {180 mul 3.1416 div sin neg}
*
* text will be printed along the curve y = cos(x).
*
* Angles given in radians must be converted to degrees for the PostScript trig
* functions, and things are scaled so that 1 unit maps into 1 inch. In the last
* example the cosine curve that describes the baseline has an amplitude of 1 inch.
* As another example of this rather confusing syntax if *buf is,
*
* {} {} {pop 1} {pop 1}
*
* the baseline will be the 45 degree line y = x.
*
* When any of the four functions is used they're called with a single number on
* the stack that's equal to the current value of the parameter t. The coordinate
* system axes run parallel to the PostScript coordinate system that's currently
* being used.
*
*/
for ( p = buf; *p; p++ ) /* eliminate trailing '\n' */
if ( *p == '\n' ) {
*p = '\0';
break;
} /* End if */
for ( p = buf; *p && (*p == ' ' || *p == ':'); p++ ) ;
if ( *p != '\0' ) { /* something's there */
flushtext();
getbaseline();
fprintf(tf, "mark resolution %s newbaseline\n", p);
reset();
} /* End if */
} /* End of newbaseline */
/*****************************************************************************/
drawtext(buf)
char *buf; /* whatever followed "x X DrawText */
{
char *p; /* for eliminating white space etc. */
/*
*
* Called from devcntrl() whenever an "x X DrawText command is recognized. *buf
* should contain three arguments in the following order. First comes the text we
* want to print along the current baseline. Right now the string should be given
* as a PostScript string using characters '(' and ')' as the delimiters. Next in
* *buf comes a justification mode that can be the words left, right, or center.
* Last comes a number that represents the starting value of the parameter t that's
* given as the argument to the parametric equations that describe the current
* baseline. For example if *buf is given by,
*
* (hello world) left .5
*
* hello world will be printed along the path described by the current baseline
* and left justified at whatever (x(.5), y(.5)) happens to be. Usually will be
* preceeded by an "x X NewBaseline" call that defines the current baseline. The
* origin of the coordinate system used by the parametric equations will be the
* current point.
*
*/
for ( p = buf; *p; p++ ) /* eliminate trailing '\n' */
if ( *p == '\n' ) {
*p = '\0';
break;
} /* End if */
for ( p = buf; *p && (*p == ' ' || *p == ':'); p++ ) ;
if ( *p != '\0' ) { /* something's there */
flushtext();
getbaseline();
xymove(hpos, vpos);
fprintf(tf, "mark %s drawfunnytext\n", p);
resetpos();
} /* End if */
} /* End of drawtext */
/*****************************************************************************/
settext(buf)
char *buf;
{
char *p;
/*
*
* Does whatever is needed to ensure any text that follows will be set along the
* curve described by the PostScript procedures listed in *buf. If *buf doesn't
* contain anything useful (eg. just a newline) things are restored to whatever
* they originally were. Doesn't work well if we try to start in the middle of a
* line of text.
*
* The parametric equations needed are,
*
* x = f(t)
* y = g(t)
* dx/dt = f'(t)
* dy/dt = g'(t)
*
* and must be given as proper PostScript procedures. The equation for x must come
* first (ie. it ends up on the bottom of the stack) and the equation for dy/dt
* must be given last (ie. it ends up on top of the stack). For example if *buf
* is given by,
*
* {} {180 mul 3.1416 div cos} {pop 1} {180 mul 3.1416 div sin neg}
*
* text will be set along the curve y=cos(x).
*
*/
flushtext();
getbaseline();
for ( p = buf; *p && *p == ' '; p++ ) ;
if ( *p && *p != '\n' ) {
encoding = maxencoding + 2;
fprintf(tf, "mark resolution %s newbaseline\n", buf);
} else encoding = realencoding;
fprintf(tf, "%d setdecoding\n", encoding);
resetpos();
} /* End of settext */
/*****************************************************************************/
0707070014231030511006440057030057030000010277260522627500600002700000002363post.src/dpost/draw.ps %
% Version 3.3.2 drawing procedures for dpost. Automatically pulled in when
% needed.
%
/inpath false def
/savematrix matrix def
/Dl {
inpath
{pop pop neg lineto}
{newpath neg moveto neg lineto stroke}
ifelse
} bind def
/De {
/y1 exch 2 div def
/x1 exch 2 div def
/savematrix savematrix currentmatrix def
neg exch x1 add exch translate
x1 y1 scale
0 0 1 0 360
inpath
{1 0 moveto arc savematrix setmatrix}
{newpath arc savematrix setmatrix stroke}
ifelse
} bind def
/Da {
/dy2 exch def
/dx2 exch def
/dy1 exch def
/dx1 exch def
dy1 add neg exch dx1 add exch
dx1 dx1 mul dy1 dy1 mul add sqrt
dy1 dx1 neg atan
dy2 neg dx2 atan
inpath
{arc}
{newpath arc stroke}
ifelse
} bind def
/DA {
/dy2 exch def
/dx2 exch def
/dy1 exch def
/dx1 exch def
dy1 add neg exch dx1 add exch
dx1 dx1 mul dy1 dy1 mul add sqrt
dy1 dx1 neg atan
dy2 neg dx2 atan
inpath
{arcn}
{newpath arcn stroke}
ifelse
} bind def
/Ds {
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/y0 exch def
/x0 exch def
x0 5 x1 mul add 6 div
y0 5 y1 mul add -6 div
x2 5 x1 mul add 6 div
y2 5 y1 mul add -6 div
x1 x2 add 2 div
y1 y2 add -2 div
inpath
{curveto}
{newpath x0 x1 add 2 div y0 y1 add -2 div moveto curveto stroke}
ifelse
} bind def
0707070014231030521006440057030057030000010302600522627500600002600000030664post.src/dpost/font.c /*
*
* Typesetter font tables routines - for postprocessors.
*
*/
#include <stdio.h>
#include <ctype.h>
#include "gen.h"
#include "ext.h"
#include "font.h"
Font *mount[MAXFONTS+1]; /* mount table - pointers into fonts[] */
Font fonts[MAXFONTS+2]; /* font data - guarantee one empty slot */
int fcount; /* entries in fonts[] */
int mcount; /* fonts currently in memory */
int mlimit = MAXFONTS+1; /* and the most we'll allow */
char *chnames[MAXCH]; /* special character hash table */
int nchnames; /* number of entries in chnames[] */
extern int devres;
extern int unitwidth;
extern int nfonts;
/*****************************************************************************/
checkdesc(path)
char *path;
{
char buf[150];
FILE *fp;
int val = 0;
/*
*
* Return non-zero if the typesetter description file path includes,
*
* PDL PostScript
*
* before the charset table.
*
*/
if ( (fp = fopen(path, "r")) != NULL ) {
while ( fscanf(fp, "%s", buf) != EOF ) {
if ( strcmp(buf, "PDL") == 0 ) {
fscanf(fp, "%s", buf);
val = strcmp(buf, "PostScript") == 0;
break;
} else if ( strcmp(buf, "charset") == 0 )
break;
skipline(fp);
} /* End while */
fclose(fp);
} /* End if */
return(val);
} /* End of checkdesc */
/*****************************************************************************/
getdesc(path)
char *path;
{
char buf[150];
FILE *fp;
int n;
/*
*
* Read a typesetter description file. Font and size lists are discarded. Only
* used to get to the start of the next command.
*
*/
if ( (fp = fopen(path, "r")) == NULL )
return(-1);
while ( fscanf(fp, "%s", buf) != EOF ) {
if ( strcmp(buf, "res") == 0 )
fscanf(fp, "%d", &devres);
else if ( strcmp(buf, "unitwidth") == 0 )
fscanf(fp, "%d", &unitwidth);
else if ( strcmp(buf, "sizes") == 0 )
while ( fscanf(fp, "%d", &n) != EOF && n != 0 ) ;
else if ( strcmp(buf, "inmemory") == 0 )
fscanf(fp, "%d", &mlimit);
else if ( strcmp(buf, "Encoding") == 0 ) {
fscanf(fp, "%s", buf);
fontencoding = strsave(buf);
} else if ( strcmp(buf, "fonts") == 0 ) {
fscanf(fp, "%d", &nfonts);
for ( n = 0; n < nfonts; n++ )
fscanf(fp, "%s", buf);
} else if ( strcmp(buf, "charset") == 0 ) {
while ( fscanf(fp, "%s", buf) != EOF )
chadd(buf);
break;
} /* End if */
skipline(fp);
} /* End while */
fclose(fp);
return(1);
} /* End of getdesc */
/*****************************************************************************/
getfont(path, fpos)
char *path;
Font *fpos;
{
FILE *fin;
Chwid chtemp[MAXCH];
static Chwid chinit;
int i, nw, n, wid, code;
char buf[300], ch[100], s1[100], s2[100], s3[100], cmd[100];
/*
*
* Read a width table from path into *fpos. Skip unnamed characters, spacewidth,
* ligatures, ascender/descender entries, and anything else not recognized. All
* calls should come through mountfont().
*
*/
if ( fpos->state == INMEMORY )
return(1);
if ( (fin = fopen(path, "r")) == NULL )
return(-1);
if ( fpos->state == NEWFONT ) {
if ( ++fcount > MAXFONTS+1 )
return(-1);
fpos->path = strsave(path);
} /* End if */
if ( ++mcount > mlimit && mcount > nfonts+1 )
freefonts();
for ( i = 0; i < ALPHABET-32; i++ )
chtemp[i] = chinit;
while ( fscanf(fin, "%s", cmd) != EOF ) {
if ( strcmp(cmd, "name") == 0 ) {
release(fpos->name);
fscanf(fin, "%s", buf);
fpos->name = strsave(buf);
} else if ( strcmp(cmd, "fontname") == 0 ) {
release(fpos->fontname);
fscanf(fin, "%s", buf);
fpos->fontname = strsave(buf);
} else if ( strcmp(cmd, "special") == 0 )
fpos->specfont = 1;
else if ( strcmp(cmd, "named") == 0 ) /* in prologue or somewhere else */
fpos->flags |= NAMED;
else if ( strcmp(cmd, "charset") == 0 ) {
skipline(fin);
nw = ALPHABET-32;
while ( fgets(buf, sizeof(buf), fin) != NULL ) {
sscanf(buf, "%s %s %s %s", ch, s1, s2, s3);
if ( s1[0] != '"' ) { /* not a synonym */
sscanf(s1, "%d", &wid);
code = strtol(s3, 0, 0); /* dec/oct/hex */
} /* End if */
if ( strlen(ch) == 1 ) { /* it's ascii */
n = ch[0] - 32; /* origin omits non-graphics */
chtemp[n].num = ch[0];
chtemp[n].wid = wid;
chtemp[n].code = code;
} else if ( ch[0] == '\\' && ch[1] == '0' ) {
n = strtol(ch+1, 0, 0) - 32; /* check against ALPHABET? */
chtemp[n].num = n + 32;
chtemp[n].wid = wid;
chtemp[n].code = code;
} else if ( strcmp(ch, "---") != 0 ) { /* ignore unnamed chars */
if ( (n = chindex(ch)) == -1 ) /* global? */
n = chadd(ch);
chtemp[nw].num = n;
chtemp[nw].wid = wid;
chtemp[nw].code = code;
nw++;
} /* End else */
} /* End while */
break;
} /* End else */
skipline(fin);
} /* End while */
fclose(fin);
fpos->wp = (Chwid *)allocate(nw * sizeof(Chwid));
for ( i = 0; i < nw; i++ )
fpos->wp[i] = chtemp[i];
fpos->nchars = nw;
fpos->state = INMEMORY;
return(1);
} /* End of getfont */
/*****************************************************************************/
mountfont(path, m)
char *path;
int m;
{
Font *fpos;
/*
*
* Mount font table from file path at position m. Mounted fonts are guaranteed
* to be in memory.
*
*/
if ( m < 0 || m > MAXFONTS )
return(-1);
if ( mount[m] != NULL ) {
if ( mount[m]->path != NULL && strcmp(path, mount[m]->path) == 0 ) {
if ( mount[m]->state == INMEMORY )
return(1);
} else {
mount[m]->mounted--;
mount[m] = NULL;
} /* End else */
} /* End if */
mount[m] = fpos = &fonts[findfont(path)];
mount[m]->mounted++;
return(getfont(path, fpos));
} /* End of mountfont */
/*****************************************************************************/
freefonts()
{
int n;
/*
*
* Release memory used by all unmounted fonts - except for the path string.
*
*/
for ( n = 0; n < MAXFONTS+2; n++ )
if ( fonts[n].state == INMEMORY && fonts[n].mounted == 0 ) {
release(fonts[n].wp);
fonts[n].wp = NULL;
fonts[n].state = RELEASED;
mcount--;
} /* End if */
} /* End of freefonts */
/*****************************************************************************/
findfont(path)
char *path;
{
register n;
/*
*
* Look for path in the fonts table. Returns the index where it was found or can
* be inserted (if not found).
*
*/
for ( n = hash(path, MAXFONTS+2); fonts[n].state != NEWFONT; n = (n+1) % (MAXFONTS+2) )
if ( strcmp(path, fonts[n].path) == 0 )
break;
return(n);
} /* End of findfont */
/*****************************************************************************/
mounted(m)
int m;
{
/*
*
* Return 1 if a font is mounted at position m.
*
*/
return((m >= 0 && m <= MAXFONTS && mount[m] != NULL) ? 1 : 0);
} /* End of mounted */
/*****************************************************************************/
onfont(c, m)
int c;
int m;
{
register Font *fp;
register Chwid *cp, *ep;
/*
*
* Returns the position of character c in the font mounted at m, or -1 if the
* character is not found.
*
*/
if ( mounted(m) ) {
fp = mount[m];
if ( c < ALPHABET ) {
if ( fp->wp[c-32].num == c ) /* ascii at front */
return c - 32;
else return -1;
} /* End if */
cp = &fp->wp[ALPHABET-32];
ep = &fp->wp[fp->nchars];
for ( ; cp < ep; cp++ ) /* search others */
if ( cp->num == c )
return cp - &fp->wp[0];
} /* End if */
return -1;
} /* End of onfont */
/*****************************************************************************/
chwidth(n, m)
int n;
int m;
{
/*
*
* Return width of the character at position n in the font mounted at m. Skip
* bounds checks - assume it's already been done.
*
*/
return(mount[m]->wp[n].wid);
} /* End of chwidth */
/*****************************************************************************/
chcode(n, m)
int n;
int m;
{
/*
*
* Return typesetter code for the character at position n in the font mounted
* at m. Skip bounds checks - assume it's already been done.
*
*/
return(mount[m]->wp[n].code);
} /* End of chcode */
/*****************************************************************************/
chindex(s)
char *s;
{
register i;
/*
*
* Look for s in global character name table. Hash table is guaranteed to have
* at least one empty slot (by chadd()) so the loop terminate.
*
*/
for ( i = hash(s, MAXCH); chnames[i] != NULL; i = (i+1) % MAXCH )
if ( strcmp(s, chnames[i]) == 0 )
return(i+ALPHABET);
return(-1);
} /* End of chindex */
/*****************************************************************************/
chadd(s)
char *s;
{
register i;
/*
*
* Add s to the global character name table. Leave one empty slot so loops
* terminate.
*
*/
if ( nchnames >= MAXCH - 1 )
error(FATAL, "out of table space adding character %s", s);
for ( i = hash(s, MAXCH); chnames[i] != NULL; i = (i+1) % MAXCH ) ;
nchnames++;
chnames[i] = strsave(s);
return(i+ALPHABET);
} /* End of chadd */
/*****************************************************************************/
char *chname(n)
int n;
{
/*
*
* Returns string for the character with index n.
*
*/
return(chnames[n-ALPHABET]);
} /* End of chname */
/*****************************************************************************/
hash(s, l)
char *s;
int l;
{
register i;
/*
*
* Return the hash index for string s in a table of length l. Probably should
* make i unsigned and mod once at the end.
*
*/
for ( i = 0; *s != '\0'; s++ )
i = (i * 10 + *s) % l;
return(i);
} /* End of hash */
/*****************************************************************************/
char *strsave(s)
char *s;
{
char *ptr = NULL;
/*
*
* Make a permanent copy of string s.
*
*/
if ( s != NULL ) {
ptr = (char *)allocate(strlen(s)+1);
strcpy(ptr, s);
} /* End if */
return(ptr);
} /* End of strsave */
/*****************************************************************************/
char *allocate(count)
int count;
{
char *ptr;
/*
*
* Allocates count bytes. Free unmounted fonts if the first attempt fails. To
* be absolutely correct all memory allocation should be done by this routine.
*
*/
if ( (ptr = (char *)malloc(count)) == NULL ) {
freefonts();
if ( (ptr = (char *)malloc(count)) == NULL )
error(FATAL, "no memory");
} /* End if */
return(ptr);
} /* End of allocate */
/*****************************************************************************/
release(ptr)
char *ptr;
{
/*
*
* Free memory provided ptr isn't NULL.
*
*/
if ( ptr != NULL )
free(ptr);
} /* End of release */
/*****************************************************************************/
dumpmount(m)
int m;
{
/*
*
* Dumps the font mounted at position n.
*
*/
if ( mount[m] != NULL )
dumpfont((mount[m] - &fonts[0]));
else fprintf(stderr, "no font mounted at %d\n", m);
} /* End of dumpmount */
/*****************************************************************************/
dumpfont(n)
int n;
{
int i;
Font *fpos;
char *str;
/*
*
* Dump of everything known about the font saved at fonts[n].
*
*/
fpos = &fonts[n];
if ( fpos->state ) {
fprintf(stderr, "path %s\n", fpos->path);
fprintf(stderr, "state %d\n", fpos->state);
fprintf(stderr, "flags %d\n", fpos->flags);
fprintf(stderr, "mounted %d\n", fpos->mounted);
fprintf(stderr, "nchars %d\n", fpos->nchars);
fprintf(stderr, "special %d\n", fpos->specfont);
fprintf(stderr, "name %s\n", fpos->name);
fprintf(stderr, "fontname %s\n", fpos->fontname);
if ( fpos->state == INMEMORY ) {
fprintf(stderr, "charset\n");
for ( i = 0; i < fpos->nchars; i++ ) {
if ( fpos->wp[i].num > 0 ) {
if ( fpos->wp[i].num < ALPHABET )
fprintf(stderr, "%c\t%d\t%d\n", fpos->wp[i].num,
fpos->wp[i].wid, fpos->wp[i].code);
else {
str = chname(fpos->wp[i].num);
if ( *str == '#' && isdigit(*(str+1)) && isdigit(*(str+2)) )
str = "---";
fprintf(stderr, "%s\t%d\t%d\n", str, fpos->wp[i].wid,
fpos->wp[i].code);
} /* End else */
} /* End if */
} /* End for */
} else fprintf(stderr, "charset: not in memory\n");
} else fprintf(stderr, "empty font: %d\n", n);
putc('\n', stderr);
} /* End of dumpfont */
/*****************************************************************************/
0707070014231030531006440057030057030000010277660522627500700002600000002616post.src/dpost/font.h /*
*
* Characteristics of a font - for postprocessors. Differs some from the troff
* version.
*
*/
#define ALPHABET 256 /* characters in basic alphabet */
#define MAXCH 512
#define MAXFONTS 99
/*
*
* State of a table entry in fonts[].
*
*/
#define NEWFONT 0
#define RELEASED 1
#define INMEMORY 2
/*
*
* Flags - for setting bits in a font's flag field.
*
*/
#define USED 1
#define NAMED 2
#define skipline(f) while ( getc(f) != '\n' )
/*
*
* Data about each character on a font. Omitted the ascender/descender field.
* An unsigned char is good enough for the code field on PostScript printers.
*
*/
typedef struct {
short num; /* 0 means not on this font */
unsigned char wid; /* width */
unsigned char code; /* code for actual device. */
} Chwid;
/*
*
* Font header - one for each available position.
*
*/
typedef struct {
char *path; /* where it came from */
char *name; /* as known to troff */
char *fontname; /* real name (e.g. Times-Roman) */
char state; /* NEWFONT, RELEASED, or INMEMORY */
char flags; /* for now just USED and NAMED */
char mounted; /* mounted on this many positions */
char specfont; /* 1 == special font */
short nchars; /* number of width entries for this font */
Chwid *wp; /* widths, etc., of the real characters */
} Font;
/*
*
* Non-integer functions.
*
*/
extern char *chname();
extern char *strsave();
extern char *allocate();
0707070014231030541006440057030057030000010301450522627500700003000000000272post.src/dpost/motion.h /*
*
* Position adjusting macros.
*
*/
#define hgoto(n) hpos = n
#define hmot(n) hpos += n
#define vgoto(n) vpos = n
#define vmot(n) vpos += n
extern int hpos;
extern int vpos;
0707070014231030551006440057030057030000010303200522627500700003200000023077post.src/dpost/pictures.c /*
*
* PostScript picture inclusion routines. Support for managing in-line pictures
* has been added, and works in combination with the simple picpack pre-processor
* that's supplied with this package. An in-line picture begins with a special
* device control command that looks like,
*
* x X InlinPicture name size
*
* where name is the pathname of the original picture file and size is the number
* of bytes in the picture, which begins immediately on the next line. When dpost
* encounters the InlinePicture device control command inlinepic() is called and
* that routine appends the string name and the integer size to a temporary file
* (fp_pic) and then adds the next size bytes read from the current input file to
* file fp_pic. All in-line pictures are saved in fp_pic and located later using
* the name string and picture file size that separate pictures saved in fp_pic.
*
* When a picture request (ie. an "x X PI" command) is encountered picopen() is
* called and it first looks for the picture file in fp_pic. If it's found there
* the entire picture (ie. size bytes) is copied from fp_pic to a new temp file
* and that temp file is used as the picture file. If there's nothing in fp_pic
* or if the lookup failed the original route is taken.
*
* Support for in-line pictures is an attempt to address requirements, expressed
* by several organizations, of being able to store a document as a single file
* (usually troff input) that can then be sent through dpost and ultimately to
* a PostScript printer. The mechanism may help some users, but the are obvious
* disadvantages to this approach, and the original mechanism is the recommended
* approach! Perhaps the most important problem is that troff output, with in-line
* pictures included, doesn't fit the device independent language accepted by
* important post-processors (like proff) and that means you won't be able to
* reliably preview a packed file on your 5620 (or whatever).
*
*/
#include <stdio.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* just for TEMPDIR definition */
#include "ext.h" /* external variable declarations */
FILE *fp_pic = NULL; /* in-line pictures go here */
FILE *picopen();
extern int res, hpos, vpos;
extern int picflag;
extern FILE *tf;
/*****************************************************************************/
picture(buf)
char *buf; /* stuff following 'x X PI' command */
{
int poffset; /* page offset */
int indent; /* indent */
int length; /* line length */
int totrap; /* distance to next trap */
char name[100]; /* picture file and page string */
char hwo[40], *p; /* height, width and offset strings */
char flags[20]; /* miscellaneous stuff */
int page = 1; /* page number pulled from name[] */
double frame[4]; /* height, width, y, and x offsets from hwo[] */
char units; /* scale indicator for frame dimensions */
int whiteout = 0; /* white out the box? */
int outline = 0; /* draw a box around the picture? */
int scaleboth = 0; /* scale both dimensions? */
double adjx = 0.5; /* left-right adjustment */
double adjy = 0.5; /* top-bottom adjustment */
double rot = 0; /* rotation in clockwise degrees */
FILE *fp_in; /* for *name */
int i; /* loop index */
char *strchr();
/*
*
* Called from devcntrl() after an 'x X PI' command is found. The syntax of that
* command is:
*
* x X PI:args
*
* with args separated by colons and given by:
*
* poffset
* indent
* length
* totrap
* file[(page)]
* height[,width[,yoffset[,xoffset]]]
* [flags]
*
* poffset, indent, length, and totrap are given in machine units. height, width,
* and offset refer to the picture frame in inches, unless they're followed by
* the u scale indicator. flags is a string that provides a little bit of control
* over the placement of the picture in the frame. Rotation of the picture, in
* clockwise degrees, is set by the a flag. If it's not followed by an angle
* the current rotation angle is incremented by 90 degrees, otherwise the angle
* is set by the number that immediately follows the a.
*
*/
if ( picflag == OFF ) /* skip it */
return;
flushtext();
flags[0] = '\0'; /* just to be safe */
if ( sscanf(buf, "%d:%d:%d:%d:%[^:]:%[^:]:%[^:]", &poffset, &indent,
&length, &totrap, name, hwo, flags) < 6 ) {
error(NON_FATAL, "too few arguments to specify picture");
return;
} /* End if */
if ( sscanf(name, "%*[^(](%d", &page) == 1 ) /* grab the page number */
strtok(name, "("); /* and separate it from the name */
if ( (fp_in = picopen(name)) == NULL ) {
error(NON_FATAL, "can't open picture file %s", name);
return;
} /* End if */
frame[0] = frame[1] = -1; /* default frame height, width */
frame[2] = frame[3] = 0; /* and y and x offsets */
for ( i = 0, p = hwo-1; i < 4 && p != NULL; i++, p = strchr(p, ',') )
if ( sscanf(++p, "%lf%c", &frame[i], &units) == 2 )
if ( units == 'i' || units == ',' || units == '\0' )
frame[i] *= res;
if ( frame[0] <= 0 ) /* check what we got for height */
frame[0] = totrap;
if ( frame[1] <= 0 ) /* and width - check too big?? */
frame[1] = length - indent;
frame[3] += poffset + indent; /* real x offset */
for ( i = 0; flags[i]; i++ )
switch ( flags[i] ) {
case 'c': adjx = adjy = 0.5; break; /* move to the center */
case 'l': adjx = 0; break; /* left */
case 'r': adjx = 1; break; /* right */
case 't': adjy = 1; break; /* top */
case 'b': adjy = 0; break; /* or bottom justify */
case 'o': outline = 1; break; /* outline the picture */
case 'w': whiteout = 1; break; /* white out the box */
case 's': scaleboth = 1; break; /* scale both dimensions */
case 'a': if ( sscanf(&flags[i+1], "%lf", &rot) != 1 )
rot += 90;
} /* End switch */
restore();
ps_include(fp_in, tf, page, whiteout, outline, scaleboth,
frame[3]+frame[1]/2, -vpos-frame[2]-frame[0]/2, frame[1], frame[0], adjx, adjy, -rot);
save();
fclose(fp_in);
} /* End of picture */
/*****************************************************************************/
FILE *picopen(path)
char *path; /* picture file pathname */
{
char name[100]; /* pathnames */
long pos; /* current position */
long total; /* and sizes - from *fp_pic */
char *tname; /* pathname */
FILE *fp; /* and pointer for the new temp file */
/*
*
* Responsible for finding and opening the next picture file. If we've accumulated
* any in-line pictures fp_pic won't be NULL and we'll look there first. If *path
* is found in *fp_pic we create another temp file, open it for update, unlink it,
* copy in the picture, seek back to the start of the new temp file, and return
* the file pointer to the caller. If fp_pic is NULL or the lookup fails we just
* open file *path and return the resulting file pointer to the caller.
*
*/
if ( fp_pic != NULL ) {
fseek(fp_pic, 0L, 0);
while ( fscanf(fp_pic, "%s %ld\n", name, &total) != EOF ) {
pos = ftell(fp_pic);
if ( strcmp(path, name) == 0 ) {
if ( (tname = tempnam(TEMPDIR, "dpost")) == NULL )
error(FATAL, "can't generate temp file name");
if ( (fp = fopen(tname, "w+r")) == NULL )
error(FATAL, "can't open %s", tname);
unlink(tname);
free(tname);
piccopy(fp_pic, fp, total);
fseek(fp, 0L, 0);
return(fp);
} /* End if */
fseek(fp_pic, total+pos, 0);
} /* End while */
} /* End if */
return(fopen(path, "r"));
} /* End of picopen */
/*****************************************************************************/
inlinepic(fp, buf)
FILE *fp; /* current input file */
char *buf; /* whatever followed "x X InlinePicture" */
{
char *tname; /* temp file pathname - for *fp_pic */
char name[100]; /* picture file pathname */
long total; /* and size - both from *buf */
/*
*
* Adds an in-line picture file to the end of temporary file *fp_pic. All pictures
* grabbed from the input file are saved in the same temp file. Each is preceeded
* by a one line header that includes the original picture file pathname and the
* size of the picture in bytes. The in-line picture file is opened for update,
* left open, and unlinked so it disappears when we do.
*
*/
if ( fp_pic == NULL ) {
if ( (tname = tempnam(TEMPDIR, "dpost")) == NULL )
error(FATAL, "can't generate in-line picture file name");
if ( (fp_pic = fopen(tname, "w+r")) == NULL )
error(FATAL, "can't open in-line picture file %s", tname);
unlink(tname);
} /* End if */
if ( sscanf(buf, "%s %ld", name, &total) != 2 )
error(FATAL, "in-line picture error");
fseek(fp_pic, 0L, 2);
fprintf(fp_pic, "%s %ld\n", name, total);
getc(fp);
fflush(fp_pic);
piccopy(fp, fp_pic, total);
ungetc('\n', fp);
} /* End of inlinepic */
/*****************************************************************************/
piccopy(fp_in, fp_out, total)
FILE *fp_in; /* input */
FILE *fp_out; /* and output file pointers */
long total; /* number of bytes to be copied */
{
long i; /* loop index */
/*
*
* Copies total bytes from file fp_in to fp_out. Used to append picture files to
* *fp_pic and then copy them to yet another temporary file immediately before
* they're used (in picture()).
*
*/
for ( i = 0; i < total; i++ )
if ( putc(getc(fp_in), fp_out) == EOF )
error(FATAL, "error copying in-line picture file");
fflush(fp_out);
} /* End of piccopy */
/*****************************************************************************/
0707070014231030561006440057030057030000010301650522627500700003600000000262post.src/dpost/ps_include.awk /^->/ {
if(ndef)
printf("\t0\n};\n\n")
printf("static char *%s[] = {\n", $2)
ndef++
next
}
/^#/ {next}
$0 != "" {printf("\t\"%s\",\n", $0); next}
END {printf("\t0\n};\n")}
0707070014231030571006440057030057030000010303400522627500700003400000012407post.src/dpost/ps_include.c
#include <stdio.h>
#include "ps_include.h"
#define has(word) (strncmp(buf, word, strlen(word)) == 0)
#define grab(n) ((Section *)(nglobal \
? realloc((char *)global, n*sizeof(Section)) \
: calloc(n, sizeof(Section))))
char buf[512];
typedef struct {long start, end;} Section;
extern char *calloc(), *realloc();
ps_include(fin, fout, page_no, whiteout, outline, scaleboth, cx, cy, sx, sy, ax, ay, rot)
FILE *fin, *fout; /* input and output files */
int page_no; /* physical page number from *fin */
int whiteout; /* erase picture area */
int outline; /* draw a box around it and */
int scaleboth; /* scale both dimensions - if not zero */
double cx, cy; /* center of the picture and */
double sx, sy; /* its size - in current coordinates */
double ax, ay; /* left-right, up-down adjustment */
double rot; /* rotation - in clockwise degrees */
{
int foundpage = 0; /* found the page when non zero */
int foundpbox = 0; /* found the page bounding box */
int nglobal = 0; /* number of global defs so far */
int maxglobal = 0; /* and the number we've got room for */
Section prolog, page, trailer; /* prologue, page, and trailer offsets */
Section *global; /* offsets for all global definitions */
double llx, lly; /* lower left and */
double urx, ury; /* upper right corners - default coords */
double w = whiteout != 0; /* mostly for the var() macro */
double o = outline != 0;
double s = scaleboth != 0;
int i; /* loop index */
/*
*
* Reads a PostScript file (*fin), and uses structuring comments to locate the
* prologue, trailer, global definitions, and the requested page. After the whole
* file is scanned, the special ps_include PostScript definitions are copied to
* *fout, followed by the prologue, global definitions, the requested page, and
* the trailer. Before returning the initial environment (saved in PS_head) is
* restored.
*
* By default we assume the picture is 8.5 by 11 inches, but the BoundingBox
* comment, if found, takes precedence.
*
*/
llx = lly = 0; /* default BoundingBox - 8.5x11 inches */
urx = 72 * 8.5;
ury = 72 * 11.0;
/* section boundaries and bounding box */
prolog.start = prolog.end = 0;
page.start = page.end = 0;
trailer.start = 0;
fseek(fin, 0L, 0);
while ( fgets(buf, sizeof(buf), fin) != NULL )
if (!has("%%"))
continue;
else if (has("%%Page: ")) {
if (!foundpage)
page.start = ftell(fin);
sscanf(buf, "%*s %*s %d", &i);
if (i == page_no)
foundpage = 1;
else if (foundpage && page.end <= page.start)
page.end = ftell(fin);
} else if (has("%%EndPage: ")) {
sscanf(buf, "%*s %*s %d", &i);
if (i == page_no) {
foundpage = 1;
page.end = ftell(fin);
}
if (!foundpage)
page.start = ftell(fin);
} else if (has("%%PageBoundingBox: ")) {
if (i == page_no) {
foundpbox = 1;
sscanf(buf, "%*s %lf %lf %lf %lf",
&llx, &lly, &urx, &ury);
}
} else if (has("%%BoundingBox: ")) {
if (!foundpbox)
sscanf(buf,"%*s %lf %lf %lf %lf",
&llx, &lly, &urx, &ury);
} else if (has("%%EndProlog") || has("%%EndSetup") || has("%%EndDocumentSetup"))
prolog.end = page.start = ftell(fin);
else if (has("%%Trailer"))
trailer.start = ftell(fin);
else if (has("%%BeginGlobal")) {
if (page.end <= page.start) {
if (nglobal >= maxglobal) {
maxglobal += 20;
global = grab(maxglobal);
}
global[nglobal].start = ftell(fin);
}
} else if (has("%%EndGlobal"))
if (page.end <= page.start)
global[nglobal++].end = ftell(fin);
fseek(fin, 0L, 2);
if (trailer.start == 0)
trailer.start = ftell(fin);
trailer.end = ftell(fin);
if (page.end <= page.start)
page.end = trailer.start;
/*
fprintf(stderr, "prolog=(%d,%d)\n", prolog.start, prolog.end);
fprintf(stderr, "page=(%d,%d)\n", page.start, page.end);
for(i = 0; i < nglobal; i++)
fprintf(stderr, "global[%d]=(%d,%d)\n", i, global[i].start, global[i].end);
fprintf(stderr, "trailer=(%d,%d)\n", trailer.start, trailer.end);
*/
/* all output here */
print(fout, PS_head);
/*
* Unix 4.0 didn't like the var macro.
*
var(llx); var(lly); var(urx); var(ury); var(w); var(o); var(s);
var(cx); var(cy); var(sx); var(sy); var(ax); var(ay); var(rot);
*
*/
fprintf(fout, "/llx %g def\n", llx);
fprintf(fout, "/lly %g def\n", lly);
fprintf(fout, "/urx %g def\n", urx);
fprintf(fout, "/ury %g def\n", ury);
fprintf(fout, "/w %g def\n", w);
fprintf(fout, "/o %g def\n", o);
fprintf(fout, "/s %g def\n", s);
fprintf(fout, "/cx %g def\n", cx);
fprintf(fout, "/cy %g def\n", cy);
fprintf(fout, "/sx %g def\n", sx);
fprintf(fout, "/sy %g def\n", sy);
fprintf(fout, "/ax %g def\n", ax);
fprintf(fout, "/ay %g def\n", ay);
fprintf(fout, "/rot %g def\n", rot);
print(fout, PS_setup);
copy(fin, fout, &prolog);
for(i = 0; i < nglobal; i++)
copy(fin, fout, &global[i]);
copy(fin, fout, &page);
copy(fin, fout, &trailer);
print(fout, PS_tail);
if(nglobal)
free(global);
}
static
print(fout, s)
FILE *fout;
char **s;
{
while (*s)
fprintf(fout, "%s\n", *s++);
}
static
copy(fin, fout, s)
FILE *fin, *fout;
Section *s;
{
if (s->end <= s->start)
return;
fseek(fin, s->start, 0);
while (ftell(fin) < s->end && fgets(buf, sizeof(buf), fin) != NULL)
if (buf[0] != '%')
fprintf(fout, "%s", buf);
}
0707070014231030601006440057030057030000010301660522627500700003400000003752post.src/dpost/ps_include.h static char *PS_head[] = {
"%ps_include: begin",
"save",
"/ed {exch def} def",
"{} /showpage ed",
"{} /copypage ed",
"{} /erasepage ed",
"{} /letter ed",
"currentdict /findfont known systemdict /findfont known and {",
" /findfont systemdict /findfont get def",
"} if",
"36 dict dup /PS-include-dict-dw ed begin",
"/context ed",
"count array astore /o-stack ed",
"%ps_include: variables begin",
0
};
static char *PS_setup[] = {
"%ps_include: variables end",
"{llx lly urx ury} /bbox ed",
"{newpath 2 index exch 2 index exch dup 6 index exch",
" moveto 3 {lineto} repeat closepath} /boxpath ed",
"{dup mul exch dup mul add sqrt} /len ed",
"{2 copy gt {exch} if pop} /min ed",
"{2 copy lt {exch} if pop} /max ed",
"{transform round exch round exch A itransform} /nice ed",
"{6 array} /n ed",
"n defaultmatrix n currentmatrix n invertmatrix n concatmatrix /A ed",
"urx llx sub 0 A dtransform len /Sx ed",
"0 ury lly sub A dtransform len /Sy ed",
"llx urx add 2 div lly ury add 2 div A transform /Cy ed /Cx ed",
"rot dup sin abs /S ed cos abs /C ed",
"Sx S mul Sy C mul add /H ed",
"Sx C mul Sy S mul add /W ed",
"sy H div /Scaley ed",
"sx W div /Scalex ed",
"s 0 eq {Scalex Scaley min dup /Scalex ed /Scaley ed} if",
"sx Scalex W mul sub 0 max ax 0.5 sub mul cx add /cx ed",
"sy Scaley H mul sub 0 max ay 0.5 sub mul cy add /cy ed",
"urx llx sub 0 A dtransform exch atan rot exch sub /rot ed",
"n currentmatrix initgraphics setmatrix",
"cx cy translate",
"Scalex Scaley scale",
"rot rotate",
"Cx neg Cy neg translate",
"A concat",
"bbox boxpath clip newpath",
"w 0 ne {gsave bbox boxpath 1 setgray fill grestore} if",
"end",
"gsave",
"%ps_include: inclusion begin",
0
};
static char *PS_tail[] = {
"%ps_include: inclusion end",
"grestore",
"PS-include-dict-dw begin",
"o 0 ne {gsave A defaultmatrix /A ed llx lly nice urx ury nice",
" initgraphics 0.1 setlinewidth boxpath stroke grestore} if",
"clear o-stack aload pop",
"context end restore",
"%ps_include: end",
0
};
0707070014231030611006440057030057030000010303600522627500700003500000007004post.src/dpost/ps_include.ps -> PS_head
%ps_include: begin
save
/ed {exch def} def
# redefine dangerous operators
{} /showpage ed
{} /copypage ed
{} /erasepage ed
{} /letter ed
# restore findfont from systemdict if it looks like it's be redefined
currentdict /findfont known systemdict /findfont known and {
/findfont systemdict /findfont get def
} if
# computations are done in the context of a new dictionary
36 dict dup /PS-include-dict-dw ed begin
# context holds the save object created earlier
/context ed
# save and clear the operand stack
count array astore /o-stack ed
# the following variables are now expected:
# llx,lly,urx,ury bounding box of picture to be included
# w nonzero if space should be painted white to start
# o nonzero if space should be outlined
# s nonzero if both dimensions should be scaled
# cx,cy center of page space in current coordinates
# sx,sy size of page space in current coordinates
# ax,ay left-right, up-down adjustment of picture in page space
# rot rotation of picture in page space
%ps_include: variables begin
-> PS_setup
%ps_include: variables end
# some routines:
# - BBOX llx lly urx ury put bounding box on stack
# llx lly urx ury BOXPATH - make a path with given box corners
# dx dy LEN length compute length of positionless vector
# a b MIN min compute minimum of two numbers
# a b MAX max compute maximum of two numbers
# x y NICE x y move to pixel boundaries in default coords
{llx lly urx ury} /bbox ed
{newpath 2 index exch 2 index exch dup 6 index exch
moveto 3 {lineto} repeat closepath} /boxpath ed
{dup mul exch dup mul add sqrt} /len ed
{2 copy gt {exch} if pop} /min ed
{2 copy lt {exch} if pop} /max ed
{transform round exch round exch A itransform} /nice ed
# A is the transformation from default to current coordinates
{6 array} /n ed
n defaultmatrix n currentmatrix n invertmatrix n concatmatrix /A ed
# Sx,Sy and Cx,Cy are dimensions and size of bounding box in current coordinates
urx llx sub 0 A dtransform len /Sx ed
0 ury lly sub A dtransform len /Sy ed
llx urx add 2 div lly ury add 2 div A transform /Cy ed /Cx ed
# H and W are height and width of rotated box in current coordinates
rot dup sin abs /S ed cos abs /C ed
Sx S mul Sy C mul add /H ed
Sx C mul Sy S mul add /W ed
# Scalex and Scaley are the required horizontal and vertical scaling factors
sy H div /Scaley ed
sx W div /Scalex ed
# Preserve aspect ratio if we're not scaling both dimensions (ie. s is 0)
s 0 eq {Scalex Scaley min dup /Scalex ed /Scaley ed} if
# add to cx,cy the shift needed within the page space
sx Scalex W mul sub 0 max ax 0.5 sub mul cx add /cx ed
sy Scaley H mul sub 0 max ay 0.5 sub mul cy add /cy ed
# the actual rotation needed is rot less the current rotation
urx llx sub 0 A dtransform exch atan rot exch sub /rot ed
# set up the coordinate system
n currentmatrix initgraphics setmatrix
cx cy translate
Scalex Scaley scale
rot rotate
Cx neg Cy neg translate
A concat
# set the clipping region, and conditionally whiteout and outline
bbox boxpath clip newpath
w 0 ne {gsave bbox boxpath 1 setgray fill grestore} if
# pop local dictionary from the dict stack
end
# now begins the actual material extracted from the file
gsave
%ps_include: inclusion begin
-> PS_tail
%ps_include: inclusion end
grestore
# within the context of the local dictionary ...
PS-include-dict-dw begin
o 0 ne {gsave A defaultmatrix /A ed llx lly nice urx ury nice
initgraphics 0.1 setlinewidth boxpath stroke grestore} if
# ... restore the operand stack and the save context
clear o-stack aload pop
context end restore
%ps_include: end
0707070014231216400407550057030057030000020630640522633076600002300000000000post.src/postprint 0707070014231216411006440057030057030000010630650522627500700003200000000175post.src/postprint/README
Simple ASCII file to PostScript translator. The -e options is new
and allows access to all characters in PostScript fonts.
0707070014231216421006440057030057030000010636000522627500700003700000051204post.src/postprint/postprint.c /*
*
* postprint - PostScript translator for ASCII files.
*
* A simple program that translates ASCII files into PostScript. All it really
* does is expand tabs and backspaces, handle character quoting, print text lines,
* and control when pages are started based on the requested number of lines per
* page.
*
* The PostScript prologue is copied from *prologue before any of the input files
* are translated. The program expects that the following procedures are defined
* in that file:
*
* setup
*
* mark ... setup -
*
* Handles special initialization stuff that depends on how the program
* was called. Expects to find a mark followed by key/value pairs on the
* stack. The def operator is applied to each pair up to the mark, then
* the default state is set up.
*
* pagesetup
*
* page pagesetup -
*
* Does whatever is needed to set things up for the next page. Expects
* to find the current page number on the stack.
*
* l
*
* string l -
*
* Prints string starting in the first column and then goes to the next
* line.
*
* L
*
* mark string column string column ... L mark
*
* Prints each string on the stack starting at the horizontal position
* selected by column. Used when tabs and spaces can be sufficiently well
* compressed to make the printer overhead worthwhile. Always used when
* we have to back up.
*
* LL
*
* mark string column string column ... LL mark
*
* Like L, but only used to prevent potential PostScript stack overflow
* from too many string/column pairs. Stays on the current line. It will
* not be needed often!!
*
* done
*
* done
*
* Makes sure the last page is printed. Only needed when we're printing
* more than one page on each sheet of paper.
*
* Almost everything has been changed in this version of postprint. The program
* is more intelligent, especially about tabs, spaces, and backspacing, and as a
* result output files usually print faster. Output files also now conform to
* Adobe's file structuring conventions, which is undoubtedly something I should
* have done in the first version of the program. If the number of lines per page
* is set to 0, which can be done using the -l option, pointsize will be used to
* guess a reasonable value. The estimate is based on the values of LINESPP,
* POINTSIZE, and pointsize, and assumes LINESPP lines would fit on a page if
* we printed in size POINTSIZE. Selecting a point size using the -s option and
* adding -l0 to the command line forces the guess to be made.
*
* Many default values, like the magnification and orientation, are defined in
* the prologue, which is where they belong. If they're changed (by options), an
* appropriate definition is made after the prologue is added to the output file.
* The -P option passes arbitrary PostScript through to the output file. Among
* other things it can be used to set (or change) values that can't be accessed by
* other options.
*
*/
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for the prologue */
#include "ext.h" /* external variable declarations */
#include "postprint.h" /* a few special definitions */
char *optnames = "a:c:ef:l:m:n:o:p:r:s:t:x:y:A:C:E:J:L:P:R:DI";
char *prologue = POSTPRINT; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
int linespp = LINESPP; /* number of lines per page */
int pointsize = POINTSIZE; /* in this point size */
int tabstops = TABSTOPS; /* tabs set at these columns */
int crmode = 0; /* carriage return mode - 0, 1, or 2 */
int extended = TRUE; /* use escapes for unprintable chars */
int col = 1; /* next character goes in this column */
int line = 1; /* on this line */
int stringcount = 0; /* number of strings on the stack */
int stringstart = 1; /* column where current one starts */
Fontmap fontmap[] = FONTMAP; /* for translating font names */
char *fontname = "Courier"; /* use this PostScript font */
int page = 0; /* page we're working on */
int printed = 0; /* printed this many pages */
FILE *fp_in = stdin; /* read from this file */
FILE *fp_out = stdout; /* and write stuff here */
FILE *fp_acct = NULL; /* for accounting data */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A simple program that translates ASCII files into PostScript. If there's more
* than one input file, each begins on a new page.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* really just for error messages */
init_signals(); /* sets up interrupt handling */
header(); /* PostScript header and prologue */
options(); /* handle the command line options */
setup(); /* for PostScript */
arguments(); /* followed by each input file */
done(); /* print the last page etc. */
account(); /* job accounting data */
exit(x_stat); /* not much could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Makes sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
/*
*
* Scans the option list looking for things, like the prologue file, that we need
* right away but could be changed from the default. Doing things this way is an
* attempt to conform to Adobe's latest file structuring conventions. In particular
* they now say there should be nothing executed in the prologue, and they have
* added two new comments that delimit global initialization calls. Once we know
* where things really are we write out the job header, follow it by the prologue,
* and then add the ENDPROLOG and BEGINSETUP comments.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
if ( DOROUND )
cat(ROUNDPAGE);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
/*
*
* Reads and processes the command line options. Added the -P option so arbitrary
* PostScript code can be passed through. Expect it could be useful for changing
* definitions in the prologue for which options have not been defined.
*
* Although any PostScript font can be used, things will only work well for
* constant width fonts.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'e': /* obsolete - it's now always on */
extended = TRUE;
break;
case 'f': /* use this PostScript font */
fontname = get_font(optarg);
fprintf(stdout, "/font /%s def\n", fontname);
break;
case 'l': /* lines per page */
linespp = atoi(optarg);
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'r': /* carriage return mode */
crmode = atoi(optarg);
break;
case 's': /* point size */
pointsize = atoi(optarg);
fprintf(stdout, "/pointsize %s def\n", optarg);
break;
case 't': /* tabstops */
tabstops = atoi(optarg);
break;
case 'x': /* shift things horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* force job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding */
fontencoding = optarg;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* special global or page level request */
saverequest(optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
char *get_font(name)
char *name; /* name the user asked for */
{
int i; /* for looking through fontmap[] */
/*
*
* Called from options() to map a user's font name into a legal PostScript name.
* If the lookup fails *name is returned to the caller. That should let you choose
* any PostScript font, although things will only work well for constant width
* fonts.
*
*/
for ( i = 0; fontmap[i].name != NULL; i++ )
if ( strcmp(name, fontmap[i].name) == 0 )
return(fontmap[i].val);
return(name);
} /* End of get_font */
/*****************************************************************************/
setup()
{
/*
*
* Handles things that must be done after the options are read but before the
* input files are processed. linespp (lines per page) can be set using the -l
* option. If it's not positive we calculate a reasonable value using the
* requested point size - assuming LINESPP lines fit on a page in point size
* POINTSIZE.
*
*/
writerequest(0, stdout); /* global requests eg. manual feed */
setencoding(fontencoding);
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) {
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
if ( linespp <= 0 )
linespp = LINESPP * POINTSIZE / pointsize;
} /* End of setup */
/*****************************************************************************/
arguments()
{
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll translate stdin.
*
*/
if ( argc < 1 )
text();
else { /* at least one argument is left */
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
text();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End else */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Finished with all the input files, so mark the end of the pages with a TRAILER
* comment, make sure the last page prints, and add things like the PAGES comment
* that can only be determined after all the input files have been read.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, fontname);
fprintf(stdout, "%s %d\n", PAGES, printed);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Writes an accounting record to *fp_acct provided it's not NULL. Accounting is
* requested using the -A or -J options.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
text()
{
int ch; /* next input character */
/*
*
* Translates *fp_in into PostScript. Intercepts space, tab, backspace, newline,
* return, and formfeed. Everything else goes to oput(), which handles quoting
* (if needed) and escapes for nonascii characters if extended is TRUE. The
* redirect(-1) call forces the initial output to go to /dev/null - so stuff
* that formfeed() does at the end of each page goes to /dev/null rather than
* the real output file.
*
*/
redirect(-1); /* get ready for the first page */
formfeed(); /* force PAGE comment etc. */
while ( (ch = getc(fp_in)) != EOF )
switch ( ch ) {
case '\n':
newline();
break;
case '\t':
case '\b':
case ' ':
spaces(ch);
break;
case '\014':
formfeed();
break;
case '\r':
if ( crmode == 1 )
spaces(ch);
else if ( crmode == 2 )
newline();
break;
default:
oput(ch);
break;
} /* End switch */
formfeed(); /* next file starts on a new page? */
} /* End of text */
/*****************************************************************************/
formfeed()
{
/*
*
* Called whenever we've finished with the last page and want to get ready for the
* next one. Also used at the beginning and end of each input file, so we have to
* be careful about what's done. The first time through (up to the redirect() call)
* output goes to /dev/null.
*
* Adobe now recommends that the showpage operator occur after the page level
* restore so it can be easily redefined to have side-effects in the printer's VM.
* Although it seems reasonable I haven't implemented it, because it makes other
* things, like selectively setting manual feed or choosing an alternate paper
* tray, clumsy - at least on a per page basis.
*
*/
if ( fp_out == stdout ) /* count the last page */
printed++;
endline(); /* print the last line */
fprintf(fp_out, "cleartomark\n");
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
if ( ungetc(getc(fp_in), fp_in) == EOF )
redirect(-1);
else redirect(++page);
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fprintf(fp_out, "/saveobj save def\n");
fprintf(fp_out, "mark\n");
writerequest(printed+1, fp_out);
fprintf(fp_out, "%d pagesetup\n", printed+1);
line = 1;
} /* End of formfeed */
/*****************************************************************************/
newline()
{
/*
*
* Called when we've read a newline character. The call to startline() ensures
* that at least an empty string is on the stack.
*
*/
startline();
endline(); /* print the current line */
if ( ++line > linespp ) /* done with this page */
formfeed();
} /* End of newline */
/*****************************************************************************/
spaces(ch)
int ch; /* next input character */
{
int endcol; /* ending column */
int i; /* final distance - in spaces */
/*
*
* Counts consecutive spaces, tabs, and backspaces and figures out where the next
* string should start. Once that's been done we try to choose an efficient way
* to output the required number of spaces. The choice is between using procedure
* l with a single string on the stack and L with several string and column pairs.
* We usually break even, in terms of the size of the output file, if we need four
* consecutive spaces. More means using L decreases the size of the file. For now
* if there are less than 6 consecutive spaces we just add them to the current
* string, otherwise we end that string, follow it by its starting position, and
* begin a new one that starts at endcol. Backspacing is always handled this way.
*
*/
startline(); /* so col makes sense */
endcol = col;
do {
if ( ch == ' ' )
endcol++;
else if ( ch == '\t' )
endcol += tabstops - ((endcol - 1) % tabstops);
else if ( ch == '\b' )
endcol--;
else if ( ch == '\r' )
endcol = 1;
else break;
} while ( ch = getc(fp_in) ); /* if ch is 0 we'd quit anyway */
ungetc(ch, fp_in); /* wasn't a space, tab, or backspace */
if ( endcol < 1 ) /* can't move past left edge */
endcol = 1;
if ( (i = endcol - col) >= 0 && i < 6 )
for ( ; i > 0; i-- )
oput((int)' ');
else {
endstring();
col = stringstart = endcol;
} /* End else */
} /* End of spaces */
/*****************************************************************************/
startline()
{
/*
*
* Called whenever we want to be certain we're ready to start pushing characters
* into an open string on the stack. If stringcount is positive we've already
* started, so there's nothing to do. The first string starts in column 1.
*
*/
if ( stringcount < 1 ) {
putc('(', fp_out);
stringstart = col = 1;
stringcount = 1;
} /* End if */
} /* End of startline */
/*****************************************************************************/
endstring()
{
/*
*
* End the current string and start a new one.
*
*/
if ( stringcount > 100 ) { /* don't put too much on the stack */
fprintf(fp_out, ")%d LL\n(", stringstart-1);
stringcount = 2; /* kludge - don't let endline() use l */
} else {
fprintf(fp_out, ")%d(", stringstart-1);
stringcount++;
} /* End else */
} /* End of endstring */
/*****************************************************************************/
endline()
{
/*
*
* Generates a call to the PostScript procedure that processes all the text on
* the stack - provided stringcount is positive. If one string is on the stack
* the fast procedure (ie. l) is used to print the line, otherwise the slower
* one that processes string and column pairs is used.
*
*/
if ( stringcount == 1 )
fprintf(fp_out, ")l\n");
else if ( stringcount > 1 )
fprintf(fp_out, ")%d L\n", stringstart-1);
stringcount = 0;
} /* End of endline */
/*****************************************************************************/
oput(ch)
int ch; /* next output character */
{
/*
*
* Responsible for adding all printing characters from the input file to the
* open string on top of the stack.
*
*/
if ( isascii(ch) && isprint(ch) ) {
startline();
if ( ch == '(' || ch == ')' || ch == '\\' )
putc('\\', fp_out);
putc(ch, fp_out);
col++;
} else if ( extended == TRUE ) {
startline();
fprintf(fp_out, "\\%.3o", ch & 0377);
col++;
} /* End if */
} /* End of oput */
/*****************************************************************************/
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
/*
*
* If we're not supposed to print page pg, fp_out will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014231216431006440057030057030000010636260522627500700003700000002055post.src/postprint/postprint.h /*
*
* Default lines per page, tab stops, and point size.
*
*/
#define LINESPP 66
#define TABSTOPS 8
#define POINTSIZE 10
/*
*
* An array of type Fontmap helps convert font names requested by users into
* legitimate PostScript names. The array is initialized using FONTMAP, which must
* end with an entry that has NULL defined as its name field. The only fonts that
* are guaranteed to work well are the constant width fonts.
*
*/
typedef struct {
char *name; /* user's font name */
char *val; /* corresponding PostScript name */
} Fontmap;
#define FONTMAP \
\
{ \
"R", "Courier", \
"I", "Courier-Oblique", \
"B", "Courier-Bold", \
"CO", "Courier", \
"CI", "Courier-Oblique", \
"CB", "Courier-Bold", \
"CW", "Courier", \
"PO", "Courier", \
"courier", "Courier", \
"cour", "Courier", \
"co", "Courier", \
NULL, NULL \
}
/*
*
* Some of the non-integer functions in postprint.c.
*
*/
char *get_font();
0707070014231215121006400057030057030000010637050522633076500004000000004020post.src/postprint/postprint.mk MAKE=/bin/make
MAKEFILE=postprint.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=postprint.h\
$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=postprint.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o
all : postprint
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp postprint $(POSTBIN)/postprint
@chmod 755 $(POSTBIN)/postprint
@chgrp $(GROUP) $(POSTBIN)/postprint
@chown $(OWNER) $(POSTBIN)/postprint
cp postprint.ps $(POSTLIB)/postprint.ps
@chmod 644 $(POSTLIB)/postprint.ps
@chgrp $(GROUP) $(POSTLIB)/postprint.ps
@chown $(OWNER) $(POSTLIB)/postprint.ps
cp postprint.1 $(MAN1DIR)/postprint.1
@chmod 644 $(MAN1DIR)/postprint.1
@chgrp $(GROUP) $(MAN1DIR)/postprint.1
@chown $(OWNER) $(MAN1DIR)/postprint.1
clean :
rm -f *.o
clobber : clean
rm -f postprint
postprint : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postprint $(OFILES)
postprint.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
postprint.1 >XXX.1; \
mv XXX.1 postprint.1
0707070014231215061006400057030057030000010551100522633076600003700000010703post.src/postprint/postprint.1 .ds dQ /usr/lib/postscript
.TH POSTPRINT 1 "DWB 3.2"
.SH NAME
.B postprint
\- PostScript translator for text files
.SH SYNOPSIS
\*(mBpostprint\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B postprint
translates text
.I files
into PostScript and writes the results on the
standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP
.OP \-f name
Print
.I files
using font
.IR name .
Any PostScript font can be used,
although the best results will only be
obtained with constant width fonts.
The default font is Courier.
.TP
.OP \-l num
Set the length of a page to
.I num
lines.
By default
.I num
is 66.
Setting
.I num
to 0 is allowed, and will cause
.B postprint
to guess a value, based on the point size that is being used.
.TP
.OP \-m num
Magnify each logical page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which is located near the upper left corner of
each page.
The default magnification is 1.0.
.TP
.OP \-n num
Print
.I num
logical pages on each piece of paper,
where
.I num
can be any positive integer.
By default
.I num
is set to 1.
.TP
.OP \-o list
Print pages whose numbers are given in the comma-separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP
.OP \-r num
Selects carriage return behavior.
Carriage returns are ignored if
.I num
is 0,
cause a return to column 1 if
.I num
is 1,
and generate a newline if
.I num
is 2.
The default
.I num
is 0.
.TP
.OP \-s num
Print
.I files
using point size
.IR num .
When printing in landscape mode
.I num
is scaled by a factor that depends on the
imaging area of the device.
The default size for portrait mode is 10.
.TP
.OP \-t num
Assume tabs are set every
.I num
columns, starting with the first column.
By default tabs are set every 8 columns.
.TP
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed near the
upper left corner of the page, with positive
x to the right and positive y down the page.
Positive
.I num
moves everything right.
The default offset is 0.25 inches.
.TP
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves text down the page.
The default offset is 0.25 inches.
.TP
.OP \-E name
Set the character encoding for text fonts to
.IR name .
Requesting
.I name
means include file
.MI \*(dQ/ name .enc \f1.
A nonexistent encoding file is silently ignored.
The default selects file
.MR \*(dQ/Default.enc .
.TP
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/postprint.ps .
.PP
Three options allow insertion of arbitrary PostScript
at controlled points in the translation process:
.TP 0.75i
.OP \-C file
Copy
.I file
to the output file;
.I file
must contain legitimate PostScript.
.TP
.OP \-P string
Include
.I string
in the output file;
.I string
must be legitimate PostScript.
.TP
.OP \-R action
Requests special
.I action
(e.g.,
.MR manualfeed )
on a per page or global basis.
The
.I action
string can be given as
.IR request ,
.IM request : page\f1\|,
or
.IM request : page : file\f1\|.
If
.I page
is omitted or given as 0, the request
applies to all pages.
If
.I file
is omitted, the request
lookup is done in
.MR \*(dQ/ps.requests .
.PP
A new logical page is started after 66 lines have been printed
on the current page, or whenever an
.SM ASCII
form feed character is read.
The number of lines per page can be changed using the
.OP \-l
option.
Unprintable
.SM ASCII
characters are ignored,
and lines that are too long are silently truncated
by the printer.
.SH EXAMPLES
.PP
Print
.I file1
and
.I file2
in landscape mode:
.EX
postprint -pland \f2file1 file2
.EE
Print three logical pages on each physical page in portrait mode:
.EX
postprint -n3 \f2file
.EE
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully processed.
.SH FILES
.MW \*(dQ/postprint.ps
.br
.MW \*(dQ/forms.ps
.br
.MW \*(dQ/ps.requests
.SH SEE ALSO
.BR dpost (1),
.BR postdaisy(1),
.BR postdmd(1),
.BR postio(1),
.BR postmd(1),
.BR postreverse(1),
.BR posttek(1),
.BR psencoding (1)
0707070014231216461006440057030057030000010637200522627500700004000000047760post.src/postprint/Lpostprint.c /*
*
* postprint - PostScript translator for ASCII files.
*
* A simple program that translates ASCII files into PostScript. All it really
* does is expand tabs and backspaces, handle character quoting, print text lines,
* and control when pages are started based on the requested number of lines per
* page.
*
* The PostScript prologue is copied from *prologue before any of the input files
* are translated. The program expects that the following procedures are defined
* in that file:
*
* setup
*
* mark ... setup -
*
* Handles special initialization stuff that depends on how the program
* was called. Expects to find a mark followed by key/value pairs on the
* stack. The def operator is applied to each pair up to the mark, then
* the default state is set up.
*
* pagesetup
*
* page pagesetup -
*
* Does whatever is needed to set things up for the next page. Expects
* to find the current page number on the stack.
*
* l
*
* string l -
*
* Prints string starting in the first column and then goes to the next
* line.
*
* L
*
* mark string column string column ... L mark
*
* Prints each string on the stack starting at the horizontal position
* selected by column. Used when tabs and spaces can be sufficiently well
* compressed to make the printer overhead worthwhile. Always used when
* we have to back up.
*
* done
*
* done
*
* Makes sure the last page is printed. Only needed when we're printing
* more than one page on each sheet of paper.
*
* Almost everything has been changed in this version of postprint. The program
* is more intelligent, especially about tabs, spaces, and backspacing, and as a
* result output files usually print faster. Output files also now conform to
* Adobe's file structuring conventions, which is undoubtedly something I should
* have done in the first version of the program. If the number of lines per page
* is set to 0, which can be done using the -l option, pointsize will be used to
* guess a reasonable value. The estimate is based on the values of LINESPP,
* POINTSIZE, and pointsize, and assumes LINESPP lines would fit on a page if
* we printed in size POINTSIZE. Selecting a point size using the -s option and
* adding -l0 to the command line forces the guess to be made.
*
* Many default values, like the magnification and orientation, are defined in
* the prologue, which is where they belong. If they're changed (by options), an
* appropriate definition is made after the prologue is added to the output file.
* The -P option passes arbitrary PostScript through to the output file. Among
* other things it can be used to set (or change) values that can't be accessed by
* other options.
*
*/
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for the prologue */
#include "ext.h" /* external variable declarations */
#include "postprint.h" /* a few special definitions */
char *optnames = "a:c:ef:l:m:n:o:p:r:s:t:x:y:A:C:E:J:L:P:R:DI";
char *prologue = POSTPRINT; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
int linespp = LINESPP; /* number of lines per page */
int pointsize = POINTSIZE; /* in this point size */
int tabstops = TABSTOPS; /* tabs set at these columns */
int crmode = 0; /* carriage return mode - 0, 1, or 2 */
int extended = TRUE; /* use escapes for unprintable chars */
int col = 1; /* next character goes in this column */
int line = 1; /* on this line */
int stringcount = 0; /* number of strings on the stack */
int stringstart = 1; /* column where current one starts */
Fontmap fontmap[] = FONTMAP; /* for translating font names */
char *fontname = "Courier"; /* use this PostScript font */
int page = 0; /* page we're working on */
int printed = 0; /* printed this many pages */
FILE *fp_in = stdin; /* read from this file */
FILE *fp_out = stdout; /* and write stuff here */
FILE *fp_acct = NULL; /* for accounting data */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A simple program that translates ASCII files into PostScript. If there's more
* than one input file, each begins on a new page.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* really just for error messages */
init_signals(); /* sets up interrupt handling */
header(); /* PostScript header and prologue */
options(); /* handle the command line options */
setup(); /* for PostScript */
arguments(); /* followed by each input file */
done(); /* print the last page etc. */
account(); /* job accounting data */
exit(x_stat); /* not much could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Makes sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
/*
*
* Scans the option list looking for things, like the prologue file, that we need
* right away but could be changed from the default. Doing things this way is an
* attempt to conform to Adobe's latest file structuring conventions. In particular
* they now say there should be nothing executed in the prologue, and they have
* added two new comments that delimit global initialization calls. Once we know
* where things really are we write out the job header, follow it by the prologue,
* and then add the ENDPROLOG and BEGINSETUP comments.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
if ( DOROUND )
cat(ROUNDPAGE);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
/*
*
* Reads and processes the command line options. Added the -P option so arbitrary
* PostScript code can be passed through. Expect it could be useful for changing
* definitions in the prologue for which options have not been defined.
*
* Although any PostScript font can be used, things will only work well for
* constant width fonts.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'e': /* obsolete - it's now always on */
extended = TRUE;
break;
case 'f': /* use this PostScript font */
fontname = get_font(optarg);
fprintf(stdout, "/font /%s def\n", fontname);
break;
case 'l': /* lines per page */
linespp = atoi(optarg);
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'r': /* carriage return mode */
crmode = atoi(optarg);
break;
case 's': /* point size */
pointsize = atoi(optarg);
fprintf(stdout, "/pointsize %s def\n", optarg);
break;
case 't': /* tabstops */
tabstops = atoi(optarg);
break;
case 'x': /* shift things horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* force job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding */
fontencoding = optarg;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* special global or page level request */
saverequest(optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
char *get_font(name)
char *name; /* name the user asked for */
{
int i; /* for looking through fontmap[] */
/*
*
* Called from options() to map a user's font name into a legal PostScript name.
* If the lookup fails *name is returned to the caller. That should let you choose
* any PostScript font, although things will only work well for constant width
* fonts.
*
*/
for ( i = 0; fontmap[i].name != NULL; i++ )
if ( strcmp(name, fontmap[i].name) == 0 )
return(fontmap[i].val);
return(name);
} /* End of get_font */
/*****************************************************************************/
setup()
{
/*
*
* Handles things that must be done after the options are read but before the
* input files are processed. linespp (lines per page) can be set using the -l
* option. If it's not positive we calculate a reasonable value using the
* requested point size - assuming LINESPP lines fit on a page in point size
* POINTSIZE.
*
*/
writerequest(0, stdout); /* global requests eg. manual feed */
setencoding(fontencoding);
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) {
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
if ( linespp <= 0 )
linespp = LINESPP * POINTSIZE / pointsize;
} /* End of setup */
/*****************************************************************************/
arguments()
{
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll translate stdin.
*
*/
if ( argc < 1 )
text();
else { /* at least one argument is left */
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
text();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End else */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Finished with all the input files, so mark the end of the pages with a TRAILER
* comment, make sure the last page prints, and add things like the PAGES comment
* that can only be determined after all the input files have been read.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, fontname);
fprintf(stdout, "%s %d\n", PAGES, printed);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Writes an accounting record to *fp_acct provided it's not NULL. Accounting is
* requested using the -A or -J options.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
text()
{
int ch; /* next input character */
/*
*
* Translates *fp_in into PostScript. Intercepts space, tab, backspace, newline,
* return, and formfeed. Everything else goes to oput(), which handles quoting
* (if needed) and escapes for nonascii characters if extended is TRUE. The
* redirect(-1) call forces the initial output to go to /dev/null - so stuff
* that formfeed() does at the end of each page goes to /dev/null rather than
* the real output file.
*
*/
redirect(-1); /* get ready for the first page */
formfeed(); /* force PAGE comment etc. */
while ( (ch = getc(fp_in)) != EOF )
switch ( ch ) {
case '\n':
newline();
break;
case '\t':
case '\b':
case ' ':
spaces(ch);
break;
case '\014':
formfeed();
break;
case '\r':
if ( crmode == 1 )
spaces(ch);
else if ( crmode == 2 )
newline();
break;
default:
oput(ch);
break;
} /* End switch */
formfeed(); /* next file starts on a new page? */
} /* End of text */
/*****************************************************************************/
formfeed()
{
/*
*
* Called whenever we've finished with the last page and want to get ready for the
* next one. Also used at the beginning and end of each input file, so we have to
* be careful about what's done. The first time through (up to the redirect() call)
* output goes to /dev/null.
*
* Adobe now recommends that the showpage operator occur after the page level
* restore so it can be easily redefined to have side-effects in the printer's VM.
* Although it seems reasonable I haven't implemented it, because it makes other
* things, like selectively setting manual feed or choosing an alternate paper
* tray, clumsy - at least on a per page basis.
*
*/
if ( fp_out == stdout ) /* count the last page */
printed++;
endline(); /* print the last line */
fprintf(fp_out, "cleartomark\n");
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
if ( ungetc(getc(fp_in), fp_in) == EOF )
redirect(-1);
else redirect(++page);
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fprintf(fp_out, "/saveobj save def\n");
fprintf(fp_out, "mark\n");
writerequest(printed+1, fp_out);
fprintf(fp_out, "%d pagesetup\n", printed+1);
line = 1;
} /* End of formfeed */
/*****************************************************************************/
newline()
{
/*
*
* Called when we've read a newline character. The call to startline() ensures
* that at least an empty string is on the stack.
*
*/
startline();
endline(); /* print the current line */
if ( ++line > linespp ) /* done with this page */
formfeed();
} /* End of newline */
/*****************************************************************************/
spaces(ch)
int ch; /* next input character */
{
int endcol; /* ending column */
int i; /* final distance - in spaces */
/*
*
* Counts consecutive spaces, tabs, and backspaces and figures out where the next
* string should start. Once that's been done we try to choose an efficient way
* to output the required number of spaces. The choice is between using procedure
* l with a single string on the stack and L with several string and column pairs.
* We usually break even, in terms of the size of the output file, if we need four
* consecutive spaces. More means using L decreases the size of the file. For now
* if there are less than 6 consecutive spaces we just add them to the current
* string, otherwise we end that string, follow it by its starting position, and
* begin a new one that starts at endcol. Backspacing is always handled this way.
*
*/
startline(); /* so col makes sense */
endcol = col;
do {
if ( ch == ' ' )
endcol++;
else if ( ch == '\t' )
endcol += tabstops - ((endcol - 1) % tabstops);
else if ( ch == '\b' )
endcol--;
else if ( ch == '\r' )
endcol = 1;
else break;
} while ( ch = getc(fp_in) ); /* if ch is 0 we'd quit anyway */
ungetc(ch, fp_in); /* wasn't a space, tab, or backspace */
if ( endcol < 1 ) /* can't move past left edge */
endcol = 1;
if ( (i = endcol - col) >= 0 && i < 6 )
for ( ; i > 0; i-- )
oput((int)' ');
else {
fprintf(fp_out, ")%d(", stringstart-1);
stringcount++;
col = stringstart = endcol;
} /* End else */
} /* End of spaces */
/*****************************************************************************/
startline()
{
/*
*
* Called whenever we want to be certain we're ready to start pushing characters
* into an open string on the stack. If stringcount is positive we've already
* started, so there's nothing to do. The first string starts in column 1.
*
*/
if ( stringcount < 1 ) {
putc('(', fp_out);
stringstart = col = 1;
stringcount = 1;
} /* End if */
} /* End of startline */
/*****************************************************************************/
endline()
{
/*
*
* Generates a call to the PostScript procedure that processes all the text on
* the stack - provided stringcount is positive. If one string is on the stack
* the fast procedure (ie. l) is used to print the line, otherwise the slower
* one that processes string and column pairs is used.
*
*/
if ( stringcount == 1 )
fprintf(fp_out, ")l\n");
else if ( stringcount > 1 )
fprintf(fp_out, ")%d L\n", stringstart-1);
stringcount = 0;
} /* End of endline */
/*****************************************************************************/
oput(ch)
int ch; /* next output character */
{
/*
*
* Responsible for adding all printing characters from the input file to the
* open string on top of the stack.
*
*/
if ( isascii(ch) && isprint(ch) ) {
startline();
if ( ch == '(' || ch == ')' || ch == '\\' )
putc('\\', fp_out);
putc(ch, fp_out);
col++;
} else if ( extended == TRUE ) {
startline();
fprintf(fp_out, "\\%.3o", ch & 0377);
col++;
} /* End if */
} /* End of oput */
/*****************************************************************************/
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
/*
*
* If we're not supposed to print page pg, fp_out will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014231216471006440057030057030000010643660522630326300004000000003403post.src/postprint/postprint.ps %
% Version 3.3.2 prologue for text files.
%
/#copies 1 store
/aspectratio 1 def
/font /Courier def
/formsperpage 1 def
/landscape false def
/magnification 1 def
/margin 10 def
/orientation 0 def
/pointsize 10 def
/rotation 1 def
/xoffset .25 def
/yoffset .25 def
/roundpage true def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} bind def
/min {2 copy gt {exch} if pop} bind def
/show {show} bind def % so later references don't bind
/stringwidth {stringwidth} bind def
/setup {
counttomark 2 idiv {def} repeat pop
landscape {/orientation 90 orientation add def} if
font findfont pointsize scalefont setfont
/charwidth (M) stringwidth pop def
/linespace pointsize pointsize .10 mul add neg def
pagedimensions
xcenter ycenter translate
orientation rotation mul rotate
width 2 div neg height 2 div translate
xoffset inch yoffset inch neg translate
margin 2 div dup neg translate
magnification dup aspectratio mul scale
height width div 1 min dup scale
0 linespace translate
} def
/pagedimensions {
useclippath userdict /gotpagebbox known not and {
/pagebbox [clippath pathbbox newpath] def
roundpage currentdict /roundpagebbox known and {roundpagebbox} if
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
userdict /gotpagebbox true put
} def
/pagesetup {/page exch def 0 0 moveto 0} bind def
/L {
counttomark 2 idiv {charwidth mul currentpoint exch pop moveto show} repeat
linespace add dup 0 exch moveto
} bind def
/l {show linespace add dup 0 exch moveto} bind def
/LL {
counttomark 2 idiv {charwidth mul currentpoint exch pop moveto show} repeat
} bind def
/done {/lastpage where {pop lastpage} if} def
0707070014231030621006440057030057030000010252400522633110300002700000012724post.src/postscript.mk #
# Top level makefile. Instructions are included here and in the README file.
#
# First save a copy of this file. Then adjust the following definitions (all
# come immediatedly after the initial block of comments):
#
# MAKE where make lives
#
# MAKEFILE name of this file - for recursive make calls. Must change
# if you rename this file.
#
# SYSTEM best match for your version of Unix. Current choices for
# SYSTEM are:
#
# SYSV - System V
# V9 - Ninth Edition
# BSD4_2 - Berkeley (eg. Sun)
#
# Controls conditional compilation in a few places.
#
# VERSION refers to the Version of the DWB package
#
# GROUP group assigned to all installed files
#
# OWNER owner of everything that's installed
#
# HOSTDIR hostresident font directory for PostScript printers. Only
# used in the font download program.
#
# FONTDIR width table directory - for troff and dpost
#
# MAN1DIR command manpages. A command and its manpage are installed
# together - there's no easy way to avoid it. Setting MAN1DIR
# to an existing temporary directory (e.g. /tmp) means an
# install will work but manpages won't go anywhere permanent.
# MAN1DIR must already exist - it will not be created during
# an install.
#
# POSTBIN where most PostScript support programs go. dpost and picpack
# are the exceptions.
#
# POSTLIB prologues and miscellaneous PostScript files. Primarily for
# the programs that live in POSTBIN.
#
# CFLGS common compiler options - used to build CFLAGS in the low
# level makefiles. CFLGS and LDFLGS are best set on the make
# command line.
#
# LDFLGS common link editor options - used to build LDFLAGS in the
# low level makefiles. LDFLGS and CFLGS are best set on the
# make command line.
#
# DKHOST set it to TRUE to compile the DKHOST Datakit support code
# in postio. Temporarily resets SYSTEM to SYSV if DKHOST is
# TRUE and SYSTEM is BSD4_2. Ignored if SYSTEM is not SYSV
# or BSD4_2.
#
# DKSTREAMS enables streams based DKHOST support in postio when DKHOST
# is TRUE and SYSTEM is SYSV or BSD4_2. Choices are TRUE,
# FALSE, or a stream module name (e.g. dknetty or dkty). TRUE
# selects dknetty. Newer systems may expect dkty.
#
# ROUNDPAGE must only be set to TRUE or FALSE. TRUE means translators
# include code that maps clipping path dimensions into known
# paper sizes.
#
# TARGETS the default list of what's built by make. Each target must
# be the name of a source directory. A target that names a
# non-existent source directory is ignored. Setting TARGETS
# on the make command line overrides the default list.
#
# Source files must be updated whenever this file changes. If you change any
# definitions type,
#
# make -f postscript.mk changes
#
# to update the source files, man pages, and low level makefiles.
#
# To build (but not install) the default package (i.e. everything named by
# TARGETS) type,
#
# make -f postscript.mk all
#
# The recommended way to build and install the package is,
#
# make -f postscript.mk all install
#
# Although you'll likely have to be root for the install to work.
#
# After the package is installed use,
#
# make -f postscript.mk clobber
#
# to delete binary files and compiled programs from the source directories.
#
# Set TARGETS on the command line to select part of the package. For example,
#
# make -f postscript.mk TARGETS="dpost devpost" all install
#
# builds and installs dpsot and the PostScript font tables. Quotes hide white
# space from the shell.
#
MAKE=/bin/make
MAKEFILE=postscript.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
ROOT=
FONTDIR=$(ROOT)/usr/lib/font
HOSTDIR=$(ROOT)/usr/lib/font/postscript
MAN1DIR=$(ROOT)/tmp
POSTBIN=$(ROOT)/usr/bin/postscript
POSTLIB=$(ROOT)/usr/lib/postscript
TMACDIR=$(ROOT)/usr/lib/tmac
COMMONDIR=common
CURRENTDIR=.
CFLGS=-O
LDFLGS=-s
DKHOST=FALSE
DKSTREAMS=FALSE
ROUNDPAGE=TRUE
#
# $(TARGETS) is the default list of things built by make. Pick dpost or
# dpost.utf but not both!
#
TARGETS=buildtables\
common\
cropmarks\
devLatin1\
devpost\
download\
dpost.utf\
grabit\
hardcopy\
mpictures\
picpack\
postbgi\
postdaisy\
postdmd\
postgif\
postio\
postmd\
postprint\
postreverse\
posttek\
printfont\
psencoding\
psfiles\
trofftable
ACTION=all
all : $(TARGETS)
clean clobber :
@$(MAKE) -e -f $(MAKEFILE) MAKE=$(MAKE) ACTION=$@ $(TARGETS)
install changes :
@SYSTEM='$(SYSTEM)'; export SYSTEM; \
VERSION='$(VERSION)'; export VERSION; \
GROUP='$(GROUP)'; export GROUP; \
OWNER='$(OWNER)'; export OWNER; \
FONTDIR='$(FONTDIR)'; export FONTDIR; \
HOSTDIR='$(HOSTDIR)'; export HOSTDIR; \
MAN1DIR='$(MAN1DIR)'; export MAN1DIR; \
POSTBIN='$(POSTBIN)'; export POSTBIN; \
POSTLIB='$(POSTLIB)'; export POSTLIB; \
TMACDIR='$(TMACDIR)'; export TMACDIR; \
ROUNDPAGE='$(ROUNDPAGE)'; export ROUNDPAGE; \
$(MAKE) -e -f $(MAKEFILE) MAKE=$(MAKE) ACTION=$@ $(TARGETS)
$(TARGETS) ::
@TARGETS=; unset TARGETS; \
HFILES=; unset HFILES; \
OFILES=; unset OFILES; \
CFLAGS=; unset CFLAGS; \
LDFLAGS=; unset LDFLAGS; \
YFLAGS=; unset YFLAGS; \
SYSTEM='$(SYSTEM)'; export SYSTEM; \
VERSION='$(VERSION)'; export VERSION; \
CFLGS='$(CFLGS)'; export CFLGS; \
LDFLGS='$(LDFLGS)'; export LDFLGS; \
COMMONDIR='../$(COMMONDIR)'; export COMMONDIR; \
DKHOST='$(DKHOST)'; export DKHOST; \
DKSTREAMS='$(DKSTREAMS)'; export DKSTREAMS; \
if [ -d $@ -a -f $@/$@.mk ]; then \
cd $@; \
echo "---- Making $(ACTION) in directory $(CURRENTDIR)/$@ ----"; \
$(MAKE) -e -f $@.mk MAKE=$(MAKE) $(ACTION); \
echo; \
fi
0707070014231123300407550057030057030000020437670522633100000002400000000000post.src/psencoding 0707070014231123311006440057030057030000010440040522627501000003700000006703post.src/psencoding/Latin1.enc %
% Encoding vector and redefinition of findfont for the ISO Latin1 standard.
% The 18 characters missing from ROM based fonts on older printers are noted
% below.
%
/ISOLatin1Encoding [
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/space
/exclam
/quotedbl
/numbersign
/dollar
/percent
/ampersand
/quoteright
/parenleft
/parenright
/asterisk
/plus
/comma
/minus
/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
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/dotlessi
/grave
/acute
/circumflex
/tilde
/macron
/breve
/dotaccent
/dieresis
/.notdef
/ring
/cedilla
/.notdef
/hungarumlaut
/ogonek
/caron
/space
/exclamdown
/cent
/sterling
/currency
/yen
/brokenbar % missing
/section
/dieresis
/copyright
/ordfeminine
/guillemotleft
/logicalnot
/hyphen
/registered
/macron
/degree % missing
/plusminus % missing
/twosuperior % missing
/threesuperior % missing
/acute
/mu % missing
/paragraph
/periodcentered
/cedilla
/onesuperior % missing
/ordmasculine
/guillemotright
/onequarter % missing
/onehalf % missing
/threequarters % missing
/questiondown
/Agrave
/Aacute
/Acircumflex
/Atilde
/Adieresis
/Aring
/AE
/Ccedilla
/Egrave
/Eacute
/Ecircumflex
/Edieresis
/Igrave
/Iacute
/Icircumflex
/Idieresis
/Eth % missing
/Ntilde
/Ograve
/Oacute
/Ocircumflex
/Otilde
/Odieresis
/multiply % missing
/Oslash
/Ugrave
/Uacute
/Ucircumflex
/Udieresis
/Yacute % missing
/Thorn % missing
/germandbls
/agrave
/aacute
/acircumflex
/atilde
/adieresis
/aring
/ae
/ccedilla
/egrave
/eacute
/ecircumflex
/edieresis
/igrave
/iacute
/icircumflex
/idieresis
/eth % missing
/ntilde
/ograve
/oacute
/ocircumflex
/otilde
/odieresis
/divide % missing
/oslash
/ugrave
/uacute
/ucircumflex
/udieresis
/yacute % missing
/thorn % missing
/ydieresis
] def
/NewFontDirectory FontDirectory maxlength dict def
%
% Apparently no guarantee findfont is defined in systemdict so the obvious
%
% systemdict /findfont get exec
%
% can generate an error. So far the only exception is a VT600 (version 48.0).
%
userdict /@RealFindfont known not {
userdict begin
/@RealFindfont systemdict begin /findfont load end def
end
} if
/findfont {
dup NewFontDirectory exch known not {
dup
%dup systemdict /findfont get exec % not always in systemdict
dup userdict /@RealFindfont get exec
dup /Encoding get StandardEncoding eq {
dup length dict begin
{1 index /FID ne {def}{pop pop} ifelse} forall
/Encoding ISOLatin1Encoding def
currentdict
end
/DummyFontName exch definefont
} if
NewFontDirectory 3 1 roll put
} if
NewFontDirectory exch get
} bind def
0707070014231123321006440057030057030000010440200522627501000004200000001523post.src/psencoding/psencoding.sh #
# Trivial script for checking and setting the default PostScript font
# encoding. Changing the default assumes you can write in $POSTLIB.
# Available font encodings are files in $POSTLIB that end in .enc.
# The default is $POSTLIB/Default.enc.
#
POSTLIB=/usr/lib/postscript
DEFAULT=Default.enc
CURRENTDEFAULT=
case "$1" in
Default) ;;
Standard)
rm -f $POSTLIB/$DEFAULT;;
"") cd $POSTLIB
for i in *.enc; do
if [ -f "$i" -a "$i" != $DEFAULT ]; then
NAME=`echo $i | sed s/\\.enc//`
if cmp $i $DEFAULT >/dev/null 2>/dev/null; then
CURRENTDEFAULT=$NAME
fi
echo $NAME
fi
done
echo Standard
echo "Default=${CURRENTDEFAULT:-Standard}";;
*) if [ -f "$POSTLIB/$1.enc" ]
then rm -f $POSTLIB/$DEFAULT
ln $POSTLIB/$1.enc $POSTLIB/$DEFAULT
else echo "unrecognized encoding name $1" >&2
fi;;
esac
0707070014231122361006400057030057030000010446000522633077700004200000003265post.src/psencoding/psencoding.mk MAKE=/bin/make
MAKEFILE=psencoding.mk
OWNER=bin
GROUP=bin
MAN1DIR=/tmp
MAN5DIR=/usr/man/p_man/man5
POSTLIB=/usr/lib/postscript
POSTBIN=/usr/bin/postscript
all : psencoding
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp psencoding $(POSTBIN)/psencoding
@chmod 755 $(POSTBIN)/psencoding
@chgrp $(GROUP) $(POSTBIN)/psencoding
@chown $(OWNER) $(POSTBIN)/psencoding
cp Latin1.enc $(POSTLIB)/Latin1.enc
@chmod 644 $(POSTLIB)/Latin1.enc
@chgrp $(GROUP) $(POSTLIB)/Latin1.enc
@chown $(OWNER) $(POSTLIB)/Latin1.enc
cp UTF.enc $(POSTLIB)/UTF.enc
@chmod 644 $(POSTLIB)/UTF.enc
@chgrp $(GROUP) $(POSTLIB)/UTF.enc
@chown $(OWNER) $(POSTLIB)/UTF.enc
cp psencoding.1 $(MAN1DIR)/psencoding.1
@chmod 644 $(MAN1DIR)/psencoding.1
@chgrp $(GROUP) $(MAN1DIR)/psencoding.1
@chown $(OWNER) $(MAN1DIR)/psencoding.1
clean :
clobber : clean
rm -f psencoding
psencoding : psencoding.sh
sed "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" psencoding.sh >psencoding
@chmod 755 psencoding
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^MAN5DIR=.*'MAN5DIR=$(MAN5DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
psencoding.1 >XXX.1; \
mv XXX.1 psencoding.1
0707070014231122321006400057030057030000010370160522633100000004100000001571post.src/psencoding/psencoding.1 .ds dQ /usr/lib/postscript
.TH PSENCODING 1 "DWB 3.2"
.SH NAME
.B psencoding
\- check or set the default PostScript font encoding
.SH SYNOPSIS
\*(mBpsencoding\f1
.OP "" encoding []
.SH DESCRIPTION
.B psencoding
sets the default font Encoding used by many PostScript translators to
.IR encoding .
No arguments means list the available choices and the current default.
.PP
PostScript encoding files are in directory
.MR \*(dQ .
Many existing PostScript translators include the encoding file
.MR Default.enc ,
if it exists, in the output they generate.
.PP
Requesting
.I encoding
as the default means link the file
.MI \*(dQ/ encoding .enc
to the file
.MR \*(dQ/Default.enc .
Changing the default encoding assumes you can write in directory
.MR \*(dQ .
.SH FILES
.MW \*(dQ/Default.enc
.br
.MW \*(dQ/*.enc
.SH SEE ALSO
.BR buildtables (1),
.BR dpost (1),
.BR postprint (1),
.BR trofftable (1)
0707070014231123351006440057030057030000010440400522627501000003400000010340post.src/psencoding/UTF.enc %
% Encoding vector, operator and procedure redefinitions for Plan 9 UTF
% encoding. Prologues are expected to take steps to ensure operator
% redefinitions given here are actually used. Current implementation
% assumes UTF byte streams that represent ASCII or Latin1 text.
%
/UTFLatin1Encoding [
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/space
/exclam
/quotedbl
/numbersign
/dollar
/percent
/ampersand
/quoteright
/parenleft
/parenright
/asterisk
/plus
/comma
/minus
/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
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/dotlessi
/grave
/acute
/circumflex
/tilde
/macron
/breve
/dotaccent
/dieresis
/.notdef
/ring
/cedilla
/.notdef
/hungarumlaut
/ogonek
/caron
/.notdef % was space
/exclamdown
/cent
/sterling
/currency
/yen
/brokenbar
/section
/dieresis
/copyright
/ordfeminine
/guillemotleft
/logicalnot
/hyphen
/registered
/macron
/degree
/plusminus
/twosuperior
/threesuperior
/acute
/mu
/paragraph
/periodcentered
/cedilla
/onesuperior
/ordmasculine
/guillemotright
/onequarter
/onehalf
/threequarters
/questiondown
/Agrave
/Aacute
/Acircumflex
/Atilde
/Adieresis
/Aring
/AE
/Ccedilla
/Egrave
/Eacute
/Ecircumflex
/Edieresis
/Igrave
/Iacute
/Icircumflex
/Idieresis
/Eth
/Ntilde
/Ograve
/Oacute
/Ocircumflex
/Otilde
/Odieresis
/multiply
/Oslash
/Ugrave
/Uacute
/Ucircumflex
/Udieresis
/Yacute
/Thorn
/germandbls
/agrave
/aacute
/acircumflex
/atilde
/adieresis
/aring
/ae
/ccedilla
/egrave
/eacute
/ecircumflex
/edieresis
/igrave
/iacute
/icircumflex
/idieresis
/eth
/ntilde
/ograve
/oacute
/ocircumflex
/otilde
/odieresis
/divide
/oslash
/ugrave
/uacute
/ucircumflex
/udieresis
/yacute
/thorn
/ydieresis
] def
/NewFontDirectory FontDirectory maxlength dict def
%
% Apparently no guarantee findfont is defined in systemdict so the obvious
%
% systemdict /findfont get exec
%
% can generate an error. So far the only exception is a VT600 (version 48.0).
%
userdict /@RealFindfont known not {
userdict begin
/@RealFindfont systemdict begin /findfont load end def
end
} if
/findfont {
dup NewFontDirectory exch known not {
dup
%dup systemdict /findfont get exec % not always in systemdict
dup userdict /@RealFindfont get exec
dup /Encoding get StandardEncoding eq {
dup length 1 add dict begin
{1 index /FID ne {def}{pop pop} ifelse} forall
/Encoding UTFLatin1Encoding def
/Metrics 1 dict def
Metrics /.notdef 0 put
currentdict
end
/DummyFontName exch definefont
} if
NewFontDirectory 3 1 roll put
} if
NewFontDirectory exch get
} bind def
%
% Assume A0, except for A0A0 which is replaced by 20A0, can be ignored.
% Works with ASCII or Latin1 because A0 has been re-encoded as a zero
% width non-printing character.
%
/UTFstring {
dup {
(\240\240) search {
pop
0 16#20 put
}{pop exit} ifelse
} loop
} bind def
/ashow {mark 4 1 roll UTFstring //ashow cvx exec cleartomark} bind def
/awidthshow {mark 7 1 roll UTFstring //awidthshow cvx exec cleartomark} bind def
/show {mark exch UTFstring //show cvx exec cleartomark} bind def
/stringwidth {UTFstring //stringwidth cvx exec} bind def
/widthshow {mark 5 1 roll UTFstring //widthshow cvx exec cleartomark} bind def
%
% kshow is harder - stack can't change because of the procedure.
%
/kshow dup load type /operatortype eq
{{UTFstring kshow} bind}
{{UTFstring //kshow cvx exec} bind}
ifelse def
0707070014231216500407550057030057030000030636470522633073600002100000000000post.src/devpost 0707070014231216511006440057030057030000010637600522627501000002400000003371post.src/devpost/AB name AB
fontname AvantGarde-Demi
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 60 2 35
$ 56 2 36
% 86 2 37
& 68 2 38
' 28 2 39
( 38 3 40
) 38 3 41
* 44 2 42
+ 60 0 43
, 28 1 44
hy 42 0 45
- "
. 28 0 46
/ 46 3 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 56 2 63
@ 74 2 64
A 74 2 65
B 58 2 66
C 78 2 67
D 70 2 68
E 52 2 69
F 48 2 70
G 84 2 71
H 68 2 72
I 28 2 73
J 48 2 74
K 62 2 75
L 44 2 76
M 90 2 77
N 74 2 78
O 84 2 79
P 56 2 80
Q 84 2 81
R 58 2 82
S 52 2 83
T 42 2 84
U 64 2 85
V 70 2 86
W 90 2 87
X 68 2 88
Y 62 2 89
Z 50 2 90
[ 32 3 91
\ 64 2 92
bs "
] 32 3 93
--- 60 2 94
--- 50 1 95
` 28 2 96
a 66 0 97
b 66 2 98
c 64 0 99
d 66 2 100
e 64 0 101
f 28 2 102
g 66 1 103
h 60 2 104
i 24 2 105
j 26 3 106
k 58 2 107
l 24 2 108
m 94 0 109
n 60 0 110
o 64 0 111
p 66 1 112
q 66 1 113
r 32 0 114
s 44 0 115
t 30 2 116
u 60 0 117
v 56 0 118
w 80 0 119
x 56 0 120
y 58 1 121
z 46 0 122
{ 34 3 123
--- 60 2 124
} 34 3 125
--- 60 0 126
!! 28 1 161
ct 56 2 162
ps 56 2 163
fr 16 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 60 2 168
--- 22 2 169
`` 48 2 170
--- 46 0 171
--- 24 0 172
--- 24 0 173
fi 52 2 174
fl 52 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 60 3 182
--- 60 0 183
--- 28 1 184
--- 48 1 185
'' 48 2 186
--- 46 0 187
--- 100 0 188
--- 128 2 189
?? 56 1 191
ga 42 2 193
\` "
aa 42 2 194
\' "
^a 54 2 195
^ "
~a 48 2 196
~ "
-a 42 2 197
Ua 48 2 198
.a 28 2 199
:a 50 2 200
oa 36 2 202
,a 34 1 203
"a 70 2 205
Ca 34 1 206
va 54 2 207
em 100 0 208
--- 90 2 225
--- 36 2 227
--- 48 2 232
--- 84 2 233
--- 106 2 234
--- 36 2 235
--- 108 0 241
--- 24 0 245
--- 32 2 248
--- 66 0 249
--- 108 0 250
--- 60 2 251
0707070014231216521006440057030057030000010637620522627501000002400000003400post.src/devpost/AI name AI
fontname AvantGarde-BookOblique
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 29 2 33
" 31 2 34
dq "
# 72 2 35
$ 55 2 36
% 77 2 37
& 76 2 38
' 35 2 39
( 37 3 40
) 37 3 41
* 42 2 42
+ 61 0 43
, 28 0 44
hy 33 0 45
- "
. 28 0 46
/ 44 3 47
0 55 2 48
1 55 2 49
2 55 2 50
3 55 2 51
4 55 2 52
5 55 2 53
6 55 2 54
7 55 2 55
8 55 2 56
9 55 2 57
: 28 0 58
; 28 0 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 59 2 63
@ 87 2 64
A 74 2 65
B 57 2 66
C 81 2 67
D 74 2 68
E 54 2 69
F 49 2 70
G 87 2 71
H 68 2 72
I 23 2 73
J 48 2 74
K 59 2 75
L 46 2 76
M 92 2 77
N 74 2 78
O 87 2 79
P 59 2 80
Q 87 2 81
R 61 2 82
S 50 2 83
T 43 2 84
U 66 2 85
V 70 2 86
W 96 2 87
X 61 2 88
Y 59 2 89
Z 48 2 90
[ 35 3 91
\ 61 2 92
bs "
] 35 3 93
--- 67 2 94
--- 50 1 95
` 35 2 96
a 68 0 97
b 68 2 98
c 65 0 99
d 69 2 100
e 65 0 101
f 31 2 102
g 67 1 103
h 61 2 104
i 20 2 105
j 20 3 106
k 50 2 107
l 20 2 108
m 94 0 109
n 61 0 110
o 66 0 111
p 68 1 112
q 68 1 113
r 30 0 114
s 39 0 115
t 34 2 116
u 61 0 117
v 55 0 118
w 83 0 119
x 48 0 120
y 54 1 121
z 42 0 122
{ 35 3 123
--- 67 2 124
} 35 3 125
--- 61 0 126
!! 29 1 161
ct 55 2 162
ps 55 2 163
fr 17 2 164
yn 55 2 165
fn 55 3 166
sc 61 3 167
cr 55 0 168
--- 20 2 169
`` 50 2 170
--- 42 0 171
--- 25 0 172
--- 25 0 173
fi 49 2 174
fl 49 2 175
en 50 0 177
\- "
dg 55 3 178
dd 55 3 179
--- 28 0 180
pg 56 3 182
--- 61 0 183
--- 35 0 184
--- 50 0 185
'' 48 2 186
--- 42 0 187
--- 100 0 188
--- 117 2 189
?? 59 1 191
ga 38 2 193
\` "
aa 38 2 194
\' "
^a 50 2 195
^ "
~a 44 2 196
~ "
-a 49 2 197
Ua 45 2 198
.a 22 2 199
:a 37 2 200
oa 33 2 202
,a 32 1 203
"a 55 2 205
Ca 30 1 206
va 50 2 207
em 100 0 208
--- 99 2 225
--- 37 2 227
--- 52 2 232
--- 87 2 233
--- 119 2 234
--- 37 2 235
--- 116 0 241
--- 20 0 245
--- 30 2 248
--- 65 0 249
--- 114 0 250
--- 55 2 251
0707070014231216531006440057030057030000010637640522627501000002400000003371post.src/devpost/AR name AR
fontname AvantGarde-Book
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 29 2 33
" 31 2 34
dq "
# 72 2 35
$ 55 2 36
% 77 2 37
& 76 2 38
' 35 2 39
( 37 3 40
) 37 3 41
* 42 2 42
+ 61 0 43
, 28 0 44
hy 33 0 45
- "
. 28 0 46
/ 44 3 47
0 55 2 48
1 55 2 49
2 55 2 50
3 55 2 51
4 55 2 52
5 55 2 53
6 55 2 54
7 55 2 55
8 55 2 56
9 55 2 57
: 28 0 58
; 28 0 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 59 2 63
@ 87 2 64
A 74 2 65
B 57 2 66
C 81 2 67
D 74 2 68
E 54 2 69
F 49 2 70
G 87 2 71
H 68 2 72
I 23 2 73
J 48 2 74
K 59 2 75
L 46 2 76
M 92 2 77
N 74 2 78
O 87 2 79
P 59 2 80
Q 87 2 81
R 61 2 82
S 50 2 83
T 43 2 84
U 66 2 85
V 70 2 86
W 96 2 87
X 61 2 88
Y 59 2 89
Z 48 2 90
[ 35 3 91
\ 61 2 92
bs "
] 35 3 93
--- 67 2 94
--- 50 1 95
` 35 2 96
a 68 0 97
b 68 2 98
c 65 0 99
d 69 2 100
e 65 0 101
f 31 2 102
g 67 1 103
h 61 2 104
i 20 2 105
j 20 3 106
k 50 2 107
l 20 2 108
m 94 0 109
n 61 0 110
o 66 0 111
p 68 1 112
q 68 1 113
r 30 0 114
s 39 0 115
t 34 2 116
u 61 0 117
v 55 0 118
w 83 0 119
x 48 0 120
y 54 1 121
z 42 0 122
{ 35 3 123
--- 67 2 124
} 35 3 125
--- 61 0 126
!! 29 1 161
ct 55 2 162
ps 55 2 163
fr 17 2 164
yn 55 2 165
fn 55 3 166
sc 61 3 167
cr 55 0 168
--- 20 2 169
`` 50 2 170
--- 42 0 171
--- 25 0 172
--- 25 0 173
fi 49 2 174
fl 49 2 175
en 50 0 177
\- "
dg 55 3 178
dd 55 3 179
--- 28 0 180
pg 56 3 182
--- 61 0 183
--- 35 0 184
--- 50 0 185
'' 48 2 186
--- 42 0 187
--- 100 0 188
--- 117 2 189
?? 59 1 191
ga 38 2 193
\` "
aa 38 2 194
\' "
^a 50 2 195
^ "
~a 44 2 196
~ "
-a 49 2 197
Ua 45 2 198
.a 22 2 199
:a 37 2 200
oa 33 2 202
,a 32 1 203
"a 55 2 205
Ca 30 1 206
va 50 2 207
em 100 0 208
--- 99 2 225
--- 37 2 227
--- 52 2 232
--- 87 2 233
--- 119 2 234
--- 37 2 235
--- 116 0 241
--- 20 0 245
--- 30 2 248
--- 65 0 249
--- 114 0 250
--- 55 2 251
0707070014231216541006440057030057030000010637660522627501000002400000003400post.src/devpost/AX name AX
fontname AvantGarde-DemiOblique
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 60 2 35
$ 56 2 36
% 86 2 37
& 68 2 38
' 28 2 39
( 38 3 40
) 38 3 41
* 44 2 42
+ 60 0 43
, 28 1 44
hy 42 0 45
- "
. 28 0 46
/ 46 3 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 56 2 63
@ 74 2 64
A 74 2 65
B 58 2 66
C 78 2 67
D 70 2 68
E 52 2 69
F 48 2 70
G 84 2 71
H 68 2 72
I 28 2 73
J 48 2 74
K 62 2 75
L 44 2 76
M 90 2 77
N 74 2 78
O 84 2 79
P 56 2 80
Q 84 2 81
R 58 2 82
S 52 2 83
T 42 2 84
U 64 2 85
V 70 2 86
W 90 2 87
X 68 2 88
Y 62 2 89
Z 50 2 90
[ 32 3 91
\ 64 2 92
bs "
] 32 3 93
--- 60 2 94
--- 50 1 95
` 28 2 96
a 66 0 97
b 66 2 98
c 64 0 99
d 66 2 100
e 64 0 101
f 28 2 102
g 66 1 103
h 60 2 104
i 24 2 105
j 26 3 106
k 58 2 107
l 24 2 108
m 94 0 109
n 60 0 110
o 64 0 111
p 66 1 112
q 66 1 113
r 32 0 114
s 44 0 115
t 30 2 116
u 60 0 117
v 56 0 118
w 80 0 119
x 56 0 120
y 58 1 121
z 46 0 122
{ 34 3 123
--- 60 2 124
} 34 3 125
--- 60 0 126
!! 28 1 161
ct 56 2 162
ps 56 2 163
fr 16 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 60 2 168
--- 22 2 169
`` 48 2 170
--- 46 0 171
--- 24 0 172
--- 24 0 173
fi 52 2 174
fl 52 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 60 3 182
--- 60 0 183
--- 28 1 184
--- 48 1 185
'' 48 2 186
--- 46 0 187
--- 100 0 188
--- 128 2 189
?? 56 1 191
ga 42 2 193
\` "
aa 42 2 194
\' "
^a 54 2 195
^ "
~a 48 2 196
~ "
-a 42 2 197
Ua 48 2 198
.a 28 2 199
:a 50 2 200
oa 36 2 202
,a 34 1 203
"a 70 2 205
Ca 34 1 206
va 54 2 207
em 100 0 208
--- 90 2 225
--- 36 2 227
--- 48 2 232
--- 84 2 233
--- 106 2 234
--- 36 2 235
--- 108 0 241
--- 24 0 245
--- 32 2 248
--- 66 0 249
--- 108 0 250
--- 60 2 251
0707070014231216551006440057030057030000010640200522627501000002300000003364post.src/devpost/B name B
fontname Times-Bold
named in prologue
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 56 2 34
dq "
# 50 2 35
$ 50 3 36
% 100 2 37
& 83 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 57 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
--- 57 0 60
= 57 0 61
--- 57 0 62
? 50 2 63
@ 93 3 64
A 72 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 78 2 72
I 39 2 73
J 50 2 74
K 78 2 75
L 67 2 76
M 94 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 72 2 82
S 56 2 83
T 67 2 84
U 72 2 85
V 72 2 86
W 100 2 87
X 72 2 88
Y 72 2 89
Z 67 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 58 2 94
--- 50 1 95
` 33 2 96
a 50 0 97
b 56 2 98
c 44 0 99
d 56 2 100
e 44 0 101
f 33 2 102
g 50 1 103
h 56 2 104
i 28 2 105
j 33 3 106
k 56 2 107
l 28 2 108
m 83 0 109
n 56 0 110
o 50 0 111
p 56 1 112
q 56 1 113
r 44 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
{ 39 3 123
--- 22 3 124
} 39 3 125
--- 52 0 126
!! 33 1 161
ct 50 3 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 28 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 25 0 180
pg 54 3 182
--- 35 0 183
--- 33 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
?? 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 30 2 227
--- 67 2 232
--- 78 2 233
--- 100 2 234
--- 33 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 50 2 249
--- 72 0 250
--- 56 2 251
0707070014231216561006440057030057030000010640220522627501000002400000003367post.src/devpost/BI name BI
fontname Times-BoldItalic
named in prologue
ligatures fi fl 0
spacewidth 25
charset
! 39 2 33
" 56 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 57 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
--- 57 2 60
= 57 0 61
--- 57 2 62
? 50 2 63
@ 83 3 64
A 67 2 65
B 67 2 66
C 67 2 67
D 72 2 68
E 67 2 69
F 67 2 70
G 72 2 71
H 78 2 72
I 39 2 73
J 50 2 74
K 67 2 75
L 61 2 76
M 89 2 77
N 72 2 78
O 72 2 79
P 61 2 80
Q 72 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 89 2 87
X 67 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 57 2 94
--- 50 1 95
` 33 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 33 3 102
g 50 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 39 0 114
s 39 0 115
t 28 2 116
u 56 0 117
v 44 0 118
w 67 0 119
x 50 0 120
y 44 1 121
z 39 0 122
{ 35 3 123
--- 22 2 124
} 35 3 125
--- 57 0 126
!! 39 1 161
ct 50 3 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 28 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 56 3 174
fl 56 3 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 25 0 180
pg 50 3 182
--- 35 0 183
--- 33 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
?? 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 94 2 225
--- 27 2 227
--- 61 2 232
--- 72 3 233
--- 94 2 234
--- 30 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 50 3 249
--- 72 0 250
--- 50 3 251
0707070014231216571006440057030057030000010640240522627501000002400000003272post.src/devpost/CB name CB
fontname Courier-Bold
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
!! 60 1 161
ct 60 2 162
ps 60 2 163
fr 60 2 164
yn 60 2 165
fn 60 2 166
sc 60 2 167
cr 60 2 168
--- 60 2 169
`` 60 2 170
--- 60 0 171
--- 60 0 172
--- 60 0 173
en 60 0 177
\- "
dg 60 2 178
dd 60 2 179
--- 60 0 180
pg 60 2 182
--- 60 0 183
--- 60 1 184
--- 60 1 185
'' 60 2 186
--- 60 0 187
--- 60 0 188
--- 60 2 189
?? 60 1 191
ga 60 2 193
\` "
aa 60 2 194
\' "
^a 60 2 195
^ "
~a 60 2 196
~ "
-a 60 2 197
Ua 60 2 198
.a 60 2 199
:a 60 2 200
oa 60 2 202
,a 60 1 203
"a 60 2 205
Ca 60 1 206
va 60 2 207
em 60 0 208
--- 60 2 225
--- 60 2 227
--- 60 2 232
--- 60 2 233
--- 60 2 234
--- 60 2 235
--- 60 0 241
--- 60 0 245
--- 60 2 248
--- 60 0 249
--- 60 0 250
--- 60 2 251
0707070014231216601006440057030057030000010640260522627501000002400000003275post.src/devpost/CI name CI
fontname Courier-Oblique
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
!! 60 1 161
ct 60 2 162
ps 60 2 163
fr 60 2 164
yn 60 2 165
fn 60 2 166
sc 60 2 167
cr 60 2 168
--- 60 2 169
`` 60 2 170
--- 60 0 171
--- 60 0 172
--- 60 0 173
en 60 0 177
\- "
dg 60 2 178
dd 60 2 179
--- 60 0 180
pg 60 2 182
--- 60 0 183
--- 60 1 184
--- 60 1 185
'' 60 2 186
--- 60 0 187
--- 60 0 188
--- 60 2 189
?? 60 1 191
ga 60 2 193
\` "
aa 60 2 194
\' "
^a 60 2 195
^ "
~a 60 2 196
~ "
-a 60 2 197
Ua 60 2 198
.a 60 2 199
:a 60 2 200
oa 60 2 202
,a 60 1 203
"a 60 2 205
Ca 60 1 206
va 60 2 207
em 60 0 208
--- 60 2 225
--- 60 2 227
--- 60 2 232
--- 60 2 233
--- 60 2 234
--- 60 2 235
--- 60 0 241
--- 60 0 245
--- 60 2 248
--- 60 0 249
--- 60 0 250
--- 60 2 251
0707070014231216611006440057030057030000010640400522627501000002400000003265post.src/devpost/CO name CO
fontname Courier
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
!! 60 1 161
ct 60 2 162
ps 60 2 163
fr 60 2 164
yn 60 2 165
fn 60 2 166
sc 60 2 167
cr 60 2 168
--- 60 2 169
`` 60 2 170
--- 60 0 171
--- 60 0 172
--- 60 0 173
en 60 0 177
\- "
dg 60 2 178
dd 60 2 179
--- 60 0 180
pg 60 2 182
--- 60 0 183
--- 60 1 184
--- 60 1 185
'' 60 2 186
--- 60 0 187
--- 60 0 188
--- 60 2 189
?? 60 1 191
ga 60 2 193
\` "
aa 60 2 194
\' "
^a 60 2 195
^ "
~a 60 2 196
~ "
-a 60 2 197
Ua 60 2 198
.a 60 2 199
:a 60 2 200
oa 60 2 202
,a 60 1 203
"a 60 2 205
Ca 60 1 206
va 60 2 207
em 60 0 208
--- 60 2 225
--- 60 2 227
--- 60 2 232
--- 60 2 233
--- 60 2 234
--- 60 2 235
--- 60 0 241
--- 60 0 245
--- 60 2 248
--- 60 0 249
--- 60 0 250
--- 60 2 251
0707070014231216621006440057030057030000010640420522627501100002400000003265post.src/devpost/CW name CW
fontname Courier
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
!! 60 1 161
ct 60 2 162
ps 60 2 163
fr 60 2 164
yn 60 2 165
fn 60 2 166
sc 60 2 167
cr 60 2 168
--- 60 2 169
`` 60 2 170
--- 60 0 171
--- 60 0 172
--- 60 0 173
en 60 0 177
\- "
dg 60 2 178
dd 60 2 179
--- 60 0 180
pg 60 2 182
--- 60 0 183
--- 60 1 184
--- 60 1 185
'' 60 2 186
--- 60 0 187
--- 60 0 188
--- 60 2 189
?? 60 1 191
ga 60 2 193
\` "
aa 60 2 194
\' "
^a 60 2 195
^ "
~a 60 2 196
~ "
-a 60 2 197
Ua 60 2 198
.a 60 2 199
:a 60 2 200
oa 60 2 202
,a 60 1 203
"a 60 2 205
Ca 60 1 206
va 60 2 207
em 60 0 208
--- 60 2 225
--- 60 2 227
--- 60 2 232
--- 60 2 233
--- 60 2 234
--- 60 2 235
--- 60 0 241
--- 60 0 245
--- 60 2 248
--- 60 0 249
--- 60 0 250
--- 60 2 251
0707070014231216631006440057030057030000010640440522627501100002400000003301post.src/devpost/CX name CX
fontname Courier-BoldOblique
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
!! 60 1 161
ct 60 2 162
ps 60 2 163
fr 60 2 164
yn 60 2 165
fn 60 2 166
sc 60 2 167
cr 60 2 168
--- 60 2 169
`` 60 2 170
--- 60 0 171
--- 60 0 172
--- 60 0 173
en 60 0 177
\- "
dg 60 2 178
dd 60 2 179
--- 60 0 180
pg 60 2 182
--- 60 0 183
--- 60 1 184
--- 60 1 185
'' 60 2 186
--- 60 0 187
--- 60 0 188
--- 60 2 189
?? 60 1 191
ga 60 2 193
\` "
aa 60 2 194
\' "
^a 60 2 195
^ "
~a 60 2 196
~ "
-a 60 2 197
Ua 60 2 198
.a 60 2 199
:a 60 2 200
oa 60 2 202
,a 60 1 203
"a 60 2 205
Ca 60 1 206
va 60 2 207
em 60 0 208
--- 60 2 225
--- 60 2 227
--- 60 2 232
--- 60 2 233
--- 60 2 234
--- 60 2 235
--- 60 0 241
--- 60 0 245
--- 60 2 248
--- 60 0 249
--- 60 0 250
--- 60 2 251
0707070014231216641006440057030057030000010640460522627501100002600000001740post.src/devpost/DESC #Device Description - original PostScript character set
PDL PostScript
fonts 10 R I B BI CW H HI HB S1 S
sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
120 125 130 135 140 145 150 155 160 0
res 720
hor 1
vert 1
unitwidth 10
charset
dq hy bs !! ct ps fr yn fn sc cr `` fi fl en \- dg dd pg ''
?? ga \` aa \' ^a ~a -a Ua .a :a oa ,a "a Ca va em fa te st
** pl mi sl eq cg *A *B *X *D *E *F *G *Y *I *K *L *M *N *O
*P *H *R *S *T *U ts *W *C *Q *Z tf pp ul rn *a *b *x *d *e
*f *g *y *i *k *l *m *n *o *p *h *r *s *t *u *w *c *q *z or
ap fm <= if ab <- ua -> da de +- >= mu pt pd bu di != == ~~
el av ah CR af If Rf ws Ox O+ es ca cu sp ip !b sb ib mo !m
an gr rg co tm sr c. no l& l| lz b< RG CO TM LT br LX LB lc
lx lf lt lk lb bv b> is RT RX RB rc rx rf rt rk rb ~= ru ff
Fi Fl 14 12 34 bx ob ci sq Sl L1 LA LV LH lh rh lH rH PC DG
-+ cs cy as os =. ld rd le ge
0707070014231215101006400057030057030000010554200522633073600003400000003054post.src/devpost/devpost.mk MAKE=/bin/make
MAKEFILE=devpost.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
FONTDIR=/usr/lib/font
FONTFILES=DESC ? ?? [A-Z]??* shell.lib
all :
@if [ -r LINKFILE ]; then sh LINKFILE; fi;
install : all
@rm -f $(FONTDIR)/devpost/*.out
@if [ ! -d $(FONTDIR) ]; then \
mkdir $(FONTDIR); \
chmod 755 $(FONTDIR); \
chgrp $(GROUP) $(FONTDIR); \
chown $(OWNER) $(FONTDIR); \
fi
@if [ ! -d $(FONTDIR)/devpost ]; then \
mkdir $(FONTDIR)/devpost; \
chmod 755 $(FONTDIR)/devpost; \
chgrp $(GROUP) $(FONTDIR)/devpost; \
chown $(OWNER) $(FONTDIR)/devpost; \
fi
@if [ ! -d $(FONTDIR)/devpost/charlib ]; then \
mkdir $(FONTDIR)/devpost/charlib; \
chmod 755 $(FONTDIR)/devpost/charlib; \
chgrp $(GROUP) $(FONTDIR)/devpost/charlib; \
chown $(OWNER) $(FONTDIR)/devpost/charlib; \
fi
cp $(FONTFILES) $(FONTDIR)/devpost
@for i in $(FONTFILES); do \
chmod 644 $(FONTDIR)/devpost/$$i; \
chgrp $(GROUP) $(FONTDIR)/devpost/$$i; \
chown $(OWNER) $(FONTDIR)/devpost/$$i; \
done
cp charlib/* $(FONTDIR)/devpost/charlib
@for i in charlib/*; do \
chmod 644 $(FONTDIR)/devpost/$$i; \
chgrp $(GROUP) $(FONTDIR)/devpost/$$i; \
chown $(OWNER) $(FONTDIR)/devpost/$$i; \
done
clean :
clobber : clean
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^FONTDIR=.*'FONTDIR=$(FONTDIR)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014231216661006440057030057030000010640470522627501100002400000001145post.src/devpost/GR name GR
fontname Symbol
named in prologue
spacewidth 25
charset
*A 72 2 65
*B 67 2 66
*X 72 2 67
*D 61 2 68
*E 61 2 69
*F 76 2 70
*G 60 2 71
*Y 72 2 72
*I 33 2 73
*K 72 2 75
*L 69 2 76
*M 89 2 77
*N 72 2 78
*O 72 2 79
*P 77 2 80
*H 74 2 81
*R 56 2 82
*S 59 2 83
*T 61 2 84
*U 69 2 85
*W 77 2 87
*C 65 2 88
*Q 80 2 89
*Z 61 2 90
*a 63 0 97
*b 55 3 98
*x 55 1 99
*d 49 2 100
*e 44 0 101
*f 52 3 102
*g 41 1 103
*y 60 1 104
*i 33 0 105
*k 55 0 107
*l 55 2 108
*m 58 1 109
*n 52 0 110
*o 55 0 111
*p 55 0 112
*h 52 2 113
*r 55 1 114
*s 60 0 115
*t 44 0 116
*u 58 0 117
*w 69 0 119
*c 49 3 120
*q 69 1 121
*z 49 3 122
0707070014231216671006440057030057030000010641020522627501100002300000003362post.src/devpost/H name H
fontname Helvetica
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 56 2 63
@ 102 3 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 28 3 91
\ 28 2 92
bs "
] 28 3 93
--- 47 2 94
--- 56 1 95
` 22 2 96
a 56 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 56 0 101
f 28 2 102
g 56 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 26 3 124
} 33 3 125
--- 58 0 126
!! 33 1 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 0 168
--- 19 2 169
`` 33 2 170
--- 56 0 171
--- 33 0 172
--- 33 0 173
fi 50 2 174
fl 50 2 175
en 56 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 54 3 182
--- 35 0 183
--- 22 1 184
--- 33 1 185
'' 33 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
?? 61 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 37 2 227
--- 56 2 232
--- 78 2 233
--- 100 2 234
--- 36 2 235
--- 89 0 241
--- 28 0 245
--- 22 2 248
--- 61 0 249
--- 94 0 250
--- 61 2 251
0707070014231216701006440057030057030000010641040522627501100002400000003367post.src/devpost/HB name HB
fontname Helvetica-Bold
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 47 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 72 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 33 0 58
; 33 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 61 2 63
@ 98 3 64
A 72 2 65
B 72 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 56 2 74
K 72 2 75
L 61 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 58 2 94
--- 56 1 95
` 28 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 33 2 102
g 61 1 103
h 61 2 104
i 28 2 105
j 28 3 106
k 56 2 107
l 28 2 108
m 89 0 109
n 61 0 110
o 61 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 56 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 78 0 119
x 56 0 120
y 56 1 121
z 50 0 122
{ 39 3 123
--- 28 3 124
} 39 3 125
--- 58 0 126
!! 33 1 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 2 168
--- 24 2 169
`` 50 2 170
--- 56 0 171
--- 33 0 172
--- 33 0 173
fi 61 2 174
fl 61 2 175
en 56 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 56 3 182
--- 35 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
?? 61 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 37 2 227
--- 61 2 232
--- 78 2 233
--- 100 2 234
--- 36 2 235
--- 89 0 241
--- 28 0 245
--- 28 2 248
--- 61 0 249
--- 94 0 250
--- 61 2 251
0707070014231216711006440057030057030000010641060522627501100002400000003373post.src/devpost/HI name HI
fontname Helvetica-Oblique
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 56 2 63
@ 102 3 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 28 3 91
\ 28 2 92
bs "
] 28 3 93
--- 47 2 94
--- 56 1 95
` 22 2 96
a 56 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 56 0 101
f 28 2 102
g 56 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 26 3 124
} 33 3 125
--- 58 0 126
!! 33 1 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 0 168
--- 19 2 169
`` 33 2 170
--- 56 0 171
--- 33 0 172
--- 33 0 173
fi 50 2 174
fl 50 2 175
en 56 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 54 3 182
--- 35 0 183
--- 22 1 184
--- 33 1 185
'' 33 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
?? 61 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 37 2 227
--- 56 2 232
--- 78 2 233
--- 100 2 234
--- 36 2 235
--- 89 0 241
--- 28 0 245
--- 22 2 248
--- 61 0 249
--- 94 0 250
--- 61 2 251
0707070014231216721006440057030057030000010641400522627501100002400000003376post.src/devpost/HX name HX
fontname Helvetica-BoldOblique
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 47 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 72 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 33 0 58
; 33 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 61 2 63
@ 98 3 64
A 72 2 65
B 72 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 56 2 74
K 72 2 75
L 61 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 58 2 94
--- 56 1 95
` 28 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 33 2 102
g 61 1 103
h 61 2 104
i 28 2 105
j 28 3 106
k 56 2 107
l 28 2 108
m 89 0 109
n 61 0 110
o 61 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 56 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 78 0 119
x 56 0 120
y 56 1 121
z 50 0 122
{ 39 3 123
--- 28 3 124
} 39 3 125
--- 58 0 126
!! 33 1 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 2 168
--- 24 2 169
`` 50 2 170
--- 56 0 171
--- 33 0 172
--- 33 0 173
fi 61 2 174
fl 61 2 175
en 56 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 56 3 182
--- 35 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
?? 61 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 37 2 227
--- 61 2 232
--- 78 2 233
--- 100 2 234
--- 36 2 235
--- 89 0 241
--- 28 0 245
--- 28 2 248
--- 61 0 249
--- 94 0 250
--- 61 2 251
0707070014231216731006440057030057030000010641420522627501100002400000003371post.src/devpost/Hb name Hb
fontname Helvetica-Narrow-Bold
named in prologue
ligatures fi fl 0
spacewidth 23
charset
! 27 2 33
" 39 2 34
dq "
# 46 2 35
$ 46 3 36
% 73 2 37
& 59 2 38
' 23 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
hy 27 0 45
- "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 27 0 58
; 27 1 59
--- 48 0 60
= 48 0 61
--- 48 0 62
? 50 2 63
@ 80 3 64
A 59 2 65
B 59 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 46 2 74
K 59 2 75
L 50 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 27 3 91
\ 23 2 92
bs "
] 27 3 93
--- 48 2 94
--- 46 1 95
` 23 2 96
a 46 0 97
b 50 2 98
c 46 0 99
d 50 2 100
e 46 0 101
f 27 2 102
g 50 1 103
h 50 2 104
i 23 2 105
j 23 3 106
k 46 2 107
l 23 2 108
m 73 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 32 0 114
s 46 0 115
t 27 2 116
u 50 0 117
v 46 0 118
w 64 0 119
x 46 0 120
y 46 1 121
z 41 0 122
{ 32 3 123
--- 23 3 124
} 32 3 125
--- 48 0 126
!! 27 1 161
ct 46 3 162
ps 46 2 163
fr 14 2 164
yn 46 2 165
fn 46 3 166
sc 46 3 167
cr 46 2 168
--- 20 2 169
`` 41 2 170
--- 46 0 171
--- 27 0 172
--- 27 0 173
fi 50 2 174
fl 50 2 175
en 46 0 177
\- "
dg 46 3 178
dd 46 3 179
--- 23 0 180
pg 46 3 182
--- 29 0 183
--- 23 1 184
--- 41 1 185
'' 41 2 186
--- 46 0 187
--- 82 0 188
--- 82 2 189
?? 50 1 191
ga 27 2 193
\` "
aa 27 2 194
\' "
^a 27 2 195
^ "
~a 27 2 196
~ "
-a 27 2 197
Ua 27 2 198
.a 27 2 199
:a 27 2 200
oa 27 2 202
,a 27 1 203
"a 27 2 205
Ca 27 1 206
va 27 2 207
em 82 0 208
--- 82 2 225
--- 30 2 227
--- 50 2 232
--- 64 2 233
--- 82 2 234
--- 30 2 235
--- 73 0 241
--- 23 0 245
--- 23 2 248
--- 50 0 249
--- 77 0 250
--- 50 2 251
0707070014231216741006440057030057030000010641440522627501100002400000003374post.src/devpost/Hi name Hi
fontname Helvetica-Narrow-Oblique
named in prologue
ligatures fi fl 0
spacewidth 23
charset
! 23 2 33
" 29 2 34
dq "
# 46 2 35
$ 46 3 36
% 73 2 37
& 55 2 38
' 18 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
hy 27 0 45
- "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 23 0 58
; 23 1 59
--- 48 0 60
= 48 0 61
--- 48 0 62
? 46 2 63
@ 83 3 64
A 55 2 65
B 55 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 41 2 74
K 55 2 75
L 46 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 23 3 91
\ 23 2 92
bs "
] 23 3 93
--- 38 2 94
--- 46 1 95
` 18 2 96
a 46 0 97
b 46 2 98
c 41 0 99
d 46 2 100
e 46 0 101
f 23 2 102
g 46 1 103
h 46 2 104
i 18 2 105
j 18 3 106
k 41 2 107
l 18 2 108
m 68 0 109
n 46 0 110
o 46 0 111
p 46 1 112
q 46 1 113
r 27 0 114
s 41 0 115
t 23 2 116
u 46 0 117
v 41 0 118
w 59 0 119
x 41 0 120
y 41 1 121
z 41 0 122
{ 27 3 123
--- 21 3 124
} 27 3 125
--- 48 0 126
!! 27 1 161
ct 46 3 162
ps 46 2 163
fr 14 2 164
yn 46 2 165
fn 46 3 166
sc 46 3 167
cr 46 0 168
--- 16 2 169
`` 27 2 170
--- 46 0 171
--- 27 0 172
--- 27 0 173
fi 41 2 174
fl 41 2 175
en 46 0 177
\- "
dg 46 3 178
dd 46 3 179
--- 23 0 180
pg 44 3 182
--- 29 0 183
--- 18 1 184
--- 27 1 185
'' 27 2 186
--- 46 0 187
--- 82 0 188
--- 82 2 189
?? 50 1 191
ga 27 2 193
\` "
aa 27 2 194
\' "
^a 27 2 195
^ "
~a 27 2 196
~ "
-a 27 2 197
Ua 27 2 198
.a 27 2 199
:a 27 2 200
oa 27 2 202
,a 27 1 203
"a 27 2 205
Ca 27 1 206
va 27 2 207
em 82 0 208
--- 82 2 225
--- 30 2 227
--- 46 2 232
--- 64 2 233
--- 82 2 234
--- 30 2 235
--- 73 0 241
--- 23 0 245
--- 18 2 248
--- 50 0 249
--- 77 0 250
--- 50 2 251
0707070014231216751006440057030057030000010641460522627501100002400000003364post.src/devpost/Hr name Hr
fontname Helvetica-Narrow
named in prologue
ligatures fi fl 0
spacewidth 23
charset
! 23 2 33
" 29 2 34
dq "
# 46 2 35
$ 46 3 36
% 73 2 37
& 55 2 38
' 18 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
hy 27 0 45
- "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 23 0 58
; 23 1 59
--- 48 0 60
= 48 0 61
--- 48 0 62
? 46 2 63
@ 83 3 64
A 55 2 65
B 55 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 41 2 74
K 55 2 75
L 46 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 23 3 91
\ 23 2 92
bs "
] 23 3 93
--- 38 2 94
--- 46 1 95
` 18 2 96
a 46 0 97
b 46 2 98
c 41 0 99
d 46 2 100
e 46 0 101
f 23 2 102
g 46 1 103
h 46 2 104
i 18 2 105
j 18 3 106
k 41 2 107
l 18 2 108
m 68 0 109
n 46 0 110
o 46 0 111
p 46 1 112
q 46 1 113
r 27 0 114
s 41 0 115
t 23 2 116
u 46 0 117
v 41 0 118
w 59 0 119
x 41 0 120
y 41 1 121
z 41 0 122
{ 27 3 123
--- 21 3 124
} 27 3 125
--- 48 0 126
!! 27 1 161
ct 46 3 162
ps 46 2 163
fr 14 2 164
yn 46 2 165
fn 46 3 166
sc 46 3 167
cr 46 0 168
--- 16 2 169
`` 27 2 170
--- 46 0 171
--- 27 0 172
--- 27 0 173
fi 41 2 174
fl 41 2 175
en 46 0 177
\- "
dg 46 3 178
dd 46 3 179
--- 23 0 180
pg 44 3 182
--- 29 0 183
--- 18 1 184
--- 27 1 185
'' 27 2 186
--- 46 0 187
--- 82 0 188
--- 82 2 189
?? 50 1 191
ga 27 2 193
\` "
aa 27 2 194
\' "
^a 27 2 195
^ "
~a 27 2 196
~ "
-a 27 2 197
Ua 27 2 198
.a 27 2 199
:a 27 2 200
oa 27 2 202
,a 27 1 203
"a 27 2 205
Ca 27 1 206
va 27 2 207
em 82 0 208
--- 82 2 225
--- 30 2 227
--- 46 2 232
--- 64 2 233
--- 82 2 234
--- 30 2 235
--- 73 0 241
--- 23 0 245
--- 18 2 248
--- 50 0 249
--- 77 0 250
--- 50 2 251
0707070014231216761006440057030057030000010641600522627501100002400000003400post.src/devpost/Hx name Hx
fontname Helvetica-Narrow-BoldOblique
named in prologue
ligatures fi fl 0
spacewidth 23
charset
! 27 2 33
" 39 2 34
dq "
# 46 2 35
$ 46 3 36
% 73 2 37
& 59 2 38
' 23 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
hy 27 0 45
- "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 27 0 58
; 27 1 59
--- 48 0 60
= 48 0 61
--- 48 0 62
? 50 2 63
@ 80 3 64
A 59 2 65
B 59 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 46 2 74
K 59 2 75
L 50 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 27 3 91
\ 23 2 92
bs "
] 27 3 93
--- 48 2 94
--- 46 1 95
` 23 2 96
a 46 0 97
b 50 2 98
c 46 0 99
d 50 2 100
e 46 0 101
f 27 2 102
g 50 1 103
h 50 2 104
i 23 2 105
j 23 3 106
k 46 2 107
l 23 2 108
m 73 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 32 0 114
s 46 0 115
t 27 2 116
u 50 0 117
v 46 0 118
w 64 0 119
x 46 0 120
y 46 1 121
z 41 0 122
{ 32 3 123
--- 23 3 124
} 32 3 125
--- 48 0 126
!! 27 1 161
ct 46 3 162
ps 46 2 163
fr 14 2 164
yn 46 2 165
fn 46 3 166
sc 46 3 167
cr 46 2 168
--- 20 2 169
`` 41 2 170
--- 46 0 171
--- 27 0 172
--- 27 0 173
fi 50 2 174
fl 50 2 175
en 46 0 177
\- "
dg 46 3 178
dd 46 3 179
--- 23 0 180
pg 46 3 182
--- 29 0 183
--- 23 1 184
--- 41 1 185
'' 41 2 186
--- 46 0 187
--- 82 0 188
--- 82 2 189
?? 50 1 191
ga 27 2 193
\` "
aa 27 2 194
\' "
^a 27 2 195
^ "
~a 27 2 196
~ "
-a 27 2 197
Ua 27 2 198
.a 27 2 199
:a 27 2 200
oa 27 2 202
,a 27 1 203
"a 27 2 205
Ca 27 1 206
va 27 2 207
em 82 0 208
--- 82 2 225
--- 30 2 227
--- 50 2 232
--- 64 2 233
--- 82 2 234
--- 30 2 235
--- 73 0 241
--- 23 0 245
--- 23 2 248
--- 50 0 249
--- 77 0 250
--- 50 2 251
0707070014231216771006440057030057030000010641620522627501100002300000003360post.src/devpost/I name I
fontname Times-Italic
named in prologue
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 42 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 68 2 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
--- 68 2 60
= 68 0 61
--- 68 2 62
? 50 2 63
@ 92 3 64
A 61 2 65
B 61 2 66
C 67 2 67
D 72 2 68
E 61 2 69
F 61 2 70
G 72 2 71
H 72 2 72
I 33 2 73
J 44 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 67 2 78
O 72 2 79
P 61 2 80
Q 72 3 81
R 61 2 82
S 50 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 83 2 87
X 61 2 88
Y 56 2 89
Z 56 2 90
[ 39 3 91
\ 28 2 92
bs "
] 39 3 93
--- 42 2 94
--- 50 1 95
` 33 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 28 3 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 44 2 107
l 28 2 108
m 72 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 39 0 114
s 39 0 115
t 28 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 40 3 123
--- 27 3 124
} 40 3 125
--- 54 0 126
!! 39 1 161
ct 50 3 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 2 167
cr 50 2 168
--- 21 2 169
`` 56 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 50 3 174
fl 50 3 175
en 50 0 177
\- "
dg 50 2 178
dd 50 2 179
--- 25 0 180
pg 52 3 182
--- 35 0 183
--- 33 1 184
--- 56 1 185
'' 56 2 186
--- 50 0 187
--- 89 0 188
--- 100 2 189
?? 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 89 0 208
--- 89 2 225
--- 28 2 227
--- 56 2 232
--- 72 3 233
--- 94 2 234
--- 31 2 235
--- 67 0 241
--- 28 0 245
--- 28 2 248
--- 50 3 249
--- 67 0 250
--- 50 3 251
0707070014231217001006440057030057030000010641640522627501100002400000003366post.src/devpost/KB name KB
fontname Bookman-Demi
named in prologue
ligatures fi fl 0
spacewidth 34
charset
! 36 2 33
" 42 2 34
dq "
# 60 2 35
$ 66 3 36
% 94 2 37
& 80 2 38
' 32 2 39
( 32 3 40
) 32 3 41
* 46 2 42
+ 60 0 43
, 34 1 44
hy 36 0 45
- "
. 34 0 46
/ 60 3 47
0 66 2 48
1 66 2 49
2 66 2 50
3 66 2 51
4 66 2 52
5 66 2 53
6 66 2 54
7 66 2 55
8 66 2 56
9 66 2 57
: 34 0 58
; 34 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 66 2 63
@ 82 2 64
A 72 2 65
B 72 2 66
C 74 2 67
D 78 2 68
E 72 2 69
F 68 2 70
G 78 2 71
H 82 2 72
I 40 2 73
J 64 2 74
K 80 2 75
L 64 2 76
M 94 2 77
N 74 2 78
O 80 2 79
P 66 2 80
Q 80 3 81
R 78 2 82
S 66 2 83
T 70 2 84
U 74 2 85
V 72 2 86
W 94 2 87
X 78 2 88
Y 70 2 89
Z 64 2 90
[ 30 3 91
\ 60 2 92
bs "
] 30 3 93
--- 60 2 94
--- 50 1 95
` 32 2 96
a 58 0 97
b 60 2 98
c 58 0 99
d 64 2 100
e 58 0 101
f 38 2 102
g 58 3 103
h 68 2 104
i 36 2 105
j 34 3 106
k 66 2 107
l 34 2 108
m 100 0 109
n 68 0 110
o 62 0 111
p 64 1 112
q 62 1 113
r 46 0 114
s 52 0 115
t 46 2 116
u 66 0 117
v 60 0 118
w 80 0 119
x 60 0 120
y 62 1 121
z 56 0 122
{ 32 3 123
--- 60 2 124
} 32 3 125
--- 60 0 126
!! 36 1 161
ct 66 2 162
ps 66 2 163
fr 12 2 164
yn 66 2 165
fn 66 3 166
sc 60 3 167
cr 60 2 168
--- 24 2 169
`` 54 2 170
--- 40 0 171
--- 22 0 172
--- 22 0 173
fi 74 2 174
fl 74 2 175
en 50 0 177
\- "
dg 44 3 178
dd 38 3 179
--- 34 0 180
pg 80 2 182
--- 46 0 183
--- 32 1 184
--- 54 1 185
'' 54 2 186
--- 40 0 187
--- 100 0 188
--- 136 2 189
?? 66 1 191
ga 40 2 193
\` "
aa 40 2 194
\' "
^a 50 2 195
^ "
~a 48 2 196
~ "
-a 46 2 197
Ua 50 2 198
.a 32 2 199
:a 50 2 200
oa 34 2 202
,a 36 1 203
"a 44 2 205
Ca 32 1 206
va 50 2 207
em 100 0 208
--- 114 2 225
--- 40 2 227
--- 64 2 232
--- 80 3 233
--- 122 2 234
--- 40 2 235
--- 88 0 241
--- 36 0 245
--- 34 2 248
--- 62 0 249
--- 94 0 250
--- 66 2 251
0707070014231217011006440057030057030000010641660522627501100002400000003373post.src/devpost/KI name KI
fontname Bookman-LightItalic
named in prologue
ligatures fi fl 0
spacewidth 30
charset
! 32 2 33
" 36 2 34
dq "
# 60 2 35
$ 62 2 36
% 80 2 37
& 82 2 38
' 28 2 39
( 28 3 40
) 28 3 41
* 44 2 42
+ 60 2 43
, 30 1 44
hy 32 0 45
- "
. 30 0 46
/ 60 3 47
0 62 2 48
1 62 2 49
2 62 2 50
3 62 2 51
4 62 2 52
5 62 2 53
6 62 2 54
7 62 2 55
8 62 2 56
9 62 2 57
: 30 0 58
; 30 1 59
--- 60 2 60
= 60 0 61
--- 60 2 62
? 54 2 63
@ 78 2 64
A 70 2 65
B 72 2 66
C 72 2 67
D 74 2 68
E 68 2 69
F 62 2 70
G 76 2 71
H 80 2 72
I 32 2 73
J 56 2 74
K 72 2 75
L 58 2 76
M 86 2 77
N 72 2 78
O 76 2 79
P 60 2 80
Q 78 3 81
R 70 2 82
S 64 2 83
T 60 2 84
U 72 2 85
V 68 2 86
W 96 2 87
X 70 2 88
Y 66 2 89
Z 58 2 90
[ 26 3 91
\ 60 2 92
bs "
] 26 3 93
--- 60 2 94
--- 50 1 95
` 28 2 96
a 62 0 97
b 60 2 98
c 48 0 99
d 64 2 100
e 54 0 101
f 34 3 102
g 56 1 103
h 62 2 104
i 28 2 105
j 28 3 106
k 60 2 107
l 28 2 108
m 88 0 109
n 62 0 110
o 54 0 111
p 60 1 112
q 56 1 113
r 40 0 114
s 54 0 115
t 34 2 116
u 62 0 117
v 54 0 118
w 88 0 119
x 54 0 120
y 60 1 121
z 52 0 122
{ 36 3 123
--- 60 2 124
} 38 3 125
--- 60 0 126
!! 32 1 161
ct 62 2 162
ps 62 2 163
fr 2 2 164
yn 62 2 165
fn 62 3 166
sc 62 3 167
cr 60 2 168
--- 20 2 169
`` 44 2 170
--- 30 0 171
--- 18 0 172
--- 18 0 173
fi 64 3 174
fl 66 3 175
en 50 0 177
\- "
dg 62 3 178
dd 62 3 179
--- 30 0 180
pg 62 2 182
--- 46 0 183
--- 32 1 184
--- 48 1 185
'' 44 2 186
--- 30 0 187
--- 100 0 188
--- 118 2 189
?? 54 1 191
ga 34 2 193
\` "
aa 32 2 194
\' "
^a 44 2 195
^ "
~a 44 2 196
~ "
-a 44 2 197
Ua 44 2 198
.a 26 2 199
:a 42 2 200
oa 30 2 202
,a 32 1 203
"a 34 2 205
Ca 26 1 206
va 44 2 207
em 100 0 208
--- 122 2 225
--- 44 2 227
--- 58 2 232
--- 76 2 233
--- 118 2 234
--- 40 2 235
--- 88 0 241
--- 28 0 245
--- 34 2 248
--- 54 0 249
--- 90 0 250
--- 62 3 251
0707070014231217021006440057030057030000010642000522627501100002400000003366post.src/devpost/KR name KR
fontname Bookman-Light
named in prologue
ligatures fi fl 0
spacewidth 32
charset
! 30 2 33
" 38 2 34
dq "
# 60 2 35
$ 62 2 36
% 90 2 37
& 80 2 38
' 22 2 39
( 30 3 40
) 30 3 41
* 44 2 42
+ 60 0 43
, 32 1 44
hy 40 0 45
- "
. 32 0 46
/ 60 3 47
0 62 2 48
1 62 2 49
2 62 2 50
3 62 2 51
4 62 2 52
5 62 2 53
6 62 2 54
7 62 2 55
8 62 2 56
9 62 2 57
: 32 0 58
; 32 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 54 2 63
@ 82 2 64
A 68 2 65
B 74 2 66
C 74 2 67
D 80 2 68
E 72 2 69
F 64 2 70
G 80 2 71
H 80 2 72
I 34 2 73
J 60 2 74
K 72 2 75
L 60 2 76
M 92 2 77
N 74 2 78
O 80 2 79
P 62 2 80
Q 82 3 81
R 72 2 82
S 66 2 83
T 62 2 84
U 78 2 85
V 70 2 86
W 96 2 87
X 72 2 88
Y 64 2 89
Z 64 2 90
[ 30 3 91
\ 60 2 92
bs "
] 30 3 93
--- 60 2 94
--- 50 1 95
` 22 2 96
a 58 0 97
b 62 2 98
c 52 0 99
d 62 2 100
e 52 0 101
f 32 2 102
g 54 3 103
h 66 2 104
i 30 2 105
j 30 3 106
k 62 2 107
l 30 2 108
m 94 0 109
n 66 0 110
o 56 0 111
p 62 1 112
q 58 1 113
r 44 0 114
s 52 0 115
t 38 2 116
u 68 0 117
v 52 0 118
w 78 0 119
x 56 0 120
y 54 1 121
z 48 0 122
{ 28 3 123
--- 60 2 124
} 28 3 125
--- 60 0 126
!! 30 1 161
ct 62 2 162
ps 62 2 163
fr 14 2 164
yn 62 2 165
fn 62 3 166
sc 52 3 167
cr 60 2 168
--- 22 2 169
`` 40 2 170
--- 36 0 171
--- 24 0 172
--- 24 0 173
fi 62 2 174
fl 62 2 175
en 50 0 177
\- "
dg 54 3 178
dd 54 3 179
--- 32 0 180
pg 60 2 182
--- 46 0 183
--- 22 0 184
--- 40 0 185
'' 40 2 186
--- 36 0 187
--- 100 0 188
--- 128 2 189
?? 54 1 191
ga 34 2 193
\` "
aa 34 2 194
\' "
^a 42 2 195
^ "
~a 44 2 196
~ "
-a 44 2 197
Ua 46 2 198
.a 26 2 199
:a 42 2 200
oa 32 2 202
,a 32 1 203
"a 38 2 205
Ca 32 1 206
va 42 2 207
em 100 0 208
--- 126 2 225
--- 42 2 227
--- 60 2 232
--- 80 2 233
--- 124 2 234
--- 42 2 235
--- 86 0 241
--- 30 0 245
--- 32 2 248
--- 56 0 249
--- 90 0 250
--- 66 2 251
0707070014231217031006440057030057030000010642020522627501100002400000003374post.src/devpost/KX name KX
fontname Bookman-DemiItalic
named in prologue
ligatures fi fl 0
spacewidth 34
charset
! 32 2 33
" 38 2 34
dq "
# 60 2 35
$ 68 3 36
% 88 2 37
& 98 2 38
' 32 2 39
( 26 3 40
) 26 3 41
* 46 2 42
+ 60 0 43
, 34 1 44
hy 28 0 45
- "
. 34 0 46
/ 36 2 47
0 68 2 48
1 68 2 49
2 68 2 50
3 68 2 51
4 68 2 52
5 68 2 53
6 68 2 54
7 68 2 55
8 68 2 56
9 68 2 57
: 34 0 58
; 34 1 59
--- 62 0 60
= 60 0 61
--- 62 0 62
? 62 2 63
@ 78 2 64
A 72 2 65
B 72 2 66
C 70 2 67
D 76 2 68
E 72 2 69
F 66 2 70
G 76 2 71
H 80 2 72
I 38 2 73
J 62 2 74
K 78 2 75
L 64 2 76
M 86 2 77
N 74 2 78
O 76 2 79
P 64 2 80
Q 76 3 81
R 74 2 82
S 70 2 83
T 70 2 84
U 74 2 85
V 66 2 86
W 100 2 87
X 74 2 88
Y 66 2 89
Z 68 2 90
[ 26 3 91
\ 58 2 92
bs "
] 26 3 93
--- 62 2 94
--- 50 1 95
` 32 2 96
a 68 0 97
b 60 2 98
c 56 0 99
d 68 2 100
e 56 0 101
f 42 3 102
g 62 1 103
h 70 2 104
i 38 2 105
j 32 3 106
k 70 2 107
l 38 2 108
m 96 0 109
n 68 0 110
o 60 0 111
p 66 1 112
q 62 1 113
r 50 0 114
s 54 0 115
t 44 2 116
u 68 0 117
v 54 0 118
w 86 0 119
x 62 0 120
y 60 1 121
z 56 0 122
{ 30 3 123
--- 62 2 124
} 30 3 125
--- 62 0 126
!! 32 1 161
ct 68 2 162
ps 68 2 163
fr 12 2 164
yn 68 2 165
fn 68 3 166
sc 62 3 167
cr 68 2 168
--- 18 2 169
`` 52 2 170
--- 38 0 171
--- 22 0 172
--- 22 0 173
fi 82 3 174
fl 82 3 175
en 50 0 177
\- "
dg 42 3 178
dd 42 3 179
--- 34 0 180
pg 68 3 182
--- 36 0 183
--- 30 1 184
--- 52 1 185
'' 52 2 186
--- 38 0 187
--- 100 0 188
--- 136 2 189
?? 62 1 191
ga 38 2 193
\` "
aa 34 2 194
\' "
^a 48 2 195
^ "
~a 48 2 196
~ "
-a 48 2 197
Ua 46 2 198
.a 38 2 199
:a 52 2 200
oa 36 2 202
,a 36 1 203
"a 56 2 205
Ca 32 1 206
va 48 2 207
em 100 0 208
--- 114 2 225
--- 44 2 227
--- 64 2 232
--- 76 2 233
--- 118 2 234
--- 44 2 235
--- 88 0 241
--- 38 0 245
--- 38 2 248
--- 60 2 249
--- 92 0 250
--- 66 3 251
0707070014231217041006440057030057030000010642040522627501100002300000003242post.src/devpost/C name C
fontname Courier
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
!! 60 1 161
ct 60 2 162
ps 60 2 163
fr 60 2 164
yn 60 2 165
fn 60 2 166
sc 60 2 167
cr 60 2 168
--- 60 2 169
`` 60 2 170
--- 60 0 171
--- 60 0 172
--- 60 0 173
en 60 0 177
\- "
dg 60 2 178
dd 60 2 179
--- 60 0 180
pg 60 2 182
--- 60 0 183
--- 60 1 184
--- 60 1 185
'' 60 2 186
--- 60 0 187
--- 60 0 188
--- 60 2 189
?? 60 1 191
ga 60 2 193
\` "
aa 60 2 194
\' "
^a 60 2 195
^ "
~a 60 2 196
~ "
-a 60 2 197
Ua 60 2 198
.a 60 2 199
:a 60 2 200
oa 60 2 202
,a 60 1 203
"a 60 2 205
Ca 60 1 206
va 60 2 207
em 60 0 208
--- 60 2 225
--- 60 2 227
--- 60 2 232
--- 60 2 233
--- 60 2 234
--- 60 2 235
--- 60 0 241
--- 60 0 245
--- 60 2 248
--- 60 0 249
--- 60 0 250
--- 60 2 251
0707070014231217051006440057030057030000010642060522627501200002400000003375post.src/devpost/NB name NB
fontname NewCenturySchlbk-Bold
named in prologue
ligatures fi fl 0
spacewidth 29
charset
! 30 2 33
" 33 2 34
dq "
# 57 2 35
$ 57 3 36
% 83 2 37
& 85 2 38
' 24 2 39
( 39 3 40
) 39 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 57 2 48
1 57 2 49
2 57 2 50
3 57 2 51
4 57 2 52
5 57 2 53
6 57 2 54
7 57 2 55
8 57 2 56
9 57 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 50 2 63
@ 75 2 64
A 76 2 65
B 78 2 66
C 78 2 67
D 83 2 68
E 76 2 69
F 72 2 70
G 83 2 71
H 87 2 72
I 44 2 73
J 65 2 74
K 81 2 75
L 72 2 76
M 98 2 77
N 83 2 78
O 83 2 79
P 76 2 80
Q 83 3 81
R 81 2 82
S 67 2 83
T 72 2 84
U 83 2 85
V 76 2 86
W 98 2 87
X 72 2 88
Y 72 2 89
Z 67 2 90
[ 39 3 91
\ 61 2 92
bs "
] 39 3 93
--- 61 2 94
--- 50 1 95
` 24 2 96
a 61 0 97
b 65 2 98
c 56 0 99
d 67 2 100
e 57 0 101
f 39 2 102
g 61 1 103
h 69 2 104
i 37 2 105
j 35 3 106
k 67 2 107
l 35 2 108
m 96 0 109
n 69 0 110
o 61 0 111
p 67 1 112
q 65 1 113
r 52 0 114
s 50 0 115
t 43 2 116
u 69 0 117
v 61 0 118
w 89 0 119
x 61 0 120
y 61 1 121
z 54 0 122
{ 39 3 123
--- 61 2 124
} 39 3 125
--- 61 0 126
!! 30 1 161
ct 57 3 162
ps 57 2 163
fr 17 2 164
yn 72 2 165
fn 57 3 166
sc 50 2 167
cr 61 2 168
--- 24 2 169
`` 48 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 69 2 174
fl 69 2 175
en 50 0 177
\- "
dg 50 2 178
dd 50 2 179
--- 28 0 180
pg 75 2 182
--- 61 0 183
--- 24 1 184
--- 48 1 185
'' 48 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
?? 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 98 2 225
--- 37 2 227
--- 72 2 232
--- 83 2 233
--- 100 2 234
--- 37 2 235
--- 87 0 241
--- 37 0 245
--- 35 2 248
--- 61 3 249
--- 91 0 250
--- 61 2 251
0707070014231217061006440057030057030000010642400522627501200002400000003376post.src/devpost/NI name NI
fontname NewCenturySchlbk-Italic
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 40 2 34
dq "
# 61 2 35
$ 56 3 36
% 83 2 37
& 85 2 38
' 20 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 61 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 75 2 64
A 70 2 65
B 72 2 66
C 72 2 67
D 78 2 68
E 72 2 69
F 67 2 70
G 78 2 71
H 83 2 72
I 41 2 73
J 61 2 74
K 74 2 75
L 67 2 76
M 94 2 77
N 81 2 78
O 78 2 79
P 67 2 80
Q 78 3 81
R 74 2 82
S 67 2 83
T 69 2 84
U 81 2 85
V 70 2 86
W 93 2 87
X 70 2 88
Y 69 2 89
Z 67 2 90
[ 33 3 91
\ 61 2 92
bs "
] 33 3 93
--- 61 2 94
--- 50 1 95
` 20 2 96
a 57 0 97
b 56 2 98
c 44 0 99
d 61 2 100
e 44 0 101
f 33 3 102
g 54 1 103
h 61 2 104
i 33 2 105
j 32 3 106
k 56 2 107
l 33 2 108
m 89 0 109
n 61 0 110
o 50 0 111
p 57 1 112
q 56 1 113
r 44 0 114
s 44 0 115
t 35 2 116
u 61 0 117
v 52 0 118
w 78 0 119
x 50 0 120
y 50 1 121
z 46 0 122
{ 33 3 123
--- 61 2 124
} 33 3 125
--- 61 0 126
!! 33 3 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 50 3 167
cr 61 2 168
--- 28 2 169
`` 39 2 170
--- 43 0 171
--- 33 0 172
--- 33 0 173
fi 61 3 174
fl 61 3 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 28 0 180
pg 65 2 182
--- 61 2 183
--- 20 1 184
--- 39 1 185
'' 39 2 186
--- 43 0 187
--- 100 0 188
--- 100 2 189
?? 44 3 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 87 2 225
--- 42 2 227
--- 67 2 232
--- 78 2 233
--- 98 2 234
--- 37 2 235
--- 72 0 241
--- 33 0 245
--- 33 2 248
--- 50 3 249
--- 78 0 250
--- 56 3 251
0707070014231217071006440057030057030000010642420522627501200002400000003377post.src/devpost/NR name NR
fontname NewCenturySchlbk-Roman
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 30 2 33
" 39 2 34
dq "
# 56 2 35
$ 56 3 36
% 83 2 37
& 81 2 38
' 20 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 74 2 64
A 72 2 65
B 72 2 66
C 72 2 67
D 78 2 68
E 72 2 69
F 67 2 70
G 78 2 71
H 83 2 72
I 41 2 73
J 56 2 74
K 78 2 75
L 67 2 76
M 94 2 77
N 81 2 78
O 78 2 79
P 67 2 80
Q 78 3 81
R 72 2 82
S 63 2 83
T 67 2 84
U 81 2 85
V 72 2 86
W 98 2 87
X 70 2 88
Y 70 2 89
Z 61 2 90
[ 33 3 91
\ 61 2 92
bs "
] 33 3 93
--- 61 2 94
--- 50 1 95
` 20 2 96
a 56 0 97
b 56 2 98
c 44 0 99
d 57 2 100
e 50 0 101
f 33 2 102
g 54 1 103
h 61 2 104
i 32 2 105
j 30 3 106
k 59 2 107
l 32 2 108
m 89 0 109
n 61 0 110
o 50 0 111
p 57 1 112
q 56 1 113
r 44 0 114
s 46 0 115
t 39 2 116
u 61 0 117
v 54 0 118
w 78 0 119
x 54 0 120
y 54 1 121
z 48 0 122
{ 33 3 123
--- 61 2 124
} 33 3 125
--- 61 0 126
!! 30 3 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 70 2 165
fn 56 3 166
sc 50 3 167
cr 61 2 168
--- 20 2 169
`` 39 2 170
--- 43 0 171
--- 26 0 172
--- 26 0 173
fi 61 2 174
fl 61 2 175
en 56 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 28 0 180
pg 61 3 182
--- 61 2 183
--- 20 1 184
--- 39 1 185
'' 39 2 186
--- 43 0 187
--- 100 0 188
--- 100 2 189
?? 44 3 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 33 2 227
--- 67 2 232
--- 78 2 233
--- 100 2 234
--- 30 2 235
--- 80 0 241
--- 32 0 245
--- 32 2 248
--- 50 2 249
--- 83 0 250
--- 57 2 251
0707070014231217101006440057030057030000010642440522627501200002400000003402post.src/devpost/NX name NX
fontname NewCenturySchlbk-BoldItalic
named in prologue
ligatures fi fl 0
spacewidth 29
charset
! 33 2 33
" 40 2 34
dq "
# 61 2 35
$ 57 3 36
% 89 2 37
& 89 2 38
' 26 2 39
( 41 3 40
) 41 3 41
* 50 2 42
+ 61 0 43
, 29 1 44
hy 33 0 45
- "
. 29 0 46
/ 28 2 47
0 57 2 48
1 57 2 49
2 57 2 50
3 57 2 51
4 57 2 52
5 57 2 53
6 57 2 54
7 57 2 55
8 57 2 56
9 57 2 57
: 29 0 58
; 29 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 48 2 63
@ 75 2 64
A 74 2 65
B 76 2 66
C 76 2 67
D 83 2 68
E 74 2 69
F 70 2 70
G 81 2 71
H 87 2 72
I 44 2 73
J 67 2 74
K 78 2 75
L 70 2 76
M 94 2 77
N 85 2 78
O 83 2 79
P 74 2 80
Q 83 3 81
R 80 2 82
S 69 2 83
T 72 2 84
U 83 2 85
V 74 2 86
W 94 2 87
X 74 2 88
Y 70 2 89
Z 70 2 90
[ 41 3 91
\ 61 2 92
bs "
] 41 3 93
--- 61 2 94
--- 50 1 95
` 26 2 96
a 67 0 97
b 61 2 98
c 54 0 99
d 67 2 100
e 52 0 101
f 39 3 102
g 61 1 103
h 69 2 104
i 39 2 105
j 37 3 106
k 65 2 107
l 39 2 108
m 94 0 109
n 69 0 110
o 57 0 111
p 65 1 112
q 63 1 113
r 52 0 114
s 48 0 115
t 41 2 116
u 69 0 117
v 56 0 118
w 83 0 119
x 57 0 120
y 52 1 121
z 52 0 122
{ 41 3 123
--- 61 2 124
} 41 3 125
--- 61 0 126
!! 33 3 161
ct 57 3 162
ps 57 2 163
fr 17 2 164
yn 57 2 165
fn 57 3 166
sc 50 3 167
cr 57 2 168
--- 29 2 169
`` 48 2 170
--- 48 0 171
--- 28 0 172
--- 28 0 173
fi 69 3 174
fl 69 3 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 29 0 180
pg 65 2 182
--- 61 0 183
--- 26 1 184
--- 48 1 185
'' 48 2 186
--- 48 0 187
--- 100 0 188
--- 117 2 189
?? 48 3 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 89 2 225
--- 41 2 227
--- 70 2 232
--- 83 2 233
--- 96 2 234
--- 36 2 235
--- 81 0 241
--- 39 0 245
--- 39 2 248
--- 57 3 249
--- 85 0 250
--- 57 3 251
0707070014231217111006440057030057030000010642460522627501200002400000003367post.src/devpost/PA name PA
fontname Palatino-Roman
named in prologue
ligatures fi fl 0
spacewidth 25
charset
! 28 2 33
" 37 2 34
dq "
# 50 2 35
$ 50 2 36
% 84 2 37
& 78 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 39 2 42
+ 61 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 61 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 75 2 64
A 78 2 65
B 61 2 66
C 71 2 67
D 77 2 68
E 61 2 69
F 56 2 70
G 76 2 71
H 83 2 72
I 34 2 73
J 33 3 74
K 73 2 75
L 61 2 76
M 95 2 77
N 83 2 78
O 79 2 79
P 60 2 80
Q 79 3 81
R 67 2 82
S 53 2 83
T 61 2 84
U 78 2 85
V 72 2 86
W 100 2 87
X 67 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
\ 61 2 92
bs "
] 33 2 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 55 2 98
c 44 0 99
d 61 2 100
e 48 0 101
f 33 2 102
g 56 1 103
h 58 2 104
i 29 2 105
j 23 3 106
k 56 2 107
l 29 2 108
m 88 0 109
n 58 0 110
o 55 0 111
p 60 1 112
q 56 1 113
r 40 0 114
s 42 0 115
t 33 2 116
u 60 0 117
v 56 0 118
w 83 0 119
x 52 0 120
y 56 1 121
z 50 0 122
{ 33 2 123
--- 61 2 124
} 33 2 125
--- 61 0 126
!! 28 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 21 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 61 2 174
fl 61 2 175
en 50 0 177
\- "
dg 50 2 178
dd 50 3 179
--- 25 0 180
pg 63 3 182
--- 61 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 114 2 189
?? 44 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 25 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 38 2 205
Ca 31 1 206
va 33 2 207
em 100 0 208
--- 94 2 225
--- 33 2 227
--- 61 2 232
--- 83 2 233
--- 100 2 234
--- 33 2 235
--- 76 0 241
--- 29 0 245
--- 29 2 248
--- 56 0 249
--- 83 0 250
--- 56 2 251
0707070014231217121006440057030057030000010643200522627501200002400000003370post.src/devpost/PB name PB
fontname Palatino-Bold
named in prologue
ligatures fi fl 0
spacewidth 25
charset
! 28 2 33
" 40 2 34
dq "
# 50 2 35
$ 50 2 36
% 89 2 37
& 83 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 44 2 42
+ 61 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 30 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 75 2 64
A 78 2 65
B 67 2 66
C 72 2 67
D 83 2 68
E 61 2 69
F 56 2 70
G 83 2 71
H 83 2 72
I 39 2 73
J 39 3 74
K 78 2 75
L 61 2 76
M 100 2 77
N 83 2 78
O 83 2 79
P 61 2 80
Q 83 3 81
R 72 2 82
S 61 2 83
T 67 2 84
U 78 2 85
V 78 2 86
W 100 2 87
X 67 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
\ 61 2 92
bs "
] 33 2 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 61 2 98
c 44 0 99
d 61 2 100
e 50 0 101
f 39 2 102
g 56 1 103
h 61 2 104
i 33 2 105
j 33 3 106
k 61 2 107
l 33 2 108
m 89 0 109
n 61 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 44 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 83 0 119
x 50 0 120
y 56 1 121
z 50 0 122
{ 31 2 123
--- 61 2 124
} 31 2 125
--- 61 0 126
!! 28 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 23 2 169
`` 50 2 170
--- 50 0 171
--- 39 0 172
--- 39 0 173
fi 61 2 174
fl 61 2 175
en 50 0 177
\- "
dg 50 2 178
dd 50 3 179
--- 25 0 180
pg 64 3 182
--- 61 0 183
--- 33 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
?? 44 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 44 2 227
--- 61 2 232
--- 83 2 233
--- 100 2 234
--- 49 2 235
--- 78 0 241
--- 33 0 245
--- 33 2 248
--- 56 0 249
--- 83 0 250
--- 61 2 251
0707070014231217131006440057030057030000010643220522627501200002400000003367post.src/devpost/PI name PI
fontname Palatino-Italic
named in prologue
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 50 2 34
dq "
# 50 2 35
$ 50 2 36
% 89 2 37
& 78 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 39 2 42
+ 61 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 30 3 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 50 2 63
@ 75 2 64
A 72 2 65
B 61 2 66
C 67 2 67
D 78 2 68
E 61 2 69
F 56 2 70
G 72 2 71
H 78 2 72
I 33 2 73
J 33 3 74
K 67 2 75
L 56 2 76
M 94 2 77
N 78 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 78 2 85
V 72 2 86
W 94 2 87
X 72 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
\ 61 2 92
bs "
] 33 2 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 44 0 97
b 46 2 98
c 41 0 99
d 50 2 100
e 39 0 101
f 28 3 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 44 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 44 0 111
p 50 1 112
q 46 1 113
r 39 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
{ 33 2 123
--- 61 2 124
} 33 2 125
--- 61 0 126
!! 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 33 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 53 3 174
fl 54 3 175
en 50 0 177
\- "
dg 50 2 178
dd 50 3 179
--- 25 0 180
pg 50 3 182
--- 50 0 183
--- 28 0 184
--- 50 0 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
?? 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 94 2 225
--- 33 2 227
--- 56 2 232
--- 78 2 233
--- 103 2 234
--- 33 2 235
--- 64 0 241
--- 28 0 245
--- 28 2 248
--- 44 0 249
--- 67 0 250
--- 50 3 251
0707070014231217141006440057030057030000010643240522627501200002400000003373post.src/devpost/PX name PX
fontname Palatino-BoldItalic
named in prologue
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 50 2 34
dq "
# 50 2 35
$ 50 2 36
% 89 2 37
& 83 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 44 2 42
+ 61 0 43
, 25 1 44
hy 39 0 45
- "
. 25 0 46
/ 32 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 83 2 64
A 72 2 65
B 67 2 66
C 69 2 67
D 78 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 78 2 72
I 39 2 73
J 39 3 74
K 72 2 75
L 61 2 76
M 94 2 77
N 78 2 78
O 83 2 79
P 67 2 80
Q 83 3 81
R 72 2 82
S 56 2 83
T 61 2 84
U 78 2 85
V 67 2 86
W 100 2 87
X 72 2 88
Y 61 2 89
Z 67 2 90
[ 33 2 91
\ 61 2 92
bs "
] 33 2 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 56 0 97
b 54 2 98
c 44 0 99
d 56 2 100
e 44 0 101
f 33 3 102
g 50 1 103
h 56 2 104
i 33 2 105
j 33 3 106
k 56 2 107
l 33 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 54 1 113
r 39 0 114
s 44 0 115
t 39 2 116
u 56 0 117
v 56 0 118
w 83 0 119
x 50 0 120
y 56 1 121
z 50 0 122
{ 33 2 123
--- 61 2 124
} 33 2 125
--- 61 0 126
!! 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 56 3 167
cr 50 2 168
--- 25 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 61 3 174
fl 61 3 175
en 50 0 177
\- "
dg 56 2 178
dd 56 3 179
--- 25 0 180
pg 56 3 182
--- 61 0 183
--- 25 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
?? 44 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 56 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 94 2 225
--- 33 2 227
--- 61 2 232
--- 83 2 233
--- 94 2 234
--- 33 2 235
--- 74 0 241
--- 33 0 245
--- 33 2 248
--- 56 0 249
--- 78 0 250
--- 56 3 251
0707070014231217151006440057030057030000010643260522627501200002300000003361post.src/devpost/R name R
fontname Times-Roman
named in prologue
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 41 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 56 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 28 0 58
; 28 1 59
--- 56 2 60
= 56 0 61
--- 56 2 62
? 44 2 63
@ 92 3 64
A 72 2 65
B 67 2 66
C 67 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 72 2 71
H 72 2 72
I 33 2 73
J 39 2 74
K 72 2 75
L 61 2 76
M 89 2 77
N 72 2 78
O 72 2 79
P 56 2 80
Q 72 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 72 2 85
V 72 2 86
W 94 2 87
X 72 2 88
Y 72 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 47 2 94
--- 50 1 95
` 33 2 96
a 44 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 33 2 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 78 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 39 0 115
t 28 2 116
u 50 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
{ 48 3 123
--- 20 2 124
} 48 3 125
--- 54 0 126
!! 33 1 161
ct 50 3 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 18 2 169
`` 44 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 25 0 180
pg 45 3 182
--- 35 0 183
--- 33 1 184
--- 44 1 185
'' 44 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
?? 44 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 89 2 225
--- 28 2 227
--- 61 2 232
--- 72 2 233
--- 89 2 234
--- 31 2 235
--- 67 0 241
--- 28 0 245
--- 28 2 248
--- 50 2 249
--- 72 0 250
--- 50 2 251
0707070014231217161006440057030057030000010643400522627501200002300000004400post.src/devpost/S name S
fontname Symbol
named in prologue
special
charset
--- 33 2 33
fa 71 2 34
--- 50 2 35
te 55 2 36
--- 83 2 37
--- 78 2 38
st 44 0 39
--- 33 3 40
--- 33 3 41
** 50 2 42
pl 55 0 43
--- 25 1 44
mi 55 0 45
--- 25 0 46
sl 28 2 47
--- 50 2 48
--- 50 2 49
--- 50 2 50
--- 50 2 51
--- 50 2 52
--- 50 2 53
--- 50 2 54
--- 50 2 55
--- 50 2 56
--- 50 2 57
--- 28 0 58
--- 28 1 59
< 55 0 60
eq 55 0 61
> 55 0 62
--- 44 2 63
cg 55 0 64
*A 72 2 65
*B 67 2 66
*X 72 2 67
*D 61 2 68
*E 61 2 69
*F 76 2 70
*G 60 2 71
*Y 72 2 72
*I 33 2 73
--- 63 2 74
*K 72 2 75
*L 69 2 76
*M 89 2 77
*N 72 2 78
*O 72 2 79
*P 77 2 80
*H 74 2 81
*R 56 2 82
*S 59 2 83
*T 61 2 84
*U 69 2 85
ts 44 1 86
*W 77 2 87
*C 65 2 88
*Q 80 2 89
*Z 61 2 90
--- 33 3 91
tf 86 0 92
--- 33 3 93
pp 66 2 94
ul 50 1 95
_ "
rn 50 2 96
*a 63 0 97
*b 55 3 98
*x 55 1 99
*d 49 2 100
*e 44 0 101
*f 52 3 102
*g 41 1 103
*y 60 1 104
*i 33 0 105
--- 60 1 106
*k 55 0 107
*l 55 2 108
*m 58 1 109
*n 52 0 110
*o 55 0 111
*p 55 0 112
*h 52 2 113
*r 55 1 114
*s 60 0 115
*t 44 0 116
*u 58 0 117
--- 71 2 118
*w 69 0 119
*c 49 3 120
*q 69 1 121
*z 49 3 122
--- 48 3 123
or 20 3 124
--- 48 3 125
ap 55 0 126
--- 62 2 161
fm 25 2 162
<= 55 2 163
--- 17 2 164
if 73 0 165
--- 50 3 166
--- 75 0 167
--- 75 2 168
--- 75 0 169
--- 75 2 170
ab 104 0 171
<- 99 0 172
ua 60 2 173
-> 99 0 174
da 60 2 175
de 40 2 176
+- 55 2 177
--- 41 2 178
>= 55 2 179
mu 55 0 180
pt 71 0 181
pd 49 2 182
bu 46 0 183
di 55 0 184
!= 55 2 185
== 55 0 186
~~ 55 0 187
el 100 0 188
av 60 3 189
ah 100 0 190
CR 66 2 191
af 82 2 192
If 69 2 193
Rf 80 2 194
ws 99 3 195
Ox 77 2 196
O+ 77 2 197
es 82 2 198
ca 77 0 199
cu 77 0 200
sp 71 0 201
ip 71 1 202
!b 71 0 203
sb 71 0 204
ib 71 1 205
mo 71 0 206
!m 71 2 207
an 77 2 208
gr 71 2 209
rg 79 2 210
co 79 2 211
tm 89 2 212
--- 82 2 213
sr 55 2 214
c. 25 0 215
no 71 0 216
l& 60 0 217
l| 60 0 218
--- 104 0 219
--- 99 0 220
--- 60 2 221
--- 99 0 222
--- 60 2 223
lz 49 2 224
b< 33 3 225
RG 79 2 226
CO 79 2 227
TM 79 2 228
--- 71 2 229
LT 38 3 230
br 0 3 231
LX "
LB 38 3 232
lc 50 2 233
lx 38 2 234
lf 50 2 235
lt 49 2 236
lk 49 2 237
lb 49 2 238
bv 49 2 239
| "
b> 33 3 241
is 50 3 242
--- 69 2 243
--- 69 2 244
--- 69 2 245
RT 38 3 246
RX 38 2 247
RB 38 3 248
rc 38 2 249
rx 50 3 250
rf 38 2 251
rt 49 2 252
rk 49 2 253
rb 49 2 254
~= 55 0 1
0707070014231217171006440057030057030000010643430522627501200002400000000501post.src/devpost/S1 # Times-Roman special font
name S1
fontname Times-Roman
named in prologue
special
charset
ru 50 0 95
ff 60 2 1
Fi 84 2 1
Fl 84 2 1
14 75 2 1
12 75 2 1
34 75 2 1
bx 50 2 1
ob 38 2 1
ci 75 0 1
sq 50 2 1
Sl 50 2 1
L1 110 1 1
LA 110 1 1
LV 110 3 1
LH 210 1 1
lh 100 0 1
rh 100 0 1
lH 100 0 1
rH 100 0 1
PC 220 2 1
DG 185 2 1
0707070014231217201006440057030057030000010643440522627501200002400000004134post.src/devpost/ZD name ZD
fontname ZapfDingbats
named in prologue
charset
! 97 2 33
" 96 2 34
# 97 2 35
$ 98 3 36
% 72 2 37
& 79 3 38
' 79 3 39
( 79 3 40
) 69 2 41
* 96 2 42
+ 94 2 43
, 55 3 44
- 86 2 45
. 91 2 46
/ 93 2 47
0 91 2 48
1 94 2 49
2 97 2 50
3 76 3 51
4 85 3 52
5 76 2 53
6 76 2 54
7 57 3 55
8 68 3 56
9 76 2 57
: 76 2 58
; 76 2 59
< 75 3 60
= 49 2 61
> 55 2 62
? 54 3 63
@ 58 2 64
A 69 3 65
B 79 3 66
C 79 3 67
D 79 3 68
E 79 3 69
F 79 3 70
G 79 3 71
H 82 3 72
I 82 3 73
J 79 3 74
K 84 3 75
L 82 3 76
M 83 3 77
N 82 3 78
O 83 3 79
P 92 3 80
Q 74 2 81
R 72 2 82
S 75 2 83
T 79 3 84
U 79 3 85
V 69 3 86
W 78 3 87
X 77 3 88
Y 79 3 89
Z 76 2 90
[ 71 3 91
\ 71 3 92
] 68 3 93
^ 70 3 94
_ 83 3 95
` 81 3 96
a 79 3 97
b 79 3 98
c 71 3 99
d 69 2 100
e 70 2 101
f 69 2 102
g 79 3 103
h 79 3 104
i 71 3 105
j 79 3 106
k 78 3 107
l 79 3 108
m 87 3 109
n 76 2 110
o 76 2 111
p 76 2 112
q 76 3 113
r 76 3 114
s 89 2 115
t 89 3 116
u 79 3 117
v 78 3 118
w 44 3 119
x 14 2 120
y 28 2 121
z 41 2 122
{ 39 2 123
| 39 2 124
} 67 2 125
~ 67 2 126
hy 73 3 161
em 54 3 162
de 54 3 163
\- 91 2 164
en 67 3 165
ff 76 3 166
fi 76 2 167
fl 78 2 168
Fi 60 3 169
Fl 69 3 170
fm 63 3 171
ru 79 3 172
dg 79 3 173
bu 79 3 174
14 79 3 175
34 79 3 176
12 79 3 177
ct 79 3 178
rg 79 3 179
sq 79 3 180
sl 79 3 181
ul 79 3 182
or 79 3 183
no 79 3 184
-> 79 3 185
<- 79 3 186
da 79 3 187
lh 79 3 188
ua 79 3 189
ab 79 3 190
!b 79 3 191
aa 79 3 192
!m 79 3 193
ga 79 3 194
pl 79 3 195
mi 79 3 196
mu 79 3 197
di 79 3 198
eq 79 3 199
== 79 3 200
>= 79 3 201
<= 79 3 202
!= 79 3 203
+- 79 3 204
-+ 79 3 205
ap 79 3 206
~= 79 3 207
gr 79 3 208
is 79 3 209
pd 79 3 210
if 79 3 211
sr 89 2 212
rn 84 2 213
sb 102 2 214
sp 46 3 215
cu 75 2 216
ca 92 2 217
ib 75 2 218
ip 92 2 219
mo 93 2 220
es 93 2 221
sc 93 2 222
dd 83 2 223
lc 87 2 224
rc 83 2 225
lf 92 2 226
rf 92 2 227
bv 92 2 228
** 93 2 229
br 93 2 230
ci 46 3 231
ts 88 2 232
co 84 2 233
lt 84 2 234
rt 87 2 235
lb 87 2 236
rb 70 2 237
lk 70 2 238
rk 87 2 239
rh 87 2 241
tm 76 2 242
Sl 95 2 243
ps 77 2 244
cs 86 2 245
cy 77 2 246
as 89 3 247
os 97 2 248
=. 89 3 249
ld 83 2 250
rd 87 2 251
le 93 2 252
ge 97 2 253
pp 92 2 254
0707070014231217211006440057030057030000010643600522627501200002400000003376post.src/devpost/ZI name ZI
fontname ZapfChancery-MediumItalic
named in prologue
ligatures fi fl 0
spacewidth 22
charset
! 28 2 33
" 22 2 34
dq "
# 68 2 35
$ 44 3 36
% 68 2 37
& 78 2 38
' 24 2 39
( 26 3 40
) 22 3 41
* 42 2 42
+ 52 0 43
, 22 0 44
hy 28 0 45
- "
. 22 0 46
/ 34 3 47
0 44 2 48
1 44 2 49
2 44 2 50
3 44 2 51
4 44 2 52
5 44 2 53
6 44 2 54
7 44 2 55
8 44 2 56
9 44 2 57
: 26 0 58
; 24 0 59
--- 52 0 60
= 52 0 61
--- 52 0 62
? 38 2 63
@ 70 2 64
A 62 2 65
B 60 2 66
C 52 2 67
D 70 2 68
E 62 2 69
F 58 2 70
G 62 3 71
H 68 2 72
I 38 2 73
J 40 2 74
K 66 3 75
L 58 2 76
M 84 2 77
N 70 3 78
O 60 2 79
P 54 2 80
Q 60 3 81
R 60 3 82
S 46 2 83
T 50 2 84
U 74 2 85
V 64 2 86
W 88 2 87
X 56 2 88
Y 56 3 89
Z 62 2 90
[ 24 3 91
\ 48 2 92
bs "
] 32 3 93
--- 52 2 94
--- 50 1 95
` 24 2 96
a 42 0 97
b 42 2 98
c 34 0 99
d 44 2 100
e 34 0 101
f 32 3 102
g 40 1 103
h 44 2 104
i 24 2 105
j 22 3 106
k 44 3 107
l 24 2 108
m 62 0 109
n 46 0 110
o 40 0 111
p 44 1 112
q 40 3 113
r 30 0 114
s 32 0 115
t 32 2 116
u 46 0 117
v 44 0 118
w 68 0 119
x 42 1 120
y 40 1 121
z 44 0 122
{ 24 3 123
--- 52 2 124
} 24 3 125
--- 52 0 126
!! 28 1 161
ct 44 2 162
ps 48 2 163
fr 6 2 164
yn 72 3 165
fn 40 3 166
sc 42 3 167
cr 60 2 168
--- 16 2 169
`` 34 2 170
--- 34 0 171
--- 24 0 172
--- 26 0 173
fi 52 3 174
fl 52 3 175
en 50 0 177
\- "
dg 46 3 178
dd 48 3 179
--- 22 0 180
pg 50 3 182
--- 60 2 183
--- 18 0 184
--- 28 0 185
'' 36 2 186
--- 38 0 187
--- 100 0 188
--- 96 2 189
?? 40 1 191
ga 22 2 193
\` "
aa 30 2 194
\' "
^a 34 2 195
^ "
~a 44 2 196
~ "
-a 44 2 197
Ua 44 2 198
.a 22 2 199
:a 36 2 200
oa 30 2 202
,a 30 1 203
"a 40 2 205
Ca 28 1 206
va 34 2 207
em 100 0 208
--- 74 2 225
--- 26 2 227
--- 58 2 232
--- 66 3 233
--- 82 2 234
--- 26 2 235
--- 54 0 241
--- 24 0 245
--- 30 2 248
--- 44 3 249
--- 56 0 250
--- 42 3 251
0707070014230000050407550057030057030000020036570522627501400003100000000000post.src/devpost/charlib 0707070014230001611006440057030057030000010072070522627501200003400000000421post.src/devpost/charlib/12 /build_12 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(1) show
rmoveto
optsize R f
(\244) show
f
(2) show
optsize ofont f
} def
0707070014230001731006440057030057030000010032400522627501200003400000000421post.src/devpost/charlib/14 /build_14 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(1) show
rmoveto
optsize R f
(\244) show
f
(4) show
optsize ofont f
} def
0707070014230001741006440057030057030000010032410522627501200003400000000421post.src/devpost/charlib/34 /build_34 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(3) show
rmoveto
optsize R f
(\244) show
f
(4) show
optsize ofont f
} def
0707070014230005521006440057030057030000010073200522627501300003400000014726post.src/devpost/charlib/LV %
% PostScript 12 and 8 line logos - vertical configuration. Switch occurs
% automatically below point size 29. Code from Matthijs Melchior.
%
/LOGO-dict-mm where not {
64 dict /LOGO-dict-mm exch def
}{pop} ifelse
LOGO-dict-mm begin % initialize dictionary
/globesetup {
/r exch def
/N exch def
/d 2 N r mul N 1 sub add div def
/h d r mul def
} def
/mkabs {
/yp exch def
/xl exch def
dup dup 0 get xl mul 0 exch put
dup dup 1 get h mul yp add 1 exch put
dup dup 2 get xl mul 2 exch put
dup dup 3 get h mul yp add 3 exch put
dup dup 4 get xl mul 4 exch put
dup dup 5 get h mul yp add 5 exch put
} def
/topsegment {
/n exch def
/y n r mul n .5 add add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 180 a sub /arc load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/botsegment {
/n exch 1 add def
/y n r mul n .5 sub add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 540 a sub /arcn load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/segment {
/n exch def
/dh exch 1 exch sub 2 div def
/ylb n r mul n 0.5 add add d mul def
/ylt ylb h add def
/yrb ylb h dh mul add def
/yrt ylt h dh mul sub def
/alb ylb 1 ylb dup mul sub sqrt atan def
/alt ylt 1 ylt dup mul sub sqrt atan def
/arb yrb 1 yrb dup mul sub sqrt atan 180 exch sub def
/art yrt 1 yrt dup mul sub sqrt atan 180 exch sub def
/xlb alb cos def
/xlt alt cos def
/xrb arb cos def
/xrt art cos def
/c4 exch xrb abs ylb mkabs def
/ly2 exch h mul ylb add def
/lx2 exch xrb abs mul def
/c3 exch xrb abs ylb mkabs def
/c2 exch xrt abs ylt mkabs def
/ly1 exch h mul ylt add def
/lx1 exch xrt abs mul def
/c1 exch xrt abs ylt mkabs def
xlb ylb /moveto load
0 0 1 alb alt /arc load
c2 4 get c2 5 get /lineto load
c2 2 get c2 3 get
c2 0 get c2 1 get
lx1 ly1 /curveto load
c1 4 get c1 5 get /lineto load
c1 2 get c1 3 get
c1 0 get c1 1 get
xrt yrt /curveto load
0 0 1 art arb /arc load
c3 aload pop /curveto load
lx2 ly2 /lineto load
c4 aload pop /curveto load
/closepath load
} def
8 2.5 globesetup
/globe8 [
/newpath load
[ -.9 .1 -.6 .2 -.5 .2 ] -.5 .2 [ -.4 .2 .0 .0 .4 .0 ] 3 topsegment
[ -.9 -.35 -.85 -.35 -.8 -.35 ] -.1 -.35 [ .1 -.35 .3 .0 .5 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] -.1 .35 [ .1 .35 .4 .0 .55 .0 ] .55 2 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .05 -.35 [ .2 -.35 .4 .0 .55 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .05 .35 [ .2 .35 .45 .0 .6 .0 ] .7 1 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .0 -.35 [ .15 -.35 .4 .0 .6 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .0 .35 [ .15 .35 .4 .0 .6 .0 ] .7 0 segment
[ -.7 -.35 -.65 -.35 -.6 -.35 ] -.1 -.35 [ .05 -.35 .35 .0 .55 .0 ]
[ -.7 .35 -.65 .35 -.6 .35 ] -.1 .35 [ .05 .35 .25 .0 .4 .0 ] .8 -1 segment
[ -.65 -.2 -.55 -.2 -.45 -.2 ] -.3 -.2 [ -.2 -.2 .2 .0 .3 .0 ]
[ -.65 .1 -.55 .1 -.45 .1 ] -.45 .1 [ -.3 .1 -.1 .0 .0 .0 ] .96 -2 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -4 botsegment
] cvx def
12 3 globesetup
/globe12 [
/newpath load
[ -.8 .2 -.7 .25 -.5 .25 ] -.4 .25 [ -.2 .25 .0 .0 .2 .0 ] 5 topsegment
[ -.7 -.35 -.7 -.35 -.6 -.35 ] -.3 -.35 [ -.1 -.35 .3 .0 .55 .0 ]
[ -.7 .35 -.7 .35 -.6 .35 ] -.25 .35 [ -.05 .35 .4 .0 .55 .0 ] .6 4 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] -.1 -.35 [ .1 -.35 .4 .0 .5 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] -.1 .35 [ .1 .35 .4 .0 .5 .0 ] .7 3 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] .0 .35 [ .15 .35 .4 .0 .5 .0 ] .8 2 segment
[ -.75 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .2 -.35 .4 .0 .5 .0 ]
[ -.75 .35 -.7 .35 -.6 .35 ] .0 .35 [ .2 .35 .45 .0 .55 .0 ] .9 1 segment
[ -.7 -.35 -.6 -.35 -.55 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.7 .35 -.6 .35 -.55 .35 ] .0 .35 [ .1 .35 .5 .0 .6 .0 ] .9 0 segment
] cvx
[
[ -.7 -.35 -.6 -.35 -.5 -.35 ] -.15 -.35 [ .0 -.35 .4 .0 .5 .0 ]
[ -.65 .35 -.55 .35 -.45 .35 ] -.15 .35 [ .0 .35 .35 .0 .45 .0 ] .9 -1 segment
[ -.8 -.1 -.5 -.3 -.4 -.3 ] -.2 -.3 [ .0 -.3 .3 .0 .4 .0 ]
[ -.8 .1 -.5 .3 -.4 .3 ] -.2 .3 [ .0 .3 .2 .0 .3 .0 ] 1 -2 segment
[ -.7 -.1 -.5 -.15 -.4 -.15 ] -.3 -.15 [ -.2 -.15 .0 .0 .2 .0 ]
[ -.7 .05 -.5 .1 -.4 .1 ] -.4 .1 [ -.3 .1 .0 .0 .2 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -4 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -5 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -6 botsegment
] cvx
4 array cvx
dup 0 5 -1 roll put
dup 1 /exec load put
dup 2 4 -1 roll put
dup 3 /exec load put
def
/l { lineto } def
/rl { rlineto } def
/m { moveto } def
/rm { rmoveto } def
/C { closepath } def
/c { curveto } def
/rc { rcurveto } def
/T { m 0 29 rl -9.5 0 rl 0 7 rl 29 0 rl 0 -7 rl -9.5 0 rl 0 -29 rl C } def
/ATT {
newpath
1 36 div dup scale
0 0 m 12 36 rl 8 0 rl -11 -36 rl C
25 0 m -11 36 rl 8 0 rl 12 -36 rl C
10 7 m 0 7 rl 14 0 rl 0 -7 rl C
36 0 T
80 6 m -3 0 -5 1.2 -6 2 rc -12 10 rl -2.4 2 -2.7 6 0 6 rc
1 0 2 -1 2 -2 rc 0 -4 rl 7 0 rl 0 4 rl
0 5 -3 7 -9 7 rc -6 0 -9 -3 -9 -7 rc
0 -2 0 -3.6 2 -6 rc 12 -10 rl 6 -5 10 -6 13 -6 rc C
71 18 m 0 -6 rl 0 -5 -3 -7 -7 -7 rc -3 0 -5 2 -5 4 rc 0 1 0 3 2 4 rc
-4 5 rl -4 -2 -6 -6 -6 -9 rc 0 -7 6 -10 13 -10 rc
9 0 14 6 14 11 rc 0 8 rl C
82 0 T
36 dup scale
} def
end
/build_LV { % standard ATT logo
LOGO-dict-mm begin
/w exch def
ptsize 29 lt % select globe, # lines depends on point size
{ /globe /globe8 load def }
{ /globe /globe12 load def } ifelse
gsave
currentpoint translate
size 2 div dup scale
gsave
1.02 1 transform round exch round exch itransform
translate
globe fill
grestore
gsave
%2.15 .62 translate
-0.1 -1.0 translate
.78 dup scale
ATT fill
grestore
grestore
end
} def
0707070014230005531006440057030057030000010073270522627501300003400000000075post.src/devpost/charlib/Fi /build_Fi {
pop
size .05 mul neg 0 (ffi) ashow
} def
0707070014230005541006440057030057030000010041550522627501300003400000000075post.src/devpost/charlib/Fl /build_Fl {
pop
size .05 mul neg 0 (ffl) ashow
} def
0707070014230005551006440057030057030000010110620522627501300003400000012536post.src/devpost/charlib/L1 /LOGO-dict-mm dup where not
{ dup 64 dict def currentdict } if
exch get
begin
/globesetup {
/r exch def
/N exch def
/d 2 N r mul N 1 sub add div def
/h d r mul def
} def
/mkabs {
/yp exch def
/xl exch def
dup dup 0 get xl mul 0 exch put
dup dup 1 get h mul yp add 1 exch put
dup dup 2 get xl mul 2 exch put
dup dup 3 get h mul yp add 3 exch put
dup dup 4 get xl mul 4 exch put
dup dup 5 get h mul yp add 5 exch put
} def
/topsegment {
/n exch def
/y n r mul n .5 add add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 180 a sub /arc load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/botsegment {
/n exch 1 add def
/y n r mul n .5 sub add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 540 a sub /arcn load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/segment {
/n exch def
/dh exch 1 exch sub 2 div def
/ylb n r mul n 0.5 add add d mul def
/ylt ylb h add def
/yrb ylb h dh mul add def
/yrt ylt h dh mul sub def
/alb ylb 1 ylb dup mul sub sqrt atan def
/alt ylt 1 ylt dup mul sub sqrt atan def
/arb yrb 1 yrb dup mul sub sqrt atan 180 exch sub def
/art yrt 1 yrt dup mul sub sqrt atan 180 exch sub def
/xlb alb cos def
/xlt alt cos def
/xrb arb cos def
/xrt art cos def
/c4 exch xrb abs ylb mkabs def
/ly2 exch h mul ylb add def
/lx2 exch xrb abs mul def
/c3 exch xrb abs ylb mkabs def
/c2 exch xrt abs ylt mkabs def
/ly1 exch h mul ylt add def
/lx1 exch xrt abs mul def
/c1 exch xrt abs ylt mkabs def
xlb ylb /moveto load
0 0 1 alb alt /arc load
c2 4 get c2 5 get /lineto load
c2 2 get c2 3 get
c2 0 get c2 1 get
lx1 ly1 /curveto load
c1 4 get c1 5 get /lineto load
c1 2 get c1 3 get
c1 0 get c1 1 get
xrt yrt /curveto load
0 0 1 art arb /arc load
c3 aload pop /curveto load
lx2 ly2 /lineto load
c4 aload pop /curveto load
/closepath load
} def
8 2.5 globesetup
/globe8 [
/newpath load
[ -.9 .1 -.6 .2 -.5 .2 ] -.5 .2 [ -.4 .2 .0 .0 .4 .0 ] 3 topsegment
[ -.9 -.35 -.85 -.35 -.8 -.35 ] -.1 -.35 [ .1 -.35 .3 .0 .5 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] -.1 .35 [ .1 .35 .4 .0 .55 .0 ] .55 2 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .05 -.35 [ .2 -.35 .4 .0 .55 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .05 .35 [ .2 .35 .45 .0 .6 .0 ] .7 1 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .0 -.35 [ .15 -.35 .4 .0 .6 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .0 .35 [ .15 .35 .4 .0 .6 .0 ] .7 0 segment
[ -.7 -.35 -.65 -.35 -.6 -.35 ] -.1 -.35 [ .05 -.35 .35 .0 .55 .0 ]
[ -.7 .35 -.65 .35 -.6 .35 ] -.1 .35 [ .05 .35 .25 .0 .4 .0 ] .8 -1 segment
[ -.65 -.2 -.55 -.2 -.45 -.2 ] -.3 -.2 [ -.2 -.2 .2 .0 .3 .0 ]
[ -.65 .1 -.55 .1 -.45 .1 ] -.45 .1 [ -.3 .1 -.1 .0 .0 .0 ] .96 -2 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -4 botsegment
] cvx def
12 3 globesetup
/globe12 [
/newpath load
[ -.8 .2 -.7 .25 -.5 .25 ] -.4 .25 [ -.2 .25 .0 .0 .2 .0 ] 5 topsegment
[ -.7 -.35 -.7 -.35 -.6 -.35 ] -.3 -.35 [ -.1 -.35 .3 .0 .55 .0 ]
[ -.7 .35 -.7 .35 -.6 .35 ] -.25 .35 [ -.05 .35 .4 .0 .55 .0 ] .6 4 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] -.1 -.35 [ .1 -.35 .4 .0 .5 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] -.1 .35 [ .1 .35 .4 .0 .5 .0 ] .7 3 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] .0 .35 [ .15 .35 .4 .0 .5 .0 ] .8 2 segment
[ -.75 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .2 -.35 .4 .0 .5 .0 ]
[ -.75 .35 -.7 .35 -.6 .35 ] .0 .35 [ .2 .35 .45 .0 .55 .0 ] .9 1 segment
[ -.7 -.35 -.6 -.35 -.55 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.7 .35 -.6 .35 -.55 .35 ] .0 .35 [ .1 .35 .5 .0 .6 .0 ] .9 0 segment
] cvx
[
[ -.7 -.35 -.6 -.35 -.5 -.35 ] -.15 -.35 [ .0 -.35 .4 .0 .5 .0 ]
[ -.65 .35 -.55 .35 -.45 .35 ] -.15 .35 [ .0 .35 .35 .0 .45 .0 ] .9 -1 segment
[ -.8 -.1 -.5 -.3 -.4 -.3 ] -.2 -.3 [ .0 -.3 .3 .0 .4 .0 ]
[ -.8 .1 -.5 .3 -.4 .3 ] -.2 .3 [ .0 .3 .2 .0 .3 .0 ] 1 -2 segment
[ -.7 -.1 -.5 -.15 -.4 -.15 ] -.3 -.15 [ -.2 -.15 .0 .0 .2 .0 ]
[ -.7 .05 -.5 .1 -.4 .1 ] -.4 .1 [ -.3 .1 .0 .0 .2 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -4 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -5 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -6 botsegment
] cvx
4 array cvx
dup 0 5 -1 roll put
dup 1 /exec load put
dup 2 4 -1 roll put
dup 3 /exec load put
def
end
/build_L1 {
pop
LOGO-dict-mm begin
ptsize 29 lt
{ /globe /globe8 load def }
{ /globe /globe12 load def } ifelse
gsave
currentpoint translate
size 2 div dup scale
1.02 1 transform round exch round exch itransform
translate
globe fill
grestore
end
} def
0707070014230005561006440057030057030000010073400522627501300003400000014673post.src/devpost/charlib/LH %
% PostScript 12 and 8 line logos - horizontal configuration. Switch occurs
% automatically below point size 29. Code from Matthijs Melchior.
%
/LOGO-dict-mm where not {
64 dict /LOGO-dict-mm exch def
}{pop} ifelse
LOGO-dict-mm begin % initialize dictionary
/globesetup {
/r exch def
/N exch def
/d 2 N r mul N 1 sub add div def
/h d r mul def
} def
/mkabs {
/yp exch def
/xl exch def
dup dup 0 get xl mul 0 exch put
dup dup 1 get h mul yp add 1 exch put
dup dup 2 get xl mul 2 exch put
dup dup 3 get h mul yp add 3 exch put
dup dup 4 get xl mul 4 exch put
dup dup 5 get h mul yp add 5 exch put
} def
/topsegment {
/n exch def
/y n r mul n .5 add add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 180 a sub /arc load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/botsegment {
/n exch 1 add def
/y n r mul n .5 sub add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 540 a sub /arcn load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/segment {
/n exch def
/dh exch 1 exch sub 2 div def
/ylb n r mul n 0.5 add add d mul def
/ylt ylb h add def
/yrb ylb h dh mul add def
/yrt ylt h dh mul sub def
/alb ylb 1 ylb dup mul sub sqrt atan def
/alt ylt 1 ylt dup mul sub sqrt atan def
/arb yrb 1 yrb dup mul sub sqrt atan 180 exch sub def
/art yrt 1 yrt dup mul sub sqrt atan 180 exch sub def
/xlb alb cos def
/xlt alt cos def
/xrb arb cos def
/xrt art cos def
/c4 exch xrb abs ylb mkabs def
/ly2 exch h mul ylb add def
/lx2 exch xrb abs mul def
/c3 exch xrb abs ylb mkabs def
/c2 exch xrt abs ylt mkabs def
/ly1 exch h mul ylt add def
/lx1 exch xrt abs mul def
/c1 exch xrt abs ylt mkabs def
xlb ylb /moveto load
0 0 1 alb alt /arc load
c2 4 get c2 5 get /lineto load
c2 2 get c2 3 get
c2 0 get c2 1 get
lx1 ly1 /curveto load
c1 4 get c1 5 get /lineto load
c1 2 get c1 3 get
c1 0 get c1 1 get
xrt yrt /curveto load
0 0 1 art arb /arc load
c3 aload pop /curveto load
lx2 ly2 /lineto load
c4 aload pop /curveto load
/closepath load
} def
8 2.5 globesetup
/globe8 [
/newpath load
[ -.9 .1 -.6 .2 -.5 .2 ] -.5 .2 [ -.4 .2 .0 .0 .4 .0 ] 3 topsegment
[ -.9 -.35 -.85 -.35 -.8 -.35 ] -.1 -.35 [ .1 -.35 .3 .0 .5 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] -.1 .35 [ .1 .35 .4 .0 .55 .0 ] .55 2 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .05 -.35 [ .2 -.35 .4 .0 .55 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .05 .35 [ .2 .35 .45 .0 .6 .0 ] .7 1 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .0 -.35 [ .15 -.35 .4 .0 .6 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .0 .35 [ .15 .35 .4 .0 .6 .0 ] .7 0 segment
[ -.7 -.35 -.65 -.35 -.6 -.35 ] -.1 -.35 [ .05 -.35 .35 .0 .55 .0 ]
[ -.7 .35 -.65 .35 -.6 .35 ] -.1 .35 [ .05 .35 .25 .0 .4 .0 ] .8 -1 segment
[ -.65 -.2 -.55 -.2 -.45 -.2 ] -.3 -.2 [ -.2 -.2 .2 .0 .3 .0 ]
[ -.65 .1 -.55 .1 -.45 .1 ] -.45 .1 [ -.3 .1 -.1 .0 .0 .0 ] .96 -2 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -4 botsegment
] cvx def
12 3 globesetup
/globe12 [
/newpath load
[ -.8 .2 -.7 .25 -.5 .25 ] -.4 .25 [ -.2 .25 .0 .0 .2 .0 ] 5 topsegment
[ -.7 -.35 -.7 -.35 -.6 -.35 ] -.3 -.35 [ -.1 -.35 .3 .0 .55 .0 ]
[ -.7 .35 -.7 .35 -.6 .35 ] -.25 .35 [ -.05 .35 .4 .0 .55 .0 ] .6 4 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] -.1 -.35 [ .1 -.35 .4 .0 .5 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] -.1 .35 [ .1 .35 .4 .0 .5 .0 ] .7 3 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] .0 .35 [ .15 .35 .4 .0 .5 .0 ] .8 2 segment
[ -.75 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .2 -.35 .4 .0 .5 .0 ]
[ -.75 .35 -.7 .35 -.6 .35 ] .0 .35 [ .2 .35 .45 .0 .55 .0 ] .9 1 segment
[ -.7 -.35 -.6 -.35 -.55 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.7 .35 -.6 .35 -.55 .35 ] .0 .35 [ .1 .35 .5 .0 .6 .0 ] .9 0 segment
] cvx
[
[ -.7 -.35 -.6 -.35 -.5 -.35 ] -.15 -.35 [ .0 -.35 .4 .0 .5 .0 ]
[ -.65 .35 -.55 .35 -.45 .35 ] -.15 .35 [ .0 .35 .35 .0 .45 .0 ] .9 -1 segment
[ -.8 -.1 -.5 -.3 -.4 -.3 ] -.2 -.3 [ .0 -.3 .3 .0 .4 .0 ]
[ -.8 .1 -.5 .3 -.4 .3 ] -.2 .3 [ .0 .3 .2 .0 .3 .0 ] 1 -2 segment
[ -.7 -.1 -.5 -.15 -.4 -.15 ] -.3 -.15 [ -.2 -.15 .0 .0 .2 .0 ]
[ -.7 .05 -.5 .1 -.4 .1 ] -.4 .1 [ -.3 .1 .0 .0 .2 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -4 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -5 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -6 botsegment
] cvx
4 array cvx
dup 0 5 -1 roll put
dup 1 /exec load put
dup 2 4 -1 roll put
dup 3 /exec load put
def
/l { lineto } def
/rl { rlineto } def
/m { moveto } def
/rm { rmoveto } def
/C { closepath } def
/c { curveto } def
/rc { rcurveto } def
/T { m 0 29 rl -9.5 0 rl 0 7 rl 29 0 rl 0 -7 rl -9.5 0 rl 0 -29 rl C } def
/ATT {
newpath
1 36 div dup scale
0 0 m 12 36 rl 8 0 rl -11 -36 rl C
25 0 m -11 36 rl 8 0 rl 12 -36 rl C
10 7 m 0 7 rl 14 0 rl 0 -7 rl C
36 0 T
80 6 m -3 0 -5 1.2 -6 2 rc -12 10 rl -2.4 2 -2.7 6 0 6 rc
1 0 2 -1 2 -2 rc 0 -4 rl 7 0 rl 0 4 rl
0 5 -3 7 -9 7 rc -6 0 -9 -3 -9 -7 rc
0 -2 0 -3.6 2 -6 rc 12 -10 rl 6 -5 10 -6 13 -6 rc C
71 18 m 0 -6 rl 0 -5 -3 -7 -7 -7 rc -3 0 -5 2 -5 4 rc 0 1 0 3 2 4 rc
-4 5 rl -4 -2 -6 -6 -6 -9 rc 0 -7 6 -10 13 -10 rc
9 0 14 6 14 11 rc 0 8 rl C
82 0 T
36 dup scale
} def
end
/build_LH { % standard ATT logo
LOGO-dict-mm begin
/w exch def
ptsize 29 lt % select globe, # lines depends on point size
{ /globe /globe8 load def }
{ /globe /globe12 load def } ifelse
gsave
currentpoint translate
size 2 div dup scale
gsave
1.02 1 transform round exch round exch itransform
translate
globe fill
grestore
gsave
2.15 .62 translate
.78 dup scale
ATT fill
grestore
grestore
end
} def
0707070014230005571006440057030057030000010041560522627501300004000000001173post.src/devpost/charlib/README Postscript definitions for special troff characters. File names are
the two character troff names. Each defines a PostScript procedure
that begins with build_ and ends with the character's name. The
build_?? procedure is called with the character width as it's only
argument. The .map files contain extra character data (e.g. image
data) that dpost downloads immediately after the build_?? call,
if the character's font table code field is 2 (rather than 1).
The following PostScript variables are available:
font current font
ptsize current point size
size actual font size - scaled up from ptsize
Don't overuse this stuff!
0707070014230005601006440057030057030000010041760522627501300003400000002631post.src/devpost/charlib/Sl /build_Sl {
pop
gsave
size .0022 mul dup scale
currentpoint translate
14 93 moveto
14 96 lineto
29 110 lineto
44 121 lineto
54 127 lineto
55 132 lineto
57 146 lineto
59 157 lineto
62 171 lineto
66 186 lineto
70 199 lineto
75 213 lineto
81 228 lineto
88 243 lineto
96 257 lineto
106 272 lineto
118 287 lineto
133 300 lineto
148 307 lineto
163 308 lineto
178 304 lineto
191 293 lineto
197 281 lineto
198 277 lineto
198 260 lineto
194 246 lineto
187 231 lineto
179 217 lineto
168 202 lineto
155 187 lineto
141 172 lineto
126 158 lineto
111 146 lineto
96 136 lineto
94 131 lineto
93 123 lineto
92 112 lineto
91 103 lineto
90 93 lineto
89 81 lineto
89 40 lineto
92 28 lineto
97 18 lineto
108 10 lineto
122 10 lineto
134 18 lineto
145 33 lineto
152 48 lineto
158 62 lineto
168 58 lineto
168 59 lineto
163 45 lineto
157 31 lineto
148 16 lineto
133 3 lineto
118 -1 lineto
103 0 lineto
88 5 lineto
73 18 lineto
64 31 lineto
58 46 lineto
55 59 lineto
53 73 lineto
52 111 lineto
37 101 lineto
22 86 lineto
14 93 lineto
97 152 moveto
97 153 lineto
99 166 lineto
101 178 lineto
103 190 lineto
106 205 lineto
109 218 lineto
113 232 lineto
118 246 lineto
124 261 lineto
132 275 lineto
144 290 lineto
157 298 lineto
171 298 lineto
181 291 lineto
186 283 lineto
187 279 lineto
187 264 lineto
186 260 lineto
181 246 lineto
174 233 lineto
165 218 lineto
155 204 lineto
142 190 lineto
127 175 lineto
112 162 lineto
97 152 lineto
eofill
grestore
} def
0707070014230005611006440057030057030000010073470522627501300003400000000264post.src/devpost/charlib/bx /build_bx {
pop
size 2 div /side exch def
currentpoint
newpath
moveto
0 side rlineto
side 0 rlineto
0 side neg rlineto
closepath
fill
} def
0707070014230005621006440057030057030000010044040522627501300003400000000221post.src/devpost/charlib/ci /build_ci {
pop
size 3 mul 8 div /rad exch def
currentpoint
newpath
rad add exch rad add exch rad 0 360 arc
stroke
} def
0707070014230005631006440057030057030000010044050522627501300003400000000074post.src/devpost/charlib/ff /build_ff {
pop
size .05 mul neg 0 (ff) ashow
} def
0707070014230005641006440057030057030000010073050522627501300003400000001716post.src/devpost/charlib/lc %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_lc {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 0 get bvbbox 1 get moveto
bvbbox 0 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul add dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 3 get moveto
bvbbox 4 get dup dup
8 mul 0 rlineto
0 exch neg rlineto
8 mul neg 0 rlineto
closepath clip eofill
grestore
} def
0707070014230005651006440057030057030000010073060522627501300003400000001712post.src/devpost/charlib/lf %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_lf {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 0 get bvbbox 1 get moveto
bvbbox 0 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul add dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 1 get moveto
bvbbox 4 get dup dup
8 mul 0 rlineto
0 exch rlineto
8 mul neg 0 rlineto
closepath clip eofill
grestore
} def
0707070014230005661006440057030057030000010073600522627501300003400000004412post.src/devpost/charlib/lh /build_lh {
pop
gsave
size .0022 mul dup scale
currentpoint translate
16 177 moveto
16 188 lineto
21 193 lineto
30 193 lineto
34 189 lineto
36 183 lineto
36 180 lineto
34 174 lineto
27 170 lineto
19 172 lineto
16 177 lineto
stroke
38 194 moveto
38 196 lineto
53 199 lineto
68 201 lineto
83 202 lineto
98 203 lineto
113 204 lineto
128 204 lineto
143 205 lineto
158 205 lineto
173 205 lineto
188 204 lineto
203 203 lineto
218 202 lineto
233 200 lineto
248 198 lineto
263 196 lineto
278 194 lineto
293 190 lineto
308 186 lineto
323 181 lineto
338 176 lineto
353 168 lineto
361 162 lineto
364 153 lineto
366 138 lineto
367 126 lineto
368 106 lineto
369 80 lineto
369 74 lineto
368 60 lineto
367 54 lineto
362 43 lineto
348 34 lineto
333 28 lineto
318 25 lineto
303 26 lineto
288 29 lineto
273 31 lineto
258 32 lineto
243 32 lineto
228 30 lineto
213 27 lineto
198 24 lineto
183 23 lineto
168 23 lineto
153 27 lineto
148 34 lineto
148 47 lineto
153 54 lineto
168 58 lineto
183 58 lineto
198 58 lineto
213 59 lineto
226 60 lineto
228 62 lineto
228 67 lineto
223 71 lineto
208 71 lineto
193 70 lineto
178 70 lineto
163 70 lineto
148 70 lineto
133 71 lineto
123 76 lineto
120 84 lineto
120 91 lineto
122 98 lineto
129 104 lineto
144 106 lineto
159 107 lineto
174 107 lineto
189 107 lineto
202 108 lineto
204 110 lineto
204 117 lineto
201 119 lineto
186 119 lineto
171 119 lineto
156 119 lineto
141 119 lineto
126 119 lineto
111 121 lineto
103 128 lineto
101 137 lineto
101 142 lineto
103 150 lineto
111 158 lineto
126 161 lineto
141 161 lineto
156 162 lineto
171 163 lineto
186 163 lineto
191 165 lineto
192 167 lineto
192 171 lineto
190 174 lineto
176 175 lineto
161 175 lineto
146 175 lineto
131 174 lineto
116 174 lineto
101 174 lineto
86 173 lineto
71 172 lineto
56 171 lineto
41 171 lineto
41 174 lineto
43 178 lineto
43 187 lineto
38 194 lineto
stroke
373 169 moveto
373 176 lineto
375 182 lineto
386 190 lineto
401 193 lineto
408 191 lineto
411 185 lineto
412 181 lineto
414 167 lineto
415 158 lineto
416 144 lineto
417 128 lineto
418 110 lineto
418 60 lineto
417 45 lineto
415 37 lineto
409 34 lineto
394 31 lineto
381 35 lineto
379 42 lineto
379 52 lineto
380 67 lineto
380 77 lineto
379 77 lineto
378 106 lineto
377 121 lineto
376 133 lineto
375 147 lineto
374 158 lineto
373 169 lineto
stroke
grestore
} def
0707070014230005671006440057030057030000010073070522627501300003400000000222post.src/devpost/charlib/ob /build_ob {
pop
size 3 mul 16 div /rad exch def
currentpoint
newpath
rad add exch rad add exch rad 0 360 arc
stroke
} def
0707070014230005701006440057030057030000010073630522627501300003400000001716post.src/devpost/charlib/rc %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_rc {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 2 get bvbbox 1 get moveto
bvbbox 2 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul sub dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 3 get moveto
bvbbox 4 get dup dup
8 mul neg 0 rlineto
0 exch neg rlineto
8 mul 0 rlineto
closepath clip eofill
grestore
} def
0707070014230005711006440057030057030000010073640522627501300003400000001712post.src/devpost/charlib/rf %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_rf {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 2 get bvbbox 1 get moveto
bvbbox 2 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul sub dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 1 get moveto
bvbbox 4 get dup dup
8 mul neg 0 rlineto
0 exch rlineto
8 mul 0 rlineto
closepath clip eofill
grestore
} def
0707070014230005721006440057030057030000010073650522627501300003400000004171post.src/devpost/charlib/rh /build_rh {
pop
gsave
size .0022 mul dup scale
currentpoint translate
15 66 moveto
15 86 lineto
16 131 lineto
17 146 lineto
18 158 lineto
19 167 lineto
21 181 lineto
24 190 lineto
34 193 lineto
49 189 lineto
58 182 lineto
60 177 lineto
60 166 lineto
59 156 lineto
58 143 lineto
57 130 lineto
56 117 lineto
55 102 lineto
54 42 lineto
53 39 lineto
49 35 lineto
34 34 lineto
19 39 lineto
16 47 lineto
15 66 lineto
stroke
65 60 moveto
65 111 lineto
66 127 lineto
67 139 lineto
69 153 lineto
72 163 lineto
83 171 lineto
98 177 lineto
113 182 lineto
128 187 lineto
143 190 lineto
158 194 lineto
173 196 lineto
188 199 lineto
203 201 lineto
218 203 lineto
233 205 lineto
248 205 lineto
263 206 lineto
278 206 lineto
293 206 lineto
308 206 lineto
323 206 lineto
338 205 lineto
353 203 lineto
368 202 lineto
383 200 lineto
394 197 lineto
389 190 lineto
389 180 lineto
391 176 lineto
391 173 lineto
380 173 lineto
365 173 lineto
350 174 lineto
335 175 lineto
320 176 lineto
305 176 lineto
290 176 lineto
275 177 lineto
260 177 lineto
245 177 lineto
240 173 lineto
240 170 lineto
245 165 lineto
260 164 lineto
275 164 lineto
290 164 lineto
305 163 lineto
320 160 lineto
327 155 lineto
330 149 lineto
330 134 lineto
328 129 lineto
323 124 lineto
309 121 lineto
294 121 lineto
279 121 lineto
264 121 lineto
249 121 lineto
234 121 lineto
228 118 lineto
228 112 lineto
234 109 lineto
249 109 lineto
264 109 lineto
279 108 lineto
294 108 lineto
306 104 lineto
311 97 lineto
312 91 lineto
312 88 lineto
311 82 lineto
305 74 lineto
290 72 lineto
275 72 lineto
260 72 lineto
245 73 lineto
230 73 lineto
215 73 lineto
205 70 lineto
205 63 lineto
217 60 lineto
232 60 lineto
247 60 lineto
262 60 lineto
277 57 lineto
283 52 lineto
285 44 lineto
285 41 lineto
284 35 lineto
280 30 lineto
268 26 lineto
253 25 lineto
238 26 lineto
223 28 lineto
208 31 lineto
193 33 lineto
178 34 lineto
163 33 lineto
148 31 lineto
133 28 lineto
118 27 lineto
103 28 lineto
88 34 lineto
73 43 lineto
67 52 lineto
65 60 lineto
stroke
396 180 moveto
396 188 lineto
399 194 lineto
410 196 lineto
416 190 lineto
416 180 lineto
415 177 lineto
411 173 lineto
400 173 lineto
396 180 lineto
stroke
grestore
} def
0707070014230005731006440057030057030000010074000522627501300003400000000320post.src/devpost/charlib/sq /build_sq {
pop
size 2 div /side exch def
currentpoint
newpath
moveto
0 side rlineto
side 0 rlineto
0 side neg rlineto
closepath
font B eq {fill} {stroke} ifelse
} def
0707070014230005741006440057030057030000010074010522627501400003400000000130post.src/devpost/charlib/~= /build_~= {
pop
(\176) stringwidth pop neg size -.15 mul (\176\055) ashow
} def
0707070014230005751006440057030057030000010074020522627501400003400000000327post.src/devpost/charlib/RC /build_RC {
pop
size 4 div /side exch def
currentpoint
newpath
moveto
0 side 1.5 mul rmoveto
0 side rlineto
side 2.5 mul 0 rlineto
0 side neg rlineto
closepath
fill
} def
0707070014230005761006440057030057030000010074030522627501400003400000001051post.src/devpost/charlib/DG %
% UMDS danger sign - needs to be cleaned up!
%
/build_DG {
/x0 1.5 6 div 72 mul def % triangle length
pop
gsave
currentpoint translate
1 scaling div ptsize 10 div mul dup scale
2 setlinewidth
0 setlinecap
newpath
0 0 moveto
x0 0 lineto
x0 2 div x0 3 sqrt 2 div mul lineto
closepath fill
1 setgray
/Helvetica-Bold findfont 12 scalefont setfont
0 0 moveto
(!) false charpath pathbbox
exch 4 -1 roll add 2 div x0 2 div exch sub 0 moveto
exch sub x0 3 sqrt 2 div mul exch sub 3 div 0 exch rmoveto
(!) show
grestore
} def
0707070014230005771006440057030057030000010074040522627501400003400000000735post.src/devpost/charlib/PC %
% UMDS pencil - needs to be cleaned up.
%
/build_PC {
pop
gsave
currentpoint translate
1 scaling div ptsize 10 div mul dup scale
newpath
0 setlinecap
1 setlinejoin
2 setlinewidth
0 1 moveto 12 0 rlineto stroke
0 5 moveto 12 0 rlineto stroke
0 9 moveto 12 0 rlineto stroke
1 setlinewidth
12 .5 moveto 21.27362 5 lineto 12 9.5 lineto stroke
21.27362 5 moveto
.4 9.27362 mul neg .4 4 mul rlineto
0 .8 4 mul neg rlineto
closepath fill
grestore
} def
0707070014230006001006440057030057030000010074050522627501400003400000004404post.src/devpost/charlib/lH /build_lH {
pop
gsave
size .0022 mul dup scale
currentpoint translate
16 177 moveto
16 188 lineto
21 193 lineto
30 193 lineto
34 189 lineto
36 183 lineto
36 180 lineto
34 174 lineto
27 170 lineto
19 172 lineto
16 177 lineto
fill
38 194 moveto
38 196 lineto
53 199 lineto
68 201 lineto
83 202 lineto
98 203 lineto
113 204 lineto
128 204 lineto
143 205 lineto
158 205 lineto
173 205 lineto
188 204 lineto
203 203 lineto
218 202 lineto
233 200 lineto
248 198 lineto
263 196 lineto
278 194 lineto
293 190 lineto
308 186 lineto
323 181 lineto
338 176 lineto
353 168 lineto
361 162 lineto
364 153 lineto
366 138 lineto
367 126 lineto
368 106 lineto
369 80 lineto
369 74 lineto
368 60 lineto
367 54 lineto
362 43 lineto
348 34 lineto
333 28 lineto
318 25 lineto
303 26 lineto
288 29 lineto
273 31 lineto
258 32 lineto
243 32 lineto
228 30 lineto
213 27 lineto
198 24 lineto
183 23 lineto
168 23 lineto
153 27 lineto
148 34 lineto
148 47 lineto
153 54 lineto
168 58 lineto
183 58 lineto
198 58 lineto
213 59 lineto
226 60 lineto
228 62 lineto
228 67 lineto
223 71 lineto
208 71 lineto
193 70 lineto
178 70 lineto
163 70 lineto
148 70 lineto
133 71 lineto
123 76 lineto
120 84 lineto
120 91 lineto
122 98 lineto
129 104 lineto
144 106 lineto
159 107 lineto
174 107 lineto
189 107 lineto
202 108 lineto
204 110 lineto
204 117 lineto
201 119 lineto
186 119 lineto
171 119 lineto
156 119 lineto
141 119 lineto
126 119 lineto
111 121 lineto
103 128 lineto
101 137 lineto
101 142 lineto
103 150 lineto
111 158 lineto
126 161 lineto
141 161 lineto
156 162 lineto
171 163 lineto
186 163 lineto
191 165 lineto
192 167 lineto
192 171 lineto
190 174 lineto
176 175 lineto
161 175 lineto
146 175 lineto
131 174 lineto
116 174 lineto
101 174 lineto
86 173 lineto
71 172 lineto
56 171 lineto
41 171 lineto
41 174 lineto
43 178 lineto
43 187 lineto
38 194 lineto
fill
373 169 moveto
373 176 lineto
375 182 lineto
386 190 lineto
401 193 lineto
408 191 lineto
411 185 lineto
412 181 lineto
414 167 lineto
415 158 lineto
416 144 lineto
417 128 lineto
418 110 lineto
418 60 lineto
417 45 lineto
415 37 lineto
409 34 lineto
394 31 lineto
381 35 lineto
379 42 lineto
379 52 lineto
380 67 lineto
380 77 lineto
379 77 lineto
378 106 lineto
377 121 lineto
376 133 lineto
375 147 lineto
374 158 lineto
373 169 lineto
fill
grestore
} def
0707070014230006011006440057030057030000010074200522627501400003400000004163post.src/devpost/charlib/rH /build_rH {
pop
gsave
size .0022 mul dup scale
currentpoint translate
15 66 moveto
15 86 lineto
16 131 lineto
17 146 lineto
18 158 lineto
19 167 lineto
21 181 lineto
24 190 lineto
34 193 lineto
49 189 lineto
58 182 lineto
60 177 lineto
60 166 lineto
59 156 lineto
58 143 lineto
57 130 lineto
56 117 lineto
55 102 lineto
54 42 lineto
53 39 lineto
49 35 lineto
34 34 lineto
19 39 lineto
16 47 lineto
15 66 lineto
fill
65 60 moveto
65 111 lineto
66 127 lineto
67 139 lineto
69 153 lineto
72 163 lineto
83 171 lineto
98 177 lineto
113 182 lineto
128 187 lineto
143 190 lineto
158 194 lineto
173 196 lineto
188 199 lineto
203 201 lineto
218 203 lineto
233 205 lineto
248 205 lineto
263 206 lineto
278 206 lineto
293 206 lineto
308 206 lineto
323 206 lineto
338 205 lineto
353 203 lineto
368 202 lineto
383 200 lineto
394 197 lineto
389 190 lineto
389 180 lineto
391 176 lineto
391 173 lineto
380 173 lineto
365 173 lineto
350 174 lineto
335 175 lineto
320 176 lineto
305 176 lineto
290 176 lineto
275 177 lineto
260 177 lineto
245 177 lineto
240 173 lineto
240 170 lineto
245 165 lineto
260 164 lineto
275 164 lineto
290 164 lineto
305 163 lineto
320 160 lineto
327 155 lineto
330 149 lineto
330 134 lineto
328 129 lineto
323 124 lineto
309 121 lineto
294 121 lineto
279 121 lineto
264 121 lineto
249 121 lineto
234 121 lineto
228 118 lineto
228 112 lineto
234 109 lineto
249 109 lineto
264 109 lineto
279 108 lineto
294 108 lineto
306 104 lineto
311 97 lineto
312 91 lineto
312 88 lineto
311 82 lineto
305 74 lineto
290 72 lineto
275 72 lineto
260 72 lineto
245 73 lineto
230 73 lineto
215 73 lineto
205 70 lineto
205 63 lineto
217 60 lineto
232 60 lineto
247 60 lineto
262 60 lineto
277 57 lineto
283 52 lineto
285 44 lineto
285 41 lineto
284 35 lineto
280 30 lineto
268 26 lineto
253 25 lineto
238 26 lineto
223 28 lineto
208 31 lineto
193 33 lineto
178 34 lineto
163 33 lineto
148 31 lineto
133 28 lineto
118 27 lineto
103 28 lineto
88 34 lineto
73 43 lineto
67 52 lineto
65 60 lineto
fill
396 180 moveto
396 188 lineto
399 194 lineto
410 196 lineto
416 190 lineto
416 180 lineto
415 177 lineto
411 173 lineto
400 173 lineto
396 180 lineto
fill
grestore
} def
0707070014230006021006440057030057030000010074230522627501400004400000010521post.src/devpost/charlib/LH.example %
% An example logo character. Building the PostScript program that prints
% your company logo is not addressed here; we assume you already have
% such a program, that it's relatively simple, and that it prints the
% logo by itself on a page. What you'll find here are instructions for
% converting that logo program into a character that can be accessed by
% troff and dpost.
%
% Building a new charlib character involves some PostScript programming.
% We've tried to isolate parameters that you'll need to change (Xoffset,
% Yoffset, and Scaling), but we can't guarantee things will work properly
% with every logo program. PostScript is a complex language and subtle
% interactions between your logo program and what we've done here can
% cause problems.
%
% Tuning the new character is an iterative process. You may want to adjust
% the size of the logo (via Scaling), it's position relative to adjacent
% characters and the baseline (Xoffset and Yoffset), and the distance troff
% moves after printing the character (width field in file ../S1). The steps
% to follow are:
%
% 1: Create a simple troff test file for the new character. Something
% like,
%
% .sp 1i
% .ps 10
% size 10: \(LH
% .sp 1i
% .ps 18
% size 18: \(LH
% .sp 1i
% .ps 36
% size 36: \(LH
% .sp 1i
% .ps 10
% four logo characters: \(LH\(LH\(LH\(LH
%
% is sufficient. The test file can go anywhere.
%
% 2: Change into directory /usr/lib/font/devpost/charlib. All file
% pathnames will be relative to that directory.
%
% 3: Save a copy of the working LH logo file. Then replace LH with
% this file (i.e. LH.example). Changes described below should be
% be made in the new LH file (not in LH.example).
%
% 4: Your PostScript logo program will eventually replace whatever
% you find between the <<StartLogo>> and <<EndLogo>> comment lines
% in the PostScript build_LH procedure (below). What's there now
% prints an example logo that you can use until you understand the
% remaining steps.
%
% 5: Print your troff test file using (assuming your making changes
% in the devpost charlib directory),
%
% troff -Tpost testfile | dpost | lp ...
%
% 6: Adjust the logo positioning by changing the numbers assigned to
% Xoffset and Yoffset (below). Both are in units of 72 per inch.
% Positive offsets should move the logo to the right and up the
% page.
%
% 7: Adjust the logo size by changing the the number assigned to
% Scaling. Unitsize also controls scaling, but there's no good
% reason to change both Scaling and Unitsize.
%
% 8: Control the horizontal distance troff moves after printing the
% new LH character by changing the width (i.e. the number in the
% second column) assigned to LH in file ../S1. Character width
% adjustments should probably wait until you're satisfied with
% the Scaling set in step 7.
%
% 9: Back to step 5 until your satisfied with the output.
%
% The remaining steps are suggested but not required:
%
% 10: Delete PostScript comments in your new LH charlib file - comments
% start with % and go to the end of the line.
%
% 11: Update the width field assigned to LH in file ../shell.lib. The
% new width should reflect what's currently in your S1 font file.
%
% 12: Make a similiar set of changes in /usr/lib/font/devLatin1/charlib.
% You can use the devpost version of LH to devLatin1/charlib/LH,
% but changes to files devLatin1/S1 and devLatin1/shell.lib must be
% entered by hand.
%
/Logo_Dict 100 dict dup begin
/Xoffset 0 def % 72 dpi with positive to the right
/Yoffset 0 def % 72 dpi with positive up the page
/Scaling 1.0 def % adjust this number to change the size
/Unitsize 36 def % for point size scaling - leave it be
/showpage {} def
end def
/build_LH { % don't bind this procedure
Logo_Dict begin
gsave
/charwidth exch def
currentpoint translate
resolution 72 div dup scale
Xoffset Yoffset translate
Scaling Scaling scale
ptsize Unitsize div dup scale
%% Replace everything between the <<StartLogo>> and <<EndLogo>>
%% comment lines by the PostScript program that prints your
%% logo.
%% <<StartLogo>>
newpath
.5 .5 scale
0 0 moveto
100 0 lineto
100 100 lineto
closepath
.5 setgray
fill
0 setgray
10 10 translate
45 rotate
0 5 moveto
/Helvetica findfont 18 scalefont setfont
(Example Logo) show
%% <<EndLogo>>
grestore
end
} def
0707070014230006031006440057030057030000010074400522627501400003400000001725post.src/devpost/charlib/LA /LOGO-dict-mm dup where not
{ dup 64 dict def currentdict } if
exch get
begin
/l { lineto } def
/rl { rlineto } def
/m { moveto } def
/rm { rmoveto } def
/C { closepath } def
/c { curveto } def
/rc { rcurveto } def
/T { m 0 29 rl -9.5 0 rl 0 7 rl 29 0 rl 0 -7 rl -9.5 0 rl 0 -29 rl C } def
/ATT {
newpath
1 36 div dup scale
0 0 m 12 36 rl 8 0 rl -11 -36 rl C
25 0 m -11 36 rl 8 0 rl 12 -36 rl C
10 7 m 0 7 rl 14 0 rl 0 -7 rl C
36 0 T
80 6 m -3 0 -5 1.2 -6 2 rc -12 10 rl -2.4 2 -2.7 6 0 6 rc
1 0 2 -1 2 -2 rc 0 -4 rl 7 0 rl 0 4 rl
0 5 -3 7 -9 7 rc -6 0 -9 -3 -9 -7 rc
0 -2 0 -3.6 2 -6 rc 12 -10 rl 6 -5 10 -6 13 -6 rc C
71 18 m 0 -6 rl 0 -5 -3 -7 -7 -7 rc -3 0 -5 2 -5 4 rc 0 1 0 3 2 4 rc
-4 5 rl -4 -2 -6 -6 -6 -9 rc 0 -7 6 -10 13 -10 rc
9 0 14 6 14 11 rc 0 8 rl C
82 0 T
36 dup scale
} def
end
/build_LA {
pop
LOGO-dict-mm begin
gsave
currentpoint translate
size 2.56 div dup scale % was size 2.75 div dup scale
.02 0 translate
ATT fill
grestore
end
} def
0707070014231217221006440057030057030000010644200522627501400003300000035321post.src/devpost/shell.lib #
# Shell library - for building devpost tables. Original collection was
# built on a Version 47.0 PS-810.
#
RESOLUTION=720
UNITWIDTH=10
#
# BuiltinTables returns command lines that generate PostScript programs
# for building a typesetter description file and font width tables for
# a relatively standard collection of fonts. Use awk to select a command
# line or modify an existing command to build a width table for a new
# font.
#
BuiltinTables() {
cat <<-'//End of BuiltinTables'
Proportional R Times-Roman
Proportional I Times-Italic
Proportional B Times-Bold
Proportional BI Times-BoldItalic
Proportional AB AvantGarde-Demi
Proportional AI AvantGarde-BookOblique
Proportional AR AvantGarde-Book
Proportional AX AvantGarde-DemiOblique
Proportional H Helvetica
Proportional HB Helvetica-Bold
Proportional HI Helvetica-Oblique
Proportional HX Helvetica-BoldOblique
Proportional Hb Helvetica-Narrow-Bold
Proportional Hi Helvetica-Narrow-Oblique
Proportional Hr Helvetica-Narrow
Proportional Hx Helvetica-Narrow-BoldOblique
Proportional KB Bookman-Demi
Proportional KI Bookman-LightItalic
Proportional KR Bookman-Light
Proportional KX Bookman-DemiItalic
Proportional NB NewCenturySchlbk-Bold
Proportional NI NewCenturySchlbk-Italic
Proportional NR NewCenturySchlbk-Roman
Proportional NX NewCenturySchlbk-BoldItalic
Proportional PA Palatino-Roman
Proportional PB Palatino-Bold
Proportional PI Palatino-Italic
Proportional PX Palatino-BoldItalic
Proportional ZI ZapfChancery-MediumItalic
FixedWidth C Courier
FixedWidth CB Courier-Bold
FixedWidth CI Courier-Oblique
FixedWidth CO Courier
FixedWidth CW Courier
FixedWidth CX Courier-BoldOblique
Dingbats ZD ZapfDingbats
Greek GR Symbol
Symbol S Symbol
Special S1 Times-Roman
Description DESC ---
//End of BuiltinTables
}
#
# AllTables prints the complete list of builtin font names.
#
AllTables() {
BuiltinTables | awk '{print $2}'
}
#
# Charset functions generate keyword/value pairs (as PostScript objects)
# that describe the character set available in a font. The keyword is a
# PostScript string that represents troff's name for the character. The
# value is usually the literal name (i.e. begins with a /) assigned to
# the character in the PostScript font. The value can also be an integer
# or a PostScript string. An integer value is used as an index in the
# current font's Encoding array. A string value is returned to the host
# unchanged when the entry for the character is constructed. Entries that
# have (") as their value are synonyms for the preceeding character.
#
StandardCharset() {
cat <<-'//End of StandardCharset'
(!) /exclam
(") /quotedbl
(dq) (")
(#) /numbersign
($) /dollar
(%) /percent
(&) /ampersand
(') /quoteright
(\() /parenleft
(\)) /parenright
(*) /asterisk
(+) /plus
(,) /comma
(hy) /hyphen
(-) (") % synonym
(.) /period
(/) /slash
(0) /zero
(1) /one
(2) /two
(3) /three
(4) /four
(5) /five
(6) /six
(7) /seven
(8) /eight
(9) /nine
(:) /colon
(;) /semicolon
(<) /less
(=) /equal
(>) /greater
(?) /question
(@) /at
(A) /A
(B) /B
(C) /C
(D) /D
(E) /E
(F) /F
(G) /G
(H) /H
(I) /I
(J) /J
(K) /K
(L) /L
(M) /M
(N) /N
(O) /O
(P) /P
(Q) /Q
(R) /R
(S) /S
(T) /T
(U) /U
(V) /V
(W) /W
(X) /X
(Y) /Y
(Z) /Z
([) /bracketleft
(\\) /backslash
(bs) (")
(]) /bracketright
(^) /asciicircum
(_) /underscore
(`) /quoteleft
(a) /a
(b) /b
(c) /c
(d) /d
(e) /e
(f) /f
(g) /g
(h) /h
(i) /i
(j) /j
(k) /k
(l) /l
(m) /m
(n) /n
(o) /o
(p) /p
(q) /q
(r) /r
(s) /s
(t) /t
(u) /u
(v) /v
(w) /w
(x) /x
(y) /y
(z) /z
({) /braceleft
(|) /bar
(}) /braceright
(~) /asciitilde
(!!) /exclamdown
(ct) /cent
(ps) /sterling
(fr) /fraction
(yn) /yen
(fn) /florin
(sc) /section
(cr) /currency
(---) /quotesingle
(``) /quotedblleft
(---) /guillemotleft
(---) /guilsinglleft
(---) /guilsinglright
(fi) /fi
(fl) /fl
(en) /endash
(\\-) (")
(dg) /dagger
(dd) /daggerdbl
(---) /periodcentered
(pg) /paragraph
(---) /bullet
(---) /quotesinglbase
(---) /quotedblbase
('') /quotedblright
(---) /guillemotright
(---) /ellipsis
(---) /perthousand
(??) /questiondown
(ga) /grave
(\\`) (")
(aa) /acute
(\\') (")
(^a) /circumflex
(~a) /tilde
(-a) /macron
(Ua) /breve
(.a) /dotaccent
(:a) /dieresis
(oa) /ring
(,a) /cedilla
("a) /hungarumlaut
(Ca) /ogonek
(va) /caron
(em) /emdash
(---) /AE
(---) /ordfeminine
(---) /Lslash
(---) /Oslash
(---) /OE
(---) /ordmasculine
(---) /ae
(---) /dotlessi
(---) /lslash
(---) /oslash
(---) /oe
(---) /germandbls
//End of StandardCharset
}
SymbolCharset() {
cat <<-'//End of SymbolCharset'
(---) /exclam
(fa) /universal
(---) /numbersign
(te) /existential
(---) /percent
(---) /ampersand
(st) /suchthat
(---) /parenleft
(---) /parenright
(**) /asteriskmath
(pl) /plus
(---) /comma
(mi) /minus
(---) /period
(sl) /slash
(---) /zero
(---) /one
(---) /two
(---) /three
(---) /four
(---) /five
(---) /six
(---) /seven
(---) /eight
(---) /nine
(---) /colon
(---) /semicolon
(<) /less
(eq) /equal
(>) /greater
(---) /question
(cg) /congruent
(*A) /Alpha
(*B) /Beta
(*X) /Chi
(*D) /Delta
(*E) /Epsilon
(*F) /Phi
(*G) /Gamma
(*Y) /Eta
(*I) /Iota
(---) /theta1
(*K) /Kappa
(*L) /Lambda
(*M) /Mu
(*N) /Nu
(*O) /Omicron
(*P) /Pi
(*H) /Theta
(*R) /Rho
(*S) /Sigma
(*T) /Tau
(*U) /Upsilon
(ts) /sigma1
(*W) /Omega
(*C) /Xi
(*Q) /Psi
(*Z) /Zeta
(---) /bracketleft
(tf) /therefore
(---) /bracketright
(pp) /perpendicular
(ul) /underscore
(_) (") % synonym
(rn) /radicalex
(*a) /alpha
(*b) /beta
(*x) /chi
(*d) /delta
(*e) /epsilon
(*f) /phi
(*g) /gamma
(*y) /eta
(*i) /iota
(---) /phi1
(*k) /kappa
(*l) /lambda
(*m) /mu
(*n) /nu
(*o) /omicron
(*p) /pi
(*h) /theta
(*r) /rho
(*s) /sigma
(*t) /tau
(*u) /upsilon
(---) /omega1
(*w) /omega
(*c) /xi
(*q) /psi
(*z) /zeta
(---) /braceleft
(or) /bar
(---) /braceright
(ap) /similar
(---) /Upsilon1
(fm) /minute
(<=) /lessequal
(---) /fraction
(if) /infinity
(---) /florin
(---) /club
(---) /diamond
(---) /heart
(---) /spade
(ab) /arrowboth
(<-) /arrowleft
(ua) /arrowup
(->) /arrowright
(da) /arrowdown
(de) /degree
(+-) /plusminus
(---) /second
(>=) /greaterequal
(mu) /multiply
(pt) /proportional
(pd) /partialdiff
(bu) /bullet
(di) /divide
(!=) /notequal
(==) /equivalence
(~~) /approxequal
(el) /ellipsis
(av) /arrowvertex
(ah) /arrowhorizex
(CR) /carriagereturn
(af) /aleph
(If) /Ifraktur
(Rf) /Rfraktur
(ws) /weierstrass
(Ox) /circlemultiply
(O+) /circleplus
(es) /emptyset
(ca) /intersection
(cu) /union
(sp) /propersuperset
(ip) /reflexsuperset
(!b) /notsubset
(sb) /propersubset
(ib) /reflexsubset
(mo) /element
(!m) /notelement
(an) /angle
(gr) /gradient
(rg) /registerserif
(co) /copyrightserif
(tm) /trademarkserif
(---) /product
(sr) /radical
(c.) /dotmath
(no) /logicalnot
(l&) /logicaland
(l|) /logicalor
(---) /arrowdblboth
(---) /arrowdblleft
(---) /arrowdblup
(---) /arrowdblright
(---) /arrowdbldown
(lz) /lozenge
(b<) /angleleft
(RG) /registersans
(CO) /copyrightsans
(TM) /trademarksans
(---) /summation
(LT) /parenlefttp
(br) /parenleftex
(LX) (") % synonym
(LB) /parenleftbt
(lc) /bracketlefttp
(lx) /bracketleftex
(lf) /bracketleftbt
(lt) /bracelefttp
(lk) /braceleftmid
(lb) /braceleftbt
(bv) /braceex
(|) (") % synonym
(b>) /angleright
(is) /integral
(---) /integraltp
(---) /integralex
(---) /integralbt
(RT) /parenrighttp
(RX) /parenrightex
(RB) /parenrightbt
(rc) /bracketrighttp
(rx) /bracketrightex
(rf) /bracketrightbt
(rt) /bracerighttp
(rk) /bracerightmid
(rb) /bracerightbt
(~=) (55 0 1) % charlib
//End of SymbolCharset
}
SpecialCharset() {
cat <<-'//End of SpecialCharset'
(ru) /underscore
(ff) (60 2 1) % charlib
(Fi) (84 2 1) % charlib
(Fl) (84 2 1) % charlib
(14) (75 2 1) % charlib
(12) (75 2 1) % charlib
(34) (75 2 1) % charlib
(bx) (50 2 1) % charlib
(ob) (38 2 1) % charlib
(ci) (75 0 1) % charlib
(sq) (50 2 1) % charlib
(Sl) (50 2 1) % charlib
(L1) (110 1 1) % charlib
(LA) (110 1 1) % charlib
(LV) (110 3 1) % charlib
(LH) (210 1 1) % charlib
(lh) (100 0 1) % charlib
(rh) (100 0 1) % charlib
(lH) (100 0 1) % charlib
(rH) (100 0 1) % charlib
(PC) (220 2 1) % charlib
(DG) (185 2 1) % charlib
//End of SpecialCharset
}
DingbatsCharset() {
cat <<-'//End of DingbatsCharset'
(!) 33
(") 34
(#) 35
($) 36
(%) 37
(&) 38
(') 39
(\() 40
(\)) 41
(*) 42
(+) 43
(,) 44
(-) 45
(.) 46
(/) 47
(0) 48
(1) 49
(2) 50
(3) 51
(4) 52
(5) 53
(6) 54
(7) 55
(8) 56
(9) 57
(:) 58
(;) 59
(<) 60
(=) 61
(>) 62
(?) 63
(@) 64
(A) 65
(B) 66
(C) 67
(D) 68
(E) 69
(F) 70
(G) 71
(H) 72
(I) 73
(J) 74
(K) 75
(L) 76
(M) 77
(N) 78
(O) 79
(P) 80
(Q) 81
(R) 82
(S) 83
(T) 84
(U) 85
(V) 86
(W) 87
(X) 88
(Y) 89
(Z) 90
([) 91
(\\) 92
(]) 93
(^) 94
(_) 95
(`) 96
(a) 97
(b) 98
(c) 99
(d) 100
(e) 101
(f) 102
(g) 103
(h) 104
(i) 105
(j) 106
(k) 107
(l) 108
(m) 109
(n) 110
(o) 111
(p) 112
(q) 113
(r) 114
(s) 115
(t) 116
(u) 117
(v) 118
(w) 119
(x) 120
(y) 121
(z) 122
({) 123
(|) 124
(}) 125
(~) 126
(hy) 161
(em) 162
(de) 163
(\\-) 164
(en) 165
(ff) 166
(fi) 167
(fl) 168
(Fi) 169
(Fl) 170
(fm) 171
(ru) 172
(dg) 173
(bu) 174
(14) 175
(34) 176
(12) 177
(ct) 178
(rg) 179
(sq) 180
(sl) 181
(ul) 182
(or) 183
(no) 184
(->) 185
(<-) 186
(da) 187
(lh) 188
(ua) 189
(ab) 190
(!b) 191
(aa) 192
(!m) 193
(ga) 194
(pl) 195
(mi) 196
(mu) 197
(di) 198
(eq) 199
(==) 200
(>=) 201
(<=) 202
(!=) 203
(+-) 204
(-+) 205
(ap) 206
(~=) 207
(gr) 208
(is) 209
(pd) 210
(if) 211
(sr) 212
(rn) 213
(sb) 214
(sp) 215
(cu) 216
(ca) 217
(ib) 218
(ip) 219
(mo) 220
(es) 221
(sc) 222
(dd) 223
(lc) 224
(rc) 225
(lf) 226
(rf) 227
(bv) 228
(**) 229
(br) 230
(ci) 231
(ts) 232
(co) 233
(lt) 234
(rt) 235
(lb) 236
(rb) 237
(lk) 238
(rk) 239
(rh) 241
(tm) 242
(Sl) 243
(ps) 244
(cs) 245
(cy) 246
(as) 247
(os) 248
(=.) 249
(ld) 250
(rd) 251
(le) 252
(ge) 253
(pp) 254
//End of DingbatsCharset
}
#
# Generating functions output PostScript programs that build font width
# tables or a typesetter description file. Send the program to a printer
# and the complete table will come back on the serial port. All write on
# stdout and assume the prologue and other required PostScript files are
# all available.
#
Proportional() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
# Get <>_ and | from S. Use accents for ascii ^ and ~.
StandardCharset | awk '
$1 == "(<)" && $2 == "/less" {$1 = "(---)"}
$1 == "(>)" && $2 == "/greater" {$1 = "(---)"}
$1 == "(_)" && $2 == "/underscore" {$1 = "(---)"}
$1 == "(|)" && $2 == "/bar" {$1 = "(---)"}
$1 == "(^)" && $2 == "/asciicircum" {$1 = "(---)"}
$1 == "(~)" && $2 == "/asciitilde" {$1 = "(---)"}
{printf "%s\t%s\n", $1, $2}
$2 == "/circumflex" {printf "(^)\t(\")\n"}
$2 == "/tilde" {printf "(~)\t(\")\n"}
'
echo "] def"
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(ligatures fi fl 0\\\\n) Print"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
FixedWidth() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
# awk is not important - it's only here for compatibility
StandardCharset | awk '
$1 == "(fi)" || $1 == "(fl)" {next}
{printf "%s\t%s\n", $1, $2}
$2 == "/circumflex" {printf "(^)\t(\")\n"}
$2 == "/tilde" {printf "(~)\t(\")\n"}
'
echo "] def"
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Dingbats() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
DingbatsCharset
echo "] def"
echo "/$2 SelectFont"
echo "( ) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Greek() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset | awk '$1 ~ /\(\*[a-zA-Z]\)/'
echo "] def"
echo "/$2 SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Symbol() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset
echo "] def"
echo "ChangeMetrics"
echo "/S SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Special() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SpecialCharset
echo "] def"
echo "ChangeMetrics"
echo "/S1 SelectFont"
echo "(# Times-Roman special font\\\\n) Print"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
#
# The DESC file doesn't have to be built on a printer. It's only here for
# consistency.
#
Description() {
echo "/charset [" # awk - so the stack doesn't overflow
StandardCharset | awk '$1 != "(---)" {print $1}'
SymbolCharset | awk '$1 != "(---)" {print $1}'
SpecialCharset | awk '$1 != "(---)" {print $1}'
DingbatsCharset | awk '$1 != "(---)" {print $1}'
echo "] def"
cat <<-//DESC
(#Device Description - original PostScript character set
PDL PostScript
fonts 10 R I B BI CW H HI HB S1 S
sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
120 125 130 135 140 145 150 155 160 0
res $RESOLUTION
hor 1
vert 1
unitwidth $UNITWIDTH
) Print
//DESC
echo "(charset\\\\n) Print"
echo "BuildDescCharset"
echo "(\\\\n) Print"
}
0707070014231217231006440057030057030000010643620522627501400002400000003355post.src/devpost/HK name HK
fontname Helvetica-LightOblique
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 28 2 34
dq "
# 56 2 35
$ 56 2 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 66 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 66 0 60
= 66 0 61
--- 66 0 62
? 50 2 63
@ 80 2 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 2 81
R 67 2 82
S 61 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 89 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 66 2 94
--- 50 1 95
` 22 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 28 2 102
g 61 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 22 2 124
} 33 3 125
--- 66 0 126
!! 33 1 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 0 168
--- 22 2 169
`` 39 2 170
--- 56 0 171
--- 39 0 172
--- 39 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 65 3 182
--- 50 0 183
--- 22 1 184
--- 39 1 185
'' 39 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
?? 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 33 2 227
--- 56 2 232
--- 78 2 233
--- 100 2 234
--- 33 2 235
--- 89 0 241
--- 22 0 245
--- 22 2 248
--- 56 0 249
--- 94 0 250
--- 50 2 251
0707070014231217241006440057030057030000010643640522627501400002400000003346post.src/devpost/HL name HL
fontname Helvetica-Light
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 28 2 34
dq "
# 56 2 35
$ 56 2 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 66 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 66 0 60
= 66 0 61
--- 66 0 62
? 50 2 63
@ 80 2 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 2 81
R 67 2 82
S 61 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 89 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 66 2 94
--- 50 1 95
` 22 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 28 2 102
g 61 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 22 2 124
} 33 3 125
--- 66 0 126
!! 33 1 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 0 168
--- 22 2 169
`` 39 2 170
--- 56 0 171
--- 39 0 172
--- 39 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 65 3 182
--- 50 0 183
--- 22 1 184
--- 39 1 185
'' 39 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
?? 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 33 2 227
--- 56 2 232
--- 78 2 233
--- 100 2 234
--- 33 2 235
--- 89 0 241
--- 22 0 245
--- 22 2 248
--- 56 0 249
--- 94 0 250
--- 50 2 251
0707070014231215111006400057030057030000010554220522632552300002400000003362post.src/devpost/HM name H
fontname Helvetica
named in prologue
ligatures fi fl 0
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 56 2 63
@ 102 3 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 28 3 91
\ 28 2 92
bs "
] 28 3 93
--- 47 2 94
--- 56 1 95
` 22 2 96
a 56 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 56 0 101
f 28 2 102
g 56 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 26 3 124
} 33 3 125
--- 58 0 126
!! 33 1 161
ct 56 3 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 0 168
--- 19 2 169
`` 33 2 170
--- 56 0 171
--- 33 0 172
--- 33 0 173
fi 50 2 174
fl 50 2 175
en 56 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 54 3 182
--- 35 0 183
--- 22 1 184
--- 33 1 185
'' 33 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
?? 61 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 37 2 227
--- 56 2 232
--- 78 2 233
--- 100 2 234
--- 36 2 235
--- 89 0 241
--- 28 0 245
--- 22 2 248
--- 61 0 249
--- 94 0 250
--- 61 2 251
0707070014231217261006440057030057030000010644600522627501400003700000035275post.src/devpost/shell.lib.bak #
# Shell library - for building devpost tables. Original collection was
# built on a Version 47.0 PS-810.
#
RESOLUTION=720
UNITWIDTH=10
#
# BuiltinTables returns command lines that generate PostScript programs
# for building a typesetter description file and font width tables for
# a relatively standard collection of fonts. Use awk to select a command
# line or modify an existing command to build a width table for a new
# font.
#
BuiltinTables() {
cat <<-'//End of BuiltinTables'
Proportional R Times-Roman
Proportional I Times-Italic
Proportional B Times-Bold
Proportional BI Times-BoldItalic
Proportional AB AvantGarde-Demi
Proportional AI AvantGarde-BookOblique
Proportional AR AvantGarde-Book
Proportional AX AvantGarde-DemiOblique
Proportional H Helvetica
Proportional HB Helvetica-Bold
Proportional HI Helvetica-Oblique
Proportional HX Helvetica-BoldOblique
Proportional Hb Helvetica-Narrow-Bold
Proportional Hi Helvetica-Narrow-Oblique
Proportional Hr Helvetica-Narrow
Proportional Hx Helvetica-Narrow-BoldOblique
Proportional KB Bookman-Demi
Proportional KI Bookman-LightItalic
Proportional KR Bookman-Light
Proportional KX Bookman-DemiItalic
Proportional NB NewCenturySchlbk-Bold
Proportional NI NewCenturySchlbk-Italic
Proportional NR NewCenturySchlbk-Roman
Proportional NX NewCenturySchlbk-BoldItalic
Proportional PA Palatino-Roman
Proportional PB Palatino-Bold
Proportional PI Palatino-Italic
Proportional PX Palatino-BoldItalic
Proportional ZI ZapfChancery-MediumItalic
FixedWidth C Courier
FixedWidth CB Courier-Bold
FixedWidth CI Courier-Oblique
FixedWidth CO Courier
FixedWidth CW Courier
FixedWidth CX Courier-BoldOblique
Dingbats ZD ZapfDingbats
Greek GR Symbol
Symbol S Symbol
Special S1 Times-Roman
Description DESC ---
//End of BuiltinTables
}
#
# AllTables prints the complete list of builtin font names.
#
AllTables() {
BuiltinTables | awk '{print $2}'
}
#
# Charset functions generate keyword/value pairs (as PostScript objects)
# that describe the character set available in a font. The keyword is a
# PostScript string that represents troff's name for the character. The
# value is usually the literal name (i.e. begins with a /) assigned to
# the character in the PostScript font. The value can also be an integer
# or a PostScript string. An integer value is used as an index in the
# current font's Encoding array. A string value is returned to the host
# unchanged when the entry for the character is constructed. Entries that
# have (") as their value are synonyms for the preceeding character.
#
StandardCharset() {
cat <<-'//End of StandardCharset'
(!) /exclam
(") /quotedbl
(#) /numbersign
($) /dollar
(%) /percent
(&) /ampersand
(') /quoteright
(\() /parenleft
(\)) /parenright
(*) /asterisk
(+) /plus
(,) /comma
(hy) /hyphen
(-) (") % synonym
(.) /period
(/) /slash
(0) /zero
(1) /one
(2) /two
(3) /three
(4) /four
(5) /five
(6) /six
(7) /seven
(8) /eight
(9) /nine
(:) /colon
(;) /semicolon
(<) /less
(=) /equal
(>) /greater
(?) /question
(@) /at
(A) /A
(B) /B
(C) /C
(D) /D
(E) /E
(F) /F
(G) /G
(H) /H
(I) /I
(J) /J
(K) /K
(L) /L
(M) /M
(N) /N
(O) /O
(P) /P
(Q) /Q
(R) /R
(S) /S
(T) /T
(U) /U
(V) /V
(W) /W
(X) /X
(Y) /Y
(Z) /Z
([) /bracketleft
(\\) /backslash
(]) /bracketright
(^) /asciicircum
(_) /underscore
(`) /quoteleft
(a) /a
(b) /b
(c) /c
(d) /d
(e) /e
(f) /f
(g) /g
(h) /h
(i) /i
(j) /j
(k) /k
(l) /l
(m) /m
(n) /n
(o) /o
(p) /p
(q) /q
(r) /r
(s) /s
(t) /t
(u) /u
(v) /v
(w) /w
(x) /x
(y) /y
(z) /z
({) /braceleft
(|) /bar
(}) /braceright
(~) /asciitilde
(---) /exclamdown
(ct) /cent
(ps) /sterling
(fr) /fraction
(yn) /yen
(fn) /florin
(sc) /section
(cr) /currency
(---) /quotesingle
(``) /quotedblleft
(---) /guillemotleft
(---) /guilsinglleft
(---) /guilsinglright
(fi) /fi
(fl) /fl
(en) /endash
(\\-) (")
(dg) /dagger
(dd) /daggerdbl
(---) /periodcentered
(pg) /paragraph
(---) /bullet
(---) /quotesinglbase
(---) /quotedblbase
('') /quotedblright
(---) /guillemotright
(---) /ellipsis
(---) /perthousand
(---) /questiondown
(ga) /grave
(\\`) (")
(aa) /acute
(\\') (")
(^a) /circumflex
(~a) /tilde
(-a) /macron
(Ua) /breve
(.a) /dotaccent
(:a) /dieresis
(oa) /ring
(,a) /cedilla
("a) /hungarumlaut
(Ca) /ogonek
(va) /caron
(em) /emdash
(---) /AE
(---) /ordfeminine
(---) /Lslash
(---) /Oslash
(---) /OE
(---) /ordmasculine
(---) /ae
(---) /dotlessi
(---) /lslash
(---) /oslash
(---) /oe
(---) /germandbls
//End of StandardCharset
}
SymbolCharset() {
cat <<-'//End of SymbolCharset'
(---) /exclam
(fa) /universal
(---) /numbersign
(te) /existential
(---) /percent
(---) /ampersand
(st) /suchthat
(---) /parenleft
(---) /parenright
(**) /asteriskmath
(pl) /plus
(---) /comma
(mi) /minus
(---) /period
(sl) /slash
(---) /zero
(---) /one
(---) /two
(---) /three
(---) /four
(---) /five
(---) /six
(---) /seven
(---) /eight
(---) /nine
(---) /colon
(---) /semicolon
(<) /less
(eq) /equal
(>) /greater
(---) /question
(cg) /congruent
(*A) /Alpha
(*B) /Beta
(*X) /Chi
(*D) /Delta
(*E) /Epsilon
(*F) /Phi
(*G) /Gamma
(*Y) /Eta
(*I) /Iota
(---) /theta1
(*K) /Kappa
(*L) /Lambda
(*M) /Mu
(*N) /Nu
(*O) /Omicron
(*P) /Pi
(*H) /Theta
(*R) /Rho
(*S) /Sigma
(*T) /Tau
(*U) /Upsilon
(ts) /sigma1
(*W) /Omega
(*C) /Xi
(*Q) /Psi
(*Z) /Zeta
(---) /bracketleft
(tf) /therefore
(---) /bracketright
(pp) /perpendicular
(ul) /underscore
(_) (") % synonym
(rn) /radicalex
(*a) /alpha
(*b) /beta
(*x) /chi
(*d) /delta
(*e) /epsilon
(*f) /phi
(*g) /gamma
(*y) /eta
(*i) /iota
(---) /phi1
(*k) /kappa
(*l) /lambda
(*m) /mu
(*n) /nu
(*o) /omicron
(*p) /pi
(*h) /theta
(*r) /rho
(*s) /sigma
(*t) /tau
(*u) /upsilon
(---) /omega1
(*w) /omega
(*c) /xi
(*q) /psi
(*z) /zeta
(---) /braceleft
(or) /bar
(---) /braceright
(ap) /similar
(---) /Upsilon1
(fm) /minute
(<=) /lessequal
(---) /fraction
(if) /infinity
(---) /florin
(---) /club
(---) /diamond
(---) /heart
(---) /spade
(ab) /arrowboth
(<-) /arrowleft
(ua) /arrowup
(->) /arrowright
(da) /arrowdown
(de) /degree
(+-) /plusminus
(---) /second
(>=) /greaterequal
(mu) /multiply
(pt) /proportional
(pd) /partialdiff
(bu) /bullet
(di) /divide
(!=) /notequal
(==) /equivalence
(~~) /approxequal
(el) /ellipsis
(av) /arrowvertex
(ah) /arrowhorizex
(CR) /carriagereturn
(af) /aleph
(If) /Ifraktur
(Rf) /Rfraktur
(ws) /weierstrass
(Ox) /circlemultiply
(O+) /circleplus
(es) /emptyset
(ca) /intersection
(cu) /union
(sp) /propersuperset
(ip) /reflexsuperset
(!b) /notsubset
(sb) /propersubset
(ib) /reflexsubset
(mo) /element
(!m) /notelement
(an) /angle
(gr) /gradient
(rg) /registerserif
(co) /copyrightserif
(tm) /trademarkserif
(---) /product
(sr) /radical
(c.) /dotmath
(no) /logicalnot
(l&) /logicaland
(l|) /logicalor
(---) /arrowdblboth
(---) /arrowdblleft
(---) /arrowdblup
(---) /arrowdblright
(---) /arrowdbldown
(lz) /lozenge
(b<) /angleleft
(RG) /registersans
(CO) /copyrightsans
(TM) /trademarksans
(---) /summation
(LT) /parenlefttp
(br) /parenleftex
(LX) (") % synonym
(LB) /parenleftbt
(lc) /bracketlefttp
(lx) /bracketleftex
(lf) /bracketleftbt
(lt) /bracelefttp
(lk) /braceleftmid
(lb) /braceleftbt
(bv) /braceex
(|) (") % synonym
(b>) /angleright
(is) /integral
(---) /integraltp
(---) /integralex
(---) /integralbt
(RT) /parenrighttp
(RX) /parenrightex
(RB) /parenrightbt
(rc) /bracketrighttp
(rx) /bracketrightex
(rf) /bracketrightbt
(rt) /bracerighttp
(rk) /bracerightmid
(rb) /bracerightbt
(~=) (55 0 1) % charlib
//End of SymbolCharset
}
SpecialCharset() {
cat <<-'//End of SpecialCharset'
(ru) /underscore
(ff) (60 2 1) % charlib
(Fi) (84 2 1) % charlib
(Fl) (84 2 1) % charlib
(14) (75 2 1) % charlib
(12) (75 2 1) % charlib
(34) (75 2 1) % charlib
(bx) (50 2 1) % charlib
(ob) (38 2 1) % charlib
(ci) (75 0 1) % charlib
(sq) (50 2 1) % charlib
(Sl) (50 2 1) % charlib
(L1) (110 1 2) % charlib
(LA) (110 1 2) % charlib
(LV) (110 3 1) % charlib
(LH) (210 1 1) % charlib
(lh) (100 0 1) % charlib
(rh) (100 0 1) % charlib
(lH) (100 0 1) % charlib
(rH) (100 0 1) % charlib
(PC) (220 2 1) % charlib
(DG) (185 2 1) % charlib
//End of SpecialCharset
}
DingbatsCharset() {
cat <<-'//End of DingbatsCharset'
(!) 33
(") 34
(#) 35
($) 36
(%) 37
(&) 38
(') 39
(\() 40
(\)) 41
(*) 42
(+) 43
(,) 44
(-) 45
(.) 46
(/) 47
(0) 48
(1) 49
(2) 50
(3) 51
(4) 52
(5) 53
(6) 54
(7) 55
(8) 56
(9) 57
(:) 58
(;) 59
(<) 60
(=) 61
(>) 62
(?) 63
(@) 64
(A) 65
(B) 66
(C) 67
(D) 68
(E) 69
(F) 70
(G) 71
(H) 72
(I) 73
(J) 74
(K) 75
(L) 76
(M) 77
(N) 78
(O) 79
(P) 80
(Q) 81
(R) 82
(S) 83
(T) 84
(U) 85
(V) 86
(W) 87
(X) 88
(Y) 89
(Z) 90
([) 91
(\\) 92
(]) 93
(^) 94
(_) 95
(`) 96
(a) 97
(b) 98
(c) 99
(d) 100
(e) 101
(f) 102
(g) 103
(h) 104
(i) 105
(j) 106
(k) 107
(l) 108
(m) 109
(n) 110
(o) 111
(p) 112
(q) 113
(r) 114
(s) 115
(t) 116
(u) 117
(v) 118
(w) 119
(x) 120
(y) 121
(z) 122
({) 123
(|) 124
(}) 125
(~) 126
(hy) 161
(em) 162
(de) 163
(\\-) 164
(en) 165
(ff) 166
(fi) 167
(fl) 168
(Fi) 169
(Fl) 170
(fm) 171
(ru) 172
(dg) 173
(bu) 174
(14) 175
(34) 176
(12) 177
(ct) 178
(rg) 179
(sq) 180
(sl) 181
(ul) 182
(or) 183
(no) 184
(->) 185
(<-) 186
(da) 187
(lh) 188
(ua) 189
(ab) 190
(!b) 191
(aa) 192
(!m) 193
(ga) 194
(pl) 195
(mi) 196
(mu) 197
(di) 198
(eq) 199
(==) 200
(>=) 201
(<=) 202
(!=) 203
(+-) 204
(-+) 205
(ap) 206
(~=) 207
(gr) 208
(is) 209
(pd) 210
(if) 211
(sr) 212
(rn) 213
(sb) 214
(sp) 215
(cu) 216
(ca) 217
(ib) 218
(ip) 219
(mo) 220
(es) 221
(sc) 222
(dd) 223
(lc) 224
(rc) 225
(lf) 226
(rf) 227
(bv) 228
(**) 229
(br) 230
(ci) 231
(ts) 232
(co) 233
(lt) 234
(rt) 235
(lb) 236
(rb) 237
(lk) 238
(rk) 239
(rh) 241
(tm) 242
(Sl) 243
(ps) 244
(cs) 245
(cy) 246
(as) 247
(os) 248
(=.) 249
(ld) 250
(rd) 251
(le) 252
(ge) 253
(pp) 254
//End of DingbatsCharset
}
#
# Generating functions output PostScript programs that build font width
# tables or a typesetter description file. Send the program to a printer
# and the complete table will come back on the serial port. All write on
# stdout and assume the prologue and other required PostScript files are
# all available.
#
Proportional() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
# Get <>_ and | from S. Use accents for ascii ^ and ~.
StandardCharset | awk '
$1 == "(<)" && $2 == "/less" {$1 = "(---)"}
$1 == "(>)" && $2 == "/greater" {$1 = "(---)"}
$1 == "(_)" && $2 == "/underscore" {$1 = "(---)"}
$1 == "(|)" && $2 == "/bar" {$1 = "(---)"}
$1 == "(^)" && $2 == "/asciicircum" {$1 = "(---)"}
$1 == "(~)" && $2 == "/asciitilde" {$1 = "(---)"}
{printf "%s\t%s\n", $1, $2}
$2 == "/circumflex" {printf "(^)\t(\")\n"}
$2 == "/tilde" {printf "(~)\t(\")\n"}
'
echo "] def"
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(ligatures fi fl 0\\\\n) Print"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
FixedWidth() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
# awk is not important - it's only here for compatibility
StandardCharset | awk '
$1 == "(fi)" || $1 == "(fl)" {next}
{printf "%s\t%s\n", $1, $2}
$2 == "/circumflex" {printf "(^)\t(\")\n"}
$2 == "/tilde" {printf "(~)\t(\")\n"}
'
echo "] def"
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Dingbats() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
DingbatsCharset
echo "] def"
echo "/$2 SelectFont"
echo "( ) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Greek() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset | awk '$1 ~ /\(\*[a-zA-Z]\)/'
echo "] def"
echo "/$2 SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Symbol() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset
echo "] def"
echo "ChangeMetrics"
echo "/S SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Special() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SpecialCharset
echo "] def"
echo "ChangeMetrics"
echo "/S1 SelectFont"
echo "(# Times-Roman special font\\\\n) Print"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
#
# The DESC file doesn't have to be built on a printer. It's only here for
# consistency.
#
Description() {
echo "/charset [" # awk - so the stack doesn't overflow
StandardCharset | awk '$1 != "(---)" {print $1}'
SymbolCharset | awk '$1 != "(---)" {print $1}'
SpecialCharset | awk '$1 != "(---)" {print $1}'
DingbatsCharset | awk '$1 != "(---)" {print $1}'
echo "] def"
cat <<-//DESC
(#Device Description - original PostScript character set
PDL PostScript
fonts 10 R I B BI CW H HI HB S1 S
sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
120 125 130 135 140 145 150 155 160 0
res $RESOLUTION
hor 1
vert 1
unitwidth $UNITWIDTH
) Print
//DESC
echo "(charset\\\\n) Print"
echo "BuildDescCharset"
echo "(\\\\n) Print"
}
0707070014231217271006440057030057030000010643470522627501400003200000000111post.src/devpost/LINKFILE #
# Creates missing width tables from existing ones.
#
rm -f HM
cp H HM
0707070014231123360407550057030057030000030440450522633073400002300000000000post.src/devLatin1 0707070014231123371006440057030057030000010440600522627501500003500000053076post.src/devLatin1/shell.lib #
# Shell library - for building devLatin1 tables.
#
# The full ISO Latin1 alphabet appeared in Adobe's interpreter sometime
# around Version 50.0. Prior to that ROM resident Type 1 text fonts were
# missing 18 characters that are now part of the Latin1 standard. Width
# tables will not build on printers that lack full Latin1 support. Error
# message will likely reflect a missing ISOLatin1Encoding array.
#
RESOLUTION=720
UNITWIDTH=10
OCTALESCAPES=${OCTALESCAPES:-160} # <= code means add \0ddd names
DOWNLOADVECTOR=FALSE # TRUE can mean incomplete tables
#
# BuiltinTables returns command lines that generate PostScript programs
# for building a typesetter description file and font width tables for
# a relatively standard collection of fonts. Use awk to select a command
# line or modify an existing command to build a width table for a new
# font.
#
BuiltinTables() {
cat <<-'//End of BuiltinTables'
Proportional R Times-Roman
Proportional I Times-Italic
Proportional B Times-Bold
Proportional BI Times-BoldItalic
Proportional AB AvantGarde-Demi
Proportional AI AvantGarde-BookOblique
Proportional AR AvantGarde-Book
Proportional AX AvantGarde-DemiOblique
Proportional H Helvetica
Proportional HB Helvetica-Bold
Proportional HI Helvetica-Oblique
Proportional HX Helvetica-BoldOblique
Proportional Hb Helvetica-Narrow-Bold
Proportional Hi Helvetica-Narrow-Oblique
Proportional Hr Helvetica-Narrow
Proportional Hx Helvetica-Narrow-BoldOblique
Proportional KB Bookman-Demi
Proportional KI Bookman-LightItalic
Proportional KR Bookman-Light
Proportional KX Bookman-DemiItalic
Proportional NB NewCenturySchlbk-Bold
Proportional NI NewCenturySchlbk-Italic
Proportional NR NewCenturySchlbk-Roman
Proportional NX NewCenturySchlbk-BoldItalic
Proportional PA Palatino-Roman
Proportional PB Palatino-Bold
Proportional PI Palatino-Italic
Proportional PX Palatino-BoldItalic
Proportional ZI ZapfChancery-MediumItalic
FixedWidth C Courier
FixedWidth CB Courier-Bold
FixedWidth CI Courier-Oblique
FixedWidth CO Courier
FixedWidth CW Courier
FixedWidth CX Courier-BoldOblique
Dingbats ZD ZapfDingbats
Greek GR Symbol
Symbol S Symbol
Special S1 Times-Roman
Description DESC ---
//End of BuiltinTables
}
#
# AllTables prints the complete list of builtin font names.
#
AllTables() {
BuiltinTables | awk '{print $2}'
}
#
# Charset functions generate keyword/value pairs (as PostScript objects)
# that describe the character set available in a font. The keyword is a
# PostScript string that represents troff's name for the character. The
# value is usually the literal name (i.e. begins with a /) assigned to
# the character in the PostScript font. The value can also be an integer
# or a PostScript string. An integer value is used as an index in the
# current font's Encoding array. A string value is returned to the host
# unchanged when the entry for the character is constructed. Entries that
# have (") as their value are synonyms for the preceeding character.
#
# The 18 characters missing from ROM resident fonts on older printers are
# flagged with the PostScript comment "% missing".
#
StandardCharset() {
cat <<-'//End of StandardCharset'
(!) /exclam
(") /quotedbl
(dq) (") % synonym
(#) /numbersign
($) /dollar
(%) /percent
(&) /ampersand
(') /quoteright
(\() /parenleft
(\)) /parenright
(*) /asterisk
(+) /plus
(,) /comma
(-) /hyphen % changed from minus by request
(.) /period
(/) /slash
(0) /zero
(1) /one
(2) /two
(3) /three
(4) /four
(5) /five
(6) /six
(7) /seven
(8) /eight
(9) /nine
(:) /colon
(;) /semicolon
(<) /less
(=) /equal
(>) /greater
(?) /question
(@) /at
(A) /A
(B) /B
(C) /C
(D) /D
(E) /E
(F) /F
(G) /G
(H) /H
(I) /I
(J) /J
(K) /K
(L) /L
(M) /M
(N) /N
(O) /O
(P) /P
(Q) /Q
(R) /R
(S) /S
(T) /T
(U) /U
(V) /V
(W) /W
(X) /X
(Y) /Y
(Z) /Z
([) /bracketleft
(\\) /backslash
(bs) (") % synonym
(]) /bracketright
(^) /asciicircum
(_) /underscore
(`) /quoteleft
(a) /a
(b) /b
(c) /c
(d) /d
(e) /e
(f) /f
(g) /g
(h) /h
(i) /i
(j) /j
(k) /k
(l) /l
(m) /m
(n) /n
(o) /o
(p) /p
(q) /q
(r) /r
(s) /s
(t) /t
(u) /u
(v) /v
(w) /w
(x) /x
(y) /y
(z) /z
({) /braceleft
(|) /bar
(}) /braceright
(~) /asciitilde
(\\`) /grave % devpost character
(ga) (") % synonym
(!!) /exclamdown
(c|) /cent
(ct) (") % devpost synonym
(L-) /sterling
(ps) (") % devpost synonym
(xo) /currency
(cr) (") % devpost synonym
(Y-) /yen
(yn) (") % devpost synonym
(||) /brokenbar % missing
(so) /section
(sc) (") % devpost synonym
("") /dieresis
(:a) (") % devpost synonym
(co) /copyright
(a_) /ordfeminine
(<<) /guillemotleft
(-,) /logicalnot
(hy) /hyphen
(--) /minus
(ro) /registered
(rg) (") % devpost synonym
(-^) /macron
(-a) (") % devpost synonym
(0^) /degree % missing
(+-) /plusminus % missing
(2^) /twosuperior % missing
(3^) /threesuperior % missing
(\\') /acute
(aa) (") % devpost synonym
(/u) /mu % missing
(P!) /paragraph
(pg) (") % devpost synonym
(.^) /periodcentered
(,,) /cedilla
(,a) (") % devpost synonym
(1^) /onesuperior % missing
(o_) /ordmasculine
(>>) /guillemotright
(14) /onequarter % missing
(12) /onehalf % missing
(34) /threequarters % missing
(??) /questiondown
(A`) /Agrave
(A') /Aacute
(A^) /Acircumflex
(A~) /Atilde
(A") /Adieresis
(A*) /Aring
(AE) /AE
(C,) /Ccedilla
(E`) /Egrave
(E') /Eacute
(E^) /Ecircumflex
(E") /Edieresis
(I`) /Igrave
(I') /Iacute
(I^) /Icircumflex
(I") /Idieresis
(D-) /Eth % missing
(N~) /Ntilde
(O`) /Ograve
(O') /Oacute
(O^) /Ocircumflex
(O~) /Otilde
(O") /Odieresis
(xx) /multiply % missing
(O/) /Oslash
(U`) /Ugrave
(U') /Uacute
(U^) /Ucircumflex
(U") /Udieresis
(Y') /Yacute % missing
(TH) /Thorn % missing
(ss) /germandbls
(a`) /agrave
(a') /aacute
(a^) /acircumflex
(a~) /atilde
(a") /adieresis
(a*) /aring
(ae) /ae
(c,) /ccedilla
(e`) /egrave
(e') /eacute
(e^) /ecircumflex
(e") /edieresis
(i`) /igrave
(i') /iacute
(i^) /icircumflex
(i") /idieresis
(d-) /eth % missing
(n~) /ntilde
(o`) /ograve
(o') /oacute
(o^) /ocircumflex
(o~) /otilde
(o") /odieresis
(-:) /divide % missing
(o/) /oslash
(u`) /ugrave
(u') /uacute
(u^) /ucircumflex
(u") /udieresis
(y') /yacute % missing
(th) /thorn % missing
(y") /ydieresis
(^a) /circumflex % devpost accent
(~a) /tilde % devpost accent
(Ua) /breve % devpost accent
(.a) /dotaccent % devpost accent
(oa) /ring % devpost accent
("a) /hungarumlaut % devpost accent
(Ca) /ogonek % devpost accent
(va) /caron % devpost accent
//End of StandardCharset
}
#
# DingbatsCharset guarantees changes in StandardCharset don't show up in ZD.
#
DingbatsCharset() {
cat <<-'//End of DingbatsCharset'
(!) /exclam
(") /quotedbl
(#) /numbersign
($) /dollar
(%) /percent
(&) /ampersand
(') /quoteright
(\() /parenleft
(\)) /parenright
(*) /asterisk
(+) /plus
(,) /comma
(-) /minus % also hyphen in devpost
(.) /period
(/) /slash
(0) /zero
(1) /one
(2) /two
(3) /three
(4) /four
(5) /five
(6) /six
(7) /seven
(8) /eight
(9) /nine
(:) /colon
(;) /semicolon
(<) /less
(=) /equal
(>) /greater
(?) /question
(@) /at
(A) /A
(B) /B
(C) /C
(D) /D
(E) /E
(F) /F
(G) /G
(H) /H
(I) /I
(J) /J
(K) /K
(L) /L
(M) /M
(N) /N
(O) /O
(P) /P
(Q) /Q
(R) /R
(S) /S
(T) /T
(U) /U
(V) /V
(W) /W
(X) /X
(Y) /Y
(Z) /Z
([) /bracketleft
(\\) /backslash
(]) /bracketright
(^) /asciicircum
(_) /underscore
(`) /quoteleft
(a) /a
(b) /b
(c) /c
(d) /d
(e) /e
(f) /f
(g) /g
(h) /h
(i) /i
(j) /j
(k) /k
(l) /l
(m) /m
(n) /n
(o) /o
(p) /p
(q) /q
(r) /r
(s) /s
(t) /t
(u) /u
(v) /v
(w) /w
(x) /x
(y) /y
(z) /z
({) /braceleft
(|) /bar
(}) /braceright
(~) /asciitilde
(\\`) /grave % devpost character
(!!) /exclamdown
(c|) /cent
(L-) /sterling
(xo) /currency
(Y-) /yen
(||) /brokenbar % missing
(so) /section
("") /dieresis
(co) /copyright
(a_) /ordfeminine
(<<) /guillemotleft
(-,) /logicalnot
(hy) /hyphen
(ro) /registered
(-^) /macron
(0^) /degree % missing
(+-) /plusminus % missing
(2^) /twosuperior % missing
(3^) /threesuperior % missing
(\\') /acute
(/u) /mu % missing
(P!) /paragraph
(.^) /periodcentered
(,,) /cedilla
(1^) /onesuperior % missing
(o_) /ordmasculine
(>>) /guillemotright
(14) /onequarter % missing
(12) /onehalf % missing
(34) /threequarters % missing
(??) /questiondown
(A`) /Agrave
(A') /Aacute
(A^) /Acircumflex
(A~) /Atilde
(A") /Adieresis
(A*) /Aring
(AE) /AE
(C,) /Ccedilla
(E`) /Egrave
(E') /Eacute
(E^) /Ecircumflex
(E") /Edieresis
(I`) /Igrave
(I') /Iacute
(I^) /Icircumflex
(I") /Idieresis
(D-) /Eth % missing
(N~) /Ntilde
(O`) /Ograve
(O') /Oacute
(O^) /Ocircumflex
(O~) /Otilde
(O") /Odieresis
(xx) /multiply % missing
(O/) /Oslash
(U`) /Ugrave
(U') /Uacute
(U^) /Ucircumflex
(U") /Udieresis
(Y') /Yacute % missing
(TH) /Thorn % missing
(ss) /germandbls
(a`) /agrave
(a') /aacute
(a^) /acircumflex
(a~) /atilde
(a") /adieresis
(a*) /aring
(ae) /ae
(c,) /ccedilla
(e`) /egrave
(e') /eacute
(e^) /ecircumflex
(e") /edieresis
(i`) /igrave
(i') /iacute
(i^) /icircumflex
(i") /idieresis
(d-) /eth % missing
(n~) /ntilde
(o`) /ograve
(o') /oacute
(o^) /ocircumflex
(o~) /otilde
(o") /odieresis
(-:) /divide % missing
(o/) /oslash
(u`) /ugrave
(u') /uacute
(u^) /ucircumflex
(u") /udieresis
(y') /yacute % missing
(th) /thorn % missing
(y") /ydieresis
//End of DingbatsCharset
}
SymbolCharset() {
cat <<-'//End of SymbolCharset'
(---) /exclam
(fa) /universal
(---) /numbersign
(te) /existential
(---) /percent
(---) /ampersand
(st) /suchthat
(---) /parenleft
(---) /parenright
(**) /asteriskmath
(pl) /plus
(---) /comma
(mi) /minus
(---) /period
(sl) /slash
(---) /zero
(---) /one
(---) /two
(---) /three
(---) /four
(---) /five
(---) /six
(---) /seven
(---) /eight
(---) /nine
(---) /colon
(---) /semicolon
(<) /less
(eq) /equal
(>) /greater
(---) /question
(cg) /congruent
(*A) /Alpha
(*B) /Beta
(*X) /Chi
(*D) /Delta
(*E) /Epsilon
(*F) /Phi
(*G) /Gamma
(*Y) /Eta
(*I) /Iota
(---) /theta1
(*K) /Kappa
(*L) /Lambda
(*M) /Mu
(*N) /Nu
(*O) /Omicron
(*P) /Pi
(*H) /Theta
(*R) /Rho
(*S) /Sigma
(*T) /Tau
(*U) /Upsilon
(ts) /sigma1
(*W) /Omega
(*C) /Xi
(*Q) /Psi
(*Z) /Zeta
(---) /bracketleft
(tf) /therefore
(---) /bracketright
(pp) /perpendicular
(ul) /underscore
(_) (") % synonym
(rn) /radicalex
(*a) /alpha
(*b) /beta
(*x) /chi
(*d) /delta
(*e) /epsilon
(*f) /phi
(*g) /gamma
(*y) /eta
(*i) /iota
(---) /phi1
(*k) /kappa
(*l) /lambda
(*m) /mu
(*n) /nu
(*o) /omicron
(*p) /pi
(*h) /theta
(*r) /rho
(*s) /sigma
(*t) /tau
(*u) /upsilon
(---) /omega1
(*w) /omega
(*c) /xi
(*q) /psi
(*z) /zeta
(---) /braceleft
(or) /bar
(---) /braceright
(ap) /similar
(---) /Upsilon1
(fm) /minute
(<=) /lessequal
(fr) /fraction % devpost character
(if) /infinity
(fn) /florin % devpost character
(---) /club
(---) /diamond
(---) /heart
(---) /spade
(ab) /arrowboth
(<-) /arrowleft
(ua) /arrowup
(->) /arrowright
(da) /arrowdown
(de) /degree
(+-) /plusminus
(---) /second
(>=) /greaterequal
(mu) /multiply
(pt) /proportional
(pd) /partialdiff
(bu) /bullet
(di) /divide
(!=) /notequal
(==) /equivalence
(~~) /approxequal
(el) /ellipsis
(av) /arrowvertex
(ah) /arrowhorizex
(CR) /carriagereturn
(af) /aleph
(If) /Ifraktur
(Rf) /Rfraktur
(ws) /weierstrass
(Ox) /circlemultiply
(O+) /circleplus
(es) /emptyset
(ca) /intersection
(cu) /union
(sp) /propersuperset
(ip) /reflexsuperset
(!b) /notsubset
(sb) /propersubset
(ib) /reflexsubset
(mo) /element
(!m) /notelement
(an) /angle
(gr) /gradient
(rg) /registerserif
(co) /copyrightserif
(tm) /trademarkserif
(---) /product
(sr) /radical
(c.) /dotmath
(no) /logicalnot
(l&) /logicaland
(l|) /logicalor
(---) /arrowdblboth
(---) /arrowdblleft
(---) /arrowdblup
(---) /arrowdblright
(---) /arrowdbldown
(lz) /lozenge
(b<) /angleleft
(RG) /registersans
(CO) /copyrightsans
(TM) /trademarksans
(---) /summation
(LT) /parenlefttp
(br) /parenleftex
(LX) (") % synonym
(LB) /parenleftbt
(lc) /bracketlefttp
(lx) /bracketleftex
(lf) /bracketleftbt
(lt) /bracelefttp
(lk) /braceleftmid
(lb) /braceleftbt
(bv) /braceex
(|) (") % synonym
(b>) /angleright
(is) /integral
(---) /integraltp
(---) /integralex
(---) /integralbt
(RT) /parenrighttp
(RX) /parenrightex
(RB) /parenrightbt
(rc) /bracketrighttp
(rx) /bracketrightex
(rf) /bracketrightbt
(rt) /bracerighttp
(rk) /bracerightmid
(rb) /bracerightbt
(~=) (55 0 1) % charlib
//End of SymbolCharset
}
SpecialCharset() {
cat <<-'//End of SpecialCharset'
(ru) /underscore
('') /quotedblright % devpost character
(``) /quotedblleft % devpost character
(dg) /dagger % devpost character
(dd) /daggerdbl % devpost character
(en) /endash % devpost character
(\\-) (") % synonym
(em) /emdash
% (ff) (60 2 1) % charlib
% (Fi) (84 2 1) % charlib
% (Fl) (84 2 1) % charlib
(14) (75 2 1) % charlib
(12) (75 2 1) % charlib
(34) (75 2 1) % charlib
(bx) (50 2 1) % charlib
(ob) (38 2 1) % charlib
(ci) (75 0 1) % charlib
(sq) (50 2 1) % charlib
(Sl) (50 2 1) % charlib
(L1) (110 1 1) % charlib
(LA) (110 1 1) % charlib
(LV) (110 3 1) % charlib
(LH) (210 1 1) % charlib
(lh) (100 0 1) % charlib
(rh) (100 0 1) % charlib
(lH) (100 0 1) % charlib
(rH) (100 0 1) % charlib
(PC) (220 2 1) % charlib
(DG) (185 2 1) % charlib
//End of SpecialCharset
}
#
# Latin1 ensures a font uses the ISOLatin1Encoding vector, although only
# text fonts should be re-encoded. Downloading the Encoding vector doesn't
# often make sense. No ISOLatin1Encoding array likely means ROM based fonts
# on your printer are incomplete. Type 1 fonts with a full Latin1 character
# set appeared sometime after Version 50.0.
#
Latin1() {
if [ "$DOWNLOADVECTOR" = TRUE ]; then
cat <<-'//End of ISOLatin1Encoding'
/ISOLatin1Encoding [
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/space
/exclam
/quotedbl
/numbersign
/dollar
/percent
/ampersand
/quoteright
/parenleft
/parenright
/asterisk
/plus
/comma
/minus
/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
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/dotlessi
/grave
/acute
/circumflex
/tilde
/macron
/breve
/dotaccent
/dieresis
/.notdef
/ring
/cedilla
/.notdef
/hungarumlaut
/ogonek
/caron
/space
/exclamdown
/cent
/sterling
/currency
/yen
/brokenbar
/section
/dieresis
/copyright
/ordfeminine
/guillemotleft
/logicalnot
/hyphen
/registered
/macron
/degree
/plusminus
/twosuperior
/threesuperior
/acute
/mu
/paragraph
/periodcentered
/cedilla
/onesuperior
/ordmasculine
/guillemotright
/onequarter
/onehalf
/threequarters
/questiondown
/Agrave
/Aacute
/Acircumflex
/Atilde
/Adieresis
/Aring
/AE
/Ccedilla
/Egrave
/Eacute
/Ecircumflex
/Edieresis
/Igrave
/Iacute
/Icircumflex
/Idieresis
/Eth
/Ntilde
/Ograve
/Oacute
/Ocircumflex
/Otilde
/Odieresis
/multiply
/Oslash
/Ugrave
/Uacute
/Ucircumflex
/Udieresis
/Yacute
/Thorn
/germandbls
/agrave
/aacute
/acircumflex
/atilde
/adieresis
/aring
/ae
/ccedilla
/egrave
/eacute
/ecircumflex
/edieresis
/igrave
/iacute
/icircumflex
/idieresis
/eth
/ntilde
/ograve
/oacute
/ocircumflex
/otilde
/odieresis
/divide
/oslash
/ugrave
/uacute
/ucircumflex
/udieresis
/yacute
/thorn
/ydieresis
] def
//End of ISOLatin1Encoding
fi
echo "ISOLatin1Encoding /$1 ReEncode"
}
#
# Generating functions output PostScript programs that build font width
# tables or a typesetter description file. Send the program to a printer
# and the complete table will come back on the serial port. All write on
# stdout and assume the prologue and other required PostScript files are
# all available.
#
Proportional() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
# Get <>_ and | from S. Use accents for ascii ^ and ~.
StandardCharset | awk '
$1 == "(<)" && $2 == "/less" {$1 = "(---)"}
$1 == "(>)" && $2 == "/greater" {$1 = "(---)"}
$1 == "(_)" && $2 == "/underscore" {$1 = "(---)"}
$1 == "(|)" && $2 == "/bar" {$1 = "(---)"}
$1 == "(^)" && $2 == "/asciicircum" {
printf "(^)\t/circumflex\n"
$1 = "(---)"
}
$1 == "(~)" && $2 == "/asciitilde" {
printf "(~)\t/tilde\n"
$1 = "(---)"
}
{printf "%s\t%s\n", $1, $2}
'
echo "] def"
Latin1 $2
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
FixedWidth() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
StandardCharset
echo "] def"
Latin1 $2
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Dingbats() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
DingbatsCharset | awk '$1 != "(---)" && $2 ~ /^\/[a-zA-Z]/ {
printf "%s\tISOLatin1Encoding %s GetCode\n", $1, $2
}'
echo "] def"
echo "/$2 SelectFont"
echo "( ) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Greek() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset | awk '$1 ~ /\(\*[a-zA-Z]\)/'
echo "] def"
echo "/$2 SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Symbol() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset
echo "] def"
echo "ChangeMetrics"
echo "/S SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Special() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SpecialCharset
echo "] def"
echo "ChangeMetrics"
echo "/S1 SelectFont"
echo "(# Times-Roman special font\\\\n) Print"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
#
# The DESC file doesn't have to be built on a printer. It's only here for
# consistency.
#
Description() {
echo "/charset [" # awk - so the stack doesn't overflow
StandardCharset | awk '{print $1}'
SymbolCharset | awk '{print $1}'
SpecialCharset | awk '{print $1}'
echo "] def"
cat <<-//DESC
(#Device Description - Latin1 character set
PDL PostScript
Encoding Latin1
fonts 10 R I B BI CW H HI HB S1 S
sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
120 125 130 135 140 145 150 155 160 0
res $RESOLUTION
hor 1
vert 1
unitwidth $UNITWIDTH
) Print
//DESC
echo "(charset\\\\n) Print"
echo "BuildDescCharset"
echo "(\\\\n) Print"
}
0707070014231123401006440057030057030000010440460522627501500003400000000111post.src/devLatin1/LINKFILE #
# Creates missing width tables from existing ones.
#
rm -f HM
cp H HM
0707070014231123411006440057030057030000010440240522627501500002500000006137post.src/devLatin1/R name R
fontname Times-Roman
named in prologue
spacewidth 25
charset
! 33 2 33
" 41 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 56 0 43
, 25 1 44
- 33 0 173
\0255 "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 28 0 58
; 28 1 59
--- 56 2 60
= 56 0 61
--- 56 2 62
? 44 2 63
@ 92 3 64
A 72 2 65
B 67 2 66
C 67 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 72 2 71
H 72 2 72
I 33 2 73
J 39 2 74
K 72 2 75
L 61 2 76
M 89 2 77
N 72 2 78
O 72 2 79
P 56 2 80
Q 72 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 72 2 85
V 72 2 86
W 94 2 87
X 72 2 88
Y 72 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
^ 33 2 147
--- 47 2 94
--- 50 1 95
` 33 2 96
a 44 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 33 2 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 78 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 39 0 115
t 28 2 116
u 50 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
{ 48 3 123
--- 20 2 124
} 48 3 125
~ 33 2 148
--- 54 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 50 3 162
\0242 "
ct "
L- 50 2 163
\0243 "
ps "
xo 50 2 164
\0244 "
cr "
Y- 50 2 165
\0245 "
yn "
|| 20 2 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 76 2 169
\0251 "
a_ 28 2 170
\0252 "
<< 50 0 171
\0253 "
-, 56 0 172
\0254 "
hy 33 0 173
\0255 "
-- 56 0 45
ro 76 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 56 2 177
\0261 "
2^ 30 2 178
\0262 "
3^ 30 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 50 1 181
\0265 "
P! 45 3 182
\0266 "
pg "
.^ 25 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 30 2 185
\0271 "
o_ 31 2 186
\0272 "
>> 50 0 187
\0273 "
14 75 2 188
\0274 "
12 75 2 189
\0275 "
34 75 2 190
\0276 "
?? 44 1 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 89 2 198
\0306 "
C, 67 3 199
\0307 "
E` 61 2 200
\0310 "
E' 61 2 201
\0311 "
E^ 61 2 202
\0312 "
E" 61 2 203
\0313 "
I` 33 2 204
\0314 "
I' 33 2 205
\0315 "
I^ 33 2 206
\0316 "
I" 33 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 72 2 210
\0322 "
O' 72 2 211
\0323 "
O^ 72 2 212
\0324 "
O~ 72 2 213
\0325 "
O" 72 2 214
\0326 "
xx 56 0 215
\0327 "
O/ 72 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 72 2 221
\0335 "
TH 56 2 222
\0336 "
ss 50 2 223
\0337 "
a` 44 2 224
\0340 "
a' 44 2 225
\0341 "
a^ 44 2 226
\0342 "
a~ 44 2 227
\0343 "
a" 44 2 228
\0344 "
a* 44 2 229
\0345 "
ae 67 0 230
\0346 "
c, 44 1 231
\0347 "
e` 44 2 232
\0350 "
e' 44 2 233
\0351 "
e^ 44 2 234
\0352 "
e" 44 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 50 2 240
\0360 "
n~ 50 2 241
\0361 "
o` 50 2 242
\0362 "
o' 50 2 243
\0363 "
o^ 50 2 244
\0364 "
o~ 50 2 245
\0365 "
o" 50 2 246
\0366 "
-: 56 0 247
\0367 "
o/ 50 2 248
\0370 "
u` 50 2 249
\0371 "
u' 50 2 250
\0372 "
u^ 50 2 251
\0373 "
u" 50 2 252
\0374 "
y' 50 3 253
\0375 "
th 50 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123421006440057030057030000010441400522627501500002500000006140post.src/devLatin1/I name I
fontname Times-Italic
named in prologue
spacewidth 25
charset
! 33 2 33
" 42 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 68 2 43
, 25 1 44
- 33 0 173
\0255 "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
--- 68 2 60
= 68 0 61
--- 68 2 62
? 50 2 63
@ 92 3 64
A 61 2 65
B 61 2 66
C 67 2 67
D 72 2 68
E 61 2 69
F 61 2 70
G 72 2 71
H 72 2 72
I 33 2 73
J 44 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 67 2 78
O 72 2 79
P 61 2 80
Q 72 3 81
R 61 2 82
S 50 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 83 2 87
X 61 2 88
Y 56 2 89
Z 56 2 90
[ 39 3 91
\ 28 2 92
bs "
] 39 3 93
^ 33 2 147
--- 42 2 94
--- 50 1 95
` 33 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 28 3 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 44 2 107
l 28 2 108
m 72 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 39 0 114
s 39 0 115
t 28 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 40 3 123
--- 28 3 124
} 40 3 125
~ 33 2 148
--- 54 0 126
\` 33 2 145
ga "
!! 39 1 161
\0241 "
c| 50 3 162
\0242 "
ct "
L- 50 2 163
\0243 "
ps "
xo 50 2 164
\0244 "
cr "
Y- 50 2 165
\0245 "
yn "
|| 28 3 166
\0246 "
so 50 2 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 76 2 169
\0251 "
a_ 28 2 170
\0252 "
<< 50 0 171
\0253 "
-, 68 0 172
\0254 "
hy 33 0 173
\0255 "
-- 68 0 45
ro 76 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 68 2 177
\0261 "
2^ 30 2 178
\0262 "
3^ 30 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 50 1 181
\0265 "
P! 52 3 182
\0266 "
pg "
.^ 25 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 30 2 185
\0271 "
o_ 31 2 186
\0272 "
>> 50 0 187
\0273 "
14 75 2 188
\0274 "
12 75 2 189
\0275 "
34 75 2 190
\0276 "
?? 50 1 191
\0277 "
A` 61 2 192
\0300 "
A' 61 2 193
\0301 "
A^ 61 2 194
\0302 "
A~ 61 2 195
\0303 "
A" 61 2 196
\0304 "
A* 61 2 197
\0305 "
AE 89 2 198
\0306 "
C, 67 3 199
\0307 "
E` 61 2 200
\0310 "
E' 61 2 201
\0311 "
E^ 61 2 202
\0312 "
E" 61 2 203
\0313 "
I` 33 2 204
\0314 "
I' 33 2 205
\0315 "
I^ 33 2 206
\0316 "
I" 33 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 67 2 209
\0321 "
O` 72 2 210
\0322 "
O' 72 2 211
\0323 "
O^ 72 2 212
\0324 "
O~ 72 2 213
\0325 "
O" 72 2 214
\0326 "
xx 68 0 215
\0327 "
O/ 72 3 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 56 2 221
\0335 "
TH 61 2 222
\0336 "
ss 50 3 223
\0337 "
a` 50 2 224
\0340 "
a' 50 2 225
\0341 "
a^ 50 2 226
\0342 "
a~ 50 2 227
\0343 "
a" 50 2 228
\0344 "
a* 50 2 229
\0345 "
ae 67 0 230
\0346 "
c, 44 1 231
\0347 "
e` 44 2 232
\0350 "
e' 44 2 233
\0351 "
e^ 44 2 234
\0352 "
e" 44 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 50 2 240
\0360 "
n~ 50 2 241
\0361 "
o` 50 2 242
\0362 "
o' 50 2 243
\0363 "
o^ 50 2 244
\0364 "
o~ 50 2 245
\0365 "
o" 50 2 246
\0366 "
-: 68 2 247
\0367 "
o/ 50 3 248
\0370 "
u` 50 2 249
\0371 "
u' 50 2 250
\0372 "
u^ 50 2 251
\0373 "
u" 50 2 252
\0374 "
y' 44 3 253
\0375 "
th 50 3 254
\0376 "
y" 44 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123431006440057030057030000010441440522627501500002500000006141post.src/devLatin1/B name B
fontname Times-Bold
named in prologue
spacewidth 25
charset
! 33 2 33
" 56 2 34
dq "
# 50 2 35
$ 50 3 36
% 100 2 37
& 83 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 57 0 43
, 25 1 44
- 33 0 173
\0255 "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
--- 57 0 60
= 57 0 61
--- 57 0 62
? 50 2 63
@ 93 3 64
A 72 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 78 2 72
I 39 2 73
J 50 2 74
K 78 2 75
L 67 2 76
M 94 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 72 2 82
S 56 2 83
T 67 2 84
U 72 2 85
V 72 2 86
W 100 2 87
X 72 2 88
Y 72 2 89
Z 67 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
^ 33 2 147
--- 58 2 94
--- 50 1 95
` 33 2 96
a 50 0 97
b 56 2 98
c 44 0 99
d 56 2 100
e 44 0 101
f 33 2 102
g 50 1 103
h 56 2 104
i 28 2 105
j 33 3 106
k 56 2 107
l 28 2 108
m 83 0 109
n 56 0 110
o 50 0 111
p 56 1 112
q 56 1 113
r 44 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
{ 39 3 123
--- 22 3 124
} 39 3 125
~ 33 2 148
--- 52 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 50 3 162
\0242 "
ct "
L- 50 2 163
\0243 "
ps "
xo 50 2 164
\0244 "
cr "
Y- 50 2 165
\0245 "
yn "
|| 22 3 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 30 2 170
\0252 "
<< 50 0 171
\0253 "
-, 57 0 172
\0254 "
hy 33 0 173
\0255 "
-- 57 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 57 2 177
\0261 "
2^ 30 2 178
\0262 "
3^ 30 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 56 1 181
\0265 "
P! 54 3 182
\0266 "
pg "
.^ 25 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 30 2 185
\0271 "
o_ 33 2 186
\0272 "
>> 50 0 187
\0273 "
14 75 2 188
\0274 "
12 75 2 189
\0275 "
34 75 2 190
\0276 "
?? 50 1 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 67 2 200
\0310 "
E' 67 2 201
\0311 "
E^ 67 2 202
\0312 "
E" 67 2 203
\0313 "
I` 39 2 204
\0314 "
I' 39 2 205
\0315 "
I^ 39 2 206
\0316 "
I" 39 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 57 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 72 2 221
\0335 "
TH 61 2 222
\0336 "
ss 56 2 223
\0337 "
a` 50 2 224
\0340 "
a' 50 2 225
\0341 "
a^ 50 2 226
\0342 "
a~ 50 2 227
\0343 "
a" 50 2 228
\0344 "
a* 50 2 229
\0345 "
ae 72 0 230
\0346 "
c, 44 1 231
\0347 "
e` 44 2 232
\0350 "
e' 44 2 233
\0351 "
e^ 44 2 234
\0352 "
e" 44 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 50 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 50 2 242
\0362 "
o' 50 2 243
\0363 "
o^ 50 2 244
\0364 "
o~ 50 2 245
\0365 "
o" 50 2 246
\0366 "
-: 57 0 247
\0367 "
o/ 50 2 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 50 3 253
\0375 "
th 56 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123441006440057030057030000010441600522627501500002600000006145post.src/devLatin1/BI name BI
fontname Times-BoldItalic
named in prologue
spacewidth 25
charset
! 39 2 33
" 56 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 57 0 43
, 25 1 44
- 33 0 173
\0255 "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
--- 57 2 60
= 57 0 61
--- 57 2 62
? 50 2 63
@ 83 3 64
A 67 2 65
B 67 2 66
C 67 2 67
D 72 2 68
E 67 2 69
F 67 2 70
G 72 2 71
H 78 2 72
I 39 2 73
J 50 2 74
K 67 2 75
L 61 2 76
M 89 2 77
N 72 2 78
O 72 2 79
P 61 2 80
Q 72 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 89 2 87
X 67 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
^ 33 2 147
--- 57 2 94
--- 50 1 95
` 33 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 33 3 102
g 50 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 39 0 114
s 39 0 115
t 28 2 116
u 56 0 117
v 44 0 118
w 67 0 119
x 50 0 120
y 44 1 121
z 39 0 122
{ 35 3 123
--- 22 2 124
} 35 3 125
~ 33 2 148
--- 57 0 126
\` 33 2 145
ga "
!! 39 1 161
\0241 "
c| 50 3 162
\0242 "
ct "
L- 50 2 163
\0243 "
ps "
xo 50 2 164
\0244 "
cr "
Y- 50 2 165
\0245 "
yn "
|| 22 2 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 27 2 170
\0252 "
<< 50 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 57 2 177
\0261 "
2^ 30 2 178
\0262 "
3^ 30 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 58 1 181
\0265 "
P! 50 3 182
\0266 "
pg "
.^ 25 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 30 2 185
\0271 "
o_ 30 2 186
\0272 "
>> 50 0 187
\0273 "
14 75 2 188
\0274 "
12 75 2 189
\0275 "
34 75 2 190
\0276 "
?? 50 1 191
\0277 "
A` 67 2 192
\0300 "
A' 67 2 193
\0301 "
A^ 67 2 194
\0302 "
A~ 67 2 195
\0303 "
A" 67 2 196
\0304 "
A* 67 2 197
\0305 "
AE 94 2 198
\0306 "
C, 67 3 199
\0307 "
E` 67 2 200
\0310 "
E' 67 2 201
\0311 "
E^ 67 2 202
\0312 "
E" 67 2 203
\0313 "
I` 39 2 204
\0314 "
I' 39 2 205
\0315 "
I^ 39 2 206
\0316 "
I" 39 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 72 2 210
\0322 "
O' 72 2 211
\0323 "
O^ 72 2 212
\0324 "
O~ 72 2 213
\0325 "
O" 72 2 214
\0326 "
xx 57 0 215
\0327 "
O/ 72 3 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 61 2 221
\0335 "
TH 61 2 222
\0336 "
ss 50 3 223
\0337 "
a` 50 2 224
\0340 "
a' 50 2 225
\0341 "
a^ 50 2 226
\0342 "
a~ 50 2 227
\0343 "
a" 50 2 228
\0344 "
a* 50 2 229
\0345 "
ae 72 0 230
\0346 "
c, 44 1 231
\0347 "
e` 44 2 232
\0350 "
e' 44 2 233
\0351 "
e^ 44 2 234
\0352 "
e" 44 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 50 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 50 2 242
\0362 "
o' 50 2 243
\0363 "
o^ 50 2 244
\0364 "
o~ 50 2 245
\0365 "
o" 50 2 246
\0366 "
-: 57 0 247
\0367 "
o/ 50 3 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 44 3 253
\0375 "
th 50 3 254
\0376 "
y" 44 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123451006440057030057030000010441640522627501500002600000006145post.src/devLatin1/AB name AB
fontname AvantGarde-Demi
named in prologue
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 56 2 35
$ 56 2 36
% 86 2 37
& 68 2 38
' 28 2 39
( 38 3 40
) 38 3 41
* 44 2 42
+ 60 0 43
, 28 1 44
- 42 0 173
\0255 "
. 28 0 46
/ 46 3 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 56 2 63
@ 74 2 64
A 74 2 65
B 58 2 66
C 78 2 67
D 70 2 68
E 52 2 69
F 48 2 70
G 84 2 71
H 68 2 72
I 28 2 73
J 48 2 74
K 62 2 75
L 44 2 76
M 90 2 77
N 74 2 78
O 84 2 79
P 56 2 80
Q 84 2 81
R 58 2 82
S 52 2 83
T 42 2 84
U 64 2 85
V 70 2 86
W 90 2 87
X 68 2 88
Y 62 2 89
Z 50 2 90
[ 32 3 91
\ 64 2 92
bs "
] 32 3 93
^ 54 2 147
--- 60 2 94
--- 50 1 95
` 28 2 96
a 66 0 97
b 66 2 98
c 64 0 99
d 66 2 100
e 64 0 101
f 28 2 102
g 66 1 103
h 60 2 104
i 24 2 105
j 26 3 106
k 58 2 107
l 24 2 108
m 94 0 109
n 60 0 110
o 64 0 111
p 66 1 112
q 66 1 113
r 32 0 114
s 44 0 115
t 30 2 116
u 60 0 117
v 56 0 118
w 80 0 119
x 56 0 120
y 58 1 121
z 46 0 122
{ 34 3 123
--- 60 2 124
} 34 3 125
~ 48 2 148
--- 60 0 126
\` 42 2 145
ga "
!! 28 1 161
\0241 "
c| 56 2 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 2 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 60 2 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 50 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 36 2 170
\0252 "
<< 46 0 171
\0253 "
-, 60 0 172
\0254 "
hy 42 0 173
\0255 "
-- 60 0 45
ro 74 2 174
\0256 "
rg "
-^ 42 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 60 0 177
\0261 "
2^ 34 2 178
\0262 "
3^ 34 2 179
\0263 "
\' 42 2 180
\0264 "
aa "
/u 58 1 181
\0265 "
P! 60 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 34 1 184
\0270 "
,a "
1^ 34 2 185
\0271 "
o_ 36 2 186
\0272 "
>> 46 0 187
\0273 "
14 84 2 188
\0274 "
12 84 2 189
\0275 "
34 84 2 190
\0276 "
?? 56 1 191
\0277 "
A` 74 2 192
\0300 "
A' 74 2 193
\0301 "
A^ 74 2 194
\0302 "
A~ 74 2 195
\0303 "
A" 74 2 196
\0304 "
A* 74 2 197
\0305 "
AE 90 2 198
\0306 "
C, 78 3 199
\0307 "
E` 52 2 200
\0310 "
E' 52 2 201
\0311 "
E^ 52 2 202
\0312 "
E" 52 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 74 2 208
\0320 "
N~ 74 2 209
\0321 "
O` 84 2 210
\0322 "
O' 84 2 211
\0323 "
O^ 84 2 212
\0324 "
O~ 84 2 213
\0325 "
O" 84 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 84 2 216
\0330 "
U` 64 2 217
\0331 "
U' 64 2 218
\0332 "
U^ 64 2 219
\0333 "
U" 64 2 220
\0334 "
Y' 62 2 221
\0335 "
TH 56 2 222
\0336 "
ss 60 2 223
\0337 "
a` 66 2 224
\0340 "
a' 66 2 225
\0341 "
a^ 66 2 226
\0342 "
a~ 66 2 227
\0343 "
a" 66 2 228
\0344 "
a* 66 2 229
\0345 "
ae 108 0 230
\0346 "
c, 64 1 231
\0347 "
e` 64 2 232
\0350 "
e' 64 2 233
\0351 "
e^ 64 2 234
\0352 "
e" 64 2 235
\0353 "
i` 24 2 236
\0354 "
i' 24 2 237
\0355 "
i^ 24 2 238
\0356 "
i" 24 2 239
\0357 "
d- 64 2 240
\0360 "
n~ 60 2 241
\0361 "
o` 64 2 242
\0362 "
o' 64 2 243
\0363 "
o^ 64 2 244
\0364 "
o~ 64 2 245
\0365 "
o" 64 2 246
\0366 "
-: 60 0 247
\0367 "
o/ 66 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 58 3 253
\0375 "
th 66 3 254
\0376 "
y" 58 3 255
\0377 "
^a 54 2 147
~a 48 2 148
Ua 48 2 150
.a 28 2 151
oa 36 2 154
"a 70 2 157
Ca 34 1 158
va 54 2 159
0707070014231123461006440057030057030000010442000522627501500002600000006154post.src/devLatin1/AI name AI
fontname AvantGarde-BookOblique
named in prologue
spacewidth 28
charset
! 29 2 33
" 31 2 34
dq "
# 55 2 35
$ 55 2 36
% 78 2 37
& 76 2 38
' 35 2 39
( 37 3 40
) 37 3 41
* 43 2 42
+ 61 0 43
, 28 0 44
- 33 0 173
\0255 "
. 28 0 46
/ 44 3 47
0 55 2 48
1 55 2 49
2 55 2 50
3 55 2 51
4 55 2 52
5 55 2 53
6 55 2 54
7 55 2 55
8 55 2 56
9 55 2 57
: 28 0 58
; 28 0 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 59 2 63
@ 87 2 64
A 74 2 65
B 57 2 66
C 81 2 67
D 74 2 68
E 54 2 69
F 49 2 70
G 87 2 71
H 68 2 72
I 23 2 73
J 48 2 74
K 59 2 75
L 46 2 76
M 92 2 77
N 74 2 78
O 87 2 79
P 59 2 80
Q 87 2 81
R 61 2 82
S 50 2 83
T 43 2 84
U 66 2 85
V 70 2 86
W 96 2 87
X 61 2 88
Y 59 2 89
Z 48 2 90
[ 35 3 91
\ 61 2 92
bs "
] 35 3 93
^ 50 2 147
--- 61 2 94
--- 50 1 95
` 35 2 96
a 68 0 97
b 68 2 98
c 65 0 99
d 69 2 100
e 65 0 101
f 31 2 102
g 67 1 103
h 61 2 104
i 20 2 105
j 20 3 106
k 50 2 107
l 20 2 108
m 94 0 109
n 61 0 110
o 66 0 111
p 68 1 112
q 68 1 113
r 30 0 114
s 39 0 115
t 34 2 116
u 61 0 117
v 55 0 118
w 83 0 119
x 48 0 120
y 54 1 121
z 43 0 122
{ 35 3 123
--- 67 2 124
} 35 3 125
~ 44 2 148
--- 61 0 126
\` 38 2 145
ga "
!! 29 1 161
\0241 "
c| 55 2 162
\0242 "
ct "
L- 55 2 163
\0243 "
ps "
xo 55 0 164
\0244 "
cr "
Y- 55 2 165
\0245 "
yn "
|| 67 2 166
\0246 "
so 62 3 167
\0247 "
sc "
"" 37 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 37 2 170
\0252 "
<< 43 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 49 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 38 2 180
\0264 "
aa "
/u 61 1 181
\0265 "
P! 56 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 32 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 43 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 59 1 191
\0277 "
A` 74 2 192
\0300 "
A' 74 2 193
\0301 "
A^ 74 2 194
\0302 "
A~ 74 2 195
\0303 "
A" 74 2 196
\0304 "
A* 74 2 197
\0305 "
AE 99 2 198
\0306 "
C, 81 3 199
\0307 "
E` 54 2 200
\0310 "
E' 54 2 201
\0311 "
E^ 54 2 202
\0312 "
E" 54 2 203
\0313 "
I` 23 2 204
\0314 "
I' 23 2 205
\0315 "
I^ 23 2 206
\0316 "
I" 23 2 207
\0317 "
D- 79 2 208
\0320 "
N~ 74 2 209
\0321 "
O` 87 2 210
\0322 "
O' 87 2 211
\0323 "
O^ 87 2 212
\0324 "
O~ 87 2 213
\0325 "
O" 87 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 87 2 216
\0330 "
U` 66 2 217
\0331 "
U' 66 2 218
\0332 "
U^ 66 2 219
\0333 "
U" 66 2 220
\0334 "
Y' 59 2 221
\0335 "
TH 59 2 222
\0336 "
ss 55 2 223
\0337 "
a` 68 2 224
\0340 "
a' 68 2 225
\0341 "
a^ 68 2 226
\0342 "
a~ 68 2 227
\0343 "
a" 68 2 228
\0344 "
a* 68 2 229
\0345 "
ae 116 0 230
\0346 "
c, 65 1 231
\0347 "
e` 65 2 232
\0350 "
e' 65 2 233
\0351 "
e^ 65 2 234
\0352 "
e" 65 2 235
\0353 "
i` 20 2 236
\0354 "
i' 20 2 237
\0355 "
i^ 20 2 238
\0356 "
i" 20 2 239
\0357 "
d- 66 2 240
\0360 "
n~ 61 2 241
\0361 "
o` 66 2 242
\0362 "
o' 66 2 243
\0363 "
o^ 66 2 244
\0364 "
o~ 66 2 245
\0365 "
o" 66 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 65 0 248
\0370 "
u` 61 2 249
\0371 "
u' 61 2 250
\0372 "
u^ 61 2 251
\0373 "
u" 61 2 252
\0374 "
y' 54 3 253
\0375 "
th 68 3 254
\0376 "
y" 54 3 255
\0377 "
^a 50 2 147
~a 44 2 148
Ua 45 2 150
.a 22 2 151
oa 33 2 154
"a 55 2 157
Ca 30 1 158
va 50 2 159
0707070014231123471006440057030057030000010442040522627501500002600000006145post.src/devLatin1/AR name AR
fontname AvantGarde-Book
named in prologue
spacewidth 28
charset
! 29 2 33
" 31 2 34
dq "
# 55 2 35
$ 55 2 36
% 78 2 37
& 76 2 38
' 35 2 39
( 37 3 40
) 37 3 41
* 43 2 42
+ 61 0 43
, 28 0 44
- 33 0 173
\0255 "
. 28 0 46
/ 44 3 47
0 55 2 48
1 55 2 49
2 55 2 50
3 55 2 51
4 55 2 52
5 55 2 53
6 55 2 54
7 55 2 55
8 55 2 56
9 55 2 57
: 28 0 58
; 28 0 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 59 2 63
@ 87 2 64
A 74 2 65
B 57 2 66
C 81 2 67
D 74 2 68
E 54 2 69
F 49 2 70
G 87 2 71
H 68 2 72
I 23 2 73
J 48 2 74
K 59 2 75
L 46 2 76
M 92 2 77
N 74 2 78
O 87 2 79
P 59 2 80
Q 87 2 81
R 61 2 82
S 50 2 83
T 43 2 84
U 66 2 85
V 70 2 86
W 96 2 87
X 61 2 88
Y 59 2 89
Z 48 2 90
[ 35 3 91
\ 61 2 92
bs "
] 35 3 93
^ 50 2 147
--- 61 2 94
--- 50 1 95
` 35 2 96
a 68 0 97
b 68 2 98
c 65 0 99
d 69 2 100
e 65 0 101
f 31 2 102
g 67 1 103
h 61 2 104
i 20 2 105
j 20 3 106
k 50 2 107
l 20 2 108
m 94 0 109
n 61 0 110
o 66 0 111
p 68 1 112
q 68 1 113
r 30 0 114
s 39 0 115
t 34 2 116
u 61 0 117
v 55 0 118
w 83 0 119
x 48 0 120
y 54 1 121
z 43 0 122
{ 35 3 123
--- 67 2 124
} 35 3 125
~ 44 2 148
--- 61 0 126
\` 38 2 145
ga "
!! 29 1 161
\0241 "
c| 55 2 162
\0242 "
ct "
L- 55 2 163
\0243 "
ps "
xo 55 0 164
\0244 "
cr "
Y- 55 2 165
\0245 "
yn "
|| 67 2 166
\0246 "
so 62 3 167
\0247 "
sc "
"" 37 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 37 2 170
\0252 "
<< 43 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 49 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 38 2 180
\0264 "
aa "
/u 61 1 181
\0265 "
P! 56 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 32 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 43 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 59 1 191
\0277 "
A` 74 2 192
\0300 "
A' 74 2 193
\0301 "
A^ 74 2 194
\0302 "
A~ 74 2 195
\0303 "
A" 74 2 196
\0304 "
A* 74 2 197
\0305 "
AE 99 2 198
\0306 "
C, 81 3 199
\0307 "
E` 54 2 200
\0310 "
E' 54 2 201
\0311 "
E^ 54 2 202
\0312 "
E" 54 2 203
\0313 "
I` 23 2 204
\0314 "
I' 23 2 205
\0315 "
I^ 23 2 206
\0316 "
I" 23 2 207
\0317 "
D- 79 2 208
\0320 "
N~ 74 2 209
\0321 "
O` 87 2 210
\0322 "
O' 87 2 211
\0323 "
O^ 87 2 212
\0324 "
O~ 87 2 213
\0325 "
O" 87 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 87 2 216
\0330 "
U` 66 2 217
\0331 "
U' 66 2 218
\0332 "
U^ 66 2 219
\0333 "
U" 66 2 220
\0334 "
Y' 59 2 221
\0335 "
TH 59 2 222
\0336 "
ss 55 2 223
\0337 "
a` 68 2 224
\0340 "
a' 68 2 225
\0341 "
a^ 68 2 226
\0342 "
a~ 68 2 227
\0343 "
a" 68 2 228
\0344 "
a* 68 2 229
\0345 "
ae 116 0 230
\0346 "
c, 65 1 231
\0347 "
e` 65 2 232
\0350 "
e' 65 2 233
\0351 "
e^ 65 2 234
\0352 "
e" 65 2 235
\0353 "
i` 20 2 236
\0354 "
i' 20 2 237
\0355 "
i^ 20 2 238
\0356 "
i" 20 2 239
\0357 "
d- 66 2 240
\0360 "
n~ 61 2 241
\0361 "
o` 66 2 242
\0362 "
o' 66 2 243
\0363 "
o^ 66 2 244
\0364 "
o~ 66 2 245
\0365 "
o" 66 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 65 0 248
\0370 "
u` 61 2 249
\0371 "
u' 61 2 250
\0372 "
u^ 61 2 251
\0373 "
u" 61 2 252
\0374 "
y' 54 3 253
\0375 "
th 68 3 254
\0376 "
y" 54 3 255
\0377 "
^a 50 2 147
~a 44 2 148
Ua 45 2 150
.a 22 2 151
oa 33 2 154
"a 55 2 157
Ca 30 1 158
va 50 2 159
0707070014231123501006440057030057030000010442200522627501500002600000006154post.src/devLatin1/AX name AX
fontname AvantGarde-DemiOblique
named in prologue
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 56 2 35
$ 56 2 36
% 86 2 37
& 68 2 38
' 28 2 39
( 38 3 40
) 38 3 41
* 44 2 42
+ 60 0 43
, 28 1 44
- 42 0 173
\0255 "
. 28 0 46
/ 46 3 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 56 2 63
@ 74 2 64
A 74 2 65
B 58 2 66
C 78 2 67
D 70 2 68
E 52 2 69
F 48 2 70
G 84 2 71
H 68 2 72
I 28 2 73
J 48 2 74
K 62 2 75
L 44 2 76
M 90 2 77
N 74 2 78
O 84 2 79
P 56 2 80
Q 84 2 81
R 58 2 82
S 52 2 83
T 42 2 84
U 64 2 85
V 70 2 86
W 90 2 87
X 68 2 88
Y 62 2 89
Z 50 2 90
[ 32 3 91
\ 64 2 92
bs "
] 32 3 93
^ 54 2 147
--- 60 2 94
--- 50 1 95
` 28 2 96
a 66 0 97
b 66 2 98
c 64 0 99
d 66 2 100
e 64 0 101
f 28 2 102
g 66 1 103
h 60 2 104
i 24 2 105
j 26 3 106
k 58 2 107
l 24 2 108
m 94 0 109
n 60 0 110
o 64 0 111
p 66 1 112
q 66 1 113
r 32 0 114
s 44 0 115
t 30 2 116
u 60 0 117
v 56 0 118
w 80 0 119
x 56 0 120
y 58 1 121
z 46 0 122
{ 34 3 123
--- 60 2 124
} 34 3 125
~ 48 2 148
--- 60 0 126
\` 42 2 145
ga "
!! 28 1 161
\0241 "
c| 56 2 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 2 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 60 2 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 50 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 36 2 170
\0252 "
<< 46 0 171
\0253 "
-, 60 0 172
\0254 "
hy 42 0 173
\0255 "
-- 60 0 45
ro 74 2 174
\0256 "
rg "
-^ 42 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 60 0 177
\0261 "
2^ 34 2 178
\0262 "
3^ 34 2 179
\0263 "
\' 42 2 180
\0264 "
aa "
/u 58 1 181
\0265 "
P! 60 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 34 1 184
\0270 "
,a "
1^ 34 2 185
\0271 "
o_ 36 2 186
\0272 "
>> 46 0 187
\0273 "
14 84 2 188
\0274 "
12 84 2 189
\0275 "
34 84 2 190
\0276 "
?? 56 1 191
\0277 "
A` 74 2 192
\0300 "
A' 74 2 193
\0301 "
A^ 74 2 194
\0302 "
A~ 74 2 195
\0303 "
A" 74 2 196
\0304 "
A* 74 2 197
\0305 "
AE 90 2 198
\0306 "
C, 78 3 199
\0307 "
E` 52 2 200
\0310 "
E' 52 2 201
\0311 "
E^ 52 2 202
\0312 "
E" 52 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 74 2 208
\0320 "
N~ 74 2 209
\0321 "
O` 84 2 210
\0322 "
O' 84 2 211
\0323 "
O^ 84 2 212
\0324 "
O~ 84 2 213
\0325 "
O" 84 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 84 2 216
\0330 "
U` 64 2 217
\0331 "
U' 64 2 218
\0332 "
U^ 64 2 219
\0333 "
U" 64 2 220
\0334 "
Y' 62 2 221
\0335 "
TH 56 2 222
\0336 "
ss 60 2 223
\0337 "
a` 66 2 224
\0340 "
a' 66 2 225
\0341 "
a^ 66 2 226
\0342 "
a~ 66 2 227
\0343 "
a" 66 2 228
\0344 "
a* 66 2 229
\0345 "
ae 108 0 230
\0346 "
c, 64 1 231
\0347 "
e` 64 2 232
\0350 "
e' 64 2 233
\0351 "
e^ 64 2 234
\0352 "
e" 64 2 235
\0353 "
i` 24 2 236
\0354 "
i' 24 2 237
\0355 "
i^ 24 2 238
\0356 "
i" 24 2 239
\0357 "
d- 64 2 240
\0360 "
n~ 60 2 241
\0361 "
o` 64 2 242
\0362 "
o' 64 2 243
\0363 "
o^ 64 2 244
\0364 "
o~ 64 2 245
\0365 "
o" 64 2 246
\0366 "
-: 60 0 247
\0367 "
o/ 66 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 58 3 253
\0375 "
th 66 3 254
\0376 "
y" 58 3 255
\0377 "
^a 54 2 147
~a 48 2 148
Ua 48 2 150
.a 28 2 151
oa 36 2 154
"a 70 2 157
Ca 34 1 158
va 54 2 159
0707070014231123511006440057030057030000010442240522627501500002500000006137post.src/devLatin1/H name H
fontname Helvetica
named in prologue
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 56 2 63
@ 102 3 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 28 3 91
\ 28 2 92
bs "
] 28 3 93
^ 33 2 147
--- 47 2 94
--- 56 1 95
` 22 2 96
a 56 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 56 0 101
f 28 2 102
g 56 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 26 3 124
} 33 3 125
~ 33 2 148
--- 58 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 0 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 26 3 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 37 2 170
\0252 "
<< 56 0 171
\0253 "
-, 58 0 172
\0254 "
hy 33 0 173
\0255 "
-- 58 0 45
ro 74 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 58 2 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 56 1 181
\0265 "
P! 54 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 56 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 61 1 191
\0277 "
A` 67 2 192
\0300 "
A' 67 2 193
\0301 "
A^ 67 2 194
\0302 "
A~ 67 2 195
\0303 "
A" 67 2 196
\0304 "
A* 67 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 67 2 200
\0310 "
E' 67 2 201
\0311 "
E^ 67 2 202
\0312 "
E" 67 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 58 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 67 2 221
\0335 "
TH 67 2 222
\0336 "
ss 61 2 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 89 0 230
\0346 "
c, 50 1 231
\0347 "
e` 56 2 232
\0350 "
e' 56 2 233
\0351 "
e^ 56 2 234
\0352 "
e" 56 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 56 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 56 2 242
\0362 "
o' 56 2 243
\0363 "
o^ 56 2 244
\0364 "
o~ 56 2 245
\0365 "
o" 56 2 246
\0366 "
-: 58 0 247
\0367 "
o/ 61 0 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 50 3 253
\0375 "
th 56 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123521006440057030057030000010442400522627501500002600000006144post.src/devLatin1/HB name HB
fontname Helvetica-Bold
named in prologue
spacewidth 28
charset
! 33 2 33
" 47 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 72 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 33 0 58
; 33 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 61 2 63
@ 98 3 64
A 72 2 65
B 72 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 56 2 74
K 72 2 75
L 61 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
^ 33 2 147
--- 58 2 94
--- 56 1 95
` 28 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 33 2 102
g 61 1 103
h 61 2 104
i 28 2 105
j 28 3 106
k 56 2 107
l 28 2 108
m 89 0 109
n 61 0 110
o 61 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 56 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 78 0 119
x 56 0 120
y 56 1 121
z 50 0 122
{ 39 3 123
--- 28 3 124
} 39 3 125
~ 33 2 148
--- 58 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 2 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 28 3 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 37 2 170
\0252 "
<< 56 0 171
\0253 "
-, 58 0 172
\0254 "
hy 33 0 173
\0255 "
-- 58 0 45
ro 74 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 58 2 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 61 1 181
\0265 "
P! 56 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 56 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 61 1 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 67 2 200
\0310 "
E' 67 2 201
\0311 "
E^ 67 2 202
\0312 "
E" 67 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 58 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 67 2 221
\0335 "
TH 67 2 222
\0336 "
ss 61 2 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 89 0 230
\0346 "
c, 56 1 231
\0347 "
e` 56 2 232
\0350 "
e' 56 2 233
\0351 "
e^ 56 2 234
\0352 "
e" 56 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 61 2 240
\0360 "
n~ 61 2 241
\0361 "
o` 61 2 242
\0362 "
o' 61 2 243
\0363 "
o^ 61 2 244
\0364 "
o~ 61 2 245
\0365 "
o" 61 2 246
\0366 "
-: 58 0 247
\0367 "
o/ 61 0 248
\0370 "
u` 61 2 249
\0371 "
u' 61 2 250
\0372 "
u^ 61 2 251
\0373 "
u" 61 2 252
\0374 "
y' 56 3 253
\0375 "
th 61 3 254
\0376 "
y" 56 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123531006440057030057030000010442440522627501500002600000006150post.src/devLatin1/HI name HI
fontname Helvetica-Oblique
named in prologue
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 56 2 63
@ 102 3 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 28 3 91
\ 28 2 92
bs "
] 28 3 93
^ 33 2 147
--- 47 2 94
--- 56 1 95
` 22 2 96
a 56 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 56 0 101
f 28 2 102
g 56 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 26 3 124
} 33 3 125
~ 33 2 148
--- 58 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 0 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 26 3 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 37 2 170
\0252 "
<< 56 0 171
\0253 "
-, 58 0 172
\0254 "
hy 33 0 173
\0255 "
-- 58 0 45
ro 74 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 58 2 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 56 1 181
\0265 "
P! 54 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 56 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 61 1 191
\0277 "
A` 67 2 192
\0300 "
A' 67 2 193
\0301 "
A^ 67 2 194
\0302 "
A~ 67 2 195
\0303 "
A" 67 2 196
\0304 "
A* 67 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 67 2 200
\0310 "
E' 67 2 201
\0311 "
E^ 67 2 202
\0312 "
E" 67 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 58 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 67 2 221
\0335 "
TH 67 2 222
\0336 "
ss 61 2 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 89 0 230
\0346 "
c, 50 1 231
\0347 "
e` 56 2 232
\0350 "
e' 56 2 233
\0351 "
e^ 56 2 234
\0352 "
e" 56 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 56 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 56 2 242
\0362 "
o' 56 2 243
\0363 "
o^ 56 2 244
\0364 "
o~ 56 2 245
\0365 "
o" 56 2 246
\0366 "
-: 58 0 247
\0367 "
o/ 61 0 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 50 3 253
\0375 "
th 56 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123541006440057030057030000010442600522627501500002600000006153post.src/devLatin1/HX name HX
fontname Helvetica-BoldOblique
named in prologue
spacewidth 28
charset
! 33 2 33
" 47 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 72 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 33 0 58
; 33 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 61 2 63
@ 98 3 64
A 72 2 65
B 72 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 56 2 74
K 72 2 75
L 61 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
^ 33 2 147
--- 58 2 94
--- 56 1 95
` 28 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 33 2 102
g 61 1 103
h 61 2 104
i 28 2 105
j 28 3 106
k 56 2 107
l 28 2 108
m 89 0 109
n 61 0 110
o 61 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 56 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 78 0 119
x 56 0 120
y 56 1 121
z 50 0 122
{ 39 3 123
--- 28 3 124
} 39 3 125
~ 33 2 148
--- 58 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 2 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 28 3 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 37 2 170
\0252 "
<< 56 0 171
\0253 "
-, 58 0 172
\0254 "
hy 33 0 173
\0255 "
-- 58 0 45
ro 74 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 58 2 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 61 1 181
\0265 "
P! 56 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 56 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 61 1 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 67 2 200
\0310 "
E' 67 2 201
\0311 "
E^ 67 2 202
\0312 "
E" 67 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 58 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 67 2 221
\0335 "
TH 67 2 222
\0336 "
ss 61 2 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 89 0 230
\0346 "
c, 56 1 231
\0347 "
e` 56 2 232
\0350 "
e' 56 2 233
\0351 "
e^ 56 2 234
\0352 "
e" 56 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 61 2 240
\0360 "
n~ 61 2 241
\0361 "
o` 61 2 242
\0362 "
o' 61 2 243
\0363 "
o^ 61 2 244
\0364 "
o~ 61 2 245
\0365 "
o" 61 2 246
\0366 "
-: 58 0 247
\0367 "
o/ 61 0 248
\0370 "
u` 61 2 249
\0371 "
u' 61 2 250
\0372 "
u^ 61 2 251
\0373 "
u" 61 2 252
\0374 "
y' 56 3 253
\0375 "
th 61 3 254
\0376 "
y" 56 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123551006440057030057030000010442640522627501600002600000006152post.src/devLatin1/Hb name Hb
fontname Helvetica-Narrow-Bold
named in prologue
spacewidth 23
charset
! 27 2 33
" 39 2 34
dq "
# 46 2 35
$ 46 3 36
% 73 2 37
& 59 2 38
' 23 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
- 27 0 173
\0255 "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 27 0 58
; 27 1 59
--- 48 0 60
= 48 0 61
--- 48 0 62
? 50 2 63
@ 80 3 64
A 59 2 65
B 59 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 46 2 74
K 59 2 75
L 50 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 27 3 91
\ 23 2 92
bs "
] 27 3 93
^ 27 2 147
--- 48 2 94
--- 46 1 95
` 23 2 96
a 46 0 97
b 50 2 98
c 46 0 99
d 50 2 100
e 46 0 101
f 27 2 102
g 50 1 103
h 50 2 104
i 23 2 105
j 23 3 106
k 46 2 107
l 23 2 108
m 73 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 32 0 114
s 46 0 115
t 27 2 116
u 50 0 117
v 46 0 118
w 64 0 119
x 46 0 120
y 46 1 121
z 41 0 122
{ 32 3 123
--- 23 3 124
} 32 3 125
~ 27 2 148
--- 48 0 126
\` 27 2 145
ga "
!! 27 1 161
\0241 "
c| 46 3 162
\0242 "
ct "
L- 46 2 163
\0243 "
ps "
xo 46 2 164
\0244 "
cr "
Y- 46 2 165
\0245 "
yn "
|| 23 3 166
\0246 "
so 46 3 167
\0247 "
sc "
"" 27 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 30 2 170
\0252 "
<< 46 0 171
\0253 "
-, 48 0 172
\0254 "
hy 27 0 173
\0255 "
-- 48 0 45
ro 60 2 174
\0256 "
rg "
-^ 27 2 175
\0257 "
-a "
0^ 33 2 176
\0260 "
+- 48 2 177
\0261 "
2^ 27 2 178
\0262 "
3^ 27 2 179
\0263 "
\' 27 2 180
\0264 "
aa "
/u 50 1 181
\0265 "
P! 46 3 182
\0266 "
pg "
.^ 23 0 183
\0267 "
,, 27 1 184
\0270 "
,a "
1^ 27 2 185
\0271 "
o_ 30 2 186
\0272 "
>> 46 0 187
\0273 "
14 68 2 188
\0274 "
12 68 2 189
\0275 "
34 68 2 190
\0276 "
?? 50 1 191
\0277 "
A` 59 2 192
\0300 "
A' 59 2 193
\0301 "
A^ 59 2 194
\0302 "
A~ 59 2 195
\0303 "
A" 59 2 196
\0304 "
A* 59 2 197
\0305 "
AE 82 2 198
\0306 "
C, 59 3 199
\0307 "
E` 55 2 200
\0310 "
E' 55 2 201
\0311 "
E^ 55 2 202
\0312 "
E" 55 2 203
\0313 "
I` 23 2 204
\0314 "
I' 23 2 205
\0315 "
I^ 23 2 206
\0316 "
I" 23 2 207
\0317 "
D- 59 2 208
\0320 "
N~ 59 2 209
\0321 "
O` 64 2 210
\0322 "
O' 64 2 211
\0323 "
O^ 64 2 212
\0324 "
O~ 64 2 213
\0325 "
O" 64 2 214
\0326 "
xx 48 0 215
\0327 "
O/ 64 2 216
\0330 "
U` 59 2 217
\0331 "
U' 59 2 218
\0332 "
U^ 59 2 219
\0333 "
U" 59 2 220
\0334 "
Y' 55 2 221
\0335 "
TH 55 2 222
\0336 "
ss 50 2 223
\0337 "
a` 46 2 224
\0340 "
a' 46 2 225
\0341 "
a^ 46 2 226
\0342 "
a~ 46 2 227
\0343 "
a" 46 2 228
\0344 "
a* 46 2 229
\0345 "
ae 73 0 230
\0346 "
c, 46 1 231
\0347 "
e` 46 2 232
\0350 "
e' 46 2 233
\0351 "
e^ 46 2 234
\0352 "
e" 46 2 235
\0353 "
i` 23 2 236
\0354 "
i' 23 2 237
\0355 "
i^ 23 2 238
\0356 "
i" 23 2 239
\0357 "
d- 50 2 240
\0360 "
n~ 50 2 241
\0361 "
o` 50 2 242
\0362 "
o' 50 2 243
\0363 "
o^ 50 2 244
\0364 "
o~ 50 2 245
\0365 "
o" 50 2 246
\0366 "
-: 48 0 247
\0367 "
o/ 50 0 248
\0370 "
u` 50 2 249
\0371 "
u' 50 2 250
\0372 "
u^ 50 2 251
\0373 "
u" 50 2 252
\0374 "
y' 46 3 253
\0375 "
th 50 3 254
\0376 "
y" 46 3 255
\0377 "
^a 27 2 147
~a 27 2 148
Ua 27 2 150
.a 27 2 151
oa 27 2 154
"a 27 2 157
Ca 27 1 158
va 27 2 159
0707070014231123561006440057030057030000010443000522627501600002600000006155post.src/devLatin1/Hi name Hi
fontname Helvetica-Narrow-Oblique
named in prologue
spacewidth 23
charset
! 23 2 33
" 29 2 34
dq "
# 46 2 35
$ 46 3 36
% 73 2 37
& 55 2 38
' 18 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
- 27 0 173
\0255 "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 23 0 58
; 23 1 59
--- 48 0 60
= 48 0 61
--- 48 0 62
? 46 2 63
@ 83 3 64
A 55 2 65
B 55 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 41 2 74
K 55 2 75
L 46 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 23 3 91
\ 23 2 92
bs "
] 23 3 93
^ 27 2 147
--- 38 2 94
--- 46 1 95
` 18 2 96
a 46 0 97
b 46 2 98
c 41 0 99
d 46 2 100
e 46 0 101
f 23 2 102
g 46 1 103
h 46 2 104
i 18 2 105
j 18 3 106
k 41 2 107
l 18 2 108
m 68 0 109
n 46 0 110
o 46 0 111
p 46 1 112
q 46 1 113
r 27 0 114
s 41 0 115
t 23 2 116
u 46 0 117
v 41 0 118
w 59 0 119
x 41 0 120
y 41 1 121
z 41 0 122
{ 27 3 123
--- 21 3 124
} 27 3 125
~ 27 2 148
--- 48 0 126
\` 27 2 145
ga "
!! 27 1 161
\0241 "
c| 46 3 162
\0242 "
ct "
L- 46 2 163
\0243 "
ps "
xo 46 0 164
\0244 "
cr "
Y- 46 2 165
\0245 "
yn "
|| 21 3 166
\0246 "
so 46 3 167
\0247 "
sc "
"" 27 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 30 2 170
\0252 "
<< 46 0 171
\0253 "
-, 48 0 172
\0254 "
hy 27 0 173
\0255 "
-- 48 0 45
ro 60 2 174
\0256 "
rg "
-^ 27 2 175
\0257 "
-a "
0^ 33 2 176
\0260 "
+- 48 2 177
\0261 "
2^ 27 2 178
\0262 "
3^ 27 2 179
\0263 "
\' 27 2 180
\0264 "
aa "
/u 46 1 181
\0265 "
P! 44 3 182
\0266 "
pg "
.^ 23 0 183
\0267 "
,, 27 1 184
\0270 "
,a "
1^ 27 2 185
\0271 "
o_ 30 2 186
\0272 "
>> 46 0 187
\0273 "
14 68 2 188
\0274 "
12 68 2 189
\0275 "
34 68 2 190
\0276 "
?? 50 1 191
\0277 "
A` 55 2 192
\0300 "
A' 55 2 193
\0301 "
A^ 55 2 194
\0302 "
A~ 55 2 195
\0303 "
A" 55 2 196
\0304 "
A* 55 2 197
\0305 "
AE 82 2 198
\0306 "
C, 59 3 199
\0307 "
E` 55 2 200
\0310 "
E' 55 2 201
\0311 "
E^ 55 2 202
\0312 "
E" 55 2 203
\0313 "
I` 23 2 204
\0314 "
I' 23 2 205
\0315 "
I^ 23 2 206
\0316 "
I" 23 2 207
\0317 "
D- 59 2 208
\0320 "
N~ 59 2 209
\0321 "
O` 64 2 210
\0322 "
O' 64 2 211
\0323 "
O^ 64 2 212
\0324 "
O~ 64 2 213
\0325 "
O" 64 2 214
\0326 "
xx 48 0 215
\0327 "
O/ 64 2 216
\0330 "
U` 59 2 217
\0331 "
U' 59 2 218
\0332 "
U^ 59 2 219
\0333 "
U" 59 2 220
\0334 "
Y' 55 2 221
\0335 "
TH 55 2 222
\0336 "
ss 50 2 223
\0337 "
a` 46 2 224
\0340 "
a' 46 2 225
\0341 "
a^ 46 2 226
\0342 "
a~ 46 2 227
\0343 "
a" 46 2 228
\0344 "
a* 46 2 229
\0345 "
ae 73 0 230
\0346 "
c, 41 1 231
\0347 "
e` 46 2 232
\0350 "
e' 46 2 233
\0351 "
e^ 46 2 234
\0352 "
e" 46 2 235
\0353 "
i` 23 2 236
\0354 "
i' 23 2 237
\0355 "
i^ 23 2 238
\0356 "
i" 23 2 239
\0357 "
d- 46 2 240
\0360 "
n~ 46 2 241
\0361 "
o` 46 2 242
\0362 "
o' 46 2 243
\0363 "
o^ 46 2 244
\0364 "
o~ 46 2 245
\0365 "
o" 46 2 246
\0366 "
-: 48 0 247
\0367 "
o/ 50 0 248
\0370 "
u` 46 2 249
\0371 "
u' 46 2 250
\0372 "
u^ 46 2 251
\0373 "
u" 46 2 252
\0374 "
y' 41 3 253
\0375 "
th 46 3 254
\0376 "
y" 41 3 255
\0377 "
^a 27 2 147
~a 27 2 148
Ua 27 2 150
.a 27 2 151
oa 27 2 154
"a 27 2 157
Ca 27 1 158
va 27 2 159
0707070014231123571006440057030057030000010443040522627501600002600000006145post.src/devLatin1/Hr name Hr
fontname Helvetica-Narrow
named in prologue
spacewidth 23
charset
! 23 2 33
" 29 2 34
dq "
# 46 2 35
$ 46 3 36
% 73 2 37
& 55 2 38
' 18 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
- 27 0 173
\0255 "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 23 0 58
; 23 1 59
--- 48 0 60
= 48 0 61
--- 48 0 62
? 46 2 63
@ 83 3 64
A 55 2 65
B 55 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 41 2 74
K 55 2 75
L 46 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 23 3 91
\ 23 2 92
bs "
] 23 3 93
^ 27 2 147
--- 38 2 94
--- 46 1 95
` 18 2 96
a 46 0 97
b 46 2 98
c 41 0 99
d 46 2 100
e 46 0 101
f 23 2 102
g 46 1 103
h 46 2 104
i 18 2 105
j 18 3 106
k 41 2 107
l 18 2 108
m 68 0 109
n 46 0 110
o 46 0 111
p 46 1 112
q 46 1 113
r 27 0 114
s 41 0 115
t 23 2 116
u 46 0 117
v 41 0 118
w 59 0 119
x 41 0 120
y 41 1 121
z 41 0 122
{ 27 3 123
--- 21 3 124
} 27 3 125
~ 27 2 148
--- 48 0 126
\` 27 2 145
ga "
!! 27 1 161
\0241 "
c| 46 3 162
\0242 "
ct "
L- 46 2 163
\0243 "
ps "
xo 46 0 164
\0244 "
cr "
Y- 46 2 165
\0245 "
yn "
|| 21 3 166
\0246 "
so 46 3 167
\0247 "
sc "
"" 27 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 30 2 170
\0252 "
<< 46 0 171
\0253 "
-, 48 0 172
\0254 "
hy 27 0 173
\0255 "
-- 48 0 45
ro 60 2 174
\0256 "
rg "
-^ 27 2 175
\0257 "
-a "
0^ 33 2 176
\0260 "
+- 48 2 177
\0261 "
2^ 27 2 178
\0262 "
3^ 27 2 179
\0263 "
\' 27 2 180
\0264 "
aa "
/u 46 1 181
\0265 "
P! 44 3 182
\0266 "
pg "
.^ 23 0 183
\0267 "
,, 27 1 184
\0270 "
,a "
1^ 27 2 185
\0271 "
o_ 30 2 186
\0272 "
>> 46 0 187
\0273 "
14 68 2 188
\0274 "
12 68 2 189
\0275 "
34 68 2 190
\0276 "
?? 50 1 191
\0277 "
A` 55 2 192
\0300 "
A' 55 2 193
\0301 "
A^ 55 2 194
\0302 "
A~ 55 2 195
\0303 "
A" 55 2 196
\0304 "
A* 55 2 197
\0305 "
AE 82 2 198
\0306 "
C, 59 3 199
\0307 "
E` 55 2 200
\0310 "
E' 55 2 201
\0311 "
E^ 55 2 202
\0312 "
E" 55 2 203
\0313 "
I` 23 2 204
\0314 "
I' 23 2 205
\0315 "
I^ 23 2 206
\0316 "
I" 23 2 207
\0317 "
D- 59 2 208
\0320 "
N~ 59 2 209
\0321 "
O` 64 2 210
\0322 "
O' 64 2 211
\0323 "
O^ 64 2 212
\0324 "
O~ 64 2 213
\0325 "
O" 64 2 214
\0326 "
xx 48 0 215
\0327 "
O/ 64 2 216
\0330 "
U` 59 2 217
\0331 "
U' 59 2 218
\0332 "
U^ 59 2 219
\0333 "
U" 59 2 220
\0334 "
Y' 55 2 221
\0335 "
TH 55 2 222
\0336 "
ss 50 2 223
\0337 "
a` 46 2 224
\0340 "
a' 46 2 225
\0341 "
a^ 46 2 226
\0342 "
a~ 46 2 227
\0343 "
a" 46 2 228
\0344 "
a* 46 2 229
\0345 "
ae 73 0 230
\0346 "
c, 41 1 231
\0347 "
e` 46 2 232
\0350 "
e' 46 2 233
\0351 "
e^ 46 2 234
\0352 "
e" 46 2 235
\0353 "
i` 23 2 236
\0354 "
i' 23 2 237
\0355 "
i^ 23 2 238
\0356 "
i" 23 2 239
\0357 "
d- 46 2 240
\0360 "
n~ 46 2 241
\0361 "
o` 46 2 242
\0362 "
o' 46 2 243
\0363 "
o^ 46 2 244
\0364 "
o~ 46 2 245
\0365 "
o" 46 2 246
\0366 "
-: 48 0 247
\0367 "
o/ 50 0 248
\0370 "
u` 46 2 249
\0371 "
u' 46 2 250
\0372 "
u^ 46 2 251
\0373 "
u" 46 2 252
\0374 "
y' 41 3 253
\0375 "
th 46 3 254
\0376 "
y" 41 3 255
\0377 "
^a 27 2 147
~a 27 2 148
Ua 27 2 150
.a 27 2 151
oa 27 2 154
"a 27 2 157
Ca 27 1 158
va 27 2 159
0707070014231123601006440057030057030000010443200522627501600002600000006161post.src/devLatin1/Hx name Hx
fontname Helvetica-Narrow-BoldOblique
named in prologue
spacewidth 23
charset
! 27 2 33
" 39 2 34
dq "
# 46 2 35
$ 46 3 36
% 73 2 37
& 59 2 38
' 23 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
- 27 0 173
\0255 "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 27 0 58
; 27 1 59
--- 48 0 60
= 48 0 61
--- 48 0 62
? 50 2 63
@ 80 3 64
A 59 2 65
B 59 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 46 2 74
K 59 2 75
L 50 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 27 3 91
\ 23 2 92
bs "
] 27 3 93
^ 27 2 147
--- 48 2 94
--- 46 1 95
` 23 2 96
a 46 0 97
b 50 2 98
c 46 0 99
d 50 2 100
e 46 0 101
f 27 2 102
g 50 1 103
h 50 2 104
i 23 2 105
j 23 3 106
k 46 2 107
l 23 2 108
m 73 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 32 0 114
s 46 0 115
t 27 2 116
u 50 0 117
v 46 0 118
w 64 0 119
x 46 0 120
y 46 1 121
z 41 0 122
{ 32 3 123
--- 23 3 124
} 32 3 125
~ 27 2 148
--- 48 0 126
\` 27 2 145
ga "
!! 27 1 161
\0241 "
c| 46 3 162
\0242 "
ct "
L- 46 2 163
\0243 "
ps "
xo 46 2 164
\0244 "
cr "
Y- 46 2 165
\0245 "
yn "
|| 23 3 166
\0246 "
so 46 3 167
\0247 "
sc "
"" 27 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 30 2 170
\0252 "
<< 46 0 171
\0253 "
-, 48 0 172
\0254 "
hy 27 0 173
\0255 "
-- 48 0 45
ro 60 2 174
\0256 "
rg "
-^ 27 2 175
\0257 "
-a "
0^ 33 2 176
\0260 "
+- 48 2 177
\0261 "
2^ 27 2 178
\0262 "
3^ 27 2 179
\0263 "
\' 27 2 180
\0264 "
aa "
/u 50 1 181
\0265 "
P! 46 3 182
\0266 "
pg "
.^ 23 0 183
\0267 "
,, 27 1 184
\0270 "
,a "
1^ 27 2 185
\0271 "
o_ 30 2 186
\0272 "
>> 46 0 187
\0273 "
14 68 2 188
\0274 "
12 68 2 189
\0275 "
34 68 2 190
\0276 "
?? 50 1 191
\0277 "
A` 59 2 192
\0300 "
A' 59 2 193
\0301 "
A^ 59 2 194
\0302 "
A~ 59 2 195
\0303 "
A" 59 2 196
\0304 "
A* 59 2 197
\0305 "
AE 82 2 198
\0306 "
C, 59 3 199
\0307 "
E` 55 2 200
\0310 "
E' 55 2 201
\0311 "
E^ 55 2 202
\0312 "
E" 55 2 203
\0313 "
I` 23 2 204
\0314 "
I' 23 2 205
\0315 "
I^ 23 2 206
\0316 "
I" 23 2 207
\0317 "
D- 59 2 208
\0320 "
N~ 59 2 209
\0321 "
O` 64 2 210
\0322 "
O' 64 2 211
\0323 "
O^ 64 2 212
\0324 "
O~ 64 2 213
\0325 "
O" 64 2 214
\0326 "
xx 48 0 215
\0327 "
O/ 64 2 216
\0330 "
U` 59 2 217
\0331 "
U' 59 2 218
\0332 "
U^ 59 2 219
\0333 "
U" 59 2 220
\0334 "
Y' 55 2 221
\0335 "
TH 55 2 222
\0336 "
ss 50 2 223
\0337 "
a` 46 2 224
\0340 "
a' 46 2 225
\0341 "
a^ 46 2 226
\0342 "
a~ 46 2 227
\0343 "
a" 46 2 228
\0344 "
a* 46 2 229
\0345 "
ae 73 0 230
\0346 "
c, 46 1 231
\0347 "
e` 46 2 232
\0350 "
e' 46 2 233
\0351 "
e^ 46 2 234
\0352 "
e" 46 2 235
\0353 "
i` 23 2 236
\0354 "
i' 23 2 237
\0355 "
i^ 23 2 238
\0356 "
i" 23 2 239
\0357 "
d- 50 2 240
\0360 "
n~ 50 2 241
\0361 "
o` 50 2 242
\0362 "
o' 50 2 243
\0363 "
o^ 50 2 244
\0364 "
o~ 50 2 245
\0365 "
o" 50 2 246
\0366 "
-: 48 0 247
\0367 "
o/ 50 0 248
\0370 "
u` 50 2 249
\0371 "
u' 50 2 250
\0372 "
u^ 50 2 251
\0373 "
u" 50 2 252
\0374 "
y' 46 3 253
\0375 "
th 50 3 254
\0376 "
y" 46 3 255
\0377 "
^a 27 2 147
~a 27 2 148
Ua 27 2 150
.a 27 2 151
oa 27 2 154
"a 27 2 157
Ca 27 1 158
va 27 2 159
0707070014231123611006440057030057030000010443240522627501600002600000006143post.src/devLatin1/KB name KB
fontname Bookman-Demi
named in prologue
spacewidth 34
charset
! 36 2 33
" 42 2 34
dq "
# 60 2 35
$ 66 3 36
% 94 2 37
& 80 2 38
' 32 2 39
( 32 3 40
) 32 3 41
* 46 2 42
+ 60 0 43
, 34 1 44
- 36 0 173
\0255 "
. 34 0 46
/ 60 3 47
0 66 2 48
1 66 2 49
2 66 2 50
3 66 2 51
4 66 2 52
5 66 2 53
6 66 2 54
7 66 2 55
8 66 2 56
9 66 2 57
: 34 0 58
; 34 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 66 2 63
@ 82 2 64
A 72 2 65
B 72 2 66
C 74 2 67
D 78 2 68
E 72 2 69
F 68 2 70
G 78 2 71
H 82 2 72
I 40 2 73
J 64 2 74
K 80 2 75
L 64 2 76
M 94 2 77
N 74 2 78
O 80 2 79
P 66 2 80
Q 80 3 81
R 78 2 82
S 66 2 83
T 70 2 84
U 74 2 85
V 72 2 86
W 94 2 87
X 78 2 88
Y 70 2 89
Z 64 2 90
[ 30 3 91
\ 60 2 92
bs "
] 30 3 93
^ 50 2 147
--- 60 2 94
--- 50 1 95
` 32 2 96
a 58 0 97
b 60 2 98
c 58 0 99
d 64 2 100
e 58 0 101
f 38 2 102
g 58 3 103
h 68 2 104
i 36 2 105
j 34 3 106
k 66 2 107
l 34 2 108
m 100 0 109
n 68 0 110
o 62 0 111
p 64 1 112
q 62 1 113
r 46 0 114
s 52 0 115
t 46 2 116
u 66 0 117
v 60 0 118
w 80 0 119
x 60 0 120
y 62 1 121
z 56 0 122
{ 32 3 123
--- 60 2 124
} 32 3 125
~ 48 2 148
--- 60 0 126
\` 40 2 145
ga "
!! 36 1 161
\0241 "
c| 66 2 162
\0242 "
ct "
L- 66 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 66 2 165
\0245 "
yn "
|| 60 2 166
\0246 "
so 60 3 167
\0247 "
sc "
"" 50 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 40 2 170
\0252 "
<< 40 0 171
\0253 "
-, 60 0 172
\0254 "
hy 36 0 173
\0255 "
-- 60 0 45
ro 74 2 174
\0256 "
rg "
-^ 46 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 60 0 177
\0261 "
2^ 40 2 178
\0262 "
3^ 40 2 179
\0263 "
\' 40 2 180
\0264 "
aa "
/u 66 1 181
\0265 "
P! 80 2 182
\0266 "
pg "
.^ 34 0 183
\0267 "
,, 36 1 184
\0270 "
,a "
1^ 40 2 185
\0271 "
o_ 40 2 186
\0272 "
>> 40 0 187
\0273 "
14 99 2 188
\0274 "
12 99 2 189
\0275 "
34 99 2 190
\0276 "
?? 66 1 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 114 2 198
\0306 "
C, 74 3 199
\0307 "
E` 72 2 200
\0310 "
E' 72 2 201
\0311 "
E^ 72 2 202
\0312 "
E" 72 2 203
\0313 "
I` 40 2 204
\0314 "
I' 40 2 205
\0315 "
I^ 40 2 206
\0316 "
I" 40 2 207
\0317 "
D- 78 2 208
\0320 "
N~ 74 2 209
\0321 "
O` 80 2 210
\0322 "
O' 80 2 211
\0323 "
O^ 80 2 212
\0324 "
O~ 80 2 213
\0325 "
O" 80 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 80 3 216
\0330 "
U` 74 2 217
\0331 "
U' 74 2 218
\0332 "
U^ 74 2 219
\0333 "
U" 74 2 220
\0334 "
Y' 70 2 221
\0335 "
TH 66 2 222
\0336 "
ss 66 2 223
\0337 "
a` 58 2 224
\0340 "
a' 58 2 225
\0341 "
a^ 58 2 226
\0342 "
a~ 58 2 227
\0343 "
a" 58 2 228
\0344 "
a* 58 2 229
\0345 "
ae 88 0 230
\0346 "
c, 58 1 231
\0347 "
e` 58 2 232
\0350 "
e' 58 2 233
\0351 "
e^ 58 2 234
\0352 "
e" 58 2 235
\0353 "
i` 36 2 236
\0354 "
i' 36 2 237
\0355 "
i^ 36 2 238
\0356 "
i" 36 2 239
\0357 "
d- 62 2 240
\0360 "
n~ 68 2 241
\0361 "
o` 62 2 242
\0362 "
o' 62 2 243
\0363 "
o^ 62 2 244
\0364 "
o~ 62 2 245
\0365 "
o" 62 2 246
\0366 "
-: 60 0 247
\0367 "
o/ 62 0 248
\0370 "
u` 66 2 249
\0371 "
u' 66 2 250
\0372 "
u^ 66 2 251
\0373 "
u" 66 2 252
\0374 "
y' 62 3 253
\0375 "
th 64 3 254
\0376 "
y" 62 3 255
\0377 "
^a 50 2 147
~a 48 2 148
Ua 50 2 150
.a 32 2 151
oa 34 2 154
"a 44 2 157
Ca 32 1 158
va 50 2 159
0707070014231123621006440057030057030000010443400522627501600002600000006151post.src/devLatin1/KI name KI
fontname Bookman-LightItalic
named in prologue
spacewidth 30
charset
! 32 2 33
" 36 2 34
dq "
# 60 2 35
$ 62 2 36
% 80 2 37
& 82 2 38
' 28 2 39
( 28 3 40
) 28 3 41
* 44 2 42
+ 60 2 43
, 30 1 44
- 32 0 173
\0255 "
. 30 0 46
/ 60 3 47
0 62 2 48
1 62 2 49
2 62 2 50
3 62 2 51
4 62 2 52
5 62 2 53
6 62 2 54
7 62 2 55
8 62 2 56
9 62 2 57
: 30 0 58
; 30 1 59
--- 60 2 60
= 60 0 61
--- 60 2 62
? 54 2 63
@ 78 2 64
A 70 2 65
B 72 2 66
C 72 2 67
D 74 2 68
E 68 2 69
F 62 2 70
G 76 2 71
H 80 2 72
I 32 2 73
J 56 2 74
K 72 2 75
L 58 2 76
M 86 2 77
N 72 2 78
O 76 2 79
P 60 2 80
Q 78 3 81
R 70 2 82
S 64 2 83
T 60 2 84
U 72 2 85
V 68 2 86
W 96 2 87
X 70 2 88
Y 66 2 89
Z 58 2 90
[ 26 3 91
\ 60 2 92
bs "
] 26 3 93
^ 44 2 147
--- 60 2 94
--- 50 1 95
` 28 2 96
a 62 0 97
b 60 2 98
c 48 0 99
d 64 2 100
e 54 0 101
f 34 3 102
g 56 1 103
h 62 2 104
i 28 2 105
j 28 3 106
k 60 2 107
l 28 2 108
m 88 0 109
n 62 0 110
o 54 0 111
p 60 1 112
q 56 1 113
r 40 0 114
s 54 0 115
t 34 2 116
u 62 0 117
v 54 0 118
w 88 0 119
x 54 0 120
y 60 1 121
z 52 0 122
{ 36 3 123
--- 60 2 124
} 38 3 125
~ 44 2 148
--- 60 0 126
\` 34 2 145
ga "
!! 32 1 161
\0241 "
c| 62 2 162
\0242 "
ct "
L- 62 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 62 2 165
\0245 "
yn "
|| 60 2 166
\0246 "
so 62 3 167
\0247 "
sc "
"" 42 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 44 2 170
\0252 "
<< 30 0 171
\0253 "
-, 60 0 172
\0254 "
hy 32 0 173
\0255 "
-- 60 0 45
ro 74 2 174
\0256 "
rg "
-^ 44 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 60 2 177
\0261 "
2^ 37 2 178
\0262 "
3^ 37 2 179
\0263 "
\' 32 2 180
\0264 "
aa "
/u 62 1 181
\0265 "
P! 62 2 182
\0266 "
pg "
.^ 30 0 183
\0267 "
,, 32 1 184
\0270 "
,a "
1^ 37 2 185
\0271 "
o_ 40 2 186
\0272 "
>> 30 0 187
\0273 "
14 93 2 188
\0274 "
12 93 2 189
\0275 "
34 93 2 190
\0276 "
?? 54 1 191
\0277 "
A` 70 2 192
\0300 "
A' 70 2 193
\0301 "
A^ 70 2 194
\0302 "
A~ 70 2 195
\0303 "
A" 70 2 196
\0304 "
A* 70 2 197
\0305 "
AE 122 2 198
\0306 "
C, 72 3 199
\0307 "
E` 68 2 200
\0310 "
E' 68 2 201
\0311 "
E^ 68 2 202
\0312 "
E" 68 2 203
\0313 "
I` 32 2 204
\0314 "
I' 32 2 205
\0315 "
I^ 32 2 206
\0316 "
I" 32 2 207
\0317 "
D- 74 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 76 2 210
\0322 "
O' 76 2 211
\0323 "
O^ 76 2 212
\0324 "
O~ 76 2 213
\0325 "
O" 76 2 214
\0326 "
xx 60 2 215
\0327 "
O/ 76 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 66 2 221
\0335 "
TH 60 2 222
\0336 "
ss 62 3 223
\0337 "
a` 62 2 224
\0340 "
a' 62 2 225
\0341 "
a^ 62 2 226
\0342 "
a~ 62 2 227
\0343 "
a" 62 2 228
\0344 "
a* 62 2 229
\0345 "
ae 88 0 230
\0346 "
c, 48 1 231
\0347 "
e` 54 2 232
\0350 "
e' 54 2 233
\0351 "
e^ 54 2 234
\0352 "
e" 54 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 54 2 240
\0360 "
n~ 62 2 241
\0361 "
o` 54 2 242
\0362 "
o' 54 2 243
\0363 "
o^ 54 2 244
\0364 "
o~ 54 2 245
\0365 "
o" 54 2 246
\0366 "
-: 60 2 247
\0367 "
o/ 54 0 248
\0370 "
u` 62 2 249
\0371 "
u' 62 2 250
\0372 "
u^ 62 2 251
\0373 "
u" 62 2 252
\0374 "
y' 60 3 253
\0375 "
th 60 3 254
\0376 "
y" 60 3 255
\0377 "
^a 44 2 147
~a 44 2 148
Ua 44 2 150
.a 26 2 151
oa 30 2 154
"a 34 2 157
Ca 26 1 158
va 44 2 159
0707070014231123631006440057030057030000010443440522627501600002600000006143post.src/devLatin1/KR name KR
fontname Bookman-Light
named in prologue
spacewidth 32
charset
! 30 2 33
" 38 2 34
dq "
# 60 2 35
$ 62 2 36
% 90 2 37
& 80 2 38
' 22 2 39
( 30 3 40
) 30 3 41
* 44 2 42
+ 60 0 43
, 32 1 44
- 40 0 173
\0255 "
. 32 0 46
/ 60 3 47
0 62 2 48
1 62 2 49
2 62 2 50
3 62 2 51
4 62 2 52
5 62 2 53
6 62 2 54
7 62 2 55
8 62 2 56
9 62 2 57
: 32 0 58
; 32 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 54 2 63
@ 82 2 64
A 68 2 65
B 74 2 66
C 74 2 67
D 80 2 68
E 72 2 69
F 64 2 70
G 80 2 71
H 80 2 72
I 34 2 73
J 60 2 74
K 72 2 75
L 60 2 76
M 92 2 77
N 74 2 78
O 80 2 79
P 62 2 80
Q 82 3 81
R 72 2 82
S 66 2 83
T 62 2 84
U 78 2 85
V 70 2 86
W 96 2 87
X 72 2 88
Y 64 2 89
Z 64 2 90
[ 30 3 91
\ 60 2 92
bs "
] 30 3 93
^ 42 2 147
--- 60 2 94
--- 50 1 95
` 22 2 96
a 58 0 97
b 62 2 98
c 52 0 99
d 62 2 100
e 52 0 101
f 32 2 102
g 54 3 103
h 66 2 104
i 30 2 105
j 30 3 106
k 62 2 107
l 30 2 108
m 94 0 109
n 66 0 110
o 56 0 111
p 62 1 112
q 58 1 113
r 44 0 114
s 52 0 115
t 38 2 116
u 68 0 117
v 52 0 118
w 78 0 119
x 56 0 120
y 54 1 121
z 48 0 122
{ 28 3 123
--- 60 2 124
} 28 3 125
~ 44 2 148
--- 60 0 126
\` 34 2 145
ga "
!! 30 1 161
\0241 "
c| 62 2 162
\0242 "
ct "
L- 62 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 62 2 165
\0245 "
yn "
|| 60 2 166
\0246 "
so 52 3 167
\0247 "
sc "
"" 42 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 42 2 170
\0252 "
<< 36 0 171
\0253 "
-, 60 0 172
\0254 "
hy 40 0 173
\0255 "
-- 60 0 45
ro 74 2 174
\0256 "
rg "
-^ 44 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 60 0 177
\0261 "
2^ 37 2 178
\0262 "
3^ 37 2 179
\0263 "
\' 34 2 180
\0264 "
aa "
/u 68 1 181
\0265 "
P! 60 2 182
\0266 "
pg "
.^ 32 0 183
\0267 "
,, 32 1 184
\0270 "
,a "
1^ 37 2 185
\0271 "
o_ 42 2 186
\0272 "
>> 36 0 187
\0273 "
14 93 2 188
\0274 "
12 93 2 189
\0275 "
34 93 2 190
\0276 "
?? 54 1 191
\0277 "
A` 68 2 192
\0300 "
A' 68 2 193
\0301 "
A^ 68 2 194
\0302 "
A~ 68 2 195
\0303 "
A" 68 2 196
\0304 "
A* 68 2 197
\0305 "
AE 126 2 198
\0306 "
C, 74 3 199
\0307 "
E` 72 2 200
\0310 "
E' 72 2 201
\0311 "
E^ 72 2 202
\0312 "
E" 72 2 203
\0313 "
I` 34 2 204
\0314 "
I' 34 2 205
\0315 "
I^ 34 2 206
\0316 "
I" 34 2 207
\0317 "
D- 80 2 208
\0320 "
N~ 74 2 209
\0321 "
O` 80 2 210
\0322 "
O' 80 2 211
\0323 "
O^ 80 2 212
\0324 "
O~ 80 2 213
\0325 "
O" 80 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 80 2 216
\0330 "
U` 78 2 217
\0331 "
U' 78 2 218
\0332 "
U^ 78 2 219
\0333 "
U" 78 2 220
\0334 "
Y' 64 2 221
\0335 "
TH 62 2 222
\0336 "
ss 66 2 223
\0337 "
a` 58 2 224
\0340 "
a' 58 2 225
\0341 "
a^ 58 2 226
\0342 "
a~ 58 2 227
\0343 "
a" 58 2 228
\0344 "
a* 58 2 229
\0345 "
ae 86 0 230
\0346 "
c, 52 1 231
\0347 "
e` 52 2 232
\0350 "
e' 52 2 233
\0351 "
e^ 52 2 234
\0352 "
e" 52 2 235
\0353 "
i` 30 2 236
\0354 "
i' 30 2 237
\0355 "
i^ 30 2 238
\0356 "
i" 30 2 239
\0357 "
d- 56 2 240
\0360 "
n~ 66 2 241
\0361 "
o` 56 2 242
\0362 "
o' 56 2 243
\0363 "
o^ 56 2 244
\0364 "
o~ 56 2 245
\0365 "
o" 56 2 246
\0366 "
-: 60 0 247
\0367 "
o/ 56 0 248
\0370 "
u` 68 2 249
\0371 "
u' 68 2 250
\0372 "
u^ 68 2 251
\0373 "
u" 68 2 252
\0374 "
y' 54 3 253
\0375 "
th 62 3 254
\0376 "
y" 54 3 255
\0377 "
^a 42 2 147
~a 44 2 148
Ua 46 2 150
.a 26 2 151
oa 32 2 154
"a 38 2 157
Ca 32 1 158
va 42 2 159
0707070014231123641006440057030057030000010443600522627501600002600000006154post.src/devLatin1/KX name KX
fontname Bookman-DemiItalic
named in prologue
spacewidth 34
charset
! 32 2 33
" 38 2 34
dq "
# 60 2 35
$ 68 3 36
% 88 2 37
& 98 2 38
' 32 2 39
( 26 3 40
) 26 3 41
* 46 2 42
+ 60 0 43
, 34 1 44
- 28 0 173
\0255 "
. 34 0 46
/ 36 2 47
0 68 2 48
1 68 2 49
2 68 2 50
3 68 2 51
4 68 2 52
5 68 2 53
6 68 2 54
7 68 2 55
8 68 2 56
9 68 2 57
: 34 0 58
; 34 1 59
--- 62 0 60
= 60 0 61
--- 62 0 62
? 62 2 63
@ 78 2 64
A 72 2 65
B 72 2 66
C 70 2 67
D 76 2 68
E 72 2 69
F 66 2 70
G 76 2 71
H 80 2 72
I 38 2 73
J 62 2 74
K 78 2 75
L 64 2 76
M 86 2 77
N 74 2 78
O 76 2 79
P 64 2 80
Q 76 3 81
R 74 2 82
S 70 2 83
T 70 2 84
U 74 2 85
V 66 2 86
W 100 2 87
X 74 2 88
Y 66 2 89
Z 68 2 90
[ 26 3 91
\ 58 2 92
bs "
] 26 3 93
^ 48 2 147
--- 62 2 94
--- 50 1 95
` 32 2 96
a 68 0 97
b 60 2 98
c 56 0 99
d 68 2 100
e 56 0 101
f 42 3 102
g 62 1 103
h 70 2 104
i 38 2 105
j 32 3 106
k 70 2 107
l 38 2 108
m 96 0 109
n 68 0 110
o 60 0 111
p 66 1 112
q 62 1 113
r 50 0 114
s 54 0 115
t 44 2 116
u 68 0 117
v 54 0 118
w 86 0 119
x 62 0 120
y 60 1 121
z 56 0 122
{ 30 3 123
--- 62 2 124
} 30 3 125
~ 48 2 148
--- 62 0 126
\` 38 2 145
ga "
!! 32 1 161
\0241 "
c| 68 2 162
\0242 "
ct "
L- 68 2 163
\0243 "
ps "
xo 68 2 164
\0244 "
cr "
Y- 68 2 165
\0245 "
yn "
|| 62 2 166
\0246 "
so 62 3 167
\0247 "
sc "
"" 52 2 168
\0250 "
:a "
co 78 2 169
\0251 "
a_ 44 2 170
\0252 "
<< 38 0 171
\0253 "
-, 62 0 172
\0254 "
hy 28 0 173
\0255 "
-- 60 0 45
ro 78 2 174
\0256 "
rg "
-^ 48 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 60 0 177
\0261 "
2^ 41 2 178
\0262 "
3^ 41 2 179
\0263 "
\' 34 2 180
\0264 "
aa "
/u 68 1 181
\0265 "
P! 68 3 182
\0266 "
pg "
.^ 34 0 183
\0267 "
,, 36 1 184
\0270 "
,a "
1^ 41 2 185
\0271 "
o_ 44 2 186
\0272 "
>> 38 0 187
\0273 "
14 102 2 188
\0274 "
12 102 2 189
\0275 "
34 102 2 190
\0276 "
?? 62 1 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 114 2 198
\0306 "
C, 70 3 199
\0307 "
E` 72 2 200
\0310 "
E' 72 2 201
\0311 "
E^ 72 2 202
\0312 "
E" 72 2 203
\0313 "
I` 38 2 204
\0314 "
I' 38 2 205
\0315 "
I^ 38 2 206
\0316 "
I" 38 2 207
\0317 "
D- 76 2 208
\0320 "
N~ 74 2 209
\0321 "
O` 76 2 210
\0322 "
O' 76 2 211
\0323 "
O^ 76 2 212
\0324 "
O~ 76 2 213
\0325 "
O" 76 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 76 2 216
\0330 "
U` 74 2 217
\0331 "
U' 74 2 218
\0332 "
U^ 74 2 219
\0333 "
U" 74 2 220
\0334 "
Y' 66 2 221
\0335 "
TH 64 2 222
\0336 "
ss 66 3 223
\0337 "
a` 68 2 224
\0340 "
a' 68 2 225
\0341 "
a^ 68 2 226
\0342 "
a~ 68 2 227
\0343 "
a" 68 2 228
\0344 "
a* 68 2 229
\0345 "
ae 88 0 230
\0346 "
c, 56 1 231
\0347 "
e` 56 2 232
\0350 "
e' 56 2 233
\0351 "
e^ 56 2 234
\0352 "
e" 56 2 235
\0353 "
i` 38 2 236
\0354 "
i' 38 2 237
\0355 "
i^ 38 2 238
\0356 "
i" 38 2 239
\0357 "
d- 60 2 240
\0360 "
n~ 68 2 241
\0361 "
o` 60 2 242
\0362 "
o' 60 2 243
\0363 "
o^ 60 2 244
\0364 "
o~ 60 2 245
\0365 "
o" 60 2 246
\0366 "
-: 60 0 247
\0367 "
o/ 60 2 248
\0370 "
u` 68 2 249
\0371 "
u' 68 2 250
\0372 "
u^ 68 2 251
\0373 "
u" 68 2 252
\0374 "
y' 60 3 253
\0375 "
th 66 3 254
\0376 "
y" 60 3 255
\0377 "
^a 48 2 147
~a 48 2 148
Ua 46 2 150
.a 38 2 151
oa 36 2 154
"a 56 2 157
Ca 32 1 158
va 48 2 159
0707070014231123651006440057030057030000010443640522627501600002600000006152post.src/devLatin1/NB name NB
fontname NewCenturySchlbk-Bold
named in prologue
spacewidth 29
charset
! 30 2 33
" 33 2 34
dq "
# 57 2 35
$ 57 3 36
% 83 2 37
& 85 2 38
' 24 2 39
( 39 3 40
) 39 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 57 2 48
1 57 2 49
2 57 2 50
3 57 2 51
4 57 2 52
5 57 2 53
6 57 2 54
7 57 2 55
8 57 2 56
9 57 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 50 2 63
@ 75 2 64
A 76 2 65
B 78 2 66
C 78 2 67
D 83 2 68
E 76 2 69
F 72 2 70
G 83 2 71
H 87 2 72
I 44 2 73
J 65 2 74
K 82 2 75
L 72 2 76
M 98 2 77
N 83 2 78
O 83 2 79
P 76 2 80
Q 83 3 81
R 82 2 82
S 67 2 83
T 72 2 84
U 83 2 85
V 76 2 86
W 98 2 87
X 72 2 88
Y 72 2 89
Z 67 2 90
[ 39 3 91
\ 61 2 92
bs "
] 39 3 93
^ 33 2 147
--- 61 2 94
--- 50 1 95
` 24 2 96
a 61 0 97
b 65 2 98
c 56 0 99
d 67 2 100
e 57 0 101
f 39 2 102
g 61 1 103
h 69 2 104
i 37 2 105
j 35 3 106
k 67 2 107
l 35 2 108
m 96 0 109
n 69 0 110
o 61 0 111
p 67 1 112
q 65 1 113
r 52 0 114
s 50 0 115
t 43 2 116
u 69 0 117
v 61 0 118
w 89 0 119
x 61 0 120
y 61 1 121
z 54 0 122
{ 39 3 123
--- 61 2 124
} 39 3 125
~ 33 2 148
--- 61 0 126
\` 33 2 145
ga "
!! 30 1 161
\0241 "
c| 57 3 162
\0242 "
ct "
L- 57 2 163
\0243 "
ps "
xo 57 2 164
\0244 "
cr "
Y- 57 2 165
\0245 "
yn "
|| 61 2 166
\0246 "
so 50 2 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 37 2 170
\0252 "
<< 50 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 34 2 178
\0262 "
3^ 34 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 69 1 181
\0265 "
P! 75 2 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 34 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 50 0 187
\0273 "
14 86 2 188
\0274 "
12 86 2 189
\0275 "
34 86 2 190
\0276 "
?? 50 1 191
\0277 "
A` 76 2 192
\0300 "
A' 76 2 193
\0301 "
A^ 76 2 194
\0302 "
A~ 76 2 195
\0303 "
A" 76 2 196
\0304 "
A* 76 2 197
\0305 "
AE 98 2 198
\0306 "
C, 78 3 199
\0307 "
E` 76 2 200
\0310 "
E' 76 2 201
\0311 "
E^ 76 2 202
\0312 "
E" 76 2 203
\0313 "
I` 44 2 204
\0314 "
I' 44 2 205
\0315 "
I^ 44 2 206
\0316 "
I" 44 2 207
\0317 "
D- 83 2 208
\0320 "
N~ 83 2 209
\0321 "
O` 83 2 210
\0322 "
O' 83 2 211
\0323 "
O^ 83 2 212
\0324 "
O~ 83 2 213
\0325 "
O" 83 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 83 2 216
\0330 "
U` 83 2 217
\0331 "
U' 83 2 218
\0332 "
U^ 83 2 219
\0333 "
U" 83 2 220
\0334 "
Y' 72 2 221
\0335 "
TH 76 2 222
\0336 "
ss 61 2 223
\0337 "
a` 61 2 224
\0340 "
a' 61 2 225
\0341 "
a^ 61 2 226
\0342 "
a~ 61 2 227
\0343 "
a" 61 2 228
\0344 "
a* 61 2 229
\0345 "
ae 87 0 230
\0346 "
c, 56 1 231
\0347 "
e` 57 2 232
\0350 "
e' 57 2 233
\0351 "
e^ 57 2 234
\0352 "
e" 57 2 235
\0353 "
i` 37 2 236
\0354 "
i' 37 2 237
\0355 "
i^ 37 2 238
\0356 "
i" 37 2 239
\0357 "
d- 61 2 240
\0360 "
n~ 69 2 241
\0361 "
o` 61 2 242
\0362 "
o' 61 2 243
\0363 "
o^ 61 2 244
\0364 "
o~ 61 2 245
\0365 "
o" 61 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 61 3 248
\0370 "
u` 69 2 249
\0371 "
u' 69 2 250
\0372 "
u^ 69 2 251
\0373 "
u" 69 2 252
\0374 "
y' 61 3 253
\0375 "
th 67 3 254
\0376 "
y" 61 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123661006440057030057030000010444000522627501600002600000006154post.src/devLatin1/NI name NI
fontname NewCenturySchlbk-Italic
named in prologue
spacewidth 28
charset
! 33 2 33
" 40 2 34
dq "
# 56 2 35
$ 56 3 36
% 83 2 37
& 85 2 38
' 20 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 61 3 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 75 2 64
A 70 2 65
B 72 2 66
C 72 2 67
D 78 2 68
E 72 2 69
F 67 2 70
G 78 2 71
H 83 2 72
I 41 2 73
J 61 2 74
K 74 2 75
L 67 2 76
M 94 2 77
N 82 2 78
O 78 2 79
P 67 2 80
Q 78 3 81
R 74 2 82
S 67 2 83
T 69 2 84
U 82 2 85
V 70 2 86
W 93 2 87
X 70 2 88
Y 69 2 89
Z 67 2 90
[ 33 3 91
\ 61 2 92
bs "
] 33 3 93
^ 33 2 147
--- 61 2 94
--- 50 1 95
` 20 2 96
a 57 0 97
b 56 2 98
c 44 0 99
d 61 2 100
e 44 0 101
f 33 3 102
g 54 1 103
h 61 2 104
i 33 2 105
j 32 3 106
k 56 2 107
l 33 2 108
m 89 0 109
n 61 0 110
o 50 0 111
p 57 1 112
q 56 1 113
r 44 0 114
s 44 0 115
t 35 2 116
u 61 0 117
v 52 0 118
w 78 0 119
x 50 0 120
y 50 1 121
z 46 0 122
{ 33 3 123
--- 61 2 124
} 33 3 125
~ 33 2 148
--- 61 0 126
\` 33 2 145
ga "
!! 33 3 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 2 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 61 2 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 42 2 170
\0252 "
<< 43 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 61 1 181
\0265 "
P! 65 2 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 43 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 44 3 191
\0277 "
A` 70 2 192
\0300 "
A' 70 2 193
\0301 "
A^ 70 2 194
\0302 "
A~ 70 2 195
\0303 "
A" 70 2 196
\0304 "
A* 70 2 197
\0305 "
AE 87 2 198
\0306 "
C, 72 3 199
\0307 "
E` 72 2 200
\0310 "
E' 72 2 201
\0311 "
E^ 72 2 202
\0312 "
E" 72 2 203
\0313 "
I` 41 2 204
\0314 "
I' 41 2 205
\0315 "
I^ 41 2 206
\0316 "
I" 41 2 207
\0317 "
D- 78 2 208
\0320 "
N~ 82 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 82 2 217
\0331 "
U' 82 2 218
\0332 "
U^ 82 2 219
\0333 "
U" 82 2 220
\0334 "
Y' 69 2 221
\0335 "
TH 67 2 222
\0336 "
ss 56 3 223
\0337 "
a` 57 2 224
\0340 "
a' 57 2 225
\0341 "
a^ 57 2 226
\0342 "
a~ 57 2 227
\0343 "
a" 57 2 228
\0344 "
a* 57 2 229
\0345 "
ae 72 0 230
\0346 "
c, 44 1 231
\0347 "
e` 44 2 232
\0350 "
e' 44 2 233
\0351 "
e^ 44 2 234
\0352 "
e" 44 2 235
\0353 "
i` 33 2 236
\0354 "
i' 33 2 237
\0355 "
i^ 33 2 238
\0356 "
i" 33 2 239
\0357 "
d- 50 2 240
\0360 "
n~ 61 2 241
\0361 "
o` 50 2 242
\0362 "
o' 50 2 243
\0363 "
o^ 50 2 244
\0364 "
o~ 50 2 245
\0365 "
o" 50 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 50 3 248
\0370 "
u` 61 2 249
\0371 "
u' 61 2 250
\0372 "
u^ 61 2 251
\0373 "
u" 61 2 252
\0374 "
y' 50 3 253
\0375 "
th 57 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123671006440057030057030000010444040522627501600002600000006154post.src/devLatin1/NR name NR
fontname NewCenturySchlbk-Roman
named in prologue
spacewidth 28
charset
! 30 2 33
" 39 2 34
dq "
# 56 2 35
$ 56 3 36
% 83 2 37
& 82 2 38
' 20 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 74 2 64
A 72 2 65
B 72 2 66
C 72 2 67
D 78 2 68
E 72 2 69
F 67 2 70
G 78 2 71
H 83 2 72
I 41 2 73
J 56 2 74
K 78 2 75
L 67 2 76
M 94 2 77
N 82 2 78
O 78 2 79
P 67 2 80
Q 78 3 81
R 72 2 82
S 63 2 83
T 67 2 84
U 82 2 85
V 72 2 86
W 98 2 87
X 70 2 88
Y 70 2 89
Z 61 2 90
[ 33 3 91
\ 61 2 92
bs "
] 33 3 93
^ 33 2 147
--- 61 2 94
--- 50 1 95
` 20 2 96
a 56 0 97
b 56 2 98
c 44 0 99
d 57 2 100
e 50 0 101
f 33 2 102
g 54 1 103
h 61 2 104
i 32 2 105
j 30 3 106
k 59 2 107
l 32 2 108
m 89 0 109
n 61 0 110
o 50 0 111
p 57 1 112
q 56 1 113
r 44 0 114
s 46 0 115
t 39 2 116
u 61 0 117
v 54 0 118
w 78 0 119
x 54 0 120
y 54 1 121
z 48 0 122
{ 33 3 123
--- 61 2 124
} 33 3 125
~ 33 2 148
--- 61 0 126
\` 33 2 145
ga "
!! 30 3 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 2 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 61 2 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 33 2 170
\0252 "
<< 43 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 74 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 61 1 181
\0265 "
P! 61 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 30 2 186
\0272 "
>> 43 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 44 3 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 72 2 200
\0310 "
E' 72 2 201
\0311 "
E^ 72 2 202
\0312 "
E" 72 2 203
\0313 "
I` 41 2 204
\0314 "
I' 41 2 205
\0315 "
I^ 41 2 206
\0316 "
I" 41 2 207
\0317 "
D- 78 2 208
\0320 "
N~ 82 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 82 2 217
\0331 "
U' 82 2 218
\0332 "
U^ 82 2 219
\0333 "
U" 82 2 220
\0334 "
Y' 70 2 221
\0335 "
TH 67 2 222
\0336 "
ss 57 2 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 80 0 230
\0346 "
c, 44 1 231
\0347 "
e` 50 2 232
\0350 "
e' 50 2 233
\0351 "
e^ 50 2 234
\0352 "
e" 50 2 235
\0353 "
i` 32 2 236
\0354 "
i' 32 2 237
\0355 "
i^ 32 2 238
\0356 "
i" 32 2 239
\0357 "
d- 50 2 240
\0360 "
n~ 61 2 241
\0361 "
o` 50 2 242
\0362 "
o' 50 2 243
\0363 "
o^ 50 2 244
\0364 "
o~ 50 2 245
\0365 "
o" 50 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 50 2 248
\0370 "
u` 61 2 249
\0371 "
u' 61 2 250
\0372 "
u^ 61 2 251
\0373 "
u" 61 2 252
\0374 "
y' 54 3 253
\0375 "
th 57 3 254
\0376 "
y" 54 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123701006440057030057030000010444200522627501600002600000006160post.src/devLatin1/NX name NX
fontname NewCenturySchlbk-BoldItalic
named in prologue
spacewidth 29
charset
! 33 2 33
" 40 2 34
dq "
# 57 2 35
$ 57 3 36
% 89 2 37
& 89 2 38
' 26 2 39
( 41 3 40
) 41 3 41
* 50 2 42
+ 61 0 43
, 29 1 44
- 33 0 173
\0255 "
. 29 0 46
/ 28 2 47
0 57 2 48
1 57 2 49
2 57 2 50
3 57 2 51
4 57 2 52
5 57 2 53
6 57 2 54
7 57 2 55
8 57 2 56
9 57 2 57
: 29 0 58
; 29 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 48 2 63
@ 75 2 64
A 74 2 65
B 76 2 66
C 76 2 67
D 83 2 68
E 74 2 69
F 70 2 70
G 82 2 71
H 87 2 72
I 44 2 73
J 67 2 74
K 78 2 75
L 70 2 76
M 94 2 77
N 85 2 78
O 83 2 79
P 74 2 80
Q 83 3 81
R 80 2 82
S 69 2 83
T 72 2 84
U 83 2 85
V 74 2 86
W 94 2 87
X 74 2 88
Y 70 2 89
Z 70 2 90
[ 41 3 91
\ 61 2 92
bs "
] 41 3 93
^ 33 2 147
--- 61 2 94
--- 50 1 95
` 26 2 96
a 67 0 97
b 61 2 98
c 54 0 99
d 67 2 100
e 52 0 101
f 39 3 102
g 61 1 103
h 69 2 104
i 39 2 105
j 37 3 106
k 65 2 107
l 39 2 108
m 94 0 109
n 69 0 110
o 57 0 111
p 65 1 112
q 63 1 113
r 52 0 114
s 48 0 115
t 41 2 116
u 69 0 117
v 56 0 118
w 83 0 119
x 57 0 120
y 52 1 121
z 52 0 122
{ 41 3 123
--- 61 2 124
} 41 3 125
~ 33 2 148
--- 61 0 126
\` 33 2 145
ga "
!! 33 3 161
\0241 "
c| 57 3 162
\0242 "
ct "
L- 57 2 163
\0243 "
ps "
xo 57 2 164
\0244 "
cr "
Y- 57 2 165
\0245 "
yn "
|| 61 2 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 41 2 170
\0252 "
<< 48 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 34 2 178
\0262 "
3^ 34 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 69 1 181
\0265 "
P! 65 2 182
\0266 "
pg "
.^ 29 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 34 2 185
\0271 "
o_ 36 2 186
\0272 "
>> 48 0 187
\0273 "
14 86 2 188
\0274 "
12 86 2 189
\0275 "
34 86 2 190
\0276 "
?? 48 3 191
\0277 "
A` 74 2 192
\0300 "
A' 74 2 193
\0301 "
A^ 74 2 194
\0302 "
A~ 74 2 195
\0303 "
A" 74 2 196
\0304 "
A* 74 2 197
\0305 "
AE 89 2 198
\0306 "
C, 76 3 199
\0307 "
E` 74 2 200
\0310 "
E' 74 2 201
\0311 "
E^ 74 2 202
\0312 "
E" 74 2 203
\0313 "
I` 44 2 204
\0314 "
I' 44 2 205
\0315 "
I^ 44 2 206
\0316 "
I" 44 2 207
\0317 "
D- 83 2 208
\0320 "
N~ 85 2 209
\0321 "
O` 83 2 210
\0322 "
O' 83 2 211
\0323 "
O^ 83 2 212
\0324 "
O~ 83 2 213
\0325 "
O" 83 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 83 2 216
\0330 "
U` 83 2 217
\0331 "
U' 83 2 218
\0332 "
U^ 83 2 219
\0333 "
U" 83 2 220
\0334 "
Y' 70 2 221
\0335 "
TH 74 2 222
\0336 "
ss 57 3 223
\0337 "
a` 67 2 224
\0340 "
a' 67 2 225
\0341 "
a^ 67 2 226
\0342 "
a~ 67 2 227
\0343 "
a" 67 2 228
\0344 "
a* 67 2 229
\0345 "
ae 82 0 230
\0346 "
c, 54 1 231
\0347 "
e` 52 2 232
\0350 "
e' 52 2 233
\0351 "
e^ 52 2 234
\0352 "
e" 52 2 235
\0353 "
i` 39 2 236
\0354 "
i' 39 2 237
\0355 "
i^ 39 2 238
\0356 "
i" 39 2 239
\0357 "
d- 57 2 240
\0360 "
n~ 69 2 241
\0361 "
o` 57 2 242
\0362 "
o' 57 2 243
\0363 "
o^ 57 2 244
\0364 "
o~ 57 2 245
\0365 "
o" 57 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 57 3 248
\0370 "
u` 69 2 249
\0371 "
u' 69 2 250
\0372 "
u^ 69 2 251
\0373 "
u" 69 2 252
\0374 "
y' 52 3 253
\0375 "
th 65 3 254
\0376 "
y" 52 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123711006440057030057030000010444240522627501600002600000006144post.src/devLatin1/PA name PA
fontname Palatino-Roman
named in prologue
spacewidth 25
charset
! 28 2 33
" 37 2 34
dq "
# 50 2 35
$ 50 2 36
% 84 2 37
& 78 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 39 2 42
+ 61 0 43
, 25 1 44
- 33 0 173
\0255 "
. 25 0 46
/ 61 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 75 2 64
A 78 2 65
B 61 2 66
C 71 2 67
D 77 2 68
E 61 2 69
F 56 2 70
G 76 2 71
H 83 2 72
I 34 2 73
J 33 3 74
K 73 2 75
L 61 2 76
M 95 2 77
N 83 2 78
O 79 2 79
P 60 2 80
Q 79 3 81
R 67 2 82
S 53 2 83
T 61 2 84
U 78 2 85
V 72 2 86
W 100 2 87
X 67 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
\ 61 2 92
bs "
] 33 2 93
^ 33 2 147
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 55 2 98
c 44 0 99
d 61 2 100
e 48 0 101
f 33 2 102
g 56 1 103
h 58 2 104
i 29 2 105
j 23 3 106
k 56 2 107
l 29 2 108
m 88 0 109
n 58 0 110
o 55 0 111
p 60 1 112
q 56 1 113
r 40 0 114
s 42 0 115
t 33 2 116
u 60 0 117
v 57 0 118
w 83 0 119
x 52 0 120
y 56 1 121
z 50 0 122
{ 33 2 123
--- 61 2 124
} 33 2 125
~ 33 2 148
--- 61 0 126
\` 33 2 145
ga "
!! 28 1 161
\0241 "
c| 50 2 162
\0242 "
ct "
L- 50 2 163
\0243 "
ps "
xo 50 2 164
\0244 "
cr "
Y- 50 2 165
\0245 "
yn "
|| 61 2 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 33 2 170
\0252 "
<< 50 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 30 2 178
\0262 "
3^ 30 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 60 1 181
\0265 "
P! 63 3 182
\0266 "
pg "
.^ 25 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 30 2 185
\0271 "
o_ 33 2 186
\0272 "
>> 50 0 187
\0273 "
14 75 2 188
\0274 "
12 75 2 189
\0275 "
34 75 2 190
\0276 "
?? 44 1 191
\0277 "
A` 78 2 192
\0300 "
A' 78 2 193
\0301 "
A^ 78 2 194
\0302 "
A~ 78 2 195
\0303 "
A" 78 2 196
\0304 "
A* 78 2 197
\0305 "
AE 94 2 198
\0306 "
C, 71 3 199
\0307 "
E` 61 2 200
\0310 "
E' 61 2 201
\0311 "
E^ 61 2 202
\0312 "
E" 61 2 203
\0313 "
I` 34 2 204
\0314 "
I' 34 2 205
\0315 "
I^ 34 2 206
\0316 "
I" 34 2 207
\0317 "
D- 77 2 208
\0320 "
N~ 83 2 209
\0321 "
O` 79 2 210
\0322 "
O' 79 2 211
\0323 "
O^ 79 2 212
\0324 "
O~ 79 2 213
\0325 "
O" 79 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 83 2 216
\0330 "
U` 78 2 217
\0331 "
U' 78 2 218
\0332 "
U^ 78 2 219
\0333 "
U" 78 2 220
\0334 "
Y' 67 2 221
\0335 "
TH 60 2 222
\0336 "
ss 56 2 223
\0337 "
a` 50 2 224
\0340 "
a' 50 2 225
\0341 "
a^ 50 2 226
\0342 "
a~ 50 2 227
\0343 "
a" 50 2 228
\0344 "
a* 50 2 229
\0345 "
ae 76 0 230
\0346 "
c, 44 1 231
\0347 "
e` 48 2 232
\0350 "
e' 48 2 233
\0351 "
e^ 48 2 234
\0352 "
e" 48 2 235
\0353 "
i` 29 2 236
\0354 "
i' 29 2 237
\0355 "
i^ 29 2 238
\0356 "
i" 29 2 239
\0357 "
d- 55 2 240
\0360 "
n~ 58 2 241
\0361 "
o` 55 2 242
\0362 "
o' 55 2 243
\0363 "
o^ 55 2 244
\0364 "
o~ 55 2 245
\0365 "
o" 55 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 56 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 56 3 253
\0375 "
th 60 3 254
\0376 "
y" 56 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 25 2 151
oa 33 2 154
"a 38 2 157
Ca 31 1 158
va 33 2 159
0707070014231123721006440057030057030000010444400522627501600002600000006145post.src/devLatin1/PB name PB
fontname Palatino-Bold
named in prologue
spacewidth 25
charset
! 28 2 33
" 40 2 34
dq "
# 50 2 35
$ 50 2 36
% 89 2 37
& 83 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 44 2 42
+ 61 0 43
, 25 1 44
- 33 0 173
\0255 "
. 25 0 46
/ 30 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 75 2 64
A 78 2 65
B 67 2 66
C 72 2 67
D 83 2 68
E 61 2 69
F 56 2 70
G 83 2 71
H 83 2 72
I 39 2 73
J 39 3 74
K 78 2 75
L 61 2 76
M 100 2 77
N 83 2 78
O 83 2 79
P 61 2 80
Q 83 3 81
R 72 2 82
S 61 2 83
T 67 2 84
U 78 2 85
V 78 2 86
W 100 2 87
X 67 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
\ 61 2 92
bs "
] 33 2 93
^ 33 2 147
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 61 2 98
c 44 0 99
d 61 2 100
e 50 0 101
f 39 2 102
g 56 1 103
h 61 2 104
i 33 2 105
j 33 3 106
k 61 2 107
l 33 2 108
m 89 0 109
n 61 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 44 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 83 0 119
x 50 0 120
y 56 1 121
z 50 0 122
{ 31 2 123
--- 61 2 124
} 31 2 125
~ 33 2 148
--- 61 0 126
\` 33 2 145
ga "
!! 28 1 161
\0241 "
c| 50 2 162
\0242 "
ct "
L- 50 2 163
\0243 "
ps "
xo 50 2 164
\0244 "
cr "
Y- 50 2 165
\0245 "
yn "
|| 61 2 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 44 2 170
\0252 "
<< 50 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 30 2 178
\0262 "
3^ 30 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 61 1 181
\0265 "
P! 64 3 182
\0266 "
pg "
.^ 25 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 30 2 185
\0271 "
o_ 49 2 186
\0272 "
>> 50 0 187
\0273 "
14 75 2 188
\0274 "
12 75 2 189
\0275 "
34 75 2 190
\0276 "
?? 44 1 191
\0277 "
A` 78 2 192
\0300 "
A' 78 2 193
\0301 "
A^ 78 2 194
\0302 "
A~ 78 2 195
\0303 "
A" 78 2 196
\0304 "
A* 78 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 61 2 200
\0310 "
E' 61 2 201
\0311 "
E^ 61 2 202
\0312 "
E" 61 2 203
\0313 "
I` 39 2 204
\0314 "
I' 39 2 205
\0315 "
I^ 39 2 206
\0316 "
I" 39 2 207
\0317 "
D- 83 2 208
\0320 "
N~ 83 2 209
\0321 "
O` 83 2 210
\0322 "
O' 83 2 211
\0323 "
O^ 83 2 212
\0324 "
O~ 83 2 213
\0325 "
O" 83 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 83 2 216
\0330 "
U` 78 2 217
\0331 "
U' 78 2 218
\0332 "
U^ 78 2 219
\0333 "
U" 78 2 220
\0334 "
Y' 67 2 221
\0335 "
TH 61 2 222
\0336 "
ss 61 2 223
\0337 "
a` 50 2 224
\0340 "
a' 50 2 225
\0341 "
a^ 50 2 226
\0342 "
a~ 50 2 227
\0343 "
a" 50 2 228
\0344 "
a* 50 2 229
\0345 "
ae 78 0 230
\0346 "
c, 44 1 231
\0347 "
e` 50 2 232
\0350 "
e' 50 2 233
\0351 "
e^ 50 2 234
\0352 "
e" 50 2 235
\0353 "
i` 33 2 236
\0354 "
i' 33 2 237
\0355 "
i^ 33 2 238
\0356 "
i" 33 2 239
\0357 "
d- 56 2 240
\0360 "
n~ 61 2 241
\0361 "
o` 56 2 242
\0362 "
o' 56 2 243
\0363 "
o^ 56 2 244
\0364 "
o~ 56 2 245
\0365 "
o" 56 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 56 0 248
\0370 "
u` 61 2 249
\0371 "
u' 61 2 250
\0372 "
u^ 61 2 251
\0373 "
u" 61 2 252
\0374 "
y' 56 3 253
\0375 "
th 61 3 254
\0376 "
y" 56 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123731006440057030057030000010444440522627501600002600000006144post.src/devLatin1/PI name PI
fontname Palatino-Italic
named in prologue
spacewidth 25
charset
! 33 2 33
" 50 2 34
dq "
# 50 2 35
$ 50 2 36
% 89 2 37
& 78 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 39 2 42
+ 61 0 43
, 25 1 44
- 33 0 173
\0255 "
. 25 0 46
/ 30 3 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 50 2 63
@ 75 2 64
A 72 2 65
B 61 2 66
C 67 2 67
D 78 2 68
E 61 2 69
F 56 2 70
G 72 2 71
H 78 2 72
I 33 2 73
J 33 3 74
K 67 2 75
L 56 2 76
M 94 2 77
N 78 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 78 2 85
V 72 2 86
W 94 2 87
X 72 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
\ 61 2 92
bs "
] 33 2 93
^ 33 2 147
--- 61 2 94
--- 50 1 95
` 28 2 96
a 44 0 97
b 46 2 98
c 41 0 99
d 50 2 100
e 39 0 101
f 28 3 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 44 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 44 0 111
p 50 1 112
q 46 1 113
r 39 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
{ 33 2 123
--- 61 2 124
} 33 2 125
~ 33 2 148
--- 61 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 50 2 162
\0242 "
ct "
L- 50 2 163
\0243 "
ps "
xo 50 2 164
\0244 "
cr "
Y- 50 2 165
\0245 "
yn "
|| 61 2 166
\0246 "
so 50 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 33 2 170
\0252 "
<< 50 0 171
\0253 "
-, 61 0 172
\0254 "
hy 33 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 30 2 178
\0262 "
3^ 30 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 56 1 181
\0265 "
P! 50 3 182
\0266 "
pg "
.^ 25 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 30 2 185
\0271 "
o_ 33 2 186
\0272 "
>> 50 0 187
\0273 "
14 75 2 188
\0274 "
12 75 2 189
\0275 "
34 75 2 190
\0276 "
?? 50 1 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 94 2 198
\0306 "
C, 67 3 199
\0307 "
E` 61 2 200
\0310 "
E' 61 2 201
\0311 "
E^ 61 2 202
\0312 "
E" 61 2 203
\0313 "
I` 33 2 204
\0314 "
I' 33 2 205
\0315 "
I^ 33 2 206
\0316 "
I" 33 2 207
\0317 "
D- 78 2 208
\0320 "
N~ 78 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 78 2 217
\0331 "
U' 78 2 218
\0332 "
U^ 78 2 219
\0333 "
U" 78 2 220
\0334 "
Y' 67 2 221
\0335 "
TH 61 2 222
\0336 "
ss 50 3 223
\0337 "
a` 44 2 224
\0340 "
a' 44 2 225
\0341 "
a^ 44 2 226
\0342 "
a~ 44 2 227
\0343 "
a" 44 2 228
\0344 "
a* 44 2 229
\0345 "
ae 64 0 230
\0346 "
c, 41 1 231
\0347 "
e` 39 2 232
\0350 "
e' 39 2 233
\0351 "
e^ 39 2 234
\0352 "
e" 39 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 44 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 44 2 242
\0362 "
o' 44 2 243
\0363 "
o^ 44 2 244
\0364 "
o~ 44 2 245
\0365 "
o" 44 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 44 0 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 50 3 253
\0375 "
th 50 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123741006440057030057030000010444600522627501700002600000006151post.src/devLatin1/PX name PX
fontname Palatino-BoldItalic
named in prologue
spacewidth 25
charset
! 33 2 33
" 50 2 34
dq "
# 50 2 35
$ 50 2 36
% 89 2 37
& 83 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 44 2 42
+ 61 0 43
, 25 1 44
- 39 0 173
\0255 "
. 25 0 46
/ 32 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 83 2 64
A 72 2 65
B 67 2 66
C 69 2 67
D 78 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 78 2 72
I 39 2 73
J 39 3 74
K 72 2 75
L 61 2 76
M 94 2 77
N 78 2 78
O 83 2 79
P 67 2 80
Q 83 3 81
R 72 2 82
S 56 2 83
T 61 2 84
U 78 2 85
V 67 2 86
W 100 2 87
X 72 2 88
Y 61 2 89
Z 67 2 90
[ 33 2 91
\ 61 2 92
bs "
] 33 2 93
^ 33 2 147
--- 61 2 94
--- 50 1 95
` 28 2 96
a 56 0 97
b 54 2 98
c 44 0 99
d 56 2 100
e 44 0 101
f 33 3 102
g 50 1 103
h 56 2 104
i 33 2 105
j 33 3 106
k 56 2 107
l 33 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 54 1 113
r 39 0 114
s 44 0 115
t 39 2 116
u 56 0 117
v 56 0 118
w 83 0 119
x 50 0 120
y 56 1 121
z 50 0 122
{ 33 2 123
--- 61 2 124
} 33 2 125
~ 33 2 148
--- 61 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 50 2 162
\0242 "
ct "
L- 50 2 163
\0243 "
ps "
xo 50 2 164
\0244 "
cr "
Y- 50 2 165
\0245 "
yn "
|| 61 2 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 75 2 169
\0251 "
a_ 33 2 170
\0252 "
<< 50 0 171
\0253 "
-, 61 0 172
\0254 "
hy 39 0 173
\0255 "
-- 61 0 45
ro 75 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 61 0 177
\0261 "
2^ 30 2 178
\0262 "
3^ 30 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 56 1 181
\0265 "
P! 56 3 182
\0266 "
pg "
.^ 25 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 30 2 185
\0271 "
o_ 33 2 186
\0272 "
>> 50 0 187
\0273 "
14 75 2 188
\0274 "
12 75 2 189
\0275 "
34 75 2 190
\0276 "
?? 44 1 191
\0277 "
A` 72 2 192
\0300 "
A' 72 2 193
\0301 "
A^ 72 2 194
\0302 "
A~ 72 2 195
\0303 "
A" 72 2 196
\0304 "
A* 72 2 197
\0305 "
AE 94 2 198
\0306 "
C, 69 3 199
\0307 "
E` 61 2 200
\0310 "
E' 61 2 201
\0311 "
E^ 61 2 202
\0312 "
E" 61 2 203
\0313 "
I` 39 2 204
\0314 "
I' 39 2 205
\0315 "
I^ 39 2 206
\0316 "
I" 39 2 207
\0317 "
D- 78 2 208
\0320 "
N~ 78 2 209
\0321 "
O` 83 2 210
\0322 "
O' 83 2 211
\0323 "
O^ 83 2 212
\0324 "
O~ 83 2 213
\0325 "
O" 83 2 214
\0326 "
xx 61 0 215
\0327 "
O/ 83 2 216
\0330 "
U` 78 2 217
\0331 "
U' 78 2 218
\0332 "
U^ 78 2 219
\0333 "
U" 78 2 220
\0334 "
Y' 61 2 221
\0335 "
TH 67 2 222
\0336 "
ss 56 3 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 74 0 230
\0346 "
c, 44 1 231
\0347 "
e` 44 2 232
\0350 "
e' 44 2 233
\0351 "
e^ 44 2 234
\0352 "
e" 44 2 235
\0353 "
i` 33 2 236
\0354 "
i' 33 2 237
\0355 "
i^ 33 2 238
\0356 "
i" 33 2 239
\0357 "
d- 56 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 56 2 242
\0362 "
o' 56 2 243
\0363 "
o^ 56 2 244
\0364 "
o~ 56 2 245
\0365 "
o" 56 2 246
\0366 "
-: 61 0 247
\0367 "
o/ 56 0 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 56 3 253
\0375 "
th 56 3 254
\0376 "
y" 56 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 56 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231123751006440057030057030000010444640522627501700002600000006156post.src/devLatin1/ZI name ZI
fontname ZapfChancery-MediumItalic
named in prologue
spacewidth 22
charset
! 28 2 33
" 22 2 34
dq "
# 44 2 35
$ 44 3 36
% 68 2 37
& 78 2 38
' 24 2 39
( 26 3 40
) 22 3 41
* 42 2 42
+ 52 0 43
, 22 0 44
- 28 0 173
\0255 "
. 22 0 46
/ 34 3 47
0 44 2 48
1 44 2 49
2 44 2 50
3 44 2 51
4 44 2 52
5 44 2 53
6 44 2 54
7 44 2 55
8 44 2 56
9 44 2 57
: 26 0 58
; 24 0 59
--- 52 0 60
= 52 0 61
--- 52 0 62
? 38 2 63
@ 70 2 64
A 62 2 65
B 60 2 66
C 52 2 67
D 70 2 68
E 62 2 69
F 58 2 70
G 62 3 71
H 68 2 72
I 38 2 73
J 40 2 74
K 66 3 75
L 58 2 76
M 84 2 77
N 70 3 78
O 60 2 79
P 54 2 80
Q 60 3 81
R 60 3 82
S 46 2 83
T 50 2 84
U 74 2 85
V 64 2 86
W 88 2 87
X 56 2 88
Y 56 3 89
Z 62 2 90
[ 24 3 91
\ 48 2 92
bs "
] 32 3 93
^ 34 2 147
--- 52 2 94
--- 50 1 95
` 24 2 96
a 42 0 97
b 42 2 98
c 34 0 99
d 44 2 100
e 34 0 101
f 32 3 102
g 40 1 103
h 44 2 104
i 24 2 105
j 22 3 106
k 44 3 107
l 24 2 108
m 62 0 109
n 46 0 110
o 40 0 111
p 44 1 112
q 40 3 113
r 30 0 114
s 32 0 115
t 32 2 116
u 46 0 117
v 44 0 118
w 68 0 119
x 42 1 120
y 40 1 121
z 44 0 122
{ 24 3 123
--- 52 2 124
} 24 3 125
~ 44 2 148
--- 52 0 126
\` 22 2 145
ga "
!! 28 1 161
\0241 "
c| 44 2 162
\0242 "
ct "
L- 44 2 163
\0243 "
ps "
xo 44 2 164
\0244 "
cr "
Y- 44 2 165
\0245 "
yn "
|| 52 2 166
\0246 "
so 42 3 167
\0247 "
sc "
"" 36 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 26 2 170
\0252 "
<< 34 0 171
\0253 "
-, 52 0 172
\0254 "
hy 28 0 173
\0255 "
-- 52 0 45
ro 74 2 174
\0256 "
rg "
-^ 44 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 52 0 177
\0261 "
2^ 26 2 178
\0262 "
3^ 26 2 179
\0263 "
\' 30 2 180
\0264 "
aa "
/u 46 1 181
\0265 "
P! 50 3 182
\0266 "
pg "
.^ 22 0 183
\0267 "
,, 30 1 184
\0270 "
,a "
1^ 26 2 185
\0271 "
o_ 26 2 186
\0272 "
>> 38 0 187
\0273 "
14 66 2 188
\0274 "
12 66 2 189
\0275 "
34 66 2 190
\0276 "
?? 40 1 191
\0277 "
A` 62 2 192
\0300 "
A' 62 2 193
\0301 "
A^ 62 2 194
\0302 "
A~ 62 2 195
\0303 "
A" 62 2 196
\0304 "
A* 62 2 197
\0305 "
AE 74 2 198
\0306 "
C, 52 3 199
\0307 "
E` 62 2 200
\0310 "
E' 62 2 201
\0311 "
E^ 62 2 202
\0312 "
E" 62 2 203
\0313 "
I` 38 2 204
\0314 "
I' 38 2 205
\0315 "
I^ 38 2 206
\0316 "
I" 38 2 207
\0317 "
D- 70 2 208
\0320 "
N~ 70 3 209
\0321 "
O` 60 2 210
\0322 "
O' 60 2 211
\0323 "
O^ 60 2 212
\0324 "
O~ 60 2 213
\0325 "
O" 60 2 214
\0326 "
xx 52 0 215
\0327 "
O/ 66 3 216
\0330 "
U` 74 2 217
\0331 "
U' 74 2 218
\0332 "
U^ 74 2 219
\0333 "
U" 74 2 220
\0334 "
Y' 56 3 221
\0335 "
TH 54 2 222
\0336 "
ss 42 3 223
\0337 "
a` 42 2 224
\0340 "
a' 42 2 225
\0341 "
a^ 42 2 226
\0342 "
a~ 42 2 227
\0343 "
a" 42 2 228
\0344 "
a* 42 2 229
\0345 "
ae 54 0 230
\0346 "
c, 34 1 231
\0347 "
e` 34 2 232
\0350 "
e' 34 2 233
\0351 "
e^ 34 2 234
\0352 "
e" 34 2 235
\0353 "
i` 24 2 236
\0354 "
i' 24 2 237
\0355 "
i^ 24 2 238
\0356 "
i" 24 2 239
\0357 "
d- 40 2 240
\0360 "
n~ 46 2 241
\0361 "
o` 40 2 242
\0362 "
o' 40 2 243
\0363 "
o^ 40 2 244
\0364 "
o~ 40 2 245
\0365 "
o" 40 2 246
\0366 "
-: 52 0 247
\0367 "
o/ 44 3 248
\0370 "
u` 46 2 249
\0371 "
u' 46 2 250
\0372 "
u^ 46 2 251
\0373 "
u" 46 2 252
\0374 "
y' 40 3 253
\0375 "
th 44 3 254
\0376 "
y" 40 3 255
\0377 "
^a 34 2 147
~a 44 2 148
Ua 44 2 150
.a 22 2 151
oa 30 2 154
"a 40 2 157
Ca 28 1 158
va 34 2 159
0707070014231123761006440057030057030000010445000522627501700002500000006047post.src/devLatin1/C name C
fontname Courier
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
- 60 0 173
\0255 "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
\` 60 2 145
ga "
!! 60 1 161
\0241 "
c| 60 2 162
\0242 "
ct "
L- 60 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 60 2 165
\0245 "
yn "
|| 60 3 166
\0246 "
so 60 2 167
\0247 "
sc "
"" 60 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 60 2 170
\0252 "
<< 60 0 171
\0253 "
-, 60 0 172
\0254 "
hy 60 0 173
\0255 "
-- 60 0 45
ro 60 2 174
\0256 "
rg "
-^ 60 2 175
\0257 "
-a "
0^ 60 2 176
\0260 "
+- 60 2 177
\0261 "
2^ 60 2 178
\0262 "
3^ 60 2 179
\0263 "
\' 60 2 180
\0264 "
aa "
/u 60 1 181
\0265 "
P! 60 2 182
\0266 "
pg "
.^ 60 0 183
\0267 "
,, 60 1 184
\0270 "
,a "
1^ 60 2 185
\0271 "
o_ 60 2 186
\0272 "
>> 60 0 187
\0273 "
14 60 2 188
\0274 "
12 60 2 189
\0275 "
34 60 2 190
\0276 "
?? 60 1 191
\0277 "
A` 60 2 192
\0300 "
A' 60 2 193
\0301 "
A^ 60 2 194
\0302 "
A~ 60 2 195
\0303 "
A" 60 2 196
\0304 "
A* 60 2 197
\0305 "
AE 60 2 198
\0306 "
C, 60 3 199
\0307 "
E` 60 2 200
\0310 "
E' 60 2 201
\0311 "
E^ 60 2 202
\0312 "
E" 60 2 203
\0313 "
I` 60 2 204
\0314 "
I' 60 2 205
\0315 "
I^ 60 2 206
\0316 "
I" 60 2 207
\0317 "
D- 60 2 208
\0320 "
N~ 60 2 209
\0321 "
O` 60 2 210
\0322 "
O' 60 2 211
\0323 "
O^ 60 2 212
\0324 "
O~ 60 2 213
\0325 "
O" 60 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 60 2 216
\0330 "
U` 60 2 217
\0331 "
U' 60 2 218
\0332 "
U^ 60 2 219
\0333 "
U" 60 2 220
\0334 "
Y' 60 2 221
\0335 "
TH 60 2 222
\0336 "
ss 60 2 223
\0337 "
a` 60 2 224
\0340 "
a' 60 2 225
\0341 "
a^ 60 2 226
\0342 "
a~ 60 2 227
\0343 "
a" 60 2 228
\0344 "
a* 60 2 229
\0345 "
ae 60 0 230
\0346 "
c, 60 1 231
\0347 "
e` 60 2 232
\0350 "
e' 60 2 233
\0351 "
e^ 60 2 234
\0352 "
e" 60 2 235
\0353 "
i` 60 2 236
\0354 "
i' 60 2 237
\0355 "
i^ 60 2 238
\0356 "
i" 60 2 239
\0357 "
d- 60 2 240
\0360 "
n~ 60 2 241
\0361 "
o` 60 2 242
\0362 "
o' 60 2 243
\0363 "
o^ 60 2 244
\0364 "
o~ 60 2 245
\0365 "
o" 60 2 246
\0366 "
-: 60 2 247
\0367 "
o/ 60 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 60 3 253
\0375 "
th 60 3 254
\0376 "
y" 60 3 255
\0377 "
^a 60 2 147
~a 60 2 148
Ua 60 2 150
.a 60 2 151
oa 60 2 154
"a 60 2 157
Ca 60 1 158
va 60 2 159
0707070014231123771006440057030057030000010445040522627501700002600000006077post.src/devLatin1/CB name CB
fontname Courier-Bold
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
- 60 0 173
\0255 "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
\` 60 2 145
ga "
!! 60 1 161
\0241 "
c| 60 2 162
\0242 "
ct "
L- 60 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 60 2 165
\0245 "
yn "
|| 60 3 166
\0246 "
so 60 2 167
\0247 "
sc "
"" 60 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 60 2 170
\0252 "
<< 60 0 171
\0253 "
-, 60 0 172
\0254 "
hy 60 0 173
\0255 "
-- 60 0 45
ro 60 2 174
\0256 "
rg "
-^ 60 2 175
\0257 "
-a "
0^ 60 2 176
\0260 "
+- 60 2 177
\0261 "
2^ 60 2 178
\0262 "
3^ 60 2 179
\0263 "
\' 60 2 180
\0264 "
aa "
/u 60 1 181
\0265 "
P! 60 2 182
\0266 "
pg "
.^ 60 0 183
\0267 "
,, 60 1 184
\0270 "
,a "
1^ 60 2 185
\0271 "
o_ 60 2 186
\0272 "
>> 60 0 187
\0273 "
14 60 2 188
\0274 "
12 60 2 189
\0275 "
34 60 2 190
\0276 "
?? 60 1 191
\0277 "
A` 60 2 192
\0300 "
A' 60 2 193
\0301 "
A^ 60 2 194
\0302 "
A~ 60 2 195
\0303 "
A" 60 2 196
\0304 "
A* 60 2 197
\0305 "
AE 60 2 198
\0306 "
C, 60 3 199
\0307 "
E` 60 2 200
\0310 "
E' 60 2 201
\0311 "
E^ 60 2 202
\0312 "
E" 60 2 203
\0313 "
I` 60 2 204
\0314 "
I' 60 2 205
\0315 "
I^ 60 2 206
\0316 "
I" 60 2 207
\0317 "
D- 60 2 208
\0320 "
N~ 60 2 209
\0321 "
O` 60 2 210
\0322 "
O' 60 2 211
\0323 "
O^ 60 2 212
\0324 "
O~ 60 2 213
\0325 "
O" 60 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 60 2 216
\0330 "
U` 60 2 217
\0331 "
U' 60 2 218
\0332 "
U^ 60 2 219
\0333 "
U" 60 2 220
\0334 "
Y' 60 2 221
\0335 "
TH 60 2 222
\0336 "
ss 60 2 223
\0337 "
a` 60 2 224
\0340 "
a' 60 2 225
\0341 "
a^ 60 2 226
\0342 "
a~ 60 2 227
\0343 "
a" 60 2 228
\0344 "
a* 60 2 229
\0345 "
ae 60 0 230
\0346 "
c, 60 1 231
\0347 "
e` 60 2 232
\0350 "
e' 60 2 233
\0351 "
e^ 60 2 234
\0352 "
e" 60 2 235
\0353 "
i` 60 2 236
\0354 "
i' 60 2 237
\0355 "
i^ 60 2 238
\0356 "
i" 60 2 239
\0357 "
d- 60 2 240
\0360 "
n~ 60 2 241
\0361 "
o` 60 2 242
\0362 "
o' 60 2 243
\0363 "
o^ 60 2 244
\0364 "
o~ 60 2 245
\0365 "
o" 60 2 246
\0366 "
-: 60 2 247
\0367 "
o/ 60 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 60 3 253
\0375 "
th 60 3 254
\0376 "
y" 60 3 255
\0377 "
^a 60 2 147
~a 60 2 148
Ua 60 2 150
.a 60 2 151
oa 60 2 154
"a 60 2 157
Ca 60 1 158
va 60 2 159
0707070014231124001006440057030057030000010445200522627501700002600000006102post.src/devLatin1/CI name CI
fontname Courier-Oblique
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
- 60 0 173
\0255 "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
\` 60 2 145
ga "
!! 60 1 161
\0241 "
c| 60 2 162
\0242 "
ct "
L- 60 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 60 2 165
\0245 "
yn "
|| 60 3 166
\0246 "
so 60 2 167
\0247 "
sc "
"" 60 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 60 2 170
\0252 "
<< 60 0 171
\0253 "
-, 60 0 172
\0254 "
hy 60 0 173
\0255 "
-- 60 0 45
ro 60 2 174
\0256 "
rg "
-^ 60 2 175
\0257 "
-a "
0^ 60 2 176
\0260 "
+- 60 2 177
\0261 "
2^ 60 2 178
\0262 "
3^ 60 2 179
\0263 "
\' 60 2 180
\0264 "
aa "
/u 60 1 181
\0265 "
P! 60 2 182
\0266 "
pg "
.^ 60 0 183
\0267 "
,, 60 1 184
\0270 "
,a "
1^ 60 2 185
\0271 "
o_ 60 2 186
\0272 "
>> 60 0 187
\0273 "
14 60 2 188
\0274 "
12 60 2 189
\0275 "
34 60 2 190
\0276 "
?? 60 1 191
\0277 "
A` 60 2 192
\0300 "
A' 60 2 193
\0301 "
A^ 60 2 194
\0302 "
A~ 60 2 195
\0303 "
A" 60 2 196
\0304 "
A* 60 2 197
\0305 "
AE 60 2 198
\0306 "
C, 60 3 199
\0307 "
E` 60 2 200
\0310 "
E' 60 2 201
\0311 "
E^ 60 2 202
\0312 "
E" 60 2 203
\0313 "
I` 60 2 204
\0314 "
I' 60 2 205
\0315 "
I^ 60 2 206
\0316 "
I" 60 2 207
\0317 "
D- 60 2 208
\0320 "
N~ 60 2 209
\0321 "
O` 60 2 210
\0322 "
O' 60 2 211
\0323 "
O^ 60 2 212
\0324 "
O~ 60 2 213
\0325 "
O" 60 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 60 2 216
\0330 "
U` 60 2 217
\0331 "
U' 60 2 218
\0332 "
U^ 60 2 219
\0333 "
U" 60 2 220
\0334 "
Y' 60 2 221
\0335 "
TH 60 2 222
\0336 "
ss 60 2 223
\0337 "
a` 60 2 224
\0340 "
a' 60 2 225
\0341 "
a^ 60 2 226
\0342 "
a~ 60 2 227
\0343 "
a" 60 2 228
\0344 "
a* 60 2 229
\0345 "
ae 60 0 230
\0346 "
c, 60 1 231
\0347 "
e` 60 2 232
\0350 "
e' 60 2 233
\0351 "
e^ 60 2 234
\0352 "
e" 60 2 235
\0353 "
i` 60 2 236
\0354 "
i' 60 2 237
\0355 "
i^ 60 2 238
\0356 "
i" 60 2 239
\0357 "
d- 60 2 240
\0360 "
n~ 60 2 241
\0361 "
o` 60 2 242
\0362 "
o' 60 2 243
\0363 "
o^ 60 2 244
\0364 "
o~ 60 2 245
\0365 "
o" 60 2 246
\0366 "
-: 60 2 247
\0367 "
o/ 60 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 60 3 253
\0375 "
th 60 3 254
\0376 "
y" 60 3 255
\0377 "
^a 60 2 147
~a 60 2 148
Ua 60 2 150
.a 60 2 151
oa 60 2 154
"a 60 2 157
Ca 60 1 158
va 60 2 159
0707070014231124011006440057030057030000010445240522627501700002600000006072post.src/devLatin1/CO name CO
fontname Courier
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
- 60 0 173
\0255 "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
\` 60 2 145
ga "
!! 60 1 161
\0241 "
c| 60 2 162
\0242 "
ct "
L- 60 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 60 2 165
\0245 "
yn "
|| 60 3 166
\0246 "
so 60 2 167
\0247 "
sc "
"" 60 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 60 2 170
\0252 "
<< 60 0 171
\0253 "
-, 60 0 172
\0254 "
hy 60 0 173
\0255 "
-- 60 0 45
ro 60 2 174
\0256 "
rg "
-^ 60 2 175
\0257 "
-a "
0^ 60 2 176
\0260 "
+- 60 2 177
\0261 "
2^ 60 2 178
\0262 "
3^ 60 2 179
\0263 "
\' 60 2 180
\0264 "
aa "
/u 60 1 181
\0265 "
P! 60 2 182
\0266 "
pg "
.^ 60 0 183
\0267 "
,, 60 1 184
\0270 "
,a "
1^ 60 2 185
\0271 "
o_ 60 2 186
\0272 "
>> 60 0 187
\0273 "
14 60 2 188
\0274 "
12 60 2 189
\0275 "
34 60 2 190
\0276 "
?? 60 1 191
\0277 "
A` 60 2 192
\0300 "
A' 60 2 193
\0301 "
A^ 60 2 194
\0302 "
A~ 60 2 195
\0303 "
A" 60 2 196
\0304 "
A* 60 2 197
\0305 "
AE 60 2 198
\0306 "
C, 60 3 199
\0307 "
E` 60 2 200
\0310 "
E' 60 2 201
\0311 "
E^ 60 2 202
\0312 "
E" 60 2 203
\0313 "
I` 60 2 204
\0314 "
I' 60 2 205
\0315 "
I^ 60 2 206
\0316 "
I" 60 2 207
\0317 "
D- 60 2 208
\0320 "
N~ 60 2 209
\0321 "
O` 60 2 210
\0322 "
O' 60 2 211
\0323 "
O^ 60 2 212
\0324 "
O~ 60 2 213
\0325 "
O" 60 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 60 2 216
\0330 "
U` 60 2 217
\0331 "
U' 60 2 218
\0332 "
U^ 60 2 219
\0333 "
U" 60 2 220
\0334 "
Y' 60 2 221
\0335 "
TH 60 2 222
\0336 "
ss 60 2 223
\0337 "
a` 60 2 224
\0340 "
a' 60 2 225
\0341 "
a^ 60 2 226
\0342 "
a~ 60 2 227
\0343 "
a" 60 2 228
\0344 "
a* 60 2 229
\0345 "
ae 60 0 230
\0346 "
c, 60 1 231
\0347 "
e` 60 2 232
\0350 "
e' 60 2 233
\0351 "
e^ 60 2 234
\0352 "
e" 60 2 235
\0353 "
i` 60 2 236
\0354 "
i' 60 2 237
\0355 "
i^ 60 2 238
\0356 "
i" 60 2 239
\0357 "
d- 60 2 240
\0360 "
n~ 60 2 241
\0361 "
o` 60 2 242
\0362 "
o' 60 2 243
\0363 "
o^ 60 2 244
\0364 "
o~ 60 2 245
\0365 "
o" 60 2 246
\0366 "
-: 60 2 247
\0367 "
o/ 60 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 60 3 253
\0375 "
th 60 3 254
\0376 "
y" 60 3 255
\0377 "
^a 60 2 147
~a 60 2 148
Ua 60 2 150
.a 60 2 151
oa 60 2 154
"a 60 2 157
Ca 60 1 158
va 60 2 159
0707070014231124021006440057030057030000010445400522627501700002600000006072post.src/devLatin1/CW name CW
fontname Courier
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
- 60 0 173
\0255 "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
\` 60 2 145
ga "
!! 60 1 161
\0241 "
c| 60 2 162
\0242 "
ct "
L- 60 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 60 2 165
\0245 "
yn "
|| 60 3 166
\0246 "
so 60 2 167
\0247 "
sc "
"" 60 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 60 2 170
\0252 "
<< 60 0 171
\0253 "
-, 60 0 172
\0254 "
hy 60 0 173
\0255 "
-- 60 0 45
ro 60 2 174
\0256 "
rg "
-^ 60 2 175
\0257 "
-a "
0^ 60 2 176
\0260 "
+- 60 2 177
\0261 "
2^ 60 2 178
\0262 "
3^ 60 2 179
\0263 "
\' 60 2 180
\0264 "
aa "
/u 60 1 181
\0265 "
P! 60 2 182
\0266 "
pg "
.^ 60 0 183
\0267 "
,, 60 1 184
\0270 "
,a "
1^ 60 2 185
\0271 "
o_ 60 2 186
\0272 "
>> 60 0 187
\0273 "
14 60 2 188
\0274 "
12 60 2 189
\0275 "
34 60 2 190
\0276 "
?? 60 1 191
\0277 "
A` 60 2 192
\0300 "
A' 60 2 193
\0301 "
A^ 60 2 194
\0302 "
A~ 60 2 195
\0303 "
A" 60 2 196
\0304 "
A* 60 2 197
\0305 "
AE 60 2 198
\0306 "
C, 60 3 199
\0307 "
E` 60 2 200
\0310 "
E' 60 2 201
\0311 "
E^ 60 2 202
\0312 "
E" 60 2 203
\0313 "
I` 60 2 204
\0314 "
I' 60 2 205
\0315 "
I^ 60 2 206
\0316 "
I" 60 2 207
\0317 "
D- 60 2 208
\0320 "
N~ 60 2 209
\0321 "
O` 60 2 210
\0322 "
O' 60 2 211
\0323 "
O^ 60 2 212
\0324 "
O~ 60 2 213
\0325 "
O" 60 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 60 2 216
\0330 "
U` 60 2 217
\0331 "
U' 60 2 218
\0332 "
U^ 60 2 219
\0333 "
U" 60 2 220
\0334 "
Y' 60 2 221
\0335 "
TH 60 2 222
\0336 "
ss 60 2 223
\0337 "
a` 60 2 224
\0340 "
a' 60 2 225
\0341 "
a^ 60 2 226
\0342 "
a~ 60 2 227
\0343 "
a" 60 2 228
\0344 "
a* 60 2 229
\0345 "
ae 60 0 230
\0346 "
c, 60 1 231
\0347 "
e` 60 2 232
\0350 "
e' 60 2 233
\0351 "
e^ 60 2 234
\0352 "
e" 60 2 235
\0353 "
i` 60 2 236
\0354 "
i' 60 2 237
\0355 "
i^ 60 2 238
\0356 "
i" 60 2 239
\0357 "
d- 60 2 240
\0360 "
n~ 60 2 241
\0361 "
o` 60 2 242
\0362 "
o' 60 2 243
\0363 "
o^ 60 2 244
\0364 "
o~ 60 2 245
\0365 "
o" 60 2 246
\0366 "
-: 60 2 247
\0367 "
o/ 60 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 60 3 253
\0375 "
th 60 3 254
\0376 "
y" 60 3 255
\0377 "
^a 60 2 147
~a 60 2 148
Ua 60 2 150
.a 60 2 151
oa 60 2 154
"a 60 2 157
Ca 60 1 158
va 60 2 159
0707070014231124031006440057030057030000010445440522627501700002600000006106post.src/devLatin1/CX name CX
fontname Courier-BoldOblique
named in prologue
spacewidth 60
charset
! 60 2 33
" 60 2 34
dq "
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 2 43
, 60 1 44
- 60 0 173
\0255 "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 0 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 2 92
bs "
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
\` 60 2 145
ga "
!! 60 1 161
\0241 "
c| 60 2 162
\0242 "
ct "
L- 60 2 163
\0243 "
ps "
xo 60 2 164
\0244 "
cr "
Y- 60 2 165
\0245 "
yn "
|| 60 3 166
\0246 "
so 60 2 167
\0247 "
sc "
"" 60 2 168
\0250 "
:a "
co 60 2 169
\0251 "
a_ 60 2 170
\0252 "
<< 60 0 171
\0253 "
-, 60 0 172
\0254 "
hy 60 0 173
\0255 "
-- 60 0 45
ro 60 2 174
\0256 "
rg "
-^ 60 2 175
\0257 "
-a "
0^ 60 2 176
\0260 "
+- 60 2 177
\0261 "
2^ 60 2 178
\0262 "
3^ 60 2 179
\0263 "
\' 60 2 180
\0264 "
aa "
/u 60 1 181
\0265 "
P! 60 2 182
\0266 "
pg "
.^ 60 0 183
\0267 "
,, 60 1 184
\0270 "
,a "
1^ 60 2 185
\0271 "
o_ 60 2 186
\0272 "
>> 60 0 187
\0273 "
14 60 2 188
\0274 "
12 60 2 189
\0275 "
34 60 2 190
\0276 "
?? 60 1 191
\0277 "
A` 60 2 192
\0300 "
A' 60 2 193
\0301 "
A^ 60 2 194
\0302 "
A~ 60 2 195
\0303 "
A" 60 2 196
\0304 "
A* 60 2 197
\0305 "
AE 60 2 198
\0306 "
C, 60 3 199
\0307 "
E` 60 2 200
\0310 "
E' 60 2 201
\0311 "
E^ 60 2 202
\0312 "
E" 60 2 203
\0313 "
I` 60 2 204
\0314 "
I' 60 2 205
\0315 "
I^ 60 2 206
\0316 "
I" 60 2 207
\0317 "
D- 60 2 208
\0320 "
N~ 60 2 209
\0321 "
O` 60 2 210
\0322 "
O' 60 2 211
\0323 "
O^ 60 2 212
\0324 "
O~ 60 2 213
\0325 "
O" 60 2 214
\0326 "
xx 60 0 215
\0327 "
O/ 60 2 216
\0330 "
U` 60 2 217
\0331 "
U' 60 2 218
\0332 "
U^ 60 2 219
\0333 "
U" 60 2 220
\0334 "
Y' 60 2 221
\0335 "
TH 60 2 222
\0336 "
ss 60 2 223
\0337 "
a` 60 2 224
\0340 "
a' 60 2 225
\0341 "
a^ 60 2 226
\0342 "
a~ 60 2 227
\0343 "
a" 60 2 228
\0344 "
a* 60 2 229
\0345 "
ae 60 0 230
\0346 "
c, 60 1 231
\0347 "
e` 60 2 232
\0350 "
e' 60 2 233
\0351 "
e^ 60 2 234
\0352 "
e" 60 2 235
\0353 "
i` 60 2 236
\0354 "
i' 60 2 237
\0355 "
i^ 60 2 238
\0356 "
i" 60 2 239
\0357 "
d- 60 2 240
\0360 "
n~ 60 2 241
\0361 "
o` 60 2 242
\0362 "
o' 60 2 243
\0363 "
o^ 60 2 244
\0364 "
o~ 60 2 245
\0365 "
o" 60 2 246
\0366 "
-: 60 2 247
\0367 "
o/ 60 0 248
\0370 "
u` 60 2 249
\0371 "
u' 60 2 250
\0372 "
u^ 60 2 251
\0373 "
u" 60 2 252
\0374 "
y' 60 3 253
\0375 "
th 60 3 254
\0376 "
y" 60 3 255
\0377 "
^a 60 2 147
~a 60 2 148
Ua 60 2 150
.a 60 2 151
oa 60 2 154
"a 60 2 157
Ca 60 1 158
va 60 2 159
0707070014231124041006440057030057030000010445600522627501700002600000005570post.src/devLatin1/ZD name ZD
fontname ZapfDingbats
named in prologue
charset
! 97 2 33
" 96 2 34
# 97 2 35
$ 98 3 36
% 72 2 37
& 79 3 38
' 79 3 39
( 79 3 40
) 69 2 41
* 96 2 42
+ 94 2 43
, 55 3 44
- 86 2 45
. 91 2 46
/ 93 2 47
0 91 2 48
1 95 2 49
2 97 2 50
3 76 3 51
4 85 3 52
5 76 2 53
6 76 2 54
7 57 3 55
8 68 3 56
9 76 2 57
: 76 2 58
; 76 2 59
< 75 3 60
= 49 2 61
> 55 2 62
? 54 3 63
@ 58 2 64
A 69 3 65
B 79 3 66
C 79 3 67
D 79 3 68
E 79 3 69
F 79 3 70
G 79 3 71
H 82 3 72
I 82 3 73
J 79 3 74
K 84 3 75
L 82 3 76
M 83 3 77
N 82 3 78
O 83 3 79
P 92 3 80
Q 74 2 81
R 72 2 82
S 75 2 83
T 79 3 84
U 79 3 85
V 70 3 86
W 78 3 87
X 77 3 88
Y 79 3 89
Z 76 2 90
[ 71 3 91
\ 71 3 92
] 68 3 93
^ 70 3 94
_ 83 3 95
` 82 3 96
a 79 3 97
b 79 3 98
c 71 3 99
d 69 2 100
e 70 2 101
f 69 2 102
g 79 3 103
h 79 3 104
i 71 3 105
j 79 3 106
k 79 3 107
l 79 3 108
m 87 3 109
n 76 2 110
o 76 2 111
p 76 2 112
q 76 3 113
r 76 3 114
s 89 2 115
t 89 3 116
u 79 3 117
v 78 3 118
w 44 3 119
x 14 2 120
y 28 2 121
z 42 2 122
{ 39 2 123
| 39 2 124
} 67 2 125
~ 67 2 126
\` 28 0 145
!! 73 3 161
\0241 "
c| 54 3 162
\0242 "
L- 54 3 163
\0243 "
xo 91 2 164
\0244 "
Y- 67 3 165
\0245 "
|| 76 3 166
\0246 "
so 76 2 167
\0247 "
"" 78 2 168
\0250 "
co 60 3 169
\0251 "
a_ 69 3 170
\0252 "
<< 63 3 171
\0253 "
-, 79 3 172
\0254 "
hy 79 3 173
\0255 "
ro 79 3 174
\0256 "
-^ 79 3 175
\0257 "
0^ 79 3 176
\0260 "
+- 79 3 177
\0261 "
2^ 79 3 178
\0262 "
3^ 79 3 179
\0263 "
\' 79 3 180
\0264 "
/u 79 3 181
\0265 "
P! 79 3 182
\0266 "
.^ 79 3 183
\0267 "
,, 79 3 184
\0270 "
1^ 79 3 185
\0271 "
o_ 79 3 186
\0272 "
>> 79 3 187
\0273 "
14 79 3 188
\0274 "
12 79 3 189
\0275 "
34 79 3 190
\0276 "
?? 79 3 191
\0277 "
A` 79 3 192
\0300 "
A' 79 3 193
\0301 "
A^ 79 3 194
\0302 "
A~ 79 3 195
\0303 "
A" 79 3 196
\0304 "
A* 79 3 197
\0305 "
AE 79 3 198
\0306 "
C, 79 3 199
\0307 "
E` 79 3 200
\0310 "
E' 79 3 201
\0311 "
E^ 79 3 202
\0312 "
E" 79 3 203
\0313 "
I` 79 3 204
\0314 "
I' 79 3 205
\0315 "
I^ 79 3 206
\0316 "
I" 79 3 207
\0317 "
D- 79 3 208
\0320 "
N~ 79 3 209
\0321 "
O` 79 3 210
\0322 "
O' 79 3 211
\0323 "
O^ 89 2 212
\0324 "
O~ 84 2 213
\0325 "
O" 102 2 214
\0326 "
xx 46 3 215
\0327 "
O/ 75 2 216
\0330 "
U` 92 2 217
\0331 "
U' 75 2 218
\0332 "
U^ 92 2 219
\0333 "
U" 93 2 220
\0334 "
Y' 93 2 221
\0335 "
TH 93 2 222
\0336 "
ss 83 2 223
\0337 "
a` 87 2 224
\0340 "
a' 83 2 225
\0341 "
a^ 92 2 226
\0342 "
a~ 92 2 227
\0343 "
a" 92 2 228
\0344 "
a* 93 2 229
\0345 "
ae 93 2 230
\0346 "
c, 46 3 231
\0347 "
e` 88 2 232
\0350 "
e' 84 2 233
\0351 "
e^ 84 2 234
\0352 "
e" 87 2 235
\0353 "
i` 87 2 236
\0354 "
i' 70 2 237
\0355 "
i^ 70 2 238
\0356 "
i" 87 2 239
\0357 "
d- 28 0 240
\0360 "
n~ 87 2 241
\0361 "
o` 76 2 242
\0362 "
o' 95 2 243
\0363 "
o^ 77 2 244
\0364 "
o~ 87 2 245
\0365 "
o" 77 2 246
\0366 "
-: 89 3 247
\0367 "
o/ 97 2 248
\0370 "
u` 89 3 249
\0371 "
u' 83 2 250
\0372 "
u^ 87 2 251
\0373 "
u" 93 2 252
\0374 "
y' 97 2 253
\0375 "
th 92 2 254
\0376 "
y" 28 0 255
\0377 "
0707070014231124051006440057030057030000010440470522627501700002600000001145post.src/devLatin1/GR name GR
fontname Symbol
named in prologue
spacewidth 25
charset
*A 72 2 65
*B 67 2 66
*X 72 2 67
*D 61 2 68
*E 61 2 69
*F 76 2 70
*G 60 2 71
*Y 72 2 72
*I 33 2 73
*K 72 2 75
*L 69 2 76
*M 89 2 77
*N 72 2 78
*O 72 2 79
*P 77 2 80
*H 74 2 81
*R 56 2 82
*S 59 2 83
*T 61 2 84
*U 69 2 85
*W 77 2 87
*C 65 2 88
*Q 80 2 89
*Z 61 2 90
*a 63 0 97
*b 55 3 98
*x 55 1 99
*d 49 2 100
*e 44 0 101
*f 52 3 102
*g 41 1 103
*y 60 1 104
*i 33 0 105
*k 55 0 107
*l 55 2 108
*m 58 1 109
*n 52 0 110
*o 55 0 111
*p 55 0 112
*h 52 2 113
*r 55 1 114
*s 60 0 115
*t 44 0 116
*u 58 0 117
*w 69 0 119
*c 49 3 120
*q 69 1 121
*z 49 3 122
0707070014231124061006440057030057030000010445630522627501700002500000004376post.src/devLatin1/S name S
fontname Symbol
named in prologue
special
charset
--- 33 2 33
fa 71 2 34
--- 50 2 35
te 55 2 36
--- 83 2 37
--- 78 2 38
st 44 0 39
--- 33 3 40
--- 33 3 41
** 50 2 42
pl 55 0 43
--- 25 1 44
mi 55 0 45
--- 25 0 46
sl 28 2 47
--- 50 2 48
--- 50 2 49
--- 50 2 50
--- 50 2 51
--- 50 2 52
--- 50 2 53
--- 50 2 54
--- 50 2 55
--- 50 2 56
--- 50 2 57
--- 28 0 58
--- 28 1 59
< 55 0 60
eq 55 0 61
> 55 0 62
--- 44 2 63
cg 55 0 64
*A 72 2 65
*B 67 2 66
*X 72 2 67
*D 61 2 68
*E 61 2 69
*F 76 2 70
*G 60 2 71
*Y 72 2 72
*I 33 2 73
--- 63 2 74
*K 72 2 75
*L 69 2 76
*M 89 2 77
*N 72 2 78
*O 72 2 79
*P 77 2 80
*H 74 2 81
*R 56 2 82
*S 59 2 83
*T 61 2 84
*U 69 2 85
ts 44 1 86
*W 77 2 87
*C 65 2 88
*Q 80 2 89
*Z 61 2 90
--- 33 3 91
tf 86 0 92
--- 33 3 93
pp 66 2 94
ul 50 1 95
_ "
rn 50 2 96
*a 63 0 97
*b 55 3 98
*x 55 1 99
*d 49 2 100
*e 44 0 101
*f 52 3 102
*g 41 1 103
*y 60 1 104
*i 33 0 105
--- 60 1 106
*k 55 0 107
*l 55 2 108
*m 58 1 109
*n 52 0 110
*o 55 0 111
*p 55 0 112
*h 52 2 113
*r 55 1 114
*s 60 0 115
*t 44 0 116
*u 58 0 117
--- 71 2 118
*w 69 0 119
*c 49 3 120
*q 69 1 121
*z 49 3 122
--- 48 3 123
or 20 3 124
--- 48 3 125
ap 55 0 126
--- 62 2 161
fm 25 2 162
<= 55 2 163
fr 17 2 164
if 73 0 165
fn 50 3 166
--- 75 0 167
--- 75 2 168
--- 75 0 169
--- 75 2 170
ab 104 0 171
<- 99 0 172
ua 60 2 173
-> 99 0 174
da 60 2 175
de 40 2 176
+- 55 2 177
--- 41 2 178
>= 55 2 179
mu 55 0 180
pt 71 0 181
pd 49 2 182
bu 46 0 183
di 55 0 184
!= 55 2 185
== 55 0 186
~~ 55 0 187
el 100 0 188
av 60 3 189
ah 100 0 190
CR 66 2 191
af 82 2 192
If 69 2 193
Rf 80 2 194
ws 99 3 195
Ox 77 2 196
O+ 77 2 197
es 82 2 198
ca 77 0 199
cu 77 0 200
sp 71 0 201
ip 71 1 202
!b 71 0 203
sb 71 0 204
ib 71 1 205
mo 71 0 206
!m 71 2 207
an 77 2 208
gr 71 2 209
rg 79 2 210
co 79 2 211
tm 89 2 212
--- 82 2 213
sr 55 2 214
c. 25 0 215
no 71 0 216
l& 60 0 217
l| 60 0 218
--- 104 0 219
--- 99 0 220
--- 60 2 221
--- 99 0 222
--- 60 2 223
lz 49 2 224
b< 33 3 225
RG 79 2 226
CO 79 2 227
TM 79 2 228
--- 71 2 229
LT 38 3 230
br 0 3 231
LX "
LB 38 3 232
lc 50 2 233
lx 38 2 234
lf 50 2 235
lt 49 2 236
lk 49 2 237
lb 49 2 238
bv 49 2 239
| "
b> 33 3 241
is 50 3 242
--- 69 2 243
--- 69 2 244
--- 69 2 245
RT 38 3 246
RX 38 2 247
RB 38 3 248
rc 38 2 249
rx 50 3 250
rf 38 2 251
rt 49 2 252
rk 49 2 253
rb 49 2 254
~= 55 0 1
0707070014231124071006440057030057030000010441260522627501700002600000000561post.src/devLatin1/S1 # Times-Roman special font
name S1
fontname Times-Roman
named in prologue
special
charset
ru 50 0 95
'' 44 0 186
`` 44 0 170
dg 50 0 178
dd 50 0 179
en 65 0 177
\- "
em 100 0 208
14 75 2 1
12 75 2 1
34 75 2 1
bx 50 2 1
ob 38 2 1
ci 75 0 1
sq 50 2 1
Sl 50 2 1
L1 110 1 1
LA 110 1 1
LV 110 3 1
LH 210 1 1
lh 100 0 1
rh 100 0 1
lH 100 0 1
rH 100 0 1
PC 220 2 1
DG 185 2 1
0707070014231124101006440057030057030000010445660522627501700003000000002272post.src/devLatin1/DESC #Device Description - Latin1 character set
PDL PostScript
Encoding Latin1
fonts 10 R I B BI CW H HI HB S1 S
sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
120 125 130 135 140 145 150 155 160 0
res 720
hor 1
vert 1
unitwidth 10
charset
dq bs \` ga !! c| ct L- ps xo cr Y- yn || so sc "" :a co a_
<< -, hy -- ro rg -^ -a 0^ +- 2^ 3^ \' aa /u P! pg .^ ,, ,a
1^ o_ >> 14 12 34 ?? A` A' A^ A~ A" A* AE C, E` E' E^ E" I`
I' I^ I" D- N~ O` O' O^ O~ O" xx O/ U` U' U^ U" Y' TH ss a`
a' a^ a~ a" a* ae c, e` e' e^ e" i` i' i^ i" d- n~ o` o' o^
o~ o" -: o/ u` u' u^ u" y' th y" ^a ~a Ua .a oa "a Ca va fa
te st ** pl mi sl eq cg *A *B *X *D *E *F *G *Y *I *K *L *M
*N *O *P *H *R *S *T *U ts *W *C *Q *Z tf pp ul rn *a *b *x
*d *e *f *g *y *i *k *l *m *n *o *p *h *r *s *t *u *w *c *q
*z or ap fm <= fr if fn ab <- ua -> da de >= mu pt pd bu di
!= == ~~ el av ah CR af If Rf ws Ox O+ es ca cu sp ip !b sb
ib mo !m an gr tm sr c. no l& l| lz b< RG CO TM LT br LX LB
lc lx lf lt lk lb bv b> is RT RX RB rc rx rf rt rk rb ~= ru
'' `` dg dd en \- em bx ob ci sq Sl L1 LA LV LH lh rh lH rH
PC DG
0707070014231122341006400057030057030000010446060522633073400004000000003061post.src/devLatin1/devLatin1.mk MAKE=/bin/make
MAKEFILE=devLatin1.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
FONTDIR=/usr/lib/font
FONTFILES=DESC ? ?? [A-Z]??* shell.lib
all :
@if [ -r LINKFILE ]; then sh LINKFILE; fi;
install : all
@if [ ! -d $(FONTDIR) ]; then \
mkdir $(FONTDIR); \
chmod 755 $(FONTDIR); \
chgrp $(GROUP) $(FONTDIR); \
chown $(OWNER) $(FONTDIR); \
fi
@if [ ! -d $(FONTDIR)/devLatin1 ]; then \
mkdir $(FONTDIR)/devLatin1; \
chmod 755 $(FONTDIR)/devLatin1; \
chgrp $(GROUP) $(FONTDIR)/devLatin1; \
chown $(OWNER) $(FONTDIR)/devLatin1; \
fi
@if [ ! -d $(FONTDIR)/devLatin1/charlib ]; then \
mkdir $(FONTDIR)/devLatin1/charlib; \
chmod 755 $(FONTDIR)/devLatin1/charlib; \
chgrp $(GROUP) $(FONTDIR)/devLatin1/charlib; \
chown $(OWNER) $(FONTDIR)/devLatin1/charlib; \
fi
cp $(FONTFILES) $(FONTDIR)/devLatin1
@for i in $(FONTFILES); do \
chmod 644 $(FONTDIR)/devLatin1/$$i; \
chgrp $(GROUP) $(FONTDIR)/devLatin1/$$i; \
chown $(OWNER) $(FONTDIR)/devLatin1/$$i; \
done
cp charlib/* $(FONTDIR)/devLatin1/charlib
@for i in charlib/*; do \
chmod 644 $(FONTDIR)/devLatin1/$$i; \
chgrp $(GROUP) $(FONTDIR)/devLatin1/$$i; \
chown $(OWNER) $(FONTDIR)/devLatin1/$$i; \
done
clean :
clobber : clean
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^FONTDIR=.*'FONTDIR=$(FONTDIR)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014230454610407550057030057030000021337270522627502100003300000000000post.src/devLatin1/charlib 0707070014230454621006440057030057030000011340060522627501700003600000000421post.src/devLatin1/charlib/12 /build_12 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(1) show
rmoveto
optsize R f
(\244) show
f
(2) show
optsize ofont f
} def
0707070014230454631006440057030057030000011340070522627502000003600000000421post.src/devLatin1/charlib/14 /build_14 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(1) show
rmoveto
optsize R f
(\244) show
f
(4) show
optsize ofont f
} def
0707070014230454641006440057030057030000011347160522627502000003600000000421post.src/devLatin1/charlib/34 /build_34 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(3) show
rmoveto
optsize R f
(\244) show
f
(4) show
optsize ofont f
} def
0707070014230454651006440057030057030000011347300522627502000003600000012536post.src/devLatin1/charlib/L1 /LOGO-dict-mm dup where not
{ dup 64 dict def currentdict } if
exch get
begin
/globesetup {
/r exch def
/N exch def
/d 2 N r mul N 1 sub add div def
/h d r mul def
} def
/mkabs {
/yp exch def
/xl exch def
dup dup 0 get xl mul 0 exch put
dup dup 1 get h mul yp add 1 exch put
dup dup 2 get xl mul 2 exch put
dup dup 3 get h mul yp add 3 exch put
dup dup 4 get xl mul 4 exch put
dup dup 5 get h mul yp add 5 exch put
} def
/topsegment {
/n exch def
/y n r mul n .5 add add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 180 a sub /arc load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/botsegment {
/n exch 1 add def
/y n r mul n .5 sub add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 540 a sub /arcn load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/segment {
/n exch def
/dh exch 1 exch sub 2 div def
/ylb n r mul n 0.5 add add d mul def
/ylt ylb h add def
/yrb ylb h dh mul add def
/yrt ylt h dh mul sub def
/alb ylb 1 ylb dup mul sub sqrt atan def
/alt ylt 1 ylt dup mul sub sqrt atan def
/arb yrb 1 yrb dup mul sub sqrt atan 180 exch sub def
/art yrt 1 yrt dup mul sub sqrt atan 180 exch sub def
/xlb alb cos def
/xlt alt cos def
/xrb arb cos def
/xrt art cos def
/c4 exch xrb abs ylb mkabs def
/ly2 exch h mul ylb add def
/lx2 exch xrb abs mul def
/c3 exch xrb abs ylb mkabs def
/c2 exch xrt abs ylt mkabs def
/ly1 exch h mul ylt add def
/lx1 exch xrt abs mul def
/c1 exch xrt abs ylt mkabs def
xlb ylb /moveto load
0 0 1 alb alt /arc load
c2 4 get c2 5 get /lineto load
c2 2 get c2 3 get
c2 0 get c2 1 get
lx1 ly1 /curveto load
c1 4 get c1 5 get /lineto load
c1 2 get c1 3 get
c1 0 get c1 1 get
xrt yrt /curveto load
0 0 1 art arb /arc load
c3 aload pop /curveto load
lx2 ly2 /lineto load
c4 aload pop /curveto load
/closepath load
} def
8 2.5 globesetup
/globe8 [
/newpath load
[ -.9 .1 -.6 .2 -.5 .2 ] -.5 .2 [ -.4 .2 .0 .0 .4 .0 ] 3 topsegment
[ -.9 -.35 -.85 -.35 -.8 -.35 ] -.1 -.35 [ .1 -.35 .3 .0 .5 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] -.1 .35 [ .1 .35 .4 .0 .55 .0 ] .55 2 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .05 -.35 [ .2 -.35 .4 .0 .55 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .05 .35 [ .2 .35 .45 .0 .6 .0 ] .7 1 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .0 -.35 [ .15 -.35 .4 .0 .6 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .0 .35 [ .15 .35 .4 .0 .6 .0 ] .7 0 segment
[ -.7 -.35 -.65 -.35 -.6 -.35 ] -.1 -.35 [ .05 -.35 .35 .0 .55 .0 ]
[ -.7 .35 -.65 .35 -.6 .35 ] -.1 .35 [ .05 .35 .25 .0 .4 .0 ] .8 -1 segment
[ -.65 -.2 -.55 -.2 -.45 -.2 ] -.3 -.2 [ -.2 -.2 .2 .0 .3 .0 ]
[ -.65 .1 -.55 .1 -.45 .1 ] -.45 .1 [ -.3 .1 -.1 .0 .0 .0 ] .96 -2 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -4 botsegment
] cvx def
12 3 globesetup
/globe12 [
/newpath load
[ -.8 .2 -.7 .25 -.5 .25 ] -.4 .25 [ -.2 .25 .0 .0 .2 .0 ] 5 topsegment
[ -.7 -.35 -.7 -.35 -.6 -.35 ] -.3 -.35 [ -.1 -.35 .3 .0 .55 .0 ]
[ -.7 .35 -.7 .35 -.6 .35 ] -.25 .35 [ -.05 .35 .4 .0 .55 .0 ] .6 4 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] -.1 -.35 [ .1 -.35 .4 .0 .5 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] -.1 .35 [ .1 .35 .4 .0 .5 .0 ] .7 3 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] .0 .35 [ .15 .35 .4 .0 .5 .0 ] .8 2 segment
[ -.75 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .2 -.35 .4 .0 .5 .0 ]
[ -.75 .35 -.7 .35 -.6 .35 ] .0 .35 [ .2 .35 .45 .0 .55 .0 ] .9 1 segment
[ -.7 -.35 -.6 -.35 -.55 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.7 .35 -.6 .35 -.55 .35 ] .0 .35 [ .1 .35 .5 .0 .6 .0 ] .9 0 segment
] cvx
[
[ -.7 -.35 -.6 -.35 -.5 -.35 ] -.15 -.35 [ .0 -.35 .4 .0 .5 .0 ]
[ -.65 .35 -.55 .35 -.45 .35 ] -.15 .35 [ .0 .35 .35 .0 .45 .0 ] .9 -1 segment
[ -.8 -.1 -.5 -.3 -.4 -.3 ] -.2 -.3 [ .0 -.3 .3 .0 .4 .0 ]
[ -.8 .1 -.5 .3 -.4 .3 ] -.2 .3 [ .0 .3 .2 .0 .3 .0 ] 1 -2 segment
[ -.7 -.1 -.5 -.15 -.4 -.15 ] -.3 -.15 [ -.2 -.15 .0 .0 .2 .0 ]
[ -.7 .05 -.5 .1 -.4 .1 ] -.4 .1 [ -.3 .1 .0 .0 .2 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -4 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -5 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -6 botsegment
] cvx
4 array cvx
dup 0 5 -1 roll put
dup 1 /exec load put
dup 2 4 -1 roll put
dup 3 /exec load put
def
end
/build_L1 {
pop
LOGO-dict-mm begin
ptsize 29 lt
{ /globe /globe8 load def }
{ /globe /globe12 load def } ifelse
gsave
currentpoint translate
size 2 div dup scale
1.02 1 transform round exch round exch itransform
translate
globe fill
grestore
end
} def
0707070014230454661006440057030057030000011347170522627502000003600000000075post.src/devLatin1/charlib/Fi /build_Fi {
pop
size .05 mul neg 0 (ffi) ashow
} def
0707070014230454671006440057030057030000011347360522627502000003600000000075post.src/devLatin1/charlib/Fl /build_Fl {
pop
size .05 mul neg 0 (ffl) ashow
} def
0707070014230454701006440057030057030000011347370522627502000003600000001725post.src/devLatin1/charlib/LA /LOGO-dict-mm dup where not
{ dup 64 dict def currentdict } if
exch get
begin
/l { lineto } def
/rl { rlineto } def
/m { moveto } def
/rm { rmoveto } def
/C { closepath } def
/c { curveto } def
/rc { rcurveto } def
/T { m 0 29 rl -9.5 0 rl 0 7 rl 29 0 rl 0 -7 rl -9.5 0 rl 0 -29 rl C } def
/ATT {
newpath
1 36 div dup scale
0 0 m 12 36 rl 8 0 rl -11 -36 rl C
25 0 m -11 36 rl 8 0 rl 12 -36 rl C
10 7 m 0 7 rl 14 0 rl 0 -7 rl C
36 0 T
80 6 m -3 0 -5 1.2 -6 2 rc -12 10 rl -2.4 2 -2.7 6 0 6 rc
1 0 2 -1 2 -2 rc 0 -4 rl 7 0 rl 0 4 rl
0 5 -3 7 -9 7 rc -6 0 -9 -3 -9 -7 rc
0 -2 0 -3.6 2 -6 rc 12 -10 rl 6 -5 10 -6 13 -6 rc C
71 18 m 0 -6 rl 0 -5 -3 -7 -7 -7 rc -3 0 -5 2 -5 4 rc 0 1 0 3 2 4 rc
-4 5 rl -4 -2 -6 -6 -6 -9 rc 0 -7 6 -10 13 -10 rc
9 0 14 6 14 11 rc 0 8 rl C
82 0 T
36 dup scale
} def
end
/build_LA {
pop
LOGO-dict-mm begin
gsave
currentpoint translate
size 2.56 div dup scale % was size 2.75 div dup scale
.02 0 translate
ATT fill
grestore
end
} def
0707070014230454711006440057030057030000011347500522627502000003600000014673post.src/devLatin1/charlib/LH %
% PostScript 12 and 8 line logos - horizontal configuration. Switch occurs
% automatically below point size 29. Code from Matthijs Melchior.
%
/LOGO-dict-mm where not {
64 dict /LOGO-dict-mm exch def
}{pop} ifelse
LOGO-dict-mm begin % initialize dictionary
/globesetup {
/r exch def
/N exch def
/d 2 N r mul N 1 sub add div def
/h d r mul def
} def
/mkabs {
/yp exch def
/xl exch def
dup dup 0 get xl mul 0 exch put
dup dup 1 get h mul yp add 1 exch put
dup dup 2 get xl mul 2 exch put
dup dup 3 get h mul yp add 3 exch put
dup dup 4 get xl mul 4 exch put
dup dup 5 get h mul yp add 5 exch put
} def
/topsegment {
/n exch def
/y n r mul n .5 add add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 180 a sub /arc load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/botsegment {
/n exch 1 add def
/y n r mul n .5 sub add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 540 a sub /arcn load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/segment {
/n exch def
/dh exch 1 exch sub 2 div def
/ylb n r mul n 0.5 add add d mul def
/ylt ylb h add def
/yrb ylb h dh mul add def
/yrt ylt h dh mul sub def
/alb ylb 1 ylb dup mul sub sqrt atan def
/alt ylt 1 ylt dup mul sub sqrt atan def
/arb yrb 1 yrb dup mul sub sqrt atan 180 exch sub def
/art yrt 1 yrt dup mul sub sqrt atan 180 exch sub def
/xlb alb cos def
/xlt alt cos def
/xrb arb cos def
/xrt art cos def
/c4 exch xrb abs ylb mkabs def
/ly2 exch h mul ylb add def
/lx2 exch xrb abs mul def
/c3 exch xrb abs ylb mkabs def
/c2 exch xrt abs ylt mkabs def
/ly1 exch h mul ylt add def
/lx1 exch xrt abs mul def
/c1 exch xrt abs ylt mkabs def
xlb ylb /moveto load
0 0 1 alb alt /arc load
c2 4 get c2 5 get /lineto load
c2 2 get c2 3 get
c2 0 get c2 1 get
lx1 ly1 /curveto load
c1 4 get c1 5 get /lineto load
c1 2 get c1 3 get
c1 0 get c1 1 get
xrt yrt /curveto load
0 0 1 art arb /arc load
c3 aload pop /curveto load
lx2 ly2 /lineto load
c4 aload pop /curveto load
/closepath load
} def
8 2.5 globesetup
/globe8 [
/newpath load
[ -.9 .1 -.6 .2 -.5 .2 ] -.5 .2 [ -.4 .2 .0 .0 .4 .0 ] 3 topsegment
[ -.9 -.35 -.85 -.35 -.8 -.35 ] -.1 -.35 [ .1 -.35 .3 .0 .5 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] -.1 .35 [ .1 .35 .4 .0 .55 .0 ] .55 2 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .05 -.35 [ .2 -.35 .4 .0 .55 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .05 .35 [ .2 .35 .45 .0 .6 .0 ] .7 1 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .0 -.35 [ .15 -.35 .4 .0 .6 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .0 .35 [ .15 .35 .4 .0 .6 .0 ] .7 0 segment
[ -.7 -.35 -.65 -.35 -.6 -.35 ] -.1 -.35 [ .05 -.35 .35 .0 .55 .0 ]
[ -.7 .35 -.65 .35 -.6 .35 ] -.1 .35 [ .05 .35 .25 .0 .4 .0 ] .8 -1 segment
[ -.65 -.2 -.55 -.2 -.45 -.2 ] -.3 -.2 [ -.2 -.2 .2 .0 .3 .0 ]
[ -.65 .1 -.55 .1 -.45 .1 ] -.45 .1 [ -.3 .1 -.1 .0 .0 .0 ] .96 -2 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -4 botsegment
] cvx def
12 3 globesetup
/globe12 [
/newpath load
[ -.8 .2 -.7 .25 -.5 .25 ] -.4 .25 [ -.2 .25 .0 .0 .2 .0 ] 5 topsegment
[ -.7 -.35 -.7 -.35 -.6 -.35 ] -.3 -.35 [ -.1 -.35 .3 .0 .55 .0 ]
[ -.7 .35 -.7 .35 -.6 .35 ] -.25 .35 [ -.05 .35 .4 .0 .55 .0 ] .6 4 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] -.1 -.35 [ .1 -.35 .4 .0 .5 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] -.1 .35 [ .1 .35 .4 .0 .5 .0 ] .7 3 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] .0 .35 [ .15 .35 .4 .0 .5 .0 ] .8 2 segment
[ -.75 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .2 -.35 .4 .0 .5 .0 ]
[ -.75 .35 -.7 .35 -.6 .35 ] .0 .35 [ .2 .35 .45 .0 .55 .0 ] .9 1 segment
[ -.7 -.35 -.6 -.35 -.55 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.7 .35 -.6 .35 -.55 .35 ] .0 .35 [ .1 .35 .5 .0 .6 .0 ] .9 0 segment
] cvx
[
[ -.7 -.35 -.6 -.35 -.5 -.35 ] -.15 -.35 [ .0 -.35 .4 .0 .5 .0 ]
[ -.65 .35 -.55 .35 -.45 .35 ] -.15 .35 [ .0 .35 .35 .0 .45 .0 ] .9 -1 segment
[ -.8 -.1 -.5 -.3 -.4 -.3 ] -.2 -.3 [ .0 -.3 .3 .0 .4 .0 ]
[ -.8 .1 -.5 .3 -.4 .3 ] -.2 .3 [ .0 .3 .2 .0 .3 .0 ] 1 -2 segment
[ -.7 -.1 -.5 -.15 -.4 -.15 ] -.3 -.15 [ -.2 -.15 .0 .0 .2 .0 ]
[ -.7 .05 -.5 .1 -.4 .1 ] -.4 .1 [ -.3 .1 .0 .0 .2 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -4 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -5 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -6 botsegment
] cvx
4 array cvx
dup 0 5 -1 roll put
dup 1 /exec load put
dup 2 4 -1 roll put
dup 3 /exec load put
def
/l { lineto } def
/rl { rlineto } def
/m { moveto } def
/rm { rmoveto } def
/C { closepath } def
/c { curveto } def
/rc { rcurveto } def
/T { m 0 29 rl -9.5 0 rl 0 7 rl 29 0 rl 0 -7 rl -9.5 0 rl 0 -29 rl C } def
/ATT {
newpath
1 36 div dup scale
0 0 m 12 36 rl 8 0 rl -11 -36 rl C
25 0 m -11 36 rl 8 0 rl 12 -36 rl C
10 7 m 0 7 rl 14 0 rl 0 -7 rl C
36 0 T
80 6 m -3 0 -5 1.2 -6 2 rc -12 10 rl -2.4 2 -2.7 6 0 6 rc
1 0 2 -1 2 -2 rc 0 -4 rl 7 0 rl 0 4 rl
0 5 -3 7 -9 7 rc -6 0 -9 -3 -9 -7 rc
0 -2 0 -3.6 2 -6 rc 12 -10 rl 6 -5 10 -6 13 -6 rc C
71 18 m 0 -6 rl 0 -5 -3 -7 -7 -7 rc -3 0 -5 2 -5 4 rc 0 1 0 3 2 4 rc
-4 5 rl -4 -2 -6 -6 -6 -9 rc 0 -7 6 -10 13 -10 rc
9 0 14 6 14 11 rc 0 8 rl C
82 0 T
36 dup scale
} def
end
/build_LH { % standard ATT logo
LOGO-dict-mm begin
/w exch def
ptsize 29 lt % select globe, # lines depends on point size
{ /globe /globe8 load def }
{ /globe /globe12 load def } ifelse
gsave
currentpoint translate
size 2 div dup scale
gsave
1.02 1 transform round exch round exch itransform
translate
globe fill
grestore
gsave
2.15 .62 translate
.78 dup scale
ATT fill
grestore
grestore
end
} def
0707070014230454721006440057030057030000011347700522627502000003600000014726post.src/devLatin1/charlib/LV %
% PostScript 12 and 8 line logos - vertical configuration. Switch occurs
% automatically below point size 29. Code from Matthijs Melchior.
%
/LOGO-dict-mm where not {
64 dict /LOGO-dict-mm exch def
}{pop} ifelse
LOGO-dict-mm begin % initialize dictionary
/globesetup {
/r exch def
/N exch def
/d 2 N r mul N 1 sub add div def
/h d r mul def
} def
/mkabs {
/yp exch def
/xl exch def
dup dup 0 get xl mul 0 exch put
dup dup 1 get h mul yp add 1 exch put
dup dup 2 get xl mul 2 exch put
dup dup 3 get h mul yp add 3 exch put
dup dup 4 get xl mul 4 exch put
dup dup 5 get h mul yp add 5 exch put
} def
/topsegment {
/n exch def
/y n r mul n .5 add add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 180 a sub /arc load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/botsegment {
/n exch 1 add def
/y n r mul n .5 sub add d mul def
/a y 1 y dup mul sub sqrt atan def
/x a cos def
/c2 exch x y mkabs def
/ly1 exch h mul y add def
/lx1 exch x abs mul def
/c1 exch x y mkabs def
x y /moveto load
0 0 1 a 540 a sub /arcn load
c1 aload pop /curveto load
lx1 ly1 /lineto load
c2 aload pop /curveto load
/closepath load
} def
/segment {
/n exch def
/dh exch 1 exch sub 2 div def
/ylb n r mul n 0.5 add add d mul def
/ylt ylb h add def
/yrb ylb h dh mul add def
/yrt ylt h dh mul sub def
/alb ylb 1 ylb dup mul sub sqrt atan def
/alt ylt 1 ylt dup mul sub sqrt atan def
/arb yrb 1 yrb dup mul sub sqrt atan 180 exch sub def
/art yrt 1 yrt dup mul sub sqrt atan 180 exch sub def
/xlb alb cos def
/xlt alt cos def
/xrb arb cos def
/xrt art cos def
/c4 exch xrb abs ylb mkabs def
/ly2 exch h mul ylb add def
/lx2 exch xrb abs mul def
/c3 exch xrb abs ylb mkabs def
/c2 exch xrt abs ylt mkabs def
/ly1 exch h mul ylt add def
/lx1 exch xrt abs mul def
/c1 exch xrt abs ylt mkabs def
xlb ylb /moveto load
0 0 1 alb alt /arc load
c2 4 get c2 5 get /lineto load
c2 2 get c2 3 get
c2 0 get c2 1 get
lx1 ly1 /curveto load
c1 4 get c1 5 get /lineto load
c1 2 get c1 3 get
c1 0 get c1 1 get
xrt yrt /curveto load
0 0 1 art arb /arc load
c3 aload pop /curveto load
lx2 ly2 /lineto load
c4 aload pop /curveto load
/closepath load
} def
8 2.5 globesetup
/globe8 [
/newpath load
[ -.9 .1 -.6 .2 -.5 .2 ] -.5 .2 [ -.4 .2 .0 .0 .4 .0 ] 3 topsegment
[ -.9 -.35 -.85 -.35 -.8 -.35 ] -.1 -.35 [ .1 -.35 .3 .0 .5 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] -.1 .35 [ .1 .35 .4 .0 .55 .0 ] .55 2 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .05 -.35 [ .2 -.35 .4 .0 .55 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .05 .35 [ .2 .35 .45 .0 .6 .0 ] .7 1 segment
[ -.8 -.35 -.75 -.35 -.7 -.35 ] .0 -.35 [ .15 -.35 .4 .0 .6 .0 ]
[ -.8 .35 -.75 .35 -.7 .35 ] .0 .35 [ .15 .35 .4 .0 .6 .0 ] .7 0 segment
[ -.7 -.35 -.65 -.35 -.6 -.35 ] -.1 -.35 [ .05 -.35 .35 .0 .55 .0 ]
[ -.7 .35 -.65 .35 -.6 .35 ] -.1 .35 [ .05 .35 .25 .0 .4 .0 ] .8 -1 segment
[ -.65 -.2 -.55 -.2 -.45 -.2 ] -.3 -.2 [ -.2 -.2 .2 .0 .3 .0 ]
[ -.65 .1 -.55 .1 -.45 .1 ] -.45 .1 [ -.3 .1 -.1 .0 .0 .0 ] .96 -2 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -4 botsegment
] cvx def
12 3 globesetup
/globe12 [
/newpath load
[ -.8 .2 -.7 .25 -.5 .25 ] -.4 .25 [ -.2 .25 .0 .0 .2 .0 ] 5 topsegment
[ -.7 -.35 -.7 -.35 -.6 -.35 ] -.3 -.35 [ -.1 -.35 .3 .0 .55 .0 ]
[ -.7 .35 -.7 .35 -.6 .35 ] -.25 .35 [ -.05 .35 .4 .0 .55 .0 ] .6 4 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] -.1 -.35 [ .1 -.35 .4 .0 .5 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] -.1 .35 [ .1 .35 .4 .0 .5 .0 ] .7 3 segment
[ -.8 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.8 .35 -.7 .35 -.6 .35 ] .0 .35 [ .15 .35 .4 .0 .5 .0 ] .8 2 segment
[ -.75 -.35 -.7 -.35 -.6 -.35 ] .0 -.35 [ .2 -.35 .4 .0 .5 .0 ]
[ -.75 .35 -.7 .35 -.6 .35 ] .0 .35 [ .2 .35 .45 .0 .55 .0 ] .9 1 segment
[ -.7 -.35 -.6 -.35 -.55 -.35 ] .0 -.35 [ .1 -.35 .45 .0 .55 .0 ]
[ -.7 .35 -.6 .35 -.55 .35 ] .0 .35 [ .1 .35 .5 .0 .6 .0 ] .9 0 segment
] cvx
[
[ -.7 -.35 -.6 -.35 -.5 -.35 ] -.15 -.35 [ .0 -.35 .4 .0 .5 .0 ]
[ -.65 .35 -.55 .35 -.45 .35 ] -.15 .35 [ .0 .35 .35 .0 .45 .0 ] .9 -1 segment
[ -.8 -.1 -.5 -.3 -.4 -.3 ] -.2 -.3 [ .0 -.3 .3 .0 .4 .0 ]
[ -.8 .1 -.5 .3 -.4 .3 ] -.2 .3 [ .0 .3 .2 .0 .3 .0 ] 1 -2 segment
[ -.7 -.1 -.5 -.15 -.4 -.15 ] -.3 -.15 [ -.2 -.15 .0 .0 .2 .0 ]
[ -.7 .05 -.5 .1 -.4 .1 ] -.4 .1 [ -.3 .1 .0 .0 .2 .0 ] 1 -3 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -4 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ]
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] 1 -5 segment
[ .0 .0 .0 .0 .0 .0 ] .0 .0 [ .0 .0 .0 .0 .0 .0 ] -6 botsegment
] cvx
4 array cvx
dup 0 5 -1 roll put
dup 1 /exec load put
dup 2 4 -1 roll put
dup 3 /exec load put
def
/l { lineto } def
/rl { rlineto } def
/m { moveto } def
/rm { rmoveto } def
/C { closepath } def
/c { curveto } def
/rc { rcurveto } def
/T { m 0 29 rl -9.5 0 rl 0 7 rl 29 0 rl 0 -7 rl -9.5 0 rl 0 -29 rl C } def
/ATT {
newpath
1 36 div dup scale
0 0 m 12 36 rl 8 0 rl -11 -36 rl C
25 0 m -11 36 rl 8 0 rl 12 -36 rl C
10 7 m 0 7 rl 14 0 rl 0 -7 rl C
36 0 T
80 6 m -3 0 -5 1.2 -6 2 rc -12 10 rl -2.4 2 -2.7 6 0 6 rc
1 0 2 -1 2 -2 rc 0 -4 rl 7 0 rl 0 4 rl
0 5 -3 7 -9 7 rc -6 0 -9 -3 -9 -7 rc
0 -2 0 -3.6 2 -6 rc 12 -10 rl 6 -5 10 -6 13 -6 rc C
71 18 m 0 -6 rl 0 -5 -3 -7 -7 -7 rc -3 0 -5 2 -5 4 rc 0 1 0 3 2 4 rc
-4 5 rl -4 -2 -6 -6 -6 -9 rc 0 -7 6 -10 13 -10 rc
9 0 14 6 14 11 rc 0 8 rl C
82 0 T
36 dup scale
} def
end
/build_LV { % standard ATT logo
LOGO-dict-mm begin
/w exch def
ptsize 29 lt % select globe, # lines depends on point size
{ /globe /globe8 load def }
{ /globe /globe12 load def } ifelse
gsave
currentpoint translate
size 2 div dup scale
gsave
1.02 1 transform round exch round exch itransform
translate
globe fill
grestore
gsave
%2.15 .62 translate
-0.1 -1.0 translate
.78 dup scale
ATT fill
grestore
grestore
end
} def
0707070014230454731006440057030057030000011347570522627502000004200000001173post.src/devLatin1/charlib/README Postscript definitions for special troff characters. File names are
the two character troff names. Each defines a PostScript procedure
that begins with build_ and ends with the character's name. The
build_?? procedure is called with the character width as it's only
argument. The .map files contain extra character data (e.g. image
data) that dpost downloads immediately after the build_?? call,
if the character's font table code field is 2 (rather than 1).
The following PostScript variables are available:
font current font
ptsize current point size
size actual font size - scaled up from ptsize
Don't overuse this stuff!
0707070014230454741006440057030057030000011261550522627502000003600000002631post.src/devLatin1/charlib/Sl /build_Sl {
pop
gsave
size .0022 mul dup scale
currentpoint translate
14 93 moveto
14 96 lineto
29 110 lineto
44 121 lineto
54 127 lineto
55 132 lineto
57 146 lineto
59 157 lineto
62 171 lineto
66 186 lineto
70 199 lineto
75 213 lineto
81 228 lineto
88 243 lineto
96 257 lineto
106 272 lineto
118 287 lineto
133 300 lineto
148 307 lineto
163 308 lineto
178 304 lineto
191 293 lineto
197 281 lineto
198 277 lineto
198 260 lineto
194 246 lineto
187 231 lineto
179 217 lineto
168 202 lineto
155 187 lineto
141 172 lineto
126 158 lineto
111 146 lineto
96 136 lineto
94 131 lineto
93 123 lineto
92 112 lineto
91 103 lineto
90 93 lineto
89 81 lineto
89 40 lineto
92 28 lineto
97 18 lineto
108 10 lineto
122 10 lineto
134 18 lineto
145 33 lineto
152 48 lineto
158 62 lineto
168 58 lineto
168 59 lineto
163 45 lineto
157 31 lineto
148 16 lineto
133 3 lineto
118 -1 lineto
103 0 lineto
88 5 lineto
73 18 lineto
64 31 lineto
58 46 lineto
55 59 lineto
53 73 lineto
52 111 lineto
37 101 lineto
22 86 lineto
14 93 lineto
97 152 moveto
97 153 lineto
99 166 lineto
101 178 lineto
103 190 lineto
106 205 lineto
109 218 lineto
113 232 lineto
118 246 lineto
124 261 lineto
132 275 lineto
144 290 lineto
157 298 lineto
171 298 lineto
181 291 lineto
186 283 lineto
187 279 lineto
187 264 lineto
186 260 lineto
181 246 lineto
174 233 lineto
165 218 lineto
155 204 lineto
142 190 lineto
127 175 lineto
112 162 lineto
97 152 lineto
eofill
grestore
} def
0707070014230454751006440057030057030000011261570522627502000003600000000264post.src/devLatin1/charlib/bx /build_bx {
pop
size 2 div /side exch def
currentpoint
newpath
moveto
0 side rlineto
side 0 rlineto
0 side neg rlineto
closepath
fill
} def
0707070014230454761006440057030057030000011347770522627502000003600000000221post.src/devLatin1/charlib/ci /build_ci {
pop
size 3 mul 8 div /rad exch def
currentpoint
newpath
rad add exch rad add exch rad 0 360 arc
stroke
} def
0707070014230454771006440057030057030000011261650522627502000003600000000074post.src/devLatin1/charlib/ff /build_ff {
pop
size .05 mul neg 0 (ff) ashow
} def
0707070014230455001006440057030057030000011261660522627502000003600000001716post.src/devLatin1/charlib/lc %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_lc {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 0 get bvbbox 1 get moveto
bvbbox 0 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul add dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 3 get moveto
bvbbox 4 get dup dup
8 mul 0 rlineto
0 exch neg rlineto
8 mul neg 0 rlineto
closepath clip eofill
grestore
} def
0707070014230455011006440057030057030000011261670522627502000003600000001712post.src/devLatin1/charlib/lf %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_lf {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 0 get bvbbox 1 get moveto
bvbbox 0 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul add dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 1 get moveto
bvbbox 4 get dup dup
8 mul 0 rlineto
0 exch rlineto
8 mul neg 0 rlineto
closepath clip eofill
grestore
} def
0707070014230455021006440057030057030000011262000522627502000003600000004412post.src/devLatin1/charlib/lh /build_lh {
pop
gsave
size .0022 mul dup scale
currentpoint translate
16 177 moveto
16 188 lineto
21 193 lineto
30 193 lineto
34 189 lineto
36 183 lineto
36 180 lineto
34 174 lineto
27 170 lineto
19 172 lineto
16 177 lineto
stroke
38 194 moveto
38 196 lineto
53 199 lineto
68 201 lineto
83 202 lineto
98 203 lineto
113 204 lineto
128 204 lineto
143 205 lineto
158 205 lineto
173 205 lineto
188 204 lineto
203 203 lineto
218 202 lineto
233 200 lineto
248 198 lineto
263 196 lineto
278 194 lineto
293 190 lineto
308 186 lineto
323 181 lineto
338 176 lineto
353 168 lineto
361 162 lineto
364 153 lineto
366 138 lineto
367 126 lineto
368 106 lineto
369 80 lineto
369 74 lineto
368 60 lineto
367 54 lineto
362 43 lineto
348 34 lineto
333 28 lineto
318 25 lineto
303 26 lineto
288 29 lineto
273 31 lineto
258 32 lineto
243 32 lineto
228 30 lineto
213 27 lineto
198 24 lineto
183 23 lineto
168 23 lineto
153 27 lineto
148 34 lineto
148 47 lineto
153 54 lineto
168 58 lineto
183 58 lineto
198 58 lineto
213 59 lineto
226 60 lineto
228 62 lineto
228 67 lineto
223 71 lineto
208 71 lineto
193 70 lineto
178 70 lineto
163 70 lineto
148 70 lineto
133 71 lineto
123 76 lineto
120 84 lineto
120 91 lineto
122 98 lineto
129 104 lineto
144 106 lineto
159 107 lineto
174 107 lineto
189 107 lineto
202 108 lineto
204 110 lineto
204 117 lineto
201 119 lineto
186 119 lineto
171 119 lineto
156 119 lineto
141 119 lineto
126 119 lineto
111 121 lineto
103 128 lineto
101 137 lineto
101 142 lineto
103 150 lineto
111 158 lineto
126 161 lineto
141 161 lineto
156 162 lineto
171 163 lineto
186 163 lineto
191 165 lineto
192 167 lineto
192 171 lineto
190 174 lineto
176 175 lineto
161 175 lineto
146 175 lineto
131 174 lineto
116 174 lineto
101 174 lineto
86 173 lineto
71 172 lineto
56 171 lineto
41 171 lineto
41 174 lineto
43 178 lineto
43 187 lineto
38 194 lineto
stroke
373 169 moveto
373 176 lineto
375 182 lineto
386 190 lineto
401 193 lineto
408 191 lineto
411 185 lineto
412 181 lineto
414 167 lineto
415 158 lineto
416 144 lineto
417 128 lineto
418 110 lineto
418 60 lineto
417 45 lineto
415 37 lineto
409 34 lineto
394 31 lineto
381 35 lineto
379 42 lineto
379 52 lineto
380 67 lineto
380 77 lineto
379 77 lineto
378 106 lineto
377 121 lineto
376 133 lineto
375 147 lineto
374 158 lineto
373 169 lineto
stroke
grestore
} def
0707070014230455031006440057030057030000011263050522627502000003600000000222post.src/devLatin1/charlib/ob /build_ob {
pop
size 3 mul 16 div /rad exch def
currentpoint
newpath
rad add exch rad add exch rad 0 360 arc
stroke
} def
0707070014230455041006440057030057030000011263060522627502100003600000001716post.src/devLatin1/charlib/rc %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_rc {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 2 get bvbbox 1 get moveto
bvbbox 2 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul sub dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 3 get moveto
bvbbox 4 get dup dup
8 mul neg 0 rlineto
0 exch neg rlineto
8 mul 0 rlineto
closepath clip eofill
grestore
} def
0707070014230455051006440057030057030000011263070522627502100003600000001712post.src/devLatin1/charlib/rf %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_rf {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 2 get bvbbox 1 get moveto
bvbbox 2 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul sub dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 1 get moveto
bvbbox 4 get dup dup
8 mul neg 0 rlineto
0 exch rlineto
8 mul 0 rlineto
closepath clip eofill
grestore
} def
0707070014230455061006440057030057030000011327350522627502100003600000004171post.src/devLatin1/charlib/rh /build_rh {
pop
gsave
size .0022 mul dup scale
currentpoint translate
15 66 moveto
15 86 lineto
16 131 lineto
17 146 lineto
18 158 lineto
19 167 lineto
21 181 lineto
24 190 lineto
34 193 lineto
49 189 lineto
58 182 lineto
60 177 lineto
60 166 lineto
59 156 lineto
58 143 lineto
57 130 lineto
56 117 lineto
55 102 lineto
54 42 lineto
53 39 lineto
49 35 lineto
34 34 lineto
19 39 lineto
16 47 lineto
15 66 lineto
stroke
65 60 moveto
65 111 lineto
66 127 lineto
67 139 lineto
69 153 lineto
72 163 lineto
83 171 lineto
98 177 lineto
113 182 lineto
128 187 lineto
143 190 lineto
158 194 lineto
173 196 lineto
188 199 lineto
203 201 lineto
218 203 lineto
233 205 lineto
248 205 lineto
263 206 lineto
278 206 lineto
293 206 lineto
308 206 lineto
323 206 lineto
338 205 lineto
353 203 lineto
368 202 lineto
383 200 lineto
394 197 lineto
389 190 lineto
389 180 lineto
391 176 lineto
391 173 lineto
380 173 lineto
365 173 lineto
350 174 lineto
335 175 lineto
320 176 lineto
305 176 lineto
290 176 lineto
275 177 lineto
260 177 lineto
245 177 lineto
240 173 lineto
240 170 lineto
245 165 lineto
260 164 lineto
275 164 lineto
290 164 lineto
305 163 lineto
320 160 lineto
327 155 lineto
330 149 lineto
330 134 lineto
328 129 lineto
323 124 lineto
309 121 lineto
294 121 lineto
279 121 lineto
264 121 lineto
249 121 lineto
234 121 lineto
228 118 lineto
228 112 lineto
234 109 lineto
249 109 lineto
264 109 lineto
279 108 lineto
294 108 lineto
306 104 lineto
311 97 lineto
312 91 lineto
312 88 lineto
311 82 lineto
305 74 lineto
290 72 lineto
275 72 lineto
260 72 lineto
245 73 lineto
230 73 lineto
215 73 lineto
205 70 lineto
205 63 lineto
217 60 lineto
232 60 lineto
247 60 lineto
262 60 lineto
277 57 lineto
283 52 lineto
285 44 lineto
285 41 lineto
284 35 lineto
280 30 lineto
268 26 lineto
253 25 lineto
238 26 lineto
223 28 lineto
208 31 lineto
193 33 lineto
178 34 lineto
163 33 lineto
148 31 lineto
133 28 lineto
118 27 lineto
103 28 lineto
88 34 lineto
73 43 lineto
67 52 lineto
65 60 lineto
stroke
396 180 moveto
396 188 lineto
399 194 lineto
410 196 lineto
416 190 lineto
416 180 lineto
415 177 lineto
411 173 lineto
400 173 lineto
396 180 lineto
stroke
grestore
} def
0707070014230455071006440057030057030000011331250522627502100003600000000320post.src/devLatin1/charlib/sq /build_sq {
pop
size 2 div /side exch def
currentpoint
newpath
moveto
0 side rlineto
side 0 rlineto
0 side neg rlineto
closepath
font B eq {fill} {stroke} ifelse
} def
0707070014230455101006440057030057030000011331260522627502100003600000000130post.src/devLatin1/charlib/~= /build_~= {
pop
(\176) stringwidth pop neg size -.15 mul (\176\055) ashow
} def
0707070014230455111006440057030057030000011331270522627502100003600000000327post.src/devLatin1/charlib/RC /build_RC {
pop
size 4 div /side exch def
currentpoint
newpath
moveto
0 side 1.5 mul rmoveto
0 side rlineto
side 2.5 mul 0 rlineto
0 side neg rlineto
closepath
fill
} def
0707070014230455121006440057030057030000011331750522627502100003600000001051post.src/devLatin1/charlib/DG %
% UMDS danger sign - needs to be cleaned up!
%
/build_DG {
/x0 1.5 6 div 72 mul def % triangle length
pop
gsave
currentpoint translate
1 scaling div ptsize 10 div mul dup scale
2 setlinewidth
0 setlinecap
newpath
0 0 moveto
x0 0 lineto
x0 2 div x0 3 sqrt 2 div mul lineto
closepath fill
1 setgray
/Helvetica-Bold findfont 12 scalefont setfont
0 0 moveto
(!) false charpath pathbbox
exch 4 -1 roll add 2 div x0 2 div exch sub 0 moveto
exch sub x0 3 sqrt 2 div mul exch sub 3 div 0 exch rmoveto
(!) show
grestore
} def
0707070014230455131006440057030057030000011331760522627502100003600000000735post.src/devLatin1/charlib/PC %
% UMDS pencil - needs to be cleaned up.
%
/build_PC {
pop
gsave
currentpoint translate
1 scaling div ptsize 10 div mul dup scale
newpath
0 setlinecap
1 setlinejoin
2 setlinewidth
0 1 moveto 12 0 rlineto stroke
0 5 moveto 12 0 rlineto stroke
0 9 moveto 12 0 rlineto stroke
1 setlinewidth
12 .5 moveto 21.27362 5 lineto 12 9.5 lineto stroke
21.27362 5 moveto
.4 9.27362 mul neg .4 4 mul rlineto
0 .8 4 mul neg rlineto
closepath fill
grestore
} def
0707070014230455141006440057030057030000011333450522627502100003600000004404post.src/devLatin1/charlib/lH /build_lH {
pop
gsave
size .0022 mul dup scale
currentpoint translate
16 177 moveto
16 188 lineto
21 193 lineto
30 193 lineto
34 189 lineto
36 183 lineto
36 180 lineto
34 174 lineto
27 170 lineto
19 172 lineto
16 177 lineto
fill
38 194 moveto
38 196 lineto
53 199 lineto
68 201 lineto
83 202 lineto
98 203 lineto
113 204 lineto
128 204 lineto
143 205 lineto
158 205 lineto
173 205 lineto
188 204 lineto
203 203 lineto
218 202 lineto
233 200 lineto
248 198 lineto
263 196 lineto
278 194 lineto
293 190 lineto
308 186 lineto
323 181 lineto
338 176 lineto
353 168 lineto
361 162 lineto
364 153 lineto
366 138 lineto
367 126 lineto
368 106 lineto
369 80 lineto
369 74 lineto
368 60 lineto
367 54 lineto
362 43 lineto
348 34 lineto
333 28 lineto
318 25 lineto
303 26 lineto
288 29 lineto
273 31 lineto
258 32 lineto
243 32 lineto
228 30 lineto
213 27 lineto
198 24 lineto
183 23 lineto
168 23 lineto
153 27 lineto
148 34 lineto
148 47 lineto
153 54 lineto
168 58 lineto
183 58 lineto
198 58 lineto
213 59 lineto
226 60 lineto
228 62 lineto
228 67 lineto
223 71 lineto
208 71 lineto
193 70 lineto
178 70 lineto
163 70 lineto
148 70 lineto
133 71 lineto
123 76 lineto
120 84 lineto
120 91 lineto
122 98 lineto
129 104 lineto
144 106 lineto
159 107 lineto
174 107 lineto
189 107 lineto
202 108 lineto
204 110 lineto
204 117 lineto
201 119 lineto
186 119 lineto
171 119 lineto
156 119 lineto
141 119 lineto
126 119 lineto
111 121 lineto
103 128 lineto
101 137 lineto
101 142 lineto
103 150 lineto
111 158 lineto
126 161 lineto
141 161 lineto
156 162 lineto
171 163 lineto
186 163 lineto
191 165 lineto
192 167 lineto
192 171 lineto
190 174 lineto
176 175 lineto
161 175 lineto
146 175 lineto
131 174 lineto
116 174 lineto
101 174 lineto
86 173 lineto
71 172 lineto
56 171 lineto
41 171 lineto
41 174 lineto
43 178 lineto
43 187 lineto
38 194 lineto
fill
373 169 moveto
373 176 lineto
375 182 lineto
386 190 lineto
401 193 lineto
408 191 lineto
411 185 lineto
412 181 lineto
414 167 lineto
415 158 lineto
416 144 lineto
417 128 lineto
418 110 lineto
418 60 lineto
417 45 lineto
415 37 lineto
409 34 lineto
394 31 lineto
381 35 lineto
379 42 lineto
379 52 lineto
380 67 lineto
380 77 lineto
379 77 lineto
378 106 lineto
377 121 lineto
376 133 lineto
375 147 lineto
374 158 lineto
373 169 lineto
fill
grestore
} def
0707070014230455151006440057030057030000011336450522627502100003600000004163post.src/devLatin1/charlib/rH /build_rH {
pop
gsave
size .0022 mul dup scale
currentpoint translate
15 66 moveto
15 86 lineto
16 131 lineto
17 146 lineto
18 158 lineto
19 167 lineto
21 181 lineto
24 190 lineto
34 193 lineto
49 189 lineto
58 182 lineto
60 177 lineto
60 166 lineto
59 156 lineto
58 143 lineto
57 130 lineto
56 117 lineto
55 102 lineto
54 42 lineto
53 39 lineto
49 35 lineto
34 34 lineto
19 39 lineto
16 47 lineto
15 66 lineto
fill
65 60 moveto
65 111 lineto
66 127 lineto
67 139 lineto
69 153 lineto
72 163 lineto
83 171 lineto
98 177 lineto
113 182 lineto
128 187 lineto
143 190 lineto
158 194 lineto
173 196 lineto
188 199 lineto
203 201 lineto
218 203 lineto
233 205 lineto
248 205 lineto
263 206 lineto
278 206 lineto
293 206 lineto
308 206 lineto
323 206 lineto
338 205 lineto
353 203 lineto
368 202 lineto
383 200 lineto
394 197 lineto
389 190 lineto
389 180 lineto
391 176 lineto
391 173 lineto
380 173 lineto
365 173 lineto
350 174 lineto
335 175 lineto
320 176 lineto
305 176 lineto
290 176 lineto
275 177 lineto
260 177 lineto
245 177 lineto
240 173 lineto
240 170 lineto
245 165 lineto
260 164 lineto
275 164 lineto
290 164 lineto
305 163 lineto
320 160 lineto
327 155 lineto
330 149 lineto
330 134 lineto
328 129 lineto
323 124 lineto
309 121 lineto
294 121 lineto
279 121 lineto
264 121 lineto
249 121 lineto
234 121 lineto
228 118 lineto
228 112 lineto
234 109 lineto
249 109 lineto
264 109 lineto
279 108 lineto
294 108 lineto
306 104 lineto
311 97 lineto
312 91 lineto
312 88 lineto
311 82 lineto
305 74 lineto
290 72 lineto
275 72 lineto
260 72 lineto
245 73 lineto
230 73 lineto
215 73 lineto
205 70 lineto
205 63 lineto
217 60 lineto
232 60 lineto
247 60 lineto
262 60 lineto
277 57 lineto
283 52 lineto
285 44 lineto
285 41 lineto
284 35 lineto
280 30 lineto
268 26 lineto
253 25 lineto
238 26 lineto
223 28 lineto
208 31 lineto
193 33 lineto
178 34 lineto
163 33 lineto
148 31 lineto
133 28 lineto
118 27 lineto
103 28 lineto
88 34 lineto
73 43 lineto
67 52 lineto
65 60 lineto
fill
396 180 moveto
396 188 lineto
399 194 lineto
410 196 lineto
416 190 lineto
416 180 lineto
415 177 lineto
411 173 lineto
400 173 lineto
396 180 lineto
fill
grestore
} def
0707070014230455161006440057030057030000011263100522627502100004600000010521post.src/devLatin1/charlib/LH.example %
% An example logo character. Building the PostScript program that prints
% your company logo is not addressed here; we assume you already have
% such a program, that it's relatively simple, and that it prints the
% logo by itself on a page. What you'll find here are instructions for
% converting that logo program into a character that can be accessed by
% troff and dpost.
%
% Building a new charlib character involves some PostScript programming.
% We've tried to isolate parameters that you'll need to change (Xoffset,
% Yoffset, and Scaling), but we can't guarantee things will work properly
% with every logo program. PostScript is a complex language and subtle
% interactions between your logo program and what we've done here can
% cause problems.
%
% Tuning the new character is an iterative process. You may want to adjust
% the size of the logo (via Scaling), it's position relative to adjacent
% characters and the baseline (Xoffset and Yoffset), and the distance troff
% moves after printing the character (width field in file ../S1). The steps
% to follow are:
%
% 1: Create a simple troff test file for the new character. Something
% like,
%
% .sp 1i
% .ps 10
% size 10: \(LH
% .sp 1i
% .ps 18
% size 18: \(LH
% .sp 1i
% .ps 36
% size 36: \(LH
% .sp 1i
% .ps 10
% four logo characters: \(LH\(LH\(LH\(LH
%
% is sufficient. The test file can go anywhere.
%
% 2: Change into directory /usr/lib/font/devpost/charlib. All file
% pathnames will be relative to that directory.
%
% 3: Save a copy of the working LH logo file. Then replace LH with
% this file (i.e. LH.example). Changes described below should be
% be made in the new LH file (not in LH.example).
%
% 4: Your PostScript logo program will eventually replace whatever
% you find between the <<StartLogo>> and <<EndLogo>> comment lines
% in the PostScript build_LH procedure (below). What's there now
% prints an example logo that you can use until you understand the
% remaining steps.
%
% 5: Print your troff test file using (assuming your making changes
% in the devpost charlib directory),
%
% troff -Tpost testfile | dpost | lp ...
%
% 6: Adjust the logo positioning by changing the numbers assigned to
% Xoffset and Yoffset (below). Both are in units of 72 per inch.
% Positive offsets should move the logo to the right and up the
% page.
%
% 7: Adjust the logo size by changing the the number assigned to
% Scaling. Unitsize also controls scaling, but there's no good
% reason to change both Scaling and Unitsize.
%
% 8: Control the horizontal distance troff moves after printing the
% new LH character by changing the width (i.e. the number in the
% second column) assigned to LH in file ../S1. Character width
% adjustments should probably wait until you're satisfied with
% the Scaling set in step 7.
%
% 9: Back to step 5 until your satisfied with the output.
%
% The remaining steps are suggested but not required:
%
% 10: Delete PostScript comments in your new LH charlib file - comments
% start with % and go to the end of the line.
%
% 11: Update the width field assigned to LH in file ../shell.lib. The
% new width should reflect what's currently in your S1 font file.
%
% 12: Make a similiar set of changes in /usr/lib/font/devLatin1/charlib.
% You can use the devpost version of LH to devLatin1/charlib/LH,
% but changes to files devLatin1/S1 and devLatin1/shell.lib must be
% entered by hand.
%
/Logo_Dict 100 dict dup begin
/Xoffset 0 def % 72 dpi with positive to the right
/Yoffset 0 def % 72 dpi with positive up the page
/Scaling 1.0 def % adjust this number to change the size
/Unitsize 36 def % for point size scaling - leave it be
/showpage {} def
end def
/build_LH { % don't bind this procedure
Logo_Dict begin
gsave
/charwidth exch def
currentpoint translate
resolution 72 div dup scale
Xoffset Yoffset translate
Scaling Scaling scale
ptsize Unitsize div dup scale
%% Replace everything between the <<StartLogo>> and <<EndLogo>>
%% comment lines by the PostScript program that prints your
%% logo.
%% <<StartLogo>>
newpath
.5 .5 scale
0 0 moveto
100 0 lineto
100 100 lineto
closepath
.5 setgray
fill
0 setgray
10 10 translate
45 rotate
0 5 moveto
/Helvetica findfont 18 scalefont setfont
(Example Logo) show
%% <<EndLogo>>
grestore
end
} def
0707070014231124121006440057030057030000010446020522627502100002600000006132post.src/devLatin1/HK name HK
fontname Helvetica-LightOblique
spacewidth 28
charset
! 33 2 33
" 28 2 34
dq "
# 56 2 35
$ 56 2 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 66 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 66 0 60
= 66 0 61
--- 66 0 62
? 50 2 63
@ 80 2 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 2 81
R 67 2 82
S 61 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 89 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
^ 33 2 147
--- 66 2 94
--- 50 1 95
` 22 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 28 2 102
g 61 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 22 2 124
} 33 3 125
~ 33 2 148
--- 66 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 0 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 22 2 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 80 2 169
\0251 "
a_ 33 2 170
\0252 "
<< 56 0 171
\0253 "
-, 66 0 172
\0254 "
hy 33 0 173
\0255 "
-- 66 0 45
ro 80 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 66 0 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 56 1 181
\0265 "
P! 65 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 33 2 186
\0272 "
>> 56 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 50 1 191
\0277 "
A` 67 2 192
\0300 "
A' 67 2 193
\0301 "
A^ 67 2 194
\0302 "
A~ 67 2 195
\0303 "
A" 67 2 196
\0304 "
A* 67 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 61 2 200
\0310 "
E' 61 2 201
\0311 "
E^ 61 2 202
\0312 "
E" 61 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 66 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 61 2 221
\0335 "
TH 61 2 222
\0336 "
ss 50 2 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 89 0 230
\0346 "
c, 56 1 231
\0347 "
e` 56 2 232
\0350 "
e' 56 2 233
\0351 "
e^ 56 2 234
\0352 "
e" 56 2 235
\0353 "
i` 22 2 236
\0354 "
i' 22 2 237
\0355 "
i^ 22 2 238
\0356 "
i" 22 2 239
\0357 "
d- 56 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 56 2 242
\0362 "
o' 56 2 243
\0363 "
o^ 56 2 244
\0364 "
o~ 56 2 245
\0365 "
o" 56 2 246
\0366 "
-: 66 0 247
\0367 "
o/ 56 0 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 50 3 253
\0375 "
th 61 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231124131006440057030057030000010446200522627502100002600000006123post.src/devLatin1/HL name HL
fontname Helvetica-Light
spacewidth 28
charset
! 33 2 33
" 28 2 34
dq "
# 56 2 35
$ 56 2 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 66 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 66 0 60
= 66 0 61
--- 66 0 62
? 50 2 63
@ 80 2 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 2 81
R 67 2 82
S 61 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 89 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
^ 33 2 147
--- 66 2 94
--- 50 1 95
` 22 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 28 2 102
g 61 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 22 2 124
} 33 3 125
~ 33 2 148
--- 66 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 0 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 22 2 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 80 2 169
\0251 "
a_ 33 2 170
\0252 "
<< 56 0 171
\0253 "
-, 66 0 172
\0254 "
hy 33 0 173
\0255 "
-- 66 0 45
ro 80 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 66 0 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 56 1 181
\0265 "
P! 65 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 33 2 186
\0272 "
>> 56 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 50 1 191
\0277 "
A` 67 2 192
\0300 "
A' 67 2 193
\0301 "
A^ 67 2 194
\0302 "
A~ 67 2 195
\0303 "
A" 67 2 196
\0304 "
A* 67 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 61 2 200
\0310 "
E' 61 2 201
\0311 "
E^ 61 2 202
\0312 "
E" 61 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 66 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 61 2 221
\0335 "
TH 61 2 222
\0336 "
ss 50 2 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 89 0 230
\0346 "
c, 56 1 231
\0347 "
e` 56 2 232
\0350 "
e' 56 2 233
\0351 "
e^ 56 2 234
\0352 "
e" 56 2 235
\0353 "
i` 22 2 236
\0354 "
i' 22 2 237
\0355 "
i^ 22 2 238
\0356 "
i" 22 2 239
\0357 "
d- 56 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 56 2 242
\0362 "
o' 56 2 243
\0363 "
o^ 56 2 244
\0364 "
o~ 56 2 245
\0365 "
o" 56 2 246
\0366 "
-: 66 0 247
\0367 "
o/ 56 0 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 50 3 253
\0375 "
th 61 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014231124141006440057030057030000010446400522627502100004200000053476post.src/devLatin1/shell.lib.last #
# Shell library - for building devLatin1 tables.
#
# The full ISO Latin1 alphabet appeared in Adobe's interpreter sometime
# around Version 50.0. Prior to that ROM resident Type 1 text fonts were
# missing 18 characters that are now part of the Latin1 standard. Width
# tables will not build on printers that lack full Latin1 support. Error
# message will likely reflect a missing ISOLatin1Encoding array.
#
RESOLUTION=720
UNITWIDTH=10
OCTALESCAPES=${OCTALESCAPES:-160} # <= code means add \0ddd names
DOWNLOADVECTOR=FALSE # TRUE can mean incomplete tables
#
# BuiltinTables returns command lines that generate PostScript programs
# for building a typesetter description file and font width tables for
# a relatively standard collection of fonts. Use awk to select a command
# line or modify an existing command to build a width table for a new
# font.
#
BuiltinTables() {
cat <<-'//End of BuiltinTables'
Proportional R Times-Roman
Proportional I Times-Italic
Proportional B Times-Bold
Proportional BI Times-BoldItalic
Proportional AB AvantGarde-Demi
Proportional AI AvantGarde-BookOblique
Proportional AR AvantGarde-Book
Proportional AX AvantGarde-DemiOblique
Proportional H Helvetica
Proportional HB Helvetica-Bold
Proportional HI Helvetica-Oblique
Proportional HX Helvetica-BoldOblique
Proportional Hb Helvetica-Narrow-Bold
Proportional Hi Helvetica-Narrow-Oblique
Proportional Hr Helvetica-Narrow
Proportional Hx Helvetica-Narrow-BoldOblique
Proportional KB Bookman-Demi
Proportional KI Bookman-LightItalic
Proportional KR Bookman-Light
Proportional KX Bookman-DemiItalic
Proportional NB NewCenturySchlbk-Bold
Proportional NI NewCenturySchlbk-Italic
Proportional NR NewCenturySchlbk-Roman
Proportional NX NewCenturySchlbk-BoldItalic
Proportional PA Palatino-Roman
Proportional PB Palatino-Bold
Proportional PI Palatino-Italic
Proportional PX Palatino-BoldItalic
Proportional ZI ZapfChancery-MediumItalic
FixedWidth C Courier
FixedWidth CB Courier-Bold
FixedWidth CI Courier-Oblique
FixedWidth CO Courier
FixedWidth CW Courier
FixedWidth CX Courier-BoldOblique
Dingbats ZD ZapfDingbats
Greek GR Symbol
Symbol S Symbol
Special S1 Times-Roman
Description DESC ---
//End of BuiltinTables
}
#
# AllTables prints the complete list of builtin font names.
#
AllTables() {
BuiltinTables | awk '{print $2}'
}
#
# Charset functions generate keyword/value pairs (as PostScript objects)
# that describe the character set available in a font. The keyword is a
# PostScript string that represents troff's name for the character. The
# value is usually the literal name (i.e. begins with a /) assigned to
# the character in the PostScript font. The value can also be an integer
# or a PostScript string. An integer value is used as an index in the
# current font's Encoding array. A string value is returned to the host
# unchanged when the entry for the character is constructed. Entries that
# have (") as their value are synonyms for the preceeding character.
#
# The 18 characters missing from ROM resident fonts on older printers are
# flagged with the PostScript comment "% missing".
#
StandardCharset() {
cat <<-'//End of StandardCharset'
(!) /exclam
(") /quotedbl
(#) /numbersign
($) /dollar
(%) /percent
(&) /ampersand
(') /quoteright
(\() /parenleft
(\)) /parenright
(*) /asterisk
(+) /plus
(,) /comma
(-) /hyphen % changed from minus by request
(.) /period
(/) /slash
(0) /zero
(1) /one
(2) /two
(3) /three
(4) /four
(5) /five
(6) /six
(7) /seven
(8) /eight
(9) /nine
(:) /colon
(;) /semicolon
(<) /less
(=) /equal
(>) /greater
(?) /question
(@) /at
(A) /A
(B) /B
(C) /C
(D) /D
(E) /E
(F) /F
(G) /G
(H) /H
(I) /I
(J) /J
(K) /K
(L) /L
(M) /M
(N) /N
(O) /O
(P) /P
(Q) /Q
(R) /R
(S) /S
(T) /T
(U) /U
(V) /V
(W) /W
(X) /X
(Y) /Y
(Z) /Z
([) /bracketleft
(\\) /backslash
(]) /bracketright
(^) /asciicircum
(_) /underscore
(`) /quoteleft
(a) /a
(b) /b
(c) /c
(d) /d
(e) /e
(f) /f
(g) /g
(h) /h
(i) /i
(j) /j
(k) /k
(l) /l
(m) /m
(n) /n
(o) /o
(p) /p
(q) /q
(r) /r
(s) /s
(t) /t
(u) /u
(v) /v
(w) /w
(x) /x
(y) /y
(z) /z
({) /braceleft
(|) /bar
(}) /braceright
(~) /asciitilde
(\\`) /grave % devpost character
(ga) (") % synonym
(!!) /exclamdown
(c|) /cent
(ct) (") % devpost synonym
(L-) /sterling
(ps) (") % devpost synonym
(xo) /currency
(cr) (") % devpost synonym
(Y-) /yen
(yn) (") % devpost synonym
(||) /brokenbar % missing
(so) /section
(sc) (") % devpost synonym
("") /dieresis
(:a) (") % devpost synonym
(co) /copyright
(a_) /ordfeminine
(<<) /guillemotleft
(-,) /logicalnot
(hy) /hyphen
(--) (") % synonym
(ro) /registered
(rg) (") % devpost synonym
(-^) /macron
(-a) (") % devpost synonym
(0^) /degree % missing
(+-) /plusminus % missing
(2^) /twosuperior % missing
(3^) /threesuperior % missing
(\\') /acute
(aa) (") % devpost synonym
(/u) /mu % missing
(P!) /paragraph
(pg) (") % devpost synonym
(.^) /periodcentered
(,,) /cedilla
(,a) (") % devpost synonym
(1^) /onesuperior % missing
(o_) /ordmasculine
(>>) /guillemotright
(14) /onequarter % missing
(12) /onehalf % missing
(34) /threequarters % missing
(??) /questiondown
(A`) /Agrave
(A') /Aacute
(A^) /Acircumflex
(A~) /Atilde
(A") /Adieresis
(A*) /Aring
(AE) /AE
(C,) /Ccedilla
(E`) /Egrave
(E') /Eacute
(E^) /Ecircumflex
(E") /Edieresis
(I`) /Igrave
(I') /Iacute
(I^) /Icircumflex
(I") /Idieresis
(D-) /Eth % missing
(N~) /Ntilde
(O`) /Ograve
(O') /Oacute
(O^) /Ocircumflex
(O~) /Otilde
(O") /Odieresis
(xx) /multiply % missing
(O/) /Oslash
(U`) /Ugrave
(U') /Uacute
(U^) /Ucircumflex
(U") /Udieresis
(Y') /Yacute % missing
(TH) /Thorn % missing
(ss) /germandbls
(a`) /agrave
(a') /aacute
(a^) /acircumflex
(a~) /atilde
(a") /adieresis
(a*) /aring
(ae) /ae
(c,) /ccedilla
(e`) /egrave
(e') /eacute
(e^) /ecircumflex
(e") /edieresis
(i`) /igrave
(i') /iacute
(i^) /icircumflex
(i") /idieresis
(d-) /eth % missing
(n~) /ntilde
(o`) /ograve
(o') /oacute
(o^) /ocircumflex
(o~) /otilde
(o") /odieresis
(-:) /divide % missing
(o/) /oslash
(u`) /ugrave
(u') /uacute
(u^) /ucircumflex
(u") /udieresis
(y') /yacute % missing
(th) /thorn % missing
(y") /ydieresis
(^a) /circumflex % devpost accent
(~a) /tilde % devpost accent
(Ua) /breve % devpost accent
(.a) /dotaccent % devpost accent
(oa) /ring % devpost accent
("a) /hungarumlaut % devpost accent
(Ca) /ogonek % devpost accent
(va) /caron % devpost accent
//End of StandardCharset
}
#
# DingbatsCharset guarantees changes in StandardCharset don't show up in ZD.
#
DingbatsCharset() {
cat <<-'//End of DingbatsCharset'
(!) /exclam
(") /quotedbl
(#) /numbersign
($) /dollar
(%) /percent
(&) /ampersand
(') /quoteright
(\() /parenleft
(\)) /parenright
(*) /asterisk
(+) /plus
(,) /comma
(-) /minus % also hyphen in devpost
(.) /period
(/) /slash
(0) /zero
(1) /one
(2) /two
(3) /three
(4) /four
(5) /five
(6) /six
(7) /seven
(8) /eight
(9) /nine
(:) /colon
(;) /semicolon
(<) /less
(=) /equal
(>) /greater
(?) /question
(@) /at
(A) /A
(B) /B
(C) /C
(D) /D
(E) /E
(F) /F
(G) /G
(H) /H
(I) /I
(J) /J
(K) /K
(L) /L
(M) /M
(N) /N
(O) /O
(P) /P
(Q) /Q
(R) /R
(S) /S
(T) /T
(U) /U
(V) /V
(W) /W
(X) /X
(Y) /Y
(Z) /Z
([) /bracketleft
(\\) /backslash
(]) /bracketright
(^) /asciicircum
(_) /underscore
(`) /quoteleft
(a) /a
(b) /b
(c) /c
(d) /d
(e) /e
(f) /f
(g) /g
(h) /h
(i) /i
(j) /j
(k) /k
(l) /l
(m) /m
(n) /n
(o) /o
(p) /p
(q) /q
(r) /r
(s) /s
(t) /t
(u) /u
(v) /v
(w) /w
(x) /x
(y) /y
(z) /z
({) /braceleft
(|) /bar
(}) /braceright
(~) /asciitilde
(\\`) /grave % devpost character
(ga) (") % synonym
(!!) /exclamdown
(c|) /cent
(ct) (") % devpost synonym
(L-) /sterling
(ps) (") % devpost synonym
(xo) /currency
(cr) (") % devpost synonym
(Y-) /yen
(yn) (") % devpost synonym
(||) /brokenbar % missing
(so) /section
(sc) (") % devpost synonym
("") /dieresis
(co) /copyright
(a_) /ordfeminine
(<<) /guillemotleft
(-,) /logicalnot
(hy) /hyphen
(--) (") % synonym
(ro) /registered
(rg) (") % devpost synonym
(-^) /macron
(0^) /degree % missing
(+-) /plusminus % missing
(2^) /twosuperior % missing
(3^) /threesuperior % missing
(\\') /acute
(aa) (") % devpost synonym
(/u) /mu % missing
(P!) /paragraph
(pg) (") % devpost synonym
(.^) /periodcentered
(,,) /cedilla
(1^) /onesuperior % missing
(o_) /ordmasculine
(>>) /guillemotright
(14) /onequarter % missing
(12) /onehalf % missing
(34) /threequarters % missing
(??) /questiondown
(A`) /Agrave
(A') /Aacute
(A^) /Acircumflex
(A~) /Atilde
(A") /Adieresis
(A*) /Aring
(AE) /AE
(C,) /Ccedilla
(E`) /Egrave
(E') /Eacute
(E^) /Ecircumflex
(E") /Edieresis
(I`) /Igrave
(I') /Iacute
(I^) /Icircumflex
(I") /Idieresis
(D-) /Eth % missing
(N~) /Ntilde
(O`) /Ograve
(O') /Oacute
(O^) /Ocircumflex
(O~) /Otilde
(O") /Odieresis
(xx) /multiply % missing
(O/) /Oslash
(U`) /Ugrave
(U') /Uacute
(U^) /Ucircumflex
(U") /Udieresis
(Y') /Yacute % missing
(TH) /Thorn % missing
(ss) /germandbls
(a`) /agrave
(a') /aacute
(a^) /acircumflex
(a~) /atilde
(a") /adieresis
(a*) /aring
(ae) /ae
(c,) /ccedilla
(e`) /egrave
(e') /eacute
(e^) /ecircumflex
(e") /edieresis
(i`) /igrave
(i') /iacute
(i^) /icircumflex
(i") /idieresis
(d-) /eth % missing
(n~) /ntilde
(o`) /ograve
(o') /oacute
(o^) /ocircumflex
(o~) /otilde
(o") /odieresis
(-:) /divide % missing
(o/) /oslash
(u`) /ugrave
(u') /uacute
(u^) /ucircumflex
(u") /udieresis
(y') /yacute % missing
(th) /thorn % missing
(y") /ydieresis
//End of DingbatsCharset
}
SymbolCharset() {
cat <<-'//End of SymbolCharset'
(---) /exclam
(fa) /universal
(---) /numbersign
(te) /existential
(---) /percent
(---) /ampersand
(st) /suchthat
(---) /parenleft
(---) /parenright
(**) /asteriskmath
(pl) /plus
(---) /comma
(mi) /minus
(---) /period
(sl) /slash
(---) /zero
(---) /one
(---) /two
(---) /three
(---) /four
(---) /five
(---) /six
(---) /seven
(---) /eight
(---) /nine
(---) /colon
(---) /semicolon
(<) /less
(eq) /equal
(>) /greater
(---) /question
(cg) /congruent
(*A) /Alpha
(*B) /Beta
(*X) /Chi
(*D) /Delta
(*E) /Epsilon
(*F) /Phi
(*G) /Gamma
(*Y) /Eta
(*I) /Iota
(---) /theta1
(*K) /Kappa
(*L) /Lambda
(*M) /Mu
(*N) /Nu
(*O) /Omicron
(*P) /Pi
(*H) /Theta
(*R) /Rho
(*S) /Sigma
(*T) /Tau
(*U) /Upsilon
(ts) /sigma1
(*W) /Omega
(*C) /Xi
(*Q) /Psi
(*Z) /Zeta
(---) /bracketleft
(tf) /therefore
(---) /bracketright
(pp) /perpendicular
(ul) /underscore
(_) (") % synonym
(rn) /radicalex
(*a) /alpha
(*b) /beta
(*x) /chi
(*d) /delta
(*e) /epsilon
(*f) /phi
(*g) /gamma
(*y) /eta
(*i) /iota
(---) /phi1
(*k) /kappa
(*l) /lambda
(*m) /mu
(*n) /nu
(*o) /omicron
(*p) /pi
(*h) /theta
(*r) /rho
(*s) /sigma
(*t) /tau
(*u) /upsilon
(---) /omega1
(*w) /omega
(*c) /xi
(*q) /psi
(*z) /zeta
(---) /braceleft
(or) /bar
(---) /braceright
(ap) /similar
(---) /Upsilon1
(fm) /minute
(<=) /lessequal
(fr) /fraction % devpost character
(if) /infinity
(fn) /florin % devpost character
(---) /club
(---) /diamond
(---) /heart
(---) /spade
(ab) /arrowboth
(<-) /arrowleft
(ua) /arrowup
(->) /arrowright
(da) /arrowdown
(de) /degree
(+-) /plusminus
(---) /second
(>=) /greaterequal
(mu) /multiply
(pt) /proportional
(pd) /partialdiff
(bu) /bullet
(di) /divide
(!=) /notequal
(==) /equivalence
(~~) /approxequal
(el) /ellipsis
(av) /arrowvertex
(ah) /arrowhorizex
(CR) /carriagereturn
(af) /aleph
(If) /Ifraktur
(Rf) /Rfraktur
(ws) /weierstrass
(Ox) /circlemultiply
(O+) /circleplus
(es) /emptyset
(ca) /intersection
(cu) /union
(sp) /propersuperset
(ip) /reflexsuperset
(!b) /notsubset
(sb) /propersubset
(ib) /reflexsubset
(mo) /element
(!m) /notelement
(an) /angle
(gr) /gradient
(rg) /registerserif
(co) /copyrightserif
(tm) /trademarkserif
(---) /product
(sr) /radical
(c.) /dotmath
(no) /logicalnot
(l&) /logicaland
(l|) /logicalor
(---) /arrowdblboth
(---) /arrowdblleft
(---) /arrowdblup
(---) /arrowdblright
(---) /arrowdbldown
(lz) /lozenge
(b<) /angleleft
(RG) /registersans
(CO) /copyrightsans
(TM) /trademarksans
(---) /summation
(LT) /parenlefttp
(br) /parenleftex
(LX) (") % synonym
(LB) /parenleftbt
(lc) /bracketlefttp
(lx) /bracketleftex
(lf) /bracketleftbt
(lt) /bracelefttp
(lk) /braceleftmid
(lb) /braceleftbt
(bv) /braceex
(|) (") % synonym
(b>) /angleright
(is) /integral
(---) /integraltp
(---) /integralex
(---) /integralbt
(RT) /parenrighttp
(RX) /parenrightex
(RB) /parenrightbt
(rc) /bracketrighttp
(rx) /bracketrightex
(rf) /bracketrightbt
(rt) /bracerighttp
(rk) /bracerightmid
(rb) /bracerightbt
(~=) (55 0 1) % charlib
//End of SymbolCharset
}
SpecialCharset() {
cat <<-'//End of SpecialCharset'
(ru) /underscore
('') /quotedblright % devpost character
(``) /quotedblleft % devpost character
(dg) /dagger % devpost character
(dd) /daggerdbl % devpost character
(en) /endash % devpost character
(\\-) (") % synonym
(em) /emdash
% (ff) (60 2 1) % charlib
% (Fi) (84 2 1) % charlib
% (Fl) (84 2 1) % charlib
(14) (75 2 1) % charlib
(12) (75 2 1) % charlib
(34) (75 2 1) % charlib
(bx) (50 2 1) % charlib
(ob) (38 2 1) % charlib
(ci) (75 0 1) % charlib
(sq) (50 2 1) % charlib
(Sl) (50 2 1) % charlib
(L1) (110 1 2) % charlib
(LA) (110 1 2) % charlib
(LV) (110 3 1) % charlib
(LH) (210 1 1) % charlib
(lh) (100 0 1) % charlib
(rh) (100 0 1) % charlib
(lH) (100 0 1) % charlib
(rH) (100 0 1) % charlib
(PC) (220 2 1) % charlib
(DG) (185 2 1) % charlib
//End of SpecialCharset
}
#
# Latin1 ensures a font uses the ISOLatin1Encoding vector, although only
# text fonts should be re-encoded. Downloading the Encoding vector doesn't
# often make sense. No ISOLatin1Encoding array likely means ROM based fonts
# on your printer are incomplete. Type 1 fonts with a full Latin1 character
# set appeared sometime after Version 50.0.
#
Latin1() {
if [ "$DOWNLOADVECTOR" = TRUE ]; then
cat <<-'//End of ISOLatin1Encoding'
/ISOLatin1Encoding [
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/space
/exclam
/quotedbl
/numbersign
/dollar
/percent
/ampersand
/quoteright
/parenleft
/parenright
/asterisk
/plus
/comma
/minus
/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
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/dotlessi
/grave
/acute
/circumflex
/tilde
/macron
/breve
/dotaccent
/dieresis
/.notdef
/ring
/cedilla
/.notdef
/hungarumlaut
/ogonek
/caron
/space
/exclamdown
/cent
/sterling
/currency
/yen
/brokenbar
/section
/dieresis
/copyright
/ordfeminine
/guillemotleft
/logicalnot
/hyphen
/registered
/macron
/degree
/plusminus
/twosuperior
/threesuperior
/acute
/mu
/paragraph
/periodcentered
/cedilla
/onesuperior
/ordmasculine
/guillemotright
/onequarter
/onehalf
/threequarters
/questiondown
/Agrave
/Aacute
/Acircumflex
/Atilde
/Adieresis
/Aring
/AE
/Ccedilla
/Egrave
/Eacute
/Ecircumflex
/Edieresis
/Igrave
/Iacute
/Icircumflex
/Idieresis
/Eth
/Ntilde
/Ograve
/Oacute
/Ocircumflex
/Otilde
/Odieresis
/multiply
/Oslash
/Ugrave
/Uacute
/Ucircumflex
/Udieresis
/Yacute
/Thorn
/germandbls
/agrave
/aacute
/acircumflex
/atilde
/adieresis
/aring
/ae
/ccedilla
/egrave
/eacute
/ecircumflex
/edieresis
/igrave
/iacute
/icircumflex
/idieresis
/eth
/ntilde
/ograve
/oacute
/ocircumflex
/otilde
/odieresis
/divide
/oslash
/ugrave
/uacute
/ucircumflex
/udieresis
/yacute
/thorn
/ydieresis
] def
//End of ISOLatin1Encoding
fi
echo "ISOLatin1Encoding /$1 ReEncode"
}
#
# Generating functions output PostScript programs that build font width
# tables or a typesetter description file. Send the program to a printer
# and the complete table will come back on the serial port. All write on
# stdout and assume the prologue and other required PostScript files are
# all available.
#
Proportional() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
# Get <>_ and | from S. Use accents for ascii ^ and ~.
StandardCharset | awk '
$1 == "(<)" && $2 == "/less" {$1 = "(---)"}
$1 == "(>)" && $2 == "/greater" {$1 = "(---)"}
$1 == "(_)" && $2 == "/underscore" {$1 = "(---)"}
$1 == "(|)" && $2 == "/bar" {$1 = "(---)"}
$1 == "(^)" && $2 == "/asciicircum" {
printf "(^)\t/circumflex\n"
$1 = "(---)"
}
$1 == "(~)" && $2 == "/asciitilde" {
printf "(~)\t/tilde\n"
$1 = "(---)"
}
{printf "%s\t%s\n", $1, $2}
'
echo "] def"
Latin1 $2
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
FixedWidth() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
StandardCharset
echo "] def"
Latin1 $2
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Dingbats() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
DingbatsCharset | awk '$1 != "(---)" && $2 ~ /^\/[a-zA-Z]/ {
printf "%s\tISOLatin1Encoding %s GetCode\n", $1, $2
}'
echo "] def"
echo "/$2 SelectFont"
echo "( ) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Greek() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset | awk '$1 ~ /\(\*[a-zA-Z]\)/'
echo "] def"
echo "/$2 SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Symbol() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset
echo "] def"
echo "ChangeMetrics"
echo "/S SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Special() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SpecialCharset
echo "] def"
echo "ChangeMetrics"
echo "/S1 SelectFont"
echo "(# Times-Roman special font\\\\n) Print"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
#
# The DESC file doesn't have to be built on a printer. It's only here for
# consistency.
#
Description() {
echo "/charset [" # awk - so the stack doesn't overflow
StandardCharset | awk '{print $1}'
SymbolCharset | awk '{print $1}'
SpecialCharset | awk '{print $1}'
echo "] def"
cat <<-//DESC
(#Device Description - Latin1 character set
PDL PostScript
Encoding Latin1
fonts 10 R I B BI CW H HI HB S1 S
sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
120 125 130 135 140 145 150 155 160 0
res $RESOLUTION
hor 1
vert 1
unitwidth $UNITWIDTH
) Print
//DESC
echo "(charset\\\\n) Print"
echo "BuildDescCharset"
echo "(\\\\n) Print"
}
0707070014231124151006440057030057030000010447200522627502100004100000044161post.src/devLatin1/shell.lib.old #
# Shell library - for building devLatin1 tables.
#
# The full ISO Latin1 alphabet appeared in Adobe's interpreter sometime
# around Version 50.0. Prior to that ROM resident Type 1 text fonts were
# missing 18 characters that are now part of the Latin1 standard. Width
# tables will not build on printers that lack full Latin1 support. Error
# message will likely reflect a missing ISOLatin1Encoding array.
#
RESOLUTION=720
UNITWIDTH=10
OCTALESCAPES=${OCTALESCAPES:-160} # <= code means add \0ddd names
DOWNLOADVECTOR=FALSE # TRUE can mean incomplete tables
#
# BuiltinTables returns command lines that generate PostScript programs
# for building a typesetter description file and font width tables for
# a relatively standard collection of fonts. Use awk to select a command
# line or modify an existing command to build a width table for a new
# font.
#
BuiltinTables() {
cat <<-'//End of BuiltinTables'
Proportional R Times-Roman
Proportional I Times-Italic
Proportional B Times-Bold
Proportional BI Times-BoldItalic
Proportional AB AvantGarde-Demi
Proportional AI AvantGarde-BookOblique
Proportional AR AvantGarde-Book
Proportional AX AvantGarde-DemiOblique
Proportional H Helvetica
Proportional HB Helvetica-Bold
Proportional HI Helvetica-Oblique
Proportional HX Helvetica-BoldOblique
Proportional Hb Helvetica-Narrow-Bold
Proportional Hi Helvetica-Narrow-Oblique
Proportional Hr Helvetica-Narrow
Proportional Hx Helvetica-Narrow-BoldOblique
Proportional KB Bookman-Demi
Proportional KI Bookman-LightItalic
Proportional KR Bookman-Light
Proportional KX Bookman-DemiItalic
Proportional NB NewCenturySchlbk-Bold
Proportional NI NewCenturySchlbk-Italic
Proportional NR NewCenturySchlbk-Roman
Proportional NX NewCenturySchlbk-BoldItalic
Proportional PA Palatino-Roman
Proportional PB Palatino-Bold
Proportional PI Palatino-Italic
Proportional PX Palatino-BoldItalic
Proportional ZI ZapfChancery-MediumItalic
FixedWidth C Courier
FixedWidth CB Courier-Bold
FixedWidth CI Courier-Oblique
FixedWidth CO Courier
FixedWidth CW Courier
FixedWidth CX Courier-BoldOblique
Dingbats ZD ZapfDingbats
Greek GR Symbol
Symbol S Symbol
Special S1 Times-Roman
Description DESC ---
//End of BuiltinTables
}
#
# AllTables prints the complete list of builtin font names.
#
AllTables() {
BuiltinTables | awk '{print $2}'
}
#
# Charset functions generate keyword/value pairs (as PostScript objects)
# that describe the character set available in a font. The keyword is a
# PostScript string that represents troff's name for the character. The
# value is usually the literal name (i.e. begins with a /) assigned to
# the character in the PostScript font. The value can also be an integer
# or a PostScript string. An integer value is used as an index in the
# current font's Encoding array. A string value is returned to the host
# unchanged when the entry for the character is constructed. Entries that
# have (") as their value are synonyms for the preceeding character.
#
# The 18 characters missing from ROM resident fonts on older printers are
# flagged with the PostScript comment "% missing".
#
StandardCharset() {
cat <<-'//End of StandardCharset'
(!) /exclam
(") /quotedbl
(#) /numbersign
($) /dollar
(%) /percent
(&) /ampersand
(') /quoteright
(\() /parenleft
(\)) /parenright
(*) /asterisk
(+) /plus
(,) /comma
(-) /minus % also hyphen in devpost
(.) /period
(/) /slash
(0) /zero
(1) /one
(2) /two
(3) /three
(4) /four
(5) /five
(6) /six
(7) /seven
(8) /eight
(9) /nine
(:) /colon
(;) /semicolon
(<) /less
(=) /equal
(>) /greater
(?) /question
(@) /at
(A) /A
(B) /B
(C) /C
(D) /D
(E) /E
(F) /F
(G) /G
(H) /H
(I) /I
(J) /J
(K) /K
(L) /L
(M) /M
(N) /N
(O) /O
(P) /P
(Q) /Q
(R) /R
(S) /S
(T) /T
(U) /U
(V) /V
(W) /W
(X) /X
(Y) /Y
(Z) /Z
([) /bracketleft
(\\) /backslash
(]) /bracketright
(^) /asciicircum
(_) /underscore
(`) /quoteleft
(a) /a
(b) /b
(c) /c
(d) /d
(e) /e
(f) /f
(g) /g
(h) /h
(i) /i
(j) /j
(k) /k
(l) /l
(m) /m
(n) /n
(o) /o
(p) /p
(q) /q
(r) /r
(s) /s
(t) /t
(u) /u
(v) /v
(w) /w
(x) /x
(y) /y
(z) /z
({) /braceleft
(|) /bar
(}) /braceright
(~) /asciitilde
(\\`) /grave % devpost character
(ga) (") % synonym
(!!) /exclamdown
(c|) /cent
(ct) (") % devpost synonym
(L-) /sterling
(ps) (") % devpost synonym
(xo) /currency
(cr) (") % devpost synonym
(Y-) /yen
(yn) (") % devpost synonym
(||) /brokenbar % missing
(so) /section
(sc) (") % devpost synonym
("") /dieresis
(co) /copyright
(a_) /ordfeminine
(<<) /guillemotleft
(-,) /logicalnot
(hy) /hyphen
(--) (") % synonym
(ro) /registered
(rg) (") % devpost synonym
(-^) /macron
(0^) /degree % missing
(+-) /plusminus % missing
(2^) /twosuperior % missing
(3^) /threesuperior % missing
(\\') /acute
(aa) (") % devpost synonym
(/u) /mu % missing
(P!) /paragraph
(pg) (") % devpost synonym
(.^) /periodcentered
(,,) /cedilla
(1^) /onesuperior % missing
(o_) /ordmasculine
(>>) /guillemotright
(14) /onequarter % missing
(12) /onehalf % missing
(34) /threequarters % missing
(??) /questiondown
(A`) /Agrave
(A') /Aacute
(A^) /Acircumflex
(A~) /Atilde
(A") /Adieresis
(A*) /Aring
(AE) /AE
(C,) /Ccedilla
(E`) /Egrave
(E') /Eacute
(E^) /Ecircumflex
(E") /Edieresis
(I`) /Igrave
(I') /Iacute
(I^) /Icircumflex
(I") /Idieresis
(D-) /Eth % missing
(N~) /Ntilde
(O`) /Ograve
(O') /Oacute
(O^) /Ocircumflex
(O~) /Otilde
(O") /Odieresis
(xx) /multiply % missing
(O/) /Oslash
(U`) /Ugrave
(U') /Uacute
(U^) /Ucircumflex
(U") /Udieresis
(Y') /Yacute % missing
(TH) /Thorn % missing
(ss) /germandbls
(a`) /agrave
(a') /aacute
(a^) /acircumflex
(a~) /atilde
(a") /adieresis
(a*) /aring
(ae) /ae
(c,) /ccedilla
(e`) /egrave
(e') /eacute
(e^) /ecircumflex
(e") /edieresis
(i`) /igrave
(i') /iacute
(i^) /icircumflex
(i") /idieresis
(d-) /eth % missing
(n~) /ntilde
(o`) /ograve
(o') /oacute
(o^) /ocircumflex
(o~) /otilde
(o") /odieresis
(-:) /divide % missing
(o/) /oslash
(u`) /ugrave
(u') /uacute
(u^) /ucircumflex
(u") /udieresis
(y') /yacute % missing
(th) /thorn % missing
(y") /ydieresis
//End of StandardCharset
}
SymbolCharset() {
cat <<-'//End of SymbolCharset'
(---) /exclam
(fa) /universal
(---) /numbersign
(te) /existential
(---) /percent
(---) /ampersand
(st) /suchthat
(---) /parenleft
(---) /parenright
(**) /asteriskmath
(pl) /plus
(---) /comma
(mi) /minus
(---) /period
(sl) /slash
(---) /zero
(---) /one
(---) /two
(---) /three
(---) /four
(---) /five
(---) /six
(---) /seven
(---) /eight
(---) /nine
(---) /colon
(---) /semicolon
(<) /less
(eq) /equal
(>) /greater
(---) /question
(cg) /congruent
(*A) /Alpha
(*B) /Beta
(*X) /Chi
(*D) /Delta
(*E) /Epsilon
(*F) /Phi
(*G) /Gamma
(*Y) /Eta
(*I) /Iota
(---) /theta1
(*K) /Kappa
(*L) /Lambda
(*M) /Mu
(*N) /Nu
(*O) /Omicron
(*P) /Pi
(*H) /Theta
(*R) /Rho
(*S) /Sigma
(*T) /Tau
(*U) /Upsilon
(ts) /sigma1
(*W) /Omega
(*C) /Xi
(*Q) /Psi
(*Z) /Zeta
(---) /bracketleft
(tf) /therefore
(---) /bracketright
(pp) /perpendicular
(ul) /underscore
(_) (") % synonym
(rn) /radicalex
(*a) /alpha
(*b) /beta
(*x) /chi
(*d) /delta
(*e) /epsilon
(*f) /phi
(*g) /gamma
(*y) /eta
(*i) /iota
(---) /phi1
(*k) /kappa
(*l) /lambda
(*m) /mu
(*n) /nu
(*o) /omicron
(*p) /pi
(*h) /theta
(*r) /rho
(*s) /sigma
(*t) /tau
(*u) /upsilon
(---) /omega1
(*w) /omega
(*c) /xi
(*q) /psi
(*z) /zeta
(---) /braceleft
(or) /bar
(---) /braceright
(ap) /similar
(---) /Upsilon1
(fm) /minute
(<=) /lessequal
(fr) /fraction % devpost character
(if) /infinity
(fn) /florin % devpost character
(---) /club
(---) /diamond
(---) /heart
(---) /spade
(ab) /arrowboth
(<-) /arrowleft
(ua) /arrowup
(->) /arrowright
(da) /arrowdown
(de) /degree
(+-) /plusminus
(---) /second
(>=) /greaterequal
(mu) /multiply
(pt) /proportional
(pd) /partialdiff
(bu) /bullet
(di) /divide
(!=) /notequal
(==) /equivalence
(~~) /approxequal
(el) /ellipsis
(av) /arrowvertex
(ah) /arrowhorizex
(CR) /carriagereturn
(af) /aleph
(If) /Ifraktur
(Rf) /Rfraktur
(ws) /weierstrass
(Ox) /circlemultiply
(O+) /circleplus
(es) /emptyset
(ca) /intersection
(cu) /union
(sp) /propersuperset
(ip) /reflexsuperset
(!b) /notsubset
(sb) /propersubset
(ib) /reflexsubset
(mo) /element
(!m) /notelement
(an) /angle
(gr) /gradient
(rg) /registerserif
(co) /copyrightserif
(tm) /trademarkserif
(---) /product
(sr) /radical
(c.) /dotmath
(no) /logicalnot
(l&) /logicaland
(l|) /logicalor
(---) /arrowdblboth
(---) /arrowdblleft
(---) /arrowdblup
(---) /arrowdblright
(---) /arrowdbldown
(lz) /lozenge
(b<) /angleleft
(RG) /registersans
(CO) /copyrightsans
(TM) /trademarksans
(---) /summation
(LT) /parenlefttp
(br) /parenleftex
(LX) (") % synonym
(LB) /parenleftbt
(lc) /bracketlefttp
(lx) /bracketleftex
(lf) /bracketleftbt
(lt) /bracelefttp
(lk) /braceleftmid
(lb) /braceleftbt
(bv) /braceex
(|) (") % synonym
(b>) /angleright
(is) /integral
(---) /integraltp
(---) /integralex
(---) /integralbt
(RT) /parenrighttp
(RX) /parenrightex
(RB) /parenrightbt
(rc) /bracketrighttp
(rx) /bracketrightex
(rf) /bracketrightbt
(rt) /bracerighttp
(rk) /bracerightmid
(rb) /bracerightbt
(~=) (55 0 1) % charlib
//End of SymbolCharset
}
SpecialCharset() {
cat <<-'//End of SpecialCharset'
(ru) /underscore
('') /quotedblright % devpost character
(``) /quotedblleft % devpost character
(dg) /dagger % devpost character
(dd) /daggerdbl % devpost character
(en) /endash % devpost character
(\\-) (") % synonym
(em) /emdash
% (ff) (60 2 1) % charlib
% (Fi) (84 2 1) % charlib
% (Fl) (84 2 1) % charlib
(14) (75 2 1) % charlib
(12) (75 2 1) % charlib
(34) (75 2 1) % charlib
(bx) (50 2 1) % charlib
(ob) (38 2 1) % charlib
(ci) (75 0 1) % charlib
(sq) (50 2 1) % charlib
(Sl) (50 2 1) % charlib
(L1) (110 1 2) % charlib
(LA) (110 1 2) % charlib
(LV) (110 3 1) % charlib
(LH) (210 1 1) % charlib
(lh) (100 0 1) % charlib
(rh) (100 0 1) % charlib
(lH) (100 0 1) % charlib
(rH) (100 0 1) % charlib
(PC) (220 2 1) % charlib
(DG) (185 2 1) % charlib
//End of SpecialCharset
}
#
# Latin1 ensures a font uses the ISOLatin1Encoding vector, although only
# text fonts should be re-encoded. Downloading the Encoding vector doesn't
# often make sense. No ISOLatin1Encoding array likely means ROM based fonts
# on your printer are incomplete. Type 1 fonts with a full Latin1 character
# set appeared sometime after Version 50.0.
#
Latin1() {
if [ "$DOWNLOADVECTOR" = TRUE ]; then
cat <<-'//End of ISOLatin1Encoding'
/ISOLatin1Encoding [
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/space
/exclam
/quotedbl
/numbersign
/dollar
/percent
/ampersand
/quoteright
/parenleft
/parenright
/asterisk
/plus
/comma
/minus
/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
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/dotlessi
/grave
/acute
/circumflex
/tilde
/macron
/breve
/dotaccent
/dieresis
/.notdef
/ring
/cedilla
/.notdef
/hungarumlaut
/ogonek
/caron
/space
/exclamdown
/cent
/sterling
/currency
/yen
/brokenbar
/section
/dieresis
/copyright
/ordfeminine
/guillemotleft
/logicalnot
/hyphen
/registered
/macron
/degree
/plusminus
/twosuperior
/threesuperior
/acute
/mu
/paragraph
/periodcentered
/cedilla
/onesuperior
/ordmasculine
/guillemotright
/onequarter
/onehalf
/threequarters
/questiondown
/Agrave
/Aacute
/Acircumflex
/Atilde
/Adieresis
/Aring
/AE
/Ccedilla
/Egrave
/Eacute
/Ecircumflex
/Edieresis
/Igrave
/Iacute
/Icircumflex
/Idieresis
/Eth
/Ntilde
/Ograve
/Oacute
/Ocircumflex
/Otilde
/Odieresis
/multiply
/Oslash
/Ugrave
/Uacute
/Ucircumflex
/Udieresis
/Yacute
/Thorn
/germandbls
/agrave
/aacute
/acircumflex
/atilde
/adieresis
/aring
/ae
/ccedilla
/egrave
/eacute
/ecircumflex
/edieresis
/igrave
/iacute
/icircumflex
/idieresis
/eth
/ntilde
/ograve
/oacute
/ocircumflex
/otilde
/odieresis
/divide
/oslash
/ugrave
/uacute
/ucircumflex
/udieresis
/yacute
/thorn
/ydieresis
] def
//End of ISOLatin1Encoding
fi
echo "ISOLatin1Encoding /$1 ReEncode"
}
#
# Generating functions output PostScript programs that build font width
# tables or a typesetter description file. Send the program to a printer
# and the complete table will come back on the serial port. All write on
# stdout and assume the prologue and other required PostScript files are
# all available.
#
Proportional() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
# Get <>_ and | from S. Use accents for ascii ^ and ~.
StandardCharset | awk '
$1 == "(<)" && $2 == "/less" {$1 = "(---)"}
$1 == "(>)" && $2 == "/greater" {$1 = "(---)"}
$1 == "(_)" && $2 == "/underscore" {$1 = "(---)"}
$1 == "(|)" && $2 == "/bar" {$1 = "(---)"}
$1 == "(^)" && $2 == "/asciicircum" {
printf "(^)\t/circumflex\n"
$1 = "(---)"
}
$1 == "(~)" && $2 == "/asciitilde" {
printf "(~)\t/tilde\n"
$1 = "(---)"
}
{printf "%s\t%s\n", $1, $2}
'
echo "] def"
Latin1 $2
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
FixedWidth() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
StandardCharset
echo "] def"
Latin1 $2
echo "/$2 SelectFont"
echo "(opO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Dingbats() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/octalescapes $OCTALESCAPES def"
echo "/charset ["
StandardCharset | awk '$1 != "(---)" && $2 ~ /^\/[a-zA-Z]/ {
printf "%s\tISOLatin1Encoding %s GetCode\n", $1, $2
}'
echo "] def"
echo "/$2 SelectFont"
echo "( ) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Greek() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset | awk '$1 ~ /\(\*[a-zA-Z]\)/'
echo "] def"
echo "/$2 SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Symbol() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SymbolCharset
echo "] def"
echo "ChangeMetrics"
echo "/S SelectFont"
echo "(orO) SetAscender"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
Special() {
echo "/unitwidth $UNITWIDTH def"
echo "/resolution $RESOLUTION def"
echo "/charset ["
SpecialCharset
echo "] def"
echo "ChangeMetrics"
echo "/S1 SelectFont"
echo "(# Times-Roman special font\\\\n) Print"
echo "(name $1\\\\n) Print"
echo "(fontname $2\\\\n) Print"
echo "/$1 NamedInPrologue"
echo "(special\\\\n) Print"
echo "(charset\\\\n) Print"
echo "BuildFontCharset"
}
#
# The DESC file doesn't have to be built on a printer. It's only here for
# consistency.
#
Description() {
echo "/charset [" # awk - so the stack doesn't overflow
StandardCharset | awk '{print $1}'
SymbolCharset | awk '{print $1}'
SpecialCharset | awk '{print $1}'
echo "] def"
cat <<-//DESC
(#Device Description - Latin1 character set
PDL PostScript
Encoding Latin1
fonts 10 R I B BI CW H HI HB S1 S
sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
120 125 130 135 140 145 150 155 160 0
res $RESOLUTION
hor 1
vert 1
unitwidth $UNITWIDTH
) Print
//DESC
echo "(charset\\\\n) Print"
echo "BuildDescCharset"
echo "(\\\\n) Print"
}
0707070014231122351006400057030057030000010447600522632546000002600000006137post.src/devLatin1/HM name H
fontname Helvetica
named in prologue
spacewidth 28
charset
! 28 2 33
" 36 2 34
dq "
# 56 2 35
$ 56 3 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
- 33 0 173
\0255 "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 58 0 60
= 58 0 61
--- 58 0 62
? 56 2 63
@ 102 3 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 28 3 91
\ 28 2 92
bs "
] 28 3 93
^ 33 2 147
--- 47 2 94
--- 56 1 95
` 22 2 96
a 56 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 56 0 101
f 28 2 102
g 56 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 26 3 124
} 33 3 125
~ 33 2 148
--- 58 0 126
\` 33 2 145
ga "
!! 33 1 161
\0241 "
c| 56 3 162
\0242 "
ct "
L- 56 2 163
\0243 "
ps "
xo 56 0 164
\0244 "
cr "
Y- 56 2 165
\0245 "
yn "
|| 26 3 166
\0246 "
so 56 3 167
\0247 "
sc "
"" 33 2 168
\0250 "
:a "
co 74 2 169
\0251 "
a_ 37 2 170
\0252 "
<< 56 0 171
\0253 "
-, 58 0 172
\0254 "
hy 33 0 173
\0255 "
-- 58 0 45
ro 74 2 174
\0256 "
rg "
-^ 33 2 175
\0257 "
-a "
0^ 40 2 176
\0260 "
+- 58 2 177
\0261 "
2^ 33 2 178
\0262 "
3^ 33 2 179
\0263 "
\' 33 2 180
\0264 "
aa "
/u 56 1 181
\0265 "
P! 54 3 182
\0266 "
pg "
.^ 28 0 183
\0267 "
,, 33 1 184
\0270 "
,a "
1^ 33 2 185
\0271 "
o_ 37 2 186
\0272 "
>> 56 0 187
\0273 "
14 83 2 188
\0274 "
12 83 2 189
\0275 "
34 83 2 190
\0276 "
?? 61 1 191
\0277 "
A` 67 2 192
\0300 "
A' 67 2 193
\0301 "
A^ 67 2 194
\0302 "
A~ 67 2 195
\0303 "
A" 67 2 196
\0304 "
A* 67 2 197
\0305 "
AE 100 2 198
\0306 "
C, 72 3 199
\0307 "
E` 67 2 200
\0310 "
E' 67 2 201
\0311 "
E^ 67 2 202
\0312 "
E" 67 2 203
\0313 "
I` 28 2 204
\0314 "
I' 28 2 205
\0315 "
I^ 28 2 206
\0316 "
I" 28 2 207
\0317 "
D- 72 2 208
\0320 "
N~ 72 2 209
\0321 "
O` 78 2 210
\0322 "
O' 78 2 211
\0323 "
O^ 78 2 212
\0324 "
O~ 78 2 213
\0325 "
O" 78 2 214
\0326 "
xx 58 0 215
\0327 "
O/ 78 2 216
\0330 "
U` 72 2 217
\0331 "
U' 72 2 218
\0332 "
U^ 72 2 219
\0333 "
U" 72 2 220
\0334 "
Y' 67 2 221
\0335 "
TH 67 2 222
\0336 "
ss 61 2 223
\0337 "
a` 56 2 224
\0340 "
a' 56 2 225
\0341 "
a^ 56 2 226
\0342 "
a~ 56 2 227
\0343 "
a" 56 2 228
\0344 "
a* 56 2 229
\0345 "
ae 89 0 230
\0346 "
c, 50 1 231
\0347 "
e` 56 2 232
\0350 "
e' 56 2 233
\0351 "
e^ 56 2 234
\0352 "
e" 56 2 235
\0353 "
i` 28 2 236
\0354 "
i' 28 2 237
\0355 "
i^ 28 2 238
\0356 "
i" 28 2 239
\0357 "
d- 56 2 240
\0360 "
n~ 56 2 241
\0361 "
o` 56 2 242
\0362 "
o' 56 2 243
\0363 "
o^ 56 2 244
\0364 "
o~ 56 2 245
\0365 "
o" 56 2 246
\0366 "
-: 58 0 247
\0367 "
o/ 61 0 248
\0370 "
u` 56 2 249
\0371 "
u' 56 2 250
\0372 "
u^ 56 2 251
\0373 "
u" 56 2 252
\0374 "
y' 50 3 253
\0375 "
th 56 3 254
\0376 "
y" 50 3 255
\0377 "
^a 33 2 147
~a 33 2 148
Ua 33 2 150
.a 33 2 151
oa 33 2 154
"a 33 2 157
Ca 33 1 158
va 33 2 159
0707070014230547600407550057030057030000021525670522633100200002100000000000post.src/psfiles 0707070014230550011006400057030057030000011527600522633100200003400000001421post.src/psfiles/psfiles.mk MAKE=/bin/make
MAKEFILE=psfiles.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
POSTLIB=/usr/lib/postscript
all :
install :
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp *.ps ps.* $(POSTLIB)
@for i in *.ps ps.*; do \
chmod 644 $(POSTLIB)/$$i; \
chgrp $(GROUP) $(POSTLIB)/$$i; \
chown $(OWNER) $(POSTLIB)/$$i; \
done
clean :
clobber : clean
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014230547621006440057030057030000011527060522627502200003500000000540post.src/psfiles/ps.requests %
% Keywords begin with an @ in the first column. The value follows on the next
% line and includes everything up to next keyword line, except for comments
% which are lines that begin with % in the first column.
%
@manualfeed
statusdict begin
/manualfeedtimeout 300 def
/manualfeed true def
end
@ledgertray
statusdict begin
ledgertray
end
0707070014230547631006440057030057030000011527100522627502200003200000013654post.src/psfiles/forms.ps %
% Procedures that let you print any number of pages on each sheet of paper. It's
% far from perfect and won't handle everything (eg. it's not recursive), but should
% be good enough for now. Assumes the default page coordinate system has been set
% up before setupforms is called. lastpage makes certain the last page is printed,
% and should be called immediately after the %%Trailer comment.
%
% Three lines of code needed for page image clipping have been commented out for
% now. It works, but can really slow things down on some versions of PostScript.
% Uncomment them if you want to clip pages.
%
/setupforms {
/formsperpage exch def
/currentform 0 def
/slop 5 def
/min {2 copy gt {exch} if pop} def
%
% Save the current environment so the real showpage can be restored when we're all
% done. Occasionally helps when a banner page is included with the job.
%
/saveobj save def
%
% Number of rows and columns we'll need - may exchange them later.
%
/columns formsperpage sqrt ceiling cvi def
/rows formsperpage columns div ceiling cvi def
%
% Slop leaves a little room around the edge so page images can be outlined and have
% the borders show up. Distance is in default coordinates, so we need to figure out
% how it maps into user coordinates.
%
6 array defaultmatrix
6 array currentmatrix
6 array invertmatrix
6 array concatmatrix
/tempmatrix exch def
0 slop tempmatrix dtransform dup mul exch dup mul add sqrt
/slop exch def
%
% Determine how big the image area is, using the clipping path bounding box minus
% a little and leave the coordinates of the lower left corner of the clipping path
% on the stack. Also temporarily set the size of each page (ie. formheight and
% formwidth) from the clipping path - just in case old software uses this stuff.
% Only works for coordinate systems that have been rotated by a multiple of 90
% degrees.
%
newpath clippath pathbbox
2 index sub dup /formheight exch def slop 2 mul sub /pageheight exch def
2 index sub dup /formwidth exch def slop 2 mul sub /pagewidth exch def
%
% New translators all store the size of each page in default coordinates in the
% pagebbox array and it can be different than the size determined by the clipping
% path. If we can find pagebbox use it to set the real dimensions of each page.
% Leaves the coordinates of the lower left corner on the stack, (either from
% pagebbox or clippath) so four numbers are there when we're done.
%
userdict /gotpagebbox known userdict /pagebbox known and {
newpath
pagebbox 0 get pagebbox 1 get tempmatrix transform moveto
pagebbox 0 get pagebbox 3 get tempmatrix transform lineto
pagebbox 2 get pagebbox 3 get tempmatrix transform lineto
pagebbox 2 get pagebbox 1 get tempmatrix transform lineto
closepath pathbbox
2 index sub /formheight exch def
2 index sub /formwidth exch def
} {2 copy} ifelse
%
% Top two numbers are the displacement from the job's origin to the lower left
% corner of each page image when we finish setting up the new coordinate system.
%
/ycorner exch def
/xcorner exch def
%
% The two numbers left on the stack are the coordinates of the lower left corner
% of the clipping path. Go there and then up a bit so page images can be outlined.
%
translate
slop slop translate
%
% If the page is wider than high we may be able to do better if we exchange rows
% and columns. Won't make a difference in the current orientation or if rows and
% columns are the same.
%
pagewidth pageheight gt {
rows columns /rows exch def /columns exch def
} if
%
% Find the orientation and scaling that makes things as large as possible. More
% than what's really needed. First calculation essentially finds the minimum of
% 1/rows and 1/columns.
%
pagewidth formwidth columns mul div pageheight formheight rows mul div min
pageheight formwidth columns mul div pagewidth formheight rows mul div min
2 copy lt {
rotation 1 eq {
landscape {
0 pageheight translate
-90 rotate
}{
pagewidth 0 translate
90 rotate
} ifelse
}{
landscape {
pagewidth 0 translate
90 rotate
}{
0 pageheight translate
-90 rotate
} ifelse
} ifelse
pagewidth pageheight /pagewidth exch def /pageheight exch def
exch
} if
%
% Second number from the top is the best choice. Scale so everything will fit on
% the current page, go back to the original origin, and then get ready for the
% first page - which goes in the upper left corner.
%
pop dup dup scale
xcorner neg ycorner neg translate
0 rows 1 sub formheight mul translate
%
% Try to center everything on the page - scaling we used is on top of the stack.
%
dup pagewidth exch div formwidth columns mul sub 2 div
exch pageheight exch div formheight rows mul sub 2 div translate
%
% Redefine showpage.
%
/!PreForms~showpage~ /showpage load def % save current showpage
/showpage {
saveobj restore
% initclip
formsperpage 1 gt {
gsave .1 setlinewidth outlineform stroke grestore
} if
formwidth 0 translate
/currentform currentform 1 add def
currentform columns mod 0 eq {
columns formwidth mul neg formheight neg translate
} if
currentform formsperpage mod 0 eq {
gsave !PreForms~showpage~ grestore
currentform columns mod formwidth mul neg
formsperpage columns idiv formheight mul translate
/currentform 0 def
} if
% outlineform clip newpath
/saveobj save def
} bind def
/outlineform {
newpath
xcorner ycorner moveto
formwidth 0 rlineto
0 formheight rlineto
formwidth neg 0 rlineto
closepath
} bind def
/lastpage {
formsperpage 1 gt {
currentform 0 ne {
/saveobj save def
0 1 formsperpage currentform sub formsperpage mod {
pop showpage
} for
saveobj restore
} if
saveobj restore
saveobj restore
} if
} def
%
% Clip the first page image and save the environment we just set up, including
% the redefined showpage.
%
% outlineform clip
newpath
/saveobj save def
} def
0707070014230547641006440057030057030000011527200522627502200003500000005107post.src/psfiles/baseline.ps %
% Stuff used to draw or set text along a baseline specified by parametric equations
% for x and y.
%
/left -1 def
/center 0 def
/right 1 def
/baselinedict 50 dict def
/newbaseline {
baselinedict begin
/g' exch bind def
/f' exch bind def
/g exch bind def
/f exch bind def
counttomark 2 eq {/hoffset exch def} if
/res exch def
/t 0 def
/s 0 def
/voffset false def
cleartomark
end
} bind def
/drawfunnytext {
baselinedict begin
/t exch def
/mode exch def
/str exch def
mode left eq {
/leftstring emptystring def
/rightstring str def
} if
mode right eq {
/leftstring str reversestring def
/rightstring emptystring def
} if
mode center eq {
str splitstring
/rightstring exch def
/leftstring exch reversestring def
} if
gsave currentpoint translate leftstring left t baselineshow grestore
gsave currentpoint translate rightstring right t baselineshow grestore
/t 0 def
/s 0 def
/voffset false def
cleartomark
end
} bind def
/setfunnytext {
baselinedict begin
/vpos exch def
/hpos exch def
/str exch def
voffset vpos ne {
/voffset vpos def
/t 0 def
/s hoffset def
} if
gsave
hoffset voffset translate
0 0 moveto
/ds hpos s sub def
/dt ds t f' dup mul t g' dup mul add sqrt res mul div def
/s s ds add def
/t t dt add def
str right t baselineshow
grestore
end
} bind def
baselinedict begin
/f {} bind def
/g {pop 0} bind def
/f' {pop 1} bind def
/g' {pop 0} bind def
/s 0 def
/t 0 def
/res 72 def
/onecharstring ( ) def
/emptystring () def
/baselineshow {
/t exch def
/mode exch def
/str exch def
gsave
t f res mul t g res mul translate
0 0 moveto
t g' t f' atan rotate
{
mode right eq {pop} if
grestore gsave
onecharstring 0 3 -1 roll put onecharstring stringwidth pop
/ds exch mode mul def
/dt ds t f' dup mul t g' dup mul add sqrt res mul div def
/t t dt add def
/s s ds add def
t f res mul t g res mul translate
0 0 moveto
t g' t f' atan rotate
mode left eq {pop} if
} str kshow
grestore
} bind def
/reversestring {
/str1 exch def
/str2 str1 length string def
/i 0 def
/n str1 length 1 sub def
{
str1 n get str2 exch i exch put
/i i 1 add def
/n n 1 sub def
n 0 lt {exit} if
} loop
str2
} bind def
/splitstring {
/str1 exch def
/len str1 stringwidth pop def
/s 0 def
/n 0 def
str1 length {
str1 n get onecharstring exch 0 exch put
/s onecharstring stringwidth pop s add def
s len 2 div ge {exit} if
/n n 1 add def
} repeat
str1 0 n 1 add getinterval
str1 n str1 length n sub getinterval
} bind def
end
0707070014230547651006440057030057030000011527160522627502200003200000002540post.src/psfiles/color.ps %
% Color and reverse video support for dpost. A call made to setcolor with two
% arguments implies reverse video printing.
%
/rgb {setrgbcolor} bind def
/hsb {sethsbcolor} bind def
/colordict 50 dict dup begin
/red { 1 0 0 } def
/green { 0 1 0 } def
/blue { 0 0 1 } def
/cyan { 0 1 1 } def
/magenta { 1 0 1 } def
/yellow { 1 1 0 } def
/white { 1 1 1 } def
/black { 0 0 0 } def
end def
/setcolor {
counttomark 1 eq {
dup colordict exch known not {pop /black} if
colordict exch get exec setrgbcolor
} if
counttomark 2 eq {
/backcolor exch def
/textcolor exch def
colordict backcolor known not colordict textcolor known not or {
/backcolor colordict /black get def
/textcolor colordict /white get def
} if
/backcolor colordict backcolor get def
/textcolor colordict textcolor get def
/dY1 0 def
/dY2 0 def
textcolor exec setrgbcolor
} if
} bind def
/drawrvbox {
/x2 exch def
/x1 exch def
currentpoint dup
/y1 exch def
/y2 exch def pop
dY1 0 eq dY2 0 eq and {
currentfont /FontBBox get aload pop
currentfont /FontMatrix get dtransform /dY2 exch def pop
currentfont /FontMatrix get dtransform /dY1 exch def pop
} if
/y1 y1 dY1 add def
/y2 y2 dY2 add def
backcolor exec setrgbcolor
newpath
x1 y1 moveto
x2 y1 lineto
x2 y2 lineto
x1 y2 lineto
closepath fill
textcolor exec setrgbcolor
} bind def
0707070014230547661006440057030057030000011527070522627502200003200000001611post.src/psfiles/shade.ps %
% Shading support - primarily for ASCII file translators.
%
/grays [0.98 0.9 0.75 0.6] def
/setshade {
/level exch def
level 0 le {
/textgray 0 def
/backgray 1 def
}{
/backgray level grays length gt
{/textgray 1 def 0}
{/textgray 0 def grays level 1 sub get}
ifelse def
} ifelse
textgray setgray
/dY1 0 def
/dY2 0 def
} bind def
/drawrvbox {
/x2 exch charwidth mul def
/x1 exch charwidth mul def
x1 x2 lt {
dup % expects y on top
/y1 exch linespace mul def
/y2 y1 def
dY1 0 eq dY2 0 eq and {
currentfont /FontBBox get aload pop
160 sub
currentfont /FontMatrix get dtransform /dY2 exch def pop
100 add
currentfont /FontMatrix get dtransform /dY1 exch def pop
} if
/y1 y1 dY1 add def
/y2 y2 dY2 add def
backgray setgray
newpath
x1 y1 moveto
x2 y1 lineto
x2 y2 lineto
x1 y2 lineto
closepath fill
} if
textgray setgray
} bind def
0707070014230547671006440057030057030000011527230522627502200003600000001267post.src/psfiles/roundpage.ps %
% Tries to round clipping path dimensions, as stored in array pagebbox, so they
% match one of the known sizes in the papersizes array. Lower left coordinates
% are always set to 0.
%
/roundpagebbox {
7 dict begin
/papersizes [8.5 inch 11 inch 14 inch 17 inch] def
/mappapersize {
/val exch def
/slop .5 inch def
/diff slop def
/j 0 def
0 1 papersizes length 1 sub {
/i exch def
papersizes i get val sub abs
dup diff le {/diff exch def /j i def} {pop} ifelse
} for
diff slop lt {papersizes j get} {val} ifelse
} def
pagebbox 0 0 put
pagebbox 1 0 put
pagebbox dup 2 get mappapersize 2 exch put
pagebbox dup 3 get mappapersize 3 exch put
end
} bind def
0707070014230547701006440057030057030000011527240522627502200003700000001356post.src/psfiles/fatcourier.ps %
% Fat versions of the stroked Courier and Courier-Oblique - from Johnathan Shopiro.
% Can be selectively pulled in using the -C option that's available with all the
% PostScript translators or permanently added to any of the prologues. Helps on
% Linotronic typesetters, where Courier and Courier-Oblique are too light!
%
/newdict /Courier findfont length 1 add dict def
/Courier findfont {
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
newdict /StrokeWidth 60 put
/Courier newdict definefont pop
/newdict /Courier-Oblique findfont length 1 add dict def
/Courier-Oblique findfont {
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
newdict /StrokeWidth 60 put
/Courier-Oblique newdict definefont pop
0707070014230547711006440057030057030000011527300522627502200003000000006066post.src/psfiles/aps.ps %
% Tune things up so Linotronic output looks more like the APS-5. Pull this file
% into dpost output using the -C option. To get the best looking output run dpost
% with the -e2 option and use special font files that look like the APS tables but
% have character codes (ie. the fourth column in the width tables) appropriate for
% PostScript fonts. Widths in these tables must be for APS fonts!
%
% Start with fat versions of the stroked Courier and Courier-Oblique fonts - from
% Johnathan Shopiro.
%
/newdict /Courier findfont length dict def
/Courier findfont {
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
newdict /StrokeWidth 65 put
/Courier newdict definefont pop
/newdict /Courier-Oblique findfont length dict def
/Courier-Oblique findfont {
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
newdict /StrokeWidth 65 put
/Courier-Oblique newdict definefont pop
%
% Scaled down versions of the Helvetica font family.
%
/newdict /Helvetica findfont length dict def
/Helvetica findfont {
1 index /FontMatrix eq {.922 .922 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Helvetica newdict definefont pop
/newdict /Helvetica-Oblique findfont length dict def
/Helvetica-Oblique findfont {
1 index /FontMatrix eq {.922 .922 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Helvetica-Oblique newdict definefont pop
/newdict /Helvetica-Bold findfont length dict def
/Helvetica-Bold findfont {
1 index /FontMatrix eq {.922 .922 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Helvetica-Bold newdict definefont pop
/newdict /Helvetica-BoldOblique findfont length dict def
/Helvetica-BoldOblique findfont {
1 index /FontMatrix eq {.922 .922 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Helvetica-BoldOblique newdict definefont pop
%
% Scaled up versions of the Times font family.
%
/newdict /Times-Roman findfont length dict def
/Times-Roman findfont {
1 index /FontMatrix eq {1.0225 1.0225 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Times-Roman newdict definefont pop
/newdict /Times-Italic findfont length dict def
/Times-Italic findfont {
1 index /FontMatrix eq {1.0225 1.0225 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Times-Italic newdict definefont pop
/newdict /Times-Bold findfont length dict def
/Times-Bold findfont {
1 index /FontMatrix eq {1.0225 1.0225 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Times-Bold newdict definefont pop
/newdict /Times-BoldItalic findfont length dict def
/Times-BoldItalic findfont {
1 index /FontMatrix eq {1.0225 1.0225 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Times-BoldItalic newdict definefont pop
0707070014230547721006440057030057030000011527250522627502200003300000001715post.src/psfiles/banner.ps %
% Simple program to print a banner page
%
/banner {
/saveobj save def
erasepage initgraphics
/#copies 1 def
/inch {72 mul} bind def
/pagebbox [clippath pathbbox newpath] def
/font /Helvetica def
/size 20 def
/height pagebbox 3 get def
/width pagebbox 2 get .09 mul def
.92 setgray
pagebbox 0 get pagebbox 1 get moveto
width 0 rlineto 0 height rlineto width neg 0 rlineto closepath eofill
pagebbox 2 get pagebbox 1 get moveto
width neg 0 rlineto 0 height rlineto width 0 rlineto closepath eofill
0 setgray
font findfont size scalefont setfont
/linesp size size .15 mul add neg def
/tab (Destination) stringwidth pop 1.5 mul def
/nextline {0 0 moveto show tab 0 moveto show 0 linesp translate} def
pagebbox 0 get 1.5 width mul add pagebbox 3 get 2.0 width mul sub translate
(Bin) nextline
(Name) nextline
(Owner) nextline
(File) nextline
(Account) nextline
(Destination) nextline
(Spooldate) nextline
showpage
saveobj restore
} bind def
0707070014230547731006440057030057030000011527260522627502200003000000001156post.src/psfiles/README PostScript files that go in $(POSTLIB). Several, like forms.ps, are
used by most translators supplied in this package. Most PostScript
files only used by a single translator (e.g. the prologue) have been
been moved into the appropriate source directory. Files that end in
.enc support alternate character sets (e.g. ISO Latin 1 alphabet).
The implementation is left open, but typically redefines findfont.
That approach works because findfont is a procedure rather than an
operator, so it's not affected by bind. Also can't depend on having
a systemdict definition for findfont. It's in userdict on Version
48.0 VT600s.
0707070014230547741006440057030057030000011527270522627502200003300000001016post.src/psfiles/unbind.ps %
% Unbind the operators in an executable array or packedarray. Leaves the
% unbound array or the original object on the stack.
%
/unbind {
0 index xcheck
1 index type /arraytype eq
2 index type /packedarraytype eq or and {
dup length array copy cvx
dup 0 exch {
dup type /operatortype eq {
( ) cvs cvn cvx
} if
0 index xcheck
1 index type /arraytype eq
2 index type /packedarraytype eq or and {
unbind
} if
3 copy put pop
1 add
} forall
pop
} if
} def
0707070014230547751006440057030057030000011527340522627502200003700000000437post.src/psfiles/Nroundpage.ps %
% A version of roundpage.ps that assumes a symmetric clipping path. Thanks
% to Matthijs Melchior for the suggestion.
%
/roundpagebbox {
pagebbox dup 0 get pagebbox 2 get add 2 exch put
pagebbox dup 1 get pagebbox 3 get add 3 exch put
pagebbox 0 0 put
pagebbox 1 0 put
} bind def
0707070014230361610407550057030057030000021040770522633073000002500000000000post.src/buildtables 0707070014230361621006440057030057030000011041300522627502300003400000000353post.src/buildtables/README Programs for building troff width tables on a PostScript printer.
Assumes you have direct access to the printer's serial port. Also
needs a special table dependent shell library file to build the
tables (e.g. ../devLatin1/shell.lib).
0707070014230357571006400057030057030000011040340522633072700004400000003013post.src/buildtables/buildtables.mk MAKE=/bin/make
MAKEFILE=buildtables.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
FONTDIR=/usr/lib/font
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
MAN1DIR=/tmp
all : buildtables
install : all
@if [ ! -d $(POSTBIN) ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
cp buildtables $(POSTBIN)/buildtables
@chmod 755 $(POSTBIN)/buildtables
@chgrp $(GROUP) $(POSTBIN)/buildtables
@chown $(OWNER) $(POSTBIN)/buildtables
cp buildtables.1 $(MAN1DIR)/buildtables.1
@chmod 644 $(MAN1DIR)/buildtables.1
@chgrp $(GROUP) $(MAN1DIR)/buildtables.1
@chown $(OWNER) $(MAN1DIR)/buildtables.1
clean :
clobber : clean
rm -f buildtables
buildtables : buildtables.sh
sed \
-e "s'^FONTDIR=.*'FONTDIR=$(FONTDIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
buildtables.sh >buildtables
@chmod 755 buildtables
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^FONTDIR=.*'FONTDIR=$(FONTDIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dF.*'.ds dF $(FONTDIR)'" \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
buildtables.1 >XXX.1; \
mv XXX.1 buildtables.1
0707070014230361641006440057030057030000011041330522627502300004400000003771post.src/buildtables/buildtables.sh #
# Builds one or more font width tables or the typesetter description
# file on a PostScript printer. Assumes you have direct access to the
# printer's serial port. No arguments means build a standard collection
# of tables - usually the LaserWriter Plus set. See trofftable and the
# shell library files /usr/lib/font/dev*/shell.lib for more details.
#
set -e
POSTBIN=/usr/lbin/postscript
POSTLIB=/usr/lib/postscript
FONTDIR=/usr/lib/font
POSTIO=$POSTBIN/postio
TROFFTABLE=$POSTBIN/trofftable
BAUDRATE=
DEVICE=
LIBRARY=
while [ -n "$1" ]; do
case $1 in
-C) shift; OPTIONS="$OPTIONS -C$1";;
-C*) OPTIONS="$OPTIONS $1";;
-F) shift; FONTDIR=$1;;
-F*) FONTDIR=`echo $1 | sed s/-F//`;;
-H) shift; OPTIONS="$OPTIONS -H$1";;
-H*) OPTIONS="$OPTIONS $1";;
-S) shift; LIBRARY=$1;;
-S*) LIBRARY=`echo $1 | sed s/-S//`;;
-T) shift; DEVICE=$1;;
-T*) DEVICE=`echo $1 | sed s/-T//`;;
-b) shift; BAUDRATE=$1;;
-b*) BAUDRATE=`echo $1 | sed s/-b//`;;
-c) shift; OPTIONS="$OPTIONS -c$1";;
-c*) OPTIONS="$OPTIONS $1";;
-l) shift; LINE=$1;;
-l*) LINE=`echo $1 | sed s/-l//`;;
-s) shift; OPTIONS="$OPTIONS -s$1";;
-s*) OPTIONS="$OPTIONS $1";;
-t) shift; OPTIONS="$OPTIONS -t$1";;
-t*) OPTIONS="$OPTIONS $1";;
-?) OPTIONS="$OPTIONS $1$2"; shift;;
-?*) OPTIONS="$OPTIONS $1";;
*) break;;
esac
shift
done
if [ ! "$DEVICE" -a ! "$LIBRARY" ]; then
echo "$0: no device or shell library" >&2
exit 1
fi
LIBRARY=${LIBRARY:-${FONTDIR}/dev${DEVICE}/shell.lib}
#
# No arguments means build everything return by the AllTables function.
#
if [ $# -eq 0 ]; then
. $LIBRARY
set -- `AllTables`
fi
for i do
SHORT=`echo $i | awk '{print $1}'`
LONG=`echo $i | awk '{print $2}'`
if [ "$LINE" ]
then echo "==== Building table $SHORT ===="
else echo "==== Creating table program $SHORT.ps ===="
fi
$TROFFTABLE -S$LIBRARY $OPTIONS $SHORT $LONG >$SHORT.ps
if [ "$LINE" ]; then
$POSTIO -t -l$LINE ${BAUDRATE:+-b${BAUDRATE}} $SHORT.ps >$SHORT
rm -f $SHORT.ps
fi
done
0707070014230357601006400057030057030000011024300522633073000004300000010314post.src/buildtables/buildtables.1 .ds dF /usr/lib/font
.ds dQ /usr/lib/postscript
.TH BUILDTABLES 1 "DWB 3.2"
.SH NAME
.B buildtables
\- build
.B troff
tables on a PostScript printer
.SH SYNOPSIS
\*(mBbuildtables\f1
.OP "" options []
.OP "" "name \(el" []
.SH DESCRIPTION
.B buildtables
builds font width tables or the typesetter description
file on a PostScript printer.
No arguments means build a default set of tables;
usually a superset of the LaserWriter Plus collection.
The following
.I options
are understood:
.TP 1.0i
.OP \-b speed
Transmit data over
.I line
at baud rate
.I speed.
Recognized baud rates are 1200, 2400, 4800, 9600, and 19200.
The default
.I speed
is 9600 baud.
.TP 1.0i
.OP \-l line
Build the tables on the PostScript printer attached to
.I line.
There is no default.
.TP 1.0i
.OP \-t name
Use
.I name
as the template for fonts not in the default set.
Choose
.MW R
for proportionally spaced fonts and
.MW CW
for fixed width fonts.
Try
.MW ZD
(ZapfDingbats) if the font has a non-standard
character set.
The default is
.MR R .
.TP 1.0i
.OP \-C file
Copy
.I file
into each PostScript table program;
.I file
must contain legitimate PostScript.
.TP 1.0i
.OP \-H hostdir
Use
.I hostdir
as the host-resident font directory.
A file in
.I hostdir
that matches the name of the
.B troff
font is assumed to be a host-resident font program and is included
in the PostScript width table program.
There is no default.
.TP 1.0i
.OP \-S file
Use
.I file
as the shell library file.
Overrides the choice made with the
.OP \-T
option.
.TP 1.0i
.OP \-T name
Set the target device to
.I name.
.br
Device
.I name
means
.ft 2
.MI \*(dF/dev name /shell.lib
.ft 1
is the shell library file.
There is no default.
.PP
If
.OP \-l
is omitted output files are the PostScript programs that
build the tables, rather than the tables themselves.
One of
.OP \-T
or
.OP \-S
is required.
If both are given
.OP \-S
wins.
Although
.OP \-H
is the preferred mechanism for including host-resident font files,
.OP \-C
makes sense when only one width table is built.
.PP
The shell library file defines a collection of functions used to
build
.BR troff (1)
tables.
The default set of tables is the list of names returned by the
.MW AllTables
function.
Changes to the default list can be made by updating the
.MW BuiltinTables
function.
.PP
Each
.B buildtables
argument
must be a default table name, or a pair of names enclosed in quotes.
If the argument is a pair, the first name is the
.B troff
font and the second is the full PostScript font name.
Tables are created in the current directory.
Each is assigned a name that matches the
.B troff
table name.
.PP
The PostScript table programs created by
.BR trofftable (1)
are written to files that have
.MW .ps
appended to the
.B troff
table name.
The
.MW .ps
file is deleted after the table is built.
Options not listed above are passed to
.B trofftable.
The PostScript table programs return data to the host computer using
PostScript's
.MW print
operator.
See
.BR hardcopy (1)
if you do not have access to the printer's serial port.
.SH EXAMPLES
.PP
Build the default collection of devpost tables on the printer
connected to
.MW /dev/tty00
(no font name arguments):
.EX
buildtables -l/dev/tty00 -Tpost
.EE
To do the same and to restrict the tables that are built,
Add
.B troff
font names (or
.MR DESC )
to restrict the tables built on the printer connected to
.MR /dev/tty00 :
.EX
buildtables -l/dev/tty00 -Tpost R I B BI DESC S
.EE
Enclose the
.B troff
and PostScript font names in quotes to
build the width table for a font not in the default set
(also on the printer connected to
.MR /dev/tty00 ):
.EX
buildtables -l/dev/tty00 -TLatin1 "GL Garamond-Light"
.EE
A font must be available on the printer when the table is built.
Use
.OP \-H
or
.OP \-C
to include host-resident fonts.
.SH WARNINGS
.PP
A width table will not build properly if the printer cannot access
the PostScript font.
.PP
The
.OP \-TLatin1
option only works on PostScript printers that support the full
.SM ISO
Latin-1 character set.
The error message from older printers will likely indicate a missing
.MW ISOLatin1Encoding
array.
.SH FILES
.MW \*(dF/dev*/shell.lib
.br
.MW \*(dQ/dpost.ps
.br
.MW \*(dQ/trofftable.ps
.br
.SH SEE ALSO
.BR dpost (1),
.BR hardcopy (1),
.BR postio (1),
.BR troff (1),
.BR trofftable (1),
.BR font (5)
0707070014231030650407550057030057030000020303460522633073300002300000000000post.src/cropmarks 0707070014231030661006440057030057030000010303050522627502300004000000005727post.src/cropmarks/cropmarks.ps %
% Center pages, based on pageheight and pagewidth, and redefine showpage
% to put cropmarks at each corner. Device dependent code to expand the
% paper size goes in procedure expandpagesize. Currently only supports
% a Linotronic 200P typesetter using 12 inch wide paper. You'll have to
% add code to expandpagesize to support different typesetters or even a
% 200P that's running differently.
%
/CropmarkDict 40 dict dup begin
/expandpage true def
/magnification 1 def
/pageheight 11.0 def
/pagewidth 8.5 def
/scaletofit false def
/scaling 1 def
/marklength .3 def % inches
/markstart .125 def % inches
/markend .04 def % inches
/marklinewidth .25 def % points
/inch {72 mul} def
/min {2 copy gt {exch} if pop} def
/max {2 copy lt {exch} if pop} def
/setup {
/markspace markstart marklength add markend add inch marklinewidth add def
/totalheight pageheight inch markspace 2 mul add def
/totalwidth pagewidth inch markspace 2 mul add def
pagedimensions
checkpagesize
/scaling getscaling def
xcenter ycenter translate
scaling scaling scale
pagewidth inch 2 div neg pageheight inch 2 div neg translate
clippage
} def
/pagedimensions {
clippath pathbbox newpath
4 -1 roll exch 4 1 roll 4 copy
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
} def
/checkpagesize {
height totalheight lt width totalwidth lt or expandpage and {
expandpagesize
pagedimensions
} if
} def
/expandpagesize { % device dependent code
/Product statusdict begin /product where {pop product}{()} ifelse end def
Product (Linotype) eq { % Linotronic 200P and other models?
statusdict /setpageparams known {
/maxwidth 12.0 inch def % 12 inch wide paper?
totalheight maxwidth le {
totalheight
totalwidth
maxwidth totalheight sub 2 div
0
}{
totalwidth maxwidth min
totalheight
maxwidth totalwidth maxwidth min sub 2 div
1
} ifelse
statusdict /setpageparams get exec
} if
} if
} def
/getscaling {
scaletofit
{height totalheight div width totalwidth div min 1 min}
{1}
ifelse
} def
/clippage {
newpath
0 0 moveto
pagewidth inch 0 rlineto
0 pageheight inch rlineto
pagewidth neg inch 0 rlineto
closepath clip
newpath
} def
/cropmark {
gsave
translate
rotate
marklinewidth dup translate
0 0 transform round exch round exch itransform translate
markstart inch 0 moveto marklength inch 0 rlineto stroke
0 markstart inch moveto 0 marklength inch rlineto stroke
grestore
} bind def
/@PreviousShowpage /showpage load def
end def
%
% Cropmarks - in the default coordinate system.
%
/showpage {
gsave
CropmarkDict begin
initgraphics
marklinewidth setlinewidth
xcenter ycenter translate
scaling scaling scale
0 pagewidth inch 2 div pageheight inch 2 div cropmark
90 pagewidth inch neg 2 div pageheight inch 2 div cropmark
180 pagewidth inch neg 2 div pageheight inch 2 div neg cropmark
270 pagewidth inch 2 div pageheight inch 2 div neg cropmark
@PreviousShowpage
end
grestore
} bind def
0707070014231030671006440057030057030000010304060522627502300004000000003350post.src/cropmarks/cropmarks.sh #
# Center pages and put cropmarks at each corner. Physical page size
# is set with -w and -h. The default is 8.5 by 11.0 inches. Device
# dependent code to change paper size (e.g. with setpageparams) goes
# in the prologue. You may need to customize the device dependent
# code that we distribute. By default it only supports variable page
# sizes on Linotronic typesetters, and assumes those typesetters are
# using 12 inch wide paper. Use -d to disable execution of device
# dependent PostScript code.
#
# What's here was written quickly and will likely be very different
# in our next release. It should be part of a more general program!!
#
POSTLIB=/usr/lib/postscript
PROLOGUE=$POSTLIB/cropmarks.ps
EXPANDPAGE=true
PAGEWIDTH=8.5
PAGEHEIGHT=11.0
SCALETOFIT=false
XOFFSET=0.0
YOFFSET=0.0
NONCONFORMING="%!PS"
ENDPROLOG="%%EndProlog"
BEGINSETUP="%%BeginSetup"
ENDSETUP="%%EndSetup"
while [ -n "$1" ]; do
case $1 in
-d) EXPANDPAGE=false;;
-h) shift; PAGEHEIGHT=$1;;
-h*) PAGEHEIGHT=`echo $1 | sed s/-h//`;;
-s) SCALETOFIT=true;;
-w) shift; PAGEWIDTH=$1;;
-w*) PAGEWIDTH=`echo $1 | sed s/-w//`;;
-x) shift; XOFFSET=$1;;
-x*) XOFFSET=`echo $1 | sed s/-x//`;;
-y) shift; YOFFSET=$1;;
-y*) YOFFSET=`echo $1 | sed s/-y//`;;
-L) shift; PROLOGUE=$1;;
-L*) PROLOGUE=`echo $1 | sed s/-L//`;;
--) shift; break;;
-*) echo "$0: illegal option $1" >&2; exit 1;;
*) break;;
esac
shift
done
echo $NONCONFORMING
cat $PROLOGUE
echo $ENDPROLOG
echo $BEGINSETUP
echo "CropmarkDict begin"
echo "/pageheight $PAGEHEIGHT def"
echo "/pagewidth $PAGEWIDTH def"
echo "/expandpage $EXPANDPAGE def"
echo "/scaletofit $SCALETOFIT def"
echo "/xoffset $XOFFSET def"
echo "/yoffset $YOFFSET def"
echo "setup"
echo "end"
echo $ENDSETUP
cat $*
0707070014231027421006400057030057030000010230260522633073300004000000003045post.src/cropmarks/cropmarks.mk MAKE=/bin/make
MAKEFILE=cropmarks.mk
OWNER=bin
GROUP=bin
MAN1DIR=/tmp
MAN5DIR=/usr/man/p_man/man5
POSTLIB=/usr/lib/postscript
POSTBIN=/usr/bin/postscript
all : cropmarks
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp cropmarks $(POSTBIN)/cropmarks
@chmod 755 $(POSTBIN)/cropmarks
@chgrp $(GROUP) $(POSTBIN)/cropmarks
@chown $(OWNER) $(POSTBIN)/cropmarks
cp cropmarks.ps $(POSTLIB)/cropmarks.ps
@chmod 644 $(POSTLIB)/cropmarks.ps
@chgrp $(GROUP) $(POSTLIB)/cropmarks.ps
@chown $(OWNER) $(POSTLIB)/cropmarks.ps
cp cropmarks.1 $(MAN1DIR)/cropmarks.1
@chmod 644 $(MAN1DIR)/cropmarks.1
@chgrp $(GROUP) $(MAN1DIR)/cropmarks.1
@chown $(OWNER) $(MAN1DIR)/cropmarks.1
clean :
clobber : clean
rm -f cropmarks
cropmarks : cropmarks.sh
sed "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" cropmarks.sh >cropmarks
@chmod 755 cropmarks
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^MAN5DIR=.*'MAN5DIR=$(MAN5DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
cropmarks.1 >XXX.1; \
mv XXX.1 cropmarks.1
0707070014231027431006400057030057030000010303640522633073300003700000004373post.src/cropmarks/cropmarks.1 .ds dQ /usr/lib/postscript
.TH CROPMARKS 1 "DWB 3.2"
.SH NAME
.B cropmarks
\- add cropmarks to PostScript files
.SH SYNOPSIS
\*(mBcropmarks\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B Cropmarks
surrounds PostScript
.I files
with code that centers each page and adds cropmarks to the four
corners.
The results are written on the standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.I files,
the standard input is read.
The following
.I options
are understood:
.TP 1.0i
.OP \-d
Disable the device-dependent PostScript code that expands page sizes.
.TP 1.0i
.OP \-h num
Set the height of each page to
.I num
inches.
The default is 11.0 inches.
.TP 1.0i
.OP \-s
Scale pages so cropmarks always show up.
Primarily for debugging and development on devices that don't adjust
page sizes.
.TP 1.0i
.OP \-w num
Set the width of each page to
.I num
inches.
The default is 8.5 inches.
.TP 1.0i
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/cropmarks.ps .
.PP
Height and width set with the
.OP \-h
and
.OP \-w
options adjust the size of the image area available on each sheet
of paper.
Neither suggests anything about the orientation of output in that area.
Cropmarks are printed at each corner just outside the image area.
.SH EXAMPLES
.PP
Print text in a 6.5\(mu8.0-inch area centered on each sheet of paper:
.EX
troff -mm \f2file\fP | dpost | cropmarks -w6.5 -h8.0 | \f2spool
.EE
Print landscape text in exactly the same 6.5\(mu8.0-inch area:
.EX
troff -mm \f2file\fP | dpost -pland | cropmarks -w6.5 -h8.0 | \f2spool
.EE
In both examples,
.I spool
is the spooling command used to send PostScript output to a local printer.
.SH WARNINGS
.PP
Device-dependent PostScript code to automatically expand page sizes may
only work on Linotronic 200P typesetters that use 12-inch-wide paper.
Local changes to the printer-dependent code can be made in the
.MW expandpagesize
procedure defined in
.MR \*(dQ/cropmarks.ps .
.PP
The PostScript
.I files
must be reasonably well behaved.
There are no guarantees, particularly if the input
.I files
redefine the
.MW showpage
operator.
.PP
The program is unsupported and may not be included in future releases.
.SH FILES
.MW \*(dQ/cropmarks.ps
.SH SEE ALSO
.BR dpost (1),
.BRpostio (1),
.BR troff (1)
0707070014230361660407550057030057030000031041350522627502700002200000000000post.src/devopost 0707070014230361671006440057030057030000011041360522627502300002500000002037post.src/devopost/AB # AvantGarde-Demi
name AB
internalname 27
ligatures fi fl 0
charset
! 28 2 33
$ 56 2 36
% 86 2 37
& 68 2 38
' 28 2 39
( 38 3 40
) 38 3 41
* 44 2 42
+ 60 0 43
, 28 1 44
hy 42 0 45
- "
. 28 0 46
/ 46 3 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
= 60 0 61
? 56 2 63
A 74 2 65
B 58 2 66
C 78 2 67
D 70 2 68
E 52 2 69
F 48 2 70
G 84 2 71
H 68 2 72
I 28 2 73
J 48 2 74
K 62 2 75
L 44 2 76
M 90 2 77
N 74 2 78
O 84 2 79
P 56 2 80
Q 84 2 81
R 58 2 82
S 52 2 83
T 42 2 84
U 64 2 85
V 70 2 86
W 90 2 87
X 68 2 88
Y 62 2 89
Z 50 2 90
[ 32 3 91
] 32 3 93
` 28 2 96
a 66 0 97
b 66 2 98
c 64 0 99
d 66 2 100
e 64 0 101
f 28 2 102
g 66 1 103
h 60 2 104
i 24 2 105
j 26 3 106
k 58 2 107
l 24 2 108
m 94 0 109
n 60 0 110
o 64 0 111
p 66 1 112
q 66 1 113
r 32 0 114
s 44 0 115
t 30 2 116
u 60 0 117
v 56 0 118
w 80 0 119
x 56 0 120
y 58 1 121
z 46 0 122
ct 56 2 162
fi 52 2 174
fl 52 2 175
dg 56 3 178
bu 60 0 183
de 36 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 48 2 170
'' 48 2 186
0707070014230361701006440057030057030000011041550522627502300002500000002046post.src/devopost/AI # AvantGarde-BookOblique
name AI
internalname 26
ligatures fi fl 0
charset
! 29 2 33
$ 55 2 36
% 77 2 37
& 76 2 38
' 35 2 39
( 37 3 40
) 37 3 41
* 42 2 42
+ 61 0 43
, 28 0 44
hy 33 0 45
- "
. 28 0 46
/ 44 3 47
0 55 2 48
1 55 2 49
2 55 2 50
3 55 2 51
4 55 2 52
5 55 2 53
6 55 2 54
7 55 2 55
8 55 2 56
9 55 2 57
: 28 0 58
; 28 0 59
= 61 0 61
? 59 2 63
A 74 2 65
B 57 2 66
C 81 2 67
D 74 2 68
E 54 2 69
F 49 2 70
G 87 2 71
H 68 2 72
I 23 2 73
J 48 2 74
K 59 2 75
L 46 2 76
M 92 2 77
N 74 2 78
O 87 2 79
P 59 2 80
Q 87 2 81
R 61 2 82
S 50 2 83
T 43 2 84
U 66 2 85
V 70 2 86
W 96 2 87
X 61 2 88
Y 59 2 89
Z 48 2 90
[ 35 3 91
] 35 3 93
` 35 2 96
a 68 0 97
b 68 2 98
c 65 0 99
d 69 2 100
e 65 0 101
f 31 2 102
g 67 1 103
h 61 2 104
i 20 2 105
j 20 3 106
k 50 2 107
l 20 2 108
m 94 0 109
n 61 0 110
o 66 0 111
p 68 1 112
q 68 1 113
r 30 0 114
s 39 0 115
t 34 2 116
u 61 0 117
v 55 0 118
w 83 0 119
x 48 0 120
y 54 1 121
z 42 0 122
ct 55 2 162
fi 49 2 174
fl 49 2 175
dg 55 3 178
bu 61 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230361711006440057030057030000011041700522627502300002500000002037post.src/devopost/AR # AvantGarde-Book
name AR
internalname 25
ligatures fi fl 0
charset
! 29 2 33
$ 55 2 36
% 77 2 37
& 76 2 38
' 35 2 39
( 37 3 40
) 37 3 41
* 42 2 42
+ 61 0 43
, 28 0 44
hy 33 0 45
- "
. 28 0 46
/ 44 3 47
0 55 2 48
1 55 2 49
2 55 2 50
3 55 2 51
4 55 2 52
5 55 2 53
6 55 2 54
7 55 2 55
8 55 2 56
9 55 2 57
: 28 0 58
; 28 0 59
= 61 0 61
? 59 2 63
A 74 2 65
B 57 2 66
C 81 2 67
D 74 2 68
E 54 2 69
F 49 2 70
G 87 2 71
H 68 2 72
I 23 2 73
J 48 2 74
K 59 2 75
L 46 2 76
M 92 2 77
N 74 2 78
O 87 2 79
P 59 2 80
Q 87 2 81
R 61 2 82
S 50 2 83
T 43 2 84
U 66 2 85
V 70 2 86
W 96 2 87
X 61 2 88
Y 59 2 89
Z 48 2 90
[ 35 3 91
] 35 3 93
` 35 2 96
a 68 0 97
b 68 2 98
c 65 0 99
d 69 2 100
e 65 0 101
f 31 2 102
g 67 1 103
h 61 2 104
i 20 2 105
j 20 3 106
k 50 2 107
l 20 2 108
m 94 0 109
n 61 0 110
o 66 0 111
p 68 1 112
q 68 1 113
r 30 0 114
s 39 0 115
t 34 2 116
u 61 0 117
v 55 0 118
w 83 0 119
x 48 0 120
y 54 1 121
z 42 0 122
ct 55 2 162
fi 49 2 174
fl 49 2 175
dg 55 3 178
bu 61 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230361721006440057030057030000011041720522627502300002500000002046post.src/devopost/AX # AvantGarde-DemiOblique
name AX
internalname 28
ligatures fi fl 0
charset
! 28 2 33
$ 56 2 36
% 86 2 37
& 68 2 38
' 28 2 39
( 38 3 40
) 38 3 41
* 44 2 42
+ 60 0 43
, 28 1 44
hy 42 0 45
- "
. 28 0 46
/ 46 3 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
= 60 0 61
? 56 2 63
A 74 2 65
B 58 2 66
C 78 2 67
D 70 2 68
E 52 2 69
F 48 2 70
G 84 2 71
H 68 2 72
I 28 2 73
J 48 2 74
K 62 2 75
L 44 2 76
M 90 2 77
N 74 2 78
O 84 2 79
P 56 2 80
Q 84 2 81
R 58 2 82
S 52 2 83
T 42 2 84
U 64 2 85
V 70 2 86
W 90 2 87
X 68 2 88
Y 62 2 89
Z 50 2 90
[ 32 3 91
] 32 3 93
` 28 2 96
a 66 0 97
b 66 2 98
c 64 0 99
d 66 2 100
e 64 0 101
f 28 2 102
g 66 1 103
h 60 2 104
i 24 2 105
j 26 3 106
k 58 2 107
l 24 2 108
m 94 0 109
n 60 0 110
o 64 0 111
p 66 1 112
q 66 1 113
r 32 0 114
s 44 0 115
t 30 2 116
u 60 0 117
v 56 0 118
w 80 0 119
x 56 0 120
y 58 1 121
z 46 0 122
ct 56 2 162
fi 52 2 174
fl 52 2 175
dg 56 3 178
bu 60 0 183
de 36 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 48 2 170
'' 48 2 186
0707070014230361731006440057030057030000011041740522627502300002400000002102post.src/devopost/B # Times-Bold
name B
internalname 3
ligatures fi fl 0
charset
! 33 2 33
$ 50 3 36
% 100 2 37
& 83 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 57 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
= 57 0 61
? 50 2 63
A 72 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 78 2 72
I 39 2 73
J 50 2 74
K 78 2 75
L 67 2 76
M 94 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 72 2 82
S 56 2 83
T 67 2 84
U 72 2 85
V 72 2 86
W 100 2 87
X 72 2 88
Y 72 2 89
Z 67 2 90
[ 33 3 91
] 33 3 93
` 33 2 96
a 50 0 97
b 56 2 98
c 44 0 99
d 56 2 100
e 44 0 101
f 33 2 102
g 50 1 103
h 56 2 104
i 28 2 105
j 33 3 106
k 56 2 107
l 28 2 108
m 83 0 109
n 56 0 110
o 50 0 111
p 56 1 112
q 56 1 113
r 44 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
ct 50 3 162
fi 56 2 174
fl 56 2 175
ff 60 2 1
Fi 84 2 1
Fl 84 2 1
dg 50 3 178
bu 35 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
sq 50 2 1
`` 50 2 170
'' 50 2 186
0707070014230361741006440057030057030000011041760522627502400002500000002037post.src/devopost/BI # Times-BoldItalic
name BI
internalname 4
ligatures fi fl 0
charset
! 39 2 33
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 57 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
= 57 0 61
? 50 2 63
A 67 2 65
B 67 2 66
C 67 2 67
D 72 2 68
E 67 2 69
F 67 2 70
G 72 2 71
H 78 2 72
I 39 2 73
J 50 2 74
K 67 2 75
L 61 2 76
M 89 2 77
N 72 2 78
O 72 2 79
P 61 2 80
Q 72 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 89 2 87
X 67 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
] 33 3 93
` 33 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 33 3 102
g 50 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 39 0 114
s 39 0 115
t 28 2 116
u 56 0 117
v 44 0 118
w 67 0 119
x 50 0 120
y 44 1 121
z 39 0 122
ct 50 3 162
fi 56 3 174
fl 56 3 175
dg 50 3 178
bu 35 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230361751006440057030057030000011042300522627502400002500000002213post.src/devopost/CB # Courier-Bold
name CB
internalname 7
spacewidth 60
charset
! 60 2 33
" 60 2 34
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 0 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 1 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 3 92
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
ct 60 2 162
\- 60 0 177
en "
dg 60 3 178
bu 60 0 183
de 60 2 202
em 60 0 208
14 60 2 1
34 60 2 1
12 60 2 1
`` 60 2 170
'' 60 2 186
0707070014230361761006440057030057030000011042320522627502400002500000002216post.src/devopost/CI # Courier-Oblique
name CI
internalname 6
spacewidth 60
charset
! 60 2 33
" 60 2 34
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 0 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 1 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 3 92
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
ct 60 2 162
\- 60 0 177
en "
dg 60 3 178
bu 60 0 183
de 60 2 202
em 60 0 208
14 60 2 1
34 60 2 1
12 60 2 1
`` 60 2 170
'' 60 2 186
0707070014230361771006440057030057030000011042340522627502400002500000002206post.src/devopost/CO # Courier
name CW
internalname 5
spacewidth 60
charset
! 60 2 33
" 60 2 34
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 0 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 1 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 3 92
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
ct 60 2 162
\- 60 0 177
en "
dg 60 3 178
bu 60 0 183
de 60 2 202
em 60 0 208
14 60 2 1
34 60 2 1
12 60 2 1
`` 60 2 170
'' 60 2 186
0707070014230362001006440057030057030000011042360522627502400002500000002206post.src/devopost/CW # Courier
name CW
internalname 5
spacewidth 60
charset
! 60 2 33
" 60 2 34
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 0 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 1 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 3 92
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
ct 60 2 162
\- 60 0 177
en "
dg 60 3 178
bu 60 0 183
de 60 2 202
em 60 0 208
14 60 2 1
34 60 2 1
12 60 2 1
`` 60 2 170
'' 60 2 186
0707070014230362011006440057030057030000011042500522627502400002500000002222post.src/devopost/CX # Courier-BoldOblique
name CX
internalname 8
spacewidth 60
charset
! 60 2 33
" 60 2 34
# 60 2 35
$ 60 2 36
% 60 2 37
& 60 2 38
' 60 2 39
( 60 3 40
) 60 3 41
* 60 2 42
+ 60 0 43
, 60 1 44
hy 60 0 45
- "
. 60 0 46
/ 60 2 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 60 0 58
; 60 1 59
< 60 2 60
= 60 0 61
> 60 2 62
? 60 2 63
@ 60 2 64
A 60 2 65
B 60 2 66
C 60 2 67
D 60 2 68
E 60 2 69
F 60 2 70
G 60 2 71
H 60 2 72
I 60 2 73
J 60 2 74
K 60 2 75
L 60 2 76
M 60 2 77
N 60 2 78
O 60 2 79
P 60 2 80
Q 60 3 81
R 60 2 82
S 60 2 83
T 60 2 84
U 60 2 85
V 60 2 86
W 60 2 87
X 60 2 88
Y 60 2 89
Z 60 2 90
[ 60 3 91
\ 60 3 92
] 60 3 93
^ 60 2 94
_ 60 1 95
` 60 2 96
a 60 0 97
b 60 2 98
c 60 0 99
d 60 2 100
e 60 0 101
f 60 2 102
g 60 1 103
h 60 2 104
i 60 2 105
j 60 3 106
k 60 2 107
l 60 2 108
m 60 0 109
n 60 0 110
o 60 0 111
p 60 1 112
q 60 1 113
r 60 0 114
s 60 0 115
t 60 2 116
u 60 0 117
v 60 0 118
w 60 0 119
x 60 0 120
y 60 1 121
z 60 0 122
{ 60 3 123
| 60 3 124
} 60 3 125
~ 60 0 126
ct 60 2 162
\- 60 0 177
en "
dg 60 3 178
bu 60 0 183
de 60 2 202
em 60 0 208
14 60 2 1
34 60 2 1
12 60 2 1
`` 60 2 170
'' 60 2 186
0707070014230362021006440057030057030000011041570522627502400002700000001431post.src/devopost/DESC #
# Original PostScript tables - now obsolete and unsupported.
#
PDL PostScript
fonts 10 R I B BI CW H HB HX S1 S
sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 44 48 54 60 72 0
res 720
hor 1
vert 1
unitwidth 10
biggestfont 200
charset
hy ct fi fl ff Fi Fl dg em 14 34 12 \- en \' aa
\` ga ru sc dd -> \e br Sl ps cs cy as os =. ld
rd le ge pp -+
sq bx ci fa te ** pl mi \< eq \> ~= *A *B *X *D
*E *F *G *Y *I *K *L *M *N *O *P *R *H *S *T *U
*W *C *Q *Z ul \_ rn *a *b *x *d *e *f *g *y *i
*k *l *m *n *o *p *h *r *s *t *u *w *c *q *z \{
\| \} ap fm <= sl if <- ua da de +- >= mu pt pd
bu di != == ~~ al Ox O+ es ca cu sp ip sb ib mo
gr rg co tm sr no \^ or lc lf lt lk lb bv is rc
rf rt rk rb ts lh rh LV LH Lb L1 LA `` '' ob vr
0707070014230362031006440057030057030000011042520522627502400002500000001125post.src/devopost/GR # Greek
name GR
internalname 33
special
charset
*a 63 0 97
*b 55 3 98
*g 41 1 103
*d 49 2 100
*e 44 0 101
*z 49 3 122
*y 60 1 104
*h 52 2 113
*i 33 0 105
*k 55 0 107
*l 55 2 108
*m 58 1 109
*n 52 0 110
*c 49 3 120
*o 55 0 111
*p 55 0 112
*r 55 1 114
*s 60 0 115
*t 44 0 116
*u 58 0 117
*f 52 3 102
*x 55 1 99
*q 69 1 121
*w 69 0 119
*A 72 2 65
*B 67 2 66
*G 60 2 71
*D 61 2 68
*E 61 2 69
*Z 61 2 90
*Y 72 2 72
*H 74 2 81
*R 56 2 82
*I 33 2 73
*K 72 2 75
*L 69 2 76
*M 89 2 77
*N 72 2 78
*C 65 2 88
*O 72 2 79
*P 77 2 80
*S 59 2 83
*T 61 2 84
*U 69 2 85
*F 76 2 70
*X 72 2 67
*Q 80 2 89
*W 77 2 87
0707070014230362041006440057030057030000011042530522627502400002400000002027post.src/devopost/H # Helvetica
name H
internalname 9
ligatures fi fl 0
charset
! 28 2 33
$ 56 3 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
= 58 0 61
? 56 2 63
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 28 3 91
] 28 3 93
` 22 2 96
a 56 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 56 0 101
f 28 2 102
g 56 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
ct 56 3 162
fi 50 2 174
fl 50 2 175
dg 56 3 178
bu 35 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 33 2 170
'' 33 2 186
0707070014230362051006440057030057030000011042550522627502400002500000002036post.src/devopost/HB # Helvetica-Bold
name HB
internalname 11
ligatures fi fl 0
charset
! 33 2 33
$ 56 3 36
% 89 2 37
& 72 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 33 0 58
; 33 1 59
= 58 0 61
? 61 2 63
A 72 2 65
B 72 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 56 2 74
K 72 2 75
L 61 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 33 3 91
] 33 3 93
` 28 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 33 2 102
g 61 1 103
h 61 2 104
i 28 2 105
j 28 3 106
k 56 2 107
l 28 2 108
m 89 0 109
n 61 0 110
o 61 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 56 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 78 0 119
x 56 0 120
y 56 1 121
z 50 0 122
ct 56 3 162
fi 61 2 174
fl 61 2 175
dg 56 3 178
bu 35 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230362061006440057030057030000011042700522627502400002500000002041post.src/devopost/HI # Helvetica-Oblique
name HI
internalname 10
ligatures fi fl 0
charset
! 28 2 33
$ 56 3 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
= 58 0 61
? 56 2 63
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 28 3 91
] 28 3 93
` 22 2 96
a 56 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 56 0 101
f 28 2 102
g 56 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
ct 56 3 162
fi 50 2 174
fl 50 2 175
dg 56 3 178
bu 35 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 33 2 170
'' 33 2 186
0707070014230362071006440057030057030000011042720522627502400002500000002045post.src/devopost/HX # Helvetica-BoldOblique
name HX
internalname 12
ligatures fi fl 0
charset
! 33 2 33
$ 56 3 36
% 89 2 37
& 72 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 58 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 33 0 58
; 33 1 59
= 58 0 61
? 61 2 63
A 72 2 65
B 72 2 66
C 72 2 67
D 72 2 68
E 67 2 69
F 61 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 56 2 74
K 72 2 75
L 61 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 67 2 80
Q 78 2 81
R 72 2 82
S 67 2 83
T 61 2 84
U 72 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 67 2 89
Z 61 2 90
[ 33 3 91
] 33 3 93
` 28 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 33 2 102
g 61 1 103
h 61 2 104
i 28 2 105
j 28 3 106
k 56 2 107
l 28 2 108
m 89 0 109
n 61 0 110
o 61 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 56 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 78 0 119
x 56 0 120
y 56 1 121
z 50 0 122
ct 56 3 162
fi 61 2 174
fl 61 2 175
dg 56 3 178
bu 35 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230362101006440057030057030000011042740522627502400002500000002044post.src/devopost/Hb # Helvetica-Narrow-Bold
name Hb
internalname 19
ligatures fi fl 0
charset
! 27 2 33
$ 46 3 36
% 73 2 37
& 59 2 38
' 23 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
hy 27 0 45
- "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 27 0 58
; 27 1 59
= 48 0 61
? 50 2 63
A 59 2 65
B 59 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 46 2 74
K 59 2 75
L 50 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 27 3 91
] 27 3 93
` 23 2 96
a 46 0 97
b 50 2 98
c 46 0 99
d 50 2 100
e 46 0 101
f 27 2 102
g 50 1 103
h 50 2 104
i 23 2 105
j 23 3 106
k 46 2 107
l 23 2 108
m 73 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 32 0 114
s 46 0 115
t 27 2 116
u 50 0 117
v 46 0 118
w 64 0 119
x 46 0 120
y 46 1 121
z 41 0 122
ct 46 3 162
fi 50 2 174
fl 50 2 175
dg 46 3 178
bu 29 0 183
de 27 2 202
em 82 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 41 2 170
'' 41 2 186
0707070014230362111006440057030057030000011042760522627502400002500000002047post.src/devopost/Hi # Helvetica-Narrow-Oblique
name Hi
internalname 18
ligatures fi fl 0
charset
! 23 2 33
$ 46 3 36
% 73 2 37
& 55 2 38
' 18 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
hy 27 0 45
- "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 23 0 58
; 23 1 59
= 48 0 61
? 46 2 63
A 55 2 65
B 55 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 41 2 74
K 55 2 75
L 46 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 23 3 91
] 23 3 93
` 18 2 96
a 46 0 97
b 46 2 98
c 41 0 99
d 46 2 100
e 46 0 101
f 23 2 102
g 46 1 103
h 46 2 104
i 18 2 105
j 18 3 106
k 41 2 107
l 18 2 108
m 68 0 109
n 46 0 110
o 46 0 111
p 46 1 112
q 46 1 113
r 27 0 114
s 41 0 115
t 23 2 116
u 46 0 117
v 41 0 118
w 59 0 119
x 41 0 120
y 41 1 121
z 41 0 122
ct 46 3 162
fi 41 2 174
fl 41 2 175
dg 46 3 178
bu 29 0 183
de 27 2 202
em 82 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 27 2 170
'' 27 2 186
0707070014230362121006440057030057030000011043300522627502400002500000002037post.src/devopost/Hr # Helvetica-Narrow
name Hr
internalname 17
ligatures fi fl 0
charset
! 23 2 33
$ 46 3 36
% 73 2 37
& 55 2 38
' 18 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
hy 27 0 45
- "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 23 0 58
; 23 1 59
= 48 0 61
? 46 2 63
A 55 2 65
B 55 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 41 2 74
K 55 2 75
L 46 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 23 3 91
] 23 3 93
` 18 2 96
a 46 0 97
b 46 2 98
c 41 0 99
d 46 2 100
e 46 0 101
f 23 2 102
g 46 1 103
h 46 2 104
i 18 2 105
j 18 3 106
k 41 2 107
l 18 2 108
m 68 0 109
n 46 0 110
o 46 0 111
p 46 1 112
q 46 1 113
r 27 0 114
s 41 0 115
t 23 2 116
u 46 0 117
v 41 0 118
w 59 0 119
x 41 0 120
y 41 1 121
z 41 0 122
ct 46 3 162
fi 41 2 174
fl 41 2 175
dg 46 3 178
bu 29 0 183
de 27 2 202
em 82 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 27 2 170
'' 27 2 186
0707070014230362131006440057030057030000011043320522627502400002500000002053post.src/devopost/Hx # Helvetica-Narrow-BoldOblique
name Hx
internalname 20
ligatures fi fl 0
charset
! 27 2 33
$ 46 3 36
% 73 2 37
& 59 2 38
' 23 2 39
( 27 3 40
) 27 3 41
* 32 2 42
+ 48 0 43
, 23 1 44
hy 27 0 45
- "
. 23 0 46
/ 23 2 47
0 46 2 48
1 46 2 49
2 46 2 50
3 46 2 51
4 46 2 52
5 46 2 53
6 46 2 54
7 46 2 55
8 46 2 56
9 46 2 57
: 27 0 58
; 27 1 59
= 48 0 61
? 50 2 63
A 59 2 65
B 59 2 66
C 59 2 67
D 59 2 68
E 55 2 69
F 50 2 70
G 64 2 71
H 59 2 72
I 23 2 73
J 46 2 74
K 59 2 75
L 50 2 76
M 68 2 77
N 59 2 78
O 64 2 79
P 55 2 80
Q 64 2 81
R 59 2 82
S 55 2 83
T 50 2 84
U 59 2 85
V 55 2 86
W 77 2 87
X 55 2 88
Y 55 2 89
Z 50 2 90
[ 27 3 91
] 27 3 93
` 23 2 96
a 46 0 97
b 50 2 98
c 46 0 99
d 50 2 100
e 46 0 101
f 27 2 102
g 50 1 103
h 50 2 104
i 23 2 105
j 23 3 106
k 46 2 107
l 23 2 108
m 73 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 32 0 114
s 46 0 115
t 27 2 116
u 50 0 117
v 46 0 118
w 64 0 119
x 46 0 120
y 46 1 121
z 41 0 122
ct 46 3 162
fi 50 2 174
fl 50 2 175
dg 46 3 178
bu 29 0 183
de 27 2 202
em 82 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 41 2 170
'' 41 2 186
0707070014230362141006440057030057030000011043340522627502400002400000002101post.src/devopost/I # Times-Italic
name I
internalname 2
ligatures fi fl 0
charset
! 33 2 33
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 68 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
= 68 0 61
? 50 2 63
A 61 2 65
B 61 2 66
C 67 2 67
D 72 2 68
E 61 2 69
F 61 2 70
G 72 2 71
H 72 2 72
I 33 2 73
J 44 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 67 2 78
O 72 2 79
P 61 2 80
Q 72 3 81
R 61 2 82
S 50 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 83 2 87
X 61 2 88
Y 56 2 89
Z 56 2 90
[ 39 3 91
] 39 3 93
` 33 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 28 3 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 44 2 107
l 28 2 108
m 72 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 39 0 114
s 39 0 115
t 28 0 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
ct 50 3 162
fi 50 3 174
fl 50 3 175
ff 50 2 1
Fi 72 2 1
Fl 72 2 1
dg 50 2 178
bu 35 0 183
de 33 2 202
em 89 0 208
14 75 2 1
34 75 2 1
12 75 2 1
sq 50 2 1
`` 56 2 170
'' 56 2 186
0707070014230362151006440057030057030000011043360522627502400002500000002035post.src/devopost/KB # Bookman-Demi
name KB
internalname 23
ligatures fi fl 0
charset
! 36 2 33
$ 66 3 36
% 94 2 37
& 80 2 38
' 32 2 39
( 32 3 40
) 32 3 41
* 46 2 42
+ 60 0 43
, 34 1 44
hy 36 0 45
- "
. 34 0 46
/ 60 3 47
0 66 2 48
1 66 2 49
2 66 2 50
3 66 2 51
4 66 2 52
5 66 2 53
6 66 2 54
7 66 2 55
8 66 2 56
9 66 2 57
: 34 0 58
; 34 1 59
= 60 0 61
? 66 2 63
A 72 2 65
B 72 2 66
C 74 2 67
D 78 2 68
E 72 2 69
F 68 2 70
G 78 2 71
H 82 2 72
I 40 2 73
J 64 2 74
K 80 2 75
L 64 2 76
M 94 2 77
N 74 2 78
O 80 2 79
P 66 2 80
Q 80 3 81
R 78 2 82
S 66 2 83
T 70 2 84
U 74 2 85
V 72 2 86
W 94 2 87
X 78 2 88
Y 70 2 89
Z 64 2 90
[ 30 3 91
] 30 3 93
` 32 2 96
a 58 0 97
b 60 2 98
c 58 0 99
d 64 2 100
e 58 0 101
f 38 2 102
g 58 3 103
h 68 2 104
i 36 2 105
j 34 3 106
k 66 2 107
l 34 2 108
m 100 0 109
n 68 0 110
o 62 0 111
p 64 1 112
q 62 1 113
r 46 0 114
s 52 0 115
t 46 2 116
u 66 0 117
v 60 0 118
w 80 0 119
x 60 0 120
y 62 1 121
z 56 0 122
ct 66 2 162
fi 74 2 174
fl 74 2 175
dg 44 3 178
bu 46 0 183
de 34 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 54 2 170
'' 54 2 186
0707070014230362161006440057030057030000011043500522627502400002500000002043post.src/devopost/KI # Bookman-LightItalic
name KI
internalname 22
ligatures fi fl 0
charset
! 32 2 33
$ 62 2 36
% 80 2 37
& 82 2 38
' 28 2 39
( 28 3 40
) 28 3 41
* 44 2 42
+ 60 0 43
, 30 1 44
hy 32 0 45
- "
. 30 0 46
/ 60 3 47
0 62 2 48
1 62 2 49
2 62 2 50
3 62 2 51
4 62 2 52
5 62 2 53
6 62 2 54
7 62 2 55
8 62 2 56
9 62 2 57
: 30 0 58
; 30 1 59
= 60 0 61
? 54 2 63
A 70 2 65
B 72 2 66
C 72 2 67
D 74 2 68
E 68 2 69
F 62 2 70
G 76 2 71
H 80 2 72
I 32 2 73
J 56 2 74
K 72 2 75
L 58 2 76
M 86 2 77
N 72 2 78
O 76 2 79
P 60 2 80
Q 78 3 81
R 70 2 82
S 64 2 83
T 60 2 84
U 72 2 85
V 68 2 86
W 96 2 87
X 70 2 88
Y 66 2 89
Z 58 2 90
[ 26 3 91
] 26 3 93
` 28 2 96
a 62 0 97
b 60 2 98
c 48 0 99
d 64 2 100
e 54 0 101
f 34 3 102
g 56 1 103
h 62 2 104
i 28 2 105
j 28 3 106
k 60 2 107
l 28 2 108
m 88 0 109
n 62 0 110
o 54 0 111
p 60 1 112
q 56 1 113
r 40 0 114
s 54 0 115
t 34 2 116
u 62 0 117
v 54 0 118
w 88 0 119
x 54 0 120
y 60 1 121
z 52 0 122
ct 62 2 162
fi 64 3 174
fl 66 3 175
dg 62 3 178
bu 46 0 183
de 30 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 44 2 170
'' 44 2 186
0707070014230362171006440057030057030000011043520522627502500002500000002035post.src/devopost/KR # Bookman-Light
name KR
internalname 21
ligatures fi fl 0
charset
! 30 2 33
$ 62 2 36
% 90 2 37
& 80 2 38
' 22 2 39
( 30 3 40
) 30 3 41
* 44 2 42
+ 60 0 43
, 32 1 44
hy 40 0 45
- "
. 32 0 46
/ 60 3 47
0 62 2 48
1 62 2 49
2 62 2 50
3 62 2 51
4 62 2 52
5 62 2 53
6 62 2 54
7 62 2 55
8 62 2 56
9 62 2 57
: 32 0 58
; 32 1 59
= 60 0 61
? 54 2 63
A 68 2 65
B 74 2 66
C 74 2 67
D 80 2 68
E 72 2 69
F 64 2 70
G 80 2 71
H 80 2 72
I 34 2 73
J 60 2 74
K 72 2 75
L 60 2 76
M 92 2 77
N 74 2 78
O 80 2 79
P 62 2 80
Q 82 3 81
R 72 2 82
S 66 2 83
T 62 2 84
U 78 2 85
V 70 2 86
W 96 2 87
X 72 2 88
Y 64 2 89
Z 64 2 90
[ 30 3 91
] 30 3 93
` 22 2 96
a 58 0 97
b 62 2 98
c 52 0 99
d 62 2 100
e 52 0 101
f 32 2 102
g 54 3 103
h 66 2 104
i 30 2 105
j 30 3 106
k 62 2 107
l 30 2 108
m 94 0 109
n 66 0 110
o 56 0 111
p 62 1 112
q 58 1 113
r 44 0 114
s 52 0 115
t 38 2 116
u 68 0 117
v 52 0 118
w 78 0 119
x 56 0 120
y 54 1 121
z 48 0 122
ct 62 2 162
fi 62 2 174
fl 62 2 175
dg 54 3 178
bu 46 0 183
de 32 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 40 2 170
'' 40 2 186
0707070014230362201006440057030057030000011043540522627502500002500000002043post.src/devopost/KX # Bookman-DemiItalic
name KX
internalname 24
ligatures fi fl 0
charset
! 32 2 33
$ 68 3 36
% 88 2 37
& 98 2 38
' 32 2 39
( 26 3 40
) 26 3 41
* 46 2 42
+ 60 0 43
, 34 1 44
hy 28 0 45
- "
. 34 0 46
/ 36 2 47
0 68 2 48
1 68 2 49
2 68 2 50
3 68 2 51
4 68 2 52
5 68 2 53
6 68 2 54
7 68 2 55
8 68 2 56
9 68 2 57
: 34 0 58
; 34 1 59
= 60 0 61
? 62 2 63
A 72 2 65
B 72 2 66
C 70 2 67
D 76 2 68
E 72 2 69
F 66 2 70
G 76 2 71
H 80 2 72
I 38 2 73
J 62 2 74
K 78 2 75
L 64 2 76
M 86 2 77
N 74 2 78
O 76 2 79
P 64 2 80
Q 76 3 81
R 74 2 82
S 70 2 83
T 70 2 84
U 74 2 85
V 66 2 86
W 100 2 87
X 74 2 88
Y 66 2 89
Z 68 2 90
[ 26 3 91
] 26 3 93
` 32 2 96
a 68 0 97
b 60 2 98
c 56 0 99
d 68 2 100
e 56 0 101
f 42 3 102
g 62 1 103
h 70 2 104
i 38 2 105
j 32 3 106
k 70 2 107
l 38 2 108
m 96 0 109
n 68 0 110
o 60 0 111
p 66 1 112
q 62 1 113
r 50 0 114
s 54 0 115
t 44 2 116
u 68 0 117
v 54 0 118
w 86 0 119
x 62 0 120
y 60 1 121
z 56 0 122
ct 68 2 162
fi 82 3 174
fl 82 3 175
dg 42 3 178
bu 36 0 183
de 36 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 52 2 170
'' 52 2 186
0707070014230362211006440057030057030000011043560522627502500002500000002045post.src/devopost/NB # NewCenturySchlbk-Bold
name NB
internalname 31
ligatures fi fl 0
charset
! 30 2 33
$ 57 3 36
% 83 2 37
& 85 2 38
' 24 2 39
( 39 3 40
) 39 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 57 2 48
1 57 2 49
2 57 2 50
3 57 2 51
4 57 2 52
5 57 2 53
6 57 2 54
7 57 2 55
8 57 2 56
9 57 2 57
: 28 0 58
; 28 1 59
= 61 0 61
? 50 2 63
A 76 2 65
B 78 2 66
C 78 2 67
D 83 2 68
E 76 2 69
F 72 2 70
G 83 2 71
H 87 2 72
I 44 2 73
J 65 2 74
K 81 2 75
L 72 2 76
M 98 2 77
N 83 2 78
O 83 2 79
P 76 2 80
Q 83 3 81
R 81 2 82
S 67 2 83
T 72 2 84
U 83 2 85
V 76 2 86
W 98 2 87
X 72 2 88
Y 72 2 89
Z 67 2 90
[ 39 3 91
] 39 3 93
` 24 2 96
a 61 0 97
b 65 2 98
c 56 0 99
d 67 2 100
e 57 0 101
f 39 2 102
g 61 1 103
h 69 2 104
i 37 2 105
j 35 3 106
k 67 2 107
l 35 2 108
m 96 0 109
n 69 0 110
o 61 0 111
p 67 1 112
q 65 1 113
r 52 0 114
s 50 0 115
t 43 2 116
u 69 0 117
v 61 0 118
w 89 0 119
x 61 0 120
y 61 1 121
z 54 0 122
ct 57 3 162
fi 69 2 174
fl 69 2 175
dg 50 2 178
bu 61 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 48 2 170
'' 48 2 186
0707070014230362221006440057030057030000011043700522627502500002500000002047post.src/devopost/NI # NewCenturySchlbk-Italic
name NI
internalname 30
ligatures fi fl 0
charset
! 33 2 33
$ 56 3 36
% 83 2 37
& 85 2 38
' 20 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 61 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
= 61 0 61
? 44 2 63
A 70 2 65
B 72 2 66
C 72 2 67
D 78 2 68
E 72 2 69
F 67 2 70
G 78 2 71
H 83 2 72
I 41 2 73
J 61 2 74
K 74 2 75
L 67 2 76
M 94 2 77
N 81 2 78
O 78 2 79
P 67 2 80
Q 78 3 81
R 74 2 82
S 67 2 83
T 69 2 84
U 81 2 85
V 70 2 86
W 93 2 87
X 70 2 88
Y 69 2 89
Z 67 2 90
[ 33 3 91
] 33 3 93
` 20 2 96
a 57 0 97
b 56 2 98
c 44 0 99
d 61 2 100
e 44 0 101
f 33 3 102
g 54 1 103
h 61 2 104
i 33 2 105
j 32 3 106
k 56 2 107
l 33 2 108
m 89 0 109
n 61 0 110
o 50 0 111
p 57 1 112
q 56 1 113
r 44 0 114
s 44 0 115
t 35 2 116
u 61 0 117
v 52 0 118
w 78 0 119
x 50 0 120
y 50 1 121
z 46 0 122
ct 56 3 162
fi 61 3 174
fl 61 3 175
dg 50 3 178
bu 61 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 39 2 170
'' 39 2 186
0707070014230362231006440057030057030000011043720522627502500002500000002046post.src/devopost/NR # NewCenturySchlbk-Roman
name NR
internalname 29
ligatures fi fl 0
charset
! 30 2 33
$ 56 3 36
% 83 2 37
& 81 2 38
' 20 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
= 61 0 61
? 44 2 63
A 72 2 65
B 72 2 66
C 72 2 67
D 78 2 68
E 72 2 69
F 67 2 70
G 78 2 71
H 83 2 72
I 41 2 73
J 56 2 74
K 78 2 75
L 67 2 76
M 94 2 77
N 81 2 78
O 78 2 79
P 67 2 80
Q 78 3 81
R 72 2 82
S 63 2 83
T 67 2 84
U 81 2 85
V 72 2 86
W 98 2 87
X 70 2 88
Y 70 2 89
Z 61 2 90
[ 33 3 91
] 33 3 93
` 20 2 96
a 56 0 97
b 56 2 98
c 44 0 99
d 57 2 100
e 50 0 101
f 33 2 102
g 54 1 103
h 61 2 104
i 32 2 105
j 30 3 106
k 59 2 107
l 32 2 108
m 89 0 109
n 61 0 110
o 50 0 111
p 57 1 112
q 56 1 113
r 44 0 114
s 46 0 115
t 39 2 116
u 61 0 117
v 54 0 118
w 78 0 119
x 54 0 120
y 54 1 121
z 48 0 122
ct 56 3 162
fi 61 2 174
fl 61 2 175
dg 50 3 178
bu 61 2 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 39 2 170
'' 39 2 186
0707070014230362241006440057030057030000011043740522627502500002500000002053post.src/devopost/NX # NewCenturySchlbk-BoldItalic
name NX
internalname 32
ligatures fi fl 0
charset
! 33 2 33
$ 57 3 36
% 89 2 37
& 89 2 38
' 26 2 39
( 41 3 40
) 41 3 41
* 50 2 42
+ 61 0 43
, 29 1 44
hy 33 0 45
- "
. 29 0 46
/ 28 2 47
0 57 2 48
1 57 2 49
2 57 2 50
3 57 2 51
4 57 2 52
5 57 2 53
6 57 2 54
7 57 2 55
8 57 2 56
9 57 2 57
: 29 0 58
; 29 1 59
= 61 0 61
? 48 2 63
A 74 2 65
B 76 2 66
C 76 2 67
D 83 2 68
E 74 2 69
F 70 2 70
G 81 2 71
H 87 2 72
I 44 2 73
J 67 2 74
K 78 2 75
L 70 2 76
M 94 2 77
N 85 2 78
O 83 2 79
P 74 2 80
Q 83 3 81
R 80 2 82
S 69 2 83
T 72 2 84
U 83 2 85
V 74 2 86
W 94 2 87
X 74 2 88
Y 70 2 89
Z 70 2 90
[ 41 3 91
] 41 3 93
` 26 2 96
a 67 0 97
b 61 2 98
c 54 0 99
d 67 2 100
e 52 0 101
f 39 3 102
g 61 1 103
h 69 2 104
i 39 2 105
j 37 3 106
k 65 2 107
l 39 2 108
m 94 0 109
n 69 0 110
o 57 0 111
p 65 1 112
q 63 1 113
r 52 0 114
s 48 0 115
t 41 2 116
u 69 0 117
v 56 0 118
w 83 0 119
x 57 0 120
y 52 1 121
z 52 0 122
ct 57 3 162
fi 69 3 174
fl 69 3 175
dg 50 3 178
bu 61 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 48 2 170
'' 48 2 186
0707070014230362251006440057030057030000011043760522627502500002500000002037post.src/devopost/PA # Palatino-Roman
name PA
internalname 13
ligatures fi fl 0
charset
! 28 2 33
$ 50 2 36
% 84 2 37
& 78 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 39 2 42
+ 61 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 61 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
= 61 0 61
? 44 2 63
A 78 2 65
B 61 2 66
C 71 2 67
D 77 2 68
E 61 2 69
F 56 2 70
G 76 2 71
H 83 2 72
I 34 2 73
J 33 3 74
K 73 2 75
L 61 2 76
M 95 2 77
N 83 2 78
O 79 2 79
P 60 2 80
Q 79 3 81
R 67 2 82
S 53 2 83
T 61 2 84
U 78 2 85
V 72 2 86
W 100 2 87
X 67 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
] 33 2 93
` 28 2 96
a 50 0 97
b 55 2 98
c 44 0 99
d 61 2 100
e 48 0 101
f 33 2 102
g 56 1 103
h 58 2 104
i 29 2 105
j 23 3 106
k 56 2 107
l 29 2 108
m 88 0 109
n 58 0 110
o 55 0 111
p 60 1 112
q 56 1 113
r 40 0 114
s 42 0 115
t 33 2 116
u 60 0 117
v 56 0 118
w 83 0 119
x 52 0 120
y 56 1 121
z 50 0 122
ct 50 0 162
fi 61 2 174
fl 61 2 175
dg 50 2 178
bu 61 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230362261006440057030057030000011044100522627502500002500000002037post.src/devopost/PB # Palatino-Bold
name PB
internalname 15
ligatures fi fl 0
charset
! 28 2 33
$ 50 2 36
% 89 2 37
& 83 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 44 2 42
+ 61 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 30 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
= 61 0 61
? 44 2 63
A 78 2 65
B 67 2 66
C 72 2 67
D 83 2 68
E 61 2 69
F 56 2 70
G 83 2 71
H 83 2 72
I 39 2 73
J 39 3 74
K 78 2 75
L 61 2 76
M 100 2 77
N 83 2 78
O 83 2 79
P 61 2 80
Q 83 3 81
R 72 2 82
S 61 2 83
T 67 2 84
U 78 2 85
V 78 2 86
W 100 2 87
X 67 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
] 33 2 93
` 28 2 96
a 50 0 97
b 61 2 98
c 44 0 99
d 61 2 100
e 50 0 101
f 39 2 102
g 56 1 103
h 61 2 104
i 33 2 105
j 33 3 106
k 61 2 107
l 33 2 108
m 89 0 109
n 61 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 39 0 114
s 44 0 115
t 33 2 116
u 61 0 117
v 56 0 118
w 83 0 119
x 50 0 120
y 56 1 121
z 50 0 122
ct 50 0 162
fi 61 2 174
fl 61 2 175
dg 50 2 178
bu 61 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230362271006440057030057030000011044120522627502500002500000002037post.src/devopost/PI # Palatino-Italic
name PI
internalname 14
ligatures fi fl 0
charset
! 33 2 33
$ 50 2 36
% 89 2 37
& 78 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 39 2 42
+ 61 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 30 3 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
= 61 0 61
? 50 2 63
A 72 2 65
B 61 2 66
C 67 2 67
D 78 2 68
E 61 2 69
F 56 2 70
G 72 2 71
H 78 2 72
I 33 2 73
J 33 3 74
K 67 2 75
L 56 2 76
M 94 2 77
N 78 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 78 2 85
V 72 2 86
W 94 2 87
X 72 2 88
Y 67 2 89
Z 67 2 90
[ 33 2 91
] 33 2 93
` 28 2 96
a 44 0 97
b 46 2 98
c 41 0 99
d 50 2 100
e 39 0 101
f 28 3 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 44 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 44 0 111
p 50 1 112
q 46 1 113
r 39 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
ct 50 0 162
fi 53 3 174
fl 54 3 175
dg 50 2 178
bu 50 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230362301006440057030057030000011044140522627502500002500000002044post.src/devopost/PX # Palatino-BoldItalic
name PX
internalname 16
ligatures fi fl 0
charset
! 33 2 33
$ 50 2 36
% 89 2 37
& 83 2 38
' 28 2 39
( 33 2 40
) 33 2 41
* 44 2 42
+ 61 0 43
, 25 1 44
hy 39 0 45
- "
. 25 0 46
/ 32 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
= 61 0 61
? 44 2 63
A 72 2 65
B 67 2 66
C 69 2 67
D 78 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 78 2 72
I 39 2 73
J 39 3 74
K 72 2 75
L 61 2 76
M 94 2 77
N 78 2 78
O 83 2 79
P 67 2 80
Q 83 3 81
R 72 2 82
S 56 2 83
T 61 2 84
U 78 2 85
V 67 2 86
W 100 2 87
X 72 2 88
Y 61 2 89
Z 67 2 90
[ 33 2 91
] 33 2 93
` 28 2 96
a 56 0 97
b 54 2 98
c 44 0 99
d 56 2 100
e 44 0 101
f 33 3 102
g 50 1 103
h 56 2 104
i 33 2 105
j 33 3 106
k 56 2 107
l 33 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 54 1 113
r 39 0 114
s 44 0 115
t 39 2 116
u 56 0 117
v 56 0 118
w 83 0 119
x 50 0 120
y 56 1 121
z 50 0 122
ct 50 0 162
fi 61 3 174
fl 61 3 175
dg 56 2 178
bu 61 0 183
de 56 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 50 2 170
'' 50 2 186
0707070014230362311006440057030057030000011044160522627502500002400000002101post.src/devopost/R # Times-Roman
name R
internalname 1
ligatures fi fl 0
charset
! 33 2 33
$ 50 2 36
% 83 2 37
& 78 2 38
' 33 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 56 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 28 0 58
; 28 1 59
= 56 0 61
? 44 2 63
A 72 2 65
B 67 2 66
C 67 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 72 2 71
H 72 2 72
I 33 2 73
J 39 2 74
K 72 2 75
L 61 2 76
M 89 2 77
N 72 2 78
O 72 2 79
P 56 2 80
Q 72 3 81
R 67 2 82
S 56 2 83
T 61 2 84
U 72 2 85
V 72 2 86
W 94 2 87
X 72 2 88
Y 72 2 89
Z 61 2 90
[ 33 3 91
] 33 3 93
` 33 2 96
a 44 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 33 2 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 78 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 39 0 115
t 28 2 116
u 50 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 44 0 122
ct 50 3 162
fi 56 2 174
fl 56 2 175
ff 60 2 1
Fi 84 2 1
Fl 84 2 1
dg 50 3 178
bu 35 0 183
de 33 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
sq 50 2 1
`` 44 2 170
'' 44 2 186
0707070014230362321006440057030057030000011044300522627502500002400000004600post.src/devopost/S # Symbol
name S
internalname 33
special
charset
bx 50 2 1
ci 75 0 1
sq 50 2 1
~= 55 0 1
L1 110 1 2
LA 110 1 2
LV 110 3 2
LH 210 1 2
Lb "
lh 100 0 2
rh 100 0 2
--- 25 0 32
--- 33 2 33
fa 71 2 34
--- 50 2 35
te 55 2 36
--- 83 2 37
--- 78 2 38
--- 44 0 39
--- 33 3 40
--- 33 3 41
** 50 0 42
pl 55 0 43
--- 25 1 44
mi 55 0 45
--- 25 0 46
--- 28 2 47
--- 50 2 48
--- 50 2 49
--- 50 2 50
--- 50 2 51
--- 50 2 52
--- 50 2 53
--- 50 2 54
--- 50 2 55
--- 50 2 56
--- 50 2 57
--- 28 0 58
--- 28 1 59
< 55 0 60
eq 55 0 61
> 55 0 62
--- 44 2 63
*A 72 2 65
*B 67 2 66
*X 72 2 67
*D 61 2 68
*E 61 2 69
*F 76 2 70
*G 60 2 71
*Y 72 2 72
*I 33 2 73
--- 63 2 74
*K 72 2 75
*L 69 2 76
*M 89 2 77
*N 72 2 78
*O 72 2 79
*P 77 2 80
*H 74 2 81
*R 56 2 82
*S 59 2 83
*T 61 2 84
*U 69 2 85
--- 44 1 86
ts 44 1 86
*W 77 2 87
*C 65 2 88
*Q 80 2 89
*Z 61 2 90
--- 33 3 91
--- 86 0 92
--- 33 3 93
--- 66 2 94
ul 50 1 95
_ "
rn 50 2 96
*a 63 0 97
*b 55 3 98
*x 55 1 99
*d 49 2 100
*e 44 0 101
*f 52 3 102
*g 41 1 103
*y 60 1 104
*i 33 0 105
--- 60 1 106
*k 55 0 107
*l 55 2 108
*m 58 1 109
*n 52 0 110
*o 55 0 111
*p 55 0 112
*h 52 2 113
*r 55 1 114
*s 60 0 115
*t 44 0 116
*u 58 0 117
--- 71 2 118
*w 69 0 119
*c 49 3 120
*q 69 1 121
*z 49 3 122
{ 48 3 123
or 20 3 124
} 48 3 125
ap 55 0 126
--- 62 2 161
fm 25 2 162
<= 55 2 163
sl 17 2 164
if 73 0 165
--- 50 3 166
--- 75 0 167
--- 75 0 168
--- 75 0 169
--- 75 0 170
--- 104 0 171
<- 99 0 172
ua 60 2 173
-> 99 0 174
da 60 2 175
de 40 2 176
+- 55 2 177
--- 41 2 178
>= 55 2 179
mu 55 0 180
pt 71 0 181
pd 49 2 182
bu 46 0 183
di 55 0 184
!= 55 0 185
== 55 0 186
~~ 55 0 187
--- 100 0 188
--- 60 3 189
--- 100 0 190
--- 66 2 191
al 82 2 192
--- 69 2 193
--- 80 2 194
--- 99 3 195
Ox 77 2 196
O+ 77 2 197
es 82 2 198
ca 77 0 199
cu 77 0 200
sp 71 0 201
ip 71 1 202
--- 71 0 203
sb 71 0 204
ib 71 1 205
mo 71 0 206
--- 71 0 207
--- 77 2 208
gr 71 2 209
rg 79 2 210
co 79 2 211
tm 89 2 212
--- 82 2 213
sr 55 2 214
--- 25 0 215
no 71 0 216
^ 60 0 217
or 60 0 218
--- 104 0 219
--- 99 0 220
--- 60 2 221
--- 99 0 222
--- 60 2 223
--- 49 2 224
--- 33 3 225
--- 79 2 226
--- 79 2 227
--- 79 2 228
--- 71 2 229
--- 38 3 230
br 0 3 231
--- 38 3 232
lc 50 2 233
vr 0 2 234
lf 50 2 235
lt 49 2 236
lk 49 2 237
lb 49 2 238
bv 49 2 239
--- 25 0 240
--- 33 3 241
is 50 3 242
--- 69 2 243
--- 69 2 244
--- 69 2 245
--- 38 3 246
--- 38 2 247
--- 38 3 248
rc 38 2 249
| 50 3 250
rf 38 2 251
rt 49 2 252
rk 49 2 253
rb 49 2 254
0707070014230362331006440057030057030000011042570522627502500002500000000530post.src/devopost/S1 # Times-Roman special font
name S1
internalname 1
special
charset
" 41 2 34
# 50 2 35
< 56 0 60
> 56 0 62
@ 92 3 64
\ 28 2 92
or 20 2 124
^ 33 2 195
~ 33 2 196
\' 33 2 194
aa "
\` 33 2 193
ga "
ru 50 0 95
\- 65 0 177
en "
sc 50 3 167
dg 50 3 178
dd 50 3 179
ct 50 3 162
14 75 2 1
34 75 2 1
12 75 2 1
Sl 50 2 1
ob 38 0 1
`` 44 2 170
'' 44 2 186
0707070014230362341006440057030057030000011044330522627502500002500000004145post.src/devopost/ZD # ZapfDingbats
name ZD
internalname 36
ligatures fi fl 0
charset
! 97 2 33
" 96 2 34
# 97 2 35
$ 98 3 36
% 72 2 37
& 79 3 38
' 79 3 39
( 79 3 40
) 69 2 41
* 96 2 42
+ 94 2 43
, 55 3 44
- 86 2 45
. 91 2 46
/ 93 2 47
0 91 2 48
1 94 2 49
2 97 2 50
3 76 3 51
4 85 3 52
5 76 2 53
6 76 2 54
7 57 3 55
8 68 3 56
9 76 2 57
: 76 2 58
; 76 2 59
< 75 3 60
= 49 2 61
> 55 2 62
? 54 3 63
@ 58 2 64
A 69 3 65
B 79 3 66
C 79 3 67
D 79 3 68
E 79 3 69
F 79 3 70
G 79 3 71
H 82 3 72
I 82 3 73
J 79 3 74
K 84 3 75
L 82 3 76
M 83 3 77
N 82 3 78
O 83 3 79
P 92 3 80
Q 74 2 81
R 72 2 82
S 75 2 83
T 79 3 84
U 79 3 85
V 69 3 86
W 78 3 87
X 77 3 88
Y 79 3 89
Z 76 2 90
[ 71 3 91
\ 71 3 92
] 68 3 93
^ 70 3 94
_ 83 3 95
` 81 3 96
a 79 3 97
b 79 3 98
c 71 3 99
d 69 2 100
e 70 2 101
f 69 2 102
g 79 3 103
h 79 3 104
i 71 3 105
j 79 3 106
k 78 3 107
l 79 3 108
m 87 3 109
n 76 2 110
o 76 2 111
p 76 2 112
q 76 3 113
r 76 3 114
s 89 2 115
t 89 3 116
u 79 3 117
v 78 3 118
w 44 3 119
x 14 2 120
y 28 2 121
z 41 2 122
{ 39 2 123
| 39 2 124
} 67 2 125
~ 67 2 126
hy 73 3 161
em 54 3 162
de 54 3 163
\- 91 2 164
en 67 3 165
ff 76 3 166
fi 76 2 167
fl 78 2 168
Fi 60 3 169
Fl 69 3 170
fm 63 3 171
ru 79 3 172
dg 79 3 173
bu 79 3 174
14 79 3 175
34 79 3 176
12 79 3 177
ct 79 3 178
rg 79 3 179
sq 79 3 180
sl 79 3 181
ul 79 3 182
or 79 3 183
no 79 3 184
-> 79 3 185
<- 79 3 186
da 79 3 187
lh 79 3 188
ua 79 3 189
\e 79 3 190
\' 79 3 191
aa 79 3 192
\` 79 3 193
ga 79 3 194
pl 79 3 195
mi 79 3 196
mu 79 3 197
di 79 3 198
eq 79 3 199
== 79 3 200
>= 79 3 201
<= 79 3 202
!= 79 3 203
+- 79 3 204
-+ 79 3 205
ap 79 3 206
~= 79 3 207
gr 79 3 208
is 79 3 209
pd 79 3 210
if 79 3 211
sr 89 2 212
rn 84 2 213
sb 102 2 214
sp 46 3 215
cu 75 2 216
ca 92 2 217
ib 75 2 218
ip 92 2 219
mo 93 2 220
es 93 2 221
sc 93 2 222
dd 83 2 223
lc 87 2 224
rc 83 2 225
lf 92 2 226
rf 92 2 227
bv 92 2 228
** 93 2 229
br 93 2 230
ci 46 3 231
ts 88 2 232
co 84 2 233
lt 84 2 234
rt 87 2 235
lb 87 2 236
rb 70 2 237
lk 70 2 238
rk 87 2 239
rh 87 2 241
tm 76 2 242
Sl 95 2 243
ps 77 2 244
cs 86 2 245
cy 77 2 246
as 89 3 247
os 97 2 248
=. 89 3 249
ld 83 2 250
rd 87 2 251
le 93 2 252
ge 97 2 253
pp 92 2 254
0707070014230362351006440057030057030000011044360522627502500002500000002051post.src/devopost/ZI # ZapfChancery-MediumItalic
name ZI
internalname 37
ligatures fi fl 0
charset
! 28 2 33
$ 44 3 36
% 68 2 37
& 78 2 38
' 24 2 39
( 26 3 40
) 22 3 41
* 42 2 42
+ 52 0 43
, 22 0 44
hy 28 0 45
- "
. 22 0 46
/ 34 3 47
0 44 2 48
1 44 2 49
2 44 2 50
3 44 2 51
4 44 2 52
5 44 2 53
6 44 2 54
7 44 2 55
8 44 2 56
9 44 2 57
: 26 0 58
; 24 0 59
= 52 0 61
? 38 2 63
A 62 2 65
B 60 2 66
C 52 2 67
D 70 2 68
E 62 2 69
F 58 2 70
G 62 3 71
H 68 2 72
I 38 2 73
J 40 2 74
K 66 3 75
L 58 2 76
M 84 2 77
N 70 3 78
O 60 2 79
P 54 2 80
Q 60 3 81
R 60 3 82
S 46 2 83
T 50 2 84
U 74 2 85
V 64 2 86
W 88 2 87
X 56 2 88
Y 56 3 89
Z 62 2 90
[ 24 3 91
] 32 3 93
` 24 2 96
a 42 0 97
b 42 2 98
c 34 0 99
d 44 2 100
e 34 0 101
f 32 3 102
g 40 1 103
h 44 2 104
i 24 2 105
j 22 3 106
k 44 3 107
l 24 2 108
m 62 0 109
n 46 0 110
o 40 0 111
p 44 1 112
q 40 3 113
r 30 0 114
s 32 0 115
t 32 2 116
u 46 0 117
v 44 0 118
w 68 0 119
x 42 1 120
y 40 1 121
z 44 0 122
ct 44 2 162
fi 52 3 174
fl 52 3 175
dg 46 3 178
bu 60 2 183
de 30 2 202
em 100 0 208
14 75 2 1
34 75 2 1
12 75 2 1
`` 34 2 170
'' 36 2 186
0707070014230642310407550057030057030000021707770522627502700003200000000000post.src/devopost/charlib 0707070014230642321006440057030057030000011704730522627502500003500000000421post.src/devopost/charlib/12 /build_12 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(1) show
rmoveto
optsize R f
(\244) show
f
(2) show
optsize ofont f
} def
0707070014230642331006440057030057030000011704740522627502500003500000000421post.src/devopost/charlib/14 /build_14 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(1) show
rmoveto
optsize R f
(\244) show
f
(4) show
optsize ofont f
} def
0707070014230642341006440057030057030000011704750522627502600003500000000421post.src/devopost/charlib/34 /build_34 {
pop
/optsize ptsize def
/osize size def
/ofont font def
optsize 2 div dup R exch R f
0 size 2 mul 3 div dup neg exch 0 exch rmoveto
(3) show
rmoveto
optsize R f
(\244) show
f
(4) show
optsize ofont f
} def
0707070014230642351006440057030057030000011710100522627502600005000000004542post.src/devopost/charlib/BRACKETS_NOTE
lc, rc, lf, and rf contain PostScript code that can be used to build the top
and bottom bracket pieces used by eqn. The files are only used if the character
code field in the S font file for lc, rc, lf, and rf is set to 1. A code larger
than 32 means a character from Adobe's Symbol font will be used. Think the real
solution is to change eqn so large brackets and braces are built differently.
There were some serious collisions with eqn's bracket building algorithm and
Adobe's Symbol font. eqn extends all the pieces with the \(bv character, while
the bracket and brace pieces available in Adobe's Symbol are all quite different
and are designed to work with their own extenders. The reference points are
different, but worse still the thickness of brackets and braces don't match.
Anyway using a single extender (the way eqn does) can't ever work with the
bracket and brace characters available in Adobe's Symbol font.
The lc, rc, lf, and rf files are a very complicated attempt to get around the
problem. Each builds the troff character by using the \(bv character from the
Symbol font and then draws a small horizontal line at either the top or bottom
of the \(bv. Using \(bv for the vertical part guarantees things will stack
properly, but getting to the precise top or bottom of the \(bv (down to the
pixel level on all devices and in all sizes) proved to be very difficult. In
fact you would think that determining the bounding box of \(bv would be enough
to let you draw a good bracket piece that matched up nicely with the extender.
Not quite, at least I didn't find that it was possible to do a good job drawing
the pieces from the \(bv bounding box. Think roundoff errors introduced by the
CTM caused the trouble, although I expect there's more to it.
Clipping a rectangular region 2 pixels smaller in height than the bounding box
of the \(bv character, and using the corners of that box to locate the top and
bottom of the bv for the horizontal extender solved the problems I originally
had with the precise placement of the horizontal rule. Anyway that's what the
clipping and idtransform are for. The initgraphics stuff is an attempt to fit
a tight bounding box around the \(bv character independent of the rotation of
our coordinate system. pathbbox only returns what we want if the coordinate
system has been rotated by a multiple of 90 degrees.
0707070014230642361006440057030057030000011704760522627502600003500000000075post.src/devopost/charlib/Fi /build_Fi {
pop
size .05 mul neg 0 (ffi) ashow
} def
0707070014230642371006440057030057030000011704770522627502600003500000000075post.src/devopost/charlib/Fl /build_Fl {
pop
size .05 mul neg 0 (ffl) ashow
} def
0707070014230642401006440057030057030000011710130522627502600003500000000402post.src/devopost/charlib/L1 /build_L1 {
pop
/picstr 40 string def
gsave
currentpoint translate
.533 72 mul size mul 36 div
.5 72 mul size mul 36 div
scale
160 150 1 [160 0 0 -150 0 150]
{currentfile picstr readhexstring pop} image
grestore
} def
0707070014230642411006440057030057030000011710300522627502600004100000014006post.src/devopost/charlib/L1.map FFFFFFFFFFFFFFFFFF0007FFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF00000007FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFE0000000007FFFFFFFFFFFFFFF
FFFFFFFFFFFFFF00000000000FFFFFFFFFFFFFFF
FFFFFFFFFFFFF8000000000001FFFFFFFFFFFFFF
FFFFFFFFFFFFE00000000000003FFFFFFFFFFFFF
FFFFFFFFFFFF000000000000000FFFFFFFFFFFFF
FFFFFFFFFFFC0000000000000003FFFFFFFFFFFF
FFFFFFFFFFF000000000000000007FFFFFFFFFFF
FFFFFFFFFFC000000000000000003FFFFFFFFFFF
FFFFFFFFFF8FFFFFFF00000000000FFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFF0000000007FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFF
FFFFFFFFFFFFFFFFFFFFC00000000003FFFFFFFF
FFFFFFF81FFFFFFFFFC0000000000001FFFFFFFF
FFFFFFF0000000000000000000000000FFFFFFFF
FFFFFFE00000000000000000000000007FFFFFFF
FFFFFFC00000000000000000000000003FFFFFFF
FFFFFF800000000000000000000000001FFFFFFF
FFFFFF000000000000000000000000000FFFFFFF
FFFFFE0007FFFFFFFF8000000000000007FFFFFF
FFFFFE7FFFFFFFFFFFFFFE000000000003FFFFFF
FFFFFFFFFFFFFFFFFFFFFFFF0000000003FFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFE000000001FFFFF
FFFFFFFFFFFFFFFFFFFFFFFF80000000001FFFFF
FFFF01FFFFFFFFFFFFFFFFC000000000000FFFFF
FFFE00000000000000000000000000000007FFFF
FFFE00000000000000000000000000000007FFFF
FFFC00000000000000000000000000000003FFFF
FFFC00000000000000000000000000000003FFFF
FFF800000000000000000000000000000001FFFF
FFF800000000000000000000000000000000FFFF
FFF80FFFFFFFFFFFFFFFFFE0000000000000FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFE0000000000FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFC00000001FFF
FFFFFFFFFFFFFFFFFFFFFFFFFFC0000000001FFF
FF87FFFFFFFFFFFFFFFFFFFFC000000000000FFF
FF000000007FFFFFFFFFFC000000000000000FFF
FF000000000000000000000000000000000007FF
FF000000000000000000000000000000000007FF
FE000000000000000000000000000000000007FF
FE000000000000000000000000000000000003FF
FE000000000000000000000000000000000003FF
FE0007FFFFFFFFFFFFFFFFC000000000000003FF
FC0FFFFFFFFFFFFFFFFFFFFFFC000000000003FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFC000000003FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00000001FF
FFFFFFFFFFFFFFFFFFFFFFFFFF800000000001FF
F8FFFFFFFFFFFFFFFFFFFFFF80000000000000FF
F8000FFFFFFFFFFFFFFFFF0000000000000000FF
F8000000000000000000000000000000000000FF
F0000000000000000000000000000000000000FF
F0000000000000000000000000000000000000FF
F0000000000000000000000000000000000000FF
F00000000000000000000000000000000000007F
F00000007FFFFFFFFFFFE000000000000000007F
F000FFFFFFFFFFFFFFFFFFFF000000000000007F
F07FFFFFFFFFFFFFFFFFFFFFFFC000000000007F
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000007F
F007FFFFFFFFFFFFFFFFFFFC000000000000007F
F00003FFFFFFFFFFFFFFF000000000000000007F
F00000000000000000000000000000000000007F
F00000000000000000000000000000000000007F
F0000000000000000000000000000000000000FF
F0000000000000000000000000000000000000FF
F8000000000000000000000000000000000000FF
F8000000000000000000000000000000000000FF
F80003FFFFFFFFFFFFFFF80000000000000000FF
F80FFFFFFFFFFFFFFFFFFFFFC0000000000000FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFE00000000000003FF
FC003FFFFFFFFFFFFFFE000000000000000003FF
FE000000FFFFFFFFC800000000000000000003FF
FE000000000000000000000000000000000003FF
FE000000000000000000000000000000000003FF
FE000000000000000000000000000000000003FF
FF000000000000000000000000000000000007FF
FF000000000000000000000000000000000007FF
FF000000000000000000000000000000000007FF
FF80000000000000000000000000000000000FFF
FF8000000007FF80000000000000000000000FFF
FFC00007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFC07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFF03FFFFFFFFFFFFFFFC0000000000000007FFF
FFF0000007FFFFFE000000000000000000007FFF
FFF800000000000000000000000000000000FFFF
FFF800000000000000000000000000000000FFFF
FFF800000000000000000000000000000000FFFF
FFFC00000000000000000000000000000001FFFF
FFFE00000000000000000000000000000003FFFF
FFFE00000000000000000000000000000003FFFF
FFFF00000000000000000000000000000007FFFF
FFFF0000000000000000000000000000000FFFFF
FFFF8000000000000000000000000000000FFFFF
FFFFC000003FFFE00000000000000000001FFFFF
FFFFE007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFC0000000000000000000000000001FFFFFF
FFFFFE0000000000000000000000000003FFFFFF
FFFFFF0000000000000000000000000003FFFFFF
FFFFFF0000000000000000000000000007FFFFFF
FFFFFF800000000000000000000000000FFFFFFF
FFFFFFC00000000000000000000000001FFFFFFF
FFFFFFE00000000000000000000000003FFFFFFF
FFFFFFF00000000000000000000000007FFFFFFF
FFFFFFFC000000000000000000000000FFFFFFFF
FFFFFFFE000000000000000000000003FFFFFFFF
FFFFFFFF000000000000000000000007FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00000000000000000003FFFFFFFFFF
FFFFFFFFFF8000000000000000000FFFFFFFFFFF
FFFFFFFFFFE000000000000000001FFFFFFFFFFF
FFFFFFFFFFF000000000000000007FFFFFFFFFFF
FFFFFFFFFFFC0000000000000001FFFFFFFFFFFF
FFFFFFFFFFFF0000000000000007FFFFFFFFFFFF
FFFFFFFFFFFFE00000000000003FFFFFFFFFFFFF
FFFFFFFFFFFFF8000000000000FFFFFFFFFFFFFF
FFFFFFFFFFFFFF000000000007FFFFFFFFFFFFFF
FFFFFFFFFFFFFFF0000000007FFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF00000007FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFE0007FFFFFFFFFFFFFFFFFF
0707070014230642421006440057030057030000011710370522627502600003500000000024post.src/devopost/charlib/LH /build_LH {pop} def
0707070014230642431006440057030057030000011710500522627502600004100000017112post.src/devopost/charlib/LH.map gsave
/M {moveto} def
/L {lineto} def
currentpoint translate
0 360 translate
2.4 2.4 scale
ptsize 36 div dup neg scale
68 1 M
68 1 L
60 2 L
55 3 L
52 4 L
49 5 L
47 6 L
44 7 L
42 8 L
40 9 L
38 10 L
37 11 L
39 11 L
53 10 L
68 11 L
76 12 L
112 12 L
111 11 L
109 10 L
108 9 L
105 8 L
103 7 L
101 6 L
98 5 L
95 4 L
92 3 L
88 2 L
80 1 L
closepath
84 17 M
84 17 L
78 18 L
70 19 L
50 20 L
30 19 L
25 19 L
24 20 L
23 21 L
22 22 L
21 23 L
20 24 L
19 25 L
19 26 L
20 26 L
32 25 L
50 24 L
69 25 L
83 26 L
92 27 L
129 27 L
129 26 L
128 25 L
127 24 L
126 23 L
125 22 L
124 21 L
123 20 L
122 19 L
121 18 L
119 17 L
closepath
99 32 M
99 32 L
93 33 L
86 34 L
52 35 L
18 34 L
12 34 L
11 35 L
11 36 L
10 37 L
10 38 L
9 39 L
9 40 L
9 41 L
15 41 L
51 40 L
87 41 L
99 42 L
139 42 L
139 41 L
139 40 L
138 39 L
137 38 L
137 37 L
136 36 L
136 35 L
135 34 L
134 33 L
134 32 L
closepath
110 47 M
110 47 L
102 48 L
94 49 L
82 50 L
59 51 L
36 50 L
8 49 L
5 49 L
4 50 L
4 51 L
4 52 L
3 53 L
3 54 L
3 55 L
3 56 L
2 57 L
7 57 L
16 56 L
51 55 L
86 56 L
98 57 L
110 58 L
145 58 L
145 57 L
145 56 L
145 55 L
145 54 L
144 53 L
144 52 L
144 51 L
143 50 L
143 49 L
142 48 L
142 47 L
closepath
178 49 M
178 49 L
178 50 L
177 51 L
177 52 L
177 53 L
176 54 L
176 55 L
176 56 L
175 57 L
175 58 L
175 59 L
174 60 L
174 61 L
174 62 L
173 63 L
173 64 L
173 65 L
172 66 L
172 67 L
172 68 L
171 69 L
171 70 L
171 71 L
170 72 L
170 73 L
170 74 L
169 75 L
169 76 L
169 77 L
168 78 L
168 79 L
168 80 L
167 81 L
167 82 L
167 83 L
166 84 L
166 85 L
166 86 L
165 87 L
165 88 L
165 89 L
164 90 L
164 91 L
164 92 L
163 93 L
163 94 L
163 95 L
162 96 L
162 97 L
162 98 L
161 99 L
161 100 L
161 101 L
160 102 L
174 102 L
174 101 L
175 100 L
175 99 L
175 98 L
176 97 L
176 96 L
176 95 L
177 94 L
185 93 L
194 94 L
194 95 L
195 96 L
195 97 L
195 98 L
195 99 L
196 100 L
196 101 L
196 102 L
210 102 L
209 101 L
209 100 L
209 99 L
208 98 L
208 97 L
208 96 L
208 95 L
207 94 L
207 93 L
207 92 L
206 91 L
206 90 L
206 89 L
205 88 L
205 87 L
205 86 L
204 85 L
204 84 L
204 83 L
203 82 L
203 81 L
203 80 L
202 79 L
202 78 L
202 77 L
202 76 L
201 75 L
201 74 L
201 73 L
200 72 L
200 71 L
200 70 L
199 69 L
199 68 L
199 67 L
198 66 L
198 65 L
198 64 L
197 63 L
197 62 L
197 61 L
197 60 L
196 59 L
196 58 L
196 57 L
195 56 L
195 55 L
195 54 L
194 53 L
194 52 L
194 51 L
193 50 L
193 49 L
closepath
200 49 M
200 49 L
200 50 L
200 51 L
200 52 L
200 53 L
200 54 L
200 55 L
200 56 L
200 57 L
200 58 L
200 59 L
200 60 L
214 61 L
214 62 L
214 63 L
214 64 L
214 65 L
214 66 L
214 67 L
214 68 L
214 69 L
214 70 L
214 71 L
214 72 L
214 73 L
214 74 L
214 75 L
214 76 L
214 77 L
214 78 L
214 79 L
214 80 L
214 81 L
214 82 L
214 83 L
214 84 L
214 85 L
214 86 L
214 87 L
214 88 L
214 89 L
214 90 L
214 91 L
214 92 L
214 93 L
214 94 L
214 95 L
214 96 L
214 97 L
214 98 L
214 99 L
214 100 L
214 101 L
214 102 L
228 102 L
228 101 L
228 100 L
228 99 L
228 98 L
228 97 L
228 96 L
228 95 L
228 94 L
228 93 L
228 92 L
228 91 L
228 90 L
228 89 L
228 88 L
228 87 L
228 86 L
228 85 L
228 84 L
228 83 L
228 82 L
228 81 L
228 80 L
228 79 L
228 78 L
228 77 L
228 76 L
228 75 L
228 74 L
228 73 L
228 72 L
228 71 L
228 70 L
228 69 L
228 68 L
228 67 L
228 66 L
228 65 L
228 64 L
228 63 L
228 62 L
228 61 L
241 60 L
241 59 L
241 58 L
241 57 L
241 56 L
241 55 L
241 54 L
241 53 L
241 52 L
241 51 L
241 50 L
241 49 L
closepath
266 49 M
266 49 L
266 50 L
266 51 L
266 52 L
266 53 L
266 54 L
266 55 L
266 56 L
266 57 L
266 58 L
266 59 L
266 60 L
280 61 L
280 62 L
280 63 L
280 64 L
280 65 L
280 66 L
280 67 L
280 68 L
280 69 L
280 70 L
280 71 L
280 72 L
280 73 L
280 74 L
280 75 L
280 76 L
280 77 L
280 78 L
280 79 L
280 80 L
280 81 L
280 82 L
280 83 L
280 84 L
280 85 L
280 86 L
280 87 L
280 88 L
280 89 L
280 90 L
280 91 L
280 92 L
280 93 L
280 94 L
280 95 L
280 96 L
280 97 L
280 98 L
280 99 L
280 100 L
280 101 L
280 102 L
294 102 L
294 101 L
294 100 L
294 99 L
294 98 L
294 97 L
294 96 L
294 95 L
294 94 L
294 93 L
294 92 L
294 91 L
294 90 L
294 89 L
294 88 L
294 87 L
294 86 L
294 85 L
294 84 L
294 83 L
294 82 L
294 81 L
294 80 L
294 79 L
294 78 L
294 77 L
294 76 L
294 75 L
294 74 L
294 73 L
294 72 L
294 71 L
294 70 L
294 69 L
294 68 L
294 67 L
294 66 L
294 65 L
294 64 L
294 63 L
294 62 L
294 61 L
308 60 L
308 59 L
308 58 L
308 57 L
308 56 L
308 55 L
308 54 L
308 53 L
308 52 L
308 51 L
308 50 L
308 49 L
closepath
251 59 M
251 59 L
245 60 L
243 61 L
241 62 L
240 63 L
239 64 L
239 65 L
238 66 L
238 67 L
237 68 L
237 69 L
237 70 L
237 71 L
237 72 L
238 73 L
238 74 L
238 75 L
239 76 L
239 77 L
240 78 L
239 79 L
238 80 L
237 81 L
237 82 L
237 83 L
236 84 L
236 85 L
235 86 L
235 87 L
235 88 L
235 89 L
235 90 L
235 91 L
235 92 L
236 93 L
236 94 L
237 95 L
237 96 L
238 97 L
239 98 L
240 99 L
241 100 L
243 101 L
245 102 L
249 103 L
259 103 L
262 102 L
265 101 L
267 100 L
270 101 L
272 102 L
276 102 L
276 101 L
276 100 L
276 99 L
276 98 L
276 97 L
276 96 L
276 95 L
276 94 L
276 93 L
273 92 L
273 91 L
274 90 L
274 89 L
274 88 L
274 87 L
274 86 L
274 85 L
274 84 L
274 83 L
274 82 L
274 81 L
274 80 L
274 79 L
274 78 L
274 77 L
274 76 L
264 75 L
264 74 L
264 73 L
264 72 L
264 71 L
264 70 L
264 69 L
264 68 L
264 67 L
263 66 L
263 65 L
263 64 L
262 63 L
261 62 L
260 61 L
258 60 L
253 59 L
closepath
114 62 M
114 62 L
101 63 L
93 64 L
84 65 L
49 66 L
15 65 L
3 64 L
1 64 L
1 65 L
1 66 L
0 67 L
0 68 L
0 69 L
0 70 L
0 71 L
0 72 L
0 73 L
4 73 L
11 72 L
28 71 L
53 70 L
79 71 L
92 72 L
102 73 L
148 73 L
148 72 L
148 71 L
148 70 L
147 69 L
147 68 L
147 67 L
147 66 L
147 65 L
147 64 L
146 63 L
146 62 L
closepath
185 68 M
185 68 L
186 67 L
187 68 L
187 69 L
187 70 L
188 71 L
188 72 L
188 73 L
188 74 L
189 75 L
189 76 L
189 77 L
189 78 L
190 79 L
190 80 L
190 81 L
185 82 L
181 81 L
181 80 L
181 79 L
182 78 L
182 77 L
182 76 L
183 75 L
183 74 L
183 73 L
184 72 L
184 71 L
184 70 L
184 69 L
closepath
250 68 M
250 68 L
251 67 L
253 68 L
254 69 L
254 70 L
254 71 L
254 72 L
254 73 L
254 74 L
254 75 L
252 76 L
251 75 L
250 74 L
249 73 L
249 72 L
249 71 L
249 70 L
249 69 L
closepath
254 77 M
254 77 L
259 76 L
264 77 L
264 78 L
264 79 L
264 80 L
264 81 L
264 82 L
264 83 L
264 84 L
263 85 L
262 84 L
261 83 L
260 82 L
258 81 L
257 80 L
256 79 L
255 78 L
closepath
100 78 M
100 78 L
90 79 L
80 80 L
48 81 L
17 80 L
8 79 L
0 79 L
0 80 L
0 81 L
0 82 L
0 83 L
0 84 L
1 85 L
1 86 L
1 87 L
1 88 L
7 88 L
17 87 L
49 86 L
81 87 L
94 88 L
147 88 L
147 87 L
147 86 L
147 85 L
147 84 L
147 83 L
148 82 L
148 81 L
148 80 L
148 79 L
148 78 L
closepath
246 86 M
246 86 L
247 85 L
249 86 L
250 87 L
252 88 L
253 89 L
254 90 L
255 91 L
255 92 L
252 93 L
250 92 L
248 91 L
247 90 L
247 89 L
246 88 L
246 87 L
closepath
91 93 M
91 93 L
75 94 L
65 95 L
64 96 L
63 95 L
62 95 L
44 96 L
27 95 L
13 94 L
2 94 L
3 95 L
3 96 L
3 97 L
3 98 L
4 99 L
4 100 L
4 101 L
5 102 L
5 103 L
6 104 L
6 105 L
12 105 L
24 104 L
40 103 L
46 102 L
53 103 L
143 103 L
143 102 L
144 101 L
144 100 L
144 99 L
145 98 L
145 97 L
145 96 L
145 95 L
145 94 L
145 93 L
closepath
8 108 M
8 108 L
8 109 L
9 110 L
9 111 L
9 112 L
10 113 L
11 114 L
11 115 L
12 116 L
12 117 L
13 118 L
14 119 L
15 120 L
24 120 L
37 119 L
46 118 L
55 119 L
134 119 L
135 118 L
135 117 L
136 116 L
137 115 L
137 114 L
138 113 L
139 112 L
139 111 L
139 110 L
140 109 L
140 108 L
78 108 L
59 109 L
45 110 L
32 109 L
13 108 L
closepath
18 124 M
18 124 L
19 125 L
20 126 L
20 127 L
21 128 L
22 129 L
23 130 L
24 131 L
26 132 L
27 133 L
28 134 L
120 134 L
121 133 L
123 132 L
124 131 L
125 130 L
126 129 L
127 128 L
128 127 L
129 126 L
129 125 L
130 124 L
closepath
36 139 M
36 139 L
37 140 L
39 141 L
40 142 L
42 143 L
44 144 L
47 145 L
49 146 L
52 147 L
56 148 L
60 149 L
67 150 L
80 150 L
88 149 L
92 148 L
96 147 L
99 146 L
101 145 L
104 144 L
106 143 L
108 142 L
110 141 L
111 140 L
113 139 L
closepath
fill
grestore
0707070014230642441006440057030057030000011710140522627502600003500000000402post.src/devopost/charlib/Lb /build_Lb {
pop
/picstr 78 string def
gsave
currentpoint translate
1.03 72 mul size mul 36 div
.5 72 mul size mul 36 div
scale
309 150 1 [309 0 0 -150 0 150]
{currentfile picstr readhexstring pop} image
grestore
} def
0707070014230642451006440057030057030000011710700522627502600004100000027112post.src/devopost/charlib/Lb.map FFFFFFFFFFFFFFFFF0007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFF00000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFE0000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFF00000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFF8000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFE00000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFF000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFC0000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFC000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFF8FFFFFFF00000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFF0000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFC00000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFF81FFFFFFFFFC0000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFE00000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFC00000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFF800000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFF000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFE0007FFFFFFFF8000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFE7FFFFFFFFFFFFFFE000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF0000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFE000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF80000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFF01FFFFFFFFFFFFFFFFC000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFE00000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFE00000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFC00000000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFC00000000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF800000000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF800000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF80FFFFFFFFFFFFFFFFFE0000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFE0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFC00000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFC0000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
F87FFFFFFFFFFFFFFFFFFFFC000000000000FFFFFFFFC0003F00000000003FFFFFC00000000007
F000000007FFFFFFFFFFC000000000000000FFFFFFFFC0003F00000000003FFFFFC00000000007
F000000000000000000000000000000000007FFFFFFF80001F00000000003FFFFFC00000000007
F000000000000000000000000000000000007FFFFFFF80001F00000000003FFFFFC00000000007
E000000000000000000000000000000000007FFFFFFF80001F00000000003FFFFFC00000000007
E000000000000000000000000000000000003FFFFFFF00000F00000000003FFFFFC00000000007
E000000000000000000000000000000000003FFFFFFF00000F00000000003FFFFFC00000000007
E0007FFFFFFFFFFFFFFFFC000000000000003FFFFFFF00000F00000000003FFFFFC00000000007
C0FFFFFFFFFFFFFFFFFFFFFFC000000000003FFFFFFE00000700000000003FFFFFC00000000007
FFFFFFFFFFFFFFFFFFFFFFFFFFFC000000003FFFFFFE00000700000000003FFFFFC00000000007
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00000700000000003FE3FFC00000000007
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003000000000038001FC00000000007
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFC0007FFE00007FFFF0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFC00000001FFFFFFC000003FFFC0007FF800003FFFF0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFF800000000001FFFFFF8000003FFFC0007FF000001FFFF0001FFFF
8FFFFFFFFFFFFFFFFFFFFFF80000000000000FFFFFF8000001FFFC0007FE000000FFFF0001FFFF
8000FFFFFFFFFFFFFFFFF0000000000000000FFFFFF8000001FFFC0007FE000000FFFF0001FFFF
8000000000000000000000000000000000000FFFFFF0000001FFFC0007FC000000FFFF0001FFFF
0000000000000000000000000000000000000FFFFFF0000000FFFC0007FC0000007FFF0001FFFF
0000000000000000000000000000000000000FFFFFF0002000FFFC0007F80018007FFF0001FFFF
0000000000000000000000000000000000000FFFFFE0006000FFFC0007F8003C007FFF0001FFFF
00000000000000000000000000000000000007FFFFE00060007FFC0007F8003C007FFF0001FFFF
00000007FFFFFFFFFFFE000000000000000007FFFFE00070007FFC0007F8003C007FFF0001FFFF
000FFFFFFFFFFFFFFFFFFFF000000000000007FFFFC00070007FFC0007F8003C007FFF0001FFFF
07FFFFFFFFFFFFFFFFFFFFFFFC000000000007FFFFC000F0003FFC0007FC003C007FFF0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000F0003FFC0007FC001C007FFF0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000F8003FFC0007FC000C007FFF0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8001F8001FFC0007FE000000001F0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8001F8001FFC0007FE0001FF001F0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFF0000000000007FFFF0001F8001FFC0007FF0000FF001F0001FFFF
007FFFFFFFFFFFFFFFFFFFC000000000000007FFFF0003FC001FFC0007FE00007F001F0001FFFF
00003FFFFFFFFFFFFFFF000000000000000007FFFF0003FC000FFC0007FC00003F001F0001FFFF
00000000000000000000000000000000000007FFFE0003FC000FFC0007F800001F001F0001FFFF
00000000000000000000000000000000000007FFFE000000000FFC0007F8000007001F0001FFFF
0000000000000000000000000000000000000FFFFE0000000007FC0007F8000003001F0001FFFF
0000000000000000000000000000000000000FFFFC0000000007FC0007F0000001001F0001FFFF
8000000000000000000000000000000000000FFFFC0000000007FC0007F0000000001F0001FFFF
8000000000000000000000000000000000000FFFFC0000000003FC0007E0018000001F0001FFFF
80003FFFFFFFFFFFFFFF80000000000000000FFFF80000000003FC0007E001C000001F0001FFFF
80FFFFFFFFFFFFFFFFFFFFFC0000000000000FFFF80000000003FC0007E001F000001F0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000000001FC0007E000F800001F0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000001FC0007E000FC00001F0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000001FC0007E0007E00003F0001FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000FC0007E0001E00003F0001FFFF
FFFFFFFFFFFFFFFFFFFFFFE00000000000003FFFE00000000000FC0007F000000000070001FFFF
C003FFFFFFFFFFFFFFE000000000000000003FFFE0003FFFC000FC0007F000000000070001FFFF
E000000FFFFFFFFC800000000000000000003FFFE0007FFFC0007C0007F800000000070001FFFF
E000000000000000000000000000000000003FFFC0007FFFE0007C0007F800000000070001FFFF
E000000000000000000000000000000000003FFFC0007FFFE0007C0007FC00000000070001FFFF
E000000000000000000000000000000000003FFFC000FFFFE0007C0007FE00000000070001FFFF
F000000000000000000000000000000000007FFF8000FFFFE0003C0007FF00000000070001FFFF
F000000000000000000000000000000000007FFF8000FFFFF0003C0007FF80000000070001FFFF
F000000000000000000000000000000000007FFF8001FFFFF0003C0007FFE000003C070001FFFF
F80000000000000000000000000000000000FFFF0001FFFFF0001C0007FFF80001FF070001FFFF
F8000000007FF80000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF800FFFFFFFFFFFFF
FC00007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FC07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF03FFFFFFFFFFFFFFFC0000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF0000007FFFFFE000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF800000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF800000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF800000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFC00000000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFE00000000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFE00000000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFF00000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFF0000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFF8000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFC000003FFFE00000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFE007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFC0000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFE0000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFF0000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFF0000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFF800000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFC00000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFE00000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFF00000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFC000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFE000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFF000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFF00000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFF8000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFE000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFC0000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFF0000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFE00000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFF8000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFF000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFF0000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFF00000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFE0007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
0707070014230642461006440057030057030000011710150522627502600004100000001173post.src/devopost/charlib/README Postscript definitions for special troff characters. File names are
the two character troff names. Each defines a PostScript procedure
that begins with build_ and ends with the character's name. The
build_?? procedure is called with the character width as it's only
argument. The .map files contain extra character data (e.g. image
data) that dpost downloads immediately after the build_?? call,
if the character's font table code field is 2 (rather than 1).
The following PostScript variables are available:
font current font
ptsize current point size
size actual font size - scaled up from ptsize
Don't overuse this stuff!
0707070014230642471006440057030057030000011710160522627502600003500000002631post.src/devopost/charlib/Sl /build_Sl {
pop
gsave
size .0022 mul dup scale
currentpoint translate
14 93 moveto
14 96 lineto
29 110 lineto
44 121 lineto
54 127 lineto
55 132 lineto
57 146 lineto
59 157 lineto
62 171 lineto
66 186 lineto
70 199 lineto
75 213 lineto
81 228 lineto
88 243 lineto
96 257 lineto
106 272 lineto
118 287 lineto
133 300 lineto
148 307 lineto
163 308 lineto
178 304 lineto
191 293 lineto
197 281 lineto
198 277 lineto
198 260 lineto
194 246 lineto
187 231 lineto
179 217 lineto
168 202 lineto
155 187 lineto
141 172 lineto
126 158 lineto
111 146 lineto
96 136 lineto
94 131 lineto
93 123 lineto
92 112 lineto
91 103 lineto
90 93 lineto
89 81 lineto
89 40 lineto
92 28 lineto
97 18 lineto
108 10 lineto
122 10 lineto
134 18 lineto
145 33 lineto
152 48 lineto
158 62 lineto
168 58 lineto
168 59 lineto
163 45 lineto
157 31 lineto
148 16 lineto
133 3 lineto
118 -1 lineto
103 0 lineto
88 5 lineto
73 18 lineto
64 31 lineto
58 46 lineto
55 59 lineto
53 73 lineto
52 111 lineto
37 101 lineto
22 86 lineto
14 93 lineto
97 152 moveto
97 153 lineto
99 166 lineto
101 178 lineto
103 190 lineto
106 205 lineto
109 218 lineto
113 232 lineto
118 246 lineto
124 261 lineto
132 275 lineto
144 290 lineto
157 298 lineto
171 298 lineto
181 291 lineto
186 283 lineto
187 279 lineto
187 264 lineto
186 260 lineto
181 246 lineto
174 233 lineto
165 218 lineto
155 204 lineto
142 190 lineto
127 175 lineto
112 162 lineto
97 152 lineto
eofill
grestore
} def
0707070014230642501006440057030057030000011711140522627502600003500000000264post.src/devopost/charlib/bx /build_bx {
pop
size 2 div /side exch def
currentpoint
newpath
moveto
0 side rlineto
side 0 rlineto
0 side neg rlineto
closepath
fill
} def
0707070014230642511006440057030057030000011711150522627502600003500000000221post.src/devopost/charlib/ci /build_ci {
pop
size 3 mul 8 div /rad exch def
currentpoint
newpath
rad add exch rad add exch rad 0 360 arc
stroke
} def
0707070014230642521006440057030057030000011711160522627502600003500000000074post.src/devopost/charlib/ff /build_ff {
pop
size .05 mul neg 0 (ff) ashow
} def
0707070014230642531006440057030057030000011711170522627502600003500000001716post.src/devopost/charlib/lc %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_lc {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 0 get bvbbox 1 get moveto
bvbbox 0 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul add dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 3 get moveto
bvbbox 4 get dup dup
8 mul 0 rlineto
0 exch neg rlineto
8 mul neg 0 rlineto
closepath clip eofill
grestore
} def
0707070014230642541006440057030057030000011711300522627502600003500000001712post.src/devopost/charlib/lf %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_lf {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 0 get bvbbox 1 get moveto
bvbbox 0 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul add dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 1 get moveto
bvbbox 4 get dup dup
8 mul 0 rlineto
0 exch rlineto
8 mul neg 0 rlineto
closepath clip eofill
grestore
} def
0707070014230642551006440057030057030000011711310522627502600003500000004412post.src/devopost/charlib/lh /build_lh {
pop
gsave
size .0022 mul dup scale
currentpoint translate
16 177 moveto
16 188 lineto
21 193 lineto
30 193 lineto
34 189 lineto
36 183 lineto
36 180 lineto
34 174 lineto
27 170 lineto
19 172 lineto
16 177 lineto
stroke
38 194 moveto
38 196 lineto
53 199 lineto
68 201 lineto
83 202 lineto
98 203 lineto
113 204 lineto
128 204 lineto
143 205 lineto
158 205 lineto
173 205 lineto
188 204 lineto
203 203 lineto
218 202 lineto
233 200 lineto
248 198 lineto
263 196 lineto
278 194 lineto
293 190 lineto
308 186 lineto
323 181 lineto
338 176 lineto
353 168 lineto
361 162 lineto
364 153 lineto
366 138 lineto
367 126 lineto
368 106 lineto
369 80 lineto
369 74 lineto
368 60 lineto
367 54 lineto
362 43 lineto
348 34 lineto
333 28 lineto
318 25 lineto
303 26 lineto
288 29 lineto
273 31 lineto
258 32 lineto
243 32 lineto
228 30 lineto
213 27 lineto
198 24 lineto
183 23 lineto
168 23 lineto
153 27 lineto
148 34 lineto
148 47 lineto
153 54 lineto
168 58 lineto
183 58 lineto
198 58 lineto
213 59 lineto
226 60 lineto
228 62 lineto
228 67 lineto
223 71 lineto
208 71 lineto
193 70 lineto
178 70 lineto
163 70 lineto
148 70 lineto
133 71 lineto
123 76 lineto
120 84 lineto
120 91 lineto
122 98 lineto
129 104 lineto
144 106 lineto
159 107 lineto
174 107 lineto
189 107 lineto
202 108 lineto
204 110 lineto
204 117 lineto
201 119 lineto
186 119 lineto
171 119 lineto
156 119 lineto
141 119 lineto
126 119 lineto
111 121 lineto
103 128 lineto
101 137 lineto
101 142 lineto
103 150 lineto
111 158 lineto
126 161 lineto
141 161 lineto
156 162 lineto
171 163 lineto
186 163 lineto
191 165 lineto
192 167 lineto
192 171 lineto
190 174 lineto
176 175 lineto
161 175 lineto
146 175 lineto
131 174 lineto
116 174 lineto
101 174 lineto
86 173 lineto
71 172 lineto
56 171 lineto
41 171 lineto
41 174 lineto
43 178 lineto
43 187 lineto
38 194 lineto
stroke
373 169 moveto
373 176 lineto
375 182 lineto
386 190 lineto
401 193 lineto
408 191 lineto
411 185 lineto
412 181 lineto
414 167 lineto
415 158 lineto
416 144 lineto
417 128 lineto
418 110 lineto
418 60 lineto
417 45 lineto
415 37 lineto
409 34 lineto
394 31 lineto
381 35 lineto
379 42 lineto
379 52 lineto
380 67 lineto
380 77 lineto
379 77 lineto
378 106 lineto
377 121 lineto
376 133 lineto
375 147 lineto
374 158 lineto
373 169 lineto
stroke
grestore
} def
0707070014230642561006440057030057030000011711340522627502600003500000000222post.src/devopost/charlib/ob /build_ob {
pop
size 3 mul 16 div /rad exch def
currentpoint
newpath
rad add exch rad add exch rad 0 360 arc
stroke
} def
0707070014230642571006440057030057030000011711350522627502700003500000001716post.src/devopost/charlib/rc %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_rc {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 2 get bvbbox 1 get moveto
bvbbox 2 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul sub dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 3 get moveto
bvbbox 4 get dup dup
8 mul neg 0 rlineto
0 exch neg rlineto
8 mul 0 rlineto
closepath clip eofill
grestore
} def
0707070014230642601006440057030057030000011711360522627502700003500000001712post.src/devopost/charlib/rf %
% This stuff has gotten terribly complicated - sorry.
%
currentdict /bvbbox known not {/bvbbox [0 0 0 0 0 0 0] def} if
/build_rf {
pop
gsave
currentpoint translate newpath
bvbbox 6 get size ne {
gsave
initgraphics
scaling scaling scale
0 0 moveto
(\357) false charpath flattenpath pathbbox 0 0 size bvbbox astore pop
0 1 idtransform dup mul exch dup mul add sqrt dup
bvbbox 1 get add bvbbox 1 3 -1 roll put
bvbbox 3 get exch sub bvbbox 3 3 -1 roll put
bvbbox 2 get bvbbox 0 get sub bvbbox 4 3 -1 roll put
bvbbox 2 get bvbbox 0 get add 2 div bvbbox 5 3 -1 roll put
grestore
} if
bvbbox 2 get bvbbox 1 get moveto
bvbbox 2 get bvbbox 3 get lineto
bvbbox 5 get bvbbox 4 get 8 mul sub dup bvbbox 3 get lineto
bvbbox 1 get lineto closepath clip newpath
0 0 moveto (\357) show
bvbbox 5 get bvbbox 1 get moveto
bvbbox 4 get dup dup
8 mul neg 0 rlineto
0 exch rlineto
8 mul 0 rlineto
closepath clip eofill
grestore
} def
0707070014230642611006440057030057030000011711500522627502700003500000004171post.src/devopost/charlib/rh /build_rh {
pop
gsave
size .0022 mul dup scale
currentpoint translate
15 66 moveto
15 86 lineto
16 131 lineto
17 146 lineto
18 158 lineto
19 167 lineto
21 181 lineto
24 190 lineto
34 193 lineto
49 189 lineto
58 182 lineto
60 177 lineto
60 166 lineto
59 156 lineto
58 143 lineto
57 130 lineto
56 117 lineto
55 102 lineto
54 42 lineto
53 39 lineto
49 35 lineto
34 34 lineto
19 39 lineto
16 47 lineto
15 66 lineto
stroke
65 60 moveto
65 111 lineto
66 127 lineto
67 139 lineto
69 153 lineto
72 163 lineto
83 171 lineto
98 177 lineto
113 182 lineto
128 187 lineto
143 190 lineto
158 194 lineto
173 196 lineto
188 199 lineto
203 201 lineto
218 203 lineto
233 205 lineto
248 205 lineto
263 206 lineto
278 206 lineto
293 206 lineto
308 206 lineto
323 206 lineto
338 205 lineto
353 203 lineto
368 202 lineto
383 200 lineto
394 197 lineto
389 190 lineto
389 180 lineto
391 176 lineto
391 173 lineto
380 173 lineto
365 173 lineto
350 174 lineto
335 175 lineto
320 176 lineto
305 176 lineto
290 176 lineto
275 177 lineto
260 177 lineto
245 177 lineto
240 173 lineto
240 170 lineto
245 165 lineto
260 164 lineto
275 164 lineto
290 164 lineto
305 163 lineto
320 160 lineto
327 155 lineto
330 149 lineto
330 134 lineto
328 129 lineto
323 124 lineto
309 121 lineto
294 121 lineto
279 121 lineto
264 121 lineto
249 121 lineto
234 121 lineto
228 118 lineto
228 112 lineto
234 109 lineto
249 109 lineto
264 109 lineto
279 108 lineto
294 108 lineto
306 104 lineto
311 97 lineto
312 91 lineto
312 88 lineto
311 82 lineto
305 74 lineto
290 72 lineto
275 72 lineto
260 72 lineto
245 73 lineto
230 73 lineto
215 73 lineto
205 70 lineto
205 63 lineto
217 60 lineto
232 60 lineto
247 60 lineto
262 60 lineto
277 57 lineto
283 52 lineto
285 44 lineto
285 41 lineto
284 35 lineto
280 30 lineto
268 26 lineto
253 25 lineto
238 26 lineto
223 28 lineto
208 31 lineto
193 33 lineto
178 34 lineto
163 33 lineto
148 31 lineto
133 28 lineto
118 27 lineto
103 28 lineto
88 34 lineto
73 43 lineto
67 52 lineto
65 60 lineto
stroke
396 180 moveto
396 188 lineto
399 194 lineto
410 196 lineto
416 190 lineto
416 180 lineto
415 177 lineto
411 173 lineto
400 173 lineto
396 180 lineto
stroke
grestore
} def
0707070014230642621006440057030057030000011711370522627502700003500000000320post.src/devopost/charlib/sq /build_sq {
pop
size 2 div /side exch def
currentpoint
newpath
moveto
0 side rlineto
side 0 rlineto
0 side neg rlineto
closepath
font B eq {fill} {stroke} ifelse
} def
0707070014230642631006440057030057030000011711530522627502700003500000000130post.src/devopost/charlib/~= /build_~= {
pop
(\176) stringwidth pop neg size -.15 mul (\176\055) ashow
} def
0707070014230362361006440057030057030000011044500522627502700003600000003013post.src/devopost/devopost.mk MAKE=/bin/make
MAKEFILE=devopost.mk
SYSTEM=SYSV
VERSION=3.3
GROUP=bin
OWNER=bin
FONTDIR=/usr/lib/font
FONTFILES=DESC ? ?? [A-Z]??*
all :
install : all
@rm -fr $(FONTDIR)/devopost/*.out
@if [ ! -d $(FONTDIR) ]; then \
mkdir $(FONTDIR); \
chmod 755 $(FONTDIR); \
chgrp $(GROUP) $(FONTDIR); \
chown $(OWNER) $(FONTDIR); \
fi
@if [ ! -d $(FONTDIR)/devopost ]; then \
mkdir $(FONTDIR)/devopost; \
chmod 755 $(FONTDIR)/devopost; \
chgrp $(GROUP) $(FONTDIR)/devopost; \
chown $(OWNER) $(FONTDIR)/devopost; \
fi
@if [ ! -d $(FONTDIR)/devopost/charlib ]; then \
mkdir $(FONTDIR)/devopost/charlib; \
chmod 755 $(FONTDIR)/devopost/charlib; \
chgrp $(GROUP) $(FONTDIR)/devopost/charlib; \
chown $(OWNER) $(FONTDIR)/devopost/charlib; \
fi
cp $(FONTFILES) $(FONTDIR)/devopost
@for i in $(FONTFILES); do \
chmod 644 $(FONTDIR)/devopost/$$i; \
chgrp $(GROUP) $(FONTDIR)/devopost/$$i; \
chown $(OWNER) $(FONTDIR)/devopost/$$i; \
done
cp charlib/* $(FONTDIR)/devopost/charlib
@for i in charlib/*; do \
chmod 644 $(FONTDIR)/devopost/$$i; \
chgrp $(GROUP) $(FONTDIR)/devopost/$$i; \
chown $(OWNER) $(FONTDIR)/devopost/$$i; \
done
clean :
clobber : clean
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^FONTDIR=.*'FONTDIR=$(FONTDIR)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014231030720407550057030057030000020303470522627503100002500000000000post.src/devpost.add 0707070014231030731006440057030057030000010304460522627502700003000000003356post.src/devpost.add/C1 name C1
fontname CenturyOldStyle-Regular
ligatures fi fl 0
spacewidth 25
charset
! 26 2 33
" 40 2 34
dq "
# 50 2 35
$ 50 3 36
% 58 2 37
& 79 2 38
' 21 2 39
( 40 3 40
) 40 3 41
* 50 2 42
+ 50 0 43
, 25 1 44
hy 24 0 45
- "
. 25 0 46
/ 53 3 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 40 2 63
@ 85 2 64
A 66 2 65
B 69 2 66
C 69 2 67
D 76 2 68
E 66 2 69
F 61 2 70
G 74 2 71
H 76 2 72
I 34 2 73
J 40 3 74
K 71 2 75
L 58 2 76
M 95 2 77
N 76 2 78
O 76 2 79
P 61 2 80
Q 76 3 81
R 63 2 82
S 55 2 83
T 63 2 84
U 74 2 85
V 66 2 86
W 95 2 87
X 63 2 88
Y 63 2 89
Z 58 2 90
[ 40 3 91
\ 25 2 92
bs "
] 40 3 93
--- 50 2 94
--- 50 1 95
` 21 2 96
a 47 0 97
b 55 2 98
c 47 0 99
d 55 2 100
e 50 0 101
f 29 2 102
g 55 1 103
h 58 2 104
i 26 2 105
j 24 3 106
k 55 2 107
l 26 2 108
m 84 0 109
n 55 0 110
o 53 0 111
p 53 1 112
q 55 1 113
r 40 0 114
s 45 0 115
t 31 2 116
u 55 0 117
v 47 0 118
w 71 0 119
x 53 0 120
y 50 1 121
z 45 0 122
{ 40 3 123
--- 25 2 124
} 40 3 125
--- 50 0 126
--- 26 1 161
ct 50 2 162
ps 50 2 163
fr 9 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 21 2 169
`` 40 2 170
--- 47 0 171
--- 29 0 172
--- 29 0 173
fi 58 2 174
fl 55 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 25 0 180
pg 66 3 182
--- 66 0 183
--- 21 1 184
--- 40 1 185
'' 40 2 186
--- 47 0 187
--- 100 0 188
--- 92 2 189
--- 40 1 191
ga 29 2 193
\` "
aa 29 2 194
\' "
^a 37 2 195
^ "
~a 50 2 196
~ "
-a 47 2 197
Ua 50 2 198
.a 26 2 199
:a 47 2 200
oa 34 2 202
,a 34 1 203
"a 40 2 205
Ca 37 1 206
va 37 2 207
em 100 0 208
--- 103 2 225
--- 34 2 227
--- 58 2 232
--- 76 2 233
--- 108 2 234
--- 34 2 235
--- 76 0 241
--- 26 0 245
--- 26 2 248
--- 53 0 249
--- 84 0 250
--- 58 2 251
0707070014231030741006440057030057030000010304600522627502700003000000003355post.src/devpost.add/C2 name C2
fontname CenturyOldStyle-Italic
ligatures fi fl 0
spacewidth 27
charset
! 31 2 33
" 35 2 34
dq "
# 54 0 35
$ 54 3 36
% 70 2 37
& 75 2 38
' 21 2 39
( 46 3 40
) 46 3 41
* 59 2 42
+ 54 0 43
, 27 1 44
hy 25 0 45
- "
. 27 0 46
/ 46 3 47
0 54 2 48
1 54 0 49
2 54 2 50
3 54 2 51
4 54 0 52
5 54 0 53
6 54 2 54
7 54 0 55
8 54 2 56
9 54 2 57
: 27 0 58
; 27 1 59
--- 54 0 60
= 54 0 61
--- 54 0 62
? 48 2 63
@ 78 2 64
A 67 2 65
B 68 2 66
C 65 2 67
D 75 2 68
E 66 2 69
F 61 2 70
G 72 2 71
H 77 2 72
I 36 2 73
J 34 3 74
K 68 2 75
L 58 2 76
M 90 2 77
N 74 2 78
O 74 2 79
P 59 2 80
Q 75 3 81
R 65 2 82
S 57 2 83
T 63 2 84
U 72 2 85
V 62 2 86
W 88 2 87
X 64 2 88
Y 61 2 89
Z 57 2 90
[ 46 3 91
\ 27 2 92
bs "
] 46 3 93
--- 54 2 94
--- 50 1 95
` 21 2 96
a 54 0 97
b 46 2 98
c 41 0 99
d 50 2 100
e 42 0 101
f 25 3 102
g 45 1 103
h 52 2 104
i 31 2 105
j 27 3 106
k 48 2 107
l 27 2 108
m 82 0 109
n 56 0 110
o 47 0 111
p 50 1 112
q 49 1 113
r 40 0 114
s 35 0 115
t 30 0 116
u 56 0 117
v 47 0 118
w 69 0 119
x 41 0 120
y 40 1 121
z 39 0 122
{ 46 3 123
--- 27 2 124
} 46 3 125
--- 54 0 126
--- 31 1 161
ct 54 0 162
ps 54 2 163
fr 5 2 164
yn 54 0 165
fn 54 3 166
sc 59 3 167
cr 54 0 168
--- 19 2 169
`` 37 2 170
--- 45 0 171
--- 29 0 172
--- 29 0 173
fi 52 3 174
fl 52 3 175
en 50 0 177
\- "
dg 59 3 178
dd 59 3 179
--- 27 0 180
pg 61 3 182
--- 61 0 183
--- 21 1 184
--- 37 1 185
'' 37 2 186
--- 45 0 187
--- 100 0 188
--- 103 2 189
--- 48 1 191
ga 39 2 193
\` "
aa 31 2 194
\' "
^a 40 2 195
^ "
~a 51 2 196
~ "
-a 47 0 197
Ua 51 2 198
.a 26 2 199
:a 46 2 200
oa 32 2 202
,a 35 1 203
"a 39 2 205
Ca 34 1 206
va 40 2 207
em 100 0 208
--- 94 2 225
--- 32 2 227
--- 58 2 232
--- 74 2 233
--- 107 2 234
--- 32 2 235
--- 69 0 241
--- 31 0 245
--- 27 2 248
--- 47 0 249
--- 71 0 250
--- 53 2 251
0707070014231030751006440057030057030000010304620522627502700003000000003355post.src/devpost.add/C3 name C3
fontname CenturyOldStyle-Bold
ligatures fi fl 0
spacewidth 33
charset
! 34 2 33
" 40 2 34
dq "
# 56 2 35
$ 66 3 36
% 79 2 37
& 84 2 38
' 28 2 39
( 39 3 40
) 39 3 41
* 56 2 42
+ 56 0 43
, 33 1 44
hy 32 0 45
- "
. 33 0 46
/ 51 3 47
0 66 2 48
1 66 2 49
2 66 2 50
3 66 2 51
4 66 2 52
5 66 2 53
6 66 2 54
7 66 2 55
8 66 2 56
9 66 2 57
: 33 0 58
; 33 1 59
--- 56 0 60
= 56 0 61
--- 56 0 62
? 47 2 63
@ 72 2 64
A 69 2 65
B 76 2 66
C 70 2 67
D 80 2 68
E 71 2 69
F 64 2 70
G 78 2 71
H 83 2 72
I 41 2 73
J 48 2 74
K 76 2 75
L 63 2 76
M 94 2 77
N 80 2 78
O 81 2 79
P 72 2 80
Q 81 3 81
R 72 2 82
S 61 2 83
T 60 2 84
U 78 2 85
V 64 2 86
W 97 2 87
X 68 2 88
Y 67 2 89
Z 59 2 90
[ 39 3 91
\ 28 2 92
bs "
] 39 3 93
--- 56 2 94
--- 50 1 95
` 28 2 96
a 53 0 97
b 60 2 98
c 52 0 99
d 62 2 100
e 54 0 101
f 30 2 102
g 52 3 103
h 62 2 104
i 31 2 105
j 27 3 106
k 60 2 107
l 30 2 108
m 92 0 109
n 62 0 110
o 57 0 111
p 61 1 112
q 60 1 113
r 44 0 114
s 50 0 115
t 33 2 116
u 63 0 117
v 50 0 118
w 74 0 119
x 53 0 120
y 49 1 121
z 44 0 122
{ 39 3 123
--- 28 2 124
} 39 3 125
--- 56 0 126
--- 34 1 161
ct 66 2 162
ps 66 2 163
fr 10 2 164
yn 66 2 165
fn 66 3 166
sc 56 3 167
cr 66 2 168
--- 22 2 169
`` 52 2 170
--- 58 0 171
--- 37 0 172
--- 37 0 173
fi 62 2 174
fl 61 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 33 0 180
pg 62 3 182
--- 62 0 183
--- 28 1 184
--- 52 1 185
'' 52 2 186
--- 58 0 187
--- 100 0 188
--- 118 2 189
--- 47 1 191
ga 34 2 193
\` "
aa 34 2 194
\' "
^a 45 2 195
^ "
~a 56 2 196
~ "
-a 53 2 197
Ua 56 2 198
.a 29 2 199
:a 51 2 200
oa 34 2 202
,a 37 1 203
"a 50 2 205
Ca 38 1 206
va 45 2 207
em 100 0 208
--- 109 2 225
--- 40 2 227
--- 63 2 232
--- 81 2 233
--- 114 2 234
--- 40 2 235
--- 83 0 241
--- 31 0 245
--- 30 2 248
--- 57 0 249
--- 90 0 250
--- 58 2 251
0707070014231030761006440057030057030000010304640522627502700003000000003353post.src/devpost.add/F1 name F1
fontname FranklinGothic-Book
ligatures fi fl 0
spacewidth 30
charset
! 30 2 33
" 46 2 34
dq "
# 60 2 35
$ 60 2 36
% 70 2 37
& 68 2 38
' 30 2 39
( 30 3 40
) 30 3 41
* 60 2 42
+ 60 0 43
, 30 1 44
hy 22 0 45
- "
. 30 0 46
/ 52 3 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 30 0 58
; 30 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 54 2 63
@ 80 2 64
A 56 2 65
B 62 2 66
C 62 2 67
D 66 2 68
E 56 2 69
F 48 2 70
G 66 2 71
H 66 2 72
I 26 2 73
J 40 2 74
K 62 2 75
L 50 2 76
M 82 2 77
N 66 2 78
O 66 2 79
P 56 2 80
Q 66 3 81
R 62 2 82
S 62 2 83
T 50 2 84
U 64 2 85
V 56 2 86
W 82 2 87
X 54 2 88
Y 56 2 89
Z 54 2 90
[ 30 3 91
\ 52 2 92
bs "
] 30 3 93
--- 60 2 94
--- 50 1 95
` 30 2 96
a 54 0 97
b 54 2 98
c 48 0 99
d 54 2 100
e 54 0 101
f 30 2 102
g 50 1 103
h 54 2 104
i 24 2 105
j 22 3 106
k 50 2 107
l 24 2 108
m 82 0 109
n 54 0 110
o 54 0 111
p 54 1 112
q 54 1 113
r 32 0 114
s 52 0 115
t 32 2 116
u 54 0 117
v 44 0 118
w 66 0 119
x 44 0 120
y 42 1 121
z 42 0 122
{ 30 3 123
--- 26 2 124
} 30 3 125
--- 60 0 126
--- 30 1 161
ct 60 2 162
ps 60 2 163
fr 16 2 164
yn 60 2 165
fn 60 3 166
sc 60 3 167
cr 60 0 168
--- 30 2 169
`` 46 2 170
--- 40 0 171
--- 26 0 172
--- 26 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 60 3 178
dd 60 3 179
--- 30 0 180
pg 54 3 182
--- 60 0 183
--- 30 1 184
--- 46 1 185
'' 46 2 186
--- 40 0 187
--- 100 0 188
--- 104 2 189
--- 54 1 191
ga 38 2 193
\` "
aa 38 2 194
\' "
^a 48 2 195
^ "
~a 50 2 196
~ "
-a 46 2 197
Ua 48 2 198
.a 24 2 199
:a 40 2 200
oa 32 2 202
,a 32 1 203
"a 50 2 205
Ca 32 1 206
va 48 2 207
em 100 0 208
--- 96 2 225
--- 36 2 227
--- 50 2 232
--- 66 2 233
--- 100 2 234
--- 36 2 235
--- 90 0 241
--- 24 0 245
--- 20 2 248
--- 54 0 249
--- 88 0 250
--- 58 2 251
0707070014231030771006440057030057030000010304660522627502700003000000003362post.src/devpost.add/F2 name F2
fontname FranklinGothic-BookOblique
ligatures fi fl 0
spacewidth 30
charset
! 30 2 33
" 46 2 34
dq "
# 60 2 35
$ 60 2 36
% 70 2 37
& 68 2 38
' 30 2 39
( 30 3 40
) 30 3 41
* 60 2 42
+ 60 0 43
, 30 1 44
hy 22 0 45
- "
. 30 0 46
/ 52 3 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 30 0 58
; 30 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 54 2 63
@ 80 2 64
A 56 2 65
B 62 2 66
C 62 2 67
D 66 2 68
E 56 2 69
F 48 2 70
G 66 2 71
H 66 2 72
I 26 2 73
J 40 2 74
K 62 2 75
L 50 2 76
M 82 2 77
N 66 2 78
O 66 2 79
P 56 2 80
Q 66 3 81
R 62 2 82
S 62 2 83
T 50 2 84
U 64 2 85
V 56 2 86
W 82 2 87
X 54 2 88
Y 56 2 89
Z 54 2 90
[ 30 3 91
\ 52 2 92
bs "
] 30 3 93
--- 60 2 94
--- 50 1 95
` 30 2 96
a 54 0 97
b 54 2 98
c 48 0 99
d 54 2 100
e 54 0 101
f 30 2 102
g 50 1 103
h 54 2 104
i 24 2 105
j 22 3 106
k 50 2 107
l 24 2 108
m 82 0 109
n 54 0 110
o 54 0 111
p 54 1 112
q 54 1 113
r 32 0 114
s 52 0 115
t 32 2 116
u 54 0 117
v 44 0 118
w 66 0 119
x 44 0 120
y 42 1 121
z 42 0 122
{ 30 3 123
--- 26 2 124
} 30 3 125
--- 60 0 126
--- 30 1 161
ct 60 2 162
ps 60 2 163
fr 16 2 164
yn 60 2 165
fn 60 3 166
sc 60 3 167
cr 60 0 168
--- 30 2 169
`` 46 2 170
--- 40 0 171
--- 26 0 172
--- 26 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 60 3 178
dd 60 3 179
--- 30 0 180
pg 54 3 182
--- 60 0 183
--- 30 1 184
--- 46 1 185
'' 46 2 186
--- 40 0 187
--- 100 0 188
--- 104 2 189
--- 54 1 191
ga 38 2 193
\` "
aa 38 2 194
\' "
^a 48 2 195
^ "
~a 50 2 196
~ "
-a 46 2 197
Ua 48 2 198
.a 24 2 199
:a 40 2 200
oa 32 2 202
,a 32 1 203
"a 50 2 205
Ca 32 1 206
va 48 2 207
em 100 0 208
--- 96 2 225
--- 36 2 227
--- 50 2 232
--- 66 2 233
--- 100 2 234
--- 36 2 235
--- 90 0 241
--- 24 0 245
--- 20 2 248
--- 54 0 249
--- 88 0 250
--- 58 2 251
0707070014231031001006440057030057030000010305000522627502700003000000003351post.src/devpost.add/F3 name F3
fontname FranklinGothic-Demi
ligatures fi fl 0
spacewidth 30
charset
! 32 2 33
" 46 2 34
dq "
# 60 2 35
$ 60 2 36
% 70 2 37
& 72 2 38
' 30 2 39
( 38 3 40
) 38 3 41
* 60 2 42
+ 60 0 43
, 30 1 44
hy 24 0 45
- "
. 30 0 46
/ 60 3 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 30 0 58
; 30 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 54 2 63
@ 80 2 64
A 64 2 65
B 66 2 66
C 66 2 67
D 66 2 68
E 58 2 69
F 54 2 70
G 66 2 71
H 66 2 72
I 30 2 73
J 40 2 74
K 64 2 75
L 50 2 76
M 88 2 77
N 66 2 78
O 66 2 79
P 62 2 80
Q 66 3 81
R 66 2 82
S 60 2 83
T 54 2 84
U 66 2 85
V 60 2 86
W 90 2 87
X 64 2 88
Y 60 2 89
Z 66 2 90
[ 38 3 91
\ 60 2 92
bs "
] 38 3 93
--- 60 2 94
--- 50 1 95
` 30 2 96
a 54 0 97
b 54 2 98
c 54 0 99
d 54 2 100
e 54 0 101
f 30 2 102
g 56 3 103
h 54 2 104
i 26 2 105
j 26 3 106
k 56 2 107
l 26 2 108
m 82 0 109
n 54 0 110
o 54 0 111
p 54 1 112
q 54 1 113
r 34 0 114
s 50 0 115
t 38 2 116
u 54 0 117
v 48 0 118
w 74 0 119
x 54 0 120
y 48 1 121
z 42 0 122
{ 38 3 123
--- 30 2 124
} 38 3 125
--- 60 0 126
--- 32 1 161
ct 60 2 162
ps 60 2 163
fr 8 2 164
yn 60 2 165
fn 60 3 166
sc 60 3 167
cr 60 0 168
--- 30 2 169
`` 48 2 170
--- 40 0 171
--- 26 0 172
--- 26 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 60 3 178
dd 60 3 179
--- 30 0 180
pg 54 3 182
--- 60 0 183
--- 30 1 184
--- 48 1 185
'' 48 2 186
--- 40 0 187
--- 100 0 188
--- 104 2 189
--- 54 1 191
ga 38 2 193
\` "
aa 40 2 194
\' "
^a 50 2 195
^ "
~a 50 2 196
~ "
-a 46 2 197
Ua 52 2 198
.a 26 2 199
:a 42 2 200
oa 32 2 202
,a 34 1 203
"a 52 2 205
Ca 34 1 206
va 52 2 207
em 100 0 208
--- 90 2 225
--- 36 2 227
--- 52 2 232
--- 66 2 233
--- 96 2 234
--- 36 2 235
--- 82 0 241
--- 26 0 245
--- 26 2 248
--- 54 0 249
--- 86 0 250
--- 66 2 251
0707070014231031011006440057030057030000010305020522627502700003000000003360post.src/devpost.add/F4 name F4
fontname FranklinGothic-DemiOblique
ligatures fi fl 0
spacewidth 30
charset
! 32 2 33
" 46 2 34
dq "
# 60 2 35
$ 60 2 36
% 70 2 37
& 72 2 38
' 30 2 39
( 38 3 40
) 38 3 41
* 60 2 42
+ 60 0 43
, 30 1 44
hy 24 0 45
- "
. 30 0 46
/ 60 3 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 30 0 58
; 30 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 54 2 63
@ 80 2 64
A 64 2 65
B 66 2 66
C 66 2 67
D 66 2 68
E 58 2 69
F 54 2 70
G 66 2 71
H 66 2 72
I 30 2 73
J 40 2 74
K 64 2 75
L 50 2 76
M 88 2 77
N 66 2 78
O 66 2 79
P 62 2 80
Q 66 3 81
R 66 2 82
S 60 2 83
T 54 2 84
U 66 2 85
V 60 2 86
W 90 2 87
X 64 2 88
Y 60 2 89
Z 66 2 90
[ 38 3 91
\ 60 2 92
bs "
] 38 3 93
--- 60 2 94
--- 50 1 95
` 30 2 96
a 54 0 97
b 54 2 98
c 54 0 99
d 54 2 100
e 54 0 101
f 30 2 102
g 56 3 103
h 54 2 104
i 26 2 105
j 26 3 106
k 56 2 107
l 26 2 108
m 82 0 109
n 54 0 110
o 54 0 111
p 54 1 112
q 54 1 113
r 34 0 114
s 50 0 115
t 38 2 116
u 54 0 117
v 48 0 118
w 74 0 119
x 54 0 120
y 48 1 121
z 42 0 122
{ 38 3 123
--- 30 2 124
} 38 3 125
--- 60 0 126
--- 32 1 161
ct 60 2 162
ps 60 2 163
fr 8 2 164
yn 60 2 165
fn 60 3 166
sc 60 3 167
cr 60 0 168
--- 30 2 169
`` 48 2 170
--- 40 0 171
--- 26 0 172
--- 26 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 60 3 178
dd 60 3 179
--- 30 0 180
pg 54 3 182
--- 60 0 183
--- 30 1 184
--- 48 1 185
'' 48 2 186
--- 40 0 187
--- 100 0 188
--- 104 2 189
--- 54 1 191
ga 38 2 193
\` "
aa 40 2 194
\' "
^a 50 2 195
^ "
~a 50 2 196
~ "
-a 46 2 197
Ua 52 2 198
.a 26 2 199
:a 42 2 200
oa 32 2 202
,a 34 1 203
"a 52 2 205
Ca 34 1 206
va 52 2 207
em 100 0 208
--- 90 2 225
--- 36 2 227
--- 52 2 232
--- 66 2 233
--- 96 2 234
--- 36 2 235
--- 82 0 241
--- 26 0 245
--- 26 2 248
--- 54 0 249
--- 86 0 250
--- 66 2 251
0707070014231031021006440057030057030000010305040522627502700003000000003353post.src/devpost.add/F5 name F5
fontname FranklinGothic-Heavy
ligatures fi fl 0
spacewidth 30
charset
! 32 2 33
" 52 2 34
dq "
# 60 2 35
$ 60 2 36
% 74 2 37
& 78 2 38
' 30 2 39
( 38 3 40
) 38 3 41
* 60 2 42
+ 60 0 43
, 30 1 44
hy 26 0 45
- "
. 30 0 46
/ 60 3 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 30 0 58
; 30 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 60 2 63
@ 80 2 64
A 66 2 65
B 66 2 66
C 66 2 67
D 68 2 68
E 60 2 69
F 54 2 70
G 68 2 71
H 68 2 72
I 32 2 73
J 44 2 74
K 66 2 75
L 54 2 76
M 86 2 77
N 70 2 78
O 70 2 79
P 66 2 80
Q 70 3 81
R 68 2 82
S 66 2 83
T 50 2 84
U 66 2 85
V 66 2 86
W 92 2 87
X 70 2 88
Y 66 2 89
Z 60 2 90
[ 38 3 91
\ 60 2 92
bs "
] 38 3 93
--- 60 2 94
--- 50 1 95
` 30 2 96
a 58 0 97
b 58 2 98
c 54 0 99
d 58 2 100
e 60 0 101
f 40 2 102
g 58 3 103
h 58 2 104
i 30 2 105
j 30 3 106
k 58 2 107
l 30 2 108
m 86 0 109
n 58 0 110
o 60 0 111
p 58 1 112
q 58 1 113
r 38 0 114
s 54 0 115
t 40 2 116
u 60 0 117
v 54 0 118
w 78 0 119
x 58 0 120
y 54 1 121
z 50 0 122
{ 38 3 123
--- 30 2 124
} 38 3 125
--- 60 0 126
--- 32 1 161
ct 60 2 162
ps 60 2 163
fr 12 2 164
yn 60 2 165
fn 60 3 166
sc 60 3 167
cr 60 0 168
--- 30 2 169
`` 52 2 170
--- 42 0 171
--- 26 0 172
--- 26 0 173
fi 62 2 174
fl 60 2 175
en 50 0 177
\- "
dg 60 3 178
dd 60 3 179
--- 30 0 180
pg 54 3 182
--- 60 0 183
--- 30 1 184
--- 52 1 185
'' 52 2 186
--- 42 0 187
--- 100 0 188
--- 108 2 189
--- 60 1 191
ga 40 2 193
\` "
aa 40 2 194
\' "
^a 54 2 195
^ "
~a 50 2 196
~ "
-a 46 2 197
Ua 52 2 198
.a 28 2 199
:a 44 2 200
oa 34 2 202
,a 34 1 203
"a 60 2 205
Ca 34 1 206
va 54 2 207
em 100 0 208
--- 96 2 225
--- 38 2 227
--- 56 2 232
--- 70 2 233
--- 98 2 234
--- 38 2 235
--- 82 0 241
--- 30 0 245
--- 30 2 248
--- 60 0 249
--- 86 0 250
--- 66 2 251
0707070014231031031006440057030057030000010305060522627502700003000000003361post.src/devpost.add/F6 name F6
fontname FranklinGothic-HeavyOblique
ligatures fi fl 0
spacewidth 30
charset
! 32 2 33
" 52 2 34
dq "
# 60 2 35
$ 60 2 36
% 74 2 37
& 78 2 38
' 30 2 39
( 38 3 40
) 38 3 41
* 60 2 42
+ 60 0 43
, 30 1 44
hy 26 0 45
- "
. 30 0 46
/ 60 3 47
0 60 2 48
1 60 2 49
2 60 2 50
3 60 2 51
4 60 2 52
5 60 2 53
6 60 2 54
7 60 2 55
8 60 2 56
9 60 2 57
: 30 0 58
; 30 1 59
--- 60 0 60
= 60 0 61
--- 60 0 62
? 60 2 63
@ 80 2 64
A 66 2 65
B 66 2 66
C 66 2 67
D 68 2 68
E 60 2 69
F 54 2 70
G 68 2 71
H 68 2 72
I 32 2 73
J 44 2 74
K 66 2 75
L 54 2 76
M 86 2 77
N 70 2 78
O 70 2 79
P 66 2 80
Q 70 3 81
R 68 2 82
S 66 2 83
T 50 2 84
U 66 2 85
V 66 2 86
W 92 2 87
X 70 2 88
Y 66 2 89
Z 60 2 90
[ 38 3 91
\ 60 2 92
bs "
] 38 3 93
--- 60 2 94
--- 50 1 95
` 30 2 96
a 58 0 97
b 58 2 98
c 54 0 99
d 58 2 100
e 60 0 101
f 40 2 102
g 58 3 103
h 58 2 104
i 30 2 105
j 30 3 106
k 58 2 107
l 30 2 108
m 86 0 109
n 58 0 110
o 60 0 111
p 58 1 112
q 58 1 113
r 38 0 114
s 54 0 115
t 40 2 116
u 60 0 117
v 54 0 118
w 78 0 119
x 58 0 120
y 54 1 121
z 50 0 122
{ 38 3 123
or 30 2 124
} 38 3 125
--- 60 0 126
--- 32 1 161
ct 60 2 162
ps 60 2 163
fr 12 2 164
yn 60 2 165
fn 60 3 166
sc 60 3 167
cr 60 0 168
--- 30 2 169
`` 52 2 170
--- 42 0 171
--- 26 0 172
--- 26 0 173
fi 62 2 174
fl 60 2 175
en 50 0 177
\- "
dg 60 3 178
dd 60 3 179
--- 30 0 180
pg 54 3 182
--- 60 0 183
--- 30 1 184
--- 52 1 185
'' 52 2 186
--- 42 0 187
--- 100 0 188
--- 108 2 189
--- 60 1 191
ga 40 2 193
\` "
aa 40 2 194
\' "
^a 54 2 195
^ "
~a 50 2 196
~ "
-a 46 2 197
Ua 52 2 198
.a 28 2 199
:a 44 2 200
oa 34 2 202
,a 34 1 203
"a 60 2 205
Ca 34 1 206
va 54 2 207
em 100 0 208
--- 96 2 225
--- 38 2 227
--- 56 2 232
--- 70 2 233
--- 98 2 234
--- 38 2 235
--- 82 0 241
--- 30 0 245
--- 30 2 248
--- 60 0 249
--- 86 0 250
--- 66 2 251
0707070014231031041006440057030057030000010305200522627502700003000000003346post.src/devpost.add/G1 name G1
fontname Garamond-Light
ligatures fi fl 0
spacewidth 32
charset
! 22 2 33
" 34 2 34
dq "
# 60 2 35
$ 50 2 36
% 76 2 37
& 70 2 38
' 22 2 39
( 36 3 40
) 36 3 41
* 34 2 42
+ 56 0 43
, 26 1 44
hy 32 0 45
- "
. 26 0 46
/ 40 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 26 0 58
; 26 1 59
--- 56 0 60
= 56 0 61
--- 56 0 62
? 30 2 63
@ 74 3 64
A 64 2 65
B 64 2 66
C 62 2 67
D 74 2 68
E 56 2 69
F 52 2 70
G 74 2 71
H 74 2 72
I 32 2 73
J 32 2 74
K 66 2 75
L 48 2 76
M 80 2 77
N 70 2 78
O 78 2 79
P 56 2 80
Q 78 3 81
R 58 2 82
S 48 2 83
T 58 2 84
U 70 2 85
V 64 2 86
W 92 2 87
X 64 2 88
Y 66 2 89
Z 60 2 90
[ 24 3 91
\ 52 2 92
bs "
] 24 3 93
--- 56 2 94
--- 50 1 95
` 22 2 96
a 48 0 97
b 56 2 98
c 46 0 99
d 56 2 100
e 50 0 101
f 30 2 102
g 52 1 103
h 56 2 104
i 26 2 105
j 22 3 106
k 54 2 107
l 26 2 108
m 82 0 109
n 56 0 110
o 56 0 111
p 58 1 112
q 56 1 113
r 34 0 114
s 40 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 78 0 119
x 52 0 120
y 50 1 121
z 46 0 122
{ 26 3 123
--- 56 3 124
} 26 3 125
--- 56 0 126
--- 22 1 161
ct 50 2 162
ps 64 2 163
fr 16 2 164
yn 66 2 165
fn 50 3 166
sc 36 3 167
cr 50 2 168
--- 20 2 169
`` 38 2 170
--- 26 0 171
--- 16 0 172
--- 16 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 40 3 178
dd 40 3 179
--- 26 0 180
pg 62 3 182
--- 62 0 183
--- 22 1 184
--- 36 1 185
'' 38 2 186
--- 26 0 187
--- 100 0 188
--- 108 2 189
--- 30 1 191
ga 36 2 193
\` "
aa 36 2 194
\' "
^a 42 2 195
^ "
~a 42 2 196
~ "
-a 38 2 197
Ua 40 2 198
.a 22 2 199
:a 40 2 200
oa 28 2 202
,a 32 1 203
"a 38 2 205
Ca 30 1 206
va 42 2 207
em 100 0 208
--- 94 2 225
--- 34 2 227
--- 48 2 232
--- 78 2 233
--- 100 2 234
--- 34 2 235
--- 74 0 241
--- 26 0 245
--- 26 2 248
--- 56 0 249
--- 88 0 250
--- 56 2 251
0707070014231031051006440057030057030000010305220522627502700003000000003353post.src/devpost.add/G2 name G2
fontname Garamond-LightItalic
ligatures fi fl 0
spacewidth 27
charset
! 26 2 33
" 35 2 34
dq "
# 54 2 35
$ 55 2 36
% 78 2 37
& 64 2 38
' 25 2 39
( 38 3 40
) 38 3 41
* 32 2 42
+ 57 0 43
, 27 1 44
hy 33 0 45
- "
. 27 0 46
/ 30 2 47
0 55 2 48
1 55 2 49
2 55 2 50
3 55 2 51
4 55 2 52
5 55 2 53
6 55 2 54
7 55 2 55
8 55 2 56
9 55 2 57
: 27 0 58
; 27 1 59
--- 57 0 60
= 57 0 61
--- 57 0 62
? 35 2 63
@ 69 3 64
A 64 2 65
B 63 2 66
C 63 2 67
D 72 2 68
E 55 2 69
F 52 2 70
G 71 2 71
H 73 2 72
I 31 2 73
J 30 2 74
K 63 2 75
L 46 2 76
M 80 2 77
N 66 2 78
O 72 2 79
P 58 2 80
Q 73 3 81
R 58 2 82
S 46 2 83
T 54 2 84
U 63 2 85
V 62 2 86
W 90 2 87
X 65 2 88
Y 58 2 89
Z 59 2 90
[ 23 3 91
\ 51 2 92
bs "
] 23 3 93
--- 57 2 94
--- 50 1 95
` 25 2 96
a 57 0 97
b 52 2 98
c 46 0 99
d 57 2 100
e 44 0 101
f 30 2 102
g 48 1 103
h 56 2 104
i 30 2 105
j 27 3 106
k 49 2 107
l 26 2 108
m 84 0 109
n 62 0 110
o 50 0 111
p 51 1 112
q 52 1 113
r 39 0 114
s 36 0 115
t 28 2 116
u 61 0 117
v 46 0 118
w 73 0 119
x 53 0 120
y 47 1 121
z 51 0 122
{ 26 3 123
--- 57 3 124
} 26 3 125
--- 57 0 126
--- 26 1 161
ct 55 2 162
ps 65 2 163
fr 12 2 164
yn 55 2 165
fn 55 3 166
sc 36 3 167
cr 56 2 168
--- 19 2 169
`` 41 2 170
--- 27 0 171
--- 16 0 172
--- 16 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 42 3 178
dd 42 3 179
--- 27 0 180
pg 61 3 182
--- 62 0 183
--- 25 1 184
--- 41 1 185
'' 41 2 186
--- 27 0 187
--- 100 0 188
--- 113 2 189
--- 35 1 191
ga 39 2 193
\` "
aa 34 2 194
\' "
^a 43 2 195
^ "
~a 46 2 196
~ "
-a 38 2 197
Ua 43 2 198
.a 21 2 199
:a 36 2 200
oa 29 2 202
,a 33 1 203
"a 32 2 205
Ca 29 1 206
va 43 2 207
em 100 0 208
--- 80 2 225
--- 37 2 227
--- 47 2 232
--- 72 2 233
--- 92 2 234
--- 37 2 235
--- 78 0 241
--- 30 0 245
--- 29 2 248
--- 50 0 249
--- 81 0 250
--- 59 2 251
0707070014231031061006440057030057030000010305240522627503000003000000003345post.src/devpost.add/G3 name G3
fontname Garamond-Bold
ligatures fi fl 0
spacewidth 28
charset
! 28 2 33
" 40 2 34
dq "
# 60 2 35
$ 56 2 36
% 88 2 37
& 76 2 38
' 26 2 39
( 40 3 40
) 40 3 41
* 34 2 42
+ 56 0 43
, 28 1 44
hy 30 0 45
- "
. 28 0 46
/ 44 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 56 0 60
= 56 0 61
--- 56 0 62
? 42 2 63
@ 72 3 64
A 66 2 65
B 64 2 66
C 66 2 67
D 76 2 68
E 60 2 69
F 56 2 70
G 72 2 71
H 78 2 72
I 36 2 73
J 40 2 74
K 74 2 75
L 54 2 76
M 86 2 77
N 72 2 78
O 76 2 79
P 60 2 80
Q 76 3 81
R 66 2 82
S 52 2 83
T 60 2 84
U 70 2 85
V 64 2 86
W 94 2 87
X 70 2 88
Y 68 2 89
Z 62 2 90
[ 28 3 91
\ 54 2 92
bs "
] 28 3 93
--- 56 2 94
--- 50 1 95
` 26 2 96
a 52 0 97
b 60 2 98
c 50 0 99
d 60 2 100
e 52 0 101
f 36 2 102
g 54 1 103
h 66 2 104
i 32 2 105
j 30 3 106
k 60 2 107
l 32 2 108
m 94 0 109
n 66 0 110
o 60 0 111
p 64 1 112
q 60 1 113
r 46 0 114
s 46 0 115
t 34 2 116
u 60 0 117
v 54 0 118
w 82 0 119
x 62 0 120
y 56 1 121
z 48 0 122
{ 28 3 123
--- 56 3 124
} 28 3 125
--- 56 0 126
--- 28 1 161
ct 56 2 162
ps 68 2 163
fr 56 2 164
yn 72 2 165
fn 66 3 166
sc 40 3 167
cr 56 2 168
--- 22 2 169
`` 44 2 170
--- 34 0 171
--- 20 0 172
--- 20 0 173
fi 70 2 174
fl 70 2 175
en 50 0 177
\- "
dg 54 3 178
dd 54 3 179
--- 28 0 180
pg 66 3 182
--- 62 0 183
--- 26 1 184
--- 44 1 185
'' 44 2 186
--- 34 0 187
--- 100 0 188
--- 126 2 189
--- 42 1 191
ga 40 2 193
\` "
aa 40 2 194
\' "
^a 50 2 195
^ "
~a 52 2 196
~ "
-a 52 2 197
Ua 48 2 198
.a 30 2 199
:a 44 2 200
oa 32 2 202
,a 32 1 203
"a 42 2 205
Ca 34 1 206
va 50 2 207
em 100 0 208
--- 96 2 225
--- 36 2 227
--- 54 2 232
--- 76 2 233
--- 100 2 234
--- 36 2 235
--- 80 0 241
--- 32 0 245
--- 34 2 248
--- 60 0 249
--- 92 0 250
--- 64 2 251
0707070014231031071006440057030057030000010305260522627503000003000000003354post.src/devpost.add/G4 name G4
fontname Garamond-BoldItalic
ligatures fi fl 0
spacewidth 28
charset
! 24 2 33
" 40 2 34
dq "
# 56 2 35
$ 56 2 36
% 76 2 37
& 74 2 38
' 22 2 39
( 48 3 40
) 48 3 41
* 54 2 42
+ 56 0 43
, 24 1 44
hy 30 0 45
- "
. 24 0 46
/ 44 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 24 0 58
; 24 1 59
--- 56 0 60
= 56 0 61
--- 56 0 62
? 40 2 63
@ 76 3 64
A 64 2 65
B 64 2 66
C 64 2 67
D 76 2 68
E 64 2 69
F 60 2 70
G 72 2 71
H 84 2 72
I 42 2 73
J 40 2 74
K 76 2 75
L 56 2 76
M 88 2 77
N 74 2 78
O 74 2 79
P 68 2 80
Q 74 3 81
R 72 2 82
S 52 2 83
T 58 2 84
U 72 2 85
V 64 2 86
W 90 2 87
X 72 2 88
Y 62 2 89
Z 62 2 90
[ 34 3 91
\ 54 2 92
bs "
] 34 3 93
--- 56 2 94
--- 50 1 95
` 22 2 96
a 62 0 97
b 56 2 98
c 50 0 99
d 62 2 100
e 52 0 101
f 38 2 102
g 56 1 103
h 64 2 104
i 34 2 105
j 32 3 106
k 60 2 107
l 28 2 108
m 86 0 109
n 58 0 110
o 60 0 111
p 64 1 112
q 60 1 113
r 50 0 114
s 50 0 115
t 34 2 116
u 64 0 117
v 52 0 118
w 82 0 119
x 66 0 120
y 54 1 121
z 56 0 122
{ 34 3 123
--- 56 3 124
} 34 3 125
--- 56 0 126
--- 24 1 161
ct 56 2 162
ps 56 2 163
fr 18 2 164
yn 56 2 165
fn 56 3 166
sc 54 3 167
cr 56 2 168
--- 22 2 169
`` 42 2 170
--- 42 0 171
--- 24 0 172
--- 24 0 173
fi 70 2 174
fl 66 2 175
en 50 0 177
\- "
dg 54 3 178
dd 54 3 179
--- 24 0 180
pg 70 3 182
--- 62 0 183
--- 22 1 184
--- 42 1 185
'' 42 2 186
--- 42 0 187
--- 100 0 188
--- 114 2 189
--- 40 1 191
ga 42 2 193
\` "
aa 38 2 194
\' "
^a 50 2 195
^ "
~a 56 2 196
~ "
-a 52 2 197
Ua 50 2 198
.a 26 2 199
:a 48 2 200
oa 32 2 202
,a 38 1 203
"a 38 2 205
Ca 34 1 206
va 50 2 207
em 100 0 208
--- 100 2 225
--- 40 2 227
--- 56 2 232
--- 76 2 233
--- 104 2 234
--- 38 2 235
--- 88 0 241
--- 34 0 245
--- 28 2 248
--- 60 0 249
--- 90 0 250
--- 64 2 251
0707070014231031101006440057030057030000010305400522627503000003000000003344post.src/devpost.add/Gb name Gb
fontname Goudy-Bold
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 50 2 34
dq "
# 61 2 35
$ 56 2 36
% 89 2 37
& 89 2 38
' 28 2 39
( 39 3 40
) 39 3 41
* 50 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 33 0 58
; 33 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 39 2 63
@ 75 3 64
A 78 2 65
B 67 2 66
C 72 2 67
D 78 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 83 2 72
I 39 2 73
J 39 2 74
K 72 2 75
L 61 2 76
M 89 2 77
N 83 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 72 2 82
S 56 2 83
T 72 2 84
U 83 2 85
V 78 2 86
W 100 2 87
X 72 2 88
Y 67 2 89
Z 61 2 90
[ 33 3 91
\ 61 2 92
bs "
] 33 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 44 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 33 2 102
g 44 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 56 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 39 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 39 0 122
{ 33 3 123
--- 61 3 124
} 33 3 125
--- 61 0 126
--- 33 1 161
ct 56 2 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 50 3 167
cr 56 2 168
--- 28 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 28 0 180
pg 63 3 182
--- 61 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 39 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 28 2 227
--- 61 2 232
--- 78 2 233
--- 100 2 234
--- 30 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 50 0 249
--- 78 0 250
--- 56 2 251
0707070014231031111006440057030057030000010305420522627503000003000000003343post.src/devpost.add/Gi name Gi
fontname Goudy-Italic
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 44 2 34
dq "
# 61 2 35
$ 50 2 36
% 83 2 37
& 83 2 38
' 28 2 39
( 39 3 40
) 39 3 41
* 50 2 42
+ 61 0 43
, 33 1 44
hy 33 0 45
- "
. 33 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 33 0 58
; 33 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 39 2 63
@ 75 3 64
A 72 2 65
B 61 2 66
C 72 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 78 2 72
I 33 2 73
J 33 2 74
K 67 2 75
L 56 2 76
M 89 2 77
N 78 2 78
O 78 2 79
P 56 2 80
Q 78 3 81
R 61 2 82
S 50 2 83
T 67 2 84
U 78 2 85
V 67 2 86
W 94 2 87
X 67 2 88
Y 56 2 89
Z 56 2 90
[ 28 3 91
\ 61 2 92
bs "
] 28 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 44 0 97
b 44 2 98
c 39 0 99
d 44 2 100
e 39 0 101
f 28 2 102
g 39 1 103
h 44 2 104
i 22 2 105
j 22 3 106
k 44 2 107
l 22 2 108
m 72 0 109
n 50 0 110
o 44 0 111
p 44 1 112
q 44 1 113
r 33 0 114
s 33 0 115
t 28 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 28 3 123
--- 61 3 124
} 28 3 125
--- 61 0 126
--- 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 61 2 168
--- 28 2 169
`` 44 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 33 0 180
pg 63 3 182
--- 61 0 183
--- 28 1 184
--- 44 1 185
'' 44 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 39 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 94 2 225
--- 50 2 227
--- 56 2 232
--- 78 2 233
--- 94 2 234
--- 50 2 235
--- 67 0 241
--- 22 0 245
--- 22 2 248
--- 44 0 249
--- 72 0 250
--- 50 2 251
0707070014231031121006440057030057030000010305440522627503000003000000003347post.src/devpost.add/Gr name Gr
fontname Goudy-Regular
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 37 2 34
dq "
# 61 2 35
$ 50 2 36
% 83 2 37
& 83 2 38
' 22 2 39
( 39 3 40
) 39 3 41
* 50 2 42
+ 61 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 33 2 63
@ 75 3 64
A 78 2 65
B 61 2 66
C 72 2 67
D 72 2 68
E 56 2 69
F 50 2 70
G 78 2 71
H 78 2 72
I 33 2 73
J 33 2 74
K 67 2 75
L 56 2 76
M 89 2 77
N 78 2 78
O 78 2 79
P 56 2 80
Q 78 3 81
R 67 2 82
S 56 2 83
T 67 2 84
U 78 2 85
V 72 2 86
W 100 2 87
X 67 2 88
Y 61 2 89
Z 56 2 90
[ 28 3 91
\ 61 2 92
bs "
] 28 3 93
--- 61 2 94
--- 50 1 95
` 22 2 96
a 44 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 28 2 102
g 44 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 33 0 115
t 33 2 116
u 50 0 117
v 50 0 118
w 67 0 119
x 50 0 120
y 44 1 121
z 33 0 122
{ 28 3 123
--- 61 3 124
} 28 3 125
--- 61 0 126
--- 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 22 2 169
`` 39 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 25 0 180
pg 63 3 182
--- 61 0 183
--- 22 1 184
--- 39 1 185
'' 39 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 33 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 39 2 227
--- 56 2 232
--- 78 2 233
--- 100 2 234
--- 43 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 50 0 249
--- 78 0 250
--- 50 2 251
0707070014231031131006440057030057030000010305460522627503000003000000003347post.src/devpost.add/Gx name Gx
fontname Goudy-BoldItalic
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 50 2 34
dq "
# 61 2 35
$ 56 2 36
% 83 2 37
& 83 2 38
' 28 2 39
( 39 3 40
) 39 3 41
* 50 2 42
+ 61 0 43
, 33 1 44
hy 33 0 45
- "
. 33 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 33 0 58
; 33 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 39 2 63
@ 75 3 64
A 72 2 65
B 67 2 66
C 67 2 67
D 78 2 68
E 67 2 69
F 61 2 70
G 72 2 71
H 78 2 72
I 39 2 73
J 44 2 74
K 72 2 75
L 61 2 76
M 94 2 77
N 78 2 78
O 78 2 79
P 67 2 80
Q 78 3 81
R 72 2 82
S 50 2 83
T 72 2 84
U 78 2 85
V 67 2 86
W 94 2 87
X 72 2 88
Y 61 2 89
Z 61 2 90
[ 39 3 91
\ 61 2 92
bs "
] 39 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 28 2 102
g 44 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 78 0 109
n 56 0 110
o 44 0 111
p 50 1 112
q 50 1 113
r 39 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 44 0 118
w 72 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 39 3 123
--- 61 3 124
} 39 3 125
--- 61 0 126
--- 33 1 161
ct 56 2 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 50 3 167
cr 61 2 168
--- 28 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 33 0 180
pg 63 3 182
--- 61 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 39 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 89 2 225
--- 30 2 227
--- 61 2 232
--- 78 2 233
--- 94 2 234
--- 30 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 44 0 249
--- 72 0 250
--- 50 2 251
0707070014231031141006440057030057030000010305600522627503000003000000003360post.src/devpost.add/H1 name H1
fontname Helvetica-Condensed-Light
ligatures fi fl 0
spacewidth 22
charset
! 22 2 33
" 31 2 34
dq "
# 44 2 35
$ 44 2 36
% 78 2 37
& 61 2 38
' 16 2 39
( 28 3 40
) 28 3 41
* 39 2 42
+ 44 0 43
, 22 1 44
hy 33 0 45
- "
. 22 0 46
/ 28 2 47
0 44 2 48
1 44 2 49
2 44 2 50
3 44 2 51
4 44 2 52
5 44 2 53
6 44 2 54
7 44 2 55
8 44 2 56
9 44 2 57
: 22 0 58
; 22 1 59
--- 44 0 60
= 44 0 61
--- 44 0 62
? 39 2 63
@ 80 3 64
A 50 2 65
B 50 2 66
C 56 2 67
D 56 2 68
E 44 2 69
F 44 2 70
G 56 2 71
H 56 2 72
I 22 2 73
J 39 2 74
K 50 2 75
L 44 2 76
M 72 2 77
N 56 2 78
O 56 2 79
P 50 2 80
Q 56 3 81
R 50 2 82
S 50 2 83
T 44 2 84
U 56 2 85
V 50 2 86
W 72 2 87
X 50 2 88
Y 50 2 89
Z 44 2 90
[ 28 3 91
\ 22 2 92
bs "
] 28 3 93
--- 44 2 94
--- 50 1 95
` 22 2 96
a 39 0 97
b 44 2 98
c 39 0 99
d 44 2 100
e 39 0 101
f 22 2 102
g 44 1 103
h 44 2 104
i 22 2 105
j 22 3 106
k 39 2 107
l 22 2 108
m 67 0 109
n 44 0 110
o 44 0 111
p 44 1 112
q 44 1 113
r 28 0 114
s 39 0 115
t 22 2 116
u 44 0 117
v 39 0 118
w 56 0 119
x 39 0 120
y 39 1 121
z 33 0 122
{ 35 3 123
--- 22 3 124
} 35 3 125
--- 44 0 126
--- 22 1 161
ct 44 2 162
ps 44 2 163
fr 17 2 164
yn 44 2 165
fn 44 3 166
sc 44 3 167
cr 44 2 168
--- 20 2 169
`` 33 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 44 2 174
fl 44 2 175
en 50 0 177
\- "
dg 44 3 178
dd 44 3 179
--- 22 0 180
pg 56 3 182
--- 61 0 183
--- 22 1 184
--- 33 1 185
'' 33 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 39 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 72 2 225
--- 27 2 227
--- 44 2 232
--- 56 2 233
--- 78 2 234
--- 27 2 235
--- 61 0 241
--- 20 0 245
--- 22 2 248
--- 44 0 249
--- 67 0 250
--- 44 2 251
0707070014231031151006440057030057030000010305620522627503000003000000003367post.src/devpost.add/H2 name H2
fontname Helvetica-Condensed-LightOblique
ligatures fi fl 0
spacewidth 22
charset
! 22 2 33
" 31 2 34
dq "
# 44 2 35
$ 44 2 36
% 78 2 37
& 61 2 38
' 16 2 39
( 28 3 40
) 28 3 41
* 39 2 42
+ 44 0 43
, 22 1 44
hy 33 0 45
- "
. 22 0 46
/ 28 2 47
0 44 2 48
1 44 2 49
2 44 2 50
3 44 2 51
4 44 2 52
5 44 2 53
6 44 2 54
7 44 2 55
8 44 2 56
9 44 2 57
: 22 0 58
; 22 1 59
--- 44 0 60
= 44 0 61
--- 44 0 62
? 39 2 63
@ 80 3 64
A 50 2 65
B 50 2 66
C 56 2 67
D 56 2 68
E 44 2 69
F 44 2 70
G 56 2 71
H 56 2 72
I 22 2 73
J 39 2 74
K 50 2 75
L 44 2 76
M 72 2 77
N 56 2 78
O 56 2 79
P 50 2 80
Q 56 3 81
R 50 2 82
S 50 2 83
T 44 2 84
U 56 2 85
V 50 2 86
W 72 2 87
X 50 2 88
Y 50 2 89
Z 44 2 90
[ 28 3 91
\ 22 2 92
bs "
] 28 3 93
--- 44 2 94
--- 50 1 95
` 22 2 96
a 39 0 97
b 44 2 98
c 39 0 99
d 44 2 100
e 39 0 101
f 22 2 102
g 44 1 103
h 44 2 104
i 22 2 105
j 22 3 106
k 39 2 107
l 22 2 108
m 67 0 109
n 44 0 110
o 44 0 111
p 44 1 112
q 44 1 113
r 28 0 114
s 39 0 115
t 22 2 116
u 44 0 117
v 39 0 118
w 56 0 119
x 39 0 120
y 39 1 121
z 33 0 122
{ 35 3 123
--- 22 3 124
} 35 3 125
--- 44 0 126
--- 22 1 161
ct 44 2 162
ps 44 2 163
fr 17 2 164
yn 44 2 165
fn 44 3 166
sc 44 3 167
cr 44 2 168
--- 20 2 169
`` 33 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 44 2 174
fl 44 2 175
en 50 0 177
\- "
dg 44 3 178
dd 44 3 179
--- 22 0 180
pg 56 3 182
--- 61 0 183
--- 22 1 184
--- 33 1 185
'' 33 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 39 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 72 2 225
--- 27 2 227
--- 44 2 232
--- 56 2 233
--- 78 2 234
--- 27 2 235
--- 61 0 241
--- 20 0 245
--- 22 2 248
--- 44 0 249
--- 67 0 250
--- 44 2 251
0707070014231031161006440057030057030000010305640522627503000003000000003352post.src/devpost.add/H3 name H3
fontname Helvetica-Condensed
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 25 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 50 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 50 2 63
@ 80 3 64
A 56 2 65
B 56 2 66
C 56 2 67
D 61 2 68
E 50 2 69
F 44 2 70
G 61 2 71
H 61 2 72
I 28 2 73
J 44 2 74
K 56 2 75
L 50 2 76
M 78 2 77
N 61 2 78
O 61 2 79
P 56 2 80
Q 61 3 81
R 61 2 82
S 56 2 83
T 50 2 84
U 61 2 85
V 56 2 86
W 83 2 87
X 56 2 88
Y 56 2 89
Z 50 2 90
[ 33 3 91
\ 25 2 92
bs "
] 33 3 93
--- 50 2 94
--- 50 1 95
` 22 2 96
a 44 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 28 2 102
g 50 1 103
h 50 2 104
i 22 2 105
j 22 3 106
k 44 2 107
l 22 2 108
m 78 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 44 0 115
t 28 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 27 3 123
--- 25 3 124
} 27 3 125
--- 48 0 126
--- 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 25 2 169
`` 39 2 170
--- 50 0 171
--- 28 0 172
--- 28 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 28 0 180
pg 44 3 182
--- 33 0 183
--- 22 1 184
--- 39 1 185
'' 39 2 186
--- 50 0 187
--- 100 0 188
--- 111 2 189
--- 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 83 2 225
--- 30 2 227
--- 50 2 232
--- 61 2 233
--- 83 2 234
--- 30 2 235
--- 67 0 241
--- 22 0 245
--- 22 2 248
--- 50 0 249
--- 72 0 250
--- 50 2 251
0707070014231031171006440057030057030000010305660522627503000003000000003362post.src/devpost.add/H4 name H4
fontname Helvetica-Condensed-Oblique
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 25 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 50 0 43
, 25 1 44
hy 33 0 45
- "
. 25 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 50 2 63
@ 80 3 64
A 56 2 65
B 56 2 66
C 56 2 67
D 61 2 68
E 50 2 69
F 44 2 70
G 61 2 71
H 61 2 72
I 28 2 73
J 44 2 74
K 56 2 75
L 50 2 76
M 78 2 77
N 61 2 78
O 61 2 79
P 56 2 80
Q 61 3 81
R 61 2 82
S 56 2 83
T 50 2 84
U 61 2 85
V 56 2 86
W 83 2 87
X 56 2 88
Y 56 2 89
Z 50 2 90
[ 33 3 91
\ 25 2 92
bs "
] 33 3 93
--- 50 2 94
--- 50 1 95
` 22 2 96
a 44 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 44 0 101
f 28 2 102
g 50 1 103
h 50 2 104
i 22 2 105
j 22 3 106
k 44 2 107
l 22 2 108
m 78 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 44 0 115
t 28 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 27 3 123
--- 25 3 124
} 27 3 125
--- 48 0 126
--- 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 25 2 169
`` 39 2 170
--- 50 0 171
--- 28 0 172
--- 28 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 28 0 180
pg 44 3 182
--- 33 0 183
--- 22 1 184
--- 39 1 185
'' 39 2 186
--- 50 0 187
--- 100 0 188
--- 111 2 189
--- 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 83 2 225
--- 30 2 227
--- 50 2 232
--- 61 2 233
--- 83 2 234
--- 30 2 235
--- 67 0 241
--- 22 0 245
--- 22 2 248
--- 50 0 249
--- 72 0 250
--- 50 2 251
0707070014231031201006440057030057030000010306000522627503000003000000003357post.src/devpost.add/H5 name H5
fontname Helvetica-Condensed-Bold
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 33 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 67 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 50 0 43
, 33 1 44
hy 33 0 45
- "
. 33 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 28 0 58
; 28 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 50 2 63
@ 83 3 64
A 56 2 65
B 56 2 66
C 56 2 67
D 61 2 68
E 50 2 69
F 50 2 70
G 61 2 71
H 61 2 72
I 28 2 73
J 44 2 74
K 56 2 75
L 50 2 76
M 78 2 77
N 61 2 78
O 61 2 79
P 56 2 80
Q 61 3 81
R 61 2 82
S 56 2 83
T 50 2 84
U 61 2 85
V 56 2 86
W 83 2 87
X 56 2 88
Y 56 2 89
Z 50 2 90
[ 33 3 91
\ 25 2 92
bs "
] 33 3 93
--- 50 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 50 0 101
f 28 2 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 44 2 107
l 28 2 108
m 78 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 44 0 115
t 28 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 27 3 123
--- 25 3 124
} 27 3 125
--- 50 0 126
--- 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 25 2 169
`` 50 2 170
--- 50 0 171
--- 28 0 172
--- 28 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 33 0 180
pg 55 3 182
--- 42 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 111 2 189
--- 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 78 2 225
--- 30 2 227
--- 50 2 232
--- 61 2 233
--- 83 2 234
--- 30 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 50 0 249
--- 72 0 250
--- 50 2 251
0707070014231031211006440057030057030000010306020522627503000003000000003366post.src/devpost.add/H6 name H6
fontname Helvetica-Condensed-BoldOblique
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 33 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 67 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 50 2 42
+ 50 0 43
, 33 1 44
hy 33 0 45
- "
. 33 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 28 0 58
; 28 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 50 2 63
@ 83 3 64
A 56 2 65
B 56 2 66
C 56 2 67
D 61 2 68
E 50 2 69
F 50 2 70
G 61 2 71
H 61 2 72
I 28 2 73
J 44 2 74
K 56 2 75
L 50 2 76
M 78 2 77
N 61 2 78
O 61 2 79
P 56 2 80
Q 61 3 81
R 61 2 82
S 56 2 83
T 50 2 84
U 61 2 85
V 56 2 86
W 83 2 87
X 56 2 88
Y 56 2 89
Z 50 2 90
[ 33 3 91
\ 25 2 92
bs "
] 33 3 93
--- 50 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 50 2 98
c 44 0 99
d 50 2 100
e 50 0 101
f 28 2 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 44 2 107
l 28 2 108
m 78 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 44 0 115
t 28 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 27 3 123
--- 25 3 124
} 27 3 125
--- 50 0 126
--- 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 25 2 169
`` 50 2 170
--- 50 0 171
--- 28 0 172
--- 28 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 33 0 180
pg 55 3 182
--- 42 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 111 2 189
--- 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 78 2 225
--- 30 2 227
--- 50 2 232
--- 61 2 233
--- 83 2 234
--- 30 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 50 0 249
--- 72 0 250
--- 50 2 251
0707070014231031221006440057030057030000010306040522627503000003000000003360post.src/devpost.add/H7 name H7
fontname Helvetica-Condensed-Black
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 33 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 67 2 38
' 28 2 39
( 28 3 40
) 28 3 41
* 50 2 42
+ 50 0 43
, 33 1 44
hy 33 0 45
- "
. 33 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 28 0 58
; 28 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 50 2 63
@ 83 3 64
A 56 2 65
B 56 2 66
C 56 2 67
D 56 2 68
E 50 2 69
F 50 2 70
G 56 2 71
H 56 2 72
I 28 2 73
J 44 2 74
K 56 2 75
L 44 2 76
M 78 2 77
N 56 2 78
O 56 2 79
P 56 2 80
Q 56 3 81
R 56 2 82
S 50 2 83
T 50 2 84
U 56 2 85
V 56 2 86
W 78 2 87
X 56 2 88
Y 56 2 89
Z 44 2 90
[ 28 3 91
\ 25 2 92
bs "
] 28 3 93
--- 50 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 50 2 98
c 50 0 99
d 50 2 100
e 50 0 101
f 33 2 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 72 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 44 0 115
t 33 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 27 3 123
--- 25 3 124
} 27 3 125
--- 50 0 126
--- 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 25 2 169
`` 50 2 170
--- 50 0 171
--- 28 0 172
--- 28 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 33 0 180
pg 55 3 182
--- 42 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 111 2 189
--- 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 78 2 225
--- 30 2 227
--- 44 2 232
--- 56 2 233
--- 78 2 234
--- 30 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 50 0 249
--- 72 0 250
--- 50 2 251
0707070014231031231006440057030057030000010306060522627503000003000000003367post.src/devpost.add/H8 name H8
fontname Helvetica-Condensed-BlackOblique
ligatures fi fl 0
spacewidth 25
charset
! 33 2 33
" 33 2 34
dq "
# 50 2 35
$ 50 2 36
% 83 2 37
& 67 2 38
' 28 2 39
( 28 3 40
) 28 3 41
* 50 2 42
+ 50 0 43
, 33 1 44
hy 33 0 45
- "
. 33 0 46
/ 28 2 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 28 0 58
; 28 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 50 2 63
@ 83 3 64
A 56 2 65
B 56 2 66
C 56 2 67
D 56 2 68
E 50 2 69
F 50 2 70
G 56 2 71
H 56 2 72
I 28 2 73
J 44 2 74
K 56 2 75
L 44 2 76
M 78 2 77
N 56 2 78
O 56 2 79
P 56 2 80
Q 56 3 81
R 56 2 82
S 50 2 83
T 50 2 84
U 56 2 85
V 56 2 86
W 78 2 87
X 56 2 88
Y 56 2 89
Z 44 2 90
[ 28 3 91
\ 25 2 92
bs "
] 28 3 93
--- 50 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 50 2 98
c 50 0 99
d 50 2 100
e 50 0 101
f 33 2 102
g 50 1 103
h 50 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 72 0 109
n 50 0 110
o 50 0 111
p 50 1 112
q 50 1 113
r 33 0 114
s 44 0 115
t 33 2 116
u 50 0 117
v 44 0 118
w 67 0 119
x 44 0 120
y 44 1 121
z 39 0 122
{ 27 3 123
--- 25 3 124
} 27 3 125
--- 50 0 126
--- 33 1 161
ct 50 2 162
ps 50 2 163
fr 17 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 25 2 169
`` 50 2 170
--- 50 0 171
--- 28 0 172
--- 28 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 33 0 180
pg 55 3 182
--- 42 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 111 2 189
--- 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 78 2 225
--- 30 2 227
--- 44 2 232
--- 56 2 233
--- 78 2 234
--- 30 2 235
--- 72 0 241
--- 28 0 245
--- 28 2 248
--- 50 0 249
--- 72 0 250
--- 50 2 251
0707070014231031241006440057030057030000010306200522627503000003000000003355post.src/devpost.add/HC name HC
fontname Helvetica-Black
ligatures fi fl 0
spacewidth 33
charset
! 33 2 33
" 50 2 34
dq "
# 66 2 35
$ 67 2 36
% 100 2 37
& 89 2 38
' 28 2 39
( 39 3 40
) 39 3 41
* 56 2 42
+ 66 0 43
, 33 1 44
hy 33 0 45
- "
. 33 0 46
/ 28 2 47
0 67 2 48
1 67 2 49
2 67 2 50
3 67 2 51
4 67 2 52
5 67 2 53
6 67 2 54
7 67 2 55
8 67 2 56
9 67 2 57
: 33 0 58
; 33 1 59
--- 66 0 60
= 66 0 61
--- 66 0 62
? 61 2 63
@ 74 3 64
A 78 2 65
B 78 2 66
C 78 2 67
D 78 2 68
E 72 2 69
F 67 2 70
G 83 2 71
H 83 2 72
I 39 2 73
J 67 2 74
K 83 2 75
L 67 2 76
M 94 2 77
N 83 2 78
O 83 2 79
P 72 2 80
Q 83 3 81
R 78 2 82
S 72 2 83
T 72 2 84
U 83 2 85
V 78 2 86
W 100 2 87
X 78 2 88
Y 78 2 89
Z 72 2 90
[ 39 3 91
\ 28 2 92
bs "
] 39 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 67 0 97
b 67 2 98
c 67 0 99
d 67 2 100
e 67 0 101
f 38 2 102
g 67 1 103
h 67 2 104
i 33 2 105
j 33 3 106
k 67 2 107
l 33 2 108
m 100 0 109
n 67 0 110
o 67 0 111
p 67 1 112
q 67 1 113
r 44 0 114
s 61 0 115
t 44 2 116
u 67 0 117
v 61 0 118
w 94 0 119
x 67 0 120
y 61 1 121
z 56 0 122
{ 39 3 123
--- 28 3 124
} 39 3 125
--- 66 0 126
--- 33 1 161
ct 67 2 162
ps 67 2 163
fr 17 2 164
yn 67 2 165
fn 67 3 166
sc 67 3 167
cr 66 2 168
--- 28 2 169
`` 50 2 170
--- 67 0 171
--- 33 0 172
--- 33 0 173
fi 67 2 174
fl 67 2 175
en 50 0 177
\- "
dg 67 3 178
dd 67 3 179
--- 33 0 180
pg 85 3 182
--- 50 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 67 0 187
--- 100 0 188
--- 100 2 189
--- 61 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 40 2 227
--- 67 2 232
--- 83 2 233
--- 100 2 234
--- 40 2 235
--- 100 0 241
--- 33 0 245
--- 33 2 248
--- 67 0 249
--- 100 0 250
--- 67 2 251
0707070014231031251006440057030057030000010306220522627503000003000000003357post.src/devpost.add/HK name HK
fontname Helvetica-LightOblique
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 28 2 34
dq "
# 66 2 35
$ 56 2 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 66 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 66 0 60
= 66 0 61
--- 66 0 62
? 50 2 63
@ 80 3 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 67 2 82
S 61 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 89 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 66 2 94
--- 50 1 95
` 22 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 28 2 102
g 61 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 22 3 124
} 33 3 125
--- 66 0 126
--- 33 1 161
ct 56 2 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 2 168
--- 22 2 169
`` 39 2 170
--- 56 0 171
--- 39 0 172
--- 39 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 65 3 182
--- 50 0 183
--- 22 1 184
--- 39 1 185
'' 39 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
--- 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 33 2 227
--- 56 2 232
--- 78 2 233
--- 100 2 234
--- 33 2 235
--- 89 0 241
--- 22 0 245
--- 22 2 248
--- 56 0 249
--- 94 0 250
--- 50 2 251
0707070014231031261006440057030057030000010306240522627503000003000000003350post.src/devpost.add/HL name HL
fontname Helvetica-Light
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 28 2 34
dq "
# 66 2 35
$ 56 2 36
% 89 2 37
& 67 2 38
' 22 2 39
( 33 3 40
) 33 3 41
* 39 2 42
+ 66 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 66 0 60
= 66 0 61
--- 66 0 62
? 50 2 63
@ 80 3 64
A 67 2 65
B 67 2 66
C 72 2 67
D 72 2 68
E 61 2 69
F 56 2 70
G 78 2 71
H 72 2 72
I 28 2 73
J 50 2 74
K 67 2 75
L 56 2 76
M 83 2 77
N 72 2 78
O 78 2 79
P 61 2 80
Q 78 3 81
R 67 2 82
S 61 2 83
T 56 2 84
U 72 2 85
V 61 2 86
W 89 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 28 2 92
bs "
] 33 3 93
--- 66 2 94
--- 50 1 95
` 22 2 96
a 56 0 97
b 61 2 98
c 56 0 99
d 61 2 100
e 56 0 101
f 28 2 102
g 61 1 103
h 56 2 104
i 22 2 105
j 22 3 106
k 50 2 107
l 22 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 61 1 112
q 61 1 113
r 33 0 114
s 50 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 72 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 22 3 124
} 33 3 125
--- 66 0 126
--- 33 1 161
ct 56 2 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 2 168
--- 22 2 169
`` 39 2 170
--- 56 0 171
--- 39 0 172
--- 39 0 173
fi 50 2 174
fl 50 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 65 3 182
--- 50 0 183
--- 22 1 184
--- 39 1 185
'' 39 2 186
--- 56 0 187
--- 100 0 188
--- 100 2 189
--- 50 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 33 2 227
--- 56 2 232
--- 78 2 233
--- 100 2 234
--- 33 2 235
--- 89 0 241
--- 22 0 245
--- 22 2 248
--- 56 0 249
--- 94 0 250
--- 50 2 251
0707070014231031271006440057030057030000010306260522627503000003000000003364post.src/devpost.add/HY name HY
fontname Helvetica-BlackOblique
ligatures fi fl 0
spacewidth 33
charset
! 33 2 33
" 50 2 34
dq "
# 66 2 35
$ 67 2 36
% 100 2 37
& 89 2 38
' 28 2 39
( 39 3 40
) 39 3 41
* 56 2 42
+ 66 0 43
, 33 1 44
hy 33 0 45
- "
. 33 0 46
/ 28 2 47
0 67 2 48
1 67 2 49
2 67 2 50
3 67 2 51
4 67 2 52
5 67 2 53
6 67 2 54
7 67 2 55
8 67 2 56
9 67 2 57
: 33 0 58
; 33 1 59
--- 66 0 60
= 66 0 61
--- 66 0 62
? 61 2 63
@ 74 3 64
A 78 2 65
B 78 2 66
C 78 2 67
D 78 2 68
E 72 2 69
F 67 2 70
G 83 2 71
H 83 2 72
I 39 2 73
J 67 2 74
K 83 2 75
L 67 2 76
M 94 2 77
N 83 2 78
O 83 2 79
P 72 2 80
Q 83 3 81
R 78 2 82
S 72 2 83
T 72 2 84
U 83 2 85
V 78 2 86
W 100 2 87
X 78 2 88
Y 78 2 89
Z 72 2 90
[ 39 3 91
\ 28 2 92
bs "
] 39 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 67 0 97
b 67 2 98
c 67 0 99
d 67 2 100
e 67 0 101
f 38 2 102
g 67 1 103
h 67 2 104
i 33 2 105
j 33 3 106
k 67 2 107
l 33 2 108
m 100 0 109
n 67 0 110
o 67 0 111
p 67 1 112
q 67 1 113
r 44 0 114
s 61 0 115
t 44 2 116
u 67 0 117
v 61 0 118
w 94 0 119
x 67 0 120
y 61 1 121
z 56 0 122
{ 39 3 123
--- 28 3 124
} 39 3 125
--- 66 0 126
--- 33 1 161
ct 67 2 162
ps 67 2 163
fr 17 2 164
yn 67 2 165
fn 67 3 166
sc 67 3 167
cr 66 2 168
--- 28 2 169
`` 50 2 170
--- 67 0 171
--- 33 0 172
--- 33 0 173
fi 67 2 174
fl 67 2 175
en 50 0 177
\- "
dg 67 3 178
dd 67 3 179
--- 33 0 180
pg 85 3 182
--- 50 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 67 0 187
--- 100 0 188
--- 100 2 189
--- 61 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 100 2 225
--- 40 2 227
--- 67 2 232
--- 83 2 233
--- 100 2 234
--- 40 2 235
--- 100 0 241
--- 33 0 245
--- 33 2 248
--- 67 0 249
--- 100 0 250
--- 67 2 251
0707070014231031301006440057030057030000010306400522627503000003000000004160post.src/devpost.add/MU fontname Sonata
name MU
charset
--- 15 0 32
--- 21 0 33
--- 51 2 34
--- 22 1 35
--- 51 3 36
--- 52 1 37
--- 61 3 38
--- 13 0 39
--- 17 2 40
--- 17 2 41
--- 36 0 42
--- 30 0 43
--- 18 1 44
--- 30 0 45
--- 9 0 46
--- 17 2 47
--- 36 1 48
--- 25 1 49
--- 34 1 50
--- 32 1 51
--- 33 1 52
--- 30 1 53
--- 33 1 54
--- 34 1 55
--- 33 1 56
--- 33 1 57
--- 15 1 58
--- 27 2 59
--- 100 2 61
--- 42 0 62
--- 69 2 63
--- 20 0 64
--- 30 1 65
--- 67 2 66
--- 42 1 67
--- 81 0 68
--- 30 1 69
--- 83 2 70
--- 15 0 71
--- 30 1 72
--- 11 0 73
--- 0 1 74
--- 0 1 75
--- 41 1 76
--- 59 0 77
--- 30 0 79
--- 80 1 80
--- 30 3 81
--- 20 3 82
--- 60 3 83
--- 62 0 84
--- 66 2 85
--- 72 2 86
--- 61 0 87
--- 30 1 88
--- 56 1 89
--- 65 3 90
--- 15 2 91
--- 0 2 92
--- 46 2 93
--- 6 2 94
--- 50 0 95
--- 50 0 96
--- 30 3 97
--- 20 3 98
--- 42 1 99
--- 75 0 100
--- 55 3 101
--- 52 3 102
--- 14 2 103
--- 30 3 104
--- 10 1 105
--- 0 2 106
--- 0 2 107
--- 4 2 108
--- 6 0 109
--- 18 1 110
--- 12 1 111
--- 45 1 112
--- 30 3 113
--- 56 3 114
--- 23 0 115
--- 52 2 116
--- 66 1 117
--- 26 2 118
--- 41 0 119
--- 56 3 120
--- 30 3 121
--- 29 0 122
--- 13 2 123
--- 0 1 124
--- 46 2 125
--- 34 0 126
--- 17 2 160
--- 79 2 161
--- 25 0 162
--- 24 0 163
--- 21 0 164
--- 26 0 165
--- 23 0 166
--- 30 3 167
--- 21 3 168
--- 15 2 169
--- 25 0 170
--- 8 2 172
--- 30 0 173
--- 13 0 174
--- 30 1 175
--- 23 0 176
--- 30 1 177
--- 30 0 178
--- 34 0 179
--- 30 3 180
--- 85 0 181
--- 31 0 183
--- 120 1 184
--- 82 1 185
--- 37 1 186
--- 22 0 187
--- 23 0 188
--- 48 0 189
--- 30 2 190
--- 30 3 191
--- 30 0 192
--- 20 0 193
--- 41 2 194
--- 57 2 195
--- 78 3 196
--- 14 1 197
--- 56 3 198
--- 0 0 199
--- 0 1 200
--- 28 2 201
--- 28 0 202
--- 26 1 206
--- 30 0 207
--- 30 0 208
--- 30 0 209
--- 26 2 210
--- 46 2 211
--- 61 2 212
--- 28 2 214
--- 56 2 215
--- 47 2 217
--- 56 2 218
--- 27 0 220
--- 50 2 221
--- 44 1 222
--- 23 0 224
--- 30 1 225
--- 30 1 226
--- 15 0 227
--- 7 1 228
--- 35 3 229
--- 56 1 231
--- 28 0 232
--- 9 1 233
--- 30 3 234
--- 105 3 236
--- 15 1 237
--- 31 0 238
--- 30 1 239
--- 0 2 240
--- 4 2 241
--- 37 2 242
--- 28 0 243
--- 28 3 244
--- 0 0 246
--- 30 0 250
--- 0 1 251
0707070014231031311006440057030057030000010306430522627503000003000000003347post.src/devpost.add/OA fontname Optima-Regular
name OA
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 33 2 34
dq "
# 61 2 35
$ 56 2 36
% 89 2 37
& 72 2 38
' 28 2 39
( 28 3 40
) 28 3 41
* 44 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 39 2 63
@ 80 3 64
A 67 2 65
B 61 2 66
C 67 2 67
D 78 2 68
E 50 2 69
F 50 2 70
G 78 2 71
H 78 2 72
I 28 2 73
J 28 2 74
K 61 2 75
L 50 2 76
M 89 2 77
N 78 2 78
O 83 2 79
P 56 2 80
Q 83 3 81
R 61 2 82
S 50 2 83
T 56 2 84
U 78 2 85
V 67 2 86
W 100 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 50 2 92
bs "
] 33 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 50 0 101
f 28 2 102
g 50 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 39 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 78 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 33 3 124
} 33 3 125
--- 61 0 126
--- 33 1 161
ct 56 2 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 50 3 167
cr 56 2 168
--- 28 2 169
`` 44 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 28 0 180
pg 80 3 182
--- 61 0 183
--- 28 1 184
--- 44 1 185
'' 44 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 39 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 83 2 225
--- 32 2 227
--- 50 2 232
--- 83 2 233
--- 100 2 234
--- 34 2 235
--- 78 0 241
--- 28 0 245
--- 28 2 248
--- 56 0 249
--- 89 0 250
--- 56 2 251
0707070014231031321006440057030057030000010306450522627503100003000000003345post.src/devpost.add/OB name OB
fontname Optima-Bold
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 33 2 34
dq "
# 61 2 35
$ 56 2 36
% 100 2 37
& 72 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 44 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 39 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 75 3 64
A 67 2 65
B 61 2 66
C 67 2 67
D 78 2 68
E 50 2 69
F 50 2 70
G 78 2 71
H 78 2 72
I 33 2 73
J 33 2 74
K 61 2 75
L 50 2 76
M 89 2 77
N 78 2 78
O 83 2 79
P 56 2 80
Q 83 3 81
R 61 2 82
S 50 2 83
T 56 2 84
U 78 2 85
V 67 2 86
W 100 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 52 2 92
bs "
] 33 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 50 0 101
f 32 2 102
g 50 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 39 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 78 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 61 3 124
} 33 3 125
--- 61 0 126
--- 33 1 161
ct 56 2 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 2 168
--- 28 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 61 2 174
fl 61 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 70 3 182
--- 61 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 44 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 89 2 225
--- 33 2 227
--- 50 2 232
--- 83 2 233
--- 100 2 234
--- 34 2 235
--- 78 0 241
--- 28 0 245
--- 28 2 248
--- 56 0 249
--- 89 0 250
--- 56 2 251
0707070014231031331006440057030057030000010306600522627503100003000000003347post.src/devpost.add/OI name OI
fontname Optima-Oblique
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 33 2 34
dq "
# 61 2 35
$ 56 2 36
% 89 2 37
& 72 2 38
' 28 2 39
( 28 3 40
) 28 3 41
* 44 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 28 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 39 2 63
@ 80 3 64
A 67 2 65
B 61 2 66
C 67 2 67
D 78 2 68
E 50 2 69
F 50 2 70
G 78 2 71
H 78 2 72
I 28 2 73
J 28 2 74
K 61 2 75
L 50 2 76
M 89 2 77
N 78 2 78
O 83 2 79
P 56 2 80
Q 83 3 81
R 61 2 82
S 50 2 83
T 56 2 84
U 78 2 85
V 67 2 86
W 100 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 50 2 92
bs "
] 33 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 50 0 101
f 28 2 102
g 50 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 33 0 114
s 39 0 115
t 28 2 116
u 56 0 117
v 50 0 118
w 78 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 33 3 124
} 33 3 125
--- 61 0 126
--- 33 1 161
ct 56 2 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 50 3 167
cr 56 2 168
--- 28 2 169
`` 44 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 56 2 174
fl 56 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 28 0 180
pg 80 3 182
--- 61 0 183
--- 28 1 184
--- 44 1 185
'' 44 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 39 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 83 2 225
--- 32 2 227
--- 50 2 232
--- 83 2 233
--- 100 2 234
--- 34 2 235
--- 78 0 241
--- 28 0 245
--- 28 2 248
--- 56 0 249
--- 89 0 250
--- 56 2 251
0707070014231031341006440057030057030000010306620522627503100003000000003354post.src/devpost.add/OX name OX
fontname Optima-BoldOblique
ligatures fi fl 0
spacewidth 28
charset
! 33 2 33
" 33 2 34
dq "
# 61 2 35
$ 56 2 36
% 100 2 37
& 72 2 38
' 28 2 39
( 33 3 40
) 33 3 41
* 44 2 42
+ 61 0 43
, 28 1 44
hy 33 0 45
- "
. 28 0 46
/ 39 2 47
0 56 2 48
1 56 2 49
2 56 2 50
3 56 2 51
4 56 2 52
5 56 2 53
6 56 2 54
7 56 2 55
8 56 2 56
9 56 2 57
: 28 0 58
; 28 1 59
--- 61 0 60
= 61 0 61
--- 61 0 62
? 44 2 63
@ 75 3 64
A 67 2 65
B 61 2 66
C 67 2 67
D 78 2 68
E 50 2 69
F 50 2 70
G 78 2 71
H 78 2 72
I 33 2 73
J 33 2 74
K 61 2 75
L 50 2 76
M 89 2 77
N 78 2 78
O 83 2 79
P 56 2 80
Q 83 3 81
R 61 2 82
S 50 2 83
T 56 2 84
U 78 2 85
V 67 2 86
W 100 2 87
X 61 2 88
Y 61 2 89
Z 61 2 90
[ 33 3 91
\ 52 2 92
bs "
] 33 3 93
--- 61 2 94
--- 50 1 95
` 28 2 96
a 50 0 97
b 56 2 98
c 50 0 99
d 56 2 100
e 50 0 101
f 32 2 102
g 50 1 103
h 56 2 104
i 28 2 105
j 28 3 106
k 50 2 107
l 28 2 108
m 83 0 109
n 56 0 110
o 56 0 111
p 56 1 112
q 56 1 113
r 39 0 114
s 39 0 115
t 33 2 116
u 56 0 117
v 50 0 118
w 78 0 119
x 50 0 120
y 50 1 121
z 50 0 122
{ 33 3 123
--- 61 3 124
} 33 3 125
--- 61 0 126
--- 33 1 161
ct 56 2 162
ps 56 2 163
fr 17 2 164
yn 56 2 165
fn 56 3 166
sc 56 3 167
cr 56 2 168
--- 28 2 169
`` 50 2 170
--- 50 0 171
--- 33 0 172
--- 33 0 173
fi 61 2 174
fl 61 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 28 0 180
pg 70 3 182
--- 61 0 183
--- 28 1 184
--- 50 1 185
'' 50 2 186
--- 50 0 187
--- 100 0 188
--- 100 2 189
--- 44 1 191
ga 33 2 193
\` "
aa 33 2 194
\' "
^a 33 2 195
^ "
~a 33 2 196
~ "
-a 33 2 197
Ua 33 2 198
.a 33 2 199
:a 33 2 200
oa 33 2 202
,a 33 1 203
"a 33 2 205
Ca 33 1 206
va 33 2 207
em 100 0 208
--- 89 2 225
--- 33 2 227
--- 50 2 232
--- 83 2 233
--- 100 2 234
--- 34 2 235
--- 78 0 241
--- 28 0 245
--- 28 2 248
--- 56 0 249
--- 89 0 250
--- 56 2 251
0707070014231031351006440057030057030000010306640522627503100003000000003366post.src/devpost.add/a1 name a1
fontname CenturyOldStyleAbstract-Regular
ligatures fi fl 0
spacewidth 25
charset
! 26 2 33
" 40 2 34
dq "
# 50 2 35
$ 50 3 36
% 58 2 37
& 79 2 38
' 21 2 39
( 40 3 40
) 40 3 41
* 50 2 42
+ 50 0 43
, 25 1 44
hy 24 0 45
- "
. 25 0 46
/ 53 3 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 40 2 63
@ 85 2 64
A 66 2 65
B 69 2 66
C 69 2 67
D 76 2 68
E 66 2 69
F 61 2 70
G 74 2 71
H 76 2 72
I 34 2 73
J 40 3 74
K 71 2 75
L 58 2 76
M 95 2 77
N 76 2 78
O 76 2 79
P 61 2 80
Q 76 3 81
R 63 2 82
S 55 2 83
T 63 2 84
U 74 2 85
V 66 2 86
W 95 2 87
X 63 2 88
Y 63 2 89
Z 58 2 90
[ 40 3 91
\ 25 2 92
bs "
] 40 3 93
--- 50 2 94
--- 50 1 95
` 21 2 96
a 47 0 97
b 55 2 98
c 47 0 99
d 55 2 100
e 50 0 101
f 29 2 102
g 55 1 103
h 58 2 104
i 26 2 105
j 24 3 106
k 55 2 107
l 26 2 108
m 84 0 109
n 55 0 110
o 53 0 111
p 53 1 112
q 55 1 113
r 40 0 114
s 45 0 115
t 31 2 116
u 55 0 117
v 47 0 118
w 71 0 119
x 53 0 120
y 50 1 121
z 45 0 122
{ 40 3 123
--- 25 2 124
} 40 3 125
--- 50 0 126
--- 26 1 161
ct 50 2 162
ps 50 2 163
fr 9 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 21 2 169
`` 40 2 170
--- 47 0 171
--- 29 0 172
--- 29 0 173
fi 58 2 174
fl 55 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 25 0 180
pg 66 3 182
--- 66 0 183
--- 21 1 184
--- 40 1 185
'' 40 2 186
--- 47 0 187
--- 100 0 188
--- 92 2 189
--- 40 1 191
ga 29 2 193
\` "
aa 29 2 194
\' "
^a 37 2 195
^ "
~a 50 2 196
~ "
-a 47 2 197
Ua 50 2 198
.a 26 2 199
:a 47 2 200
oa 34 2 202
,a 34 1 203
"a 40 2 205
Ca 37 1 206
va 37 2 207
em 100 0 208
--- 103 2 225
--- 34 2 227
--- 58 2 232
--- 76 2 233
--- 108 2 234
--- 34 2 235
--- 76 0 241
--- 26 0 245
--- 26 2 248
--- 53 0 249
--- 84 0 250
--- 58 2 251
0707070014231031361006440057030057030000010306660522627503100003000000003365post.src/devpost.add/a2 name a2
fontname CenturyOldStyleAbstract-Italic
ligatures fi fl 0
spacewidth 27
charset
! 31 2 33
" 35 2 34
dq "
# 54 0 35
$ 54 3 36
% 70 2 37
& 75 2 38
' 21 2 39
( 46 3 40
) 46 3 41
* 59 2 42
+ 54 0 43
, 27 1 44
hy 25 0 45
- "
. 27 0 46
/ 46 3 47
0 54 2 48
1 54 0 49
2 54 2 50
3 54 2 51
4 54 0 52
5 54 0 53
6 54 2 54
7 54 0 55
8 54 2 56
9 54 2 57
: 27 0 58
; 27 1 59
--- 54 0 60
= 54 0 61
--- 54 0 62
? 48 2 63
@ 78 2 64
A 67 2 65
B 68 2 66
C 65 2 67
D 75 2 68
E 66 2 69
F 61 2 70
G 72 2 71
H 77 2 72
I 36 2 73
J 34 3 74
K 68 2 75
L 58 2 76
M 90 2 77
N 74 2 78
O 74 2 79
P 59 2 80
Q 75 3 81
R 65 2 82
S 57 2 83
T 63 2 84
U 72 2 85
V 62 2 86
W 88 2 87
X 64 2 88
Y 61 2 89
Z 57 2 90
[ 46 3 91
\ 27 2 92
bs "
] 46 3 93
--- 54 2 94
--- 50 1 95
` 21 2 96
a 54 0 97
b 46 2 98
c 41 0 99
d 50 2 100
e 42 0 101
f 25 3 102
g 45 1 103
h 52 2 104
i 31 2 105
j 27 3 106
k 48 2 107
l 27 2 108
m 82 0 109
n 56 0 110
o 47 0 111
p 50 1 112
q 49 1 113
r 40 0 114
s 35 0 115
t 30 0 116
u 56 0 117
v 47 0 118
w 69 0 119
x 41 0 120
y 40 1 121
z 39 0 122
{ 46 3 123
--- 27 2 124
} 46 3 125
--- 54 0 126
--- 31 1 161
ct 54 0 162
ps 54 2 163
fr 5 2 164
yn 54 0 165
fn 54 3 166
sc 59 3 167
cr 54 0 168
--- 19 2 169
`` 37 2 170
--- 45 0 171
--- 29 0 172
--- 29 0 173
fi 52 3 174
fl 52 3 175
en 50 0 177
\- "
dg 59 3 178
dd 59 3 179
--- 27 0 180
pg 61 3 182
--- 61 0 183
--- 21 1 184
--- 37 1 185
'' 37 2 186
--- 45 0 187
--- 100 0 188
--- 103 2 189
--- 48 1 191
ga 39 2 193
\` "
aa 31 2 194
\' "
^a 40 2 195
^ "
~a 51 2 196
~ "
-a 47 0 197
Ua 51 2 198
.a 26 2 199
:a 46 2 200
oa 32 2 202
,a 35 1 203
"a 39 2 205
Ca 34 1 206
va 40 2 207
em 100 0 208
--- 94 2 225
--- 32 2 227
--- 58 2 232
--- 74 2 233
--- 107 2 234
--- 32 2 235
--- 69 0 241
--- 31 0 245
--- 27 2 248
--- 47 0 249
--- 71 0 250
--- 53 2 251
0707070014231031371006440057030057030000010307000522627503100003000000003367post.src/devpost.add/c1 name c1
fontname CenturyOldStyleCondensed-Regular
ligatures fi fl 0
spacewidth 25
charset
! 26 2 33
" 40 2 34
dq "
# 50 2 35
$ 50 3 36
% 58 2 37
& 79 2 38
' 21 2 39
( 40 3 40
) 40 3 41
* 50 2 42
+ 50 0 43
, 25 1 44
hy 24 0 45
- "
. 25 0 46
/ 53 3 47
0 50 2 48
1 50 2 49
2 50 2 50
3 50 2 51
4 50 2 52
5 50 2 53
6 50 2 54
7 50 2 55
8 50 2 56
9 50 2 57
: 25 0 58
; 25 1 59
--- 50 0 60
= 50 0 61
--- 50 0 62
? 40 2 63
@ 85 2 64
A 66 2 65
B 69 2 66
C 69 2 67
D 76 2 68
E 66 2 69
F 61 2 70
G 74 2 71
H 76 2 72
I 34 2 73
J 40 3 74
K 71 2 75
L 58 2 76
M 95 2 77
N 76 2 78
O 76 2 79
P 61 2 80
Q 76 3 81
R 63 2 82
S 55 2 83
T 63 2 84
U 74 2 85
V 66 2 86
W 95 2 87
X 63 2 88
Y 63 2 89
Z 58 2 90
[ 40 3 91
\ 25 2 92
bs "
] 40 3 93
--- 50 2 94
--- 50 1 95
` 21 2 96
a 47 0 97
b 55 2 98
c 47 0 99
d 55 2 100
e 50 0 101
f 29 2 102
g 55 1 103
h 58 2 104
i 26 2 105
j 24 3 106
k 55 2 107
l 26 2 108
m 84 0 109
n 55 0 110
o 53 0 111
p 53 1 112
q 55 1 113
r 40 0 114
s 45 0 115
t 31 2 116
u 55 0 117
v 47 0 118
w 71 0 119
x 53 0 120
y 50 1 121
z 45 0 122
{ 40 3 123
--- 25 2 124
} 40 3 125
--- 50 0 126
--- 26 1 161
ct 50 2 162
ps 50 2 163
fr 9 2 164
yn 50 2 165
fn 50 3 166
sc 50 3 167
cr 50 2 168
--- 21 2 169
`` 40 2 170
--- 47 0 171
--- 29 0 172
--- 29 0 173
fi 58 2 174
fl 55 2 175
en 50 0 177
\- "
dg 50 3 178
dd 50 3 179
--- 25 0 180
pg 66 3 182
--- 66 0 183
--- 21 1 184
--- 40 1 185
'' 40 2 186
--- 47 0 187
--- 100 0 188
--- 92 2 189
--- 40 1 191
ga 29 2 193
\` "
aa 29 2 194
\' "
^a 37 2 195
^ "
~a 50 2 196
~ "
-a 47 2 197
Ua 50 2 198
.a 26 2 199
:a 47 2 200
oa 34 2 202
,a 34 1 203
"a 40 2 205
Ca 37 1 206
va 37 2 207
em 100 0 208
--- 103 2 225
--- 34 2 227
--- 58 2 232
--- 76 2 233
--- 108 2 234
--- 34 2 235
--- 76 0 241
--- 26 0 245
--- 26 2 248
--- 53 0 249
--- 84 0 250
--- 58 2 251
0707070014231031401006440057030057030000010307020522627503100003000000003366post.src/devpost.add/c2 name c2
fontname CenturyOldStyleCondensed-Italic
ligatures fi fl 0
spacewidth 27
charset
! 31 2 33
" 35 2 34
dq "
# 54 0 35
$ 54 3 36
% 70 2 37
& 75 2 38
' 21 2 39
( 46 3 40
) 46 3 41
* 59 2 42
+ 54 0 43
, 27 1 44
hy 25 0 45
- "
. 27 0 46
/ 46 3 47
0 54 2 48
1 54 0 49
2 54 2 50
3 54 2 51
4 54 0 52
5 54 0 53
6 54 2 54
7 54 0 55
8 54 2 56
9 54 2 57
: 27 0 58
; 27 1 59
--- 54 0 60
= 54 0 61
--- 54 0 62
? 48 2 63
@ 78 2 64
A 67 2 65
B 68 2 66
C 65 2 67
D 75 2 68
E 66 2 69
F 61 2 70
G 72 2 71
H 77 2 72
I 36 2 73
J 34 3 74
K 68 2 75
L 58 2 76
M 90 2 77
N 74 2 78
O 74 2 79
P 59 2 80
Q 75 3 81
R 65 2 82
S 57 2 83
T 63 2 84
U 72 2 85
V 62 2 86
W 88 2 87
X 64 2 88
Y 61 2 89
Z 57 2 90
[ 46 3 91
\ 27 2 92
bs "
] 46 3 93
--- 54 2 94
--- 50 1 95
` 21 2 96
a 54 0 97
b 46 2 98
c 41 0 99
d 50 2 100
e 42 0 101
f 25 3 102
g 45 1 103
h 52 2 104
i 31 2 105
j 27 3 106
k 48 2 107
l 27 2 108
m 82 0 109
n 56 0 110
o 47 0 111
p 50 1 112
q 49 1 113
r 40 0 114
s 35 0 115
t 30 0 116
u 56 0 117
v 47 0 118
w 69 0 119
x 41 0 120
y 40 1 121
z 39 0 122
{ 46 3 123
--- 27 2 124
} 46 3 125
--- 54 0 126
--- 31 1 161
ct 54 0 162
ps 54 2 163
fr 5 2 164
yn 54 0 165
fn 54 3 166
sc 59 3 167
cr 54 0 168
--- 19 2 169
`` 37 2 170
--- 45 0 171
--- 29 0 172
--- 29 0 173
fi 52 3 174
fl 52 3 175
en 50 0 177
\- "
dg 59 3 178
dd 59 3 179
--- 27 0 180
pg 61 3 182
--- 61 0 183
--- 21 1 184
--- 37 1 185
'' 37 2 186
--- 45 0 187
--- 100 0 188
--- 103 2 189
--- 48 1 191
ga 39 2 193
\` "
aa 31 2 194
\' "
^a 40 2 195
^ "
~a 51 2 196
~ "
-a 47 0 197
Ua 51 2 198
.a 26 2 199
:a 46 2 200
oa 32 2 202
,a 35 1 203
"a 39 2 205
Ca 34 1 206
va 40 2 207
em 100 0 208
--- 94 2 225
--- 32 2 227
--- 58 2 232
--- 74 2 233
--- 107 2 234
--- 32 2 235
--- 69 0 241
--- 31 0 245
--- 27 2 248
--- 47 0 249
--- 71 0 250
--- 53 2 251
0707070014231031411006440057030057030000010307040522627503100003000000003366post.src/devpost.add/c3 name c3
fontname CenturyOldStyleCondensed-Bold
ligatures fi fl 0
spacewidth 33
charset
! 34 2 33
" 40 2 34
dq "
# 56 2 35
$ 66 3 36
% 79 2 37
& 84 2 38
' 28 2 39
( 39 3 40
) 39 3 41
* 56 2 42
+ 56 0 43
, 33 1 44
hy 32 0 45
- "
. 33 0 46
/ 51 3 47
0 66 2 48
1 66 2 49
2 66 2 50
3 66 2 51
4 66 2 52
5 66 2 53
6 66 2 54
7 66 2 55
8 66 2 56
9 66 2 57
: 33 0 58
; 33 1 59
--- 56 0 60
= 56 0 61
--- 56 0 62
? 47 2 63
@ 72 2 64
A 69 2 65
B 76 2 66
C 70 2 67
D 80 2 68
E 71 2 69
F 64 2 70
G 78 2 71
H 83 2 72
I 41 2 73
J 48 2 74
K 76 2 75
L 63 2 76
M 94 2 77
N 80 2 78
O 81 2 79
P 72 2 80
Q 81 3 81
R 72 2 82
S 61 2 83
T 60 2 84
U 78 2 85
V 64 2 86
W 97 2 87
X 68 2 88
Y 67 2 89
Z 59 2 90
[ 39 3 91
\ 28 2 92
bs "
] 39 3 93
--- 56 2 94
--- 50 1 95
` 28 2 96
a 53 0 97
b 60 2 98
c 52 0 99
d 62 2 100
e 54 0 101
f 30 2 102
g 52 3 103
h 62 2 104
i 31 2 105
j 27 3 106
k 60 2 107
l 30 2 108
m 92 0 109
n 62 0 110
o 57 0 111
p 61 1 112
q 60 1 113
r 44 0 114
s 50 0 115
t 33 2 116
u 63 0 117
v 50 0 118
w 74 0 119
x 53 0 120
y 49 1 121
z 44 0 122
{ 39 3 123
--- 28 2 124
} 39 3 125
--- 56 0 126
--- 34 1 161
ct 66 2 162
ps 66 2 163
fr 10 2 164
yn 66 2 165
fn 66 3 166
sc 56 3 167
cr 66 2 168
--- 22 2 169
`` 52 2 170
--- 58 0 171
--- 37 0 172
--- 37 0 173
fi 62 2 174
fl 61 2 175
en 50 0 177
\- "
dg 56 3 178
dd 56 3 179
--- 33 0 180
pg 62 3 182
--- 62 0 183
--- 28 1 184
--- 52 1 185
'' 52 2 186
--- 58 0 187
--- 100 0 188
--- 118 2 189
--- 47 1 191
ga 34 2 193
\` "
aa 34 2 194
\' "
^a 45 2 195
^ "
~a 56 2 196
~ "
-a 53 2 197
Ua 56 2 198
.a 29 2 199
:a 51 2 200
oa 34 2 202
,a 37 1 203
"a 50 2 205
Ca 38 1 206
va 45 2 207
em 100 0 208
--- 109 2 225
--- 40 2 227
--- 63 2 232
--- 81 2 233
--- 114 2 234
--- 40 2 235
--- 83 0 241
--- 31 0 245
--- 30 2 248
--- 57 0 249
--- 90 0 250
--- 58 2 251
0707070014231031421006440057030057030000010307060522627503100004400000002013post.src/devpost.add/devpost.add.mk MAKE=/bin/make
MAKEFILE=devpost.add.mk
SYSTEM=SYSV
VERSION=3.2
GROUP=bin
OWNER=bin
FONTDIR=/usr/lib/font
FONTFILES=??
all :
install : all
@if [ ! -d $(FONTDIR) ]; then \
mkdir $(FONTDIR); \
chmod 755 $(FONTDIR); \
chgrp $(GROUP) $(FONTDIR); \
chown $(OWNER) $(FONTDIR); \
fi
@if [ ! -d $(FONTDIR)/devpost ]; then \
mkdir $(FONTDIR)/devpost; \
chmod 755 $(FONTDIR)/devpost; \
chgrp $(GROUP) $(FONTDIR)/devpost; \
chown $(OWNER) $(FONTDIR)/devpost; \
fi
cp $(FONTFILES) $(FONTDIR)/devpost
@for i in $(FONTFILES); do \
chmod 644 $(FONTDIR)/devpost/$$i; \
chgrp $(GROUP) $(FONTDIR)/devpost/$$i; \
chown $(OWNER) $(FONTDIR)/devpost/$$i; \
done
clean :
clobber : clean
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^FONTDIR=.*'FONTDIR=$(FONTDIR)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014230547760407550057030057030000021527350522633074000002200000000000post.src/download 0707070014230547771006440057030057030000011527360522627503100003100000000756post.src/download/README
A simple program that scans PostScript files for %%DocumentFonts:
comments and prepends requested host resident font files to the
input. Written for Unix 4.0 lp.
Downloaded fonts are the ones named in the %%DocumentFonts: comment
and listed in a special map file (which can be selected using the
-m option). See example.map and comments in download.c for examples
of map files. By default map files and font files are in *hostfontdir.
It's initialized using HOSTDIR (file ../common/path.h).
0707070014230550001006440057030057030000011527370522627503100003500000000443post.src/download/download.h /*
*
* The font data for a printer is saved in an array of the following type.
*
*/
typedef struct map {
char *font; /* a request for this PostScript font */
char *file; /* means copy this unix file */
int downloaded; /* TRUE after *file is downloaded */
} Map;
Map *allocate();
0707070014230550061006400057030057030000011527660522633073700003600000003434post.src/download/download.mk MAKE=/bin/make
MAKEFILE=download.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
HOSTDIR=/usr/lib/font/postscript
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=download.h\
$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=download.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/tempnam.o
all : download
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
cp download $(POSTBIN)/download
@chmod 755 $(POSTBIN)/download
@chgrp $(GROUP) $(POSTBIN)/download
@chown $(OWNER) $(POSTBIN)/download
cp download.1 $(MAN1DIR)/download.1
@chmod 644 $(MAN1DIR)/download.1
@chgrp $(GROUP) $(MAN1DIR)/download.1
@chown $(OWNER) $(MAN1DIR)/download.1
clean :
rm -f *.o
clobber : clean
rm -f download
download : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o download $(OFILES)
download.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/tempnam.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk SYSTEM=$(SYSTEM) `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^HOSTDIR=.*'HOSTDIR=$(HOSTDIR)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dH.*'.ds dH $(HOSTDIR)'" \
download.1 >XXX.1; \
mv XXX.1 download.1
0707070014230550021006440057030057030000011527420522627503100003600000001664post.src/download/example.map %
% An example font map table that extends the standard collection of 13
% fonts to the 35 made popular by the LaserWriter Plus.
%
% First string is full PostScript font name, exactly as it would appear
% in a %%DocumentFonts comment. Second string is the name of the Unix
% file relative to *hostfontdir, unless that string begins with a /, in
% which case it's taken as the full pathname.
%
Palatino-Roman PA
Palatino-Italic PI
Palatino-Bold PB
Palatino-BoldItalic PX
Helvetica-Narrow Hr
Helvetica-Narrow-Oblique Hi
Helvetica-Narrow-Bold Hb
Helvetica-Narrow-BoldOblique Hx
Bookman-Light KR
Bookman-LightItalic KI
Bookman-Demi KB
Bookman-DemiItalic KX
AvantGarde-Book AR
AvantGarde-BookOblique AI
AvantGarde-Demi AB
AvantGarde-DemiOblique AX
NewCenturySchlbk-Roman NR
NewCenturySchlbk-Italic NI
NewCenturySchlbk-Bold NB
NewCenturySchlbk-BoldItalic NX
ZapfDingbats ZD
ZapfChancery-MediumItalic ZI
0707070014230550031006440057030057030000011527500522627503100003500000034165post.src/download/download.c /*
*
* download - host resident font downloader
*
* Prepends host resident fonts to PostScript input files. The program assumes
* the input files are part of a single PostScript job and that requested fonts
* can be downloaded at the start of each input file. Downloaded fonts are the
* ones named in a %%DocumentFonts: comment and listed in a special map table.
* Map table pathnames (supplied using the -m option) that begin with a / are
* taken as is. Otherwise the final pathname is built using *hostfontdir (-H
* option), *mapname (-m option), and *suffix.
*
* The map table consists of fontname-filename pairs, separated by white space.
* Comments are introduced by % (as in PostScript) and extend to the end of the
* current line. The only fonts that can be downloaded are the ones listed in
* the active map table that point the program to a readable Unix file. A request
* for an unlisted font or inaccessible file is ignored. All font requests are
* ignored if the map table can't be read. In that case the program simply copies
* the input files to stdout.
*
* An example (but not one to follow) of what can be in a map table is,
*
* %
* % Map requests for Bookman-Light to file *hostfontdir/KR
* %
*
* Bookman-Light KR % Keeping everything (including the map
* % table) in *hostfontdir seems like the
* % cleanest approach.
*
* %
* % Map Palatino-Roman to file *hostfontdir/palatino/Roman
* %
* Palatino-Roman palatino/Roman
*
* % Map ZapfDingbats to file /usr/lib/host/dingbats
*
* ZapfDingbats /usr/lib/host/dingbats
*
* Once again, file names that begin with a / are taken as is. All others have
* *hostfontdir/ prepended to the file string associated with a particular font.
*
* Map table can be associated with a printer model (e.g. a LaserWriter), a
* printer destination, or whatever - the choice is up to an administrator.
* By destination may be best if your spooler is running several private
* printers. Host resident fonts are usually purchased under a license that
* restricts their use to a limited number of printers. A font licensed for
* a single printer should only be used on that printer.
*
* Was written quickly, so there's much room for improvement. Undoubtedly should
* be a more general program (e.g. scan for other comments).
*
*/
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for temporary directory */
#include "ext.h" /* external variable declarations */
#include "download.h" /* a few special definitions */
char *temp_dir = TEMPDIR; /* temp directory - for copying stdin */
char *hostfontdir = HOSTDIR; /* host resident directory */
char *mapname = "map"; /* map table - usually in *hostfontdir */
char *suffix = ""; /* appended to the map table pathname */
Map *map = NULL; /* device font map table */
char *stringspace = NULL; /* for storing font and file strings */
int next = 0; /* next free slot in map[] */
char *residentfonts = NULL; /* list of printer resident fonts */
char *printer = NULL; /* printer name - only for Unix 4.0 lp */
char buf[2048]; /* input file line buffer */
char *comment = DOCUMENTFONTS; /* look for this comment */
int atend = FALSE; /* TRUE only if a comment says so */
FILE *fp_in = stdin; /* next input file */
FILE *fp_temp = NULL; /* for copying stdin */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* Host resident font downloader. The input files are assumed to be part of a
* single PostScript job.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* just for error messages */
init_signals(); /* sets up interrupt handling */
options(); /* first get command line options */
readmap(); /* read the font map table */
readresident(); /* and the optional resident font list */
arguments(); /* then process non-option arguments */
done(); /* and clean things up */
exit(x_stat); /* not much could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Makes sure we handle interrupts properly.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
char *optnames = "c:fm:p:r:H:T:DI";
extern char *optarg; /* used by getopt() */
extern int optind;
/*
*
* Reads and processes the command line options.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'c': /* look for this comment */
comment = optarg;
break;
case 'f': /* force a complete input file scan */
atend = TRUE;
break;
case 'm': /* printer map table name */
mapname = optarg;
break;
case 'p': /* printer name - for Unix 4.0 lp */
printer = optarg;
break;
case 'r': /* resident font list */
residentfonts = optarg;
break;
case 'H': /* host resident font directory */
hostfontdir = optarg;
break;
case 'T': /* temporary file directory */
temp_dir = optarg;
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
readmap()
{
char *path;
char *ptr;
int fd;
struct stat sbuf;
/*
*
* Initializes the map table by reading an ASCII mapping file. If mapname begins
* with a / it's the map table. Otherwise hostfontdir, mapname, and suffix are
* combined to build the final pathname. If we can open the file we read it all
* into memory, erase comments, and separate the font and file name pairs. When
* we leave next points to the next free slot in the map[] array. If it's zero
* nothing was in the file or we couldn't open it.
*
*/
if ( hostfontdir == NULL || mapname == NULL )
return;
if ( *mapname != '/' ) {
if ( (path = malloc(strlen(hostfontdir) + strlen(mapname) +
strlen(suffix) + 2)) == NULL )
error(FATAL, "no memory");
sprintf(path, "%s/%s%s", hostfontdir, mapname, suffix);
} else path = mapname;
if ( (fd = open(path, 0)) != -1 ) {
if ( fstat(fd, &sbuf) == -1 )
error(FATAL, "can't fstat %s", path);
if ( (stringspace = malloc(sbuf.st_size + 2)) == NULL )
error(FATAL, "no memory");
if ( read(fd, stringspace, sbuf.st_size) == -1 )
error(FATAL, "can't read %s", path);
close(fd);
stringspace[sbuf.st_size] = '\n'; /* just to be safe */
stringspace[sbuf.st_size+1] = '\0';
for ( ptr = stringspace; *ptr != '\0'; ptr++ ) /* erase comments */
if ( *ptr == '%' )
for ( ; *ptr != '\n' ; ptr++ )
*ptr = ' ';
for ( ptr = stringspace; ; next++ ) {
if ( (next % 50) == 0 )
map = allocate(map, next+50);
map[next].downloaded = FALSE;
map[next].font = strtok(ptr, " \t\n");
map[next].file = strtok(ptr = NULL, " \t\n");
if ( map[next].font == NULL )
break;
if ( map[next].file == NULL )
error(FATAL, "map table format error - check %s", path);
} /* End for */
} /* End if */
} /* End of readmap */
/*****************************************************************************/
readresident()
{
FILE *fp;
char *path;
int ch;
int n;
/*
*
* Reads a file that lists the resident fonts for a particular printer and marks
* each font as already downloaded. Nothing's done if the file can't be read or
* there's no mapping file. Comments, as in the map file, begin with a % and
* extend to the end of the line. Added for Unix 4.0 lp.
*
*/
if ( next == 0 || (printer == NULL && residentfonts == NULL) )
return;
if ( printer != NULL ) { /* use Unix 4.0 lp pathnames */
sprintf(buf, "/etc/lp/printers/%s/residentfonts", printer);
path = buf;
} else path = residentfonts;
if ( (fp = fopen(path, "r")) != NULL ) {
while ( fscanf(fp, "%s", buf) != EOF )
if ( buf[0] == '%' )
while ( (ch = getc(fp)) != EOF && ch != '\n' ) ;
else if ( (n = lookup(buf)) < next )
map[n].downloaded = TRUE;
fclose(fp);
} /* End if */
} /* End of readresident */
/*****************************************************************************/
arguments()
{
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll translate stdin. Assumes input files are part of a single PostScript
* job and fonts can be downloaded at the start of each file.
*
*/
if ( argc < 1 )
download();
else {
while ( argc > 0 ) {
fp_temp = NULL;
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
download();
if ( fp_in != stdin )
fclose(fp_in);
if ( fp_temp != NULL )
fclose(fp_temp);
argc--;
argv++;
} /* End while */
} /* End else */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Clean things up before we quit.
*
*/
if ( temp_file != NULL )
unlink(temp_file);
} /* End of done */
/*****************************************************************************/
download()
{
int infontlist = FALSE;
/*
*
* If next is zero the map table is empty and all we do is copy the input file
* to stdout. Otherwise we read the input file looking for %%DocumentFonts: or
* continuation comments, add any accessible fonts to the output file, and then
* append the input file. When reading stdin we append lines to fp_temp and
* recover them when we're ready to copy the input file. fp_temp will often
* only contain part of stdin - if there's no %%DocumentFonts: (atend) comment
* we stop reading fp_in after the header.
*
*/
if ( next > 0 ) {
if ( fp_in == stdin ) {
if ( (temp_file = tempnam(temp_dir, "post")) == NULL )
error(FATAL, "can't generate temp file name");
if ( (fp_temp = fopen(temp_file, "w+r")) == NULL )
error(FATAL, "can't open %s", temp_file);
unlink(temp_file);
temp_file = NULL;
} /* End if */
while ( fgets(buf, sizeof(buf), fp_in) != NULL ) {
if ( fp_temp != NULL )
fprintf(fp_temp, "%s", buf);
if ( buf[0] != '%' || buf[1] != '%' ) {
if ( (buf[0] != '%' || buf[1] != '!') && atend == FALSE )
break;
infontlist = FALSE;
} else if ( strncmp(buf, comment, strlen(comment)) == 0 ) {
copyfonts(buf);
infontlist = TRUE;
} else if ( buf[2] == '+' && infontlist == TRUE )
copyfonts(buf);
else infontlist = FALSE;
} /* End while */
} /* End if */
copyinput();
} /* End of download */
/*****************************************************************************/
copyfonts(list)
char *list;
{
char *font;
char *path;
int n;
/*
*
* list points to a %%DocumentFonts: or continuation comment. What follows the
* the keyword will be a list of fonts separated by white space (or (atend)).
* Look for each font in the map table and if it's found copy the font file to
* stdout (once only).
*
*/
strtok(list, " \n"); /* skip to the font list */
while ( (font = strtok(NULL, " \t\n")) != NULL ) {
if ( strcmp(font, ATEND) == 0 ) {
atend = TRUE;
break;
} /* End if */
if ( (n = lookup(font)) < next ) {
if ( *map[n].file != '/' ) {
if ( (path = malloc(strlen(hostfontdir)+strlen(map[n].file)+2)) == NULL )
error(FATAL, "no memory");
sprintf(path, "%s/%s", hostfontdir, map[n].file);
cat(path);
free(path);
} else cat(map[n].file);
map[n].downloaded = TRUE;
} /* End if */
} /* End while */
} /* End of copyfonts */
/*****************************************************************************/
copyinput()
{
/*
*
* Copies the input file to stdout. If fp_temp isn't NULL seek to the start and
* add it to the output file - it's a partial (or complete) copy of stdin made
* by download(). Then copy fp_in, but only seek to the start if it's not stdin.
*
*/
if ( fp_temp != NULL ) {
fseek(fp_temp, 0L, 0);
while ( fgets(buf, sizeof(buf), fp_temp) != NULL )
printf("%s", buf);
} /* End if */
if ( fp_in != stdin )
fseek(fp_in, 0L, 0);
while ( fgets(buf, sizeof(buf), fp_in) != NULL )
printf("%s", buf);
} /* End of copyinput */
/*****************************************************************************/
lookup(font)
char *font;
{
int i;
/*
*
* Looks for *font in the map table. Return the map table index if found and
* not yet downloaded - otherwise return next.
*
*/
for ( i = 0; i < next; i++ )
if ( strcmp(font, map[i].font) == 0 ) {
if ( map[i].downloaded == TRUE )
i = next;
break;
} /* End if */
return(i);
} /* End of lookup */
/*****************************************************************************/
Map *allocate(ptr, num)
Map *ptr;
int num;
{
/*
*
* Allocates space for num Map elements. Calls malloc() if ptr is NULL and
* realloc() otherwise.
*
*/
if ( ptr == NULL )
ptr = (Map *)malloc(num * sizeof(Map));
else ptr = (Map *)realloc(ptr, num * sizeof(Map));
if ( ptr == NULL )
error(FATAL, "no map memory");
return(ptr);
} /* End of allocate */
/*****************************************************************************/
0707070014230550121006400057030057030000011530300522633074000003500000007101post.src/download/download.1 .ds dH /usr/lib/font/postscript
.TH DOWNLOAD 1 "DWB 3.2"
.SH NAME
download \- host-resident PostScript font download
.SH SYNOPSIS
\*(mBdownload\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B download
prepends host-resident fonts to
.I files
and writes the results on the standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
.B download
assumes the input
.I files
are a single PostScript job and that requested fonts
can be included at the start of each input
.IR file .
The following
.I options
are understood:
.TP 1.0i
.OP \-f
Force a complete scan of each input
.I file.
In the absence of an explicit comment pointing
.I download
to the end of the file, the default scan stops
immediately after the PostScript header comments.
.TP 1.0i
.OP \-m name
Use
.I name
as the font map table.
A
.I name
that begins with
.MW /
is the full pathname of the
map table.
Otherwise
.I name
is relative to the host font directory.
.TP 1.0i
.OP \-p printer
Read the printer-resident font list from file
.br
.MI /etc/lp/printers/ printer /residentfonts \f1.
.br
Fonts named in this file will not be downloaded.
The
.OP \-p
option is for use with Unix 4.0 lp.
Other spoolers should use the
.OP \-r
option.
.TP 1.0i
.OP \-r file
Read the list of printer-resident fonts from
.I file.
Fonts named in this file will not be downloaded.
.TP 1.0i
.OP \-H dir
Use
.I dir
as the host font directory.
The default is
.MR \*(dH .
.TP 1.0i
.OP \-T dir
Use
.I dir
as the temporary file directory.
Only used to make a copy of standard input.
By default
.I dir
is set to
.MR /tmp .
.PP
Requested fonts are named in a
.MW %%DocumentFonts:
comment in the input
.IR files .
Available fonts are the ones listed in the map table
selected using the
.OP \-m
option.
.PP
The map table consists of fontname\-filename pairs.
The fontname is the full name of the PostScript font,
exactly as it would appear in a
.MW %%DocumentFonts:
comment.
The filename is the pathname of the host resident font.
A filename that begins with a
.MW /
is used as is,
otherwise the pathname is relative to the host font
directory.
Comments are introduced by
.MW %
(as in PostScript) and
extend to the end of the line.
.PP
The only candidates for downloading are fonts listed
in the map table that point
.B download
to readable files.
A font is downloaded at most once per job.
Requests for unlisted fonts or inaccessible files
are ignored.
All requests are ignored if the map table can't be read.
.SH EXAMPLES
A map table used to control the downloading
of the Bookman font family might be,
.EX -1
%
% The first string is the full PostScript font name. The second string
% is the file name - relative the host font directory unless it begins
% with a /.
%
Bookman-Light KR
Bookman-LightItalic KI
Bookman-Demi KB
Bookman-DemiItalic KX
.EE
Use file
.MW myprinter
(in the default host font directory) as the
map table:
.EX
download -m myprinter \f2file
.EE
Set the host font directory to
.MW /tmp/font
and use
.MW /tmp/font/xxx
as the map table:
.EX
download -H /tmp/font -mxxx \f2file
.EE
.SH DIAGNOSTICS
0 exit status is returned if
.I files
were successfully processed.
.SH BUGS
.B download
should be part of a more general program.
.PP
.B download
does not look for
.MW %%PageFonts:
comments
and there is no way to force multiple downloads of
a particular font.
.PP
Using full pathnames, either in map tables or for the map table
name, is not often recommended.
.SH SEE ALSO
.BR dpost (1),
.BR postdaisy (1),
.BR postdmd (1),
.BR postio (1),
.BR postmd (1),
.BR postprint (1),
.BR posttek (1)
0707070014231031431006440057030057030000010231460522634431100001700000002663post.src/NOTES Directory dpost is DWB 3.3 version without UTF changes. dpost.utf is
stuff for Plan 9. Both build and install dpost, so only pick one. The
makefile I sent (postscript.mk) builds dpost.utf.
Left READING set to ONEBYTE in common/gen.h. Expect dpost errors unless
'x E UTF' is added to troff output or READING set to UTFENCODING. Easy
to make 'x E UTF' anything else too.
Left RUNELIB defined in common/rune.h so rune.c stuff is used when
dpost.utf is built.
UTF.enc is in directory psencoding. Install and link to Default.enc on
Plan 9.
Carmela requested two new characters: \(bs for backslash and \(dq for
double quote. Both are in devLatin1 and devpost tables. Carmela also
asked for a bunch of her devpost accent characters in devLatin1. Added
them to the end of the devLatin1 tables.
A word of warning about devLatin1. Carmela, Peter and others complained
about - and hyphens being too long in the Latin1 fonts. I used Abode's
choice but nobody liked it. New devLatin1 tables use a smaller character
for hy. Looks better (I guess) but a width change affects line and page
breaks!! Not sure what you want to do. Complaints on this one go to
npn and carmela!!!
Didn't take your suggested pathname change in download. Didn't want to
risk breaking Unix 4.0 lp. What's there is bogus but was only for Unix
4.0. The -r option accomplishes something similiar but needs a full path.
postio.mk is very different and not tested on V9.
0707070014230735420407550057030057030000020011070522633074300002000000000000post.src/grabit 0707070014230732661006400057030057030000010000700522633074200003200000002732post.src/grabit/grabit.mk MAKE=/bin/make
MAKEFILE=grabit.mk
OWNER=bin
GROUP=bin
MAN1DIR=/tmp
MAN5DIR=/usr/man/p_man/man5
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
all : grabit
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp grabit $(POSTBIN)/grabit
@chmod 755 $(POSTBIN)/grabit
@chgrp $(GROUP) $(POSTBIN)/grabit
@chown $(OWNER) $(POSTBIN)/grabit
cp grabit.ps $(POSTLIB)/grabit.ps
@chmod 644 $(POSTLIB)/grabit.ps
@chgrp $(GROUP) $(POSTLIB)/grabit.ps
@chown $(OWNER) $(POSTLIB)/grabit.ps
cp grabit.1 $(MAN1DIR)/grabit.1
@chmod 644 $(MAN1DIR)/grabit.1
@chgrp $(GROUP) $(MAN1DIR)/grabit.1
@chown $(OWNER) $(MAN1DIR)/grabit.1
clean :
clobber : clean
rm -f grabit
grabit : grabit.sh
sed "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" grabit.sh >grabit
@chmod 755 grabit
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^MAN5DIR=.*'MAN5DIR=$(MAN5DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
grabit.1 >XXX.1; \
mv XXX.1 grabit.1
0707070014230735441006440057030057030000010014500522627503200003200000030161post.src/grabit/grabit.ps %
% Dump a PostScript object, occasionally in a form that can be sent back
% through the interpreter. Similiar to Adobe's == procedure, but output
% is usually easier to read. No binding so operators like rcheck and exec
% can be conviently redefined.
%
/GrabitDict 100 dict dup begin
/recursive true def
/scratchstring 200 string def
/slowdown 100 def
/column 0 def
/lastcolumn 80 def
/level 0 def
/multiline 100 array def
/nextname 0 def
/arraylength 0 def
/lengthonly false def
/GrabitSetup {
counttomark {OmitNames exch true put} repeat pop
0 0 moveto % for hardcopy output
} def
/OmitNames 30 dict def % ignore these names
/OtherDicts 200 dict def % unrecognized dictionaries
%
% All strings returned to the host go through Print. First pass through an
% array has lengthonly set to true.
%
/Print {
dup type /stringtype ne {scratchstring cvs} if
lengthonly {
length arraylength add /arraylength exch def
}{
dup length column add /column exch def
print flush
slowdown {1 pop} repeat
} ifelse
} def
/Indent {level {( ) Print} repeat} def
/Newline {(\n) Print lengthonly not {/column 0 def} if} def
/NextLevel {/level level 1 add def multiline level 0 put} def
/LastLevel {/level level 1 sub def} def
%
% Make a unique name for each unrecognized dictionary and remember the name
% and dictionary in OtherDicts.
%
/Register {
dup type /dicttype eq {
/nextname nextname 1 add def
dup (UnknownDict ) dup
(UnknownDict) length nextname ( ) cvs putinterval
0 (UnknownDict) length nextname ( ) cvs length add getinterval cvn
exch OtherDicts 3 1 roll put
} if
} def
%
% Replace array or dictionary values by known names. Lookups are in the
% standard PostScript dictionaries and in OtherDicts. If found replace
% the value by the name and make it executable so nametype omits the
% leading /.
%
/Replace {
false
1 index type /dicttype eq {pop true} if
1 index type /arraytype eq 2 index xcheck not and {pop true} if
{
false
[userdict systemdict statusdict serverdict OtherDicts] {
{
3 index eq
{exch pop exch pop cvx true exit}
{pop}
ifelse
} forall
dup {exit} if
} forall
pop
} if
} def
%
% Simple type handlers. In some cases (e.g. savetype) what's returned can't
% be sent back through the interpreter.
%
/booleantype {{(true )}{(false )} ifelse Print} def
/marktype {pop (mark ) Print} def
/nulltype {pop (null ) Print} def
/integertype {Print ( ) Print} def
/realtype {Print ( ) Print} def
/filetype {pop (-file- ) Print} def
/fonttype {pop (-fontID- ) Print} def
/savetype {pop (-saveobj- ) Print} def
%
% Special formatting for operators is enabled if the flag in multiline
% (for the current level) is set to 1. In that case each operator, after
% being printed, is looked up in OperatorDict. If found the value is used
% as an index into the OperatorProcs array and the object at that index
% is retrieved and executed. Currently only used to choose the operators
% that end a line.
%
/operatortype {
dup Print ( ) Print
multiline level get 1 eq {
scratchstring cvs cvn dup OperatorDict exch known {
OperatorDict exch get
OperatorProcs exch get exec
}{
pop
column lastcolumn gt {Newline Indent} if
} ifelse
}{pop} ifelse
} def
%
% Executable names are passed to operatortype. Non-executable names get a
% leading /.
%
/nametype {
dup xcheck {
operatortype
}{
(/) Print Print ( ) Print
} ifelse
} def
%
% Arrays are processed in two passes. The first computes the length of the
% string returned to the host without any special formatting. If it extends
% past the last column special formatting is enabled by setting a flag in
% array multiline. Arrays are processed in a for loop so the last element
% easily recognized. At that point special fortmatting is disabled.
%
/packedarraytype {arraytype} def
/arraytype {
NextLevel
lengthonly not {
/lengthonly true def
/arraylength 0 def
dup dup type exec
arraylength 20 gt arraylength column add lastcolumn gt and {
multiline level 1 put
} if
/lengthonly false def
} if
dup rcheck not {
(-array- ) Print pop
}{
dup xcheck {({)}{([)} ifelse Print
multiline level get 0 ne {Newline Indent}{( ) Print} ifelse
0 1 2 index length 1 sub {
2 copy exch length 1 sub eq multiline level get 1 eq and {
multiline level 2 put
} if
2 copy get exch pop
dup type /dicttype eq {
Replace
dup type /dicttype eq {
dup Register Replace
recursive {
2 copy cvlit
/def load 3 1 roll
count 3 roll
} if
exch pop
} if
} if
dup type exec
dup xcheck not multiline level get 1 eq and {
0 index type /arraytype eq
1 index type /packedarray eq or
1 index type /stringtype eq or {Newline Indent} if
} if
} for
multiline level get 0 ne {Newline LastLevel Indent NextLevel} if
xcheck {(} )}{(] )} ifelse Print
} ifelse
LastLevel
} def
%
% Dictionary handler. Try to replace the value by a name before processing
% the dictionary.
%
/dicttype {
dup
rcheck not {
(-dictionary- ) Print pop
}{
dup maxlength Print ( dict dup begin) Print Newline
NextLevel
{
1 index OmitNames exch known {
pop pop
}{
Indent
Replace % arrays and dicts by known names
Register % new dictionaries in OtherDicts
exch
cvlit dup type exec % key first - force a /
dup type exec % then the value
(def) Print Newline
} ifelse
} forall
LastLevel
Indent
(end ) Print
} ifelse
} def
%
% Strings containing characters not in AsciiDict are returned in hex. All
% others are ASCII strings and use AsciiDict for character mapping.
%
/onecharstring ( ) def
/twocharstring ( ) def
/stringtype {
dup
rcheck not {
(-string- ) Print
}{
/hexit false def
dup {
onecharstring 0 3 -1 roll put
AsciiDict onecharstring cvn known not {
/hexit true def exit
} if
} forall
hexit {(<)}{(\()} ifelse Print
0 1 2 index length 1 sub {
2 copy 1 getinterval exch pop
hexit {
0 get /n exch def
n -4 bitshift 16#F and 16 twocharstring cvrs pop
n 16#F and twocharstring 1 1 getinterval 16 exch cvrs pop
twocharstring
}{cvn AsciiDict exch get} ifelse
Print
column lastcolumn gt {
hexit not {(\\) Print} if
Newline
} if
} for
hexit {(> )}{(\) )} ifelse Print
} ifelse
pop
} def
%
% ASCII characters and replacement strings. Ensures the returned string will
% reproduce the original when passed through the scanner. Strings containing
% characters not in this list should be returned as hex strings.
%
/AsciiDict 128 dict dup begin
(\n) cvn (\\n) def
(\r) cvn (\\r) def
(\t) cvn (\\t) def
(\b) cvn (\\b) def
(\f) cvn (\\f) def
( ) cvn ( ) def
(!) cvn (!) def
(") cvn (") def
(#) cvn (#) def
($) cvn ($) def
(%) cvn (\\%) def
(&) cvn (&) def
(') cvn (') def
(\() cvn (\\\() def
(\)) cvn (\\\)) def
(*) cvn (*) def
(+) cvn (+) def
(,) cvn (,) def
(-) cvn (-) def
(.) cvn (.) def
(/) cvn (/) def
(0) cvn (0) def
(1) cvn (1) def
(2) cvn (2) def
(3) cvn (3) def
(4) cvn (4) def
(5) cvn (5) def
(6) cvn (6) def
(7) cvn (7) def
(8) cvn (8) def
(9) cvn (9) def
(:) cvn (:) def
(;) cvn (;) def
(<) cvn (<) def
(=) cvn (=) def
(>) cvn (>) def
(?) cvn (?) def
(@) cvn (@) def
(A) cvn (A) def
(B) cvn (B) def
(C) cvn (C) def
(D) cvn (D) def
(E) cvn (E) def
(F) cvn (F) def
(G) cvn (G) def
(H) cvn (H) def
(I) cvn (I) def
(J) cvn (J) def
(K) cvn (K) def
(L) cvn (L) def
(M) cvn (M) def
(N) cvn (N) def
(O) cvn (O) def
(P) cvn (P) def
(Q) cvn (Q) def
(R) cvn (R) def
(S) cvn (S) def
(T) cvn (T) def
(U) cvn (U) def
(V) cvn (V) def
(W) cvn (W) def
(X) cvn (X) def
(Y) cvn (Y) def
(Z) cvn (Z) def
([) cvn ([) def
(\\) cvn (\\\\) def
(]) cvn (]) def
(^) cvn (^) def
(_) cvn (_) def
(`) cvn (`) def
(a) cvn (a) def
(b) cvn (b) def
(c) cvn (c) def
(d) cvn (d) def
(e) cvn (e) def
(f) cvn (f) def
(g) cvn (g) def
(h) cvn (h) def
(i) cvn (i) def
(j) cvn (j) def
(k) cvn (k) def
(l) cvn (l) def
(m) cvn (m) def
(n) cvn (n) def
(o) cvn (o) def
(p) cvn (p) def
(q) cvn (q) def
(r) cvn (r) def
(s) cvn (s) def
(t) cvn (t) def
(u) cvn (u) def
(v) cvn (v) def
(w) cvn (w) def
(x) cvn (x) def
(y) cvn (y) def
(z) cvn (z) def
({) cvn ({) def
(|) cvn (|) def
(}) cvn (}) def
(~) cvn (~) def
end def
%
% OperatorDict can help format procedure listings. The value assigned to each
% name is used as an index into the OperatorProcs array. The procedure at that
% index is fetched and executed after the named operator is printed. What's in
% OperatorDict is a matter of taste rather than correctness. The default list
% represents our choice of which of Adobe's operators should end a line.
%
/OperatorProcs [{} {Newline Indent}] def
/OperatorDict 250 dict def
OperatorDict /arc 1 put
OperatorDict /arcn 1 put
OperatorDict /ashow 1 put
OperatorDict /awidthshow 1 put
OperatorDict /banddevice 1 put
OperatorDict /begin 1 put
OperatorDict /charpath 1 put
OperatorDict /clear 1 put
OperatorDict /cleardictstack 1 put
OperatorDict /cleartomark 1 put
OperatorDict /clip 1 put
OperatorDict /clippath 1 put
OperatorDict /closefile 1 put
OperatorDict /closepath 1 put
OperatorDict /concat 1 put
OperatorDict /copypage 1 put
OperatorDict /curveto 1 put
OperatorDict /def 1 put
OperatorDict /end 1 put
OperatorDict /eoclip 1 put
OperatorDict /eofill 1 put
OperatorDict /erasepage 1 put
OperatorDict /exec 1 put
OperatorDict /exit 1 put
OperatorDict /fill 1 put
OperatorDict /flattenpath 1 put
OperatorDict /flush 1 put
OperatorDict /flushfile 1 put
OperatorDict /for 1 put
OperatorDict /forall 1 put
OperatorDict /framedevice 1 put
OperatorDict /grestore 1 put
OperatorDict /grestoreall 1 put
OperatorDict /gsave 1 put
OperatorDict /handleerror 1 put
OperatorDict /if 1 put
OperatorDict /ifelse 1 put
OperatorDict /image 1 put
OperatorDict /imagemask 1 put
OperatorDict /initclip 1 put
OperatorDict /initgraphics 1 put
OperatorDict /initmatrix 1 put
OperatorDict /kshow 1 put
OperatorDict /lineto 1 put
OperatorDict /loop 1 put
OperatorDict /moveto 1 put
OperatorDict /newpath 1 put
OperatorDict /nulldevice 1 put
OperatorDict /pathforall 1 put
OperatorDict /print 1 put
OperatorDict /prompt 1 put
OperatorDict /put 1 put
OperatorDict /putinterval 1 put
OperatorDict /quit 1 put
OperatorDict /rcurveto 1 put
OperatorDict /renderbands 1 put
OperatorDict /repeat 1 put
OperatorDict /resetfile 1 put
OperatorDict /restore 1 put
OperatorDict /reversepath 1 put
OperatorDict /rlineto 1 put
OperatorDict /rmoveto 1 put
OperatorDict /rotate 1 put
OperatorDict /run 1 put
OperatorDict /scale 1 put
OperatorDict /setcachedevice 1 put
OperatorDict /setcachelimit 1 put
OperatorDict /setcacheparams 1 put
OperatorDict /setcharwidth 1 put
OperatorDict /setdash 1 put
OperatorDict /setdefaulttimeouts 1 put
OperatorDict /setdostartpage 1 put
OperatorDict /seteescratch 1 put
OperatorDict /setflat 1 put
OperatorDict /setfont 1 put
OperatorDict /setgray 1 put
OperatorDict /sethsbcolor 1 put
OperatorDict /setidlefonts 1 put
OperatorDict /setjobtimeout 1 put
OperatorDict /setlinecap 1 put
OperatorDict /setlinejoin 1 put
OperatorDict /setlinewidth 1 put
OperatorDict /setmargins 1 put
OperatorDict /setmatrix 1 put
OperatorDict /setmiterlimit 1 put
OperatorDict /setpacking 1 put
OperatorDict /setpagetype 1 put
OperatorDict /setprintname 1 put
OperatorDict /setrgbcolor 1 put
OperatorDict /setsccbatch 1 put
OperatorDict /setsccinteractive 1 put
OperatorDict /setscreen 1 put
OperatorDict /settransfer 1 put
OperatorDict /show 1 put
OperatorDict /showpage 1 put
OperatorDict /start 1 put
OperatorDict /stop 1 put
OperatorDict /store 1 put
OperatorDict /stroke 1 put
OperatorDict /strokepath 1 put
OperatorDict /translate 1 put
OperatorDict /widthshow 1 put
OperatorDict /write 1 put
OperatorDict /writehexstring 1 put
OperatorDict /writestring 1 put
end def
%
% Put an object on the stack and call Grabit. Output continues until stack
% is empty. For example,
%
% /letter load Grabit
%
% prints a listing of the letter procedure.
%
/Grabit {
/saveobj save def
GrabitDict begin
{
count 0 eq {exit} if
count {dup type exec} repeat
(\n) print flush
} loop
end
currentpoint % for hardcopy output
saveobj restore
moveto
} def
0707070014230735451006440057030057030000010011550522627503200003200000002271post.src/grabit/grabit.sh #
# Print a listing of an object, often a dictionary or an array. Something
# like ==, but the output is often easier to read and closer to PostScript
# that can be sent back through the interpreter.
#
POSTLIB=/usr/lib/postscript
PROLOGUE=$POSTLIB/grabit.ps
COPYFILE=
RECURSIVE=true
OMITNAMES="/Grabit /GrabitDict"
NONCONFORMING="%!PS"
ENDPROLOG="%%EndProlog"
BEGINSETUP="%%BeginSetup"
ENDSETUP="%%EndSetup"
TRAILER="%%Trailer"
SETUP=GrabitSetup
while [ -n "$1" ]; do
case $1 in
-d) RECURSIVE=false;;
-o) shift; OMITNAMES="$OMITNAMES $1";;
-o*) OMITNAMES="$OMITNAMES `echo $1 | sed s/-o//`";;
-C) shift; COPYFILE="$COPYFILE $1";;
-C*) COPYFILE="$COPYFILE `echo $1 | sed s/-C//`";;
-L) shift; PROLOGUE=$1;;
-L*) PROLOGUE=`echo $1 | sed s/-L//`;;
--) shift; break;;
-*) echo "$0: illegal option $1" >&2; exit 1;;
*) break;;
esac
shift
done
echo $NONCONFORMING
cat $PROLOGUE
echo $ENDPROLOG
echo $BEGINSETUP
cat ${COPYFILE:-/dev/null}
echo "GrabitDict begin"
echo "/recursive $RECURSIVE def"
echo mark
for i in $OMITNAMES; do
case $i in
/*) echo "$i";;
?*) echo "/$i";;
esac
done
echo GrabitSetup
echo end
echo $ENDSETUP
for i do
echo "$i Grabit"
done
0707070014230733311006400057030057030000011776300522633074300003100000003520post.src/grabit/grabit.1 .ds dQ /usr/lib/postscript
.TH GRABIT 1 "DWB 3.2"
.SH NAME
.B grabit
\- recover the text representation of PostScript objects
.SH SYNOPSIS
\*(mBgrabit\f1
.OP "" options []
.OP "" object
\&...
.SH DESCRIPTION
.B Grabit
builds a PostScript program that generates a text representation
of one or more PostScript
.IR object s.
The program is written on the standard output.
The following
.I options
are understood:
.TP 1.0i
.OP \-d
Do not automatically dump the contents of unrecognized dictionary
objects found in PostScript arrays.
.TP 1.0i
.OP \-C file
Copy
.I file
into the PostScript program.
.I file
must contain legitimate PostScript.
.TP 1.0i
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/grabit.ps .
.PP
When the program built by
.B grabit
is sent to a PostScript printer the text representation of each
.I object
is normally returned to the host computer over the printer's serial port.
Use
.BR hardcopy (1)
if you do not have access to the port.
.PP
Each argument should be a PostScript
.I object
or commands that generate a PostScript
.IR object .
The program built by
.B grabit
produces results that are often close to legitimate PostScript that
can be successfully sent through an interpreter.
.SH EXAMPLES
.PP
If you can read and write
.MW /dev/tty00
and there is a PostScript printer on
the other end, then
recover the readable portions of the
.MW userdict
and
.MW statusdict
dictionaries:
.EX
grabit userdict statusdict | postio -l/dev/tty00 -t
.EE
Otherwise get a printout of the dictionaries:
.EX
grabit userdict statusdict | hardcopy | lp ...
.EE
Arguments should be PostScript code that leaves an object on the stack.
Dump the contents of Adobe's
.MW internaldict
dictionary:
.EX
grabit "1183615869 internaldict" | postio -l/dev/tty00 -t
.EE
.SH FILES
.MW \*(dQ/grabit.ps
.SH SEE ALSO
.BR hardcopy (1),
.BR postio (1)
0707070014230642640407550057030057030000021711540522633074500002200000000000post.src/hardcopy 0707070014230642651006440057030057030000011711550522627503200003600000003137post.src/hardcopy/hardcopy.sh #
# Generate paper output from the data that a PostScript program normally
# sends back to a host computer using file output operators.
#
POSTLIB=/usr/lib/postscript
PROLOGUE=$POSTLIB/hardcopy.ps
OPTIONS=
MODE=portrait
NONCONFORMING="%!PS"
ENDPROLOG="%%EndProlog"
BEGINSETUP="%%BeginSetup"
ENDSETUP="%%EndSetup"
TRAILER="%%Trailer"
SETUP=HardcopySetup
DONE="(%stdout)(w) file -1 write"
while [ -n "$1" ]; do
case $1 in
-c) shift; OPTIONS="$OPTIONS /#copies $1 store";;
-c*) OPTIONS="$OPTIONS /#copies `echo $1 | sed s/-c//` store";;
-f) shift; OPTIONS="$OPTIONS /font /$1 def";;
-f*) OPTIONS="$OPTIONS /font /`echo $1 | sed s/-f//` def";;
-p) shift; MODE=$1;;
-p*) MODE=`echo $1 | sed s/-p//`;;
-m) shift; OPTIONS="$OPTIONS /magnification $1 def";;
-m*) OPTIONS="$OPTIONS /magnification `echo $1 | sed s/-m//` def";;
-s) shift; OPTIONS="$OPTIONS /pointsize $1 def";;
-s*) OPTIONS="$OPTIONS /pointsize `echo $1 | sed s/-s//` def";;
-x) shift; OPTIONS="$OPTIONS /xoffset $1 def";;
-x*) OPTIONS="$OPTIONS /xoffset `echo $1 | sed s/-x//` def";;
-y) shift; OPTIONS="$OPTIONS /yoffset $1 def";;
-y*) OPTIONS="$OPTIONS /yoffset `echo $1 | sed s/-y//` def";;
-L) shift; PROLOGUE=$1;;
-L*) PROLOGUE=`echo $1 | sed s/-L//`;;
--) shift; break;;
-*) echo "$0: illegal option $1" >&2; exit 1;;
*) break;;
esac
shift
done
case "$MODE" in
l*) OPTIONS="$OPTIONS /landscape true def";;
*) OPTIONS="$OPTIONS /landscape false def";;
esac
echo $NONCONFORMING
cat $PROLOGUE
echo $ENDPROLOG
echo $BEGINSETUP
echo $OPTIONS
echo $SETUP
echo $ENDSETUP
cat $*
echo $TRAILER
echo $DONE
0707070014230642661006440057030057030000011711700522627503200003600000007544post.src/hardcopy/hardcopy.ps %
% Redefiniton of the PostScript file output operators so results go to paper.
% Complicated and slow, but the implementation doesn't place many demands on
% included PostScript. About all that's required is gentle treatment of the
% graphics state between write calls.
%
/#copies 1 store
/aspectratio 1 def
/font /Courier def
/formsperpage 1 def
/landscape false def
/magnification 1 def
/orientation 0 def
/pointsize 10 def
/rotation 1 def
/xoffset .1 def
/yoffset .1 def
/roundpage true def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} def
/min {2 copy gt {exch} if pop} def
/HardcopySetup {
landscape {/orientation 90 orientation add def} if
font findfont 1 1.1 div scalefont setfont
pagedimensions
xcenter ycenter translate
orientation rotation mul rotate
width 2 div neg height 2 div translate
xoffset inch yoffset inch neg translate
pointsize 1.1 mul dup scale
magnification dup aspectratio mul scale
height width div 1 min dup scale
0 -1 translate
0 0 moveto
} def
/pagedimensions {
useclippath {
/pagebbox [clippath pathbbox newpath] def
roundpage currentdict /roundpagebbox known and {roundpagebbox} if
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
} def
%
% Unbind the operators in an executable array or packedarray. Leaves the
% unbound array or the original object on the stack.
%
/Unbind {
0 index xcheck
1 index type /arraytype eq
2 index type /packedarraytype eq or and {
dup length array copy cvx
dup 0 exch {
dup type /operatortype eq {
( ) cvs cvn cvx
} if
dup type /dicttype eq {
dup maxlength dict exch {
Unbind
3 copy put pop pop
} forall
} if
0 index xcheck
1 index type /arraytype eq
2 index type /packedarraytype eq or and {
Unbind
} if
3 copy put pop
1 add
} forall
pop
} if
} def
%
% New write operator - don't bind the definition! Expands tabs and backspaces,
% wraps long lines, and starts a new page whenever necessary. The code that
% handles newlines assumes lines are separated by one vertical unit.
%
/write {
true exch
%%case '\b':
dup 8#10 eq {
( ) stringwidth pop neg 0 rmoveto
currentpoint pop 0 lt {
currentpoint exch pop 0 exch moveto
} if
exch pop false exch
} if
%%case '\t':
dup 8#11 eq {
currentpoint pop ( ) stringwidth pop div round cvi
8 mod 8 exch sub {
2 index 8#40 write
} repeat
exch pop false exch
} if
%%case '\n':
dup 8#12 eq {
currentpoint 0 exch 1 sub moveto pop
gsave clippath pathbbox pop pop exch pop grestore
currentpoint exch pop 1 sub ge {
2 index 8#14 write
} if
exch pop false exch
} if
%%case '\f':
dup 8#14 eq {
gsave showpage grestore
0 0 moveto
exch pop false exch
} if
%%case '\r':
dup 8#15 eq {
currentpoint 0 exch moveto pop
exch pop false exch
} if
%%case EOF:
dup -1 eq {
currentpoint 0 ne exch 0 ne or {
2 index 8#14 write
} if
exch pop false exch
} if
%%default:
exch {
dup
gsave clippath pathbbox pop 3 1 roll pop pop grestore
( ) stringwidth pop currentpoint pop add le {
2 index 8#12 write
} if
( ) dup 0 4 -1 roll put show
} if
pop % the character
pop % and file object
} def
%
% All the other file output operators call our redefined write operator.
%
/print {
(%stdout) (w) file exch {1 index exch write} forall
pop
} def
/writestring {
{1 index exch write} forall
pop
} def
/writehexstring {
(0123456789ABCDEF) 3 1 roll {
dup
3 index exch -4 bitshift 16#F and get 2 index exch write
2 index exch 16#F and get 1 index exch write
} forall
pop pop
} def
%
% Unbind and redefine the remaining file output procedures.
%
/= dup load Unbind def
/== dup load Unbind def
/stack dup load Unbind def
/pstack dup load Unbind def
0707070014230642671006440057030057030000011711570522627503200003100000000602post.src/hardcopy/README Redirect output of the print operator to paper. Particularly useful if
you're trying to extract information from a printer, but you don't have
access to the data the printer returns to the host.
For example,
FontDirectory {pop ==} forall
names all the fonts registered in the FontDirectory dictionary. Simple,
but only if you can read the data returned to the host by the printer.
0707070014230640011006400057030057030000011722500522633074500003500000005143post.src/hardcopy/hardcopy.1 .ds dQ /usr/lib/postscript
.TH HARDCOPY 1 "DWB 3.2"
.SH NAME
.B hardcopy
\- redirects output from PostScript file operators to paper
.SH SYNOPSIS
\*(mBhardcopy\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B hardcopy
surrounds
.I files
with PostScript that redirects file output to paper,
and writes the results on the standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP 0.75i
.OP \-f name
Print
.I files
using font
.IR name ,
which should be the name of a constant width font.
The default font is Courier.
.TP 0.75i
.OP \-m num
Magnify each page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which is located near the upper left corner of
each page.
The default magnification is 1.0.
.TP 0.75i
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP 0.75i
.OP \-s num
Print
.I files
using point size
.IR num .
When printing in landscape mode
.I num
is scaled by a factor that depends on the
imaging area of the device.
The default size for portrait mode is 10.
.TP 0.75i
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed near the
upper left corner of the page, with positive
x to the right and positive y down the page.
Positive
.I num
moves everything right.
The default offset is 0.25 inches.
.TP 0.75i
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves text down the page.
The default offset is 0.25 inches.
.TP 0.75i
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/hardcopy.ps .
.PP
.B hardcopy
generates paper output from data that a PostScript program
normally sends back to a host computer.
It is particularly useful for recovering data from a printer
that does not allow access to its serial port.
.SH EXAMPLES
For a list of ROM based fonts type:
.EX
echo 'FontDirectory {pop ==} forall' | hardcopy | lp \(el
.EE
To recover the version number of the PostScript interpreter:
.EX
echo 'version ==' | hardcopy -pland | lp \(el
.EE
To build and print a width table for font
.MW R
type:
.EX
trofftable -TLatin1 R | hardcopy | lp \(el
.EE
.SH WARNINGS
Results are unpredictable if the input
.I files
make changes to the graphics state.
.SH FILES
.MW \*(dQ/hardcopy.ps
.SH SEE ALSO
.BR buildtables (1),
.BR postio (1),
.BR trofftable (1)
0707070014230640001006400057030057030000011713560522633074400003600000003016post.src/hardcopy/hardcopy.mk MAKE=/bin/make
MAKEFILE=hardcopy.mk
OWNER=bin
GROUP=bin
MAN1DIR=/tmp
MAN5DIR=/usr/man/p_man/man5
POSTLIB=/usr/lib/postscript
POSTBIN=/usr/bin/postscript
all : hardcopy
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp hardcopy $(POSTBIN)/hardcopy
@chmod 755 $(POSTBIN)/hardcopy
@chgrp $(GROUP) $(POSTBIN)/hardcopy
@chown $(OWNER) $(POSTBIN)/hardcopy
cp hardcopy.ps $(POSTLIB)/hardcopy.ps
@chmod 644 $(POSTLIB)/hardcopy.ps
@chgrp $(GROUP) $(POSTLIB)/hardcopy.ps
@chown $(OWNER) $(POSTLIB)/hardcopy.ps
cp hardcopy.1 $(MAN1DIR)/hardcopy.1
@chmod 644 $(MAN1DIR)/hardcopy.1
@chgrp $(GROUP) $(MAN1DIR)/hardcopy.1
@chown $(OWNER) $(MAN1DIR)/hardcopy.1
clean :
clobber : clean
rm -f hardcopy
hardcopy : hardcopy.sh
sed "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" hardcopy.sh >hardcopy
@chmod 755 hardcopy
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^MAN5DIR=.*'MAN5DIR=$(MAN5DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
hardcopy.1 >XXX.1; \
mv XXX.1 hardcopy.1
0707070014230735470407550057030057030000020011170522633100500002000000000000post.src/mcolor 0707070014230735501006440057030057030000010012140522627503200003100000004007post.src/mcolor/color.sr .ds Dc black
.ds Cc \*(Dc
.de CL \" Color selection macro
. \"
. \" $1=color (e.g. .CL red) or
. \" $1=textcolor on backgroundcolor (e.g. .CL "red on blue")
. \" $1=red green blue rgb (e.g. .CL ".2 .3 .4 rgb") or
. \" $1=hue saturation brightness hsb (e.g. .CL ".5 .6 .7 hsb")
. \" $2=text
. \"
. \" If no arguments are given the default color (usually black) will be
. \" restored. If $2 is omitted the color selected by $1 remains in effect
. \" until another color is selected. If two arguments are given $2 will be
. \" printed in color $1 and then the default color will be restored.
. \"
. \" The color of the text and the background can be selected by setting $1
. \" to "textcolor on backgroundcolor" where textcolor and backgroundcolor
. \" can be any of the known colors. For example use .CL "white on black"
. \" for reverse video printing. Changing color in a word can be accomplished
. \" by preceeding the characters with a \X'SetColor:val' command, where val
. \" is the color you wish to use. Named colors are case independent.
. \"
. \" Implementation details are device dependent and are handled in the
. \" appropriate post-processor. Requesting a color that's not available
. \" (eg. not defined in /usr/lib/postscript/color.ps) results in the use
. \" of default colors - black or white on black for reverse video mode.
. \"
. \" All colors may not be supported on every output device, and the direct
. \" specification of a color via an explicit rgb or hsb argument may also
. \" be device dependent. In any case, to be safe on PostScript devices, all
. \" numeric paramenters in the direct rgb or hsb specifications should lie
. \" between 0 and 1 (inclusive). The names of the currently available colors
. \" on PostScript printers are listed in file /usr/lib/postscript/color.ps.
. \"
.mk Ov
.if \\n(.$=0 .ds Cc \\*(Dc
.if \\n(.$=1 .ds Cc \\$1
.if \\n(.$<2 \\X'SetColor:\\*(Cc'
.if \\n(.$=2 \\X'SetColor:\\$1'\\c
.if \\n(.$=2 'sp |\\n(Ovu
.if \\n(.$=2 \\$2
.if \\n(.$=2 .mk Ov
.if \\n(.$=2 \\X'SetColor:\\*(Cc'\\c
'sp |\\n(Ovu
..
0707070014230733361006400057030057030000010014750522633100500003100000002066post.src/mcolor/mcolor.5 .ds dP /usr/lib/postscript
.ds dT /usr/lib/tmac
.TH MCOLOR 5
.SH NAME
.B mcolor
\- color and reverse video macro
.SH SYNOPSIS
\*(mBtroff \-mcolor\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B mcolor
is a macro package for color selection and reverse video printing
on PostScript printers.
The package is compatible with most existing macro packages
and includes the following macro:
.TP 1.25i
.MI .CL "\0color\0text"
Prints
.I text
in
.IR color .
No arguments restores the default color (black).
If
.I text
is omitted the selected
.I color
remains in effect until another
.I color
is selected.
If two arguments are given the
.I text
is printed in
.I color
and then the default color is restored.
.PP
Both the text and background color can be selected.
A
.I color
argument of
.RI `` color1
.MW on
.IR color2 ''
prints text in
.I color1
on a background in
.I color2 .
.PP
Named colors must be listed in the
``colordict''
dictionary in file
.MR \*(dP/color.ps .
.SH FILES
.MW \*(dT/tmac.color
.br
.MW \*(dP/color.ps
.SH SEE ALSO
.BR troff (1),
.BR dpost (1),
.BR mps (5)
0707070014230732631006400057030057030000010014600522633100500003200000002056post.src/mcolor/mcolor.mk #
# Not installing the man page.
#
MAKE=/bin/make
MAKEFILE=mcolor.mk
SYSTEM=V9
VERSION=3.3.2
OWNER=bin
GROUP=bin
POSTLIB=/usr/lib/postscript
TMACDIR=/usr/lib/tmac
all :
@cp color.sr tmac.color
install : all
@if [ ! -d $(TMACDIR) ]; then \
mkdir $(TMACDIR); \
chmod 755 $(TMACDIR); \
chgrp $(GROUP) $(TMACDIR); \
chown $(OWNER) $(TMACDIR); \
fi
cp tmac.color $(TMACDIR)/tmac.color
@chmod 644 $(TMACDIR)/tmac.color
@chgrp $(GROUP) $(TMACDIR)/tmac.color
@chown $(OWNER) $(TMACDIR)/tmac.color
clean :
rm -f tmac.color
clobber : clean
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
-e "s'^TMACDIR=.*'TMACDIR=$(TMACDIR)'" \
$(MAKEFILE) >X$(MAKEFILE); \
mv X$(MAKEFILE) $(MAKEFILE); \
sed \
-e "s'^.ds dP.*'.ds dP $(POSTLIB)'" \
-e "s'^.ds dT.*'.ds dT $(TMACDIR)'" \
mcolor.5 >Xmcolor.5; \
mv Xmcolor.5 mcolor.5
0707070014230642720407550057030057030000021711770522633074700002300000000000post.src/mpictures 0707070014230642731006440057030057030000011712120522627503300003700000010340post.src/mpictures/pictures.sr .de PI \" Picture Include
. \" $1=file(page) $2=height,width,yoff,xoff $3=flags
. \" Height, width, xoff, and yoff are for the frame, flags is for the
. \" picture. Default dimensions are inches.
\\X'PI:\\n(.o:\\n(.i:\\n(.l:\\n(.t:\\$1:\\$2:\\$3:'\\c
..
.nr FT 0
.de BP \" Begin a Picture
. \"
. \" $1=file(page) $2=height $3=width $4=position $5=offset $6=flags $7=label
. \"
. \" Height, width, position, and offset are for the frame, flags is for
. \" the picture. The postion flag should be l, c, r, or "". Omitting the
. \" position argument is also allowed for compatibility with the original
. \" version of the macro. In that case offset is taken relative to your
. \" left margin.
.if \\n(FT>1 .EP
. \" Need these when we switch environments.
.nr Ov \\n(.v
.nr Oi \\n(.i
.nr Ol \\n(.l
. \" Remember the arguments - sometimes as both a string and number register.
.nr $2 \\$2i
.nr $3 \\$3i
.nr $4 \\$4i
.ds $4 \\$4
.nr $5 \\$5i
.ds $5 \\$6
.ds $6 \\$7
. \" Accept a few unadvertised position flags.
.if '\\*($4'L' .ds $4 l
.if '\\*($4'C' .ds $4 c
.if '\\*($4'R' .ds $4 r
. \" A null with more than three arguments means l.
.if \\n(.$>3 .if '\\*($4'' .ds $4 l
. \" Default frame dimensions if missing, zero, or null.
.if !\\n($2>0 .nr $2 3.0i
.if !\\n($3>0 .nr $3 \\n(.lu-\\n(.iu-\\n($4u
.if !\\n($3>0 .nr $3 \\n($2u
. \" Figure out the offset that will be used the rest of the way.
.if '\\*($4'l' .nr $4 \\n($5u
.if '\\*($4'c' .nr $4 (\\n(.lu-\\n(.iu-\\n($3u)/2u+\\n($5u
.if '\\*($4'r' .nr $4 \\n(.lu-\\n(.iu-\\n($3u+\\n($5u
. \" If we haven't recognized the position flag assume it wasn't given and
. \" treat argument four as an offset from the left.
.if !'\\*($4'l' .if !'\\*($4'c' .if !'\\*($4'r' .ds $5 \\$5
.if !'\\*($4'l' .if !'\\*($4'c' .if !'\\*($4'r' .ds $6 \\$6
. \" Set increments for line length and indent.
.nr Ii \\n($3u+\\n($4u+.1i
.nr Il \\n(.lu-\\n(.iu-\\n($4u+.1i
. \" Set the frame type to one of:
. \" 0 - frame is as wide as a line of text - skip over it.
. \" 1 - fits in left or right margins
. \" 2 - fill with text on the right
. \" 3 - on the left
. \" 4 - or on both sides of the frame
. \" 5 - only set in EP if FT was 4 and now filling on the right.
. \" Assume the frame is as wide as a line of text, then check dimensions
. \" to see what's really true. The order of these tests is important!
.nr FT 0
.if \\n($4u>1.0i .nr FT 3
.if \\n($4u+\\n(.iu>=\\n(.lu .nr FT 1
.if \\n($3u+\\n($4u+\\n(.iu+1.0i<\\n(.lu .nr FT 2
.if \\n($3u+\\n($4u<=0 .nr FT 1
.if \\n(FT=2 .if \\n($4u>1.0i .nr FT 4
. \" Ask for some vertical space - labeled pictures need a little extra,
. \" margin pictures a little less.
.if \\n(FT=1 .if '\\*($6'' .ne \\n($2u
.if \\n(FT=1 .if !'\\*($6'' .ne \\n($2u+2v
.if !\\n(FT=1 .if '\\*($6'' .ne \\n($2u+3v
.if !\\n(FT=1 .if !'\\*($6'' .ne \\n($2u+5v
. \" Save our place, draw the picture, label it, and return. Need precise
. \" control of when \X'...' is put out - thus the new environment.
.mk Oh
.ev 1
.in \\n(Oiu
.ll \\n(Olu
.vs \\n(Ovu
.if \\n(FT=1 .sp -1v
.if \\n(FT=1 .PI \\$1 \\n($2u,\\n($3u,\\n(.vu,\\n($4u t\\*($5
.if !\\n(FT=1 .PI \\$1 \\n($2u,\\n($3u,\\n(.vu,\\n($4u \\*($5
.in
.ll
.vs
.ev
.lt \\n($3u
.tl \(ts\(ts\\h'\\n($4u+\\n(.iu'\\v'\\n($2u+1.5v'\\*($6\\v'-\\n($2u-1.5v'\\h'-\\n($4u-\\n(.iu'\(ts\(ts
.lt
'sp |\\n(Ohu
. \" Figure out what to do with the text that follows.
.if !'\\*($6'' .nr $2 +2v
.if \\n(FT=0 .sp \\n($2u+2v
.if \\n(FT=1 .nr FT 0
.if \\n(FT=2 'in +\\n(Iiu
.if \\n(FT>2 .ll -\\n(Ilu
.if \\n(FT>1 .di BB
.if \\n(FT>1 .dt \\n($2u+2v+1u EP
. \" Clean things up.
.rr $2
.rr $3
.rr $4
.rm $4
.rr $5
.rm $5
.rm $6
.rr Oh
.rr Oi
.rr Ol
.rr Ov
.if \\n(FT=0 .EP
..
.de EP \" End the Picture - Normally called from a trap, although it can be used
. \" on its own to mark the end of a picture.
.nr Ot 0
.if \\n(.tu<\\n(.pu .nr Ot \\n(.tu
.if \\n(Ot>0 .if \\n(FT=4 .nr FT 3
.if \\n(FT<2 .nr Ot 0
.if \\n(Ot>0 .br
.if \\n(FT=5 .nr Ot 0
.if \\n(FT>1 \{\
. ev 1
. eo
. br
. di
. nf
. in 0
. BB
. in
. fi
. ec
. ev
. rm BB\}
.if \\n(FT=5 \{\
. nr FT 2
' sp |\\n(Nhu+1v\}
.if \\n(FT=4 \{\
. mk Nh
. nr Nh -1v
. nr FT 5
' sp -\\n(dnu+1v
' in +\\n(Iiu
. ll +\\n(Ilu
. di BB
. dt \\n(dnu-2v+1u EP\}
.if \\n(FT=2 'in -\\n(Iiu
.if \\n(FT=3 .ll +\\n(Ilu
.if \\n(FT<4 .nr FT 0
.if \\n(Ot>0 .sp \\n(Otu
.rr Ot
.if \\n(FT=0 \{\
. rr Nh
. rr Ii
. rr Il\}
..
0707070014230637741006400057030057030000011563000522633074700003700000010664post.src/mpictures/mpictures.5 .ds dT /usr/lib/tmac
.TH MPICTURES 5
.SH NAME
.B mpictures
\- picture inclusion macros
.SH SYNOPSIS
\*(mBtroff \-mpictures\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B mpictures
is a macro package used to include PostScript pictures in
.B troff
documents.
The package is compatible with many existing
.B troff
macro packages and includes the following three macros:
.TP
.MI .BP "\0file\0height\0width\0position\0offset\0flags\0label"
.sp 0.3v
Places the picture
.I file
in the space set aside by
.IR height ,
.IR width ,
.IR position ,
and
.IR offset ,
which together define and position the picture frame.
The macro arguments are:
.in +0.75i
.de XX
.sp 3p
.ti -0.75i
\f2\\$1\fP
.sp -1v
..
.XX file
Pathname of a PostScript picture
.IR file .
Appending
.MI ( n )
to
.I file
selects page number
.I n
from a multiple-page picture
.IR file .
By default the first page in
.I file
is selected.
.XX height
Vertical extent of the frame.
The default is
.MR 3i .
.XX width
Horizontal extent of the frame.
The default is the current length of a line of text.
.XX position
One of
.MR l ,
.MR c ,
or
.MW r
used to align the left, center, or
right of the frame with the corresponding position
on the current line of text.
The default is
.MR l .
.XX offset
Moves the frame right (positive) or left (negative)
from the selected
.IR position .
The default is
.MR 0i .
.XX flags
A string built from one or more of the following:
.in +0.5i
.sp 3p
.de YY
.br
.ti -0.5i
\*(mW\\$1\f1
.sp -1v
..
.YY a[\f2d\*(mW]
Rotate the picture clockwise
.I d
degrees.
If
.I d
is omitted, 90 degrees is added to the
current angle, which starts at zero.
.YY o
Outline the picture with a box.
.YY s
Freely scale both picture dimensions.
.YY w
White out (erase) the area to be occupied by the picture.
.YY l
Attach the picture to the left side of the frame.
.YY r
Attach the picture to the right side of the frame.
.YY t
Attach the picture to the top of the frame.
.YY b
Attach the picture to the bottom of the frame.
.in -0.5i
.XX label
Place
.I label
1.5 vertical lines below the frame.
.in -0.75i
.sp 0.3v
If there is room
.MW .BP
fills text around the frame.
Everything destined for either side of the frame first
goes into a diversion and only reappears when the accumulated
text sweeps past the trap set by
.MW .BP
or when the diversion is explicitly closed
by the
.MW .EP
macro (see below).
.sp 0.5v
Null arguments, represented by
.MR \&"" ,
are replaced by the defaults as noted above.
.TP
.MI .PI "\0file\0height,\|width,\|yoffset,\|xoffset\0flags"
.sp 0.3v
A low level macro used by
.MR .BP .
It can help if you are trying to do things that
.MW .BP
will not allow or does not do well.
The two arguments not already described are:
.in +0.75i
.XX xoffset
Moves the frame right (positive) or left (negative) from the
left margin.
The default is
.MR 0i .
.XX yoffset
Moves the frame down (positive) or up (negative) from
the current baseline.
The default is
.MR 0i .
.in -0.75i
.sp 0.3v
The second argument is a comma separated list of four numbers,
and although defaults are available, supplying values for all
four numbers is recommended.
.br
.ne 2v
.TP
.MW .EP
Ends a picture started by
.MW .BP .
An explicit
.MW .EP
call is not often required.
Instead
.MW .EP
is usually called by
.MW .BP
at the bottom of each frame.
.PP
Much of what is done depends on file structuring comments
commonly found in PostScript files.
If the comments needed to isolate a particular page are missing
the entire
.I file
is included.
If a
.MW %%BoundingBox
comment is missing the picture is
assumed to fill an 8.5\(mu11-inch page.
A picture
.I file
that cannot be read when the
.B troff
postprocessor runs is replaced by white space.
Nothing done in
.MW .BP
or
.MW .PI
guarantees the picture has not been placed off the page.
All dimensions should be explicitly given in inches.
.SH BUGS
A picture and associated text can silently disappear if
the diversion trap set by
.MW .BP
is not reached.
Including a call to
.MW .EP
at the end of the paper
should recover whatever appears to be missing.
.PP
Macros in other packages occasionally break the adjustments
made to the line length and indent when text is being placed
around a picture.
.PP
A missing or improper
.MW %%BoundingBox
comment often
explains why a picture does not properly fill the space
that has been set aside.
.SH FILES
.MW \*(dT/tmac.pictures
.SH SEE ALSO
.BR troff (1),
.BR dpost (1),
.BR picpack (1),
.BR mps (5)
.SH REFERENCE
R. L. Drechsler and A. R. Wilks,
.ul
PostScript Pictures in Troff Documents
0707070014230637731006400057030057030000011577770522633074600004000000001740post.src/mpictures/mpictures.mk #
# Not installing the man page.
#
MAKE=/bin/make
MAKEFILE=mpictures.mk
SYSTEM=V9
VERSION=3.3.2
OWNER=bin
GROUP=bin
TMACDIR=/usr/lib/tmac
all :
@cp pictures.sr tmac.pictures
install : all
@if [ ! -d $(TMACDIR) ]; then \
mkdir $(TMACDIR); \
chmod 755 $(TMACDIR); \
chgrp $(GROUP) $(TMACDIR); \
chown $(OWNER) $(TMACDIR); \
fi
cp tmac.pictures $(TMACDIR)/tmac.pictures
@chmod 644 $(TMACDIR)/tmac.pictures
@chgrp $(GROUP) $(TMACDIR)/tmac.pictures
@chown $(OWNER) $(TMACDIR)/tmac.pictures
clean :
rm -f tmac.pictures
clobber : clean
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^TMACDIR=.*'TMACDIR=$(TMACDIR)'" \
$(MAKEFILE) >X$(MAKEFILE); \
mv X$(MAKEFILE) $(MAKEFILE); \
sed \
-e "s'^.ds dT.*'.ds dT $(TMACDIR)'" \
mpictures.5 >Xmpictures.5; \
mv Xmpictures.5 mpictures.5
0707070014230735530407550057030057030000020011570522627503300001600000000000post.src/misc 0707070014230735541004440057030057030000010014640522627503300002700000003144post.src/misc/lp.model
# qmsps800 mac 10/22/86
#
LPDEST=`basename $0`
QMS_FILE="$1"
DATE="`date +%D`"
TIME="`date +%T`"
owner="$2"
site=`uname`
port="`/usr/bin/lpstat -v$LPDEST | sed -e 's/.*: //'`"
filter_cmd="/usr/lbin/postscript/postio"
filter="$filter_cmd -l $port"
landscape="" formsperpage=""
path=/usr/lbin/postscript
printer=postprint
bannerflag=ON
prev="| $path/postreverse"
for i in $5
do
case "$i" in
L2)
formsperpage="-n2"
;;
land)
landscape="-pland"
;;
dpost|postprint|posttek|postbgi|postdmd|postio)
printer="$i"
;;
postreverse)
prev=""
;;
nobanner)
bannerflag=OFF
;;
F*)
QMS_FILE="`expr $i : 'F\(.*\)'`"
;;
esac
done
if [ -n "$filter_cmd" -a ! -x "$filter_cmd" ]
then
disable -r"can't execute filter: $filter_cmd" $LPDEST
exit 1
fi
shift; shift; shift; shift; shift
files="$*"
cp /usr/spool/lp/model/banner.ps /tmp/ban.$$
echo "($QMS_FILE) ($LPDEST) ($TIME) ($DATE) ($owner) banner" >> /tmp/ban.$$
if [ "$printer" = "postio" ]
then
eval $filter $files 2> /dev/null
else
eval $path/$printer $landscape $formsperpage $files $prev | $filter 2> /dev/null
fi
if [ "$bannerflag" = "ON" ]
then
eval $filter /tmp/ban.$$ 2> /dev/null
fi
rm -f /tmp/ban.$$
exit 0
0707070014230735551004440057030057030000010012170522627503300002500000000763post.src/misc/README Miscellaneous programs - all are unsupported.
ibmfont.c IBM PC to Unix font conversion program
laserbar.[c1] Barcode filter and man page - Jan Wolitzky
lp.model Sample lp interface (not for Unix 4.0) - Maryann Csaszar
macfont.c Macintosh to Unix font conversion program
pscrypt.c Quick implementation of Adobe's encryption/decryption algorithm
setbaud.ps Example of how to change the printer's baudrate
Use make to compile C programs. For example,
make macfont
compiles macfont.c.
0707070014230735561004440057030057030000010015000522627503300003000000013025post.src/misc/macfont.c /*
*
* Program that converts Macintosh font files to a format that works on Unix
* systems. Essentially all the information needed came from the Adobe paper
* "Supporting Downloadable PostScript Fonts". To use the program type,
*
* macfont font.mac >font.unix
*
* where font.mac is the font file, exactly as it came over from a Macintosh,
* and font.unix is equivalent host resident font file usable on Unix systems.
*
*/
#include <stdio.h>
#include <signal.h>
#define OFF 0
#define ON 1
#define NON_FATAL 0
#define FATAL 1
#define FALSE 0
#define TRUE 1
char **argv;
int argc;
char *prog_name;
int x_stat;
int debug = OFF;
int ignore = OFF;
FILE *fp_in = stdin;
FILE *fp_out = stdout;
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* Macintosh to Unix font converter.
*
*/
argc = agc;
argv = agv;
prog_name = argv[0];
options();
arguments();
exit(x_stat);
} /* End of main */
/*****************************************************************************/
options()
{
int ch;
char *names = "DI";
extern char *optarg;
extern int optind;
/*
*
* Command line options.
*
*/
while ( (ch = getopt(argc, argv, names)) != EOF ) {
switch ( ch ) {
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind;
argv += optind;
} /* End of options */
/*****************************************************************************/
arguments()
{
/*
*
* Everything else is an input file. No arguments or '-' means stdin.
*
*/
if ( argc < 1 )
conv();
else
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
conv();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End of arguments */
/*****************************************************************************/
conv()
{
int blocksize;
int blocktype;
/*
*
* The first four bytes (in a block) are the block size, the fifth is the block
* type, and the sixth always appears to be NULL. Type 0 blocks are comments and
* are always skipped. Type 1 blocks are ASCII text, type 2 is binary data that
* should be converted to hex, while type 5 blocks represent the end of the font
* file. Commment block lengths appear to be from the first byte, while other
* lengths seem to be measured from block type byte (ie. the fifth byte). Type
* four blocks aren't used, while type 3 blocks mean an end of file indication
* should be sent to the printer. Haven't done anything with type 3 blocks.
*
*/
while ( 1 ) {
blocksize = getint(fp_in);
blocktype = getc(fp_in);
getc(fp_in);
if ( debug == ON )
fprintf(stderr, "blocktype = %d, blocksize = %d\n", blocktype, blocksize);
switch ( blocktype ) {
case 0: /* comment - skip blockcount bytes */
fseek(fp_in, (long) blocksize - 6, 1);
break;
case 1:
asciitext(blocksize - 2);
break;
case 2:
hexdata(blocksize - 2);
break;
case 3:
case 4:
error(FATAL, "resource type %d not implemented", blocktype);
break;
case 5:
return;
default:
error(FATAL, "unknown resource type %d", blocktype);
} /* End switch */
} /* End while */
} /* End of conv */
/*****************************************************************************/
asciitext(count)
int count; /* bytes left in the block */
{
int ch;
int i = 0;
/*
*
* Handles type 1 (ie. ASCII text) blocks. Changing carriage returns to newlines
* is all I've done.
*
*/
for ( i = 0; i < count; i++ ) {
if ( (ch = getc(fp_in)) == '\r' )
ch = '\n';
putc(ch, fp_out);
} /* End for */
} /* End of asciitext */
/*****************************************************************************/
hexdata(count)
int count; /* bytes left in the block */
{
int i;
int n;
/*
*
* Reads the next count bytes and converts each byte to hex. Also starts a new
* line every 80 hex characters.
*
*/
for ( i = 0, n = 0; i < count; i++ ) {
fprintf(fp_out, "%.2X", getc(fp_in));
if ( (++n % 40) == 0 )
putc('\n', fp_out);
} /* End for */
} /* End of hexdata */
/*****************************************************************************/
getint()
{
int val;
int i;
/*
*
* Reads the next four bytes into an integer and returns the value to the caller.
* First two bytes are probably always 0.
*
*/
for ( i = 0, val = (getc(fp_in) & 0377); i < 3; i++ )
val = (val << 8) | (getc(fp_in) & 0377);
return(val);
} /* End of getint */
/*****************************************************************************/
error(kind, mesg, a1, a2, a3)
int kind;
char *mesg;
unsigned a1, a2, a3;
{
/*
*
* Print *mesg then quit if kind is FATAL.
*
*/
if ( mesg != NULL && *mesg != '\0' ) {
fprintf(stderr, "%s: ", prog_name);
fprintf(stderr, mesg, a1, a2, a3);
putc('\n', stderr);
} /* End if */
if ( kind == FATAL && ignore == OFF )
exit(x_stat | 01);
} /* End of error */
/*****************************************************************************/
0707070014230735571004440057030057030000010015100522627503300003100000010626post.src/misc/laserbar.c /* laserbar -- filter to print barcodes on postscript printer */
#define MAIN 1
#define LABEL 01
#define NFLAG 02
#define SFLAG 04
#include <stdio.h>
#include <ctype.h>
static int code39[256] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* sp ! " # $ % & ' */
0304, 0, 0, 0, 0250, 0052, 0, 0,
/* ( ) * + , - - / */
0, 0, 0224, 0212, 0, 0205, 0604, 0242,
/* 0 1 2 3 4 5 6 7 */
0064, 0441, 0141, 0540, 0061, 0460, 0160, 0045,
/* 8 9 : ; < = > ? */
0444, 0144, 0, 0, 0, 0, 0, 0,
/* @ A B C D E F G */
0, 0411, 0111, 0510, 0031, 0430, 0130, 0015,
/* H I J K L M N O */
0414, 0114, 0034, 0403, 0103, 0502, 0023, 0422,
/* P Q R S T U V W */
0122, 0007, 0406, 0106, 0026, 0601, 0301, 0700,
/* X Y Z [ \ ] ^ _ */
0221, 0620, 0320, 0, 0, 0, 0, 0,
/* ` a b c d e f g */
0, 0411, 0111, 0510, 0031, 0430, 0130, 0015,
/* h i j k l m n o */
0414, 0114, 0034, 0403, 0103, 0502, 0023, 0422,
/* p q r s t u v w */
0122, 0007, 0406, 0106, 0026, 0601, 0301, 0700,
/* x y z { | } ~ del */
0221, 0620, 0320, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
static void barprt();
void laserbar();
#ifdef MAIN
main(argc, argv)
char **argv;
{
int c, flags = 0, error = 0;
double rotate = 0, xoffset = 0, yoffset = 0, xscale = 1, yscale = 1;
extern char *optarg;
extern int optind;
extern double atof();
extern void exit();
while ((c = getopt(argc, argv, "r:x:y:X:Y:lns")) != EOF) {
switch(c) {
case 'r':
rotate = atof(optarg);
break;
case 'x':
xoffset = atof(optarg);
break;
case 'y':
yoffset = atof(optarg);
break;
case 'X':
xscale = atof(optarg);
break;
case 'Y':
yscale = atof(optarg);
break;
case 'l':
flags |= LABEL;
break;
case 'n':
flags |= NFLAG;
break;
case 's':
flags |= SFLAG;
break;
case '?':
++error;
}
}
if ((argc - optind) != 1)
++error;
if (error) {
(void) fprintf(stderr,
"Usage: %s [-r rotate] [-x xoffset] [-y yoffset] [-X xscale] [-Y yscale] [-lns] string\n",
*argv);
exit(1);
}
laserbar(stdout, argv[optind], rotate, xoffset, yoffset, xscale, yscale, flags);
return 0;
}
#endif MAIN
static int right = 0;
void
laserbar(fp, str, rotate, xoffset, yoffset, xscale, yscale, flags)
FILE *fp;
char *str;
double rotate, xoffset, yoffset, xscale, yscale;
int flags;
{
xoffset *= 72.;
yoffset *= 72.;
(void) fprintf(fp, "gsave %s\n", (flags & NFLAG) ? "newpath" : "");
if (xoffset || yoffset)
(void) fprintf(fp, "%f %f moveto\n", xoffset, yoffset);
if (xscale != 1 || yscale != 1)
(void) fprintf(fp, "%f %f scale\n", xscale, yscale);
if (rotate)
(void) fprintf(fp, "%f rotate\n", rotate);
(void) fputs("/Helvetica findfont 16 scalefont setfont\n", fp);
(void) fputs("/w { 0 rmoveto gsave 3 setlinewidth 0 -72 rlineto stroke grestore } def\n", fp);
(void) fputs("/n { 0 rmoveto gsave 1 setlinewidth 0 -72 rlineto stroke grestore } def\n", fp);
(void) fputs("/l { gsave 2 -88 rmoveto show grestore } def\n", fp);
barprt(fp, '*', 0);
while (*str)
barprt(fp, *(str++), (flags & LABEL));
barprt(fp, '*', 0);
(void) fprintf(fp, "%sgrestore\n", (flags & SFLAG) ? "showpage " : "");
right = 0;
}
static void
barprt(fp, c, label)
FILE *fp;
int c, label;
{
int i, mask, bar, wide;
if (!(i = code39[c]))
return;
if (islower(c))
c = toupper(c);
if (label)
(void) fprintf(fp, "(%c) l", c);
else
(void) fputs(" ", fp);
for (bar = 1, mask = 0400; mask; bar = 1 - bar, mask >>= 1) {
wide = mask & i;
if (bar) {
if (wide)
++right;
(void) fprintf(fp, " %d %s", right, wide ? "w" : "n");
right = (wide ? 2 : 1);
}
else
right += (wide ? 3 : 1);
}
(void) fputs("\n", fp);
++right;
}
0707070014230735601004440057030057030000010014770522627503300003100000000226post.src/misc/setbaud.ps %
% Sets baud rate to 9600, options to 0 assuming the password is 0.
%
serverdict begin
0 exitserver
statusdict begin
25 9600 0 setsccbatch
end
0707070014230735611004440057030057030000010015200522627503300003000000012333post.src/misc/ibmfont.c /*
*
* Program that converts IBM font files to a format that works on Unix systems.
* Essentially all the information needed came from the Adobe paper "Supporting
* Downloadable PostScript Fonts". To use the program type,
*
* ibmfont font.ibm >font.unix
*
* where font.ibm is the font file, exactly as it came over from an IBM PC,
* and font.unix is equivalent host resident font file usable on Unix systems.
*
*/
#include <stdio.h>
#include <signal.h>
#define OFF 0
#define ON 1
#define NON_FATAL 0
#define FATAL 1
#define FALSE 0
#define TRUE 1
char **argv;
int argc;
char *prog_name;
int x_stat;
int debug = OFF;
int ignore = OFF;
FILE *fp_in = stdin;
FILE *fp_out = stdout;
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* IBM PC to Unix font converter.
*
*/
argc = agc;
argv = agv;
prog_name = argv[0];
options();
arguments();
exit(x_stat);
} /* End of main */
/*****************************************************************************/
options()
{
int ch;
char *names = "DI";
extern char *optarg;
extern int optind;
/*
*
* Command line options.
*
*/
while ( (ch = getopt(argc, argv, names)) != EOF ) {
switch ( ch ) {
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind;
argv += optind;
} /* End of options */
/*****************************************************************************/
arguments()
{
/*
*
* Everything esle is an input file. No arguments or '-' means stdin.
*
*/
if ( argc < 1 )
conv();
else
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
conv();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End of arguments */
/*****************************************************************************/
conv()
{
int blocksize;
int blocktype;
int seg;
long ftell();
/*
*
* Font files on the IBM PC are stored in a compressed binary format. Individual
* segments in the file are preceeded by a header that looks like,
*
* Byte 1: 128
* Byte 2: segment type (1=ASCII, 2=TOHEX, or 3=EOF)
* Bytes 3-6: length of the segment
* Bytes 7 ... data
*
*/
while ( 1 ) {
seg = ftell(fp_in);
if ( getc(fp_in) != 128 )
error(FATAL, "bad file format");
blocktype = getc(fp_in);
blocksize = getint(fp_in);
if ( debug == ON ) {
fprintf(stderr, "blocktype = %d, blocksize = %d\n", blocktype, blocksize);
fprintf(stderr, "start=0%o, end=0%o\n", seg, seg+blocksize+6);
fprintf(stderr, "start=%d, end=%d\n", seg, seg+blocksize+6);
} /* End if */
switch ( blocktype ) {
case 1:
asciitext(blocksize);
break;
case 2:
hexdata(blocksize);
break;
case 3:
return;
default:
error(FATAL, "unknown resource type %d", blocktype);
} /* End switch */
} /* End while */
} /* End of conv */
/*****************************************************************************/
asciitext(count)
int count; /* bytes left in the block */
{
int ch;
int i = 0;
/*
*
* Handles type 1 (ie. ASCII text) blocks. Changing carriage returns to newlines
* is all I've done.
*
*/
for ( i = 0; i < count; i++ ) {
if ( (ch = getc(fp_in)) == '\r' )
ch = '\n';
putc(ch, fp_out);
} /* End for */
} /* End of asciitext */
/*****************************************************************************/
hexdata(count)
int count; /* bytes left in the block */
{
int i;
int n;
/*
*
* Reads the next count bytes and converts each byte to hex. Also starts a new
* line every 80 hex characters.
*
*/
for ( i = 0, n = 0; i < count; i++ ) {
fprintf(fp_out, "%.2X", getc(fp_in));
if ( (++n % 40) == 0 )
putc('\n', fp_out);
} /* End for */
} /* End of hexdata */
/*****************************************************************************/
getint()
{
int val;
/*
*
* Reads the next four bytes into an integer and returns the value to the caller.
* First two bytes are probably always 0.
*
*/
val = getc(fp_in);
val |= (getc(fp_in) << 8);
val |= (getc(fp_in) << 16);
val |= (getc(fp_in) << 24);
return(val);
} /* End of getint */
/*****************************************************************************/
error(kind, mesg, a1, a2, a3)
int kind;
char *mesg;
unsigned a1, a2, a3;
{
/*
*
* Print mesg and quit if kind is FATAL.
*
*/
if ( mesg != NULL && *mesg != '\0' ) {
fprintf(stderr, "%s: ", prog_name);
fprintf(stderr, mesg, a1, a2, a3);
putc('\n', stderr);
} /* End if */
if ( kind == FATAL && ignore == OFF )
exit(x_stat | 01);
} /* End of error */
/*****************************************************************************/
0707070014230735621004440057030057030000010015300522627503300003000000014610post.src/misc/pscrypt.c /*
*
* Adobe's encryption/decryption algorithm for eexec and show. Runs in
* eexec mode unless told otherwise. Use,
*
* pscrypt file.cypher > file.clear
*
* to decrypt eexec input. Assumes file.cypher is hex with the key as the
* first four bytes, and writes file.clear as binary (omitting the key).
* Use
*
* pscrypt -e12ab34ef file.clear >file.cypher
*
* to encrypt file.clear (for eexec) using 12ab34ef as the key. Input is
* binary and output is hex. The key must be given as a hex number. Use
* -sshow to encrypt or decrypt a CharString or Subr,
*
* pscrypt -sshow file.cypher > file.clear
*
* Use -b or -x to read binary or hex input, and -B or -X to output binary
* or hex.
*
*/
#include <stdio.h>
#include <ctype.h>
#define ENCRYPT 0
#define DECRYPT 1
#define NOTSET -1
#define BINARY 0
#define HEX 1
#define LINELENGTH 40
#define CHARSTRING 4330
#define EEXEC 55665
#define MAGIC1 52845
#define MAGIC2 22719
int argc;
char **argv;
int mode = DECRYPT;
int input = NOTSET;
int output = NOTSET;
int outoffset = NOTSET;
int inoffset = NOTSET;
int cryptkey = 0; /* encryption key set with -e */
int linelength = LINELENGTH; /* only for hex output */
int lastchar = 0;
unsigned long seed = EEXEC;
unsigned long key;
FILE *fp_in = stdin;
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* Implementation of the encryption/decryption used by eexec and show.
*
*/
argc = agc;
argv = agv;
options();
initialize();
arguments();
exit(0);
} /* End of main */
/*****************************************************************************/
options()
{
int ch;
char *names = "bde:l:os:xBSX";
extern char *optarg;
extern int optind;
/*
*
* Command line options.
*
*/
while ( (ch = getopt(argc, argv, names)) != EOF )
switch ( ch ) {
case 'b': /* binary input */
input = BINARY;
break;
case 'd': /* decrypt */
mode = DECRYPT;
break;
case 'e': /* encrypt */
mode = ENCRYPT;
if ( *optarg == '0' && *optarg == 'x' )
optarg += 2;
sscanf(optarg, "%8x", &cryptkey);
break;
case 'l': /* line length hex output */
linelength = atoi(optarg);
break;
case 'o': /* output all bytes - debugging */
outoffset = 0;
break;
case 's': /* seed */
if ( *optarg == 'e' )
seed = EEXEC;
else if ( *optarg == 's' )
seed = CHARSTRING;
else if ( *optarg == '0' && *(optarg+1) == 'x' )
sscanf(optarg+2, "%x", &seed);
else if ( *optarg == '0' )
sscanf(optarg, "%o", &seed);
else sscanf(optarg, "%d", &seed);
break;
case 'x': /* hex input */
input = HEX;
break;
case 'B': /* binary output */
output = BINARY;
break;
case 'X': /* hex output */
output = HEX;
break;
case '?': /* don't understand the option */
fprintf(stderr, "bad option -%c\n", ch);
exit(1);
break;
default: /* don't know what to do for ch */
fprintf(stderr, "missing case for option -%c\n", ch);
exit(1);
break;
} /* End switch */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
initialize()
{
/*
*
* Initialization that has to be done after the options.
*
*/
key = seed;
if ( mode == DECRYPT ) {
input = (input == NOTSET) ? HEX : input;
output = (output == NOTSET) ? BINARY : output;
inoffset = (inoffset == NOTSET) ? 0 : inoffset;
outoffset = (outoffset == NOTSET) ? -4 : outoffset;
} else {
input = (input == NOTSET) ? BINARY : input;
output = (output == NOTSET) ? HEX : output;
inoffset = (inoffset == NOTSET) ? 4 : inoffset;
outoffset = (outoffset == NOTSET) ? 0 : outoffset;
} /* End else */
if ( linelength <= 0 )
linelength = LINELENGTH;
} /* End of initialize */
/*****************************************************************************/
arguments()
{
/*
*
* Everything left is an input file. No arguments or '-' means stdin.
*
*/
if ( argc < 1 )
crypt();
else
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL ) {
fprintf(stderr, "can't open %s\n", *argv);
exit(1);
} /* End if */
crypt();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End of arguments */
/*****************************************************************************/
crypt()
{
unsigned int cypher;
unsigned int clear;
/*
*
* Runs the encryption/decryption algorithm.
*
*/
while ( lastchar != EOF ) {
cypher = nextbyte();
clear = ((key >> 8) ^ cypher) & 0xFF;
key = (key + (mode == DECRYPT ? cypher : clear)) * MAGIC1 + MAGIC2;
if ( ++outoffset > 0 && lastchar != EOF ) {
if ( output == HEX ) {
printf("%.2X", clear);
if ( linelength > 0 && (outoffset % linelength) == 0 )
putchar('\n');
} else putchar(clear);
} /* End if */
} /* End while */
} /* End of crypt */
/*****************************************************************************/
nextbyte()
{
int val = EOF;
/*
*
* Returns the next byte. Uses cryptkey (i.e. what followed -e) while inoffset is
* positive, otherwise reads (hex or binary) from fp_in.
*
*/
if ( inoffset-- > 0 )
val = (cryptkey >> (inoffset*8)) & 0xFF;
else if ( input == HEX ) {
if ( (val = nexthexchar()) != EOF )
val = (val << 4) | nexthexchar();
} else if ( input == BINARY )
val = Getc(fp_in);
return(val);
} /* End of nextbyte */
/*****************************************************************************/
nexthexchar()
{
int ch;
/*
*
* Reads the next hex character.
*
*/
while ( (ch = Getc(fp_in)) != EOF && ! isxdigit(ch) ) ;
if ( isdigit(ch) )
ch -= '0';
else if ( isupper(ch) )
ch -= 'A' - 10;
else if ( islower(ch) )
ch -= 'a' - 10;
return(ch);
} /* End of nexthexchar */
/*****************************************************************************/
Getc(fp)
FILE *fp;
{
/*
*
* Reads the next byte from *fp, sets lastchar, and returns the character.
*
*/
return(lastchar = getc(fp));
} /* End of Getc */
/*****************************************************************************/
0707070014230735631004440057030057030000010014660522627503300003100000003244post.src/misc/laserbar.1 .TH LASERBAR 1
.SH NAME
laserbar \- produce bar codes on a PostScript laser printer
.SH SYNOPSIS
.B laserbar
[\fB-r\fP rotate] [\fB-x\fP xoffset] [\fB-y\fP yoffset]
[\fB-X\fP xscale] [\fB-Y\fP yscale] [\fB-lns\fP] string
.SH DESCRIPTION
.I Laserbar
prints on the standard output the PostScript text that will produce
(on a suitable laser printer) the \s-2CODE-39\s+2 bar code
corresponding to
.I string.
The \fBr\fP option may be used to specify a rotation (in
degrees) of the bar code.
The \fBx\fP, \fBy\fP, \fBX\fP, and \fBY\fP options may be used to specify
an x- or y-axis offset (in inches) or scaling factor, respectively.
(The offset is measured from the lower left corner of the page
to the upper left corner of the bar
code. By default, the bar code produced is one inch high, and is scaled
so that the narrowest elements are each 1/72-inch \- i.e., one point \- wide.)
If the \fBl\fP option is specified, the bar code produced is labeled.
If the \fBn\fP option is specified, the resulting PostScript text
includes a leading \f(CWnewpath\fP command, so that the text may stand
alone or precede any other PostScript commands.
If the \fBs\fP option is specified, the resulting PostScript text includes
a trailing \f(CWshowpage\fP command, so that the text may stand alone
or follow any other PostScript commands.
.P
This manual page (if it appears with a bar code printed on it) was
produced by something like the following sequence:
.IP
.ft CW
laserbar -x 2.5 -y 3 -l -n ABC123xyz > tempfile
.br
troff -man -Tpost laserbar.1 | dpost >> tempfile
.br
prt -dprinter -lpostscript tempfile
.ft P
.SH SEE ALSO
laserbar(3), prt(1), dpost(1), postbgi(1), postprint(1), postdmd(1), posttek(1), etc.
0707070014231310670407550057030057030000021027270522633075100002100000000000post.src/picpack 0707070014231307541006400057030057030000011033650522633075000003400000002737post.src/picpack/picpack.mk MAKE=/bin/make
MAKEFILE=picpack.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=picpack.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/tempnam.o
all : picpack
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
cp picpack $(POSTBIN)/picpack
@chmod 755 $(POSTBIN)/picpack
@chgrp $(GROUP) $(POSTBIN)/picpack
@chown $(OWNER) $(POSTBIN)/picpack
cp picpack.1 $(MAN1DIR)/picpack.1
@chmod 644 $(MAN1DIR)/picpack.1
@chgrp $(GROUP) $(MAN1DIR)/picpack.1
@chown $(OWNER) $(MAN1DIR)/picpack.1
clean :
rm -f *.o
clobber : clean
rm -f picpack
picpack : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o picpack $(OFILES)
picpack.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/tempnam.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk SYSTEM=$(SYSTEM) `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014231310711006440057030057030000011030000522627503400003300000030265post.src/picpack/picpack.c /*
*
* picpack - picture packing pre-processor
*
* A trivial troff pre-processor that copies files to stdout, expanding picture
* requests into an in-line format that's passed transparently through troff and
* handled by dpost. The program is an attempt to address requirements, expressed
* by several organizations, of being able to store a document as a single file
* (usually troff input) that can then be sent through dpost and ultimately to
* a PostScript printer.
*
* The program looks for strings listed in the keys[] array at the start of each
* line. When a picture request (as listed in keys[]) is found the second string
* on the line is taken to be a picture file pathname that's added (in transparent
* mode) to the output file. In addition each in-line picture file is preceeded by
* device control command (again passed through in transparent mode) that looks
* like,
*
* x X InlinePicture filename bytes
*
* where bytes is the size of the picture file (which begins on the next line)
* and filename is the pathname of the picture file. dpost uses both arguments to
* manage in-line pictures (in a big temp file). To handle pictures in diversions
* picpack reads each input file twice. The first pass looks for picture inclusion
* requests and copies each picture file transparently to the output file, while
* second pass just copies the input file to the output file. Things could still
* break, but the two pass method should handle most jobs.
*
* The recognized in-line picture requests are saved in keys[] and by default only
* expand .BP and .PI macro calls. The -k option changes the recognized strings,
* and may be needed if you've built your own picture inclusion macros on top of
* .BP or .PI or decided to list each picture file at the start of your input file
* using a dummy macro. For example you could require every in-line picture be
* named by a dummy macro (say .iP), then the command line,
*
* picpack -k.iP file > file.pack
*
* hits on lines that begin with .iP (rather than .BP or .PI), and the only files
* pulled in would be ones named as the second argument to the new .iP macro. The
* -k option accepts a space or comma separated list of up to 10 different key
* strings. picpack imposes no contraints on key strings, other than not allowing
* spaces or commas. A key string can begin with \" and in that case it would be
* troff comment.
*
* Although the program will help some users, there are obvious disadvantages.
* Perhaps the most important is that troff output files (with in-line pictures
* included) don't fit the device independent language accepted by important post
* processors like proof, and that means you won't be able to reliably preview a
* packed file on your 5620 or whatever. Another potential problem is that picture
* files can be large. Packing everything together in a single file at an early
* stage has a better chance of exceeding your system's ulimit.
*
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "gen.h" /* general purpose definitions */
#include "ext.h" /* external variable definitions */
#include "path.h" /* just for TEMPDIR definition */
char *keys[11] = {".BP", ".PI", NULL};
int quiet = FALSE;
FILE *fp_in = stdin; /* input */
FILE *fp_out = stdout; /* and output files */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A picture packing pre-processor that copies input files to stdout, expanding
* picture requests (as listed in keys[]) to an in-line format that can be passed
* through troff (using transparent mode) and handled later by dpost.
*
*/
argc = agc; /* global so everyone can use them */
argv = agv;
prog_name = argv[0]; /* just for error messages */
options(); /* command line options */
arguments(); /* translate all the input files */
done(); /* clean things up */
exit(x_stat); /* everything probably went OK */
} /* End of main */
/*****************************************************************************/
options()
{
int ch; /* name returned by getopt() */
extern char *optarg; /* option argument set by getopt() */
extern int optind;
/*
*
* Handles the command line options.
*
*/
while ( (ch = getopt(argc, argv, "k:qDI")) != EOF ) {
switch ( ch ) {
case 'k': /* new expansion key strings */
newkeys(optarg);
break;
case 'q': /* disables "missing picture" messages */
quiet = TRUE;
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't know the option */
error(FATAL, "");
break;
default:
error(FATAL, "missing case for option %c", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-options args */
argv += optind;
} /* End of options */
/*****************************************************************************/
newkeys(list)
char *list; /* comma or space separated key strings */
{
char *p; /* next key string from *list */
int i; /* goes in keys[i] */
int n; /* last key string slot in keys[] */
/*
*
* Separates *list into space or comma separated strings and adds each to the
* keys[] array. The strings in keys[] are used to locate the picture inclusion
* requests that are translated to the in-line format. The keys array must end
* with a NULL pointer and by default only expands .BP and .PI macro calls.
*
*/
n = (sizeof(keys) / sizeof(char *)) - 1;
for ( i = 0, p = strtok(list, " ,"); p != NULL; i++, p = strtok(NULL, " ,") )
if ( i >= n )
error(FATAL, "too many key strings");
else keys[i] = p;
keys[i] = NULL;
} /* End of newkeys */
/*****************************************************************************/
arguments()
{
FILE *copystdin();
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we process stdin, after copying it to a temporary file.
*
*/
if ( argc < 1 ) {
fp_in = copystdin();
picpack();
} else
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = copystdin();
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
picpack();
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End of arguments */
/*****************************************************************************/
FILE *copystdin()
{
char *tfile; /* temporary file name */
int fd_out; /* and its file descriptor */
FILE *fp; /* return value - the new input file */
/*
*
* Copies stdin to a temp file, unlinks the file, and returns the file pointer
* for the new temporary file to the caller. Needed because we read each input
* file twice in an attempt to handle pictures in diversions.
*
*/
if ( (tfile = tempnam(TEMPDIR, "post")) == NULL )
error(FATAL, "can't generate temp file name");
if ( (fd_out = creat(tfile, 0660)) == -1 )
error(FATAL, "can't create %s", tfile);
copyfile(fileno(stdin), fd_out);
close(fd_out);
if ( (fp = fopen(tfile, "r")) == NULL )
error(FATAL, "can't open %s", tfile);
unlink(tfile);
return(fp);
} /* End of copystdin */
/*****************************************************************************/
copyfile(fd_in, fd_out)
int fd_in; /* input */
int fd_out; /* and output files */
{
char buf[512]; /* internal buffer for reads and writes */
int count; /* number of bytes put in buf[] */
/*
*
* Copies file fd_in to fd_out. Handles the second pass for each input file and
* also used to copy stdin to a temporary file.
*
*/
while ( (count = read(fd_in, buf, sizeof(buf))) > 0 )
if ( write(fd_out, buf, count) != count )
error(FATAL, "write error");
} /* End of copyfile */
/*****************************************************************************/
done()
{
/*
*
* Finished with all the input files - unlink the temporary file that was used
* to record the in-line picture file pathnames.
*
*/
if ( temp_file != NULL )
unlink(temp_file);
} /* End of done */
/*****************************************************************************/
picpack()
{
char line[512]; /* next input line */
char name[100]; /* picture file names - from BP or PI */
int i; /* for looking through keys[] */
/*
*
* Handles the two passes over the next input file. First pass compares the start
* of each line in *fp_in with the key strings saved in the keys[] array. If a
* match is found inline() is called to copy the picture file (ie. the file named
* as the second string in line[]) to stdout, provided the file hasn't previously
* been copied. The second pass goes back to the start of fp_in and copies it all
* to the output file.
*
*/
while ( fgets(line, sizeof(line), fp_in) != NULL ) {
for ( i = 0; keys[i] != NULL; i++ )
if ( strncmp(line, keys[i], strlen(keys[i])) == 0 ) {
if ( sscanf(line, "%*s %s", name) == 1 ) {
strtok(name, "(");
if ( gotpicfile(name) == FALSE )
inline(name);
} /* End if */
} /* End if */
} /* End while */
fflush(fp_out); /* second pass - copy fp_in to fp_out */
fseek(fp_in, 0L, 0);
copyfile(fileno(fp_in), fileno(fp_out));
} /* End of picpack */
/*****************************************************************************/
inline(name)
char *name; /* name of the in-line picture file */
{
long size; /* size in bytes - from fstat */
FILE *fp; /* for reading *name */
int ch; /* next character from picture file */
int lastch = '\n'; /* so we know when to put out \! */
struct stat sbuf; /* for the picture file size */
/*
*
* Copies the picture file *name to the output file in an in-line format that can
* be passed through troff and recovered later by dpost. Transparent mode is used
* so each line starts with \! and all \ characters must be escaped. The in-line
* picture sequence begins with an "x X InlinePicture" device control command that
* names the picture file and gives its size (in bytes).
*
*/
if ( (fp = fopen(name, "r")) != NULL ) {
fstat(fileno(fp), &sbuf);
if ( (size = sbuf.st_size) > 0 ) {
fprintf(fp_out, "\\!x X InlinePicture %s %ld\n", name, size);
while ( (ch = getc(fp)) != EOF ) {
if ( lastch == '\n' )
fprintf(fp_out, "\\!");
if ( ch == '\\' )
putc('\\', fp_out);
putc(lastch = ch, fp_out);
} /* End while */
if ( lastch != '\n' )
putc('\n', fp_out);
} /* End if */
fclose(fp);
addpicfile(name);
} else if ( quiet == FALSE )
error(NON_FATAL, "can't read picture file %s", name);
} /* End of inline */
/*****************************************************************************/
gotpicfile(name)
char *name;
{
char buf[100];
FILE *fp_pic;
/*
*
* Checks the list of previously added picture files in *temp_file and returns
* FALSE if it's a new file and TRUE otherwise. Probably should open the temp
* file once for update and leave it open, rather than opening and closing it
* every time.
*
*/
if ( temp_file != NULL )
if ( (fp_pic = fopen(temp_file, "r")) != NULL ) {
while ( fscanf(fp_pic, "%s", buf) != EOF )
if ( strcmp(buf, name) == 0 ) {
fclose(fp_pic);
return(TRUE);
} /* End if */
fclose(fp_pic);
} /* End if */
return(FALSE);
} /* End of gotpicfile */
/*****************************************************************************/
addpicfile(name)
char *name;
{
FILE *fp_pic;
/*
*
* Adds string *name to the list of in-line picture files that's maintained in
* *temp_file. Should undoubtedly open the file once for update and use fseek()
* to move around in the file!
*
*/
if ( temp_file == NULL )
if ( (temp_file = tempnam(TEMPDIR, "picpac")) == NULL )
return;
if ( (fp_pic = fopen(temp_file, "a")) != NULL ) {
fprintf(fp_pic, "%s\n", name);
fclose(fp_pic);
} /* End if */
} /* End of addpicfile */
/*****************************************************************************/
0707070014231310721006440057030057030000011030250522627503400003300000005252post.src/picpack/picpack.1 .TH PICPACK 1
.SH NAME
.B picpack
\- PostScript picture packing preprocessor
.SH SYNOPSIS
\*(mBpicpack\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B picpack
copies
.I files
to stdout, expanding picture inclusion requests
(marked by the
.MW .BP
or
.MW .PI
macros) into an in-line
format that can be passed through
.B troff
and handled by
.BR dpost .
If no
.I files
are specified
or if
.OP \-
is one of the input
.I files
standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-k list
.I list
is a comma- or space-separated string of words used to locate
picture inclusion requests.
The start of every line in the input
.I files
is compared with each word in
.I list .
If there is a match, the second string on the line is
taken as the pathname of a picture file that is added
to the output file.
The default
.I list
is
.RM `` ".BP .PI ''.
.TP
.OP \-q
Suppress ``missing picture file'' error messages.
.PP
.B picpack
is a trivial preprocessor that, in a sense, duplicates some of the
picture inclusion capabilities already available in
.BR dpost .
.B picpack
should not be used if your formatting command line includes
a call to
.BR dpost .
Its only purpose is to combine picture files with text in a single
file that can be passed through
.B troff
and unpacked, at some later time, by
.BR dpost .
The original picture inclusion mechanism, with files are pulled in by
.BR dpost ,
is the preferred approach.
.SH EXAMPLES
A typical application might be in a distributed printing environment
where everything up to
.B troff
is run by the user and everything after
.B troff
is handled by a spooling daemon (perhaps
.BR lp ).
In that case the command line would be,
.EX
pic \f2file\fP | tbl | eqn | picpack | troff -mm -Tpost | lp
.EE
A poor example, although one that should still work, would be,
.EX
pic \f2file\fP | tbl | eqn | picpack | troff -mm -Tpost | dpost >\f2file\fP.ps
.EE
In this case picture inclusion requests could (and should) be handled by
.BR dpost .
Running
.B picpack
is not needed or even recommended.
It should be dropped from any pipeline that includes a call to
.BR dpost .
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully processed.
.SH WARNINGS
.PP
Combining pictures and text using the capabilities available in
.B dpost
is the recommended approach and is always guaranteed to be more
efficient than
.BR picpack .
Running
.B picpack
and
.B dpost
in the same pipeline makes little sense.
.PP
Using
.B picpack
will likely result in files that can no longer be reliably passed
through other important
.B troff
postprocessors like
.BR proof .
At present
.B picpack
is only guaranteed to work with
.BR dpost .
.SH SEE ALSO
.BR dpost (1),
.BR troff (1)
0707070014230265620407550057030057030000020675370522633075200002100000000000post.src/postbgi 0707070014230265771006400057030057030000010664560522633075200003400000003742post.src/postbgi/postbgi.mk MAKE=/bin/make
MAKEFILE=postbgi.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=postbgi.h\
$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=postbgi.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o
all : postbgi
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp postbgi $(POSTBIN)/postbgi
@chmod 755 $(POSTBIN)/postbgi
@chgrp $(GROUP) $(POSTBIN)/postbgi
@chown $(OWNER) $(POSTBIN)/postbgi
cp postbgi.ps $(POSTLIB)/postbgi.ps
@chmod 644 $(POSTLIB)/postbgi.ps
@chgrp $(GROUP) $(POSTLIB)/postbgi.ps
@chown $(OWNER) $(POSTLIB)/postbgi.ps
cp postbgi.1 $(MAN1DIR)/postbgi.1
@chmod 644 $(MAN1DIR)/postbgi.1
@chgrp $(GROUP) $(MAN1DIR)/postbgi.1
@chown $(OWNER) $(MAN1DIR)/postbgi.1
clean :
rm -f *.o
clobber : clean
rm -f postbgi
postbgi : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postbgi $(OFILES) -lm
postbgi.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
postbgi.1 >XXX.1; \
mv XXX.1 postbgi.1
0707070014230265641006440057030057030000010675700522627503400003300000117472post.src/postbgi/postbgi.c /*
*
* postbgi - BGI (Basic Graphical Instructions) to PostScript translator.
*
* A simple program that translates BGI files into PostScript. Probably only
* useful in Computer Centers that support STARE or PRISM plotters. Most of the
* code was borrowed from the corresponding program that was written for printers
* that understand Impress.
*
* Extending the original program to handle PRISM jobs was not trivial. Graphics
* packages that support PRISM occasionally use BGI commands that I ignored in the
* STARE implementation. Subroutines, color requests, patterns (for filling), and
* filled trapeziods were the most important omissions. All are now implemented,
* and at present only repeats, filled slices, and raster rectangles are missing.
*
* Pattern filling results were not always predictable or even good, unless the
* halftone screen definitions were changed and scaling was adjusted so one pixel
* in user space mapped into an integral number of device space pixels. Doing that
* makes the resulting PostScript output device dependent, but was often necessary.
* I've added two booleans to the PostScript prologue (fixscreen and scaletodevice)
* that control what's done. By default both are false (check postbgi.ps) but can
* be set to true on the command line using the -P option or by hand by changing
* the definitions in the prologue. A command line that would set fixscreen and
* scaletodevice true would look like,
*
* postbgi -P"/fixscreen true" -P"/scaletodevice true" file >file.ps
*
* Several other approaches are available if you want to have your spooler handle
* STARE and PRISM jobs differently. A boolean called prism is defined in the
* prologue (postbgi.ps) and if it's set to true PostScript procedure setup will
* set fixscreen and scaletodevice to true before anything important is done. That
* means the following command line,
*
* postbgi -P"/prism true" file >file.ps
*
* accomplishes the same things as the last example. Two different prologue files,
* one for STARE jobs and the other for PRISM, could be used and the spooler could
* point postbgi to the appropriate one using the -L option. In that case the only
* important difference in the two prologues would be the definition of prism. The
* prologue used for PRISM jobs would have prism set to true, while the STARE
* prologue would have it set to false.
*
* Also included is code that ties lines to device space coordinates. What you get
* is a consistent line thickness, but placement of lines won't be exact. It's a
* trade-off that should be right for most jobs. Everything is implemented in the
* prologue (postbgi.ps) and nothing will be done if the linewidth is zero or if
* the boolean fixlinewidth (again in postbgi.ps) is false. Once again the -P
* option can be used to set fixlinewidth to whatever you choose.
*
* BGI supports color mixing but PostScript doesn't. BGI files that expect to mix
* colors won't print properly. PostScript's fill operator overlays whatever has
* already been put down. Implementing color mixing would have been a terribly
* difficult job - not worth the effort!
*
* The PostScript prologue is copied from *prologue before any of the input files
* are translated. The program expects that the following PostScript procedures
* are defined in that file:
*
* setup
*
* mark ... setup -
*
* Handles special initialization stuff that depends on how the program
* was called. Expects to find a mark followed by key/value pairs on the
* stack. The def operator is applied to each pair up to the mark, then
* the default state is set up.
*
* pagesetup
*
* page pagesetup -
*
* Does whatever is needed to set things up for the next page. Expects
* to find the current page number on the stack.
*
* v
*
* dx1 dy1 ... dxn dyn x y v -
*
* Draws the vector described by the numbers on the stack. The top two
* numbers are the coordinates of the starting point. The rest of the
* numbers are relative displacements from the preceeding point.
*
* pp
*
* x1 y1 ... xn yn string pp -
*
* Prints string, which is always a single character, at the points
* represented by the rest of the numbers on the stack.
*
* R
*
* n deltax deltay x y R -
*
* Creates a rectangular path with its lower left corner at (x, y) and
* sides of length deltax and deltay. The resulting path is stroked if
* n is 0 and filled otherwise.
*
* T
*
* dx3 dy3 dx2 dy2 dx1 dy1 x y T -
*
* Fills a trapezoid starting at (x, y) and having relative displacements
* given by the (dx, dy) pairs.
*
* t
*
* angle x y string t -
*
* Prints string starting at (x, y) using an orientation of angle degrees.
* The PostScript procedure can handle any angle, but BGI files will only
* request 0 or 90 degrees. Text printed at any other orientation will be
* vector generated.
*
* p
*
* x y p -
*
* Called to mark the point (x, y). It fills a small circle, that right
* now has a constant radius. This stuff could probably be much more
* efficient?
*
* l
*
* array l -
*
* Sets the line drawing mode according to the description given in
* array. The arrays that describe the different line styles are declared
* in STYLES (file posttek.h), although it would be better to have them
* defined in the prologue.
*
* c
*
* red green blue c -
*
* Sets the current PostScript RGB color using setrgbcolor. Also used for
* selecting appropriate patterns as colors.
*
* f
*
* bgisize f -
*
* Changes the size of the font that's used to print text. bgisize is a
* grid separation in a 5 by 7 array in which characters are assumed to
* be built.
*
* done
*
* done
*
* Makes sure the last page is printed. Only needed when we're printing
* more than one page on each sheet of paper.
*
* The default line width is zero, which forces lines to be one pixel wide. That
* works well for 'write to black' engines but won't be right for 'write to white'
* engines. The line width can be changed using the -w option, or you can change
* the initialization of linewidth in the prologue. Code in the prologue supports
* the generation of uniform width lines when linewidth is non-zero and boolean
* fixlinewidth is true.
*
* Many default values, like the magnification and orientation, are defined in
* the prologue, which is where they belong. If they're changed (by options), an
* appropriate definition is made after the prologue is added to the output file.
* The -P option passes arbitrary PostScript through to the output file. Among
* other things it can be used to set (or change) values that can't be accessed by
* other options.
*
*/
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
#include <math.h>
#include <ctype.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for the prologue */
#include "ext.h" /* external variable declarations */
#include "postbgi.h" /* a few definitions just used here */
char *optnames = "a:c:f:m:n:o:p:w:x:y:A:C:E:J:L:P:R:DI";
char *prologue = POSTBGI; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
char *styles[] = STYLES; /* descriptions of line styles */
int hpos = 0; /* current horizontal */
int vpos = 0; /* and vertical position */
int bgisize = BGISIZE; /* just the character grid spacing */
int linespace; /* distance between lines of text */
int bgimode; /* character or graph mode */
int in_subr = FALSE; /* currently defining a subroutine */
int in_global = FALSE; /* to save space with subroutine defs */
int subr_id = 0; /* defining this subroutine */
int shpos = 0; /* starting horizontal */
int svpos = 0; /* and vertical positions - subroutines */
Disp displacement[64]; /* dx and dy after a subroutine call */
Fontmap fontmap[] = FONTMAP; /* for translating font names */
char *fontname = "Courier"; /* use this PostScript font */
int page = 0; /* page we're working on */
int printed = 0; /* printed this many pages */
FILE *fp_in = stdin; /* read from this file */
FILE *fp_out = NULL; /* and write stuff here */
FILE *fp_acct = NULL; /* for accounting data */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A program that converts BGI (Basic Graphical Instructions) files generated by
* packages like GRAFPAC and DISSPLA into PostScript. It does an adequate job but
* is far from perfect. A few things still haven't been implemented (eg. repeats
* and raster rectangles), but what's here should be good enough for most of our
* STARE and PRISM jobs. Color mixing (in PRISM jobs) won't work on PostScript
* printers, and there's no chance I'll implement it!
*
*/
argc = agc; /* global so everyone can use them */
argv = agv;
prog_name = argv[0]; /* just for error messages */
init_signals(); /* set up interrupt handling */
header(); /* PostScript header comments */
options(); /* command line options */
setup(); /* for PostScript */
arguments(); /* followed by each input file */
done(); /* print the last page etc. */
account(); /* job accounting data */
exit(x_stat); /* everything probably went OK */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Make sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
/*
*
* Scans the option list looking for things, like the prologue file, that we need
* right away but could be changed from the default. Doing things this way is an
* attempt to conform to Adobe's latest file structuring conventions. In particular
* they now say there should be nothing executed in the prologue, and they have
* added two new comments that delimit global initialization calls. Once we know
* where things really are we write out the job header, follow it by the prologue,
* and then add the ENDPROLOG and BEGINSETUP comments.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch; /* option name - from getopt() */
/*
*
* Reads and processes the command line options.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s def\n", optarg);
break;
case 'f': /* new font */
fontname = get_font(optarg);
fprintf(stdout, "/font /%s def\n", fontname);
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'w': /* line width */
fprintf(stdout, "/linewidth %s def\n", optarg);
break;
case 'x': /* shift horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* force job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding */
fontencoding = optarg;
break;
case 'L': /* Postscript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* special global or page level request */
saverequest(optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't know the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
char *get_font(name)
char *name; /* name the user asked for */
{
int i; /* for looking through fontmap[] */
/*
*
* Called from options() to map a user's font name into a legal PostScript name.
* If the lookup fails *name is returned to the caller. That should let you choose
* any PostScript font.
*
*/
for ( i = 0; fontmap[i].name != NULL; i++ )
if ( strcmp(name, fontmap[i].name) == 0 )
return(fontmap[i].val);
return(name);
} /* End of get_font */
/*****************************************************************************/
setup()
{
/*
*
* Handles things that must be done after the options are read but before the
* input files are processed.
*
*/
writerequest(0, stdout); /* global requests eg. manual feed */
setencoding(fontencoding);
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) {
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
} /* End of setup */
/*****************************************************************************/
arguments()
{
/*
*
* Makes sure all the non-option command line options are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll process stdin.
*
*/
if ( argc < 1 )
conv();
else
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
conv();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Finished with the last input file, so mark the end of the pages, make sure the
* last page is printed, and restore the initial environment.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, fontname);
fprintf(stdout, "%s %d\n", PAGES, printed);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Writes an accounting record to *fp_acct, provided it's not NULL.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
conv()
{
int ch; /* next input character */
/*
*
* Controls the conversion of BGI files into PostScript. Not everything has been
* implemented, but what's been done should be good enough for our purposes.
*
*/
redirect(-1); /* get ready for the first page */
bgimode = 0;
formfeed();
while ( (ch = get_char()) != EOF ) {
switch ( ch ) {
case BRCHAR: /* rotated character mode */
bgimode = ch;
text(90);
break;
case BCHAR: /* graphical character mode */
bgimode = ch;
text(0);
break;
case BGRAPH: /* graphical master mode */
bgimode = ch;
break;
case BSUB: /* subroutine definition */
subr_def();
break;
case BRET: /* end of subroutine */
subr_end();
break;
case BCALL: /* subroutine call */
subr_call();
break;
case BEND: /* end display - page */
formfeed();
break;
case BERASE: /* erase - shouldn't be used */
error(FATAL, "BGI erase opcode obsolete");
break;
case BREP: /* repeat */
error(FATAL, "Repeat not implemented");
repeat();
break;
case BSETX: /* new x coordinate */
hgoto(get_int(0));
break;
case BSETY: /* new y coordinate */
vgoto(get_int(0));
break;
case BSETXY: /* new x and y coordinates */
hgoto(get_int(0));
vgoto(get_int(0));
break;
case BINTEN: /* mark the current point */
fprintf(fp_out, "%d %d p\n", hpos, vpos);
break;
case BVISX: /* visible x */
vector(X_COORD, VISIBLE);
break;
case BINVISX: /* invisible x */
vector(X_COORD, INVISIBLE);
break;
case BVISY: /* visible y */
vector(Y_COORD, VISIBLE);
break;
case BINVISY: /* invisible y */
vector(Y_COORD, INVISIBLE);
break;
case BVEC: /* arbitrary vector */
vector(LONGVECTOR, VISIBLE);
break;
case BSVEC: /* short vector */
vector(SHORTVECTOR, VISIBLE);
break;
case BRECT: /* draw rectangle */
rectangle(OUTLINE);
break;
case BPOINT1: /* point plot 1 */
case BPOINT: /* point plot 2 */
point_plot(ch, get_char());
break;
case BLINE: /* line plot */
line_plot();
break;
case BLTY: /* line type */
fprintf(fp_out, "%s l\n", styles[get_data()]);
break;
case BARC: /* circular arc */
arc(OUTLINE);
break;
case BFARC: /* filled circle */
arc(FILL);
break;
case BFRECT: /* filled rectangle */
rectangle(FILL);
break;
case BRASRECT: /* raster rectangle */
error(FATAL, "Raster Rectangle not implemented");
break;
case BCOL: /* select color */
set_color(get_data());
break;
case BFTRAPH: /* filled trapezoid */
trapezoid();
break;
case BPAT: /* pattern for area filling */
pattern();
break;
case BCSZ: /* change BGI character 'size' */
setsize(get_data());
break;
case BNOISE: /* from bad file format */
break;
default: /* don't recognize the code */
error(FATAL, "bad BGI command %d (0%o)", ch, ch);
break;
} /* End switch */
if ( debug == ON )
fprintf(stderr, "\n");
} /* End while */
formfeed(); /* in case BEND was missing */
} /* End of conv */
/*****************************************************************************/
hgoto(n)
int n; /* new horizontal position */
{
/*
*
* Sets the current BGI horizontal position to n.
*
*/
hpos = n;
} /* End of hgoto */
/*****************************************************************************/
vgoto(n)
int n; /* move to this vertical position */
{
/*
*
* Sets the absolute vertical position to n.
*
*/
vpos = n;
} /* End of vgoto */
/*****************************************************************************/
setsize(n)
int n; /* BGI size - just a grid separation */
{
/*
*
* Called when we're supposed to change the BGI character size to n. The BGI
* size is the grid separation in a 5 by 7 array in which characters are assumed
* to be built.
*
*/
bgisize = n;
linespace = LINESPACE(bgisize);
fprintf(fp_out, "%d f\n", bgisize);
if ( debug == ON )
fprintf(stderr, "BGI size = %d\n", n);
} /* End of setsize */
/*****************************************************************************/
repeat()
{
int count; /* repeat this many times */
int ch; /* next input character */
/*
*
* Haven't implemented repeats, although it wouldn't be difficult. Apparently it's
* not used by any graphics packages that generate BGI.
*
*/
count = get_int(); /* get the repeat count */
while ( (ch = get_char()) != EOF && ch != BENDR ) ;
} /* End of repeat */
/*****************************************************************************/
text(angle)
int angle; /* either 0 or 90 degrees */
{
int ch; /* next character from file *fp_in */
/*
*
* Called from conv() after we've entered one of the graphical character modes.
* Characters are read from the input file and printed until the next mode change
* opcode is found (or until EOF). angle will be 90 for rotated character mode
* and 0 otherwise.
*
*
*/
fprintf(fp_out, "%d %d %d(", angle, hpos, vpos);
while ( (ch = get_char()) != EOF ) {
if ( ch == BGRAPH || ch == BCHAR || ch == BRCHAR ) {
ungetc(ch, fp_in);
position--;
break;
} /* End if */
switch ( ch ) {
case '\012':
vgoto(vpos - linespace);
case '\015':
hgoto(0);
fprintf(fp_out, ")t\n%d %d %d(", angle, hpos, vpos);
break;
case '(':
case ')':
case '\\':
putc('\\', fp_out);
default:
if ( isascii(ch) && isprint(ch) )
putc(ch, fp_out);
else fprintf(fp_out, "\\%.3o", ch & 0377);
break;
} /* End switch */
} /* End while */
fprintf(fp_out, ") t\n");
} /* End of text */
/*****************************************************************************/
formfeed()
{
int ch; /* repeat count for this page */
/*
*
* Does whatever is needed to print the last page and get ready for the next one.
* It's called, from conv(), after a BEND code is processed. I'm ignoring the
* copy count that's expected to follow each page.
*
*/
if ( bgimode == BGRAPH && (ch = get_char()) != EOF && ! (ch & MSB) ) {
ungetc(ch, fp_in);
position--;
} /* End if */
if ( fp_out == stdout ) /* count the last page */
printed++;
fprintf(fp_out, "cleartomark\n");
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
while ( (ch = get_char()) == 0 ) ; /* skip any NULL characters */
ungetc(ch, fp_in);
position--;
if ( ungetc(getc(fp_in), fp_in) == EOF )
redirect(-1);
else redirect(++page);
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fprintf(fp_out, "/saveobj save def\n");
fprintf(fp_out, "mark\n");
writerequest(printed+1, fp_out);
fprintf(fp_out, "%d pagesetup\n", printed+1);
setsize(bgisize);
hpos = vpos = 0;
} /* End of formfeed */
/*****************************************************************************/
subr_def()
{
/*
*
* Starts a subroutine definition. All subroutines are defined as PostScript
* procedures that begin with the character S and end with the subroutine's id
* (a number between 0 and 63 - I guess). The primary, and perhaps only use of
* subroutines is in special color plots produced by several graphics libraries,
* and even there it's not all that common. I've also chosen not to worry about
* nested subroutine definitions - that would certainly be overkill!
*
* All subroutines set up their own (translated) coordinate system, do their work
* in that system, and restore things when they exit. To make everything work
* properly we save the current point (in shpos and svpos), set our position to
* (0, 0), and restore things at the end of the subroutine definition. That means
* hpos and vpos measure the relative displacement after a subroutine returns, and
* we save those values in the displacement[] array. The displacements are used
* (in subr_call()) to properly adjust our position after each subroutine call,
* and all subroutines are called with the current x and y coordinates on top of
* the stack.
*
*/
if ( in_subr == TRUE ) /* a nested subroutine definition?? */
error(FATAL, "can't handle nested subroutine definitions");
if ( (subr_id = get_data()) == EOF )
error(FATAL, "missing subroutine identifier");
if ( in_global == FALSE ) { /* just used to reduce file size some */
fprintf(fp_out, "cleartomark\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s", BEGINGLOBAL);
in_global = TRUE;
} /* End if */
fprintf(fp_out, "/S%d {\n", subr_id);
fprintf(fp_out, "gsave translate\n");
shpos = hpos; /* save our current position */
svpos = vpos;
hgoto(0); /* start at the origin */
vgoto(0);
in_subr = TRUE; /* in a subroutine definition */
} /* End of subr_def */
/*****************************************************************************/
subr_end()
{
int ch; /* for looking at next opcode */
/*
*
* Handles stuff needed at the end of each subroutine. Want to remember the change
* in horizontal and vertical positions for each subroutine so we can adjust our
* position after each call - just in case. The current position was set to (0, 0)
* before we started the subroutine definition, so when we get here hpos and vpos
* are the relative displacements after the subroutine is called. They're saved in
* the displacement[] array and used to adjust the current position when we return
* from a subroutine.
*
*/
if ( in_subr == FALSE ) /* not in a subroutine definition?? */
error(FATAL, "subroutine end without corresponding start");
fprintf(fp_out, "grestore\n");
fprintf(fp_out, "} def\n");
if ( in_global == TRUE && (ch = get_char()) != BSUB ) {
fprintf(fp_out, "%s", ENDGLOBAL);
fprintf(fp_out, "/saveobj save def\n");
fprintf(fp_out, "mark\n");
in_global = FALSE;
} /* End if */
ungetc(ch, fp_in); /* put back the next opcode */
displacement[subr_id].dx = hpos;
displacement[subr_id].dy = vpos;
hgoto(shpos); /* back to where we started */
vgoto(svpos);
in_subr = FALSE; /* done with the definition */
} /* End of subr_end */
/*****************************************************************************/
subr_call()
{
int ch; /* next byte from *fp_in */
int id; /* subroutine id if ch wasn't an opcode */
/*
*
* Handles subroutine calls. Everything that follows the BCALL opcode (up to the
* next opcode) is taken as a subroutine identifier - thus the loop that generates
* the subroutine calls.
*
*/
while ( (ch = get_char()) != EOF && (ch & MSB) ) {
id = ch & DMASK;
fprintf(fp_out, "%d %d S%d\n", hpos, vpos, id);
hgoto(hpos + displacement[id].dx); /* adjust our position */
vgoto(vpos + displacement[id].dy);
} /* End while */
ungetc(ch, fp_in);
} /* End of subr_call */
/*****************************************************************************/
vector(var, mode)
int var; /* coordinate that varies next? */
int mode; /* VISIBLE or INVISIBLE vectors */
{
int ch; /* next character from *fp_in */
int x, y; /* line drawn to this point */
int count = 0; /* number of points so far */
/*
*
* Handles plotting of all types of BGI vectors. If it's a manhattan vector var
* specifies which coordinate will be changed by the next number in the input
* file.
*
*/
x = hpos; /* set up the first point */
y = vpos;
while ( (ch = get_char()) != EOF && ch & MSB ) {
if ( var == X_COORD ) /* next length is change in x */
x += get_int(ch);
else if ( var == Y_COORD ) /* it's the change in y */
y += get_int(ch);
else if ( var == LONGVECTOR ) { /* long vector */
x += get_int(ch);
y += get_int(0);
} else { /* must be a short vector */
x += ((ch & MSBMAG) * ((ch & SGNB) ? -1 : 1));
y += (((ch = get_data()) & MSBMAG) * ((ch & SGNB) ? -1 : 1));
} /* End else */
if ( mode == VISIBLE ) { /* draw the line segment */
fprintf(fp_out, "%d %d\n", hpos - x, vpos - y);
count++;
} /* End if */
hgoto(x); /* adjust the current BGI position */
vgoto(y);
if ( var == X_COORD ) /* vertical length comes next */
var = Y_COORD;
else if ( var == Y_COORD ) /* change horizontal next */
var = X_COORD;
} /* End while */
if ( count > 0 )
fprintf(fp_out, "%d %d v\n", hpos, vpos);
ungetc(ch, fp_in); /* it wasn't part of the vector */
position--;
} /* End of vector */
/*****************************************************************************/
rectangle(mode)
int mode; /* FILL or OUTLINE the rectangle */
{
int deltax; /* displacement for horizontal side */
int deltay; /* same but for vertical sides */
/*
*
* Draws a rectangle and either outlines or fills it, depending on the value of
* mode. Would be clearer, and perhaps better, if {stroke} or {fill} were put on
* the stack instead of 0 or 1. R could then define the path and just do an exec
* to fill or stroke it.
*
*/
deltax = get_int(0); /* get the height and width */
deltay = get_int(0);
if ( mode == OUTLINE )
fprintf(fp_out, "0 %d %d %d %d R\n", deltax, deltay, hpos, vpos);
else fprintf(fp_out, "1 %d %d %d %d R\n", deltax, deltay, hpos, vpos);
} /* End of rectangle */
/*****************************************************************************/
trapezoid()
{
int kind; /* which sides are parallel */
int d[6]; /* true displacements - depends on kind */
/*
*
* Handles filled trapeziods. A data byte of 0101 following the opcode means the
* horizontal sides are parallel, 0102 means the vertical sides are parallel.
* Filling is handled by eofill so we don't need to get things in the right order.
*
*/
kind = get_data();
d[0] = get_int(0);
d[1] = 0;
d[2] = get_int(0);
d[3] = get_int(0);
d[4] = get_int(0);
d[5] = 0;
if ( kind == 2 ) { /* parallel sides are vertical */
d[1] = d[0];
d[0] = 0;
d[5] = d[4];
d[4] = 0;
} /* End if */
fprintf(fp_out, "%d %d %d %d %d %d %d %d T\n", d[4], d[5], d[2], d[3], d[0], d[1], hpos, vpos);
} /* End of trapezoid */
/*****************************************************************************/
point_plot(mode, ch)
int mode; /* plotting mode BPOINT or BPOINT1 */
int ch; /* will be placed at the points */
{
int c; /* next character from input file */
int x, y; /* ch gets put here next */
int deltax; /* x increment for BPOINT1 mode */
/*
*
* The two point plot modes are used to place a character at selected points. The
* difference in the two modes, namely BPOINT and BPOINT1, is the way we get the
* coordinates of the next point. In BPOINT1 the two bytes immediately following
* ch select a constant horizontal change, while both coordinates are given for
* all points in BPOINT mode.
*
*/
if ( mode == BPOINT1 ) { /* first integer is change in x */
deltax = get_int(0);
x = hpos - deltax;
} /* End if */
while ( (c = get_char()) != EOF && (c & MSB) ) {
if ( mode == BPOINT1 ) { /* only read y coordinate */
y = get_int(c);
x += deltax;
} else { /* get new x and y from input file */
x = get_int(c);
y = get_int(0);
} /* End else */
hgoto(x); /* adjust BGI position */
vgoto(y);
fprintf(fp_out, "%d %d\n", hpos, vpos);
} /* End while */
putc('(', fp_out);
switch ( ch ) {
case '(':
case ')':
case '\\':
putc('\\', fp_out);
default:
putc(ch, fp_out);
} /* End switch */
fprintf(fp_out, ")pp\n");
ungetc(c, fp_in); /* it wasn't part of the point plot */
position--;
} /* End of point_plot */
/*****************************************************************************/
line_plot()
{
int c; /* next input character from fp_in */
int deltax; /* change in x coordinate */
int x0, y0; /* starting point for next segment */
int x1, y1; /* endpoint of the line */
int count = 0; /* number of points so far */
/*
*
* Essentially the same format as BPOINT1, except that in this case we connect
* pairs of points by line segments.
*
*/
deltax = get_int(0); /* again the change in x is first */
x1 = hpos; /* so it works first time through */
y1 = get_int(0);
while ( (c = get_char()) != EOF && (c & MSB) ) {
x0 = x1; /* line starts here */
y0 = y1;
x1 += deltax; /* and ends at this point */
y1 = get_int(c);
fprintf(fp_out, "%d %d\n", -deltax, y0 - y1);
count++;
} /* End while */
hgoto(x1); /* adjust current BGI position */
vgoto(y1);
if ( count > 0 )
fprintf(fp_out, "%d %d v\n", hpos, vpos);
ungetc(c, fp_in); /* wasn't part of the line */
position--;
} /* End of line_plot */
/*****************************************************************************/
arc(mode)
int mode; /* FILL or OUTLINE the path */
{
int dx1, dy1; /* displacements for first point */
int dx2, dy2; /* same for the second point */
int radius; /* of the arc */
int angle1, angle2; /* starting and ending angles */
/*
*
* Called whenever we need to draw an arc. I'm ignoring filled slices for now.
*
*/
dx1 = get_int(0); /* displacements relative to center */
dy1 = get_int(0);
dx2 = get_int(0);
dy2 = get_int(0);
radius = get_int(0); /* and the radius */
if ( radius == 0 ) /* nothing to do */
return;
angle1 = (atan2((double) dy1, (double) dx1) * 360) / (2 * PI) + .5;
angle2 = (atan2((double) dy2, (double) dx2) * 360) / (2 * PI) + .5;
fprintf(fp_out, "%d %d %d %d %d arcn stroke\n", hpos, vpos, radius, angle1, angle2);
} /* End of arc */
/*****************************************************************************/
pattern()
{
double red = 0; /* color components */
double green = 0;
double blue = 0;
int kind; /* corse or fine pattern */
int val; /* next color data byte */
int i; /* loop index */
/*
*
* Handles patterns by setting the current color based of the values assigned to
* the next four data bytes. BGI supports two kinds of patterns (fine or coarse)
* but I'm handling each in the same way - for now. In a fine pattern the four
* data bytes assign a color to four individual pixels (upperleft first) while
* in a coarse pattern the four colors are assigned to groups of four pixels,
* for a total of 16. Again the first color goes to the group in the upper left
* corner. The byte immediately following the BPAT opcode selects fine (040) or
* coarse (041) patterns. The PostScript RGB color is assigned by averaging the
* RED, GREEN, and BLUE components assigned to the four pixels (or groups of
* pixels). Acceptable results, but there's no distinction between fine and
* coarse patterns.
*
*/
if ( (kind = get_char()) == EOF )
error(FATAL, "bad pattern command");
for ( i = 0; i < 4; i++ ) {
val = get_data();
red += get_color(val, RED);
green += get_color(val, GREEN);
blue += get_color(val, BLUE);
} /* End for */
fprintf(fp_out, "%g %g %g c\n", red/4, green/4, blue/4);
} /* End of pattern */
/*****************************************************************************/
get_color(val, component)
int val; /* color data byte */
int component; /* RED, GREEN, or BLUE component */
{
int primary; /* color mixing mode - bits 2 to 4 */
int plane; /* primary color plane - bits 5 to 7 */
unsigned rgbcolor; /* PostScript expects an RGB triple */
/*
*
* Picks the requested color component (RED, GREEN, or BLUE) from val and returns
* the result to the caller. BGI works with Cyan, Yellow, and Magenta so the one's
* complement stuff (following the exclusive or'ing) recovers the RED, BLUE, and
* GREEN components that PostScript's setrgbcolor operator needs. The PostScript
* interpreter in the ColorScript 100 has a setcmycolor operator, but it's not
* generally available so I've decided to stick with setrgbcolor.
*
*/
primary = (val >> 3) & 07;
plane = val & 07;
rgbcolor = (~(primary ^ plane)) & 07;
if ( debug == ON )
fprintf(stderr, "val = %o, primary = %o, plane = %o, rgbcolor = %o\n",
val, primary, plane, rgbcolor);
switch ( component ) {
case RED:
return(rgbcolor>>2);
case GREEN:
return(rgbcolor&01);
case BLUE:
return((rgbcolor>>1)&01);
default:
error(FATAL, "unknown color component");
return(0);
} /* End switch */
} /* End of get_color */
/*****************************************************************************/
set_color(val)
int val; /* color data byte */
{
/*
*
* Arranges to have the color set to the value requested in the BGI data byte val.
*
*/
fprintf(fp_out, "%d %d %d c\n", get_color(val, RED), get_color(val, GREEN), get_color(val, BLUE));
} /* End of set_color */
/*****************************************************************************/
get_int(highbyte)
int highbyte; /* already read this byte */
{
int lowbyte; /* this and highbyte make the int */
/*
*
* Figures out the value on the integer (sign magnitude form) that's next in the
* input file. If highbyte is nonzero we'll use it and the next byte to build the
* integer, otherwise two bytes are read from fp_in.
*
*/
if ( highbyte == 0 ) /* need to read the first byte */
highbyte = get_data();
lowbyte = get_data(); /* always need the second byte */
return(highbyte & SGNB ? -MAG(highbyte, lowbyte) : MAG(highbyte, lowbyte));
} /* End of get_int */
/*****************************************************************************/
get_data()
{
int val; /* data value returned to caller */
/*
*
* Called when we expect to find a single data character in the input file. The
* data bit is turned off and the resulting value is returned to the caller.
*
*/
if ( (val = get_char()) == EOF || ! (val & MSB) )
error(FATAL, "missing data value");
return(val & DMASK);
} /* End of get_data */
/*****************************************************************************/
get_char()
{
int ch; /* character we just read */
/*
*
* Reads the next character from file *fp_in and returns the value to the caller.
* This routine isn't really needed, but we may want to deal directly with some
* screwball file formats so I thought it would probably be a good idea to isolate
* all the input in one routine that could be easily changed.
*
*/
if ( (ch = getc(fp_in)) != EOF ) {
position++;
ch &= CHMASK;
} /* End if */
if ( debug == ON )
fprintf(stderr, "%o ", ch);
return(ch);
} /* End of get_char */
/*****************************************************************************/
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
/*
*
* If we're not supposed to print page pg, fp_out will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014230265651006440057030057030000010675520522627503400003300000012631post.src/postbgi/postbgi.h /*
*
* BGI opcodes.
*
*/
#define BRCHAR 033 /* rotated character mode */
#define BCHAR 034 /* graphical character mode */
#define BGRAPH 035 /* graphical master mode */
#define BSUB 042 /* subroutine definition */
#define BRET 043 /* end of subroutine */
#define BCALL 044 /* subroutine call */
#define BEND 045 /* end page */
#define BERASE 046 /* erase - obsolete */
#define BREP 047 /* repeat */
#define BENDR 050 /* end repeat */
#define BSETX 051 /* set horizontal position */
#define BSETY 052 /* set vertical position */
#define BSETXY 053 /* set horizontal and vertical positions */
#define BINTEN 054 /* intensify - mark current pixel */
#define BVISX 055 /* manhattan vector - change x first */
#define BINVISX 056 /* same as BVISX but nothing drawn */
#define BVISY 057 /* manhattan vector - change y first */
#define BINVISY 060 /* same as BVISY but nothing drawn */
#define BVEC 061 /* arbitrary long vector */
#define BSVEC 062 /* arbitrary short vector */
#define BRECT 063 /* outline rectangle */
#define BPOINT1 064 /* point plot - mode 1 */
#define BPOINT 065 /* point plot - mode 2 */
#define BLINE 066 /* line plot */
#define BCSZ 067 /* set character size */
#define BLTY 070 /* select line type */
#define BARC 071 /* draw circular arc */
#define BFARC 072 /* filled circular arc */
#define BFRECT 073 /* filled rectangle */
#define BRASRECT 074 /* raster rectangle */
#define BCOL 075 /* select color */
#define BFTRAPH 076 /* filled trapezoid */
#define BPAT 077 /* pattern are for filling - no info */
#define BNOISE 0 /* from bad file format */
/*
*
* Character size is controlled by the spacing of dots in a 5x7 dot matrix, which
* by default is set to BGISIZE.
*
*/
#define BGISIZE 2 /* default character grid spacing */
/*
*
* Definitions used to decode the bytes read from a BGI file.
*
*/
#define CHMASK 0177 /* characters only use 7 bits */
#define DMASK 077 /* data values use lower 6 bits */
#define MSB 0100 /* used to check for data or opcode */
#define SGNB 040 /* sign bit for integers */
#define MSBMAG 037 /* mag of most sig byte in a BGI int */
/*
*
* Descriptions of BGI vectors and what's done when they're drawn.
*
*/
#define X_COORD 0 /* change x next in manhattan vector */
#define Y_COORD 1 /* same but y change comes next */
#define LONGVECTOR 2 /* arbitrary long vector */
#define SHORTVECTOR 3 /* components given in 6 bits */
#define VISIBLE 0 /* really draw the vector */
#define INVISIBLE 1 /* just move the current position */
/*
*
* What's done with a closed path.
*
*/
#define OUTLINE 0 /* outline the defined path */
#define FILL 1 /* fill it in */
/*
*
* BGI line style definitions. They're used as an index into the STYLES array,
* which really belongs in the prologue.
*
*/
#define SOLID 0
#define DOTTED 1
#define SHORTDASH 2
#define DASH 3
#define LONGDASH 4
#define DOTDASH 5
#define THREEDOT 6
#define STYLES \
\
{ \
"[]", \
"[.5 2]", \
"[2 4]", \
"[4 4]", \
"[8 4]", \
"[.5 2 4 2]", \
"[.5 2 .5 2 .5 2 4 2]" \
}
/*
*
* Three constants used to choose which component (RED, GREEN, or BLUE) we're
* interested in. BGI colors are specified as a single data byte and pulling a
* particular component out of the BGI color byte is handled by procedure
* get_color().
*
*/
#define RED 0
#define GREEN 1
#define BLUE 2
/*
*
* An array of type Disp is used to save the horizontal and vertical displacements
* that result after a subroutine has been called. Needed so we can properly adjust
* our horizontal and vertical positions after a subroutine call. Entries are made
* immediately after a subroutine is defined and used after the call. Subroutine
* names are integers that range from 0 to 63 (assigned in the BG file) and the
* name is used as an index into the Disp array when we save or retrieve the
* displacement.
*
*/
typedef struct {
int dx; /* horizontal and */
int dy; /* vertical displacements */
} Disp;
/*
*
* An array of type Fontmap helps convert font names requested by users into
* legitimate PostScript names. The array is initialized using FONTMAP, which must
* end with and entry that has NULL defined as its name field.
*
*/
typedef struct {
char *name; /* user's font name */
char *val; /* corresponding PostScript name */
} Fontmap;
#define FONTMAP \
\
{ \
"R", "Courier", \
"I", "Courier-Oblique", \
"B", "Courier-Bold", \
"CO", "Courier", \
"CI", "Courier-Oblique", \
"CB", "Courier-Bold", \
"CW", "Courier", \
"PO", "Courier", \
"courier", "Courier", \
"cour", "Courier", \
"co", "Courier", \
NULL, NULL \
}
/*
*
* Two macros that are useful in processing BGI files:
*
* MAG(A, B) - Takes bytes A and B which have been read from a BGI file
* and returns the magnitude of the integer represented by
* the two bytes.
*
* LINESPACE(A) - Takes BGI size A and returns the number of address units
* that can be used for a reasonable interline spacing.
*
*/
#define MAG(A, B) (((A & MSBMAG) << 6) | (B & DMASK))
#define LINESPACE(A) (8 * A)
/*
*
* Some of the non-integer valued functions in postdmd.c.
*
*/
char *get_font();
0707070014230265661006440057030057030000010677100522627503400003000000001447post.src/postbgi/README
BGI (Basic Graphical Instructions) to PostScript translator. Probably
not useful outside the Computer Centers. Added code to tie lines to
device space coordinates. Helps eliminate variations in line widths
noticeable when users selected a non-zero linewidth with the -w option.
Much that was omitted from early versions of the program has been
implemented. What's in place will handle most STARE (black and white)
and PRISM (color) BGI jobs. PRISM jobs often fill regions with color,
and need require device specific tuning to get things just right. An
easy solution is add "-P/prism true def" option to the postbgi command
line when you translate PRISM jobs.
A typical command line for STARE jobs would be,
postbgi file >file.ps
while for PRISM jobs use,
postbgi -P"/prism true def" file >file.ps
0707070014230266641006400057030057030000010700100522633075200003300000010325post.src/postbgi/postbgi.1 .ds dQ /usr/lib/postscript
.TH POSTBGI 1 "DWB 3.2"
.SH NAME
.B postbgi
\- PostScript translator for
.SM BGI
(Basic Graphical Instructions) files
.SH SYNOPSIS
\*(mBpostbgi\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B postbgi
translates
.SM BGI
(Basic Graphical Instructions)
.I files
into PostScript and writes the results on the
standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP
.OP \-f name
Print text using font
.IR name .
Any PostScript font can be used,
although the best results will only be
obtained with constant width fonts.
The default font is Courier.
.TP
.OP \-m num
Magnify each logical page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which by default is located at the center of
each page.
The default magnification is 1.0.
.TP
.OP \-n num
Print
.I num
logical pages on each piece of paper,
where
.I num
can be any positive integer.
By default
.I num
is set to 1.
.TP
.OP \-o list
Print pages whose numbers are given in the comma-separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP
.OP \-w num
Set the line width used for graphics to
.I num
points, where a point is approximately 1/72
of an inch.
By default
.I num
is set to 0 points, which forces lines to be
one pixel wide.
.TP
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed at the
center of the page, with positive
x to the right and positive y up the page.
Positive
.I num
moves everything right.
The default offset is 0 inches.
.TP
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves everything up the page.
The default offset is 0 inches.
.TP
.OP \-E name
Set the character encoding for text fonts to
.IR name .
Requesting
.I name
means include file
.MI \*(dQ name .enc \f1.
A nonexistent encoding file is silently ignored.
The default selects file
.MR \*(dQ/Default.enc .
.TP
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/postbgi.ps .
.PP
Three options allow insertion of arbitrary PostScript
at controlled points in the translation process:
.TP 0.75i
.OP \-C file
Copy
.I file
to the output file;
.I file
must contain legitimate PostScript.
.TP
.OP \-P string
Include
.I string
in the output file;
.I string
must be legitimate PostScript.
.TP
.OP \-R action
Requests special
.I action
(e.g.,
.MR manualfeed )
on a per page or global basis.
The
.I action
string can be given as
.IR request ,
.IM request : page\f1\|,
or
.IM request : page : file\f1\|.
If
.I page
is omitted or given as 0, the request
applies to all pages.
If
.I file
is omitted, the request
lookup is done in
.MR \*(dQ/ps.requests .
.PP
.B postbgi
can handle
.SM STARE
(black and white) and
.SM PRISM
(color)
.SM BGI
jobs.
By default plots are rigidly scaled to fill the page, which produces
the good results for most
.SM STARE
jobs.
.SM PRISM
jobs typically fill regions with colors, and often require device
specific tuning to produce acceptable results.
Adding the
.MW \-P"/prism\ true\ def"
option is strongly recommended when
.B postbgi
is translating
.SM PRISM
jobs.
.br
.ne 7v
.SH EXAMPLES
For most
.SM STARE
jobs,
.EX
postbgi \f2file
.EE
gives good results, while
.EX
postbgi \-P"/prism true def" \f2file
.EE
is recommended when translating
.SM PRISM
jobs.
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully processed.
.SH BUGS
The default line width is too small for write-white
print engines, like the one used by the PS-2400.
Several
.SM BGI
opcodes have not been implemented.
.SH FILES
.MW \*(dQ/postbgi.ps
.br
.MW \*(dQ/forms.ps
.br
.MW \*(dQ/ps.requests
.SH SEE ALSO
.BR dpost (1),
.BR postdaisy (1),
.BR postdmd (1),
.BR postio (1),
.BR postmd (1),
.BR postprint (1),
.BR postreverse (1),
.BR posttek (1),
.BR psencoding (1)
0707070014230265701006440057030057030000010677300522627503400003400000006016post.src/postbgi/postbgi.ps %
% Version 3.3.2 prologue for BGI files - STARE or PRISM.
%
/#copies 1 store
/aspectratio 1 def
/fixlinewidth true def
/fixscreen false def
/font /Courier def
/formsperpage 1 def
/landscape false def
/linewidth 0 def
/magnification 1 def
/margin 0 def
/orientation 0 def
/prism false def
/resolution 128 def
/rotation 1 def
/scaletodevice false def
/screenheight 1280 def
/screenwidth 1024 def
/xoffset 0 def
/yoffset 0 def
/devres 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} bind def
/min {2 copy gt {exch} if pop} bind def
/kshow {kshow} bind def % so later references don't bind
/show {show} bind def
/setup {
counttomark 2 idiv {def} repeat pop
landscape {/orientation 90 orientation add def} if
prism {/fixscreen true def /scaletodevice true def} if
prism linewidth 0 eq and {/linewidth .3 def} if
fixscreen {devres 4 div orientation currentscreen 3 1 roll pop pop setscreen} if
pagedimensions
/scaling
scaletodevice
{devres resolution div truncate 72 mul devres div dup}
{height margin sub screenheight div width margin sub screenwidth div}
ifelse
min def
xcenter ycenter translate
orientation rotation mul rotate
xoffset inch yoffset inch translate
magnification dup aspectratio mul scale
scaling scaling scale
screenwidth 2 div neg screenheight 2 div neg translate
tietodevicespace
linewidth scaling div setlinewidth
1 setlinecap
newpath
} def
/pagedimensions {
useclippath {
/pagebbox [clippath pathbbox newpath] def
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
userdict /gotpagebbox true put
} def
/pagesetup {/page exch def} bind def
/tietodevicespace {
fixlinewidth linewidth 0 gt and linewidth 1 lt and {
/moveto {
2 copy /Y exch def /X exch def
transform round exch round exch itransform
moveto
} bind def
/lineto {
2 copy /Y exch def /X exch def
transform round exch round exch itransform
lineto
} bind def
/rlineto {Y add exch X add exch lineto} bind def
/v V 0 get bind def
} if
} def
/V [{moveto counttomark 2 idiv {rlineto} repeat stroke}] def
/v V 0 get bind def
/p {linewidth 2 div 0 360 arc fill} bind def
/pp {/ch exch def counttomark 2 idiv {moveto xc yc rmoveto ch show} repeat} bind def
/l {{scaling div} forall counttomark array astore 0 setdash} bind def
/c {setrgbcolor} bind def
/T {newpath moveto rlineto rlineto rlineto closepath eofill} bind def
/R {
newpath moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath
0 eq {stroke} {eofill} ifelse
} bind def
/f {
dup dup
/charwidth exch 6 mul def
/xc exch -2.5 mul def
/yc exch -3.5 mul def
font findfont charwidth .6 div scalefont setfont
} bind def
/t {
/str exch def
gsave
translate rotate
xc yc moveto
currentpoint
{
pop pop
exch charwidth add exch
moveto currentpoint
} str kshow
pop pop
grestore
} bind def
/done {/lastpage where {pop lastpage} if} def
0707070014230642760407550057030057030000021712350522633075400002300000000000post.src/postdaisy 0707070014230637751006400057030057030000011711740522633075300004000000004021post.src/postdaisy/postdaisy.mk MAKE=/bin/make
MAKEFILE=postdaisy.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=postdaisy.h \
$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=postdaisy.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o
all : postdaisy
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp postdaisy $(POSTBIN)/postdaisy
@chmod 755 $(POSTBIN)/postdaisy
@chgrp $(GROUP) $(POSTBIN)/postdaisy
@chown $(OWNER) $(POSTBIN)/postdaisy
cp postdaisy.ps $(POSTLIB)/postdaisy.ps
@chmod 644 $(POSTLIB)/postdaisy.ps
@chgrp $(GROUP) $(POSTLIB)/postdaisy.ps
@chown $(OWNER) $(POSTLIB)/postdaisy.ps
cp postdaisy.1 $(MAN1DIR)/postdaisy.1
@chmod 644 $(MAN1DIR)/postdaisy.1
@chgrp $(GROUP) $(MAN1DIR)/postdaisy.1
@chown $(OWNER) $(MAN1DIR)/postdaisy.1
clean :
rm -f *.o
clobber : clean
rm -f postdaisy
postdaisy : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postdaisy $(OFILES)
postdaisy.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
postdaisy.1 >XXX.1; \
mv XXX.1 postdaisy.1
0707070014230643001006440057030057030000011712530522627503500003700000004056post.src/postdaisy/postdaisy.h /*
*
* Definitions used by the PostScript translator for Diablo 1640 files.
*
* Diablo printers have horizontal and vertical resolutions of 120 and 48 dpi.
* We'll use a single resolution of 240 dpi and let the program scale horizontal
* and vertical positions by HSCALE and VSCALE.
*
*/
#define RES 240
#define HSCALE 2
#define VSCALE 5
/*
*
* HMI is the default character spacing and VMI is the line spacing. Both values
* are in terms of the 240 dpi resolution.
*
*/
#define HMI (12 * HSCALE)
#define VMI (8 * VSCALE)
/*
*
* Paper dimensions don't seem to be all that important. They're just used to
* set the right and bottom margins. Both are given in terms of the 240 dpi
* resolution.
*
*/
#define LEFTMARGIN 0
#define RIGHTMARGIN 3168
#define TOPMARGIN 0
#define BOTTOMMARGIN 2640
/*
*
* ROWS and COLUMNS set the dimensions of the horizontal and vertical tab arrays.
* The way I've implemented both kinds of tabs leaves something to be desired, but
* it was simple and should be good enough for now. If arrays are going to be used
* to mark tab stops I probably should use malloc() to get enough space once the
* initial hmi and vmi are know.
*
*/
#define ROWS 400
#define COLUMNS 200
/*
*
* An array of type Fontmap helps convert font names requested by users into
* legitimate PostScript names. The array is initialized using FONTMAP, which must
* end with an entry that has NULL defined as its name field.
*
*/
typedef struct {
char *name; /* user's font name */
char *val; /* corresponding PostScript name */
} Fontmap;
#define FONTMAP \
\
{ \
"R", "Courier", \
"I", "Courier-Oblique", \
"B", "Courier-Bold", \
"CO", "Courier", \
"CI", "Courier-Oblique", \
"CB", "Courier-Bold", \
"CW", "Courier", \
"PO", "Courier", \
"courier", "Courier", \
"cour", "Courier", \
"co", "Courier", \
NULL, NULL \
}
/*
*
* Some of the non-integer functions in postdaisy.c.
*
*/
char *get_font();
0707070014230643011006440057030057030000011712700522627503500003700000067263post.src/postdaisy/postdaisy.c /*
*
* postdaisy - PostScript translator for Diablo 1640 files.
*
* A program that translates Diablo 1640 files into PostScript. Absolutely nothing
* is guaranteed. Quite a few things haven't been implemented, and what's been
* done isn't well tested. Most of the documentation used to write this program
* was taken from the 'Diablo Emulator' section of a recent Imagen manual.
*
* Some of document comments that are generated may not be right. Most of the test
* files I used produced a trailing blank page. I've put a check in formfeed() that
* won't print the last page if it doesn't contain any text, but PAGES comments may
* not be right. The DOCUMENTFONTS comment will also be wrong if auto underline or
* bold printing have been turned on by escape commands.
*
* The brute force approach used to implement horizontal and vertical tabs leaves
* much to be desired, and may not work for very small initial hmi and vmi values.
* At the very least I should have used malloc() to get space for the two tabstop
* arrays after hmi and vmi are known!
*
* Reverse printing mode hasn't been tested at all, but what's here should be
* close even though it's not efficient.
*
* The PostScript prologue is copied from *prologue before any of the input files
* are translated. The program expects that the following PostScript procedures
* are defined in that file:
*
* setup
*
* mark ... setup -
*
* Handles special initialization stuff that depends on how this program
* was called. Expects to find a mark followed by key/value pairs on the
* stack. The def operator is applied to each pair up to the mark, then
* the default state is set up.
*
* pagesetup
*
* page pagesetup -
*
* Does whatever is needed to set things up for the next page. Expects to
* find the current page number on the stack.
*
* t
*
* mark str1 x1 str2 x2 ... strn xn y hmi t mark
*
* Handles all the text on the stack. Characters in the strings are
* printed using hmi as the character advance, and all strings are at
* vertical position y. Each string is begins at the horizontal position
* that preceeds it.
*
* f
*
* font f -
*
* Use font f, where f is the full PostScript font name. Only used when
* we switch to auto underline (Courier-Italic) or bold (Courier-Bold)
* printing.
*
* done
*
* done
*
* Makes sure the last page is printed. Only needed when we're printing
* more than one page on each sheet of paper.
*
* Many default values, like the magnification and orientation, are defined in
* the prologue, which is where they belong. If they're changed (by options), an
* appropriate definition is made after the prologue is added to the output file.
* The -P option passes arbitrary PostScript through to the output file. Among
* other things it can be used to set (or change) values that can't be accessed by
* other options.
*
*/
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for the prologue */
#include "ext.h" /* external variable declarations */
#include "postdaisy.h" /* a few special definitions */
char *optnames = "a:c:f:h:l:m:n:o:p:r:s:v:x:y:A:C:E:J:L:P:DI";
char *prologue = POSTDAISY; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
char htabstops[COLUMNS]; /* horizontal */
char vtabstops[ROWS]; /* and vertical tabs */
int res = RES; /* input file resolution - sort of */
int hmi = HMI; /* horizontal motion index - 1/120 inch */
int vmi = VMI; /* vertical motion index - 1/48 inch */
int ohmi = HMI; /* original hmi */
int ovmi = VMI; /* and vmi - for tabs and char size */
int hpos = 0; /* current horizontal */
int vpos = 0; /* and vertical position */
int lastx = -1; /* printer's last horizontal */
int lasty = -1; /* and vertical position */
int lasthmi = -1; /* hmi for current text strings */
int lastc = -1; /* last printed character */
int prevx = -1; /* at this position */
int leftmargin = LEFTMARGIN; /* page margins */
int rightmargin = RIGHTMARGIN;
int topmargin = TOPMARGIN;
int bottommargin = BOTTOMMARGIN;
int stringcount = 0; /* number of strings on the stack */
int stringstart = 1; /* column where current one starts */
int advance = 1; /* -1 if in backward print mode */
int lfiscr = OFF; /* line feed implies carriage return */
int crislf = OFF; /* carriage return implies line feed */
int linespp = 0; /* lines per page if it's positive */
int markedpage = FALSE; /* helps prevent trailing blank page */
int page = 0; /* page we're working on */
int printed = 0; /* printed this many pages */
Fontmap fontmap[] = FONTMAP; /* for translating font names */
char *fontname = "Courier"; /* use this PostScript font */
int shadowprint = OFF; /* automatic bold printing if ON */
FILE *fp_in; /* read from this file */
FILE *fp_out = stdout; /* and write stuff here */
FILE *fp_acct = NULL; /* for accounting data */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A simple program that translates Diablo 1640 files into PostScript. Nothing
* is guaranteed - the program not well tested and doesn't implement everything.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* really just for error messages */
init_signals(); /* sets up interrupt handling */
header(); /* PostScript header comments */
options(); /* handle the command line options */
setup(); /* for PostScript */
arguments(); /* followed by each input file */
done(); /* print the last page etc. */
account(); /* job accounting data */
exit(x_stat); /* not much could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Makes sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
/*
*
* Scans the option list looking for things, like the prologue file, that we need
* right away but could be changed from the default. Doing things this way is an
* attempt to conform to Adobe's latest file structuring conventions. In particular
* they now say there should be nothing executed in the prologue, and they have
* added two new comments that delimit global initialization calls. Once we know
* where things really are we write out the job header, follow it by the prologue,
* and then add the ENDPROLOG and BEGINSETUP comments.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
if ( DOROUND )
cat(ROUNDPAGE);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
int n; /* for CR and LF modes */
/*
*
* Reads and processes the command line options. Added the -P option so arbitrary
* PostScript code can be passed through. Expect it could be useful for changing
* definitions in the prologue for which options have not been defined.
*
* Although any PostScript font can be used, things will only work for constant
* width fonts.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'f': /* use this PostScript font */
fontname = get_font(optarg);
fprintf(stdout, "/font /%s def\n", fontname);
break;
case 'h': /* default character spacing */
ohmi = hmi = atoi(optarg) * HSCALE;
fprintf(stdout, "/hmi %s def\n", optarg);
break;
case 'l': /* lines per page */
linespp = atoi(optarg);
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'r': /* set CR and LF modes */
n = atoi(optarg);
if ( n & 01 )
lfiscr = ON;
else lfiscr = OFF;
if ( n & 02 )
crislf = ON;
else crislf = OFF;
break;
case 's': /* point size */
fprintf(stdout, "/pointsize %s def\n", optarg);
break;
case 'v': /* default line spacing */
ovmi = vmi = atoi(optarg) * VSCALE;
break;
case 'x': /* shift things horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* force job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding */
fontencoding = optarg;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* special global or page level request */
saverequest(optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
char *get_font(name)
char *name; /* name the user asked for */
{
int i; /* for looking through fontmap[] */
/*
*
* Called from options() to map a user's font name into a legal PostScript name.
* If the lookup fails *name is returned to the caller. That should let you choose
* any PostScript font, although things will only work well for constant width
* fonts.
*
*/
for ( i = 0; fontmap[i].name != NULL; i++ )
if ( strcmp(name, fontmap[i].name) == 0 )
return(fontmap[i].val);
return(name);
} /* End of get_font */
/*****************************************************************************/
setup()
{
/*
*
* Handles things that must be done after the options are read but before the
* input files are processed.
*
*/
writerequest(0, stdout); /* global requests eg. manual feed */
setencoding(fontencoding);
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) {
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
} /* End of setup */
/*****************************************************************************/
arguments()
{
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll process stdin.
*
*/
fp_in = stdin;
if ( argc < 1 )
text();
else { /* at least one argument is left */
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
text();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End else */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Finished with all the input files, so mark the end of the pages, make sure the
* last page is printed, and restore the initial environment.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, fontname);
fprintf(stdout, "%s %d\n", PAGES, printed);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Writes an accounting record to *fp_acct provided it's not NULL. Accounting
* is requested using the -A or -J options.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
text()
{
int ch; /* next input character */
/*
*
* Translates the next input file into PostScript. The redirect(-1) call forces
* the initial output to go to /dev/null - so the stuff formfeed() does at the
* end of each page doesn't go to stdout.
*
*/
redirect(-1); /* get ready for the first page */
formfeed(); /* force PAGE comment etc. */
inittabs();
while ( (ch = getc(fp_in)) != EOF )
switch ( ch ) {
case '\010': /* backspace */
backspace();
break;
case '\011': /* horizontal tab */
htab();
break;
case '\012': /* new line */
linefeed();
break;
case '\013': /* vertical tab */
vtab();
break;
case '\014': /* form feed */
formfeed();
break;
case '\015': /* carriage return */
carriage();
break;
case '\016': /* extended character set - SO */
break;
case '\017': /* extended character set - SI */
break;
case '\031': /* next char from supplementary set */
break;
case '\033': /* 2 or 3 byte escape sequence */
escape();
break;
default:
oput(ch);
break;
} /* End switch */
formfeed(); /* next file starts on a new page? */
} /* End of text */
/*****************************************************************************/
inittabs()
{
int i; /* loop index */
/*
*
* Initializes the horizontal and vertical tab arrays. The way tabs are handled is
* quite inefficient and may not work for all initial hmi or vmi values.
*
*/
for ( i = 0; i < COLUMNS; i++ )
htabstops[i] = ((i % 8) == 0) ? ON : OFF;
for ( i = 0; i < ROWS; i++ )
vtabstops[i] = ((i * ovmi) > BOTTOMMARGIN) ? ON : OFF;
} /* End of inittabs */
/*****************************************************************************/
cleartabs()
{
int i; /* loop index */
/*
*
* Clears all horizontal and vertical tab stops.
*
*/
for ( i = 0; i < ROWS; i++ )
htabstops[i] = OFF;
for ( i = 0; i < COLUMNS; i++ )
vtabstops[i] = OFF;
} /* End of cleartabs */
/*****************************************************************************/
formfeed()
{
/*
*
* Called whenever we've finished with the last page and want to get ready for the
* next one. Also used at the beginning and end of each input file, so we have to
* be careful about what's done. I've added a simple test before the showpage that
* should eliminate the extra blank page that was put out at the end of many jobs,
* but the PAGES comments may be wrong.
*
*/
if ( fp_out == stdout ) /* count the last page */
printed++;
endline(); /* print the last line */
fprintf(fp_out, "cleartomark\n");
if ( feof(fp_in) == 0 || markedpage == TRUE )
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
if ( ungetc(getc(fp_in), fp_in) == EOF )
redirect(-1);
else redirect(++page);
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fprintf(fp_out, "/saveobj save def\n");
fprintf(fp_out, "mark\n");
writerequest(printed+1, fp_out);
fprintf(fp_out, "%d pagesetup\n", printed+1);
vgoto(topmargin);
hgoto(leftmargin);
markedpage = FALSE;
} /* End of formfeed */
/*****************************************************************************/
linefeed()
{
int line = 0; /* current line - based on ovmi */
/*
*
* Adjust our current vertical position. If we've passed the bottom of the page
* or exceeded the number of lines per page, print it and go to the upper left
* corner of the next page. This routine is also called from carriage() if crislf
* is ON.
*
*/
vmot(vmi);
if ( lfiscr == ON )
hgoto(leftmargin);
if ( linespp > 0 ) /* means something so see where we are */
line = vpos / ovmi + 1;
if ( vpos > bottommargin || line > linespp )
formfeed();
} /* End of linefeed */
/*****************************************************************************/
carriage()
{
/*
*
* Handles carriage return character. If crislf is ON we'll generate a line feed
* every time we get a carriage return character.
*
*/
if ( shadowprint == ON ) /* back to normal mode */
changefont(fontname);
advance = 1;
shadowprint = OFF;
hgoto(leftmargin);
if ( crislf == ON )
linefeed();
} /* End of carriage */
/*****************************************************************************/
htab()
{
int col; /* 'column' we'll be at next */
int i; /* loop index */
/*
*
* Tries to figure out where the next tab stop is. Wasn't positive about this
* one, since hmi can change. I'll assume columns are determined by the original
* value of hmi. That fixes them on the page, which seems to make more sense than
* letting them float all over the place.
*
*/
endline();
col = hpos/ohmi + 1;
for ( i = col; i < ROWS; i++ )
if ( htabstops[i] == ON ) {
col = i;
break;
} /* End if */
hgoto(col * ohmi);
lastx = hpos;
} /* End of htab */
/*****************************************************************************/
vtab()
{
int line; /* line we'll be at next */
int i; /* loop index */
/*
*
* Looks for the next vertical tab stop in the vtabstops[] array and moves to that
* line. If we don't find a tab we'll just move down one line - shouldn't happen.
*
*/
endline();
line = vpos/ovmi + 1;
for ( i = line; i < COLUMNS; i++ )
if ( vtabstops[i] == ON ) {
line = i;
break;
} /* End if */
vgoto(line * ovmi);
} /* End of vtab */
/*****************************************************************************/
backspace()
{
/*
*
* Moves backwards a distance equal to the current value of hmi, but don't go
* past the left margin.
*
*/
endline();
if ( hpos - leftmargin >= hmi )
hmot(-hmi);
else hgoto(leftmargin); /* maybe just ignore the backspace?? */
lastx = hpos;
} /* End of backspace */
/*****************************************************************************/
escape()
{
int ch; /* control character */
/*
*
* Handles special codes that are expected to follow an escape character. The
* initial escape character is followed by one or two bytes.
*
*/
switch ( ch = getc(fp_in) ) {
case 'T': /* top margin */
topmargin = vpos;
break;
case 'L': /* bottom margin */
bottommargin = vpos;
break;
case 'C': /* clear top and bottom margins */
bottommargin = BOTTOMMARGIN;
topmargin = TOPMARGIN;
break;
case '9': /* left margin */
leftmargin = hpos;
break;
case '0': /* right margin */
rightmargin = hpos;
break;
case '1': /* set horizontal tab */
htabstops[hpos/ohmi] = ON;
break;
case '8': /* clear horizontal tab at hpos */
htabstops[hpos/ohmi] = OFF;
break;
case '-': /* set vertical tab */
vtabstops[vpos/ovmi] = ON;
break;
case '2': /* clear all tabs */
cleartabs();
break;
case '\014': /* set lines per page */
linespp = getc(fp_in);
break;
case '\037': /* set hmi to next byte minus 1 */
hmi = HSCALE * (getc(fp_in) - 1);
break;
case 'S': /* reset hmi to default */
hmi = ohmi;
break;
case '\011': /* move to column given by next byte */
hgoto((getc(fp_in)-1) * ohmi);
break;
case '?': /* do carriage return after line feed */
lfiscr = ON;
break;
case '!': /* don't generate carriage return */
lfiscr = OFF;
break;
case '5': /* forward print mode */
advance = 1;
break;
case '6': /* backward print mode */
advance = -1;
break;
case '\036': /* set vmi to next byte minus 1 */
vmi = VSCALE * (getc(fp_in) - 1);
break;
case '\013': /* move to line given by next byte */
vgoto((getc(fp_in)-1) * ovmi);
break;
case 'U': /* positive half line feed */
vmot(vmi/2);
break;
case 'D': /* negative half line feed */
vmot(-vmi/2);
break;
case '\012': /* negative line feed */
vmot(-vmi);
break;
case '\015': /* clear all margins */
bottommargin = BOTTOMMARGIN;
topmargin = TOPMARGIN;
leftmargin = BOTTOMMARGIN;
rightmargin = RIGHTMARGIN;
break;
case 'E': /* auto underscore - use italic font */
changefont("/Courier-Oblique");
break;
case 'R': /* disable auto underscore */
changefont(fontname);
break;
case 'O': /* bold/shadow printing */
case 'W':
changefont("/Courier-Bold");
shadowprint = ON;
break;
case '&': /* disable bold printing */
changefont(fontname);
shadowprint = OFF;
break;
case '/': /* ignored 2 byte escapes */
case '\\':
case '<':
case '>':
case '%':
case '=':
case '.':
case '4':
case 'A':
case 'B':
case 'M':
case 'N':
case 'P':
case 'Q':
case 'X':
case '\010':
break;
case ',': /* ignored 3 byte escapes */
case '\016':
case '\021':
getc(fp_in);
break;
case '3': /* graphics mode - should quit! */
case '7':
case 'G':
case 'V':
case 'Y':
case 'Z':
error(FATAL, "graphics mode is not implemented");
break;
default:
error(FATAL, "missing case for escape o%o\n", ch);
break;
} /* End switch */
} /* End of escape */
/*****************************************************************************/
vmot(n)
int n; /* move this far vertically */
{
/*
*
* Move vertically n units from where we are.
*
*/
vpos += n;
} /* End of vmot */
/*****************************************************************************/
vgoto(n)
int n; /* new vertical position */
{
/*
*
* Moves to absolute vertical position n.
*
*/
vpos = n;
} /* End of vgoto */
/*****************************************************************************/
hmot(n)
int n; /* move this horizontally */
{
/*
*
* Moves horizontally n units from our current position.
*
*/
hpos += n * advance;
if ( hpos < leftmargin )
hpos = leftmargin;
} /* End of hmot */
/*****************************************************************************/
hgoto(n)
int n; /* go to this horizontal position */
{
/*
*
* Moves to absolute horizontal position n.
*
*/
hpos = n;
} /* End of hgoto */
/*****************************************************************************/
changefont(name)
char *name;
{
/*
*
* Changes the current font. Used to get in and out of auto underscore and bold
* printing.
*
*/
endline();
fprintf(fp_out, "%s f\n", name);
} /* End of changefont */
/*****************************************************************************/
startline()
{
/*
*
* Called whenever we want to be certain we're ready to start pushing characters
* into an open string on the stack. If stringcount is positive we've already
* started, so there's nothing to do. The first string starts in column 1.
*
*/
if ( stringcount < 1 ) {
putc('(', fp_out);
stringstart = lastx = hpos;
lasty = vpos;
lasthmi = hmi;
lastc = -1;
prevx = -1;
stringcount = 1;
} /* End if */
} /* End of startline */
/*****************************************************************************/
endline()
{
/*
*
* Generates a call to the PostScript procedure that processes the text on the
* the stack - provided stringcount is positive.
*
*/
if ( stringcount > 0 )
fprintf(fp_out, ")%d %d %d t\n", stringstart, lasty, lasthmi);
stringcount = 0;
} /* End of endline */
/*****************************************************************************/
endstring()
{
/*
*
* Takes the string we've been working on and adds it to the output file. Called
* when we need to adjust our horizontal position before starting a new string.
* Also called from endline() when we're done with the current line.
*
*/
if ( stringcount > 0 ) {
fprintf(fp_out, ")%d(", stringstart);
lastx = stringstart = hpos;
stringcount++;
} /* End if */
} /* End of endstring */
/*****************************************************************************/
oput(ch)
int ch; /* next output character */
{
/*
*
* Responsible for adding all printing characters from the input file to the
* open string on top of the stack. The only other characters that end up in
* that string are the quotes required for special characters. Reverse printing
* mode hasn't been tested but it should be close. hpos and lastx should disagree
* each time (except after startline() does something), and that should force a
* call to endstring() for every character.
*
*/
if ( stringcount > 100 ) /* don't put too much on the stack */
endline();
if ( vpos != lasty )
endline();
if ( advance == -1 ) /* for reverse printing - move first */
hmot(hmi);
startline();
if ( lastc != ch || hpos != prevx ) {
if ( lastx != hpos )
endstring();
if ( isascii(ch) && isprint(ch) ) {
if ( ch == '\\' || ch == '(' || ch == ')' )
putc('\\', fp_out);
putc(ch, fp_out);
} else fprintf(fp_out, "\\%.3o", ch & 0377);
lastc = ch;
prevx = hpos;
lastx += lasthmi;
} /* End if */
if ( advance != -1 )
hmot(hmi);
markedpage = TRUE;
} /* End of oput */
/*****************************************************************************/
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
/*
*
* If we're not supposed to print page pg, fp_out will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014230643021006440057030057030000011712360522627503500003200000000127post.src/postdaisy/README
Diablo 630 to PostScript translator. Not terribly useful, and much has
been omitted.
0707070014230637761006400057030057030000011712300522633075400003700000007451post.src/postdaisy/postdaisy.1 .ds dQ /usr/lib/postscript
.TH POSTDAISY 1 "DWB 3.2"
.SH NAME
.B postdaisy
\- PostScript translator for Diablo 630 files
.SH SYNOPSIS
\*(mBpostdaisy\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B postdaisy
translates Diablo 630 daisy-wheel
.I files
into PostScript and writes the results on the
standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP
.OP \-f name
Print
.I files
using font
.IR name .
Any PostScript font can be used,
although the best results will only be
obtained with constant width fonts.
The default font is Courier.
.TP
.OP \-h num
Set the initial horizontal motion index to
.IR num .
Determines the character advance and the default
point size, unless the
.OP \-s
option is used.
The default is 12.
.TP
.OP \-m num
Magnify each logical page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which is located near the upper left corner of
each page.
The default magnification is 1.0.
.TP
.OP \-n num
Print
.I num
logical pages on each piece of paper,
where
.I num
can be any positive integer.
By default
.I num
is set to 1.
.TP
.OP \-o list
Print pages whose numbers are given in the comma-separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP
.OP \-r num
Selects carriage return and line feed behavior.
If
.I num
is 1 a line feed generates a carriage return.
If
.I num
is 2 a carriage return generates a line feed.
Setting
.I num
to 3 enables both modes.
.TP
.OP \-s num
Use point size
.I num
instead of the default value set by the
initial horizontal motion index.
.TP
.OP \-v num
Set the initial vertical motion index to
.IR num .
The default is 8.
.TP
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed near the
upper left corner of the page, with positive
x to the right and positive y down the page.
Positive
.I num
moves everything right.
The default offset is 0.25 inches.
.TP
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves text down the page.
The default offset is 0.25 inches.
.TP
.OP \-E name
Set the character encoding for text fonts to
.IR name .
Requesting
.I name
means include file
.MI \*(dQ/ name .enc \f1.
A nonexistent encoding file is silently ignored.
The default selects file
.MR \*(dQ/Default.enc .
.TP
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/postdaisy.ps .
.PP
Three options allow insertion of arbitrary PostScript
at controlled points in the translation process:
.TP 0.75i
.OP \-C file
Copy
.I file
to the output file;
.I file
must contain legitimate PostScript.
.TP
.OP \-P string
Include
.I string
in output file;
.I string
must be legitimate PostScript.
.TP
.OP \-R action
Requests special
.I action
(e.g.,
.MR manualfeed )
on a per page or global basis.
The
.I action
string can be given as
.IR request ,
.IM request : page\f1\|,
or
.IM request : page : file\f1\|.
If
.I page
is omitted or given as 0, the request
applies to all pages.
If
.I file
is omitted, the request
lookup is done in
.MR \*(dQ/ps.requests .
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully processed.
.SH FILES
.MW \*(dQ/postdaisy.ps
.br
.MW \*(dQ/forms.ps
.br
.MW \*(dQ/ps.requests
.SH SEE ALSO
.BR dpost (1),
.BR postdmd (1),
.BR postio (1),
.BR postmd (1),
.BR postprint (1),
.BR postreverse (1),
.BR posttek (1),
.BR psencoding (1)
0707070014230643041006440057030057030000011712560522627503500004000000003367post.src/postdaisy/postdaisy.ps %
% Version 3.3.2 prologue for Diablo 1640 files.
%
/#copies 1 store
/aspectratio 1 def
/font /Courier def
/formsperpage 1 def
/hmi 12 def
/landscape false def
/magnification 1 def
/margin 10 def
/orientation 0 def
/resolution 240 def
/rotation 1 def
/xoffset .25 def
/yoffset .25 def
/roundpage true def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} bind def
/min {2 copy gt {exch} if pop} bind def
/ashow {ashow} bind def % so later references don't bind
/stringwidth {stringwidth} bind def
/setup {
counttomark 2 idiv {def} repeat pop
landscape {/orientation 90 orientation add def} if
/scaling 72 resolution div def
currentdict /pointsize known not {/pointsize hmi def} if
font findfont pointsize scaling div scalefont setfont
/charwidth (M) stringwidth pop def
pagedimensions
xcenter ycenter translate
orientation rotation mul rotate
width 2 div neg height 2 div translate
xoffset inch yoffset inch neg translate
margin 2 div dup neg translate
magnification dup aspectratio mul scale
height width div 1 min dup scale
scaling dup scale
} def
/pagedimensions {
useclippath userdict /gotpagebbox known not and {
/pagebbox [clippath pathbbox newpath] def
roundpage currentdict /roundpagebbox known and {roundpagebbox} if
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
userdict /gotpagebbox true put
} def
/pagesetup {/page exch def 0 0 moveto} bind def
/t {
charwidth sub /advance exch def
neg /y exch def
counttomark 2 idiv {y moveto advance 0 3 -1 roll ashow} repeat
} bind def
/f {findfont pointsize scaling div scalefont setfont} bind def
/done {/lastpage where {pop lastpage} if} def
0707070014230643051006440057030057030000011713700522627503500004000000067255post.src/postdaisy/Opostdaisy.c /*
*
* postdaisy - PostScript translator for Diablo 1640 files.
*
* A program that translates Diablo 1640 files into PostScript. Absolutely nothing
* is guaranteed. Quite a few things haven't been implemented, and what's been
* done isn't well tested. Most of the documentation used to write this program
* was taken from the 'Diablo Emulator' section of a recent Imagen manual.
*
* Some of document comments that are generated may not be right. Most of the test
* files I used produced a trailing blank page. I've put a check in formfeed() that
* won't print the last page if it doesn't contain any text, but PAGES comments may
* not be right. The DOCUMENTFONTS comment will also be wrong if auto underline or
* bold printing have been turned on by escape commands.
*
* The brute force approach used to implement horizontal and vertical tabs leaves
* much to be desired, and may not work for very small initial hmi and vmi values.
* At the very least I should have used malloc() to get space for the two tabstop
* arrays after hmi and vmi are known!
*
* Reverse printing mode hasn't been tested at all, but what's here should be
* close even though it's not efficient.
*
* The PostScript prologue is copied from *prologue before any of the input files
* are translated. The program expects that the following PostScript procedures
* are defined in that file:
*
* setup
*
* mark ... setup -
*
* Handles special initialization stuff that depends on how this program
* was called. Expects to find a mark followed by key/value pairs on the
* stack. The def operator is applied to each pair up to the mark, then
* the default state is set up.
*
* pagesetup
*
* page pagesetup -
*
* Does whatever is needed to set things up for the next page. Expects to
* find the current page number on the stack.
*
* t
*
* mark str1 x1 str2 x2 ... strn xn y hmi t mark
*
* Handles all the text on the stack. Characters in the strings are
* printed using hmi as the character advance, and all strings are at
* vertical position y. Each string is begins at the horizontal position
* that preceeds it.
*
* f
*
* font f -
*
* Use font f, where f is the full PostScript font name. Only used when
* we switch to auto underline (Courier-Italic) or bold (Courier-Bold)
* printing.
*
* done
*
* done
*
* Makes sure the last page is printed. Only needed when we're printing
* more than one page on each sheet of paper.
*
* Many default values, like the magnification and orientation, are defined in
* the prologue, which is where they belong. If they're changed (by options), an
* appropriate definition is made after the prologue is added to the output file.
* The -P option passes arbitrary PostScript through to the output file. Among
* other things it can be used to set (or change) values that can't be accessed by
* other options.
*
*/
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for the prologue */
#include "ext.h" /* external variable declarations */
#include "postdaisy.h" /* a few special definitions */
char *optnames = "a:c:f:h:l:m:n:o:p:r:s:v:x:y:A:C:E:J:L:P:DI";
char *prologue = POSTDAISY; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
char htabstops[COLUMNS]; /* horizontal */
char vtabstops[ROWS]; /* and vertical tabs */
int res = RES; /* input file resolution - sort of */
int hmi = HMI; /* horizontal motion index - 1/120 inch */
int vmi = VMI; /* vertical motion index - 1/48 inch */
int ohmi = HMI; /* original hmi */
int ovmi = VMI; /* and vmi - for tabs and char size */
int hpos = 0; /* current horizontal */
int vpos = 0; /* and vertical position */
int lastx = -1; /* printer's last horizontal */
int lasty = -1; /* and vertical position */
int lasthmi = -1; /* hmi for current text strings */
int lastc = -1; /* last printed character */
int prevx = -1; /* at this position */
int leftmargin = LEFTMARGIN; /* page margins */
int rightmargin = RIGHTMARGIN;
int topmargin = TOPMARGIN;
int bottommargin = BOTTOMMARGIN;
int stringcount = 0; /* number of strings on the stack */
int stringstart = 1; /* column where current one starts */
int advance = 1; /* -1 if in backward print mode */
int lfiscr = OFF; /* line feed implies carriage return */
int crislf = OFF; /* carriage return implies line feed */
int linespp = 0; /* lines per page if it's positive */
int markedpage = FALSE; /* helps prevent trailing blank page */
int page = 0; /* page we're working on */
int printed = 0; /* printed this many pages */
Fontmap fontmap[] = FONTMAP; /* for translating font names */
char *fontname = "Courier"; /* use this PostScript font */
int shadowprint = OFF; /* automatic bold printing if ON */
FILE *fp_in; /* read from this file */
FILE *fp_out = stdout; /* and write stuff here */
FILE *fp_acct = NULL; /* for accounting data */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A simple program that translates Diablo 1640 files into PostScript. Nothing
* is guaranteed - the program not well tested and doesn't implement everything.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* really just for error messages */
init_signals(); /* sets up interrupt handling */
header(); /* PostScript header comments */
options(); /* handle the command line options */
setup(); /* for PostScript */
arguments(); /* followed by each input file */
done(); /* print the last page etc. */
account(); /* job accounting data */
exit(x_stat); /* not much could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
int interrupt(); /* signal handler */
/*
*
* Makes sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
/*
*
* Scans the option list looking for things, like the prologue file, that we need
* right away but could be changed from the default. Doing things this way is an
* attempt to conform to Adobe's latest file structuring conventions. In particular
* they now say there should be nothing executed in the prologue, and they have
* added two new comments that delimit global initialization calls. Once we know
* where things really are we write out the job header, follow it by the prologue,
* and then add the ENDPROLOG and BEGINSETUP comments.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
if ( DOROUND )
cat(ROUNDPAGE);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
int n; /* for CR and LF modes */
/*
*
* Reads and processes the command line options. Added the -P option so arbitrary
* PostScript code can be passed through. Expect it could be useful for changing
* definitions in the prologue for which options have not been defined.
*
* Although any PostScript font can be used, things will only work for constant
* width fonts.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'f': /* use this PostScript font */
fontname = get_font(optarg);
fprintf(stdout, "/font /%s def\n", fontname);
break;
case 'h': /* default character spacing */
ohmi = hmi = atoi(optarg) * HSCALE;
fprintf(stdout, "/hmi %s def\n", optarg);
break;
case 'l': /* lines per page */
linespp = atoi(optarg);
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'r': /* set CR and LF modes */
n = atoi(optarg);
if ( n & 01 )
lfiscr = ON;
else lfiscr = OFF;
if ( n & 02 )
crislf = ON;
else crislf = OFF;
break;
case 's': /* point size */
fprintf(stdout, "/pointsize %s def\n", optarg);
break;
case 'v': /* default line spacing */
ovmi = vmi = atoi(optarg) * VSCALE;
break;
case 'x': /* shift things horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* force job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding */
fontencoding = optarg;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* special global or page level request */
saverequest(optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
char *get_font(name)
char *name; /* name the user asked for */
{
int i; /* for looking through fontmap[] */
/*
*
* Called from options() to map a user's font name into a legal PostScript name.
* If the lookup fails *name is returned to the caller. That should let you choose
* any PostScript font, although things will only work well for constant width
* fonts.
*
*/
for ( i = 0; fontmap[i].name != NULL; i++ )
if ( strcmp(name, fontmap[i].name) == 0 )
return(fontmap[i].val);
return(name);
} /* End of get_font */
/*****************************************************************************/
setup()
{
/*
*
* Handles things that must be done after the options are read but before the
* input files are processed.
*
*/
writerequest(0, stdout); /* global requests eg. manual feed */
setencoding(fontencoding);
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) {
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
} /* End of setup */
/*****************************************************************************/
arguments()
{
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll process stdin.
*
*/
fp_in = stdin;
if ( argc < 1 )
text();
else { /* at least one argument is left */
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
text();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End else */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Finished with all the input files, so mark the end of the pages, make sure the
* last page is printed, and restore the initial environment.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, fontname);
fprintf(stdout, "%s %d\n", PAGES, printed);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Writes an accounting record to *fp_acct provided it's not NULL. Accounting
* is requested using the -A or -J options.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
text()
{
int ch; /* next input character */
/*
*
* Translates the next input file into PostScript. The redirect(-1) call forces
* the initial output to go to /dev/null - so the stuff formfeed() does at the
* end of each page doesn't go to stdout.
*
*/
redirect(-1); /* get ready for the first page */
formfeed(); /* force PAGE comment etc. */
inittabs();
while ( (ch = getc(fp_in)) != EOF )
switch ( ch ) {
case '\010': /* backspace */
backspace();
break;
case '\011': /* horizontal tab */
htab();
break;
case '\012': /* new line */
linefeed();
break;
case '\013': /* vertical tab */
vtab();
break;
case '\014': /* form feed */
formfeed();
break;
case '\015': /* carriage return */
carriage();
break;
case '\016': /* extended character set - SO */
break;
case '\017': /* extended character set - SI */
break;
case '\031': /* next char from supplementary set */
break;
case '\033': /* 2 or 3 byte escape sequence */
escape();
break;
default:
if ( isascii(ch) && isprint(ch) )
oput(ch);
break;
} /* End switch */
formfeed(); /* next file starts on a new page? */
} /* End of text */
/*****************************************************************************/
inittabs()
{
int i; /* loop index */
/*
*
* Initializes the horizontal and vertical tab arrays. The way tabs are handled is
* quite inefficient and may not work for all initial hmi or vmi values.
*
*/
for ( i = 0; i < COLUMNS; i++ )
htabstops[i] = ((i % 8) == 0) ? ON : OFF;
for ( i = 0; i < ROWS; i++ )
vtabstops[i] = ((i * ovmi) > BOTTOMMARGIN) ? ON : OFF;
} /* End of inittabs */
/*****************************************************************************/
cleartabs()
{
int i; /* loop index */
/*
*
* Clears all horizontal and vertical tab stops.
*
*/
for ( i = 0; i < ROWS; i++ )
htabstops[i] = OFF;
for ( i = 0; i < COLUMNS; i++ )
vtabstops[i] = OFF;
} /* End of cleartabs */
/*****************************************************************************/
formfeed()
{
/*
*
* Called whenever we've finished with the last page and want to get ready for the
* next one. Also used at the beginning and end of each input file, so we have to
* be careful about what's done. I've added a simple test before the showpage that
* should eliminate the extra blank page that was put out at the end of many jobs,
* but the PAGES comments may be wrong.
*
*/
if ( fp_out == stdout ) /* count the last page */
printed++;
endline(); /* print the last line */
fprintf(fp_out, "cleartomark\n");
if ( feof(fp_in) == 0 || markedpage == TRUE )
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
if ( ungetc(getc(fp_in), fp_in) == EOF )
redirect(-1);
else redirect(++page);
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fprintf(fp_out, "/saveobj save def\n");
fprintf(fp_out, "mark\n");
writerequest(printed+1, fp_out);
fprintf(fp_out, "%d pagesetup\n", printed+1);
vgoto(topmargin);
hgoto(leftmargin);
markedpage = FALSE;
} /* End of formfeed */
/*****************************************************************************/
linefeed()
{
int line = 0; /* current line - based on ovmi */
/*
*
* Adjust our current vertical position. If we've passed the bottom of the page
* or exceeded the number of lines per page, print it and go to the upper left
* corner of the next page. This routine is also called from carriage() if crislf
* is ON.
*
*/
vmot(vmi);
if ( lfiscr == ON )
hgoto(leftmargin);
if ( linespp > 0 ) /* means something so see where we are */
line = vpos / ovmi + 1;
if ( vpos > bottommargin || line > linespp )
formfeed();
} /* End of linefeed */
/*****************************************************************************/
carriage()
{
/*
*
* Handles carriage return character. If crislf is ON we'll generate a line feed
* every time we get a carriage return character.
*
*/
if ( shadowprint == ON ) /* back to normal mode */
changefont(fontname);
advance = 1;
shadowprint = OFF;
hgoto(leftmargin);
if ( crislf == ON )
linefeed();
} /* End of carriage */
/*****************************************************************************/
htab()
{
int col; /* 'column' we'll be at next */
int i; /* loop index */
/*
*
* Tries to figure out where the next tab stop is. Wasn't positive about this
* one, since hmi can change. I'll assume columns are determined by the original
* value of hmi. That fixes them on the page, which seems to make more sense than
* letting them float all over the place.
*
*/
endline();
col = hpos/ohmi + 1;
for ( i = col; i < ROWS; i++ )
if ( htabstops[i] == ON ) {
col = i;
break;
} /* End if */
hgoto(col * ohmi);
lastx = hpos;
} /* End of htab */
/*****************************************************************************/
vtab()
{
int line; /* line we'll be at next */
int i; /* loop index */
/*
*
* Looks for the next vertical tab stop in the vtabstops[] array and moves to that
* line. If we don't find a tab we'll just move down one line - shouldn't happen.
*
*/
endline();
line = vpos/ovmi + 1;
for ( i = line; i < COLUMNS; i++ )
if ( vtabstops[i] == ON ) {
line = i;
break;
} /* End if */
vgoto(line * ovmi);
} /* End of vtab */
/*****************************************************************************/
backspace()
{
/*
*
* Moves backwards a distance equal to the current value of hmi, but don't go
* past the left margin.
*
*/
endline();
if ( hpos - leftmargin >= hmi )
hmot(-hmi);
else hgoto(leftmargin); /* maybe just ignore the backspace?? */
lastx = hpos;
} /* End of backspace */
/*****************************************************************************/
escape()
{
int ch; /* control character */
/*
*
* Handles special codes that are expected to follow an escape character. The
* initial escape character is followed by one or two bytes.
*
*/
switch ( ch = getc(fp_in) ) {
case 'T': /* top margin */
topmargin = vpos;
break;
case 'L': /* bottom margin */
bottommargin = vpos;
break;
case 'C': /* clear top and bottom margins */
bottommargin = BOTTOMMARGIN;
topmargin = TOPMARGIN;
break;
case '9': /* left margin */
leftmargin = hpos;
break;
case '0': /* right margin */
rightmargin = hpos;
break;
case '1': /* set horizontal tab */
htabstops[hpos/ohmi] = ON;
break;
case '8': /* clear horizontal tab at hpos */
htabstops[hpos/ohmi] = OFF;
break;
case '-': /* set vertical tab */
vtabstops[vpos/ovmi] = ON;
break;
case '2': /* clear all tabs */
cleartabs();
break;
case '\014': /* set lines per page */
linespp = getc(fp_in);
break;
case '\037': /* set hmi to next byte minus 1 */
hmi = HSCALE * (getc(fp_in) - 1);
break;
case 'S': /* reset hmi to default */
hmi = ohmi;
break;
case '\011': /* move to column given by next byte */
hgoto((getc(fp_in)-1) * ohmi);
break;
case '?': /* do carriage return after line feed */
lfiscr = ON;
break;
case '!': /* don't generate carriage return */
lfiscr = OFF;
break;
case '5': /* forward print mode */
advance = 1;
break;
case '6': /* backward print mode */
advance = -1;
break;
case '\036': /* set vmi to next byte minus 1 */
vmi = VSCALE * (getc(fp_in) - 1);
break;
case '\013': /* move to line given by next byte */
vgoto((getc(fp_in)-1) * ovmi);
break;
case 'U': /* positive half line feed */
vmot(vmi/2);
break;
case 'D': /* negative half line feed */
vmot(-vmi/2);
break;
case '\012': /* negative line feed */
vmot(-vmi);
break;
case '\015': /* clear all margins */
bottommargin = BOTTOMMARGIN;
topmargin = TOPMARGIN;
leftmargin = BOTTOMMARGIN;
rightmargin = RIGHTMARGIN;
break;
case 'E': /* auto underscore - use italic font */
changefont("/Courier-Oblique");
break;
case 'R': /* disable auto underscore */
changefont(fontname);
break;
case 'O': /* bold/shadow printing */
case 'W':
changefont("/Courier-Bold");
shadowprint = ON;
break;
case '&': /* disable bold printing */
changefont(fontname);
shadowprint = OFF;
break;
case '/': /* ignored 2 byte escapes */
case '\\':
case '<':
case '>':
case '%':
case '=':
case '.':
case '4':
case 'A':
case 'B':
case 'M':
case 'N':
case 'P':
case 'Q':
case 'X':
case '\010':
break;
case ',': /* ignored 3 byte escapes */
case '\016':
case '\021':
getc(fp_in);
break;
case '3': /* graphics mode - should quit! */
case '7':
case 'G':
case 'V':
case 'Y':
case 'Z':
error(FATAL, "graphics mode is not implemented");
break;
default:
error(FATAL, "missing case for escape o%o\n", ch);
break;
} /* End switch */
} /* End of escape */
/*****************************************************************************/
vmot(n)
int n; /* move this far vertically */
{
/*
*
* Move vertically n units from where we are.
*
*/
vpos += n;
} /* End of vmot */
/*****************************************************************************/
vgoto(n)
int n; /* new vertical position */
{
/*
*
* Moves to absolute vertical position n.
*
*/
vpos = n;
} /* End of vgoto */
/*****************************************************************************/
hmot(n)
int n; /* move this horizontally */
{
/*
*
* Moves horizontally n units from our current position.
*
*/
hpos += n * advance;
if ( hpos < leftmargin )
hpos = leftmargin;
} /* End of hmot */
/*****************************************************************************/
hgoto(n)
int n; /* go to this horizontal position */
{
/*
*
* Moves to absolute horizontal position n.
*
*/
hpos = n;
} /* End of hgoto */
/*****************************************************************************/
changefont(name)
char *name;
{
/*
*
* Changes the current font. Used to get in and out of auto underscore and bold
* printing.
*
*/
endline();
fprintf(fp_out, "%s f\n", name);
} /* End of changefont */
/*****************************************************************************/
startline()
{
/*
*
* Called whenever we want to be certain we're ready to start pushing characters
* into an open string on the stack. If stringcount is positive we've already
* started, so there's nothing to do. The first string starts in column 1.
*
*/
if ( stringcount < 1 ) {
putc('(', fp_out);
stringstart = lastx = hpos;
lasty = vpos;
lasthmi = hmi;
lastc = -1;
prevx = -1;
stringcount = 1;
} /* End if */
} /* End of startline */
/*****************************************************************************/
endline()
{
/*
*
* Generates a call to the PostScript procedure that processes the text on the
* the stack - provided stringcount is positive.
*
*/
if ( stringcount > 0 )
fprintf(fp_out, ")%d %d %d t\n", stringstart, lasty, lasthmi);
stringcount = 0;
} /* End of endline */
/*****************************************************************************/
endstring()
{
/*
*
* Takes the string we've been working on and adds it to the output file. Called
* when we need to adjust our horizontal position before starting a new string.
* Also called from endline() when we're done with the current line.
*
*/
if ( stringcount > 0 ) {
fprintf(fp_out, ")%d(", stringstart);
lastx = stringstart = hpos;
stringcount++;
} /* End if */
} /* End of endstring */
/*****************************************************************************/
oput(ch)
int ch; /* next output character */
{
/*
*
* Responsible for adding all printing characters from the input file to the
* open string on top of the stack. The only other characters that end up in
* that string are the quotes required for special characters. Reverse printing
* mode hasn't been tested but it should be close. hpos and lastx should disagree
* each time (except after startline() does something), and that should force a
* call to endstring() for every character.
*
*/
if ( stringcount > 100 ) /* don't put too much on the stack */
endline();
if ( vpos != lasty )
endline();
if ( advance == -1 ) /* for reverse printing - move first */
hmot(hmi);
startline();
if ( lastc != ch || hpos != prevx ) {
if ( lastx != hpos )
endstring();
if ( ch == '\\' || ch == '(' || ch == ')' )
putc('\\', fp_out);
putc(ch, fp_out);
lastc = ch;
prevx = hpos;
lastx += lasthmi;
} /* End if */
if ( advance != -1 )
hmot(hmi);
markedpage = TRUE;
} /* End of oput */
/*****************************************************************************/
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
/*
*
* If we're not supposed to print page pg, fp_out will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014230735640407550057030057030000020015370522633075500002100000000000post.src/postdmd 0707070014230735651006440057030057030000010015060522627503500003000000001317post.src/postdmd/README
DMD bitmap to PostScript translator. Much of the code came from abm,
which was written by Guy Riddle.
By default 6 byte patterns are used to encode the output bitmap. Use
the -b option to change the pattern size. Bitmaps are unpacked one
scanline at a time and re-encoded in a format that looks like,
bytes patterns count
where bytes and count are decimal integers and patterns is a series
of hex digits. Bytes is the number of bytes represented by the hex
pattern, and count is the number of additional times the pattern
should be repeated. For example,
2 FFFF 4
5 FFFFFFFFFF 1
10 FFFFFFFFFFFFFFFFFFFF 0
all represent 10 consecutive bytes of ones. Scanlines are terminated
by a 0 on a line by itself.
0707070014230732611006400057030057030000010015760522633075500003400000003714post.src/postdmd/postdmd.mk MAKE=/bin/make
MAKEFILE=postdmd.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=postdmd.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o
all : postdmd
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp postdmd $(POSTBIN)/postdmd
@chmod 755 $(POSTBIN)/postdmd
@chgrp $(GROUP) $(POSTBIN)/postdmd
@chown $(OWNER) $(POSTBIN)/postdmd
cp postdmd.ps $(POSTLIB)/postdmd.ps
@chmod 644 $(POSTLIB)/postdmd.ps
@chgrp $(GROUP) $(POSTLIB)/postdmd.ps
@chown $(OWNER) $(POSTLIB)/postdmd.ps
cp postdmd.1 $(MAN1DIR)/postdmd.1
@chmod 644 $(MAN1DIR)/postdmd.1
@chgrp $(GROUP) $(MAN1DIR)/postdmd.1
@chown $(OWNER) $(MAN1DIR)/postdmd.1
clean :
rm -f *.o
clobber : clean
rm -f postdmd
postdmd : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postdmd $(OFILES)
postdmd.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
postdmd.1 >XXX.1; \
mv XXX.1 postdmd.1
0707070014230735671006440057030057030000010015400522627503500003300000050035post.src/postdmd/postdmd.c /*
*
* postdmd - PostScript translator for DMD bitmap files.
*
* A simple program that can be used to print DMD bitmaps on PostScript printers.
* Much of the code was borrowed from abm, which was written by Guy Riddle.
*
* Although the program supports two different input bitmap formats, by far the
* most important is the Eighth (and Ninth) Edition bitfile format. A bitmap in
* the bitfile format begins with a 10 byte header with the first two bytes set to
* zero. The next 8 bytes set the x and y coordinates of the bitmap's origin and
* corner (ie. the upper left and lower right corners). The compressed raster data
* follows the header and consists of control bytes followed an appropriate number
* of data bytes. Control bytes (ie. n) less than 127 means read the next 2*n bytes
* of raster data directly from the input file, while if n is larger than 128 we
* read two bytes from the input file and replicate the bytes n-128 times. After
* each scan line is recovered it's exclusive-or'd with the preceeding line to
* generate the real raster data.
*
* After each raster line is recovered postdmd encodes it in a slightly different
* format that's designed to be unpacked by a PostScript procedure that's defined
* in the prologue. By default no exclusive-or'ing is done and packing of pattern
* data can be based on any number of bytes rather than just the next two bytes.
* By default 6 byte patterns are used, but any number can be selected with the -b
* option. A non-positive argument (eg. -b0) disables all pattern encoding. Larger
* patterns increase the size of the output file, but reduce the work load that's
* forced on the PostScript interpreter. The default choices I've made (ie. 6 byte
* patterns and no exclusive-or'ing) do a decent balancing job across currently
* available PostScript printers. Larger patterns (eg. -b16) increase the output
* file size, but may be appropriate if you're running at a high baud rate (eg.
* 19.2KB), while smaller patter size (eg. -b4) may help if you've got a printer
* with a fast processor (eg. a PS-810).
*
* The encoding produced by the program (and decoded on the printer) looks like,
*
* bytes patterns count
*
* where bytes and count are decimal integers and patterns is a hex string. Bytes
* is the number of bytes represented by the hex patterns and count is the number
* of additional times the patterns should be repeated. For example,
*
* 2 FFFF 4
* 5 FFFFFFFFFF 1
* 10 FFFFFFFFFFFFFFFFFFFF 0
*
* all represent 10 consecutive bytes of ones. Scanlines are terminated by a 0 on
* a line by itself.
*
* The PostScript prologue is copied from *prologue before any of the input files
* are translated. The program expects that the following PostScript procedures
* are defined in that file:
*
* setup
*
* mark ... setup -
*
* Handles special initialization stuff that depends on how this program
* was called. Expects to find a mark followed by key/value pairs on the
* stack. The def operator is applied to each pair up to the mark, then
* the default state is set up.
*
* pagesetup
*
* page pagesetup -
*
* Does whatever is needed to set things up for the next page. Expects
* to find the current page number on the stack.
*
* bitmap
*
* v8format flip scanlength scanlines bitmap -
*
* Prints the bitmap that's read from standard input. The bitmap consists
* of scanlines lines, each of which includes scanlength pixels. If
* v8format is true the picture is assumed to be an Eighth Edition bitmap,
* and the exclusive-or'ing will be done on the printer.
*
* done
*
* done
*
* Makes sure the last page is printed. Only needed when we're printing
* more than one page on each sheet of paper.
*
* Many default values, like the magnification and orientation, are defined in
* the prologue, which is where they belong. If they're changed (by options), an
* appropriate definition is made after the prologue is added to the output file.
* The -P option passes arbitrary PostScript through to the output file. Among
* other things it can be used to set (or change) values that can't be accessed by
* other options.
*
*/
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for the prologue */
#include "ext.h" /* external variable declarations */
char *optnames = "a:b:c:fm:n:o:p:ux:y:A:C:E:J:L:P:DI";
char *prologue = POSTDMD; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int bbox[2] = {0, 0}; /* upper right coordinates only */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
int bytespp = 6; /* bytes per pattern - on output */
int flip = FALSE; /* ones complement the bitmap */
int v8undo = TRUE; /* xor'ing done on host if TRUE */
int v8format = FALSE; /* for Eighth Edition bitmaps */
int page = 0; /* last page we worked on */
int printed = 0; /* and the number of pages printed */
int patterns; /* 16 bit patterns per scan line */
int scanlines; /* lines in the bitmap */
int patcount = 0; /* should be patterns * scanlines */
char *raster = NULL; /* next raster line */
char *prevrast = NULL; /* and the previous one - v8format */
char *rptr; /* next free byte in raster */
char *eptr; /* one past the last byte in raster */
FILE *fp_in = NULL; /* read from this file */
FILE *fp_out = stdout; /* and write stuff here */
FILE *fp_acct = NULL; /* for accounting data */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A simple program that translates DMD bitmap files into PostScript. There can
* be more than one bitmap per file, but none can be split across input files.
* Each bitmap goes on a page by itself.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* really just for error messages */
init_signals(); /* sets up interrupt handling */
header(); /* PostScript header comments */
options(); /* handle the command line options */
setup(); /* for PostScript */
arguments(); /* followed by each input file */
done(); /* print the last page etc. */
account(); /* job accounting data */
exit(x_stat); /* not much could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Make sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
/*
*
* Scans the option list looking for things, like the prologue file, that we need
* right away but could be changed from the default. Doing things this way is an
* attempt to conform to Adobe's latest file structuring conventions. In particular
* they now say there should be nothing executed in the prologue, and they have
* added two new comments that delimit global initialization calls. Once we know
* where things really are we write out the job header, follow it by the prologue,
* and then add the ENDPROLOG and BEGINSETUP comments.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
/*
*
* Reads and processes the command line options. Added the -P option so arbitrary
* PostScript code can be passed through. Expect it could be useful for changing
* definitions in the prologue for which options have not been defined.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'b': /* bytes per pattern */
bytespp = atoi(optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'f': /* ones complement - sort of */
flip = TRUE;
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'u': /* don't undo Eighth Edition bitmaps */
v8undo = FALSE;
break;
case 'x': /* shift things horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* force job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding - unnecessary */
fontencoding = optarg;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* special global or page level request */
saverequest(optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
setup()
{
/*
*
* Handles things that must be done after the options are read but before the
* input files are processed.
*
*/
writerequest(0, stdout); /* global requests eg. manual feed */
setencoding(fontencoding); /* unnecessary */
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) { /* followed by stuff for multiple pages */
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
} /* End of setup */
/*****************************************************************************/
arguments()
{
FILE *fp; /* next input file */
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll process stdin.
*
*/
if ( argc < 1 )
bitmap(stdin);
else { /* at least one argument is left */
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp = stdin;
else if ( (fp = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
bitmap(fp);
if ( fp != stdin )
fclose(fp);
argc--;
argv++;
} /* End while */
} /* End else */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Finished with all the input files, so mark the end of the pages with a TRAILER
* comment, make sure the last page prints, and add things like the PAGES comment
* that can only be determined after all the input files have been read.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s 0 0 %d %d\n", BOUNDINGBOX, (bbox[0]*72+100)/100, (bbox[1]*72+100)/100);
fprintf(stdout, "%s %d\n", PAGES, printed);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Writes an accounting record to *fp_acct provided it's not NULL. Accounting is
* requested using the -A or -J options.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
bitmap(fp)
FILE *fp; /* next input file */
{
int count; /* pattern repeats this many times */
long total; /* expect this many patterns */
/*
*
* Reads all the bitmaps from the next input file, translates each one into
* PostScript, and arranges to have one bitmap printed on each page. Multiple
* bitmaps per input file work.
*
*/
fp_in = fp; /* everyone reads from this file */
while ( dimensions() == TRUE ) {
patcount = 0;
total = scanlines * patterns;
bbox[0] = MAX(bbox[0], patterns*16); /* for BoundingBox comment */
bbox[1] = MAX(bbox[1], scanlines);
redirect(++page);
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fprintf(fp_out, "/saveobj save def\n");
writerequest(printed+1, fp_out);
fprintf(fp_out, "%s ", (v8format == TRUE && v8undo == FALSE) ? "true" : "false");
fprintf(fp_out, "%s ", (flip == TRUE) ? "true" : "false");
fprintf(fp_out, "%d %d bitmap\n", patterns * 16, scanlines);
while ( patcount != total && (count = getc(fp)) != EOF ) {
addrast(count);
patcount += (count & 0177);
if ( patcount % patterns == 0 )
putrast();
} /* End while */
if ( debug == ON )
fprintf(stderr, "patterns = %d, scanlines = %d, patcount = %d\n", patterns, scanlines, patcount);
if ( total != patcount )
error(FATAL, "bitmap format error");
if ( fp_out == stdout ) printed++;
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
} /* End while */
} /* End of bitmap */
/*****************************************************************************/
dimensions()
{
int ox, oy; /* coordinates of the origin */
int cx, cy; /* and right corner of the bitmap */
int i; /* loop index */
/*
*
* Determines the dimensions and type of the next bitmap. Eighth edition bitmaps
* have a zero in the first 16 bits. If valid dimensions are read TRUE is returned
* to the caller. Changed so the check of whether we're done (by testing scanlines
* or patterns) comes before the malloc().
*
*/
if ( (scanlines = getint()) == 0 ) {
ox = getint();
oy = getint();
cx = getint();
cy = getint();
scanlines = cy - oy;
patterns = (cx - ox + 15) / 16;
v8format = TRUE;
} else patterns = getint();
if ( scanlines <= 0 || patterns <= 0 ) /* done - don't do the malloc() */
return(FALSE);
if ( raster != NULL ) free(raster);
if ( prevrast != NULL ) free(prevrast);
if ( (rptr = raster = (char *) malloc(patterns * 2)) == NULL )
error(FATAL, "no memory");
if ( (prevrast = (char *) malloc(patterns * 2)) == NULL )
error(FATAL, "no memory");
for ( i = 0; i < patterns * 2; i++ )
*(prevrast+i) = 0377;
eptr = rptr + patterns * 2;
return(TRUE);
} /* End of dimensions */
/*****************************************************************************/
addrast(count)
int count; /* repeat count for next pattern */
{
int size; /* number of bytes in next pattern */
int l, h; /* high and low bytes */
int i, j; /* loop indices */
/*
*
* Reads the input file and adds the appropriate number of bytes to the output
* raster line. If count has bit 7 on, one 16 bit pattern is read and repeated
* count & 0177 times. If bit 7 is off, count is the number of patterns read from
* fp_in - each one repeated once.
*
*/
if ( count & 0200 ) {
size = 1;
count &= 0177;
} else {
size = count;
count = 1;
} /* End else */
for ( i = size; i > 0; i-- ) {
if ( (l = getc(fp_in)) == EOF || (h = getc(fp_in)) == EOF )
return;
for ( j = count; j > 0; j-- ) {
*rptr++ = l;
*rptr++ = h;
} /* End for */
} /* End for */
} /* End of addrast */
/*****************************************************************************/
putrast()
{
char *p1, *p2; /* starting and ending patterns */
int n; /* set to bytes per pattern */
int i; /* loop index */
/*
*
* Takes the scanline that's been saved in *raster, encodes it according to the
* value that's been assigned to bytespp, and writes the result to *fp_out. Each
* line in the output bitmap is terminated by a 0 on a line by itself.
*
*/
n = (bytespp <= 0) ? 2 * patterns : bytespp;
if ( v8format == TRUE && v8undo == TRUE )
for ( i = 0; i < patterns * 2; i++ )
*(raster+i) = (*(prevrast+i) ^= *(raster+i));
for ( p1 = raster, p2 = raster + n; p1 < eptr; p1 = p2 )
if ( patncmp(p1, n) == TRUE ) {
while ( patncmp(p2, n) == TRUE ) p2 += n;
p2 += n;
fprintf(fp_out, "%d ", n);
for ( i = 0; i < n; i++, p1++ )
fprintf(fp_out, "%.2X", ((int) *p1) & 0377);
fprintf(fp_out, " %d\n", (p2 - p1) / n);
} else {
while ( p2 < eptr && patncmp(p2, n) == FALSE ) p2 += n;
if ( p2 > eptr ) p2 = eptr;
fprintf(fp_out, "%d ", p2 - p1);
while ( p1 < p2 )
fprintf(fp_out, "%.2X", ((int) *p1++) & 0377);
fprintf(fp_out, " 0\n");
} /* End else */
fprintf(fp_out, "0\n");
rptr = raster;
} /* End of putrast */
/*****************************************************************************/
patncmp(p1, n)
char *p1; /* first patterns starts here */
int n; /* and extends this many bytes */
{
char *p2; /* address of the second pattern */
/*
*
* Compares the two n byte patterns *p1 and *(p1+n). FALSE is returned if they're
* different or extend past the end of the current raster line.
*
*/
p2 = p1 + n;
for ( ; n > 0; n--, p1++, p2++ )
if ( p2 >= eptr || *p1 != *p2 )
return(FALSE);
return(TRUE);
} /* End of patncmp */
/*****************************************************************************/
getint()
{
int h, l; /* high and low bytes */
/*
*
* Reads the next two bytes from *fp_in and returns the resulting integer.
*
*/
if ( (l = getc(fp_in)) == EOF || (h = getc(fp_in)) == EOF )
return(-1);
return((h & 0377) << 8 | (l & 0377));
} /* End of getint */
/*****************************************************************************/
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
/*
*
* If we're not supposed to print page pg, fp_out will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014230732621006400057030057030000010016100522633075500003300000007146post.src/postdmd/postdmd.1 .ds dQ /usr/lib/postscript
.TH POSTDMD 1
.SH NAME
.B postdmd
\- PostScript translator for
.SM DMD
bitmap files
.SH SYNOPSIS
\*(mBpostdmd\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B postdmd
translates
.SM DMD
bitmap
.IR files ,
as produced by
.BR dmdps ,
or
.I files
written in the Ninth Edition
.BR bitfile (9.5)
format
into PostScript and writes the results on the
standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-b num
Pack the bitmap in the output file using
.I num
byte patterns.
A value of 0 turns off all packing of the output file.
By default
.I num
is 6.
.TP
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP
.OP \-f
Flip the sense of the bits in
.I files
before printing the bitmaps.
.TP
.OP \-m num
Magnify each logical page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which by default is located at the center of
each page.
The default magnification is 1.0.
.TP
.OP \-n num
Print
.I num
logical pages on each piece of paper,
where
.I num
can be any positive integer.
By default
.I num
is set to 1.
.TP
.OP \-o list
Print pages whose numbers are given in the comma-separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP
.OP \-u
Disables much of the unpacking for Eighth
Edition bitmap files.
Usually results in smaller output files that take longer to print.
Not a recommended option.
.TP
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed at the
center of the page, with positive
x to the right and positive y up the page.
Positive
.I num
moves everything right.
The default offset is 0 inches.
.TP
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves everything up the page.
The default offset is 0.
.TP
.TP
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/postdmd.ps .
.PP
Three options allow insertion of arbitrary PostScript
at controlled points in the translation process:
.TP 0.75i
.OP \-C file
Copy
.I file
to the output file;
.I file
must contain legitimate PostScript.
.TP
.OP \-P string
Include
.I string
in the output file;
.I string
must be legitimate PostScript.
.TP
.OP \-R action
Requests special
.I action
(e.g.,
.MR manualfeed )
on a per page or global basis.
The
.I action
string can be given as
.IR request,
.IM request : page\f1\|,
or
.IM request : page : file\f1\|.
If
.I page
is omitted or given as 0, the request applies to all pages.
If
.I file
is omitted, the request lookup is done in
.MR \*(dQ/ps.requests .
.PP
Only one bitmap is printed on each logical page, and each of the input
.I files
must contain complete descriptions of at least one bitmap.
Decreasing the pattern size using the
.OP \-b
option may help throughput on printers with fast processors
(e.g., \s-1PS\s+1-810),
while increasing the pattern size will often be the right move
on older models
(.e.g, \s-1PS\s+1-800).
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully processed.
.br
.ne 4v
.SH FILES
.MW \*(dQ/postdmd.ps
.br
.MW \*(dQ/forms.ps
.br
.MW \*(dQ/ps.requests
.SH SEE ALSO
.BR dpost (1),
.BR postdaisy (1),
.BR postio (1),
.BR postmd (1),
.BR postprint (1),
.BR postreverse (1),
.BR posttek (1)
0707070014230735711006440057030057030000010015150522627503500003400000005002post.src/postdmd/postdmd.ps %
% Version 3.3.2 prologue for DMD bitmap files.
%
/#copies 1 store
/aspectratio 1 def
/formsperpage 1 def
/landscape false def
/magnification 1 def
/margin 0 def
/orientation 0 def
/rotation 1 def
/screenres 100 def
/xoffset 0 def
/yoffset 0 def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} bind def
/min {2 copy gt {exch} if pop} bind def
/setup {
counttomark 2 idiv {def} repeat pop
landscape {/orientation 90 orientation add def} if
pagedimensions
xcenter ycenter translate
orientation rotation mul rotate
xoffset inch yoffset inch translate
magnification dup aspectratio mul scale
/height height margin sub def
/width width margin sub def
} def
/pagedimensions {
useclippath {
/pagebbox [clippath pathbbox newpath] def
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
userdict /gotpagebbox true put
} def
/pagesetup {/page exch def} bind def
/bitmap {
/scanlines exch def
/scanlength exch def
/flip exch def
/v8format exch def
/bytelength scanlength 8 idiv def
/picstr bytelength string def
/lpicstr bytelength string def
/bytelength bytelength 1 sub def
gsave
% First the overall scaling.
height scanlines div width scanlength div min
72 screenres div min
dup scale
% Followed by the one for the unit square.
scanlength neg 2 div scanlines neg 2 div translate
scanlength scanlines scale
v8format {getv8bitmap} {getbitmap} ifelse
grestore
} bind def
/getbitmap {
scanlength scanlines flip [scanlength 0 0 scanlines neg 0 scanlines] {
0 {
currentfile token pop dup
0 eq {pop pop exit} if
/charcount exch def
picstr 1 index charcount getinterval
/repl exch def
currentfile repl readhexstring pop pop
charcount add
currentfile token pop {
picstr 1 index repl putinterval
charcount add
} repeat
} loop
picstr
} imagemask
} bind def
/getv8bitmap {
scanlength scanlines flip not [scanlength 0 0 scanlines neg 0 scanlines] {
0 {
currentfile token pop dup
0 eq {pop pop exit} if
/charcount exch def
picstr 1 index charcount getinterval
/repl exch def
currentfile repl readhexstring pop pop
charcount add
currentfile token pop {
picstr 1 index repl putinterval
charcount add
} repeat
} loop
0 0 picstr {
exch lpicstr exch get xor
lpicstr exch 2 index exch put
1 add dup
} forall
pop pop lpicstr
} imagemask
} bind def
/done {/lastpage where {pop lastpage} if} def
0707070014230101030407550057030057030000020322170522633075700002100000000000post.src/postgif 0707070014230102111006400057030057030000010225450522633075700003300000005276post.src/postgif/postgif.1 .ds dQ /usr/lib/postscript
.TH POSTGIF 1
.SH NAME
.B postgif
\- PostScript translator for
.SM GIF
files
.SH SYNOPSIS
\*(mBpostgif\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B postgif
translates Graphics Interchange Format (\s-1GIF\s+1)
.I files
into PostScript and writes the results on the
standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP
.OP \-f
Flip the sense of the bits in
.I files
before printing the pixmaps.
.TP
.OP \-g
Generate picture in gray instead of color
.TP
.OP \-m num
Magnify each logical page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which by default is located at the center of
each page.
The default magnification is 1.0.
.TP
.OP \-n num
Print
.I num
logical pages on each piece of paper,
where
.I num
can be any positive integer.
By default
.I num
is set to 1.
.TP
.OP \-o list
Print pages whose numbers are given in the comma-separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed at the
center of the page, with positive
x to the right and positive y up the page.
Positive
.I num
moves everything right.
The default offset is 0 inches.
.TP
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves everything up the page.
The default offset is 0.
.TP
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/postgif.ps .
.PP
Two options allow insertion of arbitrary PostScript
at controlled points in the translation process:
.TP 0.75i
.OP \-C file
Copy
.I file
to the output file;
.I file
must contain legitimate PostScript.
.TP
.OP \-P string
Include
.I string
in the output file;
.I string
must be legitimate PostScript.
.PP
Only one pixmap is printed on each logical page,
and each of the input
.I files
must contain complete descriptions of at least one pixmap.
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully processed.
.br
.ne 1i
.SH FILES
.MW \*(dQ/postgif.ps
.br
.MW \*(dQ/forms.ps
.SH SEE ALSO
.BR dpost (1),
.BR postdaisy (1),
.BR postdmd (1),
.BR postio (1),
.BR postmd (1),
.BR postprint (1),
.BR postreverse (1),
.BR posttek (1),
.BR psencoding (1)
0707070014230077041006400057030057030000010311160522633075700003400000003720post.src/postgif/postgif.mk MAKE=/bin/make
MAKEFILE=postgif.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=postgif.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o
all : postgif
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp postgif $(POSTBIN)/postgif
@chmod 755 $(POSTBIN)/postgif
@chgrp $(GROUP) $(POSTBIN)/postgif
@chown $(OWNER) $(POSTBIN)/postgif
cp postgif.ps $(POSTLIB)/postgif.ps
@chmod 644 $(POSTLIB)/postgif.ps
@chgrp $(GROUP) $(POSTLIB)/postgif.ps
@chown $(OWNER) $(POSTLIB)/postgif.ps
cp postgif.1 $(MAN1DIR)/postgif.1
@chmod 644 $(MAN1DIR)/postgif.1
@chgrp $(GROUP) $(MAN1DIR)/postgif.1
@chown $(OWNER) $(MAN1DIR)/postgif.1
clean :
rm -f *.o
clobber : clean
rm -f postgif
postgif : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postgif $(OFILES) -lm
postgif.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
postgif.1 >XXX.1; \
mv XXX.1 postgif.1
0707070014230101061006440057030057030000010322000522627503600003300000044005post.src/postgif/postgif.c
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#include "comments.h"
#include "gen.h"
#include "path.h"
#include "ext.h"
#define dbprt if (debug) fprintf
char *optnames = "a:c:fglm:n:o:p:x:y:C:E:DG:IL:P:";
char *prologue = POSTGIF; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
int page = 0; /* last page we worked on */
int printed = 0; /* and the number of pages printed */
extern char *malloc();
extern void free();
extern double atof(), pow();
unsigned char ibuf[BUFSIZ];
unsigned char *cmap, *gcmap, *lcmap;
unsigned char *gmap, *ggmap, *lgmap;
unsigned char *pmap;
double gamma;
float cr = 0.3, cg = 0.59, cb = 0.11;
int maplength, gmaplength, lmaplength;
int scrwidth, scrheight;
int gcolormap, lcolormap;
int bitperpixel, background;
int imageleft, imagetop;
int imagewidth, imageheight;
int interlaced, lbitperpixel;
int gray = 0;
int gammaflag = 0;
int negative = 0;
int terminate = 0;
int codesize, clearcode, endcode, curstblsize, pmindex, byteinibuf, bitsleft;
int prefix[4096], suffix[4096], cstbl[4096];
int bburx = -32767, bbury = -32767;
FILE *fp_in = NULL;
FILE *fp_out = stdout;
char *
allocate(size)
int size;
{
char *p;
if ((p = malloc(size)) == NULL) error(FATAL, "not enough memory");
return(p);
}
void
puthex(c, fp)
unsigned char c;
FILE *fp;
{
static char hextbl[16] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
};
putc(hextbl[(c >> 4) & 017], fp);
putc(hextbl[c & 017], fp);
}
void
setcolormap(bp)
int bp;
{
int i, entries = 1, scale = 1;
unsigned char *p, *q;
for (i = 0; i < bp; i++) entries *= 2;
for (i = 0; i < 8 - bp; i++) scale *= 2;
gcmap = (unsigned char *) allocate(entries*3);
ggmap = (unsigned char *) allocate(entries);
gmaplength = entries;
for (i = 0, p = gcmap, q = ggmap; i < 256; i += scale, p += 3, q++) {
if (negative) {
*p = 255 - i; p[1] = *p; p[2] = *p;
*q = *p;
}
else {
*p = i; p[1] = i; p[2] = i;
*q = i;
}
}
if (gammaflag)
for (i = 0, p = gcmap; i < 256; i += scale, p += 3) {
*p = (unsigned char) (pow((double) *p/256.0, gamma)*256);
p[1] = *p; p[2] = *p;
}
dbprt(stderr,"default color map:\n");
for (i = 0; i < entries*3; i += 3)
dbprt(stderr, "%d, %d, %d\n", gcmap[i], gcmap[i+1], gcmap[i+2]);
}
void
readgcolormap(bp)
int bp;
{
int i, entries = 1;
unsigned char *p, *q;
for (i = 0; i < bp; i++) entries *= 2;
gcmap = (unsigned char *) allocate(entries*3);
ggmap = (unsigned char *) allocate(entries);
gmaplength = entries;
fread(gcmap, sizeof(*gcmap), entries*3, fp_in);
if (negative)
for (i = 0, p = gcmap; i < entries*3; i++, p++) *p = 255 - *p;
for (i = 0, p = gcmap, q = ggmap; i < entries; i++, p += 3, q++)
*q = cr*(int)p[0] + cg*(int)p[1] + cb*(int)p[2] + 0.5;
if (gammaflag)
for (i = 0, p = gcmap; i < entries*3; i++, p++)
*p = (unsigned char) (pow((double) *p/256.0, gamma)*256);
dbprt(stderr,"global color map:\n");
for (i = 0; i < entries*3; i += 3)
dbprt(stderr, "%d, %d, %d\n", gcmap[i], gcmap[i+1], gcmap[i+2]);
}
void
readlcolormap(bp)
int bp;
{
int i, entries = 1;
unsigned char *p, *q;
for (i = 0; i < bp; i++) entries *= 2;
lcmap = (unsigned char *) allocate(entries*3);
lgmap = (unsigned char *) allocate(entries);
lmaplength = entries;
fread(lcmap, sizeof(*lcmap), entries*3, fp_in);
if (negative)
for (i = 0, p = lcmap; i < entries*3; i++, p++) *p = 255 - *p;
for (i = 0, p = lcmap, q = lgmap; i < entries; i++, p += 3, q++)
*q = cr*(int)p[0] + cg*(int)p[1] + cb*(int)p[2] + 0.5;
if (gammaflag)
for (i = 0, p = lcmap; i < entries*3; i++, p++)
*p = (unsigned char) (pow((double) *p/256.0, gamma)*256);
dbprt(stderr,"local color map:\n");
for (i = 0; i < entries*3; i += 3)
dbprt(stderr, "%d, %d, %d\n", lcmap[i], lcmap[i+1], lcmap[i+2]);
}
void
initstbl()
{
int i, entries = 1, *p, *s;
for (i = 0; i < codesize; i++) entries *= 2;
clearcode = entries;
endcode = clearcode + 1;
for (i = 0, p = prefix, s = suffix; i <= endcode; i++, p++, s++) {
*p = endcode;
*s = i;
}
curstblsize = endcode + 1;
pmindex = 0;
byteinibuf = 0;
bitsleft = 0;
}
int
nextbyte()
{
static ibufindex;
if (byteinibuf) {
byteinibuf--;
ibufindex++;
}
else {
fread(ibuf, sizeof(*ibuf), 1, fp_in);
byteinibuf = ibuf[0];
dbprt(stderr, "byte count: %d\n", byteinibuf);
if (byteinibuf) fread(ibuf, sizeof(*ibuf), byteinibuf, fp_in);
else error(FATAL, "encounter zero byte count block before end code");
ibufindex = 0;
byteinibuf--;
ibufindex++;
}
return(ibuf[ibufindex-1]);
}
int masktbl[25] = {
0, 01, 03, 07, 017, 037, 077, 0177, 0377, 0777, 01777, 03777, 07777,
017777, 037777, 077777, 0177777, 0377777, 0777777, 01777777, 03777777,
07777777, 017777777, 037777777, 077777777
};
int
getcode()
{
int cs, c;
static int oldc;
if (curstblsize < 4096) cs = cstbl[curstblsize];
else cs = 12;
while (bitsleft < cs) {
oldc = (oldc & masktbl[bitsleft]) | ((nextbyte() & 0377) << bitsleft);
bitsleft += 8;
}
c = oldc & masktbl[cs];
oldc = oldc >> cs;
bitsleft -= cs;
/* dbprt(stderr, "code: %d %d %d\n", curstblsize, cs, c); */
return(c);
}
void
putcode(c)
int c;
{
if (prefix[c] != endcode) {
putcode(prefix[c]);
pmap[pmindex] = suffix[c];
pmindex++;
}
else {
pmap[pmindex] = suffix[c];
pmindex++;
}
}
int
firstof(c)
int c;
{
while (prefix[c] != endcode) c = prefix[c];
return(suffix[c]);
}
void
writeimage()
{
int i, j, k;
dbprt(stderr, "pmindex: %d\n", pmindex);
fputs("save\n", fp_out);
fprintf(fp_out, "/codestr %d string def\n", imagewidth);
if (!gray) {
fprintf(fp_out, "/colortbl currentfile %d string readhexstring\n",
maplength*3);
for (i = 0; i < maplength; i++) puthex(cmap[i], fp_out);
fputs("\n", fp_out);
for (i = maplength ; i < maplength*2; i++) puthex(cmap[i], fp_out);
fputs("\n", fp_out);
for (i = maplength*2 ; i < maplength*3; i++) puthex(cmap[i], fp_out);
fputs("\npop def\n", fp_out);
fprintf(fp_out, "/graytbl currentfile %d string readhexstring\n",
maplength);
for (i = 0; i < maplength; i++) puthex(gmap[i], fp_out);
fputs("\npop def\n", fp_out);
}
fprintf(fp_out, "%s %d %d %d %d gifimage\n",
gray ? "true" : "false", imagewidth, imageheight,
scrwidth - imageleft - imagewidth, scrheight - imagetop - imageheight);
if (gray) {
if (interlaced) {
int *iltbl;
iltbl = (int *) allocate(imageheight*sizeof(int));
j = 0;
for (i = 0; i < imageheight; i += 8) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass1: %d\n", j);
for (i = 4; i < imageheight; i += 8) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass2: %d\n", j);
for (i = 2; i < imageheight; i += 4) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass3: %d\n", j);
for (i = 1; i < imageheight; i += 2) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass4: %d\n", j);
for (i = 0; i < imageheight; i++) {
k = iltbl[i];
for (j = 0; j < imagewidth; j++, k++)
puthex(gmap[pmap[k]], fp_out);
fputs("\n", fp_out);
}
}
else {
for (i = 0, k = 0; i < imageheight; i++) {
for (j = 0; j < imagewidth; j++, k++)
puthex(gmap[pmap[k]], fp_out);
fputs("\n", fp_out);
}
}
}
else {
if (interlaced) {
int *iltbl;
iltbl = (int *) allocate(imageheight*sizeof(int));
j = 0;
for (i = 0; i < imageheight; i += 8) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass1: %d\n", j);
for (i = 4; i < imageheight; i += 8) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass2: %d\n", j);
for (i = 2; i < imageheight; i += 4) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass3: %d\n", j);
for (i = 1; i < imageheight; i += 2) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass4: %d\n", j);
for (i = 0; i < imageheight; i++) {
k = iltbl[i];
for (j = 0; j < imagewidth; j++, k++) puthex(pmap[k], fp_out);
fputs("\n", fp_out);
}
}
else {
for (i = 0, k = 0; i < imageheight; i++) {
for (j = 0; j < imagewidth; j++, k++) puthex(pmap[k], fp_out);
fputs("\n", fp_out);
}
}
}
fputs("restore\n", fp_out);
}
void
readimage()
{
int bytecount, zerobytecount = 0;
int code, oldcode;
fread(ibuf, sizeof(*ibuf), 9, fp_in);
imageleft = ibuf[0] + 256*ibuf[1];
imagetop = ibuf[2] + 256*ibuf[3];
imagewidth = ibuf[4] + 256*ibuf[5];
imageheight = ibuf[6] + 256*ibuf[7];
lcolormap = ibuf[8] & 0200;
interlaced = ibuf[8] & 0100;
lbitperpixel = (ibuf[8] & 07) + 1;
dbprt(stderr, "imageleft: %d\n", imageleft);
dbprt(stderr, "imagetop: %d\n", imagetop);
dbprt(stderr, "imagewidth: %d\n", imagewidth);
dbprt(stderr, "imgaeheight: %d\n", imageheight);
dbprt(stderr, "lcolormap: %d\n", lcolormap ? 1 : 0);
dbprt(stderr, "interlaced: %d\n", interlaced ? 1 : 0);
dbprt(stderr, "lbitperpixel: %d\n", lbitperpixel);
if (lcolormap) {
readlcolormap(lbitperpixel);
cmap = lcmap;
gmap = lgmap;
maplength = lmaplength;
}
dbprt(stderr, "start reading raster data\n");
fread(ibuf, sizeof(*ibuf), 1, fp_in);
codesize = ibuf[0];
dbprt(stderr, "codesize: %d\n", codesize);
pmap = (unsigned char *) allocate(imagewidth*imageheight);
initstbl();
while ((code = getcode()) != endcode) {
if (code == clearcode) {
curstblsize = endcode + 1;
code = getcode();
putcode(code);
oldcode = code;
}
else if (code < curstblsize) {
putcode(code);
prefix[curstblsize] = oldcode;
suffix[curstblsize] = firstof(code);
curstblsize++;
oldcode = code;
}
else {
if (code != curstblsize) error(FATAL, "code out of order");
prefix[curstblsize] = oldcode;
suffix[curstblsize] = firstof(oldcode);
curstblsize++;
putcode(curstblsize-1);
oldcode = code;
}
}
dbprt(stderr, "finish reading raster data\n");
/* read the rest of the raster data */
do {
fread(ibuf, sizeof(*ibuf), 1, fp_in);
bytecount = ibuf[0];
dbprt(stderr, "byte count: %d\n", bytecount);
if (bytecount) fread(ibuf, sizeof(*ibuf), bytecount, fp_in);
else zerobytecount = 1;
} while (!zerobytecount);
writeimage();
if (lcolormap) {
cmap = gcmap;
gmap = ggmap;
maplength = gmaplength;
free(lcmap);
free(lgmap);
}
}
void
readextensionblock()
{
int functioncode, bytecount, zerobytecount = 0;
fread(ibuf, sizeof(*ibuf), 1, fp_in);
functioncode = ibuf[0];
dbprt(stderr, "function code: %d\n", functioncode);
do {
fread(ibuf, sizeof(*ibuf), 1, fp_in);
bytecount = ibuf[0];
dbprt(stderr, "byte count: %d\n", bytecount);
if (bytecount) fread(ibuf, sizeof(*ibuf), bytecount, fp_in);
else zerobytecount = 1;
} while (!zerobytecount);
}
void
writebgscr()
{
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fputs("/saveobj save def\n", fp_out);
fprintf(fp_out, "%s: %d %d %d %d\n",
"%%PageBoundingBox", 0, 0, scrwidth, scrheight);
if (scrwidth > bburx) bburx = scrwidth;
if (scrheight > bbury) bbury = scrheight;
fprintf(fp_out, "%d %d gifscreen\n", scrwidth, scrheight);
}
void
writeendscr()
{
if ( fp_out == stdout ) printed++;
fputs("showpage\n", fp_out);
fputs("saveobj restore\n", fp_out);
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
}
void
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
}
void
readgif()
{
int i, j, k;
for (i = 0, j = 1, k = 0; i < 13; i++) {
for (; k < j; k++) cstbl[k] = i;
j *= 2;
}
fread(ibuf, sizeof(*ibuf), 6, fp_in);
dbprt(stderr, "%.6s\n", ibuf);
if (strncmp((char *)ibuf, "GIF87a", 6) != 0) {
fread(ibuf, sizeof(*ibuf), 122, fp_in);
fread(ibuf, sizeof(*ibuf), 6, fp_in);
dbprt(stderr, "%.6s\n", ibuf);
if (strncmp((char *)ibuf, "GIF87a", 6) != 0)
error(FATAL, "wrong GIF signature");
}
fread(ibuf, sizeof(*ibuf), 7, fp_in);
scrwidth = ibuf[0] + 256*ibuf[1];
scrheight = ibuf[2] + 256*ibuf[3];
gcolormap = ibuf[4] & 0200;
bitperpixel = (ibuf[4] & 07) + 1;
background = ibuf[5];
dbprt(stderr, "scrwidth: %d\n", scrwidth);
dbprt(stderr, "scrheight: %d\n", scrheight);
dbprt(stderr, "gcolormap: %d\n", gcolormap ? 1 : 0);
dbprt(stderr, "bitperpixel: %d\n", bitperpixel);
dbprt(stderr, "background: %d\n", background);
if (ibuf[6] != 0) error(FATAL, "wrong screen descriptor");
if (gcolormap) readgcolormap(bitperpixel);
else setcolormap(bitperpixel);
redirect(++page);
writebgscr();
cmap = gcmap;
gmap = ggmap;
maplength = gmaplength;
do {
fread(ibuf, sizeof(*ibuf), 1, fp_in);
if (ibuf[0] == ',') readimage();
else if (ibuf[0] == ';') terminate = 1;
else if (ibuf[0] == '!') readextensionblock();
else
error(FATAL, "wrong image separator character or wrong GIF terminator");
} while (!terminate);
writeendscr();
free(gcmap);
free(ggmap);
}
void
init_signals()
{
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
}
else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
}
signal(SIGTERM, interrupt);
}
void
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", BOUNDINGBOX, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
}
void
options()
{
int ch; /* return value from getopt() */
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'f':
negative = TRUE;
break;
case 'g':
gray = TRUE;
break;
case 'l':
fprintf(stdout, "/alignment true def\n");
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'x': /* shift things horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding - unnecessary */
fontencoding = optarg;
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'G':
gammaflag = ON;
gamma = atof(optarg);
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
}
}
argc -= optind; /* get ready for non-option args */
argv += optind;
}
void
setup()
{
/*setencoding(fontencoding);*/
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) { /* followed by stuff for multiple pages
*/
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
}
void
arguments()
{
if ( argc < 1 ) {
fp_in = stdin;
readgif();
}
else { /* at least one argument is left */
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
readgif();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
}
}
}
void
done()
{
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s 0 0 %d %d\n", BOUNDINGBOX, bburx, bbury);
fprintf(stdout, "%s %d\n", PAGES, printed);
}
main(agc, agv)
int agc;
char *agv[];
{
argc = agc;
argv = agv;
prog_name = argv[0];
init_signals();
header();
options();
setup();
arguments();
done();
exit(0);
}
0707070014230101071006440057030057030000010322300522627503600003400000043614post.src/postgif/Opostgif.c
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#include "comments.h"
#include "gen.h"
#include "path.h"
#include "ext.h"
#define dbprt if (debug) fprintf
char *optnames = "a:c:fglm:n:o:p:x:y:C:DG:IL:P:";
char *prologue = POSTGIF; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
int page = 0; /* last page we worked on */
int printed = 0; /* and the number of pages printed */
extern char *malloc();
extern void free();
extern double atof(), pow();
unsigned char ibuf[BUFSIZ];
unsigned char *cmap, *gcmap, *lcmap;
unsigned char *gmap, *ggmap, *lgmap;
unsigned char *pmap;
double gamma;
float cr = 0.3, cg = 0.59, cb = 0.11;
int maplength, gmaplength, lmaplength;
int scrwidth, scrheight;
int gcolormap, lcolormap;
int bitperpixel, background;
int imageleft, imagetop;
int imagewidth, imageheight;
int interlaced, lbitperpixel;
int gray = 0;
int gammaflag = 0;
int negative = 0;
int terminate = 0;
int codesize, clearcode, endcode, curstblsize, pmindex, byteinibuf, bitsleft;
int prefix[4096], suffix[4096], cstbl[4096];
int bburx = -32767, bbury = -32767;
FILE *fp_in = NULL;
FILE *fp_out = stdout;
char *
allocate(size)
int size;
{
char *p;
if ((p = malloc(size)) == NULL) error(FATAL, "not enough memory");
return(p);
}
void
puthex(c, fp)
unsigned char c;
FILE *fp;
{
static char hextbl[16] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
};
putc(hextbl[(c >> 4) & 017], fp);
putc(hextbl[c & 017], fp);
}
void
setcolormap(bp)
int bp;
{
int i, entries = 1, scale = 1;
unsigned char *p, *q;
for (i = 0; i < bp; i++) entries *= 2;
for (i = 0; i < 8 - bp; i++) scale *= 2;
gcmap = (unsigned char *) allocate(entries*3);
ggmap = (unsigned char *) allocate(entries);
gmaplength = entries;
for (i = 0, p = gcmap, q = ggmap; i < 256; i += scale, p += 3, q++) {
if (negative) {
*p = 255 - i; p[1] = *p; p[2] = *p;
*q = *p;
}
else {
*p = i; p[1] = i; p[2] = i;
*q = i;
}
}
if (gammaflag)
for (i = 0, p = gcmap; i < 256; i += scale, p += 3) {
*p = (unsigned char) (pow((double) *p/256.0, gamma)*256);
p[1] = *p; p[2] = *p;
}
dbprt(stderr,"default color map:\n");
for (i = 0; i < entries*3; i += 3)
dbprt(stderr, "%d, %d, %d\n", gcmap[i], gcmap[i+1], gcmap[i+2]);
}
void
readgcolormap(bp)
int bp;
{
int i, entries = 1;
unsigned char *p, *q;
for (i = 0; i < bp; i++) entries *= 2;
gcmap = (unsigned char *) allocate(entries*3);
ggmap = (unsigned char *) allocate(entries);
gmaplength = entries;
fread(gcmap, sizeof(*gcmap), entries*3, fp_in);
if (negative)
for (i = 0, p = gcmap; i < entries*3; i++, p++) *p = 255 - *p;
for (i = 0, p = gcmap, q = ggmap; i < entries; i++, p += 3, q++)
*q = cr*p[0] + cg*p[1] + cb*p[2] + 0.5;
if (gammaflag)
for (i = 0, p = gcmap; i < entries*3; i++, p++)
*p = (unsigned char) (pow((double) *p/256.0, gamma)*256);
dbprt(stderr,"global color map:\n");
for (i = 0; i < entries*3; i += 3)
dbprt(stderr, "%d, %d, %d\n", gcmap[i], gcmap[i+1], gcmap[i+2]);
}
void
readlcolormap(bp)
int bp;
{
int i, entries = 1;
unsigned char *p, *q;
for (i = 0; i < bp; i++) entries *= 2;
lcmap = (unsigned char *) allocate(entries*3);
lgmap = (unsigned char *) allocate(entries);
lmaplength = entries;
fread(lcmap, sizeof(*lcmap), entries*3, fp_in);
if (negative)
for (i = 0, p = lcmap; i < entries*3; i++, p++) *p = 255 - *p;
for (i = 0, p = lcmap, q = lgmap; i < entries; i++, p += 3, q++)
*q = cr*p[0] + cg*p[1] + cb*p[2] + 0.5;
if (gammaflag)
for (i = 0, p = lcmap; i < entries*3; i++, p++)
*p = (unsigned char) (pow((double) *p/256.0, gamma)*256);
dbprt(stderr,"local color map:\n");
for (i = 0; i < entries*3; i += 3)
dbprt(stderr, "%d, %d, %d\n", lcmap[i], lcmap[i+1], lcmap[i+2]);
}
void
initstbl()
{
int i, entries = 1, *p, *s;
for (i = 0; i < codesize; i++) entries *= 2;
clearcode = entries;
endcode = clearcode + 1;
for (i = 0, p = prefix, s = suffix; i <= endcode; i++, p++, s++) {
*p = endcode;
*s = i;
}
curstblsize = endcode + 1;
pmindex = 0;
byteinibuf = 0;
bitsleft = 0;
}
int
nextbyte()
{
static ibufindex;
if (byteinibuf) {
byteinibuf--;
ibufindex++;
}
else {
fread(ibuf, sizeof(*ibuf), 1, fp_in);
byteinibuf = ibuf[0];
dbprt(stderr, "byte count: %d\n", byteinibuf);
if (byteinibuf) fread(ibuf, sizeof(*ibuf), byteinibuf, fp_in);
else error(FATAL, "encounter zero byte count block before end code");
ibufindex = 0;
byteinibuf--;
ibufindex++;
}
return(ibuf[ibufindex-1]);
}
int masktbl[25] = {
0, 01, 03, 07, 017, 037, 077, 0177, 0377, 0777, 01777, 03777, 07777,
017777, 037777, 077777, 0177777, 0377777, 0777777, 01777777, 03777777,
07777777, 017777777, 037777777, 077777777
};
int
getcode()
{
int cs, c;
static int oldc;
if (curstblsize < 4096) cs = cstbl[curstblsize];
else cs = 12;
while (bitsleft < cs) {
oldc = (oldc & masktbl[bitsleft]) | ((nextbyte() & 0377) << bitsleft);
bitsleft += 8;
}
c = oldc & masktbl[cs];
oldc = oldc >> cs;
bitsleft -= cs;
/* dbprt(stderr, "code: %d %d %d\n", curstblsize, cs, c); */
return(c);
}
void
putcode(c)
int c;
{
if (prefix[c] != endcode) {
putcode(prefix[c]);
pmap[pmindex] = suffix[c];
pmindex++;
}
else {
pmap[pmindex] = suffix[c];
pmindex++;
}
}
int
firstof(c)
int c;
{
while (prefix[c] != endcode) c = prefix[c];
return(suffix[c]);
}
void
writeimage()
{
int i, j, k;
dbprt(stderr, "pmindex: %d\n", pmindex);
fputs("save\n", fp_out);
fprintf(fp_out, "/codestr %d string def\n", imagewidth);
if (!gray) {
fprintf(fp_out, "/colortbl currentfile %d string readhexstring\n",
maplength*3);
for (i = 0; i < maplength; i++) puthex(cmap[i], fp_out);
fputs("\n", fp_out);
for (i = maplength ; i < maplength*2; i++) puthex(cmap[i], fp_out);
fputs("\n", fp_out);
for (i = maplength*2 ; i < maplength*3; i++) puthex(cmap[i], fp_out);
fputs("\npop def\n", fp_out);
fprintf(fp_out, "/graytbl currentfile %d string readhexstring\n",
maplength);
for (i = 0; i < maplength; i++) puthex(gmap[i], fp_out);
fputs("\npop def\n", fp_out);
}
fprintf(fp_out, "%s %d %d %d %d gifimage\n",
gray ? "true" : "false", imagewidth, imageheight,
scrwidth - imageleft - imagewidth, scrheight - imagetop - imageheight);
if (gray) {
if (interlaced) {
int *iltbl;
iltbl = (int *) allocate(imageheight*sizeof(int));
j = 0;
for (i = 0; i < imageheight; i += 8) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass1: %d\n", j);
for (i = 4; i < imageheight; i += 8) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass2: %d\n", j);
for (i = 2; i < imageheight; i += 4) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass3: %d\n", j);
for (i = 1; i < imageheight; i += 2) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass4: %d\n", j);
for (i = 0; i < imageheight; i++) {
k = iltbl[i];
for (j = 0; j < imagewidth; j++, k++)
puthex(gmap[pmap[k]], fp_out);
fputs("\n", fp_out);
}
}
else {
for (i = 0, k = 0; i < imageheight; i++) {
for (j = 0; j < imagewidth; j++, k++)
puthex(gmap[pmap[k]], fp_out);
fputs("\n", fp_out);
}
}
}
else {
if (interlaced) {
int *iltbl;
iltbl = (int *) allocate(imageheight*sizeof(int));
j = 0;
for (i = 0; i < imageheight; i += 8) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass1: %d\n", j);
for (i = 4; i < imageheight; i += 8) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass2: %d\n", j);
for (i = 2; i < imageheight; i += 4) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass3: %d\n", j);
for (i = 1; i < imageheight; i += 2) {
iltbl[i] = j;
j += imagewidth;
}
dbprt(stderr, "pass4: %d\n", j);
for (i = 0; i < imageheight; i++) {
k = iltbl[i];
for (j = 0; j < imagewidth; j++, k++) puthex(pmap[k], fp_out);
fputs("\n", fp_out);
}
}
else {
for (i = 0, k = 0; i < imageheight; i++) {
for (j = 0; j < imagewidth; j++, k++) puthex(pmap[k], fp_out);
fputs("\n", fp_out);
}
}
}
fputs("restore\n", fp_out);
}
void
readimage()
{
int bytecount, zerobytecount = 0;
int code, oldcode;
fread(ibuf, sizeof(*ibuf), 9, fp_in);
imageleft = ibuf[0] + 256*ibuf[1];
imagetop = ibuf[2] + 256*ibuf[3];
imagewidth = ibuf[4] + 256*ibuf[5];
imageheight = ibuf[6] + 256*ibuf[7];
lcolormap = ibuf[8] & 0200;
interlaced = ibuf[8] & 0100;
lbitperpixel = (ibuf[8] & 07) + 1;
dbprt(stderr, "imageleft: %d\n", imageleft);
dbprt(stderr, "imagetop: %d\n", imagetop);
dbprt(stderr, "imagewidth: %d\n", imagewidth);
dbprt(stderr, "imgaeheight: %d\n", imageheight);
dbprt(stderr, "lcolormap: %d\n", lcolormap ? 1 : 0);
dbprt(stderr, "interlaced: %d\n", interlaced ? 1 : 0);
dbprt(stderr, "lbitperpixel: %d\n", lbitperpixel);
if (lcolormap) {
readlcolormap(lbitperpixel);
cmap = lcmap;
gmap = lgmap;
maplength = lmaplength;
}
dbprt(stderr, "start reading raster data\n");
fread(ibuf, sizeof(*ibuf), 1, fp_in);
codesize = ibuf[0];
dbprt(stderr, "codesize: %d\n", codesize);
pmap = (unsigned char *) allocate(imagewidth*imageheight);
initstbl();
while ((code = getcode()) != endcode) {
if (code == clearcode) {
curstblsize = endcode + 1;
code = getcode();
putcode(code);
oldcode = code;
}
else if (code < curstblsize) {
putcode(code);
prefix[curstblsize] = oldcode;
suffix[curstblsize] = firstof(code);
curstblsize++;
oldcode = code;
}
else {
if (code != curstblsize) error(FATAL, "code out of order");
prefix[curstblsize] = oldcode;
suffix[curstblsize] = firstof(oldcode);
curstblsize++;
putcode(curstblsize-1);
oldcode = code;
}
}
dbprt(stderr, "finish reading raster data\n");
/* read the rest of the raster data */
do {
fread(ibuf, sizeof(*ibuf), 1, fp_in);
bytecount = ibuf[0];
dbprt(stderr, "byte count: %d\n", bytecount);
if (bytecount) fread(ibuf, sizeof(*ibuf), bytecount, fp_in);
else zerobytecount = 1;
} while (!zerobytecount);
writeimage();
if (lcolormap) {
cmap = gcmap;
gmap = ggmap;
maplength = gmaplength;
free(lcmap);
free(lgmap);
}
}
void
readextensionblock()
{
int functioncode, bytecount, zerobytecount = 0;
fread(ibuf, sizeof(*ibuf), 1, fp_in);
functioncode = ibuf[0];
dbprt(stderr, "function code: %d\n", functioncode);
do {
fread(ibuf, sizeof(*ibuf), 1, fp_in);
bytecount = ibuf[0];
dbprt(stderr, "byte count: %d\n", bytecount);
if (bytecount) fread(ibuf, sizeof(*ibuf), bytecount, fp_in);
else zerobytecount = 1;
} while (!zerobytecount);
}
void
writebgscr()
{
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fputs("/saveobj save def\n", fp_out);
fprintf(fp_out, "%s: %d %d %d %d\n",
"%%PageBoundingBox", 0, 0, scrwidth, scrheight);
if (scrwidth > bburx) bburx = scrwidth;
if (scrheight > bbury) bbury = scrheight;
fprintf(fp_out, "%d %d gifscreen\n", scrwidth, scrheight);
}
void
writeendscr()
{
if ( fp_out == stdout ) printed++;
fputs("showpage\n", fp_out);
fputs("saveobj restore\n", fp_out);
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
}
void
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
}
void
readgif()
{
int i, j, k;
for (i = 0, j = 1, k = 0; i < 13; i++) {
for (; k < j; k++) cstbl[k] = i;
j *= 2;
}
fread(ibuf, sizeof(*ibuf), 6, fp_in);
dbprt(stderr, "%.6s\n", ibuf);
if (strncmp(ibuf, "GIF87a", 6) != 0) {
fread(ibuf, sizeof(*ibuf), 122, fp_in);
fread(ibuf, sizeof(*ibuf), 6, fp_in);
dbprt(stderr, "%.6s\n", ibuf);
if (strncmp(ibuf, "GIF87a", 6) != 0)
error(FATAL, "wrong GIF signature");
}
fread(ibuf, sizeof(*ibuf), 7, fp_in);
scrwidth = ibuf[0] + 256*ibuf[1];
scrheight = ibuf[2] + 256*ibuf[3];
gcolormap = ibuf[4] & 0200;
bitperpixel = (ibuf[4] & 07) + 1;
background = ibuf[5];
dbprt(stderr, "scrwidth: %d\n", scrwidth);
dbprt(stderr, "scrheight: %d\n", scrheight);
dbprt(stderr, "gcolormap: %d\n", gcolormap ? 1 : 0);
dbprt(stderr, "bitperpixel: %d\n", bitperpixel);
dbprt(stderr, "background: %d\n", background);
if (ibuf[6] != 0) error(FATAL, "wrong screen descriptor");
if (gcolormap) readgcolormap(bitperpixel);
else setcolormap(bitperpixel);
redirect(++page);
writebgscr();
cmap = gcmap;
gmap = ggmap;
maplength = gmaplength;
do {
fread(ibuf, sizeof(*ibuf), 1, fp_in);
if (ibuf[0] == ',') readimage();
else if (ibuf[0] == ';') terminate = 1;
else if (ibuf[0] == '!') readextensionblock();
else
error(FATAL, "wrong image separator character or wrong GIF terminator");
} while (!terminate);
writeendscr();
free(gcmap);
free(ggmap);
}
void
init_signals()
{
int interrupt(); /* signal handler */
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
}
else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
}
signal(SIGTERM, interrupt);
}
void
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", BOUNDINGBOX, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
}
void
options()
{
int ch; /* return value from getopt() */
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'f':
negative = TRUE;
break;
case 'g':
gray = TRUE;
break;
case 'l':
fprintf(stdout, "/alignment true def\n");
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'x': /* shift things horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'G':
gammaflag = ON;
gamma = atof(optarg);
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
}
}
argc -= optind; /* get ready for non-option args */
argv += optind;
}
void
setup()
{
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) { /* followed by stuff for multiple pages
*/
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
}
void
arguments()
{
if ( argc < 1 ) {
fp_in = stdin;
readgif();
}
else { /* at least one argument is left */
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
readgif();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
}
}
}
void
done()
{
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s 0 0 %d %d\n", BOUNDINGBOX, bburx, bbury);
fprintf(stdout, "%s %d\n", PAGES, printed);
}
main(agc, agv)
int agc;
char *agv[];
{
argc = agc;
argv = agv;
prog_name = argv[0];
init_signals();
header();
options();
setup();
arguments();
done();
exit(0);
}
0707070014230101101006440057030057030000010322450522627503600003400000004347post.src/postgif/postgif.ps %
% Version 3.3.2 prologue for GIF pixmap files.
%
/#copies 1 store
/aspectratio 1 def
/formsperpage 1 def
/landscape false def
/magnification 1 def
/margin 0 def
/orientation 0 def
/rotation 1 def
/xoffset 0 def
/yoffset 0 def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} bind def
/min {2 copy gt {exch} if pop} bind def
/setup {
counttomark 2 idiv {def} repeat pop
landscape {/orientation 90 orientation add def} if
pagedimensions
xcenter ycenter translate
orientation rotation mul rotate
xoffset inch yoffset inch translate
magnification dup aspectratio mul scale
/height height margin sub def
/width width margin sub def
} def
/pagedimensions {
useclippath {
/pagebbox [clippath pathbbox newpath] def
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
userdict /gotpagebbox true put
} def
/pagesetup {/page exch def} bind def
/done {/lastpage where {pop lastpage} if} def
/alignment false def
/gifscreen { % scrwidth scrheight $
2 copy
alignment {
100 dup dtransform exch 100 exch div abs exch 100 exch div abs
2 copy scale
/height exch height exch div def
/width exch width exch div def
} if
height exch div exch width exch div
2 copy lt { pop } { exch pop } ifelse
alignment { cvi } if
dup scale
neg 2 div exch neg 2 div exch translate
} def
/gifimage { % gray imagewidth imageheight xorigin yorigin $
translate
2 copy scale
/imageheight exch def
/imagewidth exch def
/gray exch def
imagewidth imageheight 8 [imagewidth 0 0 imageheight neg 0 imageheight]
gray {
{ currentfile codestr readhexstring pop } image
} {
/colorimage where {
pop
/picstr imagewidth 3 mul string def
{ currentfile codestr readhexstring pop pop
0 1 imagewidth 1 sub {
picstr exch dup 3 mul exch colortbl exch codestr exch get
3 mul 3 getinterval putinterval
} for picstr
} false 3 colorimage
} {
{ currentfile codestr readhexstring pop pop
0 1 imagewidth 1 sub {
codestr exch dup graytbl exch codestr exch get get put
} for codestr
} image
} ifelse
} ifelse
} def
0707070014231405030407550057030057030000021222660522633076100002000000000000post.src/postio 0707070014231405041006440057030057030000011222670522627503600002700000001622post.src/postio/README Serial communications program for PostScript printers.
Runs as a single read/write process (by default). Use the -R2 option
or set splitme to TRUE (file postio.c) to get separate read and write
processes. Although not the default, we recommend using separate read
and write processes.
Sends occasional status queries (control Ts) while transmitting files.
Use the -q option or set quiet (file postio.c) to TRUE to disable status
queries.
Datakit connections are supported on System V and Ninth Edition systems.
The syntax (for connecting to a Datakit destination) varies. Check the
SYSV and V9 versions of setupline() in file ifdef.c.
Set DKHOST and DKSTREAMS to TRUE in postio.mk for streams based DKHOST
support. When DKSTREAMS is TRUE postio.mk uses "dknetty" as the stream
module. Settings like DKSTREAMS=dkty select a different stream module
and may be required for full Datakit support on some systems.
0707070014231405051006440057030057030000011223000522627503600003000000056437post.src/postio/ifdef.c /*
*
* Conditionally compiled routines for setting up and reading the line. Things
* were getting out of hand with all the ifdefs, and even though this defeats
* part of the purpose of conditional complilation directives, I think it's easier
* to follow this way. Thanks to Alan Buckwalter for the System V DKHOST code.
*
* postio now can be run as separate read and write processes, but requires that
* you write a procedure called resetline() and perhaps modify readline() some.
* I've already tested the code on System V and it seems to work. Ninth Edition
* and BSD code may be missing.
*
* By request I've changed the way some of the setupline() procedures (eg. in the
* System V implementation) handle things when no line has been given. If line is
* NULL the new setupline() procedures try to continue, assuming whoever called
* postio connected stdout to the printer. Things will only work if we can read
* and write stdout!
*
*/
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/types.h>
#include <errno.h>
#include "ifdef.h" /* conditional header file inclusion */
#include "gen.h" /* general purpose definitions */
FILE *fp_ttyi, *fp_ttyo;
char *ptr = mesg;
extern int window_size;
/*****************************************************************************/
#ifdef SYSV
setupline()
{
struct termio termio;
/*
*
* Line initialization for SYSV. For now if no line is given (ie. line == NULL )
* we continue on as before using stdout as ttyi and ttyo. Doesn't work when we're
* running in interactive mode or forcing stuff that comes back from the printer
* to stdout. Both cases are now caught by a test that's been added to routine
* initialize(). The change is primarily for the version of lp that's available
* with SVR3.2.
*
*/
#ifdef DKHOST
if ( line != NULL && *line != '/' ) {
if ( strncmp(line, "DK:", 3) == 0 )
line += 3;
dkhost_connect();
#ifdef DKSTREAMS
if ( ioctl(ttyi, I_PUSH, DKSTREAMS) == -1 )
error(FATAL, "ioctl error - %s", DKSTREAMS);
if ( ioctl(ttyi, I_PUSH, "ldterm") == -1 )
error(FATAL, "ioctl error - ldterm");
#endif
} else
#endif
if ( line == NULL )
ttyi = fileno(stdout);
else if ( (ttyi = open(line, O_RDWR)) == -1 )
error(FATAL, "can't open %s", line);
if ( (ttyo = dup(ttyi)) == -1 )
error(FATAL, "can't dup file descriptor for %s", line);
if ( stopbits == 1 )
stopbits = 0;
else stopbits = CSTOPB;
if ( fcntl(ttyi, F_SETFL, O_NDELAY) == -1 )
error(FATAL, "fcntl error - F_SETFL");
if ( ioctl(ttyi, TCGETA, &termio) == -1 )
error(FATAL, "ioctl error - TCGETA");
termio.c_iflag = IXON | IGNCR;
termio.c_oflag = 0;
termio.c_cflag = HUPCL | CREAD | CS8 | stopbits | baudrate;
termio.c_lflag = 0;
termio.c_cc[VMIN] = termio.c_cc[VTIME] = 0;
if ( ioctl(ttyi, TCSETA, &termio) == -1 )
error(FATAL, "ioctl error - TCSETA");
if ( ioctl(ttyi, TCFLSH, 2) == -1 )
error(FATAL, "ioctl error - TCFLSH");
fp_ttyi = fdopen(ttyi, "r");
} /* End of setupline */
/*****************************************************************************/
resetline()
{
int flags; /* for turning O_NDELAY off */
struct termio termio; /* so we can reset flow control */
/*
*
* Only used if we're running the program as separate read and write processes.
* Called from split() after the initial connection has been made and returns
* TRUE if two processes should work. Don't know if the O_NDELAY stuff is really
* needed, but setting c_cc[VMIN] to 1 definitely is. If we leave it be (as a 0)
* the read in readline() won't block!
*
*/
if ( (flags = fcntl(ttyi, F_GETFL, 0)) == -1 )
error(FATAL, "fcntl error - F_GETFL");
flags &= ~O_NDELAY;
if ( fcntl(ttyi, F_SETFL, flags) == -1 )
error(FATAL, "fcntl error - F_SETFL");
if ( ioctl(ttyi, TCGETA, &termio) == -1 )
error(FATAL, "ioctl error - TCGETA");
termio.c_iflag &= ~IXANY;
termio.c_iflag |= IXON | IXOFF;
termio.c_cc[VMIN] = 1;
termio.c_cc[VTIME] = 0;
if ( ioctl(ttyi, TCSETA, &termio) == -1 )
error(FATAL, "ioctl error - TCSETA");
return(TRUE);
} /* End of resetline */
/*****************************************************************************/
setupstdin(mode)
int mode; /* what to do with stdin settings */
{
struct termio termio;
static int saved = FALSE;
static struct termio oldtermio;
/*
*
* Save (mode = 0), reset (mode = 1), or restore (mode = 2) the tty settings for
* stdin. Expect something like raw mode with no echo will be set up. Explicit
* code to ensure blocking reads probably isn't needed because blocksize is set
* to 1 when we're in interactive mode, but I've included it anyway.
*
*/
if ( interactive == TRUE )
switch ( mode ) {
case 0:
if ( isatty(0) != 1 )
error(FATAL, "stdin not a terminal - can't run interactive mode");
if ( ioctl(0, TCGETA, &oldtermio) == -1 )
error(FATAL, "can't save terminal settings");
saved = TRUE;
break;
case 1:
termio = oldtermio;
termio.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL);
termio.c_cc[VMIN] = 1;
termio.c_cc[VTIME] = 0;
ioctl(0, TCSETA, &termio);
break;
case 2:
if ( saved == TRUE )
ioctl(0, TCSETA, &oldtermio);
break;
} /* End switch */
} /* End of setupstdin */
/*****************************************************************************/
readline()
{
int n; /* read() return value */
int ch; /* for interactive mode */
static int tries = 0; /* consecutive times read returned 0 */
/*
*
* Reads characters coming back from the printer on ttyi up to a newline (or EOF)
* or until no more characters are available. Characters are put in mesg[], the
* string is terminated with '\0' when we're done with a line and TRUE is returned
* to the caller. If complete line wasn't available FALSE is returned. Interactive
* mode should loop here forever, except during start(), echoing characters to
* stdout. If it happens to leave FALSE should be returned. The non-blocking read
* gets us out until split() is called.
*
* Some users (apparently just on 3B2 DKHOST systems) have had problems with the
* two process implementation that's forced me to kludge things up some. When a
* printer (on those systems) is turned off while postio is transmitting files
* the write process hangs in writeblock() (postio.c) - it's typically in the
* middle of a write() call, while the read() call (below) continually returns 0.
* In the original code readline() returned FALSE when read() returned 0 and we
* get into a loop that never ends - because the write process is hung. In the
* one process implementation having read return 0 is legitimate because the line
* is opened for no delay, but with two processes the read() blocks and a return
* value of 0 should never occur. From my point of view the real problem is that
* the write() call hangs on 3B2 DKHOST systems and apparently doesn't anywhere
* else. If the write returned anything less than or equal to 0 writeblock() would
* shut things down. The kludge I've implemented counts the number of consecutive
* times read() returns a 0 and if it exceeds a limit (100) the read process will
* shut things down. In fact one return of 0 from read() when we're in the two
* process mode is undoubtedly sufficient and no counting should be necessary!!!
* Moving the check to getstatus() should also work and is probably where things
* belong.
*
*/
if ( interactive == FALSE ) {
while ( (n = read(ttyi, ptr, 1)) != 0 ) {
if ( n < 0 )
if ( errno == EINTR )
continue;
else error(FATAL, "error reading %s", line);
tries = 0;
if ( *ptr == '\n' || *ptr == '\004' || ptr >= endmesg ) {
*(ptr+1) = '\0';
if ( *ptr == '\004' )
strcpy(ptr, "%%[ status: endofjob ]%%\n");
ptr = mesg;
return(TRUE);
} /* End if */
ptr++;
} /* End while */
if ( canread == TRUE && canwrite == FALSE ) /* read process kludge */
if ( ++tries > 100 )
error(FATAL, "printer appears to be offline - shutting down");
return(FALSE);
} /* End if */
if ( canwrite == TRUE ) /* don't block during start() */
return(FALSE);
while ( (ch = getc(fp_ttyi)) != EOF )
putc(ch, stdout);
return(FALSE);
} /* End of readline */
#endif
/*****************************************************************************/
#ifdef V9
#include <ipc.h>
char tbuf[256]; /* temporary input buffer */
char *nptr = tbuf; /* next character comes from here */
char *eptr = tbuf; /* one past the last character in tbuf */
setupline()
{
struct sgttyb sgtty;
struct ttydevb ttydev; /* for setting up the line */
static struct tchars tchar = { '\377', /* interrupt */
'\377', /* quit */
'\021', /* start output */
'\023', /* stop output */
'\377', /* end-of-file */
'\377' /* input delimiter */
};
/*
*
* Line initialization for V9.
*
*/
if ( line == NULL ) {
ttyi = ttyo = 1;
return;
} /* End if */
alarm(120); /* watch for hanging opens */
if ( line[0] == '/' ) {
if ( (ttyi = open(line, O_RDWR)) == -1 )
error(FATAL, "can't open %s", line);
} else if ((ttyi = ipcopen(ipcpath(line, "dk", 0), "")) < 0) {
sleep(5); /* wait for Datakit to hangup */
if ((ttyi = ipcopen(ipcpath(line, "dk", 0), "")) < 0) {
fprintf(stderr, "%s", errstr);
error(FATAL, "can't ipcopen %s", line);
}
}
alarm(0);
if ( (ttyo = dup(ttyi)) == -1 )
error(FATAL, "can't dup file descriptor for %s", line);
if ( ioctl(ttyi, FIOPUSHLD, &tty_ld) == -1 )
error(FATAL, "ioctl error - FIOPUSHLD");
if ( ioctl(ttyi, TIOCGDEV, &ttydev) == -1 )
error(FATAL, "ioctl error - TIOCGDEV");
if ( ioctl(ttyi, TIOCGETP, &sgtty) == -1 )
error(FATAL, "ioctl error - TIOCGETP");
sgtty.sg_flags &= ~ECHO;
sgtty.sg_flags &= ~CRMOD;
sgtty.sg_flags |= CBREAK;
ttydev.ispeed = baudrate;
ttydev.ospeed = baudrate;
if ( ioctl(ttyi, TIOCSDEV, &ttydev) == -1 )
error(FATAL, "ioctl error - TIOCSDEV");
if ( ioctl(ttyi, TIOCSETP, &sgtty) == -1 )
error(FATAL, "ioctl error - TIOCSETP");
if ( ioctl(ttyi, TIOCSETC, &tchar) == -1 )
error(FATAL, "ioctl error - TIOCSETC");
fp_ttyi = fdopen(ttyi, "r");
} /* End of setupline */
/*****************************************************************************/
resetline()
{
struct sgttyb sgtty;
/*
*
* Only used if we're running the program as separate read and write processes.
* Called from split() after the initial connection has been made and returns
* TRUE if two processes should work. Haven't tested or even compiled the stuff
* for separate read and write processes on Ninth Edition systems - no guarantees
* even though we return TRUE!
*
*/
if ( ioctl(ttyi, TIOCGETP, &sgtty) == -1 )
error(FATAL, "ioctl error - TIOCGETP");
sgtty.sg_flags |= TANDEM;
if ( ioctl(ttyi, TIOCSETP, &sgtty) == -1 )
error(FATAL, "ioctl error - TIOCSETP");
return(TRUE);
} /* End of resetline */
/*****************************************************************************/
setupstdin(mode)
int mode; /* what to do with stdin settings */
{
struct sgttyb sgtty;
static int saved = FALSE;
static struct sgttyb oldsgtty;
/*
*
* Save (mode = 0), reset (mode = 1), or restore (mode = 2) the tty settings for
* stdin. Expect something like raw mode with no echo will be set up. Need to make
* sure interrupt and quit still work - they're the only good way to exit when
* we're running interactive mode. I haven't tested or even compiled this code
* so there are no guarantees.
*
*/
if ( interactive == TRUE )
switch ( mode ) {
case 0:
if ( ioctl(0, TIOCGETP, &oldsgtty) == -1 )
error(FATAL, "can't save terminal settings");
saved = TRUE;
break;
case 1:
sgtty = oldsgtty;
sgtty.sg_flags &= ~ECHO;
sgtty.sg_flags |= CBREAK;
ioctl(0, TIOCSETP, &sgtty);
break;
case 2:
if ( saved == TRUE )
ioctl(0, TIOCSETP, &oldsgtty);
break;
} /* End switch */
} /* End of setupstdin */
/*****************************************************************************/
readline()
{
int n; /* read() return value */
int ch; /* for interactive mode */
/*
*
* Reads characters coming back from the printer on ttyi up to a newline (or EOF)
* and transfers each line to the mesg[] array. Everything available on ttyi is
* initially stored in tbuf[] and a line at a time is transferred from there to
* mesg[]. The string in mesg[] is terminated with a '\0' and TRUE is returned to
* the caller when we find a newline, EOF, or reach the end of the mesg[] array.
* If nothing is available on ttyi we return FALSE if a single process is being
* used for reads and writes, while in the two process implementation we force a
* one character read. Interactive mode loops here forever, except during start(),
* echoing everything that comes back on ttyi to stdout. The performance of a
* simple getc/putc loop for interactive mode was unacceptable when run under mux
* and has been replaced by more complicated code. When layers wasn't involved
* the getc/putc loop worked well.
*
*/
if ( interactive == FALSE ) {
while ( 1 ) {
while ( nptr < eptr ) { /* grab characters from tbuf */
*ptr = *nptr++;
if ( *ptr == '\r' ) continue;
if ( *ptr == '\n' || *ptr == '\004' || ptr >= endmesg ) {
*(ptr+1) = '\0';
if ( *ptr == '\004' )
strcpy(ptr, "%%[ status: endofjob ]%%\n");
ptr = mesg;
return(TRUE);
} /* End if */
++ptr;
} /* End for */
nptr = eptr = tbuf;
if ( ioctl(ttyi, FIONREAD, &n) < 0 )
if ( errno == EINTR )
continue;
else error(FATAL, "ioctl error - FIONREAD");
if ( n <= 0 )
if ( canwrite == TRUE )
return(FALSE);
n = ((n < 1) ? 1 : ((n < sizeof(tbuf)) ? n : sizeof(tbuf)));
if ( (n = read(ttyi, tbuf, n)) < 0 )
if ( errno == EINTR )
continue;
else error(FATAL, "error reading line %s", line);
else eptr = nptr + n;
} /* End while */
} /* End if */
if ( canwrite == TRUE ) /* don't block during start() */
return(FALSE);
while ( 1 ) { /* only interactive mode gets here */
if ( ioctl(ttyi, FIONREAD, &n) < 0 )
error(FATAL, "ioctl error - FIONREAD");
n = ((n < 1) ? 1 : ((n < sizeof(tbuf)) ? n : sizeof(tbuf)));
if ( (n = read(ttyi, tbuf, n)) < 0 )
error(FATAL, "error reading line %s", line);
else if ( n == 0 ) /* should not happen */
error(FATAL, "end of file in interactive mode");
if ( write(1, tbuf, n) != n )
error(FATAL, "error writing to stdout");
} /* End while */
return(FALSE);
} /* End of readline */
#endif
/*****************************************************************************/
#ifdef BSD4_2
setupline()
{
struct sgttyb sgtty;
static struct tchars tchar = { '\377', /* interrupt */
'\377', /* quit */
'\021', /* start output */
'\023', /* stop output */
'\377', /* end-of-file */
'\377' /* input delimiter */
};
long lmodes;
int disc = NTTYDISC;
/*
*
* Line initialization for BSD4_2. As in the System V code, if no line is given
* (ie. line == NULL) we continue on as before using stdout as ttyi and ttyo.
*
*/
if ( line == NULL )
ttyi = fileno(stdout);
else if ( (ttyi = open(line, O_RDWR)) == -1 )
error(FATAL, "can't open %s", line);
if ( (ttyo = dup(ttyi)) == -1 )
error(FATAL, "can't dup file descriptor for %s", line);
if (ioctl(ttyi, TIOCSETD, &disc) == -1 )
error(FATAL, "ioctl error - TIOCSETD");
if ( ioctl(ttyi, TIOCGETP, &sgtty) == -1 )
error(FATAL, "ioctl error - TIOCGETP");
if ( ioctl(ttyi, TIOCLGET, &lmodes) == -1 )
error(FATAL, "ioctl error - TIOCLGET");
sgtty.sg_flags &= ~ECHO;
sgtty.sg_flags &= ~CRMOD;
sgtty.sg_flags |= CBREAK;
sgtty.sg_ispeed = baudrate;
sgtty.sg_ospeed = baudrate;
lmodes |= LDECCTQ;
if ( ioctl(ttyi, TIOCSETP, &sgtty) == -1 )
error(FATAL, "ioctl error - TIOCSETP");
if ( ioctl(ttyi, TIOCSETC, &tchar) == -1 )
error(FATAL, "ioctl error - TIOCSETC");
if ( ioctl(ttyi, TIOCLSET, &lmodes) == -1 )
error(FATAL, "ioctl error - TIOCLSET");
fp_ttyi = fdopen(ttyi, "r");
} /* End of setupline */
/*****************************************************************************/
resetline()
{
struct sgttyb sgtty;
/*
*
* Only used if we're running the program as separate read and write processes.
* Called from split() after the initial connection has been made and returns
* TRUE if two processes should work. Haven't tested or even compiled the stuff
* for separate read and write processes on Berkeley systems - no guarantees
* even though we return TRUE!
*
*/
if ( ioctl(ttyi, TIOCGETP, &sgtty) == -1 )
error(FATAL, "ioctl error - TIOCGETP");
sgtty.sg_flags |= TANDEM;
if ( ioctl(ttyi, TIOCSETP, &sgtty) == -1 )
error(FATAL, "ioctl error - TIOCSETP");
return(TRUE);
} /* End of resetline */
/*****************************************************************************/
setupstdin(mode)
int mode; /* what to do with stdin settings */
{
struct sgttyb sgtty;
static int saved = FALSE;
static struct sgttyb oldsgtty;
/*
*
* Save (mode = 0), reset (mode = 1), or restore (mode = 2) the tty settings for
* stdin. Expect something like raw mode with no echo will be set up. Need to make
* sure interrupt and quit still work - they're the only good way to exit when
* we're running interactive mode. I haven't tested or even compiled this code
* so there are no guarantees.
*
*/
if ( interactive == TRUE )
switch ( mode ) {
case 0:
if ( isatty(0) != 1 )
error(FATAL, "stdin not a terminal - can't run interactive mode");
if ( ioctl(0, TIOCGETP, &oldsgtty) == -1 )
error(FATAL, "can't save terminal settings");
saved = TRUE;
break;
case 1:
sgtty = oldsgtty;
sgtty.sg_flags &= ~ECHO;
sgtty.sg_flags |= CBREAK;
ioctl(0, TIOCSETP, &sgtty);
break;
case 2:
if ( saved == TRUE )
ioctl(0, TIOCSETP, &oldsgtty);
break;
} /* End switch */
} /* End of setupstdin */
/*****************************************************************************/
readline()
{
int n; /* read() return value */
int ch; /* for interactive mode */
/*
*
* Reads characters coming back from the printer on ttyo up to a newline (or EOF)
* or until no more characters are available. Characters are put in mesg[], the
* string is terminated with '\0' when we're done with a line and TRUE is returned
* to the caller. If complete line wasn't available FALSE is returned. Interactive
* mode should loop here forever, except during start(), echoing characters to
* stdout. If it happens to leave FALSE should be returned. Probably should read
* everything available on ttyi into a temporary buffer and work from there rather
* than reading one character at a time.
*
*/
if ( interactive == FALSE ) {
while ( 1 ) {
if ( ioctl(ttyi, FIONREAD, &n) < 0 )
if ( errno == EINTR )
continue;
else error(FATAL, "ioctl error - FIONREAD");
if ( n <= 0 )
if ( canwrite == TRUE )
return(FALSE);
else n = 1;
for ( ; n > 0; n-- ) {
/*if ( read(ttyi, ptr, 1) < 0 )*/
if ( (*ptr = getc(fp_ttyi)) == EOF )
if ( errno == EINTR )
continue;
else error(FATAL, "error reading %s", line);
if ( *ptr == '\r' ) continue;
if ( *ptr == '\n' || *ptr == '\004' || ptr >= endmesg ) {
*(ptr+1) = '\0';
if ( *ptr == '\004' )
strcpy(ptr, "%%[ status: endofjob ]%%\n");
ptr = mesg;
return(TRUE);
} /* End if */
++ptr;
} /* End for */
} /* End while */
} /* End if */
if ( canwrite == TRUE ) /* don't block during start() */
return(FALSE);
while ( (ch = getc(fp_ttyi)) != EOF )
putc(ch, stdout);
return(FALSE);
} /* End of readline */
/*****************************************************************************/
/* @(#)strspn.c 1.2 */
/*LINTLIBRARY*/
/*
* Return the number of characters in the maximum leading segment
* of string which consists solely of characters from charset.
*/
int
strspn(string, charset)
char *string;
register char *charset;
{
register char *p, *q;
for(q=string; *q != '\0'; ++q) {
for(p=charset; *p != '\0' && *p != *q; ++p)
;
if(*p == '\0')
break;
}
return(q-string);
}
/* @(#)strpbrk.c 1.2 */
/*LINTLIBRARY*/
/*
* Return ptr to first occurance of any character from `brkset'
* in the character string `string'; NULL if none exists.
*/
char *
strpbrk(string, brkset)
register char *string, *brkset;
{
register char *p;
do {
for(p=brkset; *p != '\0' && *p != *string; ++p)
;
if(*p != '\0')
return(string);
}
while(*string++);
return((char*)0);
}
/* @(#)strtok.c 1.2 */
/* 3.0 SID # 1.2 */
/*LINTLIBRARY*/
/*
* uses strpbrk and strspn to break string into tokens on
* sequentially subsequent calls. returns NULL when no
* non-separator characters remain.
* `subsequent' calls are calls with first argument NULL.
*/
extern int strspn();
extern char *strpbrk();
char *
strtok(string, sepset)
char *string, *sepset;
{
register char *p, *q, *r;
static char *savept;
/*first or subsequent call*/
p = (string == (char*)0)? savept: string;
if(p == 0) /* return if no tokens remaining */
return((char*)0);
q = p + strspn(p, sepset); /* skip leading separators */
if(*q == '\0') /* return if no tokens remaining */
return((char*)0);
if((r = strpbrk(q, sepset)) == (char*)0) /* move past token */
savept = 0; /* indicate this is last token */
else {
*r = '\0';
savept = ++r;
}
return(q);
}
#endif
/*****************************************************************************/
#ifdef DKHOST
#ifndef DKSTREAMS
short dkrmode[3] = {DKR_TIME, 0, 0};
#endif
dkhost_connect()
{
int ofd; /* for saving and restoring stderr */
int dfd;
int retrytime = 5;
/*
*
* Tries to connect to a Datakit destination. The extra stuff I've added to save
* and later restore stderr is primarily for our spooling setup at Murray Hill.
* postio is usually called with stderr directed to a file that will be returned
* to the user when the job finishes printing. Problems encountered by dkdial(),
* like busy messages, go to stderr but don't belong in the user's mail. They'll
* be temporarily directed to the log file. After we've connected stderr will be
* restored.
*
*/
if ( *line == '\0' )
error(FATAL, "incomplete Datakit line");
if ( fp_log != NULL && fp_log != stderr ) { /* redirect dkdial errors */
ofd = dup(2);
close(2);
dup(fileno(fp_log));
} /* End if */
while ( (dfd = ttyi = dkdial(line)) < 0 ) {
if ( retrytime < 0 )
error(FATAL, "can't connect to %s", line);
sleep(retrytime++);
if ( retrytime > 60 )
retrytime = 60;
} /* End while */
if ( fp_log != NULL && fp_log != stderr ) { /* restore stderr */
close(2);
dup(ofd);
close(ofd);
} /* End if */
#ifndef DKSTREAMS
if ( ioctl(ttyi, DIOCRMODE, dkrmode) == -1 )
error(FATAL, "ioctl error - DIOCRMODE");
#ifdef DIOURPWD
if ( window_size > 0 ) {
short dkparm[3];
dkparm[0] = dkminor(ttyi);
dkparm[1] = 1;
dkparm[2] = window_size;
if ( ioctl(ttyi, DIOURPWD, dkparm) < 0 || ioctl(ttyi, DIOCFLUSH, 0) < 0 )
error(NON_FATAL, "WSA failed");
} /* End if */
#endif
line = dtnamer(dkminor(ttyi));
if ( (ttyi = open(line, O_RDWR)) == -1 )
error(FATAL, "can't open %s", line);
close(dfd);
#endif
} /* End of dkhost_connect */
#endif
/*****************************************************************************/
0707070014231405061006440057030057030000011222050522627503600003000000002561post.src/postio/ifdef.h /*
*
* Conditional compilation definitions needed in ifdef.c and postio.c.
*
*/
#ifdef SYSV
#include <termio.h>
#ifdef DKSTREAMS
#include <sys/stream.h>
#include <sys/stropts.h>
#endif
#endif
#ifdef V9
#include <sys/filio.h>
#include <sys/ttyio.h>
extern int tty_ld;
#endif
#ifdef BSD4_2
#include <sgtty.h>
#include <sys/time.h>
#include <errno.h>
#define FD_ZERO(s) (s) = 0
#define FD_SET(n,s) (s) |= 1 << (n)
extern int errno;
#endif
#ifdef DKHOST
#include <dk.h>
#include <sysexits.h>
extern char *dtnamer();
extern int dkminor();
#endif
/*
*
* External variable declarations - most (if not all) are defined in postio.c and
* needed by the routines in ifdef.c.
*
*/
extern char *line; /* printer is on this line */
extern int ttyi; /* input */
extern int ttyo; /* and output file descriptors */
extern FILE *fp_log; /* just for DKHOST stuff */
extern char mesg[]; /* exactly what came back on ttyi */
extern char *endmesg; /* one in front of last free slot in mesg */
extern int next; /* next character goes in mesg[next] */
extern short baudrate; /* printer is running at this speed */
extern int stopbits; /* and expects this many stop bits */
extern int interactive; /* TRUE for interactive mode */
extern int whatami; /* a READ or WRITE process - or both */
extern int canread; /* allows reads */
extern int canwrite; /* and writes if TRUE */
0707070014231405071006440057030057030000011223600522627503600003100000015777post.src/postio/postio.1 .TH POSTIO 1 "DWB 3.2"
.SH NAME
.B postio
\- serial interface for PostScript printers
.SH SYNOPSIS
\*(mBpostio\f1
.OP \-l line
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B postio
sends
.I files
to the PostScript printer attached to
.IR line .
If no
.I files
are specified the standard input is sent.
The first group of
.I options
should be sufficient for most applications:
.TP 0.75i
.OP \-b speed
Transmit data over
.I line
at baud rate
.I speed.
Recognized baud rates are 1200, 2400, 4800, 9600, and 19200.
The default
.I speed
is 9600 baud.
.TP
.OP \-c
Do not send
.MR ^C s
(interrupts) to the printer,
which means
.B postio
does not force a busy printer into the idle state.
.TP
.OP \-l line
Connect to printer attached to
.IR line .
In most cases there is no default and
.B postio
must be able to read and write
.IR line .
If
.I line
does not begin with
.MW /
it is treated as a Datakit destination.
.TP
.OP \-q
Prevents status queries while
.I files
are being sent to the printer.
When status queries are disabled a dummy message is appended
to the log file before each block is transmitted.
.TP
.OP \-B num
Set internal buffer size for reading and writing
.I files
to
.I num
bytes
(default is 2048 bytes).
.TP
.OP \-D
Enable debug mode.
Guarantees that everything read on
.I line
will be added to the log file (standard error by default).
.TP
.OP \-L file
Data received on
.I line
gets put in
.IR file .
The default log
.I file
is standard error.
Printer or status messages that do not indicate a change in state
are not normally written to
.I file
but can be forced out using the
.OP \-D
option.
.TP
.OP \-P string
Send
.I string
to the printer before any of the input files.
The default
.I string
is simple PostScript code that disables timeouts.
.TP
.OP \-R num
Run
.B postio
as a single process if
.I num
is 1 or as separate read and write processes if
.I num
is 2.
By default
.B postio
runs as a single process.
.PP
The next two
.I options
are provided for users who expect to run
.B postio
on their own.
Neither is suitable for use in spooler interface
programs:
.TP 0.35i
.OP \-i
Run the program in interactive mode.
Any
.I files
are sent first and followed by the standard input.
Forces separate read and write processes
and overrides many other options.
To exit interactive mode use your interrupt or quit character.
To get a friendly interactive connection with the printer type
.MW executive
on a line by itself.
.TP
.OP \-t
Data received on
.I line
and not recognized as printer or status information is written to
the standard output.
Forces separate read and write processes.
Convenient if you have a PostScript program that
will be returning useful data to the host.
.PP
The last option is not generally recommended and should only
be used if all else fails to provide a reliable connection:
.TP 0.35i
.OP \-S
Slow the transmission of data to the printer.
Severely limits throughput, runs as a single process,
disables the
.OP \-q
option, limits the internal buffer size to 1024 bytes,
can use an excessive amount of
.SM CPU
time, and does nothing in interactive mode.
.PP
Best performance is usually obtained by using
a large internal buffer
.OP -B "" ) (
and by running the program as separate read and write processes
.OP \-R2 "" ). (
Inability to fork the additional process causes
.B postio
to continue as a single read/write process.
When one process is used, only data sent to the printer is flow-controlled.
.PP
The options are not all mutually exclusive.
The
.OP \-i
option always wins, selecting its own settings for whatever is
needed to run interactive mode, independent of anything else
found on the command line.
Interactive mode runs as separate read and write processes
and few of the other
.I options
accomplish anything in the presence of the
.OP \-i
option.
The
.OP \-t
option needs a reliable two way connection to the printer and
therefore tries to force separate read and write processes.
The
.OP \-S
option relies on the status query mechanism, so
.OP \-q
is disabled and the program runs as a single process.
.PP
In most cases
.B postio
starts by making a connection to
.I line
and then attempts to force the printer into the
.SM IDLE
state by sending an appropriate sequence of
.MW ^T
(status query),
.MW ^C
(interrupt), and
.MW ^D
(end of job) characters.
When the printer goes
.SM IDLE
.I files
are transmitted along with an occasional
.MW ^T
(unless the
.OP \-q
option was used).
After all the
.I files
are sent the program waits until it is reasonably sure the
job is complete.
Printer generated error messages received at any time
except while establishing the initial connection
(or when running interactive mode) cause
.B postio
to exit with a non-zero status.
In addition to being added to the log file, printer error messages
are also echoed to standard error.
.SH EXAMPLES
Run as a single process at 9600 baud and send
.I file1
and
.I file2
to the printer attached to
.MR /dev/tty01 :
.EX
postio -l /dev/tty01 \f2file1 file2
.EE
Same as above except two processes are used,
the internal buffer is set to 4096 bytes,
and data returned by the printer gets put in file
.MR log :
.EX
postio -R2 -B4096 -l/dev/tty01 -Llog \f2file1 file2
.EE
Establish an interactive connection with the printer at Datakit
destination
.MR my/printer :
.EX
postio -i -l my/printer
.EE
Send file
.MW program
to the printer connected to
.MR /dev/tty22 ,
recover any data in file
.MR results ,
and put log messages in file
.MR log :
.EX
postio -t -l /dev/tty22 -L log program >results
.EE
.SH DIAGNOSTICS
A 0 exit status is returned if the files ran successfully.
System errors (e.g., ``can't open the line'') set the low order
bit in the exit status, while PostScript errors set bit 1.
An exit status of 2 usually means the printer
detected a PostScript error in the input
.IR files .
.SH WARNINGS
.PP
The input
.I files
are handled as a single PostScript job.
Sending several different jobs, each with their own internal
end of job mark
.RM ( ^D )
is not guaranteed to work properly.
.B postio
may quit before all the jobs have completed and could be restarted
before the last one finishes.
.PP
All the capabilities described above may not be available on every
machine or even across the different versions of
.SM UNIX
that are currently supported by the program.
For example, the code needed to connect to a Datakit destination may only
work on System\ V and may require that the
.SM DKHOST
software package be available at compile time.
.PP
There may be no default
.I line
so using
.OP \-l
option is strongly recommended.
If omitted
.B postio
may attempt to connect to the printer using the standard output.
If Datakit is involved the
.OP \-b
may be ineffective and attempts by
.B postio
to flow control data in both directions may not work.
The
.OP \-q
option can help if the printer is connected to \s-1RADIAN\s+1.
The
.OP \-S
option is not generally recommended and should only be used if
all else fails to establish a reliable connection.
.SH SEE ALSO
.BR buildtables (1),
.BR dpost (1),
.BR postdaisy (1),
.BR postdmd (1),
.BR postmd (1),
.BR postprint (1),
.BR postreverse (1),
.BR posttek (1),
.BR printfont (1)
0707070014231405101006440057030057030000011224000522627503600003100000107251post.src/postio/postio.c /*
*
* postio - RS-232 serial interface for PostScript printers
*
* A simple program that manages input and output for PostScript printers. Much
* has been added and changed from early versions of the program, but the basic
* philosophy is still the same. Don't send real data until we're certain we've
* connected to a PostScript printer that's in the idle state and try to hold the
* connection until the job is completely done. It's more work than you might
* expect is necessary, but should provide a reasonably reliable spooler interface
* that can return error indications to the caller via the program's exit status.
*
* I've added code that will let you split the program into separate read/write
* processes. Although it's not the default it should be useful if you have a file
* that will be returning useful data from the printer. The two process stuff was
* laid down on top of the single process code and both methods still work. The
* implementation isn't as good as it could be, but didn't require many changes
* to the original program (despite the fact that there are now many differences).
*
* By default the program still runs as a single process. The -R2 option forces
* separate read and write processes after the intial connection is made. If you
* want that as the default initialize splitme (below) to TRUE. In addition the
* -t option that's used to force stuff not recognized as status reports to stdout
* also tries to run as two processes (by setting splitme to TRUE). It will only
* work if the required code (ie. resetline() in ifdef.c) has been implemented
* for your Unix system. I've only tested the System V code.
*
* Code needed to support interactive mode has also been added, although again it's
* not as efficient as it could be. It depends on the system dependent procedures
* resetline() and setupstdin() (file ifdef.c) and for now is only guaranteed to
* work on System V. Can be requested using the -i option.
*
* Quiet mode (-q option) is also new, but was needed for some printers connected
* to RADIAN. If you're running in quiet mode no status requests will be sent to
* the printer while files are being transmitted (ie. in send()).
*
* The program expects to receive printer status lines that look like,
*
* %%[ status: idle; source: serial 25 ]%%
* %%[ status: waiting; source: serial 25 ]%%
* %%[ status: initializing; source: serial 25 ]%%
* %%[ status: busy; source: serial 25 ]%%
* %%[ status: printing; source: serial 25 ]%%
* %%[ status: PrinterError: out of paper; source: serial 25 ]%%
* %%[ status: PrinterError: no paper tray; source: serial 25 ]%%
*
* although this list isn't complete. Sending a '\024' (control T) character forces
* the return of a status report. PostScript errors detected on the printer result
* in the immediate transmission of special error messages that look like,
*
* %%[ Error: undefined; OffendingCommand: xxx ]%%
* %%[ Flushing: rest of job (to end-of-file) will be ignored ]%%
*
* although we only use the Error and Flushing keywords. Finally conditions, like
* being out of paper, result in other messages being sent back from the printer
* over the communications line. Typical PrinterError messages look like,
*
* %%[ PrinterError: out of paper; source: serial 25 ]%%
* %%[ PrinterError: paper jam; source: serial 25 ]%%
*
* although we only use the PrinterError keyword rather than trying to recognize
* all possible printer errors.
*
* The implications of using one process and only flow controlling data going to
* the printer are obvious. Job transmission should be reliable, but there can be
* data loss in stuff sent back from the printer. Usually that only caused problems
* with jobs designed to run on the printer and return useful data back over the
* communications line. If that's the kind of job you're sending call postio with
* the -t option. That should force the program to split into separate read and
* write processes and everything not bracketed by "%%[ " and " ]%%" strings goes
* to stdout. In otherwords the data you're expecting should be separated from the
* status stuff that goes to the log file (or stderr). The -R2 option does almost
* the same thing (ie. separate read and write processes), but everything that
* comes back from the printer goes to the log file (stderr by default) and you'll
* have to separate your data from any printer messages.
*
* A typical command line might be,
*
* postio -l /dev/tty01 -b 9600 -L log file1 file2
*
* where -l selects the line, -b sets the baud rate, and -L selects the printer
* log file. Since there's no default line, at least not right now, you'll always
* need to use the -l option, and if you don't choose a log file stderr will be
* used. If you have a program that will be returning data the command line might
* look like,
*
* postio -t -l/dev/tty01 -b9600 -Llog file >results
*
* Status stuff goes to file log while the data you're expecting back from the
* printer gets put in file results.
*
*/
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/types.h>
#include <errno.h>
#include "ifdef.h" /* conditional compilation stuff */
#include "gen.h" /* general purpose definitions */
#include "postio.h" /* some special definitions */
char **argv; /* global so everyone can use them */
int argc;
char *prog_name = ""; /* really just for error messages */
int x_stat = 0; /* program exit status */
int debug = OFF; /* debug flag */
int ignore = OFF; /* what's done for FATAL errors */
char *line = NULL; /* printer is on this tty line */
short baudrate = BAUDRATE; /* and running at this baud rate */
Baud baudtable[] = BAUDTABLE; /* converts strings to termio values */
int stopbits = 1; /* number of stop bits */
int tostdout = FALSE; /* non-status stuff goes to stdout? */
int quiet = FALSE; /* no status queries in send() if TRUE */
int interactive = FALSE; /* interactive mode */
char *postbegin = POSTBEGIN; /* preceeds all the input files */
int useslowsend = FALSE; /* not recommended! */
int sendctrlC = TRUE; /* interrupt with ctrl-C when BUSY */
int window_size = -1; /* for Datakit - use -w */
char *block = NULL; /* input file buffer */
int blocksize = BLOCKSIZE; /* and its size in bytes */
int head = 0; /* block[head] is the next character */
int tail = 0; /* one past the last byte in block[] */
int splitme = FALSE; /* into READ and WRITE processes if TRUE */
int whatami = READWRITE; /* a READ or WRITE process - or both */
int canread = TRUE; /* allow reads */
int canwrite = TRUE; /* and writes if TRUE */
int otherpid = -1; /* who gets signals if greater than 1 */
int joinsig = SIGTRAP; /* reader gets this when writing is done */
int writedone = FALSE; /* and then sets this to TRUE */
char mesg[MESGSIZE]; /* exactly what came back on ttyi */
char sbuf[MESGSIZE]; /* for parsing the message */
int next = 0; /* next character goes in mesg[next] */
char *mesgptr = NULL; /* printer message starts here in mesg[] */
char *endmesg = NULL; /* as far as readline() can go in mesg[] */
Status status[] = STATUS; /* for converting status strings */
int nostatus = NOSTATUS; /* default getstatus() return value */
int currentstate = NOTCONNECTED; /* what's happening START, SEND, or DONE */
int ttyi = 0; /* input */
int ttyo = 2; /* and output file descriptors */
FILE *fp_log = stderr; /* log file for stuff from the printer */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A simple program that manages input and output for PostScript printers. Can run
* as a single process or as separate read/write processes. What's done depends on
* the value assigned to splitme when split() is called.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* really just for error messages */
init_signals(); /* sets up interrupt handling */
options(); /* get command line options */
initialize(); /* must be done after options() */
start(); /* make sure the printer is ready */
split(); /* into read/write processes - maybe */
arguments(); /* then send each input file */
done(); /* wait until the printer is finished */
cleanup(); /* make sure the write process stops */
exit(x_stat); /* everything probably went OK */
} /* End of main */
/*****************************************************************************/
init_signals()
{
void interrupt(); /* handles them if we catch signals */
/*
*
* Makes sure we handle interrupts. The proper way to kill the program, if
* necessary, is to do a kill -15. That forces a call to interrupt(), which in
* turn tries to reset the printer and then exits with a non-zero status. If the
* program is running as two processes, sending SIGTERM to either the parent or
* child should clean things up.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_sig */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
char *optnames = "b:cil:qs:tw:B:L:P:R:SDI";
extern char *optarg; /* used by getopt() */
extern int optind;
/*
*
* Reads and processes the command line options. The -R2, -t, and -i options all
* force separate read and write processes by eventually setting splitme to TRUE
* (check initialize()). The -S option is not recommended and should only be used
* as a last resort!
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'b': /* baud rate string */
baudrate = getbaud(optarg);
break;
case 'c': /* no ctrl-C's */
sendctrlC = FALSE;
break;
case 'i': /* interactive mode */
interactive = TRUE;
break;
case 'l': /* printer line */
line = optarg;
break;
case 'q': /* no status queries - for RADIAN? */
quiet = TRUE;
break;
case 's': /* use 2 stop bits - for UNISON? */
if ( (stopbits = atoi(optarg)) < 1 || stopbits > 2 )
stopbits = 1;
break;
case 't': /* non-status stuff goes to stdout */
tostdout = TRUE;
break;
case 'w': /* Datakit window size */
window_size = atoi(optarg);
break;
case 'B': /* set the job buffer size */
if ( (blocksize = atoi(optarg)) <= 0 )
blocksize = BLOCKSIZE;
break;
case 'L': /* printer log file */
if ( (fp_log = fopen(optarg, "w")) == NULL ) {
fp_log = stderr;
error(NON_FATAL, "can't open log file %s", optarg);
} /* End if */
break;
case 'P': /* initial PostScript code */
postbegin = optarg;
break;
case 'R': /* run as one or two processes */
if ( atoi(optarg) == 2 )
splitme = TRUE;
else splitme = FALSE;
break;
case 'S': /* slow and kludged up version of send */
useslowsend = TRUE;
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
getbaud(rate)
char *rate; /* string representing the baud rate */
{
int i; /* for looking through baudtable[] */
/*
*
* Called from options() to convert a baud rate string into an appropriate termio
* value. *rate is looked up in baudtable[] and if it's found, the corresponding
* value is returned to the caller.
*
*/
for ( i = 0; baudtable[i].rate != NULL; i++ )
if ( strcmp(rate, baudtable[i].rate) == 0 )
return(baudtable[i].val);
error(FATAL, "don't recognize baud rate %s", rate);
} /* End of getbaud */
/*****************************************************************************/
initialize()
{
/*
*
* Initialization, a few checks, and a call to setupline() (file ifdef.c) to open
* and configure the communications line. Settings for interactive mode always
* take precedence. The setupstdin() call with an argument of 0 saves the current
* terminal settings if interactive mode has been requested - otherwise nothing's
* done. Unbuffering stdout (via the setbuf() call) isn't really needed on System V
* since it's flushed whenever terminal input is requested. It's more efficient if
* we buffer the stdout (on System V) but safer (for other versions of Unix) if we
* include the setbuf() call.
*
*/
whatami = READWRITE; /* always run start() as one process */
canread = canwrite = TRUE;
if ( tostdout == TRUE ) /* force separate read/write processes */
splitme = TRUE;
if ( interactive == TRUE ) { /* interactive mode settings always win */
quiet = FALSE;
tostdout = FALSE;
splitme = TRUE;
blocksize = 1;
postbegin = NULL;
useslowsend = FALSE;
nostatus = INTERACTIVE;
setbuf(stdout, NULL);
} /* End if */
if ( useslowsend == TRUE ) { /* last resort only - not recommended */
quiet = FALSE;
splitme = FALSE;
if ( blocksize > 1024 ) /* don't send too much all at once */
blocksize = 1024;
} /* End if */
if ( tostdout == TRUE && fp_log == stderr )
fp_log = NULL;
if ( line == NULL && (interactive == TRUE || tostdout == TRUE) )
error(FATAL, "a printer line must be supplied - use the -l option");
if ( (block = malloc(blocksize)) == NULL )
error(FATAL, "no memory");
endmesg = mesg + sizeof mesg - 2; /* one byte from last position in mesg */
setupline(); /* configure the communications line */
setupstdin(0); /* save current stdin terminal settings */
} /* End of initialize */
/*****************************************************************************/
start()
{
/*
*
* Tries to put the printer in the IDLE state before anything important is sent.
* Run as a single process no matter what has been assigned to splitme. Separate
* read and write processes, if requested, will be created after we're done here.
*
*/
logit("printer startup\n");
currentstate = START;
clearline();
while ( 1 )
switch ( getstatus(1) ) {
case IDLE:
case INTERACTIVE:
if ( postbegin != NULL && *postbegin != '\0' )
Write(ttyo, postbegin, strlen(postbegin));
clearline();
return;
case BUSY:
if ( sendctrlC == TRUE ) {
Write(ttyo, "\003", 1);
Rest(1);
} /* End if */
break;
case WAITING:
case ERROR:
case FLUSHING:
Write(ttyo, "\004", 1);
Rest(1);
break;
case PRINTERERROR:
Rest(15);
break;
case DISCONNECT:
error(FATAL, "Disconnected - printer may be offline");
break;
case ENDOFJOB:
case UNKNOWN:
clearline();
break;
default:
Rest(1);
break;
} /* End switch */
} /* End of start */
/*****************************************************************************/
split()
{
int pid;
void interrupt();
/*
*
* If splitme is TRUE we fork a process, make the parent handle reading, and let
* the child take care of writing. resetline() (file ifdef.c) contains all the
* system dependent code needed to reset the communications line for separate
* read and write processes. For now it's expected to return TRUE or FALSE and
* that value controls whether we try the fork. I've only tested the two process
* stuff for System V. Other versions of resetline() may just be dummy procedures
* that always return FALSE. If the fork() failed previous versions continued as
* a single process, although the implementation wasn't quite right, but I've now
* decided to quit. The main reason is a Datakit channel may be configured to
* flow control data in both directions, and if we run postio over that channel
* as a single process we likely will end up in deadlock.
*
*/
if ( splitme == TRUE )
if ( resetline() == TRUE ) {
pid = getpid();
signal(joinsig, interrupt);
if ( (otherpid = fork()) == -1 )
error(FATAL, "can't fork");
else if ( otherpid == 0 ) {
whatami = WRITE;
nostatus = WRITEPROCESS;
otherpid = pid;
setupstdin(1);
} else whatami = READ;
} else if ( interactive == TRUE || tostdout == TRUE )
error(FATAL, "can't create two process - check resetline()");
else error(NON_FATAL, "running as a single process - check resetline()");
canread = (whatami & READ) ? TRUE : FALSE;
canwrite = (whatami & WRITE) ? TRUE : FALSE;
} /* End of split */
/*****************************************************************************/
arguments()
{
int fd_in; /* next input file */
/*
*
* Makes sure all the non-option command line arguments are processed. If there
* aren't any arguments left when we get here we'll send stdin. Input files are
* only read and sent to the printer if canwrite is TRUE. Checking it here means
* we won't have to do it in send(). If interactive mode is TRUE we'll stay here
* forever sending stdin when we run out of files - exit with a break. Actually
* the loop is bogus and used at most once when we're in interactive mode because
* stdin is in a pseudo raw mode and the read() in readblock() should never see
* the end of file.
*
*/
if ( canwrite == TRUE )
do /* loop is for interactive mode */
if ( argc < 1 )
send(fileno(stdin), "pipe.end");
else {
while ( argc > 0 ) {
if ( (fd_in = open(*argv, O_RDONLY)) == -1 )
error(FATAL, "can't open %s", *argv);
send(fd_in, *argv);
close(fd_in);
argc--;
argv++;
} /* End while */
} /* End else */
while ( interactive == TRUE );
} /* End of arguments */
/*****************************************************************************/
send(fd_in, name)
int fd_in; /* next input file */
char *name; /* and it's pathname */
{
/*
*
* Sends file *name to the printer. There's nothing left here that depends on
* sending and receiving status reports, although it can be reassuring to know
* the printer is responding and processing our job. Only the writer gets here
* in the two process implementation, and in that case split() has reset nostatus
* to WRITEPROCESS and that's what getstatus() always returns. For now we accept
* the IDLE state and ENDOFJOB as legitimate and ignore the INITIALIZING state.
*
*/
if ( interactive == FALSE )
logit("sending file %s\n", name);
currentstate = SEND;
if ( useslowsend == TRUE ) {
slowsend(fd_in);
return;
} /* End if */
while ( readblock(fd_in) )
switch ( getstatus(0) ) {
case IDLE:
case BUSY:
case WAITING:
case PRINTING:
case ENDOFJOB:
case PRINTERERROR:
case UNKNOWN:
case NOSTATUS:
case WRITEPROCESS:
case INTERACTIVE:
writeblock();
break;
case ERROR:
fprintf(stderr, "%s", mesg); /* for csw */
error(USER_FATAL, "PostScript Error");
break;
case FLUSHING:
error(USER_FATAL, "Flushing Job");
break;
case DISCONNECT:
error(FATAL, "Disconnected - printer may be offline");
break;
} /* End switch */
} /* End of send */
/*****************************************************************************/
done()
{
int sleeptime = 15; /* for 'out of paper' etc. */
/*
*
* Tries to stay connected to the printer until we're reasonably sure the job is
* complete. It's the only way we can recover error messages or data generated by
* the PostScript program and returned over the communication line. Actually doing
* it correctly for all possible PostScript jobs is more difficult that it might
* seem. For example if we've sent several jobs, each with their own EOF mark, then
* waiting for ENDOFJOB won't guarantee all the jobs have completed. Even waiting
* for IDLE isn't good enough. Checking for the WAITING state after all the files
* have been sent and then sending an EOF may be the best approach, but even that
* won't work all the time - we could miss it or might not get there. Even sending
* our own special PostScript job after all the input files has it's own different
* set of problems, but probably could work (perhaps by printing a fake status
* message or just not timing out). Anyway it's probably not worth the trouble so
* for now we'll quit if writedone is TRUE and we get ENDOFJOB or IDLE.
*
* If we're running separate read and write processes the reader gets here after
* after split() while the writer goes to send() and only gets here after all the
* input files have been transmitted. When they're both here the writer sends the
* reader signal joinsig and that forces writedone to TRUE in the reader. At that
* point the reader can begin looking for an indication of the end of the job.
* The writer hangs around until the reader kills it (usually in cleanup()) sending
* occasional status requests.
*
*/
if ( canwrite == TRUE )
logit("waiting for end of job\n");
currentstate = DONE;
writedone = (whatami == READWRITE) ? TRUE : FALSE;
while ( 1 ) {
switch ( getstatus(1) ) {
case WRITEPROCESS:
if ( writedone == FALSE ) {
sendsignal(joinsig);
Write(ttyo, "\004", 1);
writedone = TRUE;
sleeptime = 1;
} /* End if */
Rest(sleeptime++);
break;
case WAITING:
Write(ttyo, "\004", 1);
Rest(1);
sleeptime = 15;
break;
case IDLE:
case ENDOFJOB:
if ( writedone == TRUE ) {
logit("job complete\n");
return;
} /* End if */
break;
case BUSY:
case PRINTING:
case INTERACTIVE:
sleeptime = 15;
break;
case PRINTERERROR:
Rest(sleeptime++);
break;
case ERROR:
fprintf(stderr, "%s", mesg); /* for csw */
error(USER_FATAL, "PostScript Error");
return;
case FLUSHING:
error(USER_FATAL, "Flushing Job");
return;
case DISCONNECT:
error(FATAL, "Disconnected - printer may be offline");
return;
default:
Rest(1);
break;
} /* End switch */
if ( sleeptime > 60 )
sleeptime = 60;
} /* End while */
} /* End of done */
/*****************************************************************************/
cleanup()
{
int w;
/*
*
* Only needed if we're running separate read and write processes. Makes sure the
* write process is killed after the read process has successfully finished with
* all the jobs. sendsignal() returns a -1 if there's nobody to signal so things
* work when we're running a single process.
*
*/
while ( sendsignal(SIGKILL) != -1 && (w = wait((int *)0)) != otherpid && w != -1 ) ;
} /* End of cleanup */
/*****************************************************************************/
readblock(fd_in)
int fd_in; /* current input file */
{
static long blocknum = 1;
/*
*
* Fills the input buffer with the next block, provided we're all done with the
* last one. Blocks from fd_in are stored in array block[]. head is the index
* of the next byte in block[] that's supposed to go to the printer. tail points
* one past the last byte in the current block. head is adjusted in writeblock()
* after each successful write, while head and tail are reset here each time
* a new block is read. Returns the number of bytes left in the current block.
* Read errors cause the program to abort. The fake status message that's put out
* in quiet mode is only so you can look at the log file and know something's
* happening - take it out if you want.
*
*/
if ( head >= tail ) { /* done with the last block */
if ( (tail = read(fd_in, block, blocksize)) == -1 )
error(FATAL, "error reading input file");
if ( quiet == TRUE && tail > 0 ) /* put out a fake message? */
logit("%%%%[ status: busy; block: %d ]%%%%\n", blocknum++);
head = 0;
} /* End if */
return(tail - head);
} /* End of readblock */
/*****************************************************************************/
writeblock()
{
int count; /* bytes successfully written */
/*
*
* Called from send() when it's OK to send the next block to the printer. head
* is adjusted after the write, and the number of bytes that were successfully
* written is returned to the caller.
*
*/
if ( (count = write(ttyo, &block[head], tail - head)) == -1 )
error(FATAL, "error writing to %s", line);
else if ( count == 0 )
error(FATAL, "printer appears to be offline");
head += count;
return(count);
} /* End of writeblock */
/*****************************************************************************/
getstatus(t)
int t; /* sleep time after sending '\024' */
{
int gotline = FALSE; /* value returned by readline() */
int state = nostatus; /* representation of the current state */
int mesgch; /* to restore mesg[] when tostdout == TRUE */
static int laststate = NOSTATUS; /* last state recognized */
/*
*
* Looks for things coming back from the printer on the communications line, parses
* complete lines retrieved by readline(), and returns an integer representation
* of the current printer status to the caller. If nothing was available a status
* request (control T) is sent to the printer and nostatus is returned to the
* caller (provided quiet isn't TRUE). Interactive mode either never returns from
* readline() or returns FALSE.
*
*/
if ( canread == TRUE && (gotline = readline()) == TRUE ) {
state = parsemesg();
if ( state != laststate || state == UNKNOWN || mesgptr != mesg || debug == ON )
logit("%s", mesg);
if ( tostdout == TRUE && currentstate != START ) {
mesgch = *mesgptr;
*mesgptr = '\0';
fprintf(stdout, "%s", mesg);
fflush(stdout);
*mesgptr = mesgch; /* for ERROR in send() and done() */
} /* End if */
return(laststate = state);
} /* End if */
if ( (quiet == FALSE || currentstate != SEND) &&
(tostdout == FALSE || currentstate == START) && interactive == FALSE ) {
if ( Write(ttyo, "\024", 1) != 1 )
error(FATAL, "printer appears to be offline");
if ( t > 0 ) Rest(t);
} /* End if */
return(nostatus);
} /* End of getstatus */
/*****************************************************************************/
parsemesg()
{
char *e; /* end of printer message in mesg[] */
char *key, *val; /* keyword/value strings in sbuf[] */
char *p; /* for converting to lower case etc. */
int i; /* where *key was found in status[] */
/*
*
* Parsing the lines that readline() stores in mesg[] is messy, and what's done
* here isn't completely correct nor as fast as it could be. The general format
* of lines that come back from the printer (assuming no data loss) is:
*
* str%%[ key: val; key: val; key: val ]%%\n
*
* where str can be most anything not containing a newline and printer reports
* (eg. status or error messages) are bracketed by "%%[ " and " ]%%" strings and
* end with a newline. Usually we'll have the string or printer report but not
* both. For most jobs the leading string will be empty, but could be anything
* generated on a printer and returned over the communications line using the
* PostScript print operator. I'll assume PostScript jobs are well behaved and
* never bracket their messages with "%%[ " and " ]%%" strings that delimit status
* or error messages.
*
* Printer reports consist of one or more key/val pairs, and what we're interested
* in (status or error indications) may not be the first pair in the list. In
* addition we'll sometimes want the value associated with a keyword (eg. when
* key = status) and other times we'll want the keyword (eg. when key = Error or
* Flushing). The last pair isn't terminated by a semicolon and a value string
* often contains many space separated words and it can even include colons in
* meaningful places. I've also decided to continue converting things to lower
* case before doing the lookup in status[]. The isupper() test is for Berkeley
* systems.
*
*/
if ( *(mesgptr = find("%%[ ", mesg)) != '\0' && *(e = find(" ]%%", mesgptr+4)) != '\0' ) {
strcpy(sbuf, mesgptr+4); /* don't change mesg[] */
sbuf[e-mesgptr-4] = '\0'; /* ignore the trailing " ]%%" */
for ( key = strtok(sbuf, " :"); key != NULL; key = strtok(NULL, " :") ) {
if ( (val = strtok(NULL, ";")) != NULL && strcmp(key, "status") == 0 )
key = val;
for ( ; *key == ' '; key++ ) ; /* skip any leading spaces */
for ( p = key; *p; p++ ) /* convert to lower case */
if ( *p == ':' ) {
*p = '\0';
break;
} else if ( isupper(*p) ) *p = tolower(*p);
for ( i = 0; status[i].state != NULL; i++ )
if ( strcmp(status[i].state, key) == 0 )
return(status[i].val);
} /* End for */
} else if ( strcmp(mesg, "CONVERSATION ENDED.\n") == 0 )
return(DISCONNECT);
return(mesgptr == '\0' ? nostatus : UNKNOWN);
} /* End of parsemesg */
/*****************************************************************************/
char *find(str1, str2)
char *str1; /* look for this string */
char *str2; /* in this one */
{
char *s1, *s2; /* can't change str1 or str2 too fast */
/*
*
* Looks for *str1 in string *str2. Returns a pointer to the start of the substring
* if it's found or to the end of string str2 otherwise.
*
*/
for ( ; *str2 != '\0'; str2++ ) {
for ( s1 = str1, s2 = str2; *s1 != '\0' && *s1 == *s2; s1++, s2++ ) ;
if ( *s1 == '\0' )
break;
} /* End for */
return(str2);
} /* End of find */
/*****************************************************************************/
clearline()
{
/*
*
* Reads characters from the input line until nothing's left. Don't do anything if
* we're currently running separate read and write processes.
*
*/
if ( whatami == READWRITE )
while ( readline() != FALSE ) ;
} /* End of clearline */
/*****************************************************************************/
sendsignal(sig)
int sig; /* this goes to the other process */
{
/*
*
* Sends signal sig to the other process if we're running as separate read and
* write processes. Returns the result of the kill if there's someone else to
* signal or -1 if we're running alone.
*
*/
if ( whatami != READWRITE && otherpid > 1 )
return(kill(otherpid, sig));
return(-1);
} /* End of sendsignal */
/*****************************************************************************/
void interrupt(sig)
int sig; /* signal that we caught */
{
/*
*
* Caught a signal - all except joinsig cause the program to quit. joinsig is the
* signal sent by the writer to the reader after all the jobs have been transmitted.
* Used to tell the read process when it can start looking for the end of the job.
*
*/
signal(sig, SIG_IGN);
if ( sig != joinsig ) {
x_stat |= FATAL;
if ( canread == TRUE )
if ( interactive == FALSE )
error(NON_FATAL, "signal %d abort", sig);
else error(NON_FATAL, "quitting");
quit(sig);
} /* End if */
writedone = TRUE;
signal(joinsig, interrupt);
} /* End of interrupt */
/*****************************************************************************/
logit(mesg, a1, a2, a3)
char *mesg; /* control string */
unsigned a1, a2, a3; /* and possible arguments */
{
/*
*
* Simple routine that's used to write a message to the log file.
*
*/
if ( mesg != NULL && fp_log != NULL ) {
fprintf(fp_log, mesg, a1, a2, a3);
fflush(fp_log);
} /* End if */
} /* End of logit */
/*****************************************************************************/
error(kind, mesg, a1, a2, a3)
int kind; /* FATAL or NON_FATAL error */
char *mesg; /* error message control string */
unsigned a1, a2, a3; /* control string arguments */
{
FILE *fp_err;
/*
*
* Called when we've run into some kind of program error. First *mesg is printed
* using the control string arguments a?. If kind is FATAL and we're not ignoring
* errors the program will be terminated. If mesg is NULL or *mesg is the NULL
* string nothing will be printed.
*
*/
fp_err = (fp_log != NULL) ? fp_log : stderr;
if ( mesg != NULL && *mesg != '\0' ) {
fprintf(fp_err, "%s: ", prog_name);
fprintf(fp_err, mesg, a1, a2, a3);
putc('\n', fp_err);
} /* End if */
x_stat |= kind;
if ( kind != NON_FATAL && ignore == OFF )
quit(SIGTERM);
} /* End of error */
/*****************************************************************************/
quit(sig)
int sig;
{
int w;
/*
*
* Makes sure everything is properly cleaned up if there's a signal or FATAL error
* that should cause the program to terminate. The sleep by the write process is
* to help give the reset sequence a chance to reach the printer before we break
* the connection - primarily for printers connected to Datakit. There's a very
* slight chance the reset sequence that's sent to the printer could get us stuck
* here. Simplest solution is don't bother to send it - everything works without it.
* Flushing ttyo would be better, but means yet another system dependent procedure
* in ifdef.c! I'll leave things be for now.
*
* Obscure problem on PS-810 turbos says wait a bit after sending an interrupt.
* Seem to remember the printer getting into a bad state immediately after the
* top was opened when the toner light was on. A sleep after sending the ctrl-C
* seemed to fix things.
*
*/
signal(sig, SIG_IGN);
ignore = ON;
while ( sendsignal(sig) != -1 && (w = wait((int *)0)) != otherpid && w != -1 ) ;
setupstdin(2);
if ( currentstate != NOTCONNECTED ) {
if ( sendctrlC == TRUE ) {
Write(ttyo, "\003", 1);
Rest(1); /* PS-810 turbo problem?? */
} /* End if */
Write(ttyo, "\004", 1);
} /* End if */
alarm(0); /* prevents sleep() loop on V9 systems */
Rest(2);
exit(x_stat);
} /* End of quit */
/*****************************************************************************/
Rest(t)
int t;
{
/*
*
* Used to replace sleep() calls. Only needed if we're running the program as
* a read and write process and don't want to have the read process sleep. Most
* sleeps are in the code because of the non-blocking read used by the single
* process implementation. Probably should be a macro.
*
*/
if ( t > 0 && canwrite == TRUE )
sleep(t);
} /* End of Rest */
/*****************************************************************************/
Read(fd, buf, n)
int fd;
char *buf;
int n;
{
int count;
/*
*
* Used to replace some of the read() calls. Only needed if we're running separate
* read and write processes. Should only be used to replace read calls on ttyi.
* Always returns 0 to the caller if the process doesn't have its READ flag set.
* Probably should be a macro.
*
*/
if ( canread == TRUE ) {
if ( (count = read(fd, buf, n)) == -1 && errno == EINTR )
count = 0;
} else count = 0;
return(count);
} /* End of Read */
/*****************************************************************************/
Write(fd, buf, n)
int fd;
char *buf;
int n;
{
int count;
/*
*
* Used to replace some of the write() calls. Again only needed if we're running
* separate read and write processes. Should only be used to replace write calls
* on ttyo. Always returns n to the caller if the process doesn't have its WRITE
* flag set. Should also probably be a macro.
*
*/
if ( canwrite == TRUE ) {
if ( (count = write(fd, buf, n)) == -1 && errno == EINTR )
count = n;
} else count = n;
return(count);
} /* End of Write */
/*****************************************************************************/
0707070014231405111006440057030057030000011225200522627503600003100000015154post.src/postio/postio.h /*
*
* POSTBEGIN, if it's not NULL, is some PostScript code that's sent to the printer
* before any of the input files. It's not terribly important since the same thing
* can be accomplished in other ways, but this approach is convenient. POSTBEGIN
* is initialized so as to disable job timeouts. The string can also be set on the
* command line using the -P option.
*
*/
#define POSTBEGIN "statusdict /waittimeout 0 put\n"
/*
*
* The following help determine where postio is when it's running - either in the
* START, SEND, or DONE states. Primarily controls what's done in getstatus().
* RADIAN occasionally had problems with two way conversations. Anyway this stuff
* can be used to prevent status queries while we're transmitting a job. Enabled
* by the -q option.
*
*/
#define NOTCONNECTED 0
#define START 1
#define SEND 2
#define DONE 3
/*
*
* Previous versions of postio only ran as a single process. That was (and still
* is) convenient, but meant we could only flow control one direction. Data coming
* back from the printer occasionally got lost, but that didn't often hurt (except
* for lost error messages). Anyway I've added code that lets you split the program
* into separate read and write processes, thereby helping to prevent data loss in
* both directions. It should be particularly useful when you're sending a job that
* you expect will be returning useful data over the communications line.
*
* The next three definitions control what's done with data on communications line.
* The READ flag means the line can be read, while the WRITE flag means it can be
* written. When we're running as a single process both flags are set. I tried to
* overlay the separate read/write process code on what was there and working for
* one process. The implementation isn't as good as it could be, but should be
* safe. The single process version still works, and remains the default.
*
*/
#define READ 1
#define WRITE 2
#define READWRITE 3
/*
*
* Messages generated on the printer and returned over the communications line
* look like,
*
* %%[ status: idle; source: serial 25 ]%%
* %%[ status: waiting; source: serial 25 ]%%
* %%[ status: initializing; source: serial 25 ]%%
* %%[ status: busy; source: serial 25 ]%%
* %%[ status: printing; source: serial 25 ]%%
* %%[ status: PrinterError: out of paper; source: serial 25 ]%%
* %%[ status: PrinterError: no paper tray; source: serial 25 ]%%
*
* %%[ PrinterError: out of paper; source: serial 25 ]%%
* %%[ PrinterError: no paper tray; source: serial 25 ]%%
*
* %%[ Error: undefined; OffendingCommand: xxx ]%%
* %%[ Flushing: rest of job (to end-of-file) will be ignored ]%%
*
* although the list isn't meant to be complete.
*
* The following constants are used to classify the recognized printer states.
* readline() reads complete lines from ttyi and stores them in array mesg[].
* getstatus() looks for the "%%[ " and " ]%%" delimiters that bracket printer
* messages and if found it tries to parse the enclosed message. After the lookup
* one of the following numbers is returned as an indication of the existence or
* content of the printer message. The return value is used in start(), send(),
* and done() to figure out what's happening and what can be done next.
*
*/
#define BUSY 0 /* processing data already sent */
#define WAITING 1 /* printer wants more data */
#define PRINTING 2 /* printing a page */
#define IDLE 3 /* ready to start the next job */
#define ENDOFJOB 4 /* readline() builds this up on EOF */
#define PRINTERERROR 5 /* PrinterError - eg. out of paper */
#define ERROR 6 /* some kind of PostScript error */
#define FLUSHING 7 /* throwing out the rest of the job */
#define INITIALIZING 8 /* printer is booting */
#define DISCONNECT 9 /* from Datakit! */
#define UNKNOWN 10 /* in case we missed anything */
#define NOSTATUS 11 /* no response from the printer */
#define WRITEPROCESS 12 /* dummy states for write process */
#define INTERACTIVE 13 /* and interactive mode */
/*
*
* An array of type Status is used, in getstatus(), to figure out the printer's
* current state. Just helps convert strings representing the current state into
* integer codes that other routines use.
*
*/
typedef struct {
char *state; /* printer's current status */
int val; /* value returned by getstatus() */
} Status;
/*
*
* STATUS is used to initialize an array of type Status that translates the ASCII
* strings returned by the printer into appropriate codes that can be used later
* on in the program. getstatus() converts characters to lower case, so if you
* add any entries make them lower case and put them in before the UNKNOWN entry.
* The lookup terminates when we get a match or when an entry with a NULL state
* is found.
*
*/
#define STATUS \
\
{ \
"busy", BUSY, \
"waiting", WAITING, \
"printing", PRINTING, \
"idle", IDLE, \
"endofjob", ENDOFJOB, \
"printererror", PRINTERERROR, \
"error", ERROR, \
"flushing", FLUSHING, \
"initializing", INITIALIZING, \
NULL, UNKNOWN \
}
/*
*
* The baud rate can be set on the command line using the -b option. If you omit
* it BAUDRATE will be used.
*
*/
#define BAUDRATE B9600
/*
*
* An array of type Baud is used, in routine getbaud(), to translate ASCII strings
* into termio values that represent the requested baud rate.
*
*/
typedef struct {
char *rate; /* string identifying the baud rate */
short val; /* and its termio.h value */
} Baud;
/*
*
* BAUDTABLE initializes the array that's used to translate baud rate requests
* into termio values. It needs to end with an entry that has NULL assigned to
* the rate field.
*
*/
#define BAUDTABLE \
\
{ \
"9600", B9600, \
"B9600", B9600, \
"19200", EXTA, \
"19.2", EXTA, \
"B19200", EXTA, \
"EXTA", EXTA, \
"1200", B1200, \
"B1200", B1200, \
"2400", B2400, \
"B2400", B2400, \
"B4800", B4800, \
"4800", B4800, \
"38400", EXTB, \
"38.4", EXTB, \
"B38400", EXTB, \
"EXTB", EXTB, \
NULL, B9600 \
}
/*
*
* A few miscellaneous definitions. BLOCKSIZE is the default size of the buffer
* used for reading the input files (changed with the -B option). MESGSIZE is the
* size of the character array used to store printer status lines - don't make it
* too small!
*
*/
#define BLOCKSIZE 2048
#define MESGSIZE 512
/*
*
* Some of the non-integer valued functions used in postio.c.
*
*/
char *find();
char *malloc();
char *strtok();
0707070014231402051006400057030057030000011227430522633076100003200000004703post.src/postio/postio.mk MAKE=/bin/make
MAKEFILE=postio.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
DKLIB=-ldk
DKHOST=FALSE
DKSTREAMS=FALSE
#
# Need dk.h and libdk.a for Datakit support on System V. We recommend you put
# them in standard places. If it's not possible define DKHOSTDIR (below) and
# try uncommenting the following lines:
#
# DKHOSTDIR=/usr
# CFLAGS=$(CFLGS) -D$(SYSTEM) -I$(COMMONDIR) -I$(DKHOSTDIR)/include
# EXTRA=-Wl,-L$(DKHOSTDIR)/lib
#
HFILES=postio.h\
ifdef.h\
$(COMMONDIR)/gen.h
OFILES=postio.o\
ifdef.o\
slowsend.o
all : postio
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
cp postio $(POSTBIN)/postio
@chmod 755 $(POSTBIN)/postio
@chgrp $(GROUP) $(POSTBIN)/postio
@chown $(OWNER) $(POSTBIN)/postio
cp postio.1 $(MAN1DIR)/postio.1
@chmod 644 $(MAN1DIR)/postio.1
@chgrp $(GROUP) $(MAN1DIR)/postio.1
@chown $(OWNER) $(MAN1DIR)/postio.1
clean :
rm -f *.o
clobber : clean
rm -f postio
postio ::
@CFLAGS="$(CFLAGS)"; export CFLAGS; \
DKLIB=" "; export DKLIB; \
if [ "$(SYSTEM)" != V9 ]; \
then \
if [ "$(DKHOST)" = TRUE ]; then \
if [ "$(DKSTREAMS)" != FALSE ]; then \
if [ "$(DKSTREAMS)" = TRUE ]; \
then CFLAGS="$$CFLAGS -DDKSTREAMS=\\\"dknetty\\\""; \
else CFLAGS="$$CFLAGS -DDKSTREAMS=\\\"$(DKSTREAMS)\\\""; \
fi; \
fi; \
CFLAGS="$$CFLAGS -DDKHOST"; export CFLAGS; \
DKLIB=-ldk; export DKLIB; \
SYSTEM=SYSV; export SYSTEM; \
fi; \
else DKLIB=-lipc; export DKLIB; \
fi; \
CFLAGS="$$CFLAGS -D$$SYSTEM"; export CFLAGS; \
$(MAKE) -e -f $@.mk compile
compile : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postio $(OFILES) $(EXTRA) $(DKLIB)
postio.o : $(HFILES)
slowsend.o : postio.h $(COMMONDIR)/gen.h
ifdef.o : ifdef.h $(COMMONDIR)/gen.h
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^DKLIB=.*'DKLIB=$(DKLIB)'" \
-e "s'^DKHOST=.*'DKHOST=$(DKHOST)'" \
-e "s'^DKSTREAMS=.*'DKSTREAMS=$(DKSTREAMS)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014231405131006440057030057030000011225400522627503700003300000006206post.src/postio/slowsend.c /*
*
* Stuff that slows the transmission of jobs to PostScript printers. ONLY use it
* if you appear to be having trouble with flow control. The idea is simple - only
* send a significant amount of data when we're certain the printer is in the
* WAITING state. Depends on receiving status messages and only works when the
* program is run as a single process. What's done should stop printer generated
* XOFFs - provided our input buffer (ie. blocksize) is sufficiently small. Was
* originally included in the postio.tmp directory, but can now be requested with
* the -S option. Considered eliminating this code, but some printers still depend
* on it. In particular Datakit connections made using Datakit PVCs and DACUs seem
* to have the most problems. Much of the new stuff that was added can't work when
* you use this code and will be automatically disabled.
*
*/
#include <stdio.h>
#include "gen.h"
#include "postio.h"
extern char *block;
extern int blocksize;
extern int head;
extern int tail;
extern char *line;
extern char mesg[];
extern int ttyo;
/*****************************************************************************/
slowsend(fd_in)
int fd_in; /* next input file */
{
/*
*
* A slow version of send() that's very careful about when data is sent to the
* printer. Should help prevent overflowing the printer's input buffer, provided
* blocksize is sufficiently small (1024 should be safe). It's a totally kludged
* up routine that should ONLY be used if you have constant transmission problems.
* There's really no way it will be able to drive a printer much faster that about
* six pages a minute, even for the simplest jobs. Get it by using the -S option.
*
*/
while ( readblock(fd_in) )
switch ( getstatus(0) ) {
case WAITING:
writeblock(blocksize);
break;
case BUSY:
case IDLE:
case PRINTING:
writeblock(30);
break;
case NOSTATUS:
case UNKNOWN:
break;
case PRINTERERROR:
sleep(30);
break;
case ERROR:
fprintf(stderr, "%s", mesg); /* for csw */
error(FATAL, "PostScript Error");
break;
case FLUSHING:
error(FATAL, "Flushing Job");
break;
case DISCONNECT:
error(FATAL, "Disconnected - printer may be offline");
break;
default:
sleep(2);
break;
} /* End switch */
} /* End of send */
/*****************************************************************************/
static writeblock(num)
int num; /* most bytes we'll write */
{
int count; /* bytes successfully written */
/*
*
* Called from send() when it's OK to send the next block to the printer. head
* is adjusted after the write, and the number of bytes that were successfully
* written is returned to the caller.
*
*/
if ( num > tail - head )
num = tail - head;
if ( (count = write(ttyo, &block[head], num)) == -1 )
error(FATAL, "error writing to %s", line);
else if ( count == 0 )
error(FATAL, "printer appears to be offline");
head += count;
return(count);
} /* End of writeblock */
/*****************************************************************************/
0707070014231405141006440057030057030000011225440522627503700003600000003377post.src/postio/postio.mk.old MAKE=/bin/make
MAKEFILE=postio.mk
SYSTEM=V9
VERSION=3.3.1
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
COMMONDIR=../common
DKLIB=-lipc
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -D$(SYSTEM) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
#
# Need dk.h and libdk.a for Datakit support on System V. We recommend you put
# them in standard places. If it's not possible define DKHOSTDIR (below) and
# try uncommenting the following lines:
#
# DKHOSTDIR=/usr
# CFLAGS=$(CFLGS) -D$(SYSTEM) -I$(COMMONDIR) -I$(DKHOSTDIR)/include
# EXTRA=-Wl,-L$(DKHOSTDIR)/lib
#
HFILES=postio.h\
ifdef.h\
$(COMMONDIR)/gen.h
OFILES=postio.o\
ifdef.o\
slowsend.o
all : postio
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
cp postio $(POSTBIN)/postio
@chmod 755 $(POSTBIN)/postio
@chgrp $(GROUP) $(POSTBIN)/postio
@chown $(OWNER) $(POSTBIN)/postio
cp postio.1 $(MAN1DIR)/postio.1
@chmod 644 $(MAN1DIR)/postio.1
@chgrp $(GROUP) $(MAN1DIR)/postio.1
@chown $(OWNER) $(MAN1DIR)/postio.1
clean :
rm -f *.o
clobber : clean
rm -f postio
postio : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postio $(OFILES) $(EXTRA) $(DKLIB)
postio.o : $(HFILES)
slowsend.o : postio.h $(COMMONDIR)/gen.h
ifdef.o : ifdef.h $(COMMONDIR)/gen.h
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^CFLGS=.*'CFLGS=$(CFLGS)'" \
-e "s'^DKLIB=.*'DKLIB=$(DKLIB)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014230006040407550057030057030000020074410522633076300002000000000000post.src/postmd 0707070014230006051006440057030057030000010074420522627503700002700000002320post.src/postmd/README
A program that displays a matrix as a gray scale image on PostScript
printers. May be useful if you have a large matrix and want a simple
way to look for patterns. Expect a 600x600 matrix is an optimistic
upper limit on a 300 dpi printers using 5 shades of gray and 8.5x11
inch paper.
Matrix elements are a series of floating point numbers arranged in
the input file in row major order. By default each matrix is assumed
to be square and the number of rows (and columns) is set to the square
root of the number of elements in the input file. White space, including
newlines, is not used to determine the matrix dimensions. Each matrix
element is mapped into an integer in the range 0 to 255 (254 by default)
and PostScript's image operator maps that integer into a gray scale
appropriate for the printer.
The mapping from floating point matrix elements to integers is controlled
by an interval list and grayscale map. The default interval list is
"-1,0,1" which partitions the real line into 7 regions. The default
grayscale map gets darker as the regions move from left to right along
the real line. The -i option changes the interval list and the -g option
modifies the grayscale mapping. Check the man page for more details.
0707070014230004201006400057030057030000010063100522633076300003100000016617post.src/postmd/postmd.1 .ds dQ /usr/lib/postscript
.TH POSTMD 1 "DWB 3.2"
.SH NAME
.B postmd
\- matrix display program for PostScript printers
.SH SYNOPSIS
\*(mBpostmd\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B postmd
reads a series of floating point numbers from
.IR files ,
translates them into a PostScript gray scale image,
and writes the results on the standard output.
In a typical application the numbers might be
the elements of a large matrix,
written in row major order,
while the printed image could help locate
patterns in the matrix.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-b num
Pack the bitmap in the output file using
.I num
byte patterns.
A value of 0 turns off all packing of the output file.
By default
.I num
is 6.
.TP
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP
.OP \-d dimen
Sets the default matrix dimensions for all input
.I files
to
.IR dimen .
The
.I dimen
string can be given as rows or rows\^\(mu\^columns.
If columns is omitted it will be set to rows.
By default
.B postmd
assumes each matrix is square and sets the number of rows
and columns to the square root of the number of elements in
each input file.
.TP
.OP \-g list
.I list
is a comma- or space-separated string of integers, each lying between
0 and 255 inclusive,
that assigns PostScript gray scales to the regions of the real line
selected by the
.OP \-i
option.
255 corresponds to white and 0 to black.
.B postmd
assigns a default gray scale that omits white (i.e., 255) and gets
darker as the regions move from left to right along the real line.
.TP
.OP \-i list
.I list
is a comma- or space-separated string of
.I N
floating point numbers that
partition the real line into
.RI 2 N +1
regions.
The
.I list
must be given in increasing numerical order.
The partitions are used to map floating point numbers read from the input
.I files
into gray scale integers that are assigned automatically by
.B postmd
or arbitrarily selected using the
.OP \-g
option.
The default interval
.I list
is ``\*(mB\-1,0,1\fP'' which partions the real line into 7 regions.
.TP
.OP \-m num
Magnify each logical page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which by default is located at the center of
each page.
The default magnification is 1.0.
.TP
.OP \-n num
Print
.I num
logical pages on each piece of paper,
where
.I num
can be any positive integer.
By default
.I num
is set to 1.
.TP
.OP \-o list
Print pages whose numbers are given in the comma separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP
.OP \-w window
.I window
is a comma- or space-separated list of four positive integers that
select the upper left and lower right corners of a submatrix from
each of the input
.IR files .
Row and column indices start at 1 in the upper left corner and the
numbers in the input
.I files
are assumed to be written in row major order.
By default the entire matrix is displayed.
.TP
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed at the
center of the page, with positive
x to the right and positive y up the page.
Positive
.I num
moves everything right.
The default offset is 0 inches.
.TP
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves everything up the page.
The default offset is 0.
.TP
.OP \-E name
Set the character encoding for text fonts to
.IR name .
Requesting
.I name
means include file
.MI \*(dQ/ name .enc \f1.
A nonexistent encoding file is silently ignored.
The default selects file
.MR \*(dQ/Default.enc .
.TP
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/postmd.ps .
.PP
Three options allow insertion of arbitrary PostScript
at controlled points in the translation process:
.TP 0.75i
.OP \-C file
Copy
.I file
to the output file;
.I file
must contain legitimate PostScript.
.TP
.OP \-P string
Include
.I string
in the output file;
.I string
must be legitimate PostScript.
.TP
.OP \-R action
Requests special
.I action
(e.g.,
.MR manualfeed )
on a per page or global basis.
The
.I action
string can be given as
.IR request ,
.IM request : page\f1\|,
or
.IM request : page : file\f1\|.
If
.I page
is omitted or given as 0, the request
applies to all pages.
If
.I file
is omitted, the request
lookup is done in
.MR \*(dQ/ps.requests .
.PP
Only one matrix is displayed on each logical page,
and each of the input
.I files
must contain complete descriptions of exactly one matrix.
Matrix elements are floating point numbers arranged in row major order in
each input file.
White space, including newlines, is not used to determine matrix
dimensions.
By default
.B postmd
assumes each matrix is square and sets the number of rows and columns
to the square root of the number of elements in the input file.
Supplying default dimensions on the command line using the
.OP \-d
option overrides this default behavior, and in that case the
dimensions apply to all input
.IR files .
.PP
An optional header can be supplied with each input file and is used
to set the matrix dimensions, the partition of the real line, the gray scale
map, and a window into the matrix.
The header consists of keyword/value pairs, each on a separate line.
It begins on the first line of each input file and ends with the
first unrecognized string, which should be the first matrix element.
Values set in the header take precedence, but only apply to the
current input file.
Recognized header keywords are
.MR dimension ,
.MR interval ,
.MR grayscale ,
and
.MR window .
The syntax of the value string that follows each keyword parallels what is
accepted by the
.OP \-d ,
.OP \-i ,
.OP \-g ,
and
.OP \-w
options.
.SH EXAMPLES
For example, suppose
.I file
initially contains the 1000 numbers
in a 20\(mu50 matrix.
Then the command line:
.EX
postmd -d20x50 -i"-100 100" -g0,128,254,128,0 \f2file
.EE
and prepending the header,
.EX
dimension 20x50
interval -100.0 .100e+3
grayscale 0 128 254 128 0
.EE
to
.I file
and typing the command line:
.EX
postmd \f2file
.EE
produce exactly the same output.
The interval list partitions the real line into five regions and
the gray scale list maps numbers less than \-100 or greater than 100
into 0 (i.e., black), numbers equal to \-100 or 100 into 128
(i.e., 50 percent
black), and numbers between \-100 and 100 into 254 (i.e., almost white).
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully processed.
.SH WARNINGS
The largest matrix that can be adequately displayed is a function
of the interval and gray scale lists, the printer resolution,
and the paper size.
A 600\(mu600 matrix is an optimistic upper bound for a two element interval
list (i.e. five regions) using 8.5\(mu11 inch paper on a 300 dpi printer.
.PP
Using white (i.e., 255) in a gray scale list is not recommended and will not
show up in the legend and bar graph that
.B postmd
displays below each image.
.SH FILES
.MW \*(dQ/postmd.ps
.br
.MW \*(dQ/forms.ps
.br
.MW \*(dQ/ps.requests
.SH SEE ALSO
.BR dpost (1),
.BR postdaisy (1),
.BR postdmd (1),
.BR postio (1),
.BR postprint (1),
.BR postreverse (1),
.BR posttek (1),
.BR psencoding (1)
0707070014230006071006440057030057030000010111200522627503700003100000103300post.src/postmd/postmd.c /*
*
* postmd - matrix display program for PostScript printers.
*
* A simple program that can be used to display a matrix as a gray scale image on
* a PostScript printer using the image operator. Much of the code was borrowed
* from postdmd, the bitmap display program DMD screen dumps. May help if you have
* a large matix (of floating point numbers) and want a simple way to look for
* patterns.
*
* Matrix elements are a series of floating point numbers arranged in the input
* file in row major order. The actual matrix elements can be preceeded by a simple
* header that sets things like the matrix dimensions, interval list, and possibly
* a window into the matrix that we'll use for display. The dimension statement is
* perhaps the most important. If present it determines the number of rows and
* columns in the matrix. For example, either of the following defines a 50x50
* matrix,
*
* dimension 50
* dimension 50x50
*
* If no dimension statement appears in the input file, the matrix is assumed to
* be square, and the number of rows (and columns) is set to the square root of
* the number of elements in the input file.
*
* Each matrix element is mapped into an integer in the range 0 to 255 (actually
* 254) and PostScript's image operator then maps that number into a gray scale
* appropriate for the particular printer. The mapping from the floating point
* matrix elements to integers is accomplished using an interval list that can be
* set using the -i option. The format of the interval string is,
*
* num1,num2,num3,...,numn
*
* where each num is a floating point number. The list must be given in increasing
* numerical order. A list of n numbers partitions the real line into 2n+1 regions
* given as,
*
* region1 element < num1
* region2 element = num1
* region3 element < num2
* region4 element = num2
* .
* .
* .
* region2n element = numn
* region2n+1 element > numn
*
* Every number in a region is mapped one integer in the range 0 to 254, and that
* number, when displayed on a printer using the image operator, prints as a square
* filled with a gray shade that reflects the integer that was chosen. 0 maps to
* black and 255 maps to white (which by default will not be used).
*
* The default gray scale gets darker as the region number increases, but can be
* changed by supplying a gray scale list with the -g option or in the optional
* matrix header. The color map is again a comman or space separated list that
* looks like,
*
* color1,color2, ... ,color2n+1
*
* where color1 applies to region 1 and color2n+1 applies to region2n+1. Each
* number in the list should be an integer between 0 and 255. If less than 2n+1
* colors are given default assignments will be used for missing regions.
*
* The size of the matrix that we can display reasonably well is a function of the
* number of elements in the interval list, paper size, and printer resolution.
* For example a 300dpi printer using 8.5x11 inch paper gives us an image area of
* about 2400x2400 pixels. An interval list of two numbers generates five separate
* regions and will therefore need that many different shades of gray. Since we're
* not using white we'll need to partion our image area into 4x4 pixel squares,
* and that means a 600x600 matrix is about as big as we can go. In practice that's
* optimistic, but the argument illustrates some of the limitations.
*
* A submatrix can be selected to display by windowing into the matrix. The window
* list can be given using the -w option or can be set in the optional header that
* can preceed each matrix. The list should be a comma or space separated list
* that looks like,
*
* lower-column, lower-row, upper-column, upper-row
*
* where each element in the list must be a positive integer. Rows and columns in
* the input matrix start at 1. The dimension of the displayed window will be from
* lower-column to upper-column and from lower-row to upper-row inclusive.
*
* The encoding produced by the program is essentially identical to what's done
* by postdmd. See the comments at the beginning of that program if you need more
* details. The prologue also shares much of the same code.
*
* The PostScript prologue is copied from *prologue before any of the input files
* are translated. The program expects that the following PostScript procedures
* are defined in that file:
*
* setup
*
* mark ... setup -
*
* Handles special initialization stuff that depends on how this program
* was called. Expects to find a mark followed by key/value pairs on the
* stack. The def operator is applied to each pair up to the mark, then
* the default state is set up.
*
* pagesetup
*
* page pagesetup -
*
* Does whatever is needed to set things up for the next page. Expects
* to find the current page number on the stack.
*
* bitmap
*
* columns rows bitmap -
*
* Prints the image that's read as a hex string from standard input. The
* image consists of rows lines, each of which includes columns elements.
* Eight bits per pixel are used to encode the matrix elements.
*
* labelmatrix
*
* matrixname matrixlimits labelmatrix -
*
* Prints string matrixname just below the lower left corner of the image
* and prints string martixlimits near the lower right corner. Outlines
* the entire image with a (one pixel wide) box and then draws tick marks
* along the top and left sides of the image. One tick mark is printed
* for every ten elements.
*
* legend
*
* n1 ... nN N c1 m1 ... cM mM total regions legend -
*
* Prints the legend as a bar graph below the matrix image. n1 ... nN are
* strings that represent the interval list. c1 m1 ... cm mM are pairs
* that consist of a region's color and the statistics count. Actually
* the c's are trivial procedures that just leave a one character string
* on the stack when they're executed by image - which is the way the
* bar graph is drawn.
*
* done
*
* done
*
* Makes sure the last page is printed. Only needed when we're printing
* more than one page on each sheet of paper.
*
* Many default values, like the magnification and orientation, are defined in
* the prologue, which is where they belong. If they're changed (by options), an
* appropriate definition is made after the prologue is added to the output file.
* The -P option passes arbitrary PostScript through to the output file. Among
* other things it can be used to set (or change) values that can't be accessed by
* other options.
*
*/
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for the prologue */
#include "ext.h" /* external variable declarations */
#include "postmd.h" /* special matrix display definitions */
char *optnames = "a:b:c:d:g:i:m:n:o:p:w:x:y:A:C:E:J:L:P:R:DI";
char *prologue = POSTMD; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
char *temp_dir = TEMPDIR; /* temp directory for copying stdin */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
int bytespp = 6; /* bytes per pattern - on output */
int dostats = ON; /* permanent statistics flag */
int nxtstat = ON; /* and the one for the next matrix */
char *interval = DFLTILIST; /* string representations of the interval */
char *colormap = NULL; /* color map */
char *window = NULL; /* and window lists */
char *matrixname = "pipe.end"; /* name for the next plot */
Ilist ilist[128]; /* active interval list and color map */
int next = 0; /* one past the last element in ilist[] */
int regions; /* an index assigned to the last region */
int wlist[4]; /* upper left and lower right corners */
int page = 0; /* last page we worked on */
int printed = 0; /* and the number of pages printed */
int dfltrows = 0; /* default rows */
int dfltcols = 0; /* and columns - changed by -d option */
int rows; /* real number of rows */
int columns; /* and columns in the matrix */
int patcount = 0; /* will be set to columns * rows */
double element; /* next matrix element */
char *raster = NULL; /* next raster line */
char *rptr; /* next free byte in raster */
char *eptr; /* one past the last byte in raster */
FILE *fp_in = stdin; /* read from this file */
FILE *fp_out = stdout; /* and write stuff here */
FILE *fp_acct = NULL; /* for accounting data */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* Bitmap display program for matrices. Only one matrix is allowed per input file,
* and each one will be displayed on a page by itself. Input files consist of an
* optional header followed by floating point numbers that represent the matrix
* elements - in row major order.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* really just for error messages */
init_signals(); /* sets up interrupt handling */
header(); /* PostScript header comments */
options(); /* handle the command line options */
setup(); /* for PostScript */
arguments(); /* followed by each input file */
done(); /* print the last page etc. */
account(); /* job accounting data */
exit(x_stat); /* not much could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Make sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
signal(SIGFPE, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
/*
*
* Scans the option list looking for things, like the prologue file, that we need
* right away but could be changed from the default. Doing things this way is an
* attempt to conform to Adobe's latest file structuring conventions. In particular
* they now say there should be nothing executed in the prologue, and they have
* added two new comments that delimit global initialization calls. Once we know
* where things really are we write out the job header, follow it by the prologue,
* and then add the ENDPROLOG and BEGINSETUP comments.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
/*
*
* Reads and processes the command line options. Added the -P option so arbitrary
* PostScript code can be passed through. Expect it could be useful for changing
* definitions in the prologue for which options have not been defined.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'b': /* bytes per pattern - on output */
bytespp = atoi(optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'd': /* default matrix dimensions */
sscanf(optarg, "%dx%d", &dfltrows, &dfltcols);
break;
case 'g': /* set the colormap (ie. grayscale) */
colormap = optarg;
break;
case 'i': /* matrix element interval list */
interval = optarg;
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'w': /* set the window */
window = optarg;
break;
case 'x': /* shift things horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* force job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding */
fontencoding = optarg;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* special global or page level request */
saverequest(optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
setup()
{
/*
*
* Handles things that must be done after the options are read but before the
* input files are processed.
*
*/
writerequest(0, stdout); /* global requests eg. manual feed */
setencoding(fontencoding);
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) {
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
} /* End of setup */
/*****************************************************************************/
arguments()
{
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll process stdin.
*
*/
if ( argc < 1 )
matrix();
else { /* at least one argument is left */
while ( argc > 0 ) {
matrixname = *argv;
if ( strcmp(*argv, "-") == 0 ) {
fp_in = stdin;
matrixname = "pipe.end";
} else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
matrix();
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End else */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Finished with all the input files, so mark the end of the pages, make sure the
* last page is printed, and restore the initial environment.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s %d\n", PAGES, printed);
if ( temp_file != NULL )
unlink(temp_file);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Writes an accounting record to *fp_acct provided it's not NULL. Accounting
* is requested using the -A or -J options.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
matrix()
{
int count; /* pattern repeats this many times */
long total; /* expect this many patterns */
/*
*
* Reads a matrix from *fp_in, translates it into a PostScript gray scale image,
* and writes the result on stdout. For now only one matrix is allowed per input
* file. Matrix elements are floating point numbers arranged in row major order
* in the input file. In addition each input file may contain an optional header
* that defines special things like the dimension of the matrix, a window into
* the matrix that will be displayed, and an interval list.
*
* If we're reading from stdin we first make a copy in a temporary file so we can
* can properly position ourselves after we've looked for the header. Originally
* wasn't always making a copy of stdin, but I've added a few things to what's
* accepted in the header and this simplifies the job. An alternative would be
* to always require a header and mark the end of it by some string. Didn't like
* that approach much - may fix things up later.
*
*/
if ( fp_in == stdin ) /* make a copy so we can seek etc. */
copystdin();
rows = dfltrows; /* new dimensions for the next matrix */
columns = dfltcols;
buildilist(interval); /* build the default ilist[] */
addcolormap(colormap); /* add the colormap - if not NULL */
setwindow(window); /* and setup the initial matrix window */
nxtstat = dostats; /* want statistics? */
getheader(); /* matrix dimensions at the very least */
dimensions(); /* make sure we have the dimensions etc. */
patcount = 0;
total = rows * columns;
eptr = rptr + (wlist[2] - wlist[0] + 1);
redirect(++page);
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fprintf(fp_out, "/saveobj save def\n");
writerequest(printed+1, fp_out);
fprintf(fp_out, "%d %d bitmap\n", wlist[2] - wlist[0] + 1, wlist[3] - wlist[1] + 1);
while ( patcount != total && fscanf(fp_in, "%f", &element) != EOF ) {
if ( inwindow() ) *rptr++ = mapfloat(element);
if ( ++patcount % columns == 0 )
if ( inrange() )
putrow();
} /* End while */
if ( total != patcount )
error(FATAL, "matrix format error");
labelmatrix();
if ( fp_out == stdout ) printed++;
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
} /* End of matrix */
/*****************************************************************************/
copystdin()
{
int fd_out; /* for the temporary file */
int fd_in; /* for stdin */
int buf[512]; /* buffer for reads and writes */
int count; /* number of bytes put in buf */
/*
*
* If we're reading the matrix from stdin and the matrix dimension isn't set by
* a dimension statement at the beginning of the file we'll copy stdin to a
* temporary file and reset *fp_in so reads come from the temp file. Simplifies
* reading the header (if present), but is expensive.
*
*/
if ( temp_file != NULL ) /* been here already */
unlink(temp_file);
if ( (temp_file = tempnam(temp_dir, "post")) == NULL )
error(FATAL, "can't generate temp file name");
if ( (fd_out = creat(temp_file, 0660)) == -1 )
error(FATAL, "can't create %s", temp_file);
fd_in = fileno(stdin);
while ( (count = read(fd_in, buf, sizeof(buf))) > 0 )
if ( write(fd_out, buf, count) != count )
error(FATAL, "error writing to %s", temp_file);
close(fd_out);
if ( (fp_in = fopen(temp_file, "r")) == NULL )
error(FATAL, "can't open %s", temp_file);
} /* End of copystdin */
/*****************************************************************************/
getheader()
{
char buf[512]; /* temporary string space */
char *cmap = NULL; /* remember header colormap list */
long pos; /* for seeking back to first element */
/*
*
* Looks for the optional header information at the beginning of the input file,
* reads it if it's there, and sets *fp_in to be just past the header. That should
* be the beginning of the matrix element list. The recognized header keywords are
* dimension, interval, colormap (or grayscale), window, name, and statistics. All
* are optional, but may be useful in a spooling environment when the user doesn't
* doesn't actually run the translator.
*
* The dimension statement specifies the number of rows and columns. For example
* either of the following two lines define a 50 by 50 element matrix,
*
* dimension 50
* dimension 50x50
*
* The first integer is the number of rows and the second, if given, is the number
* of columns. If columns are missing from the dimension statement we assume the
* matrix is square.
*
* interval can be used to redefine the interval list used for mapping floating
* point numbers into integers in the range 0 to 254. The string following the
* interval keyword has the same format as the -i option. For example to set the
* interval list to -1, 0, and 1 you can add the line,
*
* interval -1,0,1
*
* The numbers are floats given in increasing order, and separated by commas or
* blanks. The last interval list in a header takes precedence.
*
* colormap can be used to redefine the grayscale list. The string following
* the colormap keyword has the same format as the -g option. For example
*
* colormap 0,50,100,150,200,250
* or grayscale 0,50,100,150,200,250
*
* The window keyword can be used to select a submatrix. The numbers following
* window are the upper left and lower right matix coordinates. May not be
* implemented yet but shouldn't be difficult. For example
*
* window 10 10 40 40
*
* selects the submatrix with corners at (10, 10) and (40, 40). The edges of the
* window are included in the display.
*
* The name keyword can be used to define the title of the display. For example,
*
* name Plot Of Matrix 1
*
* prints the string "Plot Of Matrix 1" at the top of the page. Everything up to
* the next newline is taken as the name string.
*
*/
pos = ftell(fp_in);
while ( fscanf(fp_in, "%s", buf) != EOF ) {
if ( strncmp(buf, "dimension", strlen("dimension")) == 0 )
fscanf(fp_in, "%dx%d", &rows, &columns);
else if ( strncmp(buf, "window", strlen("window")) == 0 ) {
fgets(buf, sizeof(buf), fp_in);
setwindow(buf);
} else if ( strncmp(buf, "name", strlen("name")) == 0 ) {
fgets(buf, sizeof(buf), fp_in);
matrixname = savestring(buf);
} else if ( strncmp(buf, "colormap", strlen("colormap")) == 0 ) {
fgets(buf, sizeof(buf), fp_in);
cmap = savestring(buf);
} else if ( strncmp(buf, "grayscale", strlen("grayscale")) == 0 ) {
fgets(buf, sizeof(buf), fp_in);
cmap = savestring(buf);
} else if ( strncmp(buf, "interval", strlen("interval")) == 0 ) {
fgets(buf, sizeof(buf), fp_in);
buildilist(buf);
} else if ( strncmp(buf, "statistics", strlen("statistics")) == 0 ) {
fscanf(fp_in, "%s", buf);
if ( strcmp(buf, "on") == 0 || strcmp(buf, "ON") == 0 )
nxtstat = ON;
else nxtstat = OFF;
} else break;
pos = ftell(fp_in);
} /* End while */
addcolormap(cmap); /* must happen last */
fseek(fp_in, pos, 0); /* back to the start of the matrix */
} /* End of getheader */
/*****************************************************************************/
dimensions()
{
char buf[100]; /* temporary storage for the elements */
long count = 0; /* number of elements in the matrix */
long pos; /* matrix elements start here */
/*
*
* Need to know the dimensions of the matrix before we can go any farther. If
* rows and columns are still 0 we'll read the entire input file, starting from
* the current position, count the number of elements, take the square root of it,
* and use it as the number of rows and columns. Then we seek back to the start
* of the real matrix, make sure columns is set, and allocate enough memory for
* storing each raster line. After we're certain we've got the number of rows and
* columns we check the window coordinates, and if they're not legitimate they're
* reset to cover the entire matrix.
*
*/
if ( rows == 0 ) {
pos = ftell(fp_in);
while ( fscanf(fp_in, "%s", buf) != EOF )
count++;
rows = sqrt((double) count);
fseek(fp_in, pos, 0);
} /* End if */
if ( columns <= 0 ) columns = rows;
if ( raster != NULL ) free(raster);
if ( (rptr = raster = malloc(columns)) == NULL )
error(FATAL, "no memory");
eptr = rptr + columns;
if ( rows <= 0 || columns <= 0 )
error(FATAL, "bad matrix dimensions");
if ( wlist[0] > wlist[2] || wlist[1] > wlist[3] ) {
wlist[0] = wlist[1] = 1;
wlist[2] = columns;
wlist[3] = rows;
} /* End if */
} /* End of dimensions */
/*****************************************************************************/
buildilist(list)
char *list; /* use this as the interval list */
{
static char *templist = NULL; /* a working copy of the list */
char *ptr; /* next number in *templist */
int i; /* loop index - for checking the list */
/*
*
* Reads string *list and builds up the ilist[] that will be used in the next
* matrix. Since strtok() modifies the string it's parsing we make a copy first.
* The format of the interval list is described in detail in the comments at the
* beginning of this program. Basically consists of a comma or space separated
* list of floating point numbers that must be given in increasing numerical order.
* The list determines how floating point numbers are mapped into integers in the
* range 0 to 254.
*
*/
if ( templist != NULL ) /* free the space used by the last list */
free(templist);
while ( isascii(*list) && isspace(*list) )
list++;
for ( ptr = list, regions = 3; *ptr != '\0'; ptr++ ) {
if ( *ptr == ',' || *ptr == '/' || isspace(*ptr) )
regions += 2;
while ( isascii(*ptr) && isspace(*ptr) ) ptr++;
} /* End for */
next = 0;
templist = savestring(list);
ptr = strtok(templist, ",/ \t\n");
while ( ptr != NULL ) {
ilist[next].count = 0;
ilist[next++].color = 254 * (regions - 1 - next) / (regions - 1);
ilist[next].val = atof(ptr);
ilist[next].count = 0;
ilist[next++].color = 254 * (regions - 1 - next) / (regions - 1);
ptr = strtok(NULL, ",/ \t\n");
} /* End while */
ilist[next].count = 0;
ilist[next].color = 254 * (regions - 1 - next) / (regions - 1);
if ( next == 0 ) /* make sure we have a list */
error(FATAL, "missing interval list");
for ( i = 3; i < next; i += 2 ) /* that's in increasing numerical order */
if ( ilist[i].val <= ilist[i-2].val )
error(FATAL, "bad interval list");
} /* End of buildilist */
/*****************************************************************************/
addcolormap(list)
char *list; /* use this color map */
{
static char *templist = NULL; /* a working copy of the color list */
char *ptr; /* next color in *templist */
int i = 0; /* assigned to this region in ilist[] */
/*
*
* Assigns the integers in *list to the color field for the regions defined in
* ilist[]. Assumes ilist[] has already been setup.
*
*/
if ( list != NULL ) {
if ( templist != NULL )
free(templist);
templist = savestring(list);
ptr = strtok(templist, ",/ \t\n");
while ( ptr != NULL ) {
ilist[i++].color = atoi(ptr) % 256;
ptr = strtok(NULL, ",/ \t\n");
} /* End while */
} /* End if */
} /* End of addcolormap */
/*****************************************************************************/
setwindow(list)
char *list; /* corners of window into the matrix */
{
static char *templist = NULL; /* a working copy of the window list */
char *ptr; /* next window coordinate in *templist */
int i = 0; /* assigned to this region in wlist[] */
/*
*
* Sets up an optional window into the matrix.
*
*/
wlist[0] = wlist[1] = 1;
wlist[2] = wlist[3] = 0;
if ( list != NULL ) {
if ( templist != NULL )
free(templist);
templist = savestring(list);
ptr = strtok(templist, ",/ \t\n");
while ( ptr != NULL ) {
wlist[i++] = atoi(ptr);
ptr = strtok(NULL, ",/ \t\n");
} /* End while */
} /* End if */
} /* End of setwindow */
/*****************************************************************************/
inwindow()
{
int r; /* row of the patcount element */
int c; /* column of the patcount element */
/*
*
* Checks if the patcount element of the matrix is in the window.
*
*/
r = (patcount/columns) + 1;
c = (patcount%columns) + 1;
return((c >= wlist[0]) && (r >= wlist[1]) && (c <= wlist[2]) && (r <= wlist[3]));
} /* End of inwindow */
/*****************************************************************************/
inrange()
{
/*
*
* Checks if the current row lies in the window. Used right before we output the
* raster lines.
*
*/
return(((patcount/columns) >= wlist[1]) && ((patcount/columns) <= wlist[3]));
} /* End of inrange */
/*****************************************************************************/
mapfloat(element)
double element; /* floating point matrix element */
{
int i; /* loop index */
/*
*
* Maps element into an integer in the range 0 to 255, and returns the result to
* the caller. Mapping is done using the color map that was saved in ilist[]. Also
* updates the count field for the region that contains element - not good!
*
*/
for ( i = 1; i < next && ilist[i].val < element; i += 2 ) ;
if ( i > next || element < ilist[i].val )
i--;
ilist[i].count++;
return(ilist[i].color);
} /* End of mapfloat */
/*****************************************************************************/
putrow()
{
char *p1, *p2; /* starting and ending columns */
int n; /* set to bytes per pattern */
int i; /* loop index */
/*
*
* Takes the scanline that's been saved in *raster, encodes it according to the
* value that's been assigned to bytespp, and writes the result to *fp_out. Each
* line in the output bitmap is terminated by a 0 on a line by itself.
*
*/
n = (bytespp <= 0) ? columns : bytespp;
for ( p1 = raster, p2 = raster + n; p1 < eptr; p1 = p2 )
if ( patncmp(p1, n) == TRUE ) {
while ( patncmp(p2, n) == TRUE ) p2 += n;
p2 += n;
fprintf(fp_out, "%d ", n);
for ( i = 0; i < n; i++, p1++ )
fprintf(fp_out, "%.2X", ((int) *p1) & 0377);
fprintf(fp_out, " %d\n", (p2 - p1) / n);
} else {
while ( p2 < eptr && patncmp(p2, n) == FALSE ) p2 += n;
if ( p2 > eptr ) p2 = eptr;
fprintf(fp_out, "%d ", p2 - p1);
while ( p1 < p2 )
fprintf(fp_out, "%.2X", ((int) *p1++) & 0377);
fprintf(fp_out, " 0\n");
} /* End else */
fprintf(fp_out, "0\n");
rptr = raster;
} /* End of putrow */
/*****************************************************************************/
labelmatrix()
{
int total; /* number of elements in the window */
int i; /* loop index */
/*
*
* Responsible for generating the PostScript calls that label the matrix, generate
* the legend, and print the matrix name.
*
*/
fprintf(fp_out, "(%s) ((%d, %d) to (%d, %d)) labelmatrix\n", matrixname,
wlist[0], wlist[1], wlist[2], wlist[3]);
total = (wlist[2] - wlist[0] + 1) * (wlist[3] - wlist[1] + 1);
if ( nxtstat == OFF )
for ( i = 0; i < regions; i++ )
ilist[i].count = 0;
for ( i = 1; i < next; i += 2 )
fprintf(fp_out, "(%g) ", ilist[i].val);
fprintf(fp_out, "%d ", (regions - 1) / 2);
for ( i = regions - 1; i >= 0; i-- )
fprintf(fp_out, "{(\\%.3o)} %d ", ilist[i].color, ilist[i].count);
fprintf(fp_out, "%d %d legend\n", total, regions);
} /* End of labelmatrix */
/*****************************************************************************/
patncmp(p1, n)
char *p1; /* first patterns starts here */
int n; /* and extends this many bytes */
{
char *p2; /* address of the second pattern */
/*
*
* Compares the two n byte patterns *p1 and *(p1+n). FALSE if returned is they're
* different or extend past the end of the current raster line.
*
*/
p2 = p1 + n;
for ( ; n > 0; n--, p1++, p2++ )
if ( p2 >= eptr || *p1 != *p2 )
return(FALSE);
return(TRUE);
} /* End of patncmp */
/*****************************************************************************/
char *savestring(str)
char *str; /* save this string */
{
char *ptr = NULL; /* at this address */
/*
*
* Copies string *str to a permanent place and returns the address to the caller.
*
*/
if ( str != NULL && *str != '\0' ) {
if ( (ptr = malloc(strlen(str) + 1)) == NULL )
error(FATAL, "no memory available for string %s", str);
strcpy(ptr, str);
} /* End if */
return(ptr);
} /* End of savestring */
/*****************************************************************************/
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
/*
*
* If we're not supposed to print page pg, fp_out will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014230006101006440057030057030000010112200522627503700003100000004462post.src/postmd/postmd.h /*
*
* An interval list used to map matrix elements into integers in the range 0 to
* 254 representing shades of gray on a PostScript printer. The list can be given
* using the -i option or can be set in the optional header that can preceed each
* matrix. The list should be a comma or space separated list that looks like,
*
* num1,num2, ... ,numn
*
* where each num is a floating point number. The list must be given in increasing
* numerical order. The n numbers in the list partion the real line into 2n+1
* regions given by,
*
* region1 element < num1
* region2 element = num1
* region3 element < num2
* region4 element = num3
* . .
* . .
* . .
* region2n element = numn
* region2n+1 element > numn
*
* Every number in a given region is mapped into an integer in the range 0 to 254
* and that number, when displayed on a PostScript printer using the image operator,
* prints as a square filled with a gray scale that reflects the integer that was
* chosen. 0 maps to black and 255 white (that's why 255 is normally omitted).
*
* The shades of gray chosen by the program are normally generated automatically,
* but can be reassigned using the -g option or by including a grayscale line in
* the optional header. The grayscale list is comma or space separated list of
* integers between 0 and 255 that's used to map individual regions into arbitray
* shade of gray, thus overriding the default choice made in the program. The list
* should look like,
*
* color1,color2, ... ,color2n+1
*
* where color1 applies to region1 and color2n+1 applies to region2n+1. If less
* than 2n+1 numbers are given the default assignments will be used for the missing
* regions. Each color must be an integer in the range 0 to 255.
*
* The default interval list is given below. The default grayscale maps 254 (almost
* white) into the first region and 0 (black) into the last.
*
*/
#define DFLTILIST "-1,0,1"
/*
*
* The active interval list is built from an interval string and stored in an array
* whose elements are of type Ilist.
*
*/
typedef struct {
double val; /* only valid in kind is ENDPOINT */
int color; /* gray scale color */
long count; /* statistics for each region */
} Ilist;
/*
*
* Non-integer function declarations.
*
*/
char *savestring();
0707070014230004311006400057030057030000010063340522633076300003200000004021post.src/postmd/postmd.mk MAKE=/bin/make
MAKEFILE=postmd.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=postmd.h\
$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=postmd.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o\
$(COMMONDIR)/tempnam.o
all : postmd
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp postmd $(POSTBIN)/postmd
@chmod 755 $(POSTBIN)/postmd
@chgrp $(GROUP) $(POSTBIN)/postmd
@chown $(OWNER) $(POSTBIN)/postmd
cp postmd.ps $(POSTLIB)/postmd.ps
@chmod 644 $(POSTLIB)/postmd.ps
@chgrp $(GROUP) $(POSTLIB)/postmd.ps
@chown $(OWNER) $(POSTLIB)/postmd.ps
cp postmd.1 $(MAN1DIR)/postmd.1
@chmod 644 $(MAN1DIR)/postmd.1
@chgrp $(GROUP) $(MAN1DIR)/postmd.1
@chown $(OWNER) $(MAN1DIR)/postmd.1
clean :
rm -f *.o
clobber : clean
rm -f postmd
postmd : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postmd $(OFILES) -lm
postmd.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o\
$(COMMONDIR)/tempnam.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk SYSTEM=$(SYSTEM) `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
postmd.1 >XXX.1; \
mv XXX.1 postmd.1
0707070014230006121006440057030057030000010112400522627503700003200000007404post.src/postmd/postmd.ps %
% Version 3.3.2 prologue for matrix display files.
%
/#copies 1 store
/aspectratio 1 def
/font /Helvetica def
/formsperpage 1 def
/landscape false def
/magnification 1 def
/margin 10 def
/orientation 0 def
/rotation 1 def
/size 9 def
/statspace 1.6 def
/ticklength .06 def
/tickspacing 10 def
/xoffset 0 def
/yoffset 0 def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} bind def
/min {2 copy gt {exch} if pop} bind def
/show {show} bind def % so later references don't bind
/stringwidth {stringwidth} bind def
/setup {
counttomark 2 idiv {def} repeat pop
landscape {/orientation 90 orientation add def} if
pagedimensions
height width lt {
/statspace statspace height width div mul def
/size size height width div mul def
/ticklength ticklength height width div mul def
} if
/height height margin sub statspace inch sub ticklength inch sub size 6 mul sub def
/width width margin sub ticklength inch sub def
xcenter ycenter translate
orientation rotation mul rotate
xoffset inch yoffset inch translate
0 height 2 div height width min 2 div sub translate
0 statspace inch 2 div translate
magnification dup aspectratio mul scale
0 setlinewidth
} def
/pagedimensions {
useclippath {
/pagebbox [clippath pathbbox newpath] def
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
userdict /gotpagebbox true put
} def
/pagesetup {/page exch def} bind def
/bitmap {
/scanlines exch def
/scanlength exch def
/picstr scanlength string def
gsave
height scanlines div width scanlength div min
/scaling exch def
scaling scaling scale
scanlength neg 2 div scanlines neg 2 div translate
scanlength scanlines scale
getbitmap
grestore
} bind def
/getbitmap {
scanlength scanlines 8 [scanlength 0 0 scanlines neg 0 scanlines] {
0 {
currentfile token pop dup
0 eq {pop pop exit} if
/charcount exch def
picstr 1 index charcount getinterval
/repl exch def
currentfile repl readhexstring pop pop
charcount add
currentfile token pop {
picstr 1 index repl putinterval
charcount add
} repeat
} loop
picstr
} image
} bind def
/labelmatrix {
/matrixlimits exch def
/matrixname exch def
gsave
scaling scaling scale
font findfont size scaling div scalefont setfont
scanlength neg 2 div scanlines 2 div translate
0 scanlines size 1.5 mul scaling div add neg moveto
matrixname show
scanlength scanlines size 1.5 mul scaling div add neg moveto
matrixlimits stringwidth pop neg 0 rmoveto
matrixlimits show
newpath
0 0 moveto
scanlength 0 rlineto
0 scanlines neg rlineto
scanlength neg 0 rlineto
closepath stroke
scanlength tickspacing idiv 1 add tickspacing 0 ticks
scanlines tickspacing idiv 1 add 0 tickspacing neg ticks
grestore
} bind def
/ticks {
/dy exch def
/dx exch def
/tl ticklength inch scaling div def
newpath
0 0 moveto
{
gsave dx 0 eq {tl neg 0} {0 tl} ifelse rlineto stroke grestore
dx dy rmoveto
} repeat
} bind def
/legend {
/regions exch def
/total exch def
gsave
width height min 2 div neg dup size 2 mul sub translate
0 statspace inch neg translate
gsave
regions {
gsave
total div statspace inch size 2 mul sub mul size 2 mul add
width height min regions div exch scale
1 1 8 [1 0 0 1 0 0] 5 -1 roll image
grestore
width height min regions div 0 translate
} repeat
grestore
width height min size 1.5 mul neg translate
font findfont size scalefont setfont
dup dup add 1 add width height min exch div /interval exch def
{
interval neg 0 translate
interval 2 div neg 0 translate
dup stringwidth pop 2 div neg 0 moveto show
interval 2 div neg 0 translate
} repeat
grestore
} bind def
/done {/lastpage where {pop lastpage} if} def
0707070014231310730407550057030057030000021027660522633077100002500000000000post.src/postreverse 0707070014231307551006400057030057030000011031220522633077000004400000003131post.src/postreverse/postreverse.mk MAKE=/bin/make
MAKEFILE=postreverse.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=postreverse.h\
$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=postreverse.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/tempnam.o
all : postreverse
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
cp postreverse $(POSTBIN)/postreverse
@chmod 755 $(POSTBIN)/postreverse
@chgrp $(GROUP) $(POSTBIN)/postreverse
@chown $(OWNER) $(POSTBIN)/postreverse
cp postreverse.1 $(MAN1DIR)/postreverse.1
@chmod 644 $(MAN1DIR)/postreverse.1
@chgrp $(GROUP) $(MAN1DIR)/postreverse.1
@chown $(OWNER) $(MAN1DIR)/postreverse.1
clean :
rm -f *.o
clobber : clean
rm -f postreverse
postreverse : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o postreverse $(OFILES)
postreverse.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/tempnam.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk SYSTEM=$(SYSTEM) `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE)
0707070014231310751006440057030057030000011027670522627503700003400000000555post.src/postreverse/README
A simple program that reverses the pages in PostScript files that
conform to Adobe's Version 1.0 or Version 2.0 file structuring
conventions.
postrevese also handles a small class of files that violate page
independence (eg. output from dpost) and can be used with all the
translators in this package. The output can be conforming even if
the input file wasn't.
0707070014231310761006440057030057030000011030420522627503700004300000000604post.src/postreverse/postreverse.h /*
*
* An array of type Pages is used to keep track of the starting and ending byte
* offsets for the pages we've been asked to print.
*
*/
typedef struct {
long start; /* page starts at this byte offset */
long stop; /* and ends here */
int empty; /* dummy page if TRUE */
} Pages;
/*
*
* Some of the non-integer functions in postreverse.c.
*
*/
char *copystdin();
0707070014231310771006440057030057030000011030600522627504000004300000040407post.src/postreverse/postreverse.c /*
*
* postreverse - reverse the page order in certain PostScript files.
*
* Page reversal relies on being able to locate sections of a document using file
* structuring comments defined by Adobe (ie. the 1.0 and now 2.0 conventions) and
* a few I've added. Among other things a minimally conforming document, according
* to the 1.0 conventions,
*
* 1) Marks the end of the prologue with an %%EndProlog comment.
*
* 2) Starts each page with a %%Page: comment.
*
* 3) Marks the end of all the pages %%Trailer comment.
*
* 4) Obeys page independence (ie. pages can be arbitrarily rearranged).
*
* The most important change (at least for this program) that Adobe made in going
* from the 1.0 to the 2.0 structuring conventions was in the prologue. They now
* say the prologue should only define things, and the global initialization that
* was in the prologue (1.0 conventions) should now come after the %%EndProlog
* comment but before the first %%Page: comment and be bracketed by %%BeginSetup
* and %%EndSetup comments. So a document that conforms to Adobe's 2.0 conventions,
*
* 1) Marks the end of the prologue (only definitions) with %%EndProlog.
*
* 2) Brackets global initialization with %%BeginSetup and %%EndSetup comments
* which come after the prologue but before the first %Page: comment.
*
* 3) Starts each page with a %%Page: comment.
*
* 4) Marks the end of all the pages with a %%Trailer comment.
*
* 5) Obeys page independence.
*
* postreverse can handle documents that follow the 1.0 or 2.0 conventions, but has
* also been extended slightly so it works properly with the translators (primarily
* dpost) supplied with this package. The page independence requirement has been
* relaxed some. In particular definitions exported to the global environment from
* within a page should be bracketed by %%BeginGlobal and %%EndGlobal comments.
* postreverse pulls them out of each page and inserts them in the setup section
* of the document, immediately before it writes the %%EndProlog (for version 1.0)
* or %%EndSetup (for version 2.0) comments.
*
* In addition postreverse accepts documents that choose to mark the end of each
* page with a %%EndPage: comment, which from a translator's point of view is often
* a more natural approach. Both page boundary comments (ie. Page: and %%EndPage:)
* are also accepted, but be warned that everything between consecutive %%EndPage:
* and %%Page: comments will be ignored.
*
* So a document that will reverse properly with postreverse,
*
* 1) Marks the end of the prologue with %%EndProlog.
*
* 2) May have a %%BeginSetup/%%EndSetup comment pair before the first %%Page:
* comment that brackets any global initialization.
*
* 3) Marks the start of each page with a %%Page: comment, or the end of each
* page with a %%EndPage: comment. Both page boundary comments are allowed.
*
* 4) Marks the end of all the pages with a %%Trailer comment.
*
* 5) Obeys page independence or violates it to a rather limited extent and
* marks the violations with %%BeginGlobal and %%EndGlobal comments.
*
* If no file arguments are given postreverse copies stdin to a temporary file and
* then processes that file. That means the input is read three times (rather than
* two) whenever we handle stdin. That's expensive, and shouldn't be too difficult
* to fix, but I haven't gotten around to it yet.
*
*/
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for temporary directory */
#include "ext.h" /* external variable declarations */
#include "postreverse.h" /* a few special definitions */
int page = 1; /* current page number */
int forms = 1; /* forms per page in the input file */
char *temp_dir = TEMPDIR; /* temp directory for copying stdin */
Pages pages[1000]; /* byte offsets for all pages */
int next_page = 0; /* next page goes here */
long start; /* starting offset for next page */
long endoff = -1; /* offset where TRAILER was found */
int noreverse = FALSE; /* don't reverse pages if TRUE */
char *endprolog = ENDPROLOG; /* occasionally changed to ENDSETUP */
double version = 3.3; /* of the input file */
int ignoreversion = FALSE; /* ignore possible forms.ps problems */
char buf[2048]; /* line buffer for input file */
FILE *fp_in; /* stuff is read from this file */
FILE *fp_out = stdout; /* and written here */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A simple program that reverses the pages in specially formatted PostScript
* files. Will work with all the translators in this package, and should handle
* any document that conforms to Adobe's version 1.0 or 2.0 file structuring
* conventions. Only one input file is allowed, and it can either be a named (on
* the command line) file or stdin.
*
*/
argc = agc; /* other routines may want them */
argv = agv;
prog_name = argv[0]; /* just for error messages */
init_signals(); /* sets up interrupt handling */
options(); /* first get command line options */
arguments(); /* then process non-option arguments */
done(); /* and clean things up */
exit(x_stat); /* not much could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Makes sure we handle interrupts properly.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
options()
{
int ch; /* return value from getopt() */
char *optnames = "n:o:rvT:DI";
extern char *optarg; /* used by getopt() */
extern int optind;
/*
*
* Reads and processes the command line options. The -r option (ie. the one that
* turns page reversal off) is really only useful if you want to take dpost output
* and produce a page independent output file. In that case global definitions
* made within pages and bracketed by %%BeginGlobal/%%EndGlobal comments will be
* moved into the prologue or setup section of the document.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'n': /* forms per page */
if ( (forms = atoi(optarg)) <= 0 )
error(FATAL, "illegal forms request %s", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'r': /* don't reverse the pages */
noreverse = TRUE;
break;
case 'v': /* ignore possible forms.ps problems */
ignoreversion = TRUE;
break;
case 'T': /* temporary file directory */
temp_dir = optarg;
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't understand the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c\n", ch);
break;
} /* End switch */
} /* End while */
argc -= optind; /* get ready for non-option args */
argv += optind;
} /* End of options */
/*****************************************************************************/
arguments()
{
char *name; /* name of the input file */
/*
*
* postreverse only handles one input file at a time, so if there's more than one
* argument left when we get here we'll quit. If none remain we copy stdin to a
* temporary file and process that file.
*
*/
if ( argc > 1 ) /* can't handle more than one file */
error(FATAL, "too many arguments");
if ( argc == 0 ) /* copy stdin to a temporary file */
name = copystdin();
else name = *argv;
if ( (fp_in = fopen(name, "r")) == NULL )
error(FATAL, "can't open %s", name);
reverse();
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Cleans things up after we've finished reversing the pages in the input file.
* All that's really left to do is remove the temp file, provided we used one.
*
*/
if ( temp_file != NULL )
unlink(temp_file);
} /* End of done */
/*****************************************************************************/
char *copystdin()
{
int fd_out; /* for the temporary file */
int fd_in; /* for stdin */
int count; /* number of bytes put in buf[] */
/*
*
* Copies stdin to a temporary file and returns the pathname of that file to the
* caller. It's an expensive way of doing things, because it means we end up
* reading the input file three times - rather than just twice. Could probably be
* fixed by creating the temporary file on the fly as we read the file the first
* time.
*
*/
if ( (temp_file = tempnam(temp_dir, "post")) == NULL )
error(FATAL, "can't generate temp file name");
if ( (fd_out = creat(temp_file, 0660)) == -1 )
error(FATAL, "can't open %s", temp_file);
fd_in = fileno(stdin);
while ( (count = read(fd_in, buf, sizeof(buf))) > 0 )
if ( write(fd_out, buf, count) != count )
error(FATAL, "error writing to %s", temp_file);
close(fd_out);
return(temp_file);
} /* End of copystdin */
/*****************************************************************************/
reverse()
{
/*
*
* Begins by looking for the ENDPROLOG comment in the input file. Everything up to
* that comment is copied to the output file. If the comment isn't found the entire
* input file is copied and moreprolog() returns FALSE. Otherwise readpages() reads
* the rest of the input file and remembers (in pages[]) where each page starts and
* ends. In addition everything bracketed by %%BeginGlobal and %%EndGlobal comments
* is immediately added to the new prologue (or setup section) and ends up being
* removed from the individual pages. When readpages() finds the TRAILER comment
* or gets to the end of the input file we go back to the pages[] array and use
* the saved offsets to write the pages out in reverse order. Finally everything
* from the TRAILER comment to the end of the input file is copied to the output
* file.
*
*/
if ( moreprolog(ENDPROLOG) == TRUE ) {
readpages();
writepages();
trailer();
} /* End if */
} /* End of reverse */
/*****************************************************************************/
moreprolog(str)
char *str; /* copy everything up to this string */
{
int len; /* length of FORMSPERPAGE string */
int vlen; /* length of VERSION string */
/*
*
* Looks for string *str at the start of a line and copies everything up to that
* string to the output file. If *str isn't found the entire input file will end
* up being copied to the output file and FALSE will be returned to the caller.
* The first call (made from reverse()) looks for ENDPROLOG. Any other call comes
* from readpages() and will be looking for the ENDSETUP comment.
*
*/
len = strlen(FORMSPERPAGE);
vlen = strlen(VERSION);
while ( fgets(buf, sizeof(buf), fp_in) != NULL ) {
if ( strcmp(buf, str) == 0 )
return(TRUE);
else if ( strncmp(buf, FORMSPERPAGE, len) == 0 )
forms = atoi(&buf[len+1]);
else if ( strncmp(buf, VERSION, vlen) == 0 )
version = atof(&buf[vlen+1]);
fprintf(fp_out, "%s", buf);
} /* End while */
return(FALSE);
} /* End of moreprolog */
/*****************************************************************************/
readpages()
{
int endpagelen; /* length of ENDPAGE */
int pagelen; /* and PAGE strings */
int sawendpage = TRUE; /* ENDPAGE equivalent marked last page */
int gotpage = FALSE; /* TRUE disables BEGINSETUP stuff */
/*
*
* Records starting and ending positions of the requested pages (usually all of
* them), puts global definitions in the prologue, and remembers where the TRAILER
* was found.
*
* Page boundaries are marked by the strings PAGE, ENDPAGE, or perhaps both.
* Application programs will normally find one or the other more convenient, so
* in most cases only one kind of page delimiter will be found in a particular
* document.
*
*/
pages[0].start = ftell(fp_in); /* first page starts after ENDPROLOG */
endprolog = ENDPROLOG;
endpagelen = strlen(ENDPAGE);
pagelen = strlen(PAGE);
while ( fgets(buf, sizeof(buf), fp_in) != NULL )
if ( buf[0] != '%' )
continue;
else if ( strncmp(buf, ENDPAGE, endpagelen) == 0 ) {
if ( in_olist(page++) == ON ) {
pages[next_page].empty = FALSE;
pages[next_page++].stop = ftell(fp_in);
} /* End if */
pages[next_page].start = ftell(fp_in);
sawendpage = TRUE;
gotpage = TRUE;
} else if ( strncmp(buf, PAGE, pagelen) == 0 ) {
if ( sawendpage == FALSE && in_olist(page++) == ON ) {
pages[next_page].empty = FALSE;
pages[next_page++].stop = ftell(fp_in) - strlen(buf);
} /* End if */
pages[next_page].start = ftell(fp_in) - strlen(buf);
sawendpage = FALSE;
gotpage = TRUE;
} else if ( gotpage == FALSE && strcmp(buf, BEGINSETUP) == 0 ) {
fprintf(fp_out, "%s", endprolog);
fprintf(fp_out, "%s", BEGINSETUP);
moreprolog(ENDSETUP);
endprolog = ENDSETUP;
} else if ( strcmp(buf, BEGINGLOBAL) == 0 ) {
moreprolog(ENDGLOBAL);
} else if ( strcmp(buf, TRAILER) == 0 ) {
if ( sawendpage == FALSE )
pages[next_page++].stop = ftell(fp_in) - strlen(buf);
endoff = ftell(fp_in);
break;
} /* End if */
} /* End of readpages */
/*****************************************************************************/
writepages()
{
int i, j, k; /* loop indices */
/*
*
* Goes through the pages[] array, usually from the bottom up, and writes out all
* the pages. Documents that print more than one form per page cause things to get
* a little more complicated. Each physical page has to have its subpages printed
* in the correct order, and we have to build a few dummy subpages for the last
* (and now first) sheet of paper, otherwise things will only occasionally work.
*
*/
fprintf(fp_out, "%s", endprolog);
if ( noreverse == FALSE ) /* fill out the first page */
for ( i = (forms - next_page % forms) % forms; i > 0; i--, next_page++ )
pages[next_page].empty = TRUE;
else forms = next_page; /* turns reversal off in next loop */
for ( i = next_page - forms; i >= 0; i -= forms )
for ( j = i, k = 0; k < forms; j++, k++ )
if ( pages[j].empty == TRUE ) {
if ( ignoreversion == TRUE || version > 3.1 ) {
fprintf(fp_out, "%s 0 0\n", PAGE);
fprintf(fp_out, "/saveobj save def\n");
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s 0 0\n", ENDPAGE);
} else {
fprintf(fp_out, "%s 0 0\n", PAGE);
fprintf(fp_out, "save showpage restore\n");
fprintf(fp_out, "%s 0 0\n", ENDPAGE);
} /* End else */
} else copypage(pages[j].start, pages[j].stop);
} /* End of writepages */
/*****************************************************************************/
copypage(start, stop)
long start; /* starting from this offset */
long stop; /* and ending here */
{
/*
*
* Copies the page beginning at offset start and ending at stop to the output
* file. Global definitions are skipped since they've already been added to the
* prologue.
*
*/
fseek(fp_in, start, 0);
while ( ftell(fp_in) < stop && fgets(buf, sizeof(buf), fp_in) != NULL )
if ( buf[0] == '%' && strcmp(buf, BEGINGLOBAL) == 0 )
while ( fgets(buf, sizeof(buf), fp_in) != NULL && strcmp(buf, ENDGLOBAL) != 0 ) ;
else fprintf(fp_out, "%s", buf);
} /* End of copypage */
/*****************************************************************************/
trailer()
{
/*
*
* Makes sure everything from the TRAILER string to EOF is copied to the output
* file.
*
*/
if ( endoff > 0 ) {
fprintf(fp_out, "%s", TRAILER);
fseek(fp_in, endoff, 0);
while ( fgets(buf, sizeof(buf), fp_in) != NULL )
fprintf(fp_out, "%s", buf);
} /* End if */
} /* End of trailer */
/*****************************************************************************/
0707070014231311001006440057030057030000011030440522627504000004300000004523post.src/postreverse/postreverse.1 .TH POSTREVERSE 1
.SH NAME
.B postreverse
\- reverse the page order in a PostScript file
.SH SYNOPSIS
\*(mBpostreverse\f1
.OP "" options []
.OP "" file []
.SH DESCRIPTION
.B postreverse
reverses the page order in files that conform to Adobe's
Version 1.0 or Version 2.0 PostScript file structuring conventions,
and writes the results on the standard output.
Only one input
.I file
is allowed and if no
.I file
is specified, the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-o list
Select pages whose numbers are given in the comma-separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-r
Do not reverse the pages in
.IR file .
.TP
.OP \-T dir
Use
.I dir
as the temporary file directory when
reading from the standard input.
By default
.I dir
is set to
.MR /tmp .
.PP
.B postreverse
can handle a limited class of files
that violate page independence,
provided all global definitions are bracketed by
.MW %%BeginGlobal
and
.MW %%EndGlobal
comments.
In addition, files that mark the end of each page with
.MW "%%EndPage:\ label\ ordinal"
comments will also reverse properly, provided the prologue and
trailer sections can be located.
If
.B postreverse
fails to find an
.MW %%EndProlog
or
.MW %%EndSetup
comment the entire
.I file
is copied, unmodified, to the standard output.
.PP
Since global definitions are pulled out of individual
pages and put in the prologue, the output file can be
minimally conforming, even if the input
.I file
was not.
.SH EXAMPLES
Select pages 1 to 100 from
.I file
and reverse the pages:
.EX
postreverse -o1-100 \f2file
.EE
Print four logical pages on each physical page
and reverse all the pages:
.EX
postprint -n4 \f2file\fP | postreverse
.EE
Produce a minimally conforming file from output
generated by dpost without reversing the pages:
.EX
dpost \f2file\fP | postreverse -r
.EE
.SH DIAGNOSTICS
A 0 exit status is returned if
.I file
was successfully processed.
.SH BUGS
No attempt has been made to deal with redefinitions of global
variables or procedures.
If standard input is used, the input
.I file
will be read three times before being reversed.
.SH SEE ALSO
.BR dpost (1),
.BR postdaisy(1),
.BR postdmd(1),
.BR postio(1),
.BR postmd(1),
.BR postprint(1),
.BR posttek(1),
.BR psencoding (1)
0707070014230550050407550057030057030000021527470522633077300002100000000000post.src/posttek 0707070014230547611006400057030057030000011527400522633077200003400000003736post.src/posttek/posttek.mk MAKE=/bin/make
MAKEFILE=posttek.mk
SYSTEM=V9
VERSION=3.3.2
GROUP=bin
OWNER=bin
MAN1DIR=/tmp
POSTBIN=/usr/bin/postscript
POSTLIB=/usr/lib/postscript
COMMONDIR=../common
CFLGS=-O
LDFLGS=-s
CFLAGS=$(CFLGS) -I$(COMMONDIR)
LDFLAGS=$(LDFLGS)
HFILES=posttek.h\
$(COMMONDIR)/comments.h\
$(COMMONDIR)/ext.h\
$(COMMONDIR)/gen.h\
$(COMMONDIR)/path.h
OFILES=posttek.o\
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o
all : posttek
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp posttek $(POSTBIN)/posttek
@chmod 755 $(POSTBIN)/posttek
@chgrp $(GROUP) $(POSTBIN)/posttek
@chown $(OWNER) $(POSTBIN)/posttek
cp posttek.ps $(POSTLIB)/posttek.ps
@chmod 644 $(POSTLIB)/posttek.ps
@chgrp $(GROUP) $(POSTLIB)/posttek.ps
@chown $(OWNER) $(POSTLIB)/posttek.ps
cp posttek.1 $(MAN1DIR)/posttek.1
@chmod 644 $(MAN1DIR)/posttek.1
@chgrp $(GROUP) $(MAN1DIR)/posttek.1
@chown $(OWNER) $(MAN1DIR)/posttek.1
clean :
rm -f *.o
clobber : clean
rm -f posttek
posttek : $(OFILES)
$(CC) $(CFLAGS) $(LDFLAGS) -o posttek $(OFILES)
posttek.o : $(HFILES)
$(COMMONDIR)/glob.o\
$(COMMONDIR)/misc.o\
$(COMMONDIR)/request.o :
@cd $(COMMONDIR); $(MAKE) -f common.mk `basename $@`
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^SYSTEM=.*'SYSTEM=$(SYSTEM)'" \
-e "s'^VERSION=.*'VERSION=$(VERSION)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
posttek.1 >XXX.1; \
mv XXX.1 posttek.1
0707070014230550071006440057030057030000011527770522627504000003000000000153post.src/posttek/README
Tektronix 4014 to PostScript translator. Much of the code was
borrowed from the 5620 Tektronix emulator.
0707070014230550101006440057030057030000011527620522627504000003300000007416post.src/posttek/posttek.h /*
*
* Tektronix 4014 control codes.
*
*/
#define NUL '\000'
#define SOH '\001'
#define STX '\002'
#define ETX '\003'
#define EOT '\004'
#define ENQ '\005'
#define ACK '\006'
#define BEL '\007'
#define BS '\010'
#define HT '\011'
#define NL '\012'
#define VT '\013'
#define FF '\014'
#define CR '\015'
#define SO '\016'
#define SI '\017'
#define DLE '\020'
#define DC1 '\021'
#define DC2 '\022'
#define DC3 '\023'
#define DC4 '\024'
#define NAK '\025'
#define SYN '\026'
#define ETB '\027'
#define CAN '\030'
#define EM '\031'
#define SUB '\032'
#define ESC '\033'
#define FS '\034'
#define GS '\035'
#define RS '\036'
#define US '\037'
#define DEL '\177'
/*
*
* A few definitions used to classify the different tektronix states. OUTMODED
* is returned by control() and esc(), and typically means the state has changed.
*
*/
#define OUTMODED -1
#define ALPHA 0
#define GIN 1
#define GRAPH 2
#define POINT 3
#define SPECIALPOINT 4
#define INCREMENTAL 5
#define RESET 6
#define EXIT 7
/*
*
* The pen state, either UP or DOWN, controls whether vectors are drawn.
*
*/
#define UP 0
#define DOWN 1
/*
*
* Coordinates of the upper right corner of the screen - almost the real screen
* dimensions.
*
*/
#define TEKXMAX 4096
#define TEKYMAX 3120
/*
*
* The size of the spot in SPECIALPOINT mode is controlled by a non-linear
* function that has a domain that consists of the integers from 040 to 0175.
* The next definition is used to initialize the special point mode intensity
* array that implements the function. Data came from table F-6 in the tektronix
* 4014 manual.
*
*/
#define INTENSITY \
\
{ \
14, 16, 17, 19, 20, 22, 23, 25, \
28, 31, 34, 38, 41, 44, 47, 50, \
56, 62, 69, 75, 81, 88, 94,100, \
56, 62, 69, 75, 81, 88, 94,100, \
0, 1, 1, 1, 1, 1, 1, 2, \
2, 2, 2, 2, 3, 3, 3, 3, \
4, 4, 4, 5, 5, 5, 6, 6, \
7, 8, 9, 10, 11, 12, 12, 13, \
14, 16, 17, 19, 20, 22, 23, 25, \
28, 31, 34, 38, 41, 44, 47, 50, \
56, 62, 69, 75, 81, 88, 94,100, \
56, 62, 69, 75, 81, 88, 94,100, \
}
/*
*
* The next two definitions give the height and width of characters in the four
* different sizes available on tektronix terminals. TEKFONT is the default index
* into CHARHEIGHT and CHARWIDTH.
*
*/
#define CHARHEIGHT {88, 82, 53, 48}
#define CHARWIDTH {56, 51, 34, 31}
#define TEKFONT 2
/*
*
* The entries defined in STYLES are passed on to the PostScript operator setdash.
* They're used to implement the different tektronix line styles. Belongs in the
* prologue!
*
*/
#define STYLES \
\
{ \
"[]", \
"[.5 2]", \
"[.5 2 4 2]", \
"[4 4]", \
"[8 4]", \
"[]" \
}
/*
*
* Variables of type Point are used to keep track of the cursor position.
*
*/
typedef struct {
int x;
int y;
} Point;
/*
*
* An array of type Fontmap helps convert font names requested by users into
* legitimate PostScript names. The array is initialized using FONTMAP, which must
* end with an entry that has NULL defined as its name field.
*
*/
typedef struct {
char *name; /* user's font name */
char *val; /* corresponding PostScript name */
} Fontmap;
#define FONTMAP \
\
{ \
"R", "Courier", \
"I", "Courier-Oblique", \
"B", "Courier-Bold", \
"CO", "Courier", \
"CI", "Courier-Oblique", \
"CB", "Courier-Bold", \
"CW", "Courier", \
"PO", "Courier", \
"courier", "Courier", \
"cour", "Courier", \
"co", "Courier", \
NULL, NULL \
}
/*
*
* Some of the non-integer valued functions in posttek.c.
*
*/
char *get_font();
0707070014230550111006440057030057030000011530000522627504000003300000064244post.src/posttek/posttek.c /*
*
* posttek - PostScript translator for tektronix 4014 files
*
* A program that can be used to translate tektronix 4014 files into PostScript.
* Most of the code was borrowed from the tektronix 4014 emulator that was written
* for DMDs. Things have been cleaned up some, but there's still plently that
* could be done.
*
* The PostScript prologue is copied from *prologue before any of the input files
* are translated. The program expects that the following PostScript procedures
* are defined in that file:
*
* setup
*
* mark ... setup -
*
* Handles special initialization stuff that depends on how the program
* was called. Expects to find a mark followed by key/value pairs on the
* stack. The def operator is applied to each pair up to the mark, then
* the default state is set up.
*
* pagesetup
*
* page pagesetup -
*
* Does whatever is needed to set things up for the next page. Expects
* to find the current page number on the stack.
*
* v
*
* mark dx1 dy1 ... dxn dyn x y v mark
*
* Draws the vector described by the numbers on the stack. The top two
* numbers are the starting point. The rest are relative displacements
* from the preceeding point. Must make sure we don't put too much on
* the stack!
*
* t
*
* x y string t -
*
* Prints the string that's on the top of the stack starting at point
* (x, y).
*
* p
*
* x y p -
*
* Marks the point (x, y) with a circle whose radius varies with the
* current intensity setting.
*
* i
*
* percent focus i -
*
* Changes the size of the circle used to mark individual points to
* percent of maximum for focused mode (focus=1) or defocused mode
* (focus=0). The implementation leaves much to be desired!
*
* l
*
* mark array l mark
*
* Set the line drawing mode according to the description given in array.
* The arrays that describe the different line styles are declared in
* STYLES (file posttek.h). The array really belongs in the prologue!
*
* w
*
* n w -
*
* Adjusts the line width for vector drawing. Used to select normal (n=0)
* or defocused (n=1) mode.
*
* f
*
* size f -
*
* Changes the size of the font that's used to print characters in alpha
* mode. size is the tektronix character width and is used to choose an
* appropriate point size in the current font.
*
* done
*
* done
*
* Makes sure the last page is printed. Only needed when we're printing
* more than one page on each sheet of paper.
*
* The default line width is zero, which forces lines to be one pixel wide. That
* works well on 'write to black' engines but won't be right for 'write to white'
* engines. The line width can be changed using the -w option, or you can change
* the initialization of linewidth in the prologue.
*
* Many default values, like the magnification and orientation, are defined in
* the prologue, which is where they belong. If they're changed (by options), an
* appropriate definition is made after the prologue is added to the output file.
* The -P option passes arbitrary PostScript through to the output file. Among
* other things it can be used to set (or change) values that can't be accessed by
* other options.
*
*/
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include "comments.h" /* PostScript file structuring comments */
#include "gen.h" /* general purpose definitions */
#include "path.h" /* for the prologue */
#include "ext.h" /* external variable definitions */
#include "posttek.h" /* control codes and other definitions */
char *optnames = "a:c:f:m:n:o:p:w:x:y:A:C:E:J:L:P:R:DI";
char *prologue = POSTTEK; /* default PostScript prologue */
char *formfile = FORMFILE; /* stuff for multiple pages per sheet */
int formsperpage = 1; /* page images on each piece of paper */
int copies = 1; /* and this many copies of each sheet */
int charheight[] = CHARHEIGHT; /* height */
int charwidth[] = CHARWIDTH; /* and width arrays for tek characters */
int tekfont = TEKFONT; /* index into charheight[] and charwidth[] */
char intensity[] = INTENSITY; /* special point intensity array */
char *styles[] = STYLES; /* description of line styles */
int linestyle = 0; /* index into styles[] */
int linetype = 0; /* 0 for normal, 1 for defocused */
int dispmode = ALPHA; /* current tektronix state */
int points = 0; /* points making up the current vector */
int characters = 0; /* characters waiting to be printed */
int pen = UP; /* just for point plotting */
int margin = 0; /* left edge - ALPHA state */
Point cursor; /* should be current cursor position */
Fontmap fontmap[] = FONTMAP; /* for translating font names */
char *fontname = "Courier"; /* use this PostScript font */
int page = 0; /* page we're working on */
int printed = 0; /* printed this many pages */
FILE *fp_in; /* read from this file */
FILE *fp_out = stdout; /* and write stuff here */
FILE *fp_acct = NULL; /* for accounting data */
/*****************************************************************************/
main(agc, agv)
int agc;
char *agv[];
{
/*
*
* A simple program that can be used to translate tektronix 4014 files into
* PostScript. Most of the code was taken from the DMD tektronix 4014 emulator,
* although things have been cleaned up some.
*
*/
argv = agv; /* so everyone can use them */
argc = agc;
prog_name = argv[0]; /* just for error messages */
init_signals(); /* sets up interrupt handling */
header(); /* PostScript header comments */
options(); /* handle the command line options */
setup(); /* for PostScript */
arguments(); /* followed by each input file */
done(); /* print the last page etc. */
account(); /* job accounting data */
exit(x_stat); /* nothing could be wrong */
} /* End of main */
/*****************************************************************************/
init_signals()
{
/*
*
* Make sure we handle interrupts.
*
*/
if ( signal(SIGINT, interrupt) == SIG_IGN ) {
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
} else {
signal(SIGHUP, interrupt);
signal(SIGQUIT, interrupt);
} /* End else */
signal(SIGTERM, interrupt);
} /* End of init_signals */
/*****************************************************************************/
header()
{
int ch; /* return value from getopt() */
int old_optind = optind; /* for restoring optind - should be 1 */
/*
*
* Scans the option list looking for things, like the prologue file, that we need
* right away but could be changed from the default. Doing things this way is an
* attempt to conform to Adobe's latest file structuring conventions. In particular
* they now say there should be nothing executed in the prologue, and they have
* added two new comments that delimit global initialization calls. Once we know
* where things really are we write out the job header, follow it by the prologue,
* and then add the ENDPROLOG and BEGINSETUP comments.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF )
if ( ch == 'L' )
prologue = optarg;
else if ( ch == '?' )
error(FATAL, "");
optind = old_optind; /* get ready for option scanning */
fprintf(stdout, "%s", CONFORMING);
fprintf(stdout, "%s %s\n", VERSION, PROGRAMVERSION);
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, ATEND);
fprintf(stdout, "%s %s\n", PAGES, ATEND);
fprintf(stdout, "%s", ENDCOMMENTS);
if ( cat(prologue) == FALSE )
error(FATAL, "can't read %s", prologue);
fprintf(stdout, "%s", ENDPROLOG);
fprintf(stdout, "%s", BEGINSETUP);
fprintf(stdout, "mark\n");
} /* End of header */
/*****************************************************************************/
options()
{
int ch; /* value returned by getopt() */
/*
*
* Reads and processes the command line options. Added the -P option so arbitrary
* PostScript code can be passed through. Expect it could be useful for changing
* definitions in the prologue for which options have not been defined.
*
*/
while ( (ch = getopt(argc, argv, optnames)) != EOF ) {
switch ( ch ) {
case 'a': /* aspect ratio */
fprintf(stdout, "/aspectratio %s def\n", optarg);
break;
case 'c': /* copies */
copies = atoi(optarg);
fprintf(stdout, "/#copies %s store\n", optarg);
break;
case 'f': /* use this PostScript font */
fontname = get_font(optarg);
fprintf(stdout, "/font /%s def\n", fontname);
break;
case 'm': /* magnification */
fprintf(stdout, "/magnification %s def\n", optarg);
break;
case 'n': /* forms per page */
formsperpage = atoi(optarg);
fprintf(stdout, "%s %s\n", FORMSPERPAGE, optarg);
fprintf(stdout, "/formsperpage %s def\n", optarg);
break;
case 'o': /* output page list */
out_list(optarg);
break;
case 'p': /* landscape or portrait mode */
if ( *optarg == 'l' )
fprintf(stdout, "/landscape true def\n");
else fprintf(stdout, "/landscape false def\n");
break;
case 'w': /* line width */
fprintf(stdout, "/linewidth %s def\n", optarg);
break;
case 'x': /* shift horizontally */
fprintf(stdout, "/xoffset %s def\n", optarg);
break;
case 'y': /* and vertically on the page */
fprintf(stdout, "/yoffset %s def\n", optarg);
break;
case 'A': /* force job accounting */
case 'J':
if ( (fp_acct = fopen(optarg, "a")) == NULL )
error(FATAL, "can't open accounting file %s", optarg);
break;
case 'C': /* copy file straight to output */
if ( cat(optarg) == FALSE )
error(FATAL, "can't read %s", optarg);
break;
case 'E': /* text font encoding */
fontencoding = optarg;
break;
case 'L': /* PostScript prologue file */
prologue = optarg;
break;
case 'P': /* PostScript pass through */
fprintf(stdout, "%s\n", optarg);
break;
case 'R': /* special global or page level request */
saverequest(optarg);
break;
case 'D': /* debug flag */
debug = ON;
break;
case 'I': /* ignore FATAL errors */
ignore = ON;
break;
case '?': /* don't know the option */
error(FATAL, "");
break;
default: /* don't know what to do for ch */
error(FATAL, "missing case for option %c", ch);
break;
} /* End switch */
} /* End while */
argc -= optind;
argv += optind;
} /* End of options */
/*****************************************************************************/
char *get_font(name)
char *name; /* name the user asked for */
{
int i; /* for looking through fontmap[] */
/*
*
* Called from options() to map a user's font name into a legal PostScript name.
* If the lookup fails *name is returned to the caller. That should let you choose
* any PostScript font.
*
*/
for ( i = 0; fontmap[i].name != NULL; i++ )
if ( strcmp(name, fontmap[i].name) == 0 )
return(fontmap[i].val);
return(name);
} /* End of get_font */
/*****************************************************************************/
setup()
{
/*
*
* Handles things that must be done after the options are read but before the
* input files are processed.
*
*/
writerequest(0, stdout); /* global requests eg. manual feed */
setencoding(fontencoding);
fprintf(stdout, "setup\n");
if ( formsperpage > 1 ) {
if ( cat(formfile) == FALSE )
error(FATAL, "can't read %s", formfile);
fprintf(stdout, "%d setupforms\n", formsperpage);
} /* End if */
fprintf(stdout, "%s", ENDSETUP);
} /* End of setup */
/*****************************************************************************/
arguments()
{
/*
*
* Makes sure all the non-option command line arguments are processed. If we get
* here and there aren't any arguments left, or if '-' is one of the input files
* we'll process stdin.
*
*/
if ( argc < 1 )
statemachine(fp_in = stdin);
else { /* at least one argument is left */
while ( argc > 0 ) {
if ( strcmp(*argv, "-") == 0 )
fp_in = stdin;
else if ( (fp_in = fopen(*argv, "r")) == NULL )
error(FATAL, "can't open %s", *argv);
statemachine(fp_in);
if ( fp_in != stdin )
fclose(fp_in);
argc--;
argv++;
} /* End while */
} /* End else */
} /* End of arguments */
/*****************************************************************************/
done()
{
/*
*
* Finished with all the input files, so mark the end of the pages with a TRAILER
* comment, make sure the last page prints, and add things like the PAGES comment
* that can only be determined after all the input files have been read.
*
*/
fprintf(stdout, "%s", TRAILER);
fprintf(stdout, "done\n");
fprintf(stdout, "%s %s\n", DOCUMENTFONTS, fontname);
fprintf(stdout, "%s %d\n", PAGES, printed);
} /* End of done */
/*****************************************************************************/
account()
{
/*
*
* Writes an accounting record to *fp_acct provided it's not NULL. Accounting
* is requested using the -A or -J options.
*
*/
if ( fp_acct != NULL )
fprintf(fp_acct, " print %d\n copies %d\n", printed, copies);
} /* End of account */
/*****************************************************************************/
statemachine(fp)
FILE *fp; /* used to set fp_in */
{
/*
*
* Controls the translation of the next input file. Tektronix states (dispmode)
* are typically changed in control() and esc().
*
*/
redirect(-1); /* get ready for the first page */
formfeed();
dispmode = RESET;
while ( 1 )
switch ( dispmode ) {
case RESET:
reset();
break;
case ALPHA:
alpha();
break;
case GIN:
gin();
break;
case GRAPH:
graph();
break;
case POINT:
case SPECIALPOINT:
point();
break;
case INCREMENTAL:
incremental();
break;
case EXIT:
formfeed();
return;
} /* End switch */
} /* End of statemachine */
/*****************************************************************************/
reset()
{
/*
*
* Called to reset things, typically only at the beginning of each input file.
*
*/
tekfont = -1;
home();
setfont(TEKFONT);
setmode(ALPHA);
} /* End of reset */
/*****************************************************************************/
alpha()
{
int c; /* next character */
int x, y; /* cursor will be here when we're done */
/*
*
* Takes care of printing characters in the current font.
*
*/
if ( (c = nextchar()) == OUTMODED )
return;
if ( (c < 040) && ((c = control(c)) <= 0) )
return;
x = cursor.x; /* where the cursor is right now */
y = cursor.y;
switch ( c ) {
case DEL:
return;
case BS:
if ((x -= charwidth[tekfont]) < margin)
x = TEKXMAX - charwidth[tekfont];
break;
case NL:
y -= charheight[tekfont];
break;
case CR:
x = margin;
break;
case VT:
if ((y += charheight[tekfont]) >= TEKYMAX)
y = 0;
break;
case HT:
case ' ':
default:
if ( characters++ == 0 )
fprintf(fp_out, "%d %d (", cursor.x, cursor.y);
switch ( c ) {
case '(':
case ')':
case '\\':
putc('\\', fp_out);
default:
putc(c, fp_out);
} /* End switch */
x += charwidth[tekfont];
move(x, y);
break;
} /* End switch */
if (x >= TEKXMAX) {
x = margin;
y -= charheight[tekfont];
} /* End if */
if (y < 0) {
y = TEKYMAX - charheight[tekfont];
x -= margin;
margin = (TEKXMAX/2) - margin;
if ((x += margin) > TEKXMAX)
x -= margin;
} /* End if */
if ( y != cursor.y || x != cursor.x )
text();
move(x, y);
} /* End of alpha */
/*****************************************************************************/
graph()
{
int c; /* next character */
int b; /* for figuring out loy */
int x, y; /* next point in the vector */
static int hix, hiy; /* upper */
static int lox, loy; /* and lower part of the address */
static int extra; /* for extended addressing */
/*
*
* Handles things when we're in GRAPH, POINT, or SPECIALPOINT mode.
*
*/
if ((c = nextchar()) < 040) {
control(c);
return;
} /* End if */
if ((c & 0140) == 040) { /* new hiy */
hiy = c & 037;
do
if (((c = nextchar()) < 040) && ((c = control(c)) == OUTMODED))
return;
while (c == 0);
} /* End if */
if ((c & 0140) == 0140) { /* new loy */
b = c & 037;
do
if (((c = nextchar()) < 040) && ((c = control(c)) == OUTMODED))
return;
while (c == 0);
if ((c & 0140) == 0140) { /* no, it was extra */
extra = b;
loy = c & 037;
do
if (((c = nextchar()) < 040) && ((c = control(c)) == OUTMODED))
return;
while (c == 0);
} else loy = b;
} /* End if */
if ((c & 0140) == 040) { /* new hix */
hix = c & 037;
do
if (((c = nextchar()) < 040) && ((c = control(c)) == OUTMODED))
return;
while (c == 0);
} /* End if */
lox = c & 037; /* this should be lox */
if (extra & 020)
margin = TEKXMAX/2;
x = (hix<<7) | (lox<<2) | (extra & 03);
y = (hiy<<7) | (loy<<2) | ((extra & 014)>>2);
if ( points > 100 ) { /* don't put too much on the stack */
draw();
points = 1;
} /* End if */
if ( points++ )
fprintf(fp_out, "%d %d\n", cursor.x - x, cursor.y - y);
move(x, y); /* adjust the cursor */
} /* End of graph */
/*****************************************************************************/
point()
{
int c; /* next input character */
/*
*
* Special point mode permits gray scaling by varying the size of the stored
* point, which is controlled by an intensity character that preceeds each point
* address.
*
*/
if ( dispmode == SPECIALPOINT ) {
if ( (c = nextchar()) < 040 || c > 0175 )
return(control(c));
fprintf(fp_out, "%d %d i\n", intensity[c - ' '], c & 0100);
} /* End if */
graph();
draw();
} /* End of point */
/*****************************************************************************/
incremental()
{
int c; /* for the next few characters */
int x, y; /* cursor position when we're done */
/*
*
* Handles incremental plot mode. It's entered after the RS control code and is
* used to mark points relative to our current position. It's typically followed
* by one or two bytes that set the pen state and are used to increment the
* current position.
*
*/
if ( (c = nextchar()) == OUTMODED )
return;
if ( (c < 040) && ((c = control(c)) <= 0) )
return;
x = cursor.x; /* where we are right now */
y = cursor.y;
if ( c & 060 )
pen = ( c & 040 ) ? UP : DOWN;
if ( c & 04 ) y++;
if ( c & 010 ) y--;
if ( c & 01 ) x++;
if ( c & 02 ) x--;
move(x, y);
if ( pen == DOWN ) {
points = 1;
draw();
} /* End if */
} /* End of incremental */
/*****************************************************************************/
gin()
{
/*
*
* All we really have to do for GIN mode is make sure it's properly ended.
*
*/
control(nextchar());
} /* End of gin */
/*****************************************************************************/
control(c)
int c; /* check this control character */
{
/*
*
* Checks character c and does special things, like mode changes, that depend
* not only on the character, but also on the current state. If the mode changed
* becuase of c, OUTMODED is returned to the caller. In all other cases the
* return value is c or 0, if c doesn't make sense in the current mode.
*
*/
switch ( c ) {
case BEL:
return(0);
case BS:
case HT:
case VT:
return(dispmode == ALPHA ? c : 0);
case CR:
if ( dispmode != ALPHA ) {
setmode(ALPHA);
ungetc(c, fp_in);
return(OUTMODED);
} else return(c);
case FS:
if ( (dispmode == ALPHA) || (dispmode == GRAPH) ) {
setmode(POINT);
return(OUTMODED);
} /* End if */
return(0);
case GS:
if ( (dispmode == ALPHA) || (dispmode == GRAPH) ) {
setmode(GRAPH);
return(OUTMODED);
} /* End if */
return(0);
case NL:
ungetc(CR, fp_in);
return(dispmode == ALPHA ? c : 0);
case RS:
if ( dispmode != GIN ) {
setmode(INCREMENTAL);
return(OUTMODED);
} /* End if */
return(0);
case US:
if ( dispmode == ALPHA )
return(0);
setmode(ALPHA);
return(OUTMODED);
case ESC:
return(esc());
case OUTMODED:
return(c);
default:
return(c < 040 ? 0 : c);
} /* End switch */
} /* End of control */
/*****************************************************************************/
esc()
{
int c; /* next input character */
int ignore; /* skip it if nonzero */
/*
*
* Handles tektronix escape code. Called from control() whenever an ESC character
* is found in the input file.
*
*/
do {
c = nextchar();
ignore = 0;
switch ( c ) {
case CAN:
return(0);
case CR:
ignore = 1;
break;
case ENQ:
setmode(ALPHA);
return(OUTMODED);
case ETB:
return(0);
case FF:
formfeed();
setmode(ALPHA);
return(OUTMODED);
case FS:
if ( (dispmode == INCREMENTAL) || ( dispmode == GIN) )
return(0);
setmode(SPECIALPOINT);
return(OUTMODED);
case SI:
case SO:
return(0);
case SUB:
setmode(GIN);
return(OUTMODED);
case OUTMODED:
return(OUTMODED);
case '8':
case '9':
case ':':
case ';':
setfont(c - '8');
return(0);
default:
if ( c == '?' && dispmode == GRAPH )
return(DEL);
if ( (c<'`') || (c>'w') )
break;
c -= '`';
if ( (c & 010) != linetype )
fprintf(fp_out, "%d w\n", (linetype = (c & 010))/010);
if ( ((c + 1) & 7) >= 6 )
break;
if ( (c + 1) & 7 )
if ( (c & 7) != linestyle ) {
linestyle = c & 7;
setmode(dispmode);
fprintf(fp_out, "%s l\n", styles[linestyle]);
} /* End if */
return(0);
} /* End switch */
} while (ignore);
return(0);
} /* End of esc */
/*****************************************************************************/
move(x, y)
int x, y; /* move the cursor here */
{
/*
*
* Moves the cursor to the point (x, y).
*
*/
cursor.x = x;
cursor.y = y;
} /* End of move */
/*****************************************************************************/
setmode(mode)
int mode; /* this should be the new mode */
{
/*
*
* Makes sure the current mode is properly ended and then sets dispmode to mode.
*
*/
switch ( dispmode ) {
case ALPHA:
text();
break;
case GRAPH:
draw();
break;
case INCREMENTAL:
pen = UP;
break;
} /* End switch */
dispmode = mode;
} /* End of setmode */
/*****************************************************************************/
home()
{
/*
*
* Makes sure the cursor is positioned at the upper left corner of the page.
*
*/
margin = 0;
move(0, TEKYMAX);
} /* End of home */
/*****************************************************************************/
setfont(newfont)
int newfont; /* use this font next */
{
/*
*
* Generates the call to the procedure that's responsible for changing the
* tektronix font (really just the size).
*
*/
if ( newfont != tekfont ) {
setmode(dispmode);
fprintf(fp_out, "%d f\n", charwidth[newfont]);
} /* End if */
tekfont = newfont;
} /* End of setfont */
/*****************************************************************************/
text()
{
/*
*
* Makes sure any text we've put on the stack is printed.
*
*/
if ( dispmode == ALPHA && characters > 0 )
fprintf(fp_out, ") t\n");
characters = 0;
} /* End of text */
/*****************************************************************************/
draw()
{
/*
*
* Called whenever we need to draw a vector or plot a point. Nothing will be
* done if points is 0 or if it's 1 and we're in GRAPH mode.
*
*/
if ( points > 1 ) /* it's a vector */
fprintf(fp_out, "%d %d v\n", cursor.x, cursor.y);
else if ( points == 1 && dispmode != GRAPH )
fprintf(fp_out, "%d %d p\n", cursor.x, cursor.y);
points = 0;
} /* End of draw */
/*****************************************************************************/
formfeed()
{
/*
*
* Usually called when we've finished the last page and want to get ready for the
* next one. Also used at the beginning and end of each input file, so we have to
* be careful about exactly what's done.
*
*/
setmode(dispmode); /* end any outstanding text or graphics */
if ( fp_out == stdout ) /* count the last page */
printed++;
fprintf(fp_out, "cleartomark\n");
fprintf(fp_out, "showpage\n");
fprintf(fp_out, "saveobj restore\n");
fprintf(fp_out, "%s %d %d\n", ENDPAGE, page, printed);
if ( ungetc(getc(fp_in), fp_in) == EOF )
redirect(-1);
else redirect(++page);
fprintf(fp_out, "%s %d %d\n", PAGE, page, printed+1);
fprintf(fp_out, "/saveobj save def\n");
fprintf(fp_out, "mark\n");
writerequest(printed+1, fp_out);
fprintf(fp_out, "%d pagesetup\n", printed+1);
fprintf(fp_out, "%d f\n", charwidth[tekfont]);
fprintf(fp_out, "%s l\n", styles[linestyle]);
home();
} /* End of formfeed */
/*****************************************************************************/
nextchar()
{
int ch; /* next input character */
/*
*
* Reads the next character from the current input file and returns it to the
* caller. When we're finished with the file dispmode is set to EXIT and OUTMODED
* is returned to the caller.
*
*/
if ( (ch = getc(fp_in)) == EOF ) {
setmode(EXIT);
ch = OUTMODED;
} /* End if */
return(ch);
} /* End of nextchar */
/*****************************************************************************/
redirect(pg)
int pg; /* next page we're printing */
{
static FILE *fp_null = NULL; /* if output is turned off */
/*
*
* If we're not supposed to print page pg, fp_out will be directed to /dev/null,
* otherwise output goes to stdout.
*
*/
if ( pg >= 0 && in_olist(pg) == ON )
fp_out = stdout;
else if ( (fp_out = fp_null) == NULL )
fp_out = fp_null = fopen("/dev/null", "w");
} /* End of redirect */
/*****************************************************************************/
0707070014230550141006400057030057030000011527430522633077300003300000006774post.src/posttek/posttek.1 .ds dQ /usr/lib/postscript
.TH POSTTEK 1 "DWB 3.2"
.SH NAME
.B posttek
\- PostScript translator for Tektronix 4014 files
.SH SYNOPSIS
\*(mBposttek\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B posttek
translates Tektronix 4014 graphics
.I files
into PostScript and writes the results on the
standard output.
If no
.I files
are specified, or if
.OP \-
is one of the input
.IR files ,
the standard input is read.
The following
.I options
are understood:
.TP 0.75i
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP
.OP \-f name
Print text using font
.IR name .
Any PostScript font can be used,
although the best results will only be
obtained with constant width fonts.
The default font is Courier.
.TP
.OP \-m num
Magnify each logical page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which by default is located at the center of
each page.
The default magnification is 1.0.
.TP
.OP \-n num
Print
.I num
logical pages on each piece of paper,
where
.I num
can be any positive integer.
By default
.I num
is set to 1.
.TP
.OP \-o list
Print pages whose numbers are given in the comma-separated
.IR list .
The list contains single numbers
.I N
and ranges
.IR N1\-\|N2 .
A missing
.I N1
means the lowest numbered page, a missing
.I N2
means the highest.
.TP
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBlandscape\fP.
.TP
.OP \-w num
Set the line width used for graphics to
.I num
points, where a point is approximately 1/72
of an inch.
By default
.I num
is set to 0 points, which forces lines to be
one pixel wide.
.TP
.OP \-x num
Translate the origin
.I num
inches along the positive x axis.
The default
coordinate system has the origin fixed at the
center of the page, with positive
x to the right and positive y up the page.
Positive
.I num
moves everything right.
The default offset is 0.0 inches.
.TP
.OP \-y num
Translate the origin
.I num
inches along the positive y axis.
Positive
.I num
moves everything up the page.
The default offset is 0.0.
.TP
.OP \-E name
Set the character encoding for text fonts to
.IR name .
Requesting
.I name
means include file
.MI \*(dQ/ name .enc \f1.
A nonexistent encoding file is silently ignored.
The default selects file
.MR \*(dQ/Default.enc .
.TP
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/posttek.ps .
.PP
Three options allow insertion of arbitrary PostScript
at controlled points in the translation process:
.TP 0.75i
.OP \-C file
Copy
.I file
to the output file;
.I file
must contain legitimate PostScript.
.TP
.OP \-P string
Include.
.I string
in the output file;
.I string
must be legitimate PostScript.
.TP
.OP \-R action
Requests special
.I action
(e.g.,
.MR manualfeed )
on a per page or global basis.
The
.I action
string can be given as
.IR request,
.IM request : page\f1\|,
or
.IM request : page : file\f1\|.
If
.I page
is omitted or given as 0, the request
applies to all pages.
If
.I file
is omitted, the request
lookup is done in
.MR \*(dQ/ps.requests .
.SH DIAGNOSTICS
A 0 exit status is returned if
.I files
were successfully processed.
.SH BUGS
The default line width is too small for write-white
print engines, like the one used by the \s-1PS\s+1-2400.
.br
.ne 4v
.SH FILES
.MW \*(dQ/posttek.ps
.br
.MW \*(dQ/forms.ps
.br
.MW \*(dQ/ps.requests
.SH SEE ALSO
.BR dpost (1),
.BR postdaisy(1),
.BR postdmd(1),
.BR postio(1),
.BR postmd(1),
.BR postprint(1),
.BR postreverse(1),
.BR psencoding (1)
0707070014230550131006440057030057030000011530100522627504000003400000004530post.src/posttek/posttek.ps %
% Version 3.3.2 prologue for tektronix 4014 files.
%
/#copies 1 store
/aspectratio 1 def
/fixlinewidth true def
/font /Courier def
/formsperpage 1 def
/landscape true def
/linewidth 0 def
/magnification 1 def
/margin 10 def
/orientation 0 def
/rotation 1 def
/screenheight 3120 def
/screenwidth 4150 def
/spotsize 1 def
/xoffset 0 def
/yoffset 0 def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} bind def
/min {2 copy gt {exch} if pop} bind def
/kshow {kshow} bind def % so later references don't bind
/setup {
counttomark 2 idiv {def} repeat pop
landscape {/orientation 90 orientation add def} if
pagedimensions
/scaling
height margin sub screenheight div
width margin sub screenwidth div
min def
xcenter ycenter translate
orientation rotation mul rotate
xoffset inch yoffset inch translate
magnification dup aspectratio mul scale
scaling scaling scale
screenwidth 2 div neg screenheight 2 div neg translate
tietodevicespace
linewidth scaling div setlinewidth
1 setlinecap
newpath
} def
/pagedimensions {
useclippath {
/pagebbox [clippath pathbbox newpath] def
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
userdict /gotpagebbox true put
} def
/pagesetup {/page exch def} bind def
/tietodevicespace {
fixlinewidth linewidth 0 gt and linewidth 1 lt and {
/moveto {
2 copy /Y exch def /X exch def
transform round exch round exch itransform
moveto
} bind def
/lineto {
2 copy /Y exch def /X exch def
transform round exch round exch itransform
lineto
} bind def
/rlineto {Y add exch X add exch lineto} bind def
/v V 0 get bind def
} if
} def
/V [{moveto counttomark 2 idiv {rlineto} repeat stroke}] def
/v V 0 get bind def
/p {newpath spotsize 0 360 arc fill} bind def
/l {{scaling div} forall counttomark array astore 0 setdash} bind def
/w {linewidth 0 eq {.3} {linewidth} ifelse mul linewidth add scaling div setlinewidth} bind def
/i {3 mul 4 sub -100 div mul .5 add /spotsize exch def} bind def
/f {/charwidth exch def font findfont charwidth .6 div scalefont setfont} bind def
/t {
3 1 roll moveto
currentpoint {
pop pop
exch charwidth add exch
moveto currentpoint
} 4 -1 roll kshow
pop pop
} bind def
/done {/lastpage where {pop lastpage} if} def
0707070014230265710407550057030057030000020677160522633077500002300000000000post.src/printfont 0707070014230265721006440057030057030000010677500522627504000004000000016641post.src/printfont/printfont.ps %
% Formatted font dump. Assumes all fonts include valid FontBBox arrays.
%
/#copies 1 store
/aspectratio 1 def
/landscape false def
/magnification 1 def
/margin 10 def
/orientation 0 def
/rotation 1 def
/xoffset 0 def
/yoffset 0 def
/axescount 0 def
/charwidth false def
/graynotdef 0.85 def
/hireslinewidth 0.2 def
/longnames false def
/maxsize 6.0 def
/minsize 4.5 def
/numbercell true def
/radix 16 def
/labelfont /Helvetica def
/labelspace 36 def
/zerocell 0 def
/roundpage true def
/useclippath true def
/pagebbox [0 0 612 792] def
/inch {72 mul} def
/min {2 copy gt {exch} if pop} def
/max {2 copy lt {exch} if pop} def
/LLx {0 get} bind def
/LLy {1 get} bind def
/URx {2 get} bind def
/URy {3 get} bind def
/BBoxHeight {dup URy exch LLy sub} bind def
/BBoxWidth {dup URx exch LLx sub} bind def
/setup {
/graylevels [1 0 0] def
/scratchstring 512 string def
/Product statusdict begin /product where {pop product}{(Unknown)} ifelse end def
/Resolution 0 72 dtransform dup mul exch dup mul add sqrt cvi def
/Version /version where {pop version}{(???)} ifelse def
landscape {/orientation 90 orientation add def} if
pagedimensions
xcenter ycenter translate
orientation rotation mul rotate
width 2 div neg height 2 div translate
xoffset inch yoffset inch neg translate
margin dup neg translate
0 labelspace .75 mul neg translate
magnification dup aspectratio mul scale
0 0 transform round exch round exch itransform translate
currentdict /linewidth known not {
/linewidth Resolution 400 le {0}{hireslinewidth} ifelse def
} if
} def
/pagedimensions {
useclippath {
/pagebbox [clippath pathbbox newpath] def
roundpage currentdict /roundpagebbox known and {roundpagebbox} if
} if
pagebbox aload pop
4 -1 roll exch 4 1 roll 4 copy
landscape {4 2 roll} if
sub /width exch def
sub /height exch def
add 2 div /xcenter exch def
add 2 div /ycenter exch def
} def
/CharSetup {
/chcode exch def
/chname Encoding chcode get def
/chstring ( ) dup 0 chcode put def
/chknown true def
graylevels 0 1 put % initial cell fill
graylevels 1 0 put % cell text
graylevels 2 0 put % cell border
FontDict /CharStrings known {
FontDict /CharStrings get chname known not {
/chknown false def
graylevels 0 0 put
graylevels 1 1 put
} if
} if
chname /.notdef eq {
/chknown false def
graylevels 0 graynotdef put
graylevels 1 graynotdef put
} if
/chwid chknown
{FontDict 1 scalefont setfont chstring stringwidth pop}
{0}
ifelse def
} bind def
/CellSetup {
/gridwidth width margin 2 mul sub def
/gridheight height labelspace sub margin 2 mul sub def
/cellwidth gridwidth radix div def
/cellheight gridheight Entries radix div ceiling div def
cellwidth cellheight dtransform truncate exch truncate exch idtransform
/cellheight exch def
/cellwidth exch def
labelfont findfont 1 scalefont setfont
/LabelBBox currentfont /FontBBox get TransformBBox def
LabelBBox 2 0 Encoding {
scratchstring cvs stringwidth pop
2 copy lt {exch} if
pop
} forall put
/CellLabelSize
cellheight .20 mul cellwidth .90 mul LabelBBox BestFit
minsize max
maxsize min
def
zerocell CellOrigin cellheight add neg exch neg exch translate
} bind def
/FontSetup {
FontName findfont 1 scalefont setfont
/BBox currentfont /FontBBox get TransformBBox def
/PointSize cellheight .5 mul cellwidth .8 mul BBox BestFit def
BBox {PointSize mul} forall BBox astore pop
/xorigin cellwidth BBox BBoxWidth sub 2 div BBox LLx sub def
/yorigin cellheight BBox BBoxHeight sub 2 div BBox LLy sub def
} bind def
/BestFit {
/bbox exch def
bbox BBoxWidth div exch
bbox BBoxHeight div min
} bind def
/TransformBBox { % font bbox to user space
aload pop
currentfont /FontMatrix get dtransform 4 2 roll
currentfont /FontMatrix get dtransform 4 2 roll
4 array astore % should build user space bbox if all zeros
} bind def
/CellOrigin {
dup
exch radix mod cellwidth mul
exch radix idiv 1 add neg cellheight mul
} bind def
/CellOutline {
newpath
CellOrigin moveto
cellwidth 0 rlineto
0 cellheight rlineto
cellwidth neg 0 rlineto
closepath
} bind def
/LabelCell {
gsave
chcode CellOrigin translate
linewidth .5 mul setlinewidth
labelfont findfont CellLabelSize scalefont setfont
numbercell {
cellwidth .025 mul cellheight .05 mul moveto
chcode radix scratchstring cvrs show
} if
charwidth chknown and {
/wid chwid 0.0005 add scratchstring cvs 0 5 getinterval def
cellwidth wid stringwidth pop 1.10 mul sub cellheight .05 mul moveto
wid show
} if
longnames chknown not or {
cellwidth .025 mul
cellheight LabelBBox URy CellLabelSize mul sub .05 sub moveto
Encoding chcode get scratchstring cvs show
} if
axescount 1 ge chknown and { % gsave/grestore if not last
newpath
xorigin yorigin translate
BBox LLx 0 moveto % baseline
BBox URx 0 lineto stroke
axescount 2 ge { % vertical through current origin
0 BBox LLy moveto
0 BBox URy lineto stroke
} if
axescount 3 ge { % vertical through next origin
chwid PointSize mul BBox LLy
dtransform round exch round exch idtransform moveto
0 BBox BBoxHeight rlineto stroke
%chwid PointSize mul BBox URy lineto stroke
} if
} if
grestore
} bind def
/PlaceChar {
FontName findfont PointSize scalefont setfont
chcode CellOrigin moveto
xorigin yorigin rmoveto
( ) dup 0 chcode put show
} bind def
/LabelPage {
labelfont findfont labelspace .75 mul .75 mul 18 min scalefont setfont
0 labelspace .75 mul .25 mul moveto
FontName scratchstring cvs show
labelfont findfont labelspace .25 mul .75 mul 9 min scalefont setfont
0 gridheight neg moveto
0 labelspace .25 mul .75 mul neg rmoveto
Product show ( Version ) show Version show
( \() show Resolution scratchstring cvs show (dpi\)) show
gridwidth gridheight neg moveto
0 labelspace .25 mul .75 mul neg rmoveto
(size=, ) stringwidth pop neg 0 rmoveto
PointSize cvi scratchstring cvs stringwidth pop neg 0 rmoveto
(gray=, ) stringwidth pop neg 0 rmoveto
graynotdef scratchstring cvs stringwidth pop neg 0 rmoveto
(linewidth=) stringwidth pop neg 0 rmoveto
linewidth scratchstring cvs stringwidth pop neg 0 rmoveto
(size=) show PointSize cvi scratchstring cvs show (, ) show
(gray=) show graynotdef scratchstring cvs show (, ) show
(linewidth=) show linewidth scratchstring cvs show
} bind def
%
% Formatted dump of the encoded characters in a single font.
%
/PrintFont {
/saveobj save def
/FontName exch def
/FontDict FontName findfont def
/Encoding FontDict /Encoding get def
/Entries Encoding length def
CellSetup
FontSetup
LabelPage
zerocell 1 Entries 1 sub {
CharSetup
graylevels 0 get setgray
chcode CellOutline fill
graylevels 1 get setgray
LabelCell
PlaceChar
graylevels 2 get setgray
linewidth setlinewidth
chcode CellOutline stroke
} for
showpage
saveobj restore
} bind def
%
% Dump of all ROM and disk fonts - in alphabetical order.
%
/AllFonts {
/AllFontNames FontDirectory maxlength array def
AllFontNames 0 0 put
FontDirectory {pop AllFontNames Insert} forall
/filenameforall where {
pop
(fonts/*)
{(fonts/) search pop pop pop AllFontNames Insert}
200 string
filenameforall
} if
1 1 AllFontNames 0 get {
AllFontNames exch get cvn PrintFont
} for
} bind def
/Insert { % name in a sorted list
/List exch def
/Name exch 128 string cvs def
/Slot 1 def
List 0 get {
Name List Slot get le {exit} if
/Slot Slot 1 add def
} repeat
List 0 get -1 Slot {
dup List exch get
List 3 1 roll exch 1 add exch put
} for
List Slot Name put
List 0 List 0 get 1 add put
} bind def
0707070014230265731006440057030057030000010677340522627504000004000000005147post.src/printfont/printfont.sh #
# Formatted dump of encoded characters in one or more PostScript fonts.
# Arguments should be PostScript font names or the word all, which dumps
# all ROM and disk based fonts.
#
POSTLIB=/usr/lib/postscript
PROLOGUE=$POSTLIB/printfont.ps
OPTIONS=
COPYFILE=
MODE=portrait
FONTENCODING=Default
NONCONFORMING="%!PS"
ENDPROLOG="%%EndProlog"
BEGINSETUP="%%BeginSetup"
ENDSETUP="%%EndSetup"
TRAILER="%%Trailer"
SETUP=setup
while [ -n "$1" ]; do
case $1 in
-a) shift; OPTIONS="$OPTIONS /axescount $1 def";;
-a*) OPTIONS="$OPTIONS /axescount `echo $1 | sed s/-a//` def";;
-b) shift; OPTIONS="$OPTIONS /radix $1 def";;
-b*) OPTIONS="$OPTIONS /radix `echo $1 | sed s/-b//` def";;
-c) shift; OPTIONS="$OPTIONS /#copies $1 store";;
-c*) OPTIONS="$OPTIONS /#copies `echo $1 | sed s/-c//` store";;
-f) shift; OPTIONS="$OPTIONS /labelfont /$1 def";;
-f*) OPTIONS="$OPTIONS /labelfont /`echo $1 | sed s/-f//` def";;
-g) shift; OPTIONS="$OPTIONS /graynotdef $1 def";;
-g*) OPTIONS="$OPTIONS /graynotdef `echo $1 | sed s/-g//` def";;
-p) shift; MODE=$1;;
-p*) MODE=`echo $1 | sed s/-p//`;;
-q) OPTIONS="$OPTIONS /longnames false def /charwidth false def";;
-m) shift; OPTIONS="$OPTIONS /magnification $1 def";;
-m*) OPTIONS="$OPTIONS /magnification `echo $1 | sed s/-m//` def";;
-v) OPTIONS="$OPTIONS /longnames true def /charwidth true def";;
-w) shift; OPTIONS="$OPTIONS /linewidth $1 def";;
-w*) OPTIONS="$OPTIONS /linewidth `echo $1 | sed s/-w//` def";;
-x) shift; OPTIONS="$OPTIONS /xoffset $1 def";;
-x*) OPTIONS="$OPTIONS /xoffset `echo $1 | sed s/-x//` def";;
-y) shift; OPTIONS="$OPTIONS /yoffset $1 def";;
-y*) OPTIONS="$OPTIONS /yoffset `echo $1 | sed s/-y//` def";;
-z) shift; OPTIONS="$OPTIONS /zerocell $1 def";;
-z*) OPTIONS="$OPTIONS /zerocell `echo $1 | sed s/-z//` def";;
-C) shift; COPYFILE="$COPYFILE $1";;
-C*) COPYFILE="$COPYFILE `echo $1 | sed s/-C//`";;
-E) shift; FONTENCODING=$1;;
-E*) FONTENCODING=`echo $1 | sed s/-E//`;;
-L) shift; PROLOGUE=$1;;
-L*) PROLOGUE=`echo $1 | sed s/-L//`;;
-*) echo "$0: illegal option $1" >&2; exit 1;;
*) break;;
esac
shift
done
case "$MODE" in
l*) OPTIONS="$OPTIONS /landscape true def";;
*) OPTIONS="$OPTIONS /landscape false def";;
esac
echo $NONCONFORMING
cat $PROLOGUE
echo $ENDPROLOG
echo $BEGINSETUP
cat ${COPYFILE:-/dev/null}
echo $OPTIONS
case "$FONTENCODING" in
/*) cat $FONTENCODING;;
?*) cat ${POSTLIB}/${FONTENCODING}.enc 2>/dev/null
esac
echo $SETUP
echo $ENDSETUP
for i do
case "$i" in
all) echo AllFonts;;
/*) echo "$i PrintFont";;
?*) echo "/$i PrintFont";;
esac
done
echo $TRAILER
0707070014230265631006400057030057030000010672360522633077400004000000003045post.src/printfont/printfont.mk MAKE=/bin/make
MAKEFILE=printfont.mk
OWNER=bin
GROUP=bin
MAN1DIR=/tmp
MAN5DIR=/usr/man/p_man/man5
POSTLIB=/usr/lib/postscript
POSTBIN=/usr/bin/postscript
all : printfont
install : all
@if [ ! -d "$(POSTBIN)" ]; then \
mkdir $(POSTBIN); \
chmod 755 $(POSTBIN); \
chgrp $(GROUP) $(POSTBIN); \
chown $(OWNER) $(POSTBIN); \
fi
@if [ ! -d "$(POSTLIB)" ]; then \
mkdir $(POSTLIB); \
chmod 755 $(POSTLIB); \
chgrp $(GROUP) $(POSTLIB); \
chown $(OWNER) $(POSTLIB); \
fi
cp printfont $(POSTBIN)/printfont
@chmod 755 $(POSTBIN)/printfont
@chgrp $(GROUP) $(POSTBIN)/printfont
@chown $(OWNER) $(POSTBIN)/printfont
cp printfont.ps $(POSTLIB)/printfont.ps
@chmod 644 $(POSTLIB)/printfont.ps
@chgrp $(GROUP) $(POSTLIB)/printfont.ps
@chown $(OWNER) $(POSTLIB)/printfont.ps
cp printfont.1 $(MAN1DIR)/printfont.1
@chmod 644 $(MAN1DIR)/printfont.1
@chgrp $(GROUP) $(MAN1DIR)/printfont.1
@chown $(OWNER) $(MAN1DIR)/printfont.1
clean :
clobber : clean
rm -f printfont
printfont : printfont.sh
sed "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" printfont.sh >printfont
@chmod 755 printfont
changes :
@trap "" 1 2 3 15; \
sed \
-e "s'^OWNER=.*'OWNER=$(OWNER)'" \
-e "s'^GROUP=.*'GROUP=$(GROUP)'" \
-e "s'^MAN1DIR=.*'MAN1DIR=$(MAN1DIR)'" \
-e "s'^MAN5DIR=.*'MAN5DIR=$(MAN5DIR)'" \
-e "s'^POSTBIN=.*'POSTBIN=$(POSTBIN)'" \
-e "s'^POSTLIB=.*'POSTLIB=$(POSTLIB)'" \
$(MAKEFILE) >XXX.mk; \
mv XXX.mk $(MAKEFILE); \
sed \
-e "s'^.ds dQ.*'.ds dQ $(POSTLIB)'" \
printfont.1 >XXX.1; \
mv XXX.1 printfont.1
0707070014230265751006400057030057030000010672500522633077500003700000010150post.src/printfont/printfont.1 .ds dQ /usr/lib/postscript
.TH PRINTFONT 1 "DWB 3.2"
.SH NAME
.B printfont
\- font listing program for PostScript printers
.SH SYNOPSIS
\*(mBprintfont\f1
.OP "" options []
.OP "" files []
.SH DESCRIPTION
.B printfont
builds a PostScript program that prints character set tables for
one or more PostScript fonts.
The program is written on the standard output,
and when sent to a PostScript printer usually prints a 16\(mu16 table
that shows the available (encoded) characters in each font.
The following
.I options
are understood:
.TP 1.0i
.OP \-a num
Set the character cell axes mode to
.IR num .
0 disables axes printing, 1 draws a baseline,
2 adds a vertical line through the character origin,
and 3 adds a vertical line through the next character origin.
The default is 0.
.TP 1.0i
.OP \-b num
Print each table in base
.IR num .
The base determines the number of rows and columns in the table.
It also affects the character code placed in the lower left corner of each cell.
The default is 16 (hexadecimal).
.TP 1.0i
.OP \-c num
Print
.I num
copies of each page.
By default only one copy is printed.
.TP 1.0i
.OP \-f name
Use font
.I name
for labeling the tables.
The default font is Helvetica.
.TP 1.0i
.OP \-g num
Use
.I num
as the gray level for marking cells not currently assigned to characters.
The gray level should fall between 0 (black) and 1 (white).
The default is 0.85.
.TP 1.0i
.OP \-m num
Magnify each logical page by the factor
.IR num .
Pages are scaled uniformly about the origin,
which is located near the upper left corner of each page.
The default is 1.0.
.TP 1.0i
.OP \-p mode
Print
.I files
in either \*(mBportrait\fP or \*(mBlandscape\fP
.IR mode .
Only the first character of
.I mode
is significant.
The default
.I mode
is \*(mBportrait\fP.
.TP 1.0i
.OP \-v
Completely label each character cell.
The full character name goes in the upper left corner and the
character width (at point size 1) goes in the lower right corner.
.TP 1.0i
.OP \-w num
Set the line width to
.I num
points, where a point is approximately 1/72 of an inch.
A line width of 0 means 1 pixel.
The default line width is resolution dependent.
.TP 1.0i
.OP \-x num
Translate the origin
.I num
inches along the x axis.
Positive
.I num
shifts the table to the right.
The default offset is 0.
.TP 1.0i
.OP \-y num
Translate the origin
.I num
inches along the y axis.
Positive
.I num
shifts the table up the page.
The default offset is 0.
.TP 1.0i
.OP \-C file
Copy
.I file
to the output file;
.B file
must contain legitimate PostScript.
.TP 1.0i
.OP \-E name
Set the character encoding for text fonts to
.IR name .
Requesting
.I name
means include file
.MI \*(dQ/ name .enc \f1.
A nonexistent encoding file is silently ignored.
The default selects file
.MR \*(dQ/Default.enc .
.TP 1.0i
.OP \-L file
Use
.I file
as the PostScript prologue.
.br
The default is
.MR \*(dQ/printfont.ps .
.PP
Arguments should be PostScript
.I font
names or the word
.MR all ,
which means the full set of
.SM ROM
and disk based fonts available on a printer.
.B printfont
prints one font table per page.
Each page is labeled with the
.I font
name, the printer product name and interpreter version number,
and the gray level, linewidth, and printer resolution.
.PP
Black cells are used to mark characters listed in the font's
.MW Encoding
array but missing from its
.MW CharStrings
dictionary.
They usually indicate an incomplete font or a mistake in the
.MW Encoding
array.
The check is skipped if the font doesn't include a
.MW CharStrings
dictionary.
.br
.ne 4v
.SH EXAMPLES
Print the characters available in the Times-Roman, Symbol and
ZapfDingbats fonts:
.EX
printfont Times-Roman Symbol ZapfDingbats | lp ...
.EE
Print a baseline under each character and fully label the cells:
.EX
printfont -a1 -v Times-Roman Symbol ZapfDingbats | lp ...
.EE
Dump all the fonts available on a printer using the Latin1 character encoding:
.EX
printfont -ELatin1 all | lp ...
.EE
.SH WARNINGS
Printing a single table can take several minutes.
Dumping all available fonts can tie a printer up for an hour or more.
.SH FILES
.MW \*(dQ/printfont.ps
.br
.MW \*(dQ/*.enc
.SH SEE ALSO
buildtables(1),
dpost(1),
postio(1),
psencoding(1),
trofftable(1)
0707070014230643060407550057030057030000021712370522627504100001700000000000post.src/tests 0707070014230643071006440057030057030000011714700522627504100002700000112244post.src/tests/postmd1 .1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .1000000e+01 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.5602721e+08 .1143984e+09 -.6207247e+08 .0000000e+00 .0000000e+00
-.1149580e+09 .2301959e+09 -.1138958e+09 .0000000e+00 .0000000e+00
-.5853962e+08 .1144553e+09 -.5355661e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2468074e+08 .1401407e+07 .2608215e+08 .0000000e+00 .0000000e+00
-.5473053e+06 -.2402412e+07 -.1855106e+07 .0000000e+00 .0000000e+00
.2522804e+08 .1001005e+07 -.2422704e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.5219836e+08 .1123168e+09 -.6715163e+08 .0000000e+00
.0000000e+00 -.1138958e+09 .2284693e+09 -.1110422e+09 .0000000e+00
.0000000e+00 -.6060955e+08 .1126212e+09 -.4850979e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.2391785e+08 .3480520e+07 .2739837e+08 .0000000e+00
.0000000e+00 -.1855106e+07 -.5966605e+07 -.4111499e+07 .0000000e+00
.0000000e+00 .2577296e+08 .2486086e+07 -.2328688e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.4569685e+08 .1058615e+09 -.8114649e+08
.0000000e+00 .0000000e+00 -.1110422e+09 .2277521e+09 -.1023531e+09
.0000000e+00 .0000000e+00 -.6383463e+08 .1075339e+09 -.3707416e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.2260163e+08 .8226099e+07 .3082772e+08
.0000000e+00 .0000000e+00 -.4111499e+07 -.1410188e+08 -.9990385e+07
.0000000e+00 .0000000e+00 .2671312e+08 .5875785e+07 -.2083734e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.5644212e+08 .1144553e+09 -.6060955e+08 .0000000e+00 .0000000e+00
-.1149657e+09 .2301010e+09 -.1139830e+09 .0000000e+00 .0000000e+00
-.5811705e+08 .1144933e+09 -.5493231e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2477196e+08 .1001005e+07 .2577296e+08 .0000000e+00 .0000000e+00
-.3648702e+06 -.1601608e+07 -.1236738e+07 .0000000e+00 .0000000e+00
.2513683e+08 .6006029e+06 -.2453622e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.5355661e+08 .1126212e+09 -.6383463e+08 .0000000e+00
.0000000e+00 -.1139830e+09 .2279620e+09 -.1114623e+09 .0000000e+00
.0000000e+00 -.5916407e+08 .1128241e+09 -.5140673e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.2422704e+08 .2486086e+07 .2671312e+08 .0000000e+00
.0000000e+00 -.1236738e+07 -.3977737e+07 -.2740999e+07 .0000000e+00
.0000000e+00 .2546378e+08 .1491651e+07 -.2397213e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.4850979e+08 .1075339e+09 -.7261747e+08
.0000000e+00 .0000000e+00 -.1114623e+09 .2249648e+09 -.1047203e+09
.0000000e+00 .0000000e+00 -.6060164e+08 .1086488e+09 -.4323591e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.2328688e+08 .5875785e+07 .2916266e+08
.0000000e+00 .0000000e+00 -.2740999e+07 -.9401256e+07 -.6660257e+07
.0000000e+00 .0000000e+00 .2602787e+08 .3525471e+07 -.2250240e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.5685856e+08 .1144933e+09 -.5916407e+08 .0000000e+00 .0000000e+00
-.1149703e+09 .2300441e+09 -.1140353e+09 .0000000e+00 .0000000e+00
-.5769602e+08 .1145123e+09 -.5632545e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2486317e+08 .6006029e+06 .2546378e+08 .0000000e+00 .0000000e+00
-.1824351e+06 -.8008039e+06 -.6183688e+06 .0000000e+00 .0000000e+00
.2504561e+08 .2002010e+06 -.2484541e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.5493231e+08 .1128241e+09 -.6060164e+08 .0000000e+00
.0000000e+00 -.1140353e+09 .2276577e+09 -.1117143e+09 .0000000e+00
.0000000e+00 -.5773604e+08 .1129256e+09 -.5438769e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.2453622e+08 .1491651e+07 .2602787e+08 .0000000e+00
.0000000e+00 -.6183688e+06 -.1988868e+07 -.1370500e+07 .0000000e+00
.0000000e+00 .2515459e+08 .4972171e+06 -.2465738e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.5140673e+08 .1086488e+09 -.6456189e+08
.0000000e+00 .0000000e+00 -.1117143e+09 .2232924e+09 -.1061407e+09
.0000000e+00 .0000000e+00 -.5745266e+08 .1092063e+09 -.4987112e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.2397213e+08 .3525471e+07 .2749760e+08
.0000000e+00 .0000000e+00 -.1370500e+07 -.4700628e+07 -.3330128e+07
.0000000e+00 .0000000e+00 .2534262e+08 .1175157e+07 -.2416747e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .1000000e+01 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .1000000e+01 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2468074e+08 .2531926e+08 .0000000e+00 .0000000e+00 .0000000e+00
-.5473053e+06 -.5473053e+06 .0000000e+00 .0000000e+00 .0000000e+00
.2522804e+08 -.2477196e+08 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.1087220e+08 .0000000e+00 .0000000e+00 .0000000e+00
.2174439e+08 .2174439e+08 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.1087220e+08 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2468074e+08 .1401407e+07 .2608215e+08 .0000000e+00 .0000000e+00
-.5473053e+06 -.2402412e+07 -.1855106e+07 .0000000e+00 .0000000e+00
.2522804e+08 .1001005e+07 -.2422704e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.2183162e+08 -.1095942e+08 .0000000e+00 .0000000e+00
.2174439e+08 .4366323e+08 .2191884e+08 .0000000e+00 .0000000e+00
-.1087220e+08 -.2183162e+08 -.1095942e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.2391785e+08 .3480520e+07 .2739837e+08 .0000000e+00
.0000000e+00 -.1855106e+07 -.5966605e+07 -.4111499e+07 .0000000e+00
.0000000e+00 .2577296e+08 .2486086e+07 -.2328688e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.1095942e+08 -.2213817e+08 -.1117875e+08 .0000000e+00
.0000000e+00 .2191884e+08 .4427633e+08 .2235749e+08 .0000000e+00
.0000000e+00 -.1095942e+08 -.2213817e+08 -.1117875e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.2260163e+08 .8226099e+07 .3082772e+08
.0000000e+00 .0000000e+00 -.4111499e+07 -.1410188e+08 -.9990385e+07
.0000000e+00 .0000000e+00 .2671312e+08 .5875785e+07 -.2083734e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.1117875e+08 -.2289026e+08 -.1171152e+08
.0000000e+00 .0000000e+00 .2235749e+08 .4578053e+08 .2342304e+08
.0000000e+00 .0000000e+00 -.1117875e+08 -.2289026e+08 -.1171152e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2477196e+08 .2522804e+08 .0000000e+00 .0000000e+00 .0000000e+00
-.3648702e+06 -.3648702e+06 .0000000e+00 .0000000e+00 .0000000e+00
.2513683e+08 -.2486317e+08 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.1087220e+08 .0000000e+00 .0000000e+00 .0000000e+00
.2174439e+08 .2174439e+08 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.1087220e+08 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2477196e+08 .1001005e+07 .2577296e+08 .0000000e+00 .0000000e+00
-.3648702e+06 -.1601608e+07 -.1236738e+07 .0000000e+00 .0000000e+00
.2513683e+08 .6006029e+06 -.2453622e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.2183162e+08 -.1095942e+08 .0000000e+00 .0000000e+00
.2174439e+08 .4366323e+08 .2191884e+08 .0000000e+00 .0000000e+00
-.1087220e+08 -.2183162e+08 -.1095942e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.2422704e+08 .2486086e+07 .2671312e+08 .0000000e+00
.0000000e+00 -.1236738e+07 -.3977737e+07 -.2740999e+07 .0000000e+00
.0000000e+00 .2546378e+08 .1491651e+07 -.2397213e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.1095942e+08 -.2213817e+08 -.1117875e+08 .0000000e+00
.0000000e+00 .2191884e+08 .4427633e+08 .2235749e+08 .0000000e+00
.0000000e+00 -.1095942e+08 -.2213817e+08 -.1117875e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.2328688e+08 .5875785e+07 .2916266e+08
.0000000e+00 .0000000e+00 -.2740999e+07 -.9401256e+07 -.6660257e+07
.0000000e+00 .0000000e+00 .2602787e+08 .3525471e+07 -.2250240e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.1117875e+08 -.2289026e+08 -.1171152e+08
.0000000e+00 .0000000e+00 .2235749e+08 .4578053e+08 .2342304e+08
.0000000e+00 .0000000e+00 -.1117875e+08 -.2289026e+08 -.1171152e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2486317e+08 .2513683e+08 .0000000e+00 .0000000e+00 .0000000e+00
-.1824351e+06 -.1824351e+06 .0000000e+00 .0000000e+00 .0000000e+00
.2504561e+08 -.2495439e+08 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.1087220e+08 .0000000e+00 .0000000e+00 .0000000e+00
.2174439e+08 .2174439e+08 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.1087220e+08 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.2486317e+08 .6006029e+06 .2546378e+08 .0000000e+00 .0000000e+00
-.1824351e+06 -.8008039e+06 -.6183688e+06 .0000000e+00 .0000000e+00
.2504561e+08 .2002010e+06 -.2484541e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
-.1087220e+08 -.2183162e+08 -.1095942e+08 .0000000e+00 .0000000e+00
.2174439e+08 .4366323e+08 .2191884e+08 .0000000e+00 .0000000e+00
-.1087220e+08 -.2183162e+08 -.1095942e+08 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.2453622e+08 .1491651e+07 .2602787e+08 .0000000e+00
.0000000e+00 -.6183688e+06 -.1988868e+07 -.1370500e+07 .0000000e+00
.0000000e+00 .2515459e+08 .4972171e+06 -.2465738e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 -.1095942e+08 -.2213817e+08 -.1117875e+08 .0000000e+00
.0000000e+00 .2191884e+08 .4427633e+08 .2235749e+08 .0000000e+00
.0000000e+00 -.1095942e+08 -.2213817e+08 -.1117875e+08 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.2397213e+08 .3525471e+07 .2749760e+08
.0000000e+00 .0000000e+00 -.1370500e+07 -.4700628e+07 -.3330128e+07
.0000000e+00 .0000000e+00 .2534262e+08 .1175157e+07 -.2416747e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 -.1117875e+08 -.2289026e+08 -.1171152e+08
.0000000e+00 .0000000e+00 .2235749e+08 .4578053e+08 .2342304e+08
.0000000e+00 .0000000e+00 -.1117875e+08 -.2289026e+08 -.1171152e+08
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .1000000e+01 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .1000000e+01 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00
.0000000e+00 .0000000e+00 .0000000e+00 .0000000e+00 .1000000e+01
0707070014230643101006440057030057030000011716100522627504100003000000063512post.src/tests/postbgi1 7B+@J@\6556I 03 09-23-84 22.961 frame no. 01
MH9220,M158,DREXLER +BCD1@@`G+BxBu 0.1+BCD1AN@@@@`G@@@G+CtBu 0.2+DMCD1AO@@@@`G@@@G+EBBu 0.3+E\CD1AN@@@@`G@@@G+FPBu 0.4+FjCD1AN@@@@`G@@@G+G_Bu 0.5+GxCD1AN@@@@`G@@@G+HmBu 0.6+IFCD1AN@@@@`G@@@G+I{Bu 0.7+JTCD1AN@@@@`G@@@G+KIBu 0.8+KbCD1AN@@@@`G@@@G+LWBu 0.9+LpCD1AO@@@@`G@@@G+MeBu 1.0+HXB] X+BCD1`G@@+BmB}-1.0+BCD1@@A``G@@@G@@+BmDQ-0.8+BDd1@@A``G@@@G@@+BmEq-0.6+BFD1@@A``G@@@G@@+BmGQ-0.4+BGd1@@A``G@@@G@@+BmHq-0.2+BID1@@A``G@@@G@@+BmJK 0.0+BJd1@@A``G@@@G@@+BmKk 0.2+BLD1@@A``G@@@G@@+BmMK 0.4+BMd1@@A``G@@@G@@+BmNj 0.6+BOD1@@A``G@@@G@@+BmPJ 0.8+BPd1@@A``G@@@G@@+BmQj 1.0+BYJ] Y+BN~1ANBnAO@@ANbnANdZANdZANbnAN@@ANBnAODZ% 7B+@J@\6556I 03 09-23-84 22.961 frame no. 02
MH9220,M158,DREXLER +BCD1@@`J+BxBm107A+CNBw-1+BCD1CT@@@@`G@@@GA|@@@@`G@@@GAX@@@@`G@@@GAD@@@@`G@@@G@x@@@@`G@@@G@o@@@@`G@@@G@h@@@@`G@@@G@d@@@@`G@@@G@a@@@@`J@@@J7B+MwBm107A+NMBw07B+HXBX X+BCD1`G@@+BmB}-1.0+BCD1@@A``G@@@G@@+BmDQ-0.8+BDd1@@A``G@@@G@@+BmEq-0.6+BFD1@@A``G@@@G@@+BmGQ-0.4+BGd1@@A``G@@@G@@+BmHq-0.2+BID1@@A``G@@@G@@+BmJK 0.0+BJd1@@A``G@@@G@@+BmKk 0.2+BLD1@@A``G@@@G@@+BmMK 0.4+BMd1@@A``G@@@G@@+BmNj 0.6+BOD1@@A``G@@@G@@+BmPJ 0.8+BPd1@@A``G@@@G@@+BmQj 1.0+BYJ] Y+BN~1CTBnA|@@AXbnADdZ@xdZ@obn@h@@@dBn@aDZ% 7B+@J@\6556I 03 09-23-84 22.961 frame no. 03
MH9220,M158,DREXLER +BN~1CTBnA|@@AXbnADdZ@xdZ@obn@h@@@dBn@aDZ% 7B+@J@\6556I 03 09-23-84 22.961 frame no. 04
MH9220,M158,DREXLER 7C+EWQhEXAMPLE OF A POLAR PLOT+J_Hr1@@`G+J_Hr1B@@@@@`G@@@G7B+LEHb 0.4+L_Hr1B@@@@@`G@@@G+NEHb 0.8+KmHJREAL AXES+J_Hr1`G@@+J_Hr1@@B@`G@@@G@@+JLJX 0.4+J_Jr1@@B@`G@@@G@@+JLLX 0.8+J_Lr1@@B@`G@@@G@@+JLNX 1.2+J_Nr1@@A`G@@@G@@+JLPX 1.6+IyL@IMAG AXES+B_Hr1@@`G+BXHb 1.6+B_Hr1B@@@@@`G@@@G+DFHb 1.2+D_Hr1B@@@@@`G@@@G+FFHb 0.8+F_Hr1B@@@@@`G@@@G+HFHb 0.4+H_Hr1B@@@@@`G@@@G+F^HJ +J_Dr1`G@@+JLDk 0.8+J_Dr1@@B@`G@@@G@@+JLFY 0.4+J_Fr1@@B@`G@@@G@@+IyFq +JdHm1@@@K@J@@@@`K`J@@+JiHr1@J@B@I@C@J@E@H@E@I@G@G@H@G@H@E@J@E@J@C@K+KmIr1@@@J@J@@@@`J`J@@+KrIw1@C@K@A@L@@@M`B@L`C@M`D@L`E@M`G@L`H@L`I@K+KJKk1@@@J@K@@@@`J`K@@+KPKp1`K@J`L@J`L@H`N@H`O@F`O@F`P@D`Q@C`Q@A`Q@@+HxLc1@@@J@K@@@@`J`K@@+H~Lh1`R`B`R`C`Q`E`R`F`Q`G`P`I`P`K`O`K`N`M`M`O+FWKQ1@@@J@J@@@@`J`J@@+F\KV1`L`O`K`P`J`R`H`R`G`R`F`T`D`S`B`T`A`T@A`T+E[HY1@@@J@J@@@@`J`J@@+E`H^1@B`T@D`T@F`S@G`S@H`R@J`Q@K`P@L`P@M`N@N`M+FrEm1@@@J@J@@@@`J`J@@+FwEr1@O`L@P`J@P`I@Q`H@R`F@Q`D@R`C@R`B@Q@@@Q@A+I[Dx1@@@J@J@@@@`J`J@@+I`D}1@Q@C@P@D@O@E@O@G@N@G@L@I@L@J@K@J@I@K@H@L+K\FF1@@@J@J@@@@`J`J@@+KaFK1@G@L@E@L@D@M@C@L@B@M@@@L`A@L`C@L`C@K`E@J+KeG}1@@@J@J@@@@`J`J@@+KjHB1`E@J`G@H`G@H`I@F`H@F`J@D`I@C`J@B`J@A@J@@+JdHm1@@@K@J@@@@`K`J@@% 7B+@J@\6556I 03 09-23-84 22.961 frame no. 05
MH9220,M158,DREXLER 7C+EESHTHE USE OF CURVE AND GRAF+B_CD1@@`G7B+BXBu 0.0+B_CD1AM@@@@`G@@@G+CSBu 1.0+ClCD1AM@@@@`G@@@G+D_Bu 2.0+DyCD1AM@@@@`G@@@G+ElBu 3.0+FFCD1AL@@@@`G@@@G+FyBu 4.0+GRCD1AM@@@@`G@@@G+HFBu 5.0+H_CD1AM@@@@`G@@@G+IRBu 6.0+IlCD1AL@@@@`G@@@G+J_Bu 7.0+JxCD1AM@@@@`G@@@G+KlBu 8.0+LECD1AM@@@@`G@@@G+LyBu 9.0+MRCD1AM@@@@`G@@@G+MBu 10.0+GzB]X LABEL+B_CD1`G@@+BMB} 0.0+B_CD1@@A``G@@@G@@+BMDK 1.0+B_Dd1@@A``G@@@G@@+BMEk 2.0+B_FD1@@A``G@@@G@@+BMGK 3.0+B_Gd1@@A``G@@@G@@+BMHk 4.0+B_ID1@@A``G@@@G@@+BMJK 5.0+B_Jd1@@A``G@@@G@@+BMKk 6.0+B_LD1@@A``G@@@G@@+BMMK 7.0+B_Md1@@A``G@@@G@@+BMNj 8.0+B_OD1@@A``G@@@G@@+BMPJ 9.0+B_Pd1@@A``G@@@G@@+BMQd 10.0+AyIY LABEL+B^CC1@@OBLB@@@@oBlB@@+B_CD1@@O@L@@@@@o@l@@@+BaCF1@@N|K|@@@@n|k|@@+BbCI1@@@J@J@@@@`J`J@@+BgCN1@H@J@G@I@H@J@H@I@G@J@H@J@H@I@G@J@H@I@H@J+CoDi1@@@J@J@@@@`J`J@@+CtDn1@G@I@H@J@H@J@G@I@H@J@H@I@G@J@H@J@H@I@G@J+D{FI1@@@J@K@@@@`J`K@@+E@FN1@H@I@H@J@G@J@H@I@H@J@H@I@G@J@H@J@H@I@G@J+FHGi1@@@J@J@@@@`J`J@@+FMGn1@H@I@H@J@G@J@H@I@H@J@G@I@H@J@H@I@G@J@H@J+GUII1@@@J@J@@@@`J`J@@+GZIN1@H@I@G@J@H@I@H@J@G@J@H@I@H@J@G@I@H@J@H@J+HbJh1@@@K@J@@@@`K`J@@+HgJn1@G@I@H@J@H@I@G@J@H@J@H@I@G@J@H@I@H@J@G@J+InLH1@@@K@J@@@@`K`J@@+IsLN1@H@I@H@J@G@I@H@J@H@I@G@J@H@J@H@I@G@J@H@I+J{Mh1@@@K@J@@@@`K`J@@+K@Mm1@H@J@G@J@H@I@H@J@G@I@H@J@H@J@G@I@H@J@H@I+LHOH1@@@J@J@@@@`J`J@@+LMOM1@G@J@H@J@H@I@H@J@G@I@H@J@H@J@G@I@H@J@H@I+MTPh1@@@J@K@@@@`J`K@@+MZPm1@G@J@H@I@H@J@G@J@H@I@H@J@G@I@H@J@H@J+NYQ1@@@J@K@@@@`J`K@@+BdB1`B@C@@@E@B@C@F@@@B`C@@`E`B`C`F@@+CKCC1`C@B@@@E@C@C@E@@@B`C@@`E`B`B`E@@+CqCK1`B@B@@@F@B@B@E@@@C`B@@`F`C`B`E@@+DXCX1`C@B@@@E@C@C@E@@@B`C@@`E`B`B`E@@+D~Cj1`C@B@@@E@C@C@E@@@C`C@@`E`C`B`E@@+EdD@1`B@C@@@E@B@B@E@@@C`B@@`E`C`C`E@@+FKD[1`C@C@@@E@C@C@E@@@B`C@@`E`B`C`E@@+FqD|1`C@B@@@E@C@C@E@@@C`C@@`E`C`B`E@@+GWEa1`B@B@@@E@B@C@E@@@C`C@@`E`C`B`E@@+G~FJ1`C@C@@@E@C@B@E@@@B`B@@`E`B`C`E@@+HdFy1`B@B@@@E@B@C@E@@@C`C@@`E`C`B`E@@+IJGl1`B@C@@@E@B@B@F@@@B`B@@`E`B`C`F@@+IqHd1`C@C@@@E@C@B@E@@@B`B@@`E`B`C`E@@+JWIa1`B@C@@@E@B@B@E@@@C`B@@`E`C`C`E@@+J~Jc1`C@B@@@E@C@C@E@@@B`C@@`E`B`B`E@@+KdKi1`C@C@@@E@C@C@E@@@C`C@@`E`C`C`E@@+LJLu1`B@B@@@E@B@C@E@@@C`C@@`E`C`B`E@@+LqNE1`C@B@@@E@C@C@E@@@B`C@@`E`B`B`E@@+MWOZ1`C@B@@@E@C@C@E@@@C`C@@`E`C`B`E@@+M}Ps1`B@C@@@E@B@C@E@@@C`C@@`E`C`C`E@@+N\Q1`C@B@@@E@C@C@E@@@C`C@@`E`C`B`E@@+BgCD1@H@@@G@@@H@@@H@@@G@A@H@@@H@@@G@@@H@@@H@A@G@@@H@@@H@A@G@A@H@@@H@A@G@A@H@A@H@A@G@A@H@B@H@A@G@B@H@A@H@B@H@B@G@B@H@C@H@B@G@C@H@C@H@C@G@C@H@C@H@D@G@D@H@D@H@D@G@E@H@D@H@E@G@F@H@E@H@F@G@F@H@F@H@F@G@G@H@G+H_D|1@H@H@G@G@H@H@H@H@G@I@H@I@H@I@G@J@H@I@H@K@G@J@H@K@H@K@G@L@H@L@H@L@G@M@H@M@H@M@G@N@H@O@H@N@G@P@H@O@H@P@G@P@H@Q@H@R@G@Q@H@S@H@R@G@S@H@T@H@T@H@T@G@V@H@U@H@V@G@W@H@W@H@W@G@X@H@Y@H@Y@G@Z@H@Z@H@[@G@[@H@\+NWQg1@H@]+BwQZTHREE CURVES ON THE SAME AXIS SYSTEM HAVING+D}PjDIFFERENT MARKER TYPES% 7B+@J@\6556I 03 09-23-84 22.961 frame no. 06
MH9220,M158,DREXLER 7C+D@I]XGRAF WITH A GRID+LcCo1@G@@7B+LsCh 0.0+LcCo1@@Ag@G@@`G@@+LsD| 0.1+LcEV1@@Af@G@@`G@@+LsFc 0.2+LcF|1@@Af@G@@`G@@+LsHI 0.3+LcHb1@@Ag@G@@`G@@+LsIo 0.4+LcJI1@@Af@G@@`G@@+LsKV 0.5+LcKo1@@Af@G@@`G@@+LsL| 0.6+LcMU1@@Ag@G@@`G@@+LsNb 0.7+LcN|1@@Af@G@@`G@@+LsPI 0.8+LcPb1@@Af@G@@`G@@+LsQo 0.9+LcRH1@@Ag@G@@`G@@+LsSU 1.0+MKJBX AXIS IS GRAF TYPE+LcCo1@@`G+LnC_1`E@@+LcCc1@@@@@@`I@@@@@B@B+L^Cc1@@@@`A@@@@@@@A@@+LXCc1`A@@`A@@`A`B@@`D@A`B@A`A@A@@@A@A@A@B@@@D`A@B`A@@+LcCo1b@@@@@`G@@@G+JzC_1`E@@+JpCc1`A@@`A@@`A`B@@`D@A`B@A`A@A@@@A@A@A@B@@@D`A@B`A@@+JjCc1@@@@`A@@@@@@@A@@+JeCc1`B@@`A@@`A`A@@`C@A`A@A@@@B@@@@`D`D@@+JcCo1a@@@@`G@@@G+HwCc1`B@@`A@@`A`B@@`D@A`B@A`A@B@@@@@A@A@B@@@D`A@B@@@@+HpCc1@@@@`A@@@@@@@A@@+HkCc1`B@@`A@@@@`B@@`D@@`B@A`A@B@@@A@A@@@B@@@D@@@B`A@@+HdCo1b@@@@@`G@@@G+FwCc1`B@@`A@@@@`B@@`D@@`B@A`A@B@@@A@A@@@B@@@D@@@B`A@@+FqCc1@@@@`B@@@@@@@B@@+FlCc1`C@@@@@@`A`A@@`C@A`A@@@@@C@@@@`D`D@@+FdCo1b@@@@@`G@@@G+DuCc1@@@@@@`I@A@@@B@B+DqCc1@@@@`B@@@@@@@B@@+DkCc1`B@@`A@@@@`B@@`D@@`B@A`A@B@@@A@A@@@B@@@D@@@B`A@@+JMCJ1@C`H@@@B+JMCO1@@@A@@`F`D`H@@@B+IsCK1@F@@+IzCO1@A@A`D`N`E@N@@`A+InCO1@A@A`I`N@A@B+InCD1@A`B`I@N@@`A+I`CB1@B@@+I`CP1@@`N`B@@+IbCP1`D@@+IZCM1`A@B`A@A`C@@`B`A@@`B@@`A@@`B@B`A@C@@@B`A@@`B@@@@@@`B`B`B`C@@`B@B@@@B+IBCB1@B@@+IBCP1@@`N`B@@+IDCP1`D@@+H|CM1`A@B`A@A`D@@`A`A@@`B@@`A@@`B@A`A@D@@@A`A@A`B@@@@`A`B`A`B`D@@`A@B@@@B+H`CJ1`B@@@@@F@F@@@@`A@A`B@@`G`A`C@@`A`D@@`A@B`A@B+HZCO1@@@A@@`N`F@@`A@B@@@B@@@@@@@B@A@A@F@@+HUCI1`C@G@A`A+HGCK1@F@@+HNCO1@A@A`E`N`E@N@A`A+HCCO1@@@A@@`N`F@@`A@B`A@B@@@A@A@B@A@A@F@@+GxCO1@@@A@@`N@@@B+GpCD1@@`B@@@N@@`A+GpCI1@H@@+G]CB1@D@@+G]CO1@@@A@@`N`E@@+GQCJ1@D`H`A@B+GQCO1@@@A@@`F`D`H@A@B+GJCO1@@@A@@`N`E@@`B@B@@@B@@@A@@@B@B@A@E@@+FwCP1@H@@@@`N`H@@+FwCI1@H@@+LcDI1g@@+DdDc1G@@+LcD|1g@@+DdEV1G@@+LcEo1g@@+DdFI1G@@+LcFc1g@@+DdF|1G@@+LcGV1g@@+DdGo1G@@+LcHI1g@@+DdHb1G@@+LcH|1g@@+DdIV1G@@+LcIo1g@@+DdJI1G@@+LcJb1g@@+DdJ|1G@@+LcKV1g@@+DdKo1G@@+LcLI1g@@+DdLb1G@@+LcL|1g@@+DdMU1G@@+LcMo1g@@+DdNI1G@@+LcNb1g@@+DdN|1G@@+LcOU1g@@+DdOo1G@@+LcPH1g@@+DdPb1G@@+LcP|1g@@+DdQU1G@@+LcQo1g@@+DdRH1G@@+LcRb1g@@+DdR|1G@@+LcSU1g@@+KcCo1@@P@+JcSo1@@p@+IcCo1@@P@+HcSo1@@p@+GdCo1@@P@+FdSo1@@p@+EdCo1@@P@+LcCo1g@@@@P@G@@@@p@+GfCz1`v@J`l@J``@J`R@K`D@J@J@J@V@J@_@J@g@K@l@J@m@J@l@J@h@K@b@J@[@J@Q@J@G@K`B@J`K@J`R@J`Y@J`]@K`^@J`_@J`^@J`Y@K`U@J`O@J`H@J`B@K@D@J@K@J@O@J@R@J@U@K@U@J@U@J@S@J@P@K@L@J@H@J@D@J`A@K`E@J`I@J`L@J`M@K`O@J`N@J+HdKo1`N@J`L@J`J@K`G@J`D@J`A@J@B@K@E@J@G@J@I@J@I@K@K@J@I@J@I@J@H@J@F@K@D@J@A@J@@@J`C@K`D@J`E@J`G@J`G@K`F@J`G@J`F@J`D@J`D@K`A@J`A@J@A@J@B@K@D@J@D@J@D@J@E@K@E@J@D@J@D@J@B@J@B@K@A@J@@@J`A@J`B@K`C@J`C@J`C@J+HgSd1`C@K+DsCz1@^@J@h@J@q@J@v@K@v@J@t@J@o@J@g@J@]@K@R@J@F@J`F@J`O@K`X@J``@J`c@J`f@K`e@J`b@J`]@J`X@J`P@K`H@J@@@J@G@J@N@K@S@J@W@J@Y@J@Z@K@Y@J@V@J@R@J@N@J@H@K@C@J`B@J`H@J`K@K`O@J`Q@J`Q@J`R@K`P@J`N@J`K@J`H@K`C@J@@@J+GkKo1@C@J@F@J@J@K@J@J@L@J@M@J@K@K@K@J@H@J@G@J@D@K@A@J`A@J`D@J`E@J`G@K`H@J`H@J`H@J`H@K`G@J`E@J`D@J`A@K@@@J@A@J@C@J@E@J@E@K@E@J@F@J@F@J@E@K@D@J@C@J@B@J@@@K@@@J`B@J`C@J`C@J`D@K`C@J`D@J`D@J`C@K`C@J`A@J`A@J+HWSd1@@@K% 7B+@J@\6556I 03 09-23-84 22.961 frame no. 07
MH9220,M158,DREXLER 7C+ENRhLOG TYPE GRID USING YLOG+B^Ch1@@NALB@@@@nAlB@@+B_Ci1@@ML@@@@@ml@@@+BaCj1@@M}K|@@@@m}k|@@+B_Ci1@@`G7B+BXCZ-1.5+B_Ci1B@@@@@`G@@@G+DLCZ-1.0+D_Ci1B@@@@@`G@@@G+FLCZ-0.5+F_Ci1B@@@@@`G@@@G+HFCZ 0.0+H_Ci1B@@@@@`G@@@G+JFCZ 0.5+J_Ci1B@@@@@`G@@@G+LECZ 1.0+L_Ci1B@@@@@`G@@@G+NECZ 1.5+FlCAX AXIS IS GRAPH TYPE+B_Ci1`J@@+BKCa107A+BACx-2+B_Ci1@@BG`G@@@G@@@@AN`G@@@G@@@@@x`G@@@G@@@@@l`G@@@G@@@@@c`G@@@G@@@@@^`G@@@G@@@@@Z`G@@@G@@@@@W`G@@@G@@@@@U`J@@@J@@7B+BKJa107A+BAJw-1+B_Ji1@@BF`G@@@G@@@@AO`G@@@G@@@@@x`G@@@G@@@@@k`G@@@G@@@@@d`G@@@G@@@@@^`G@@@G@@@@@Z`G@@@G@@@@@W`G@@@G@@@@@T`J@@@J@@7B+BKQa107A+BAQw07B+AtJIY AXIS+C_Ci1@@M+D_Qh1@@m+E_Ci1@@M+F_Qh1@@m+G_Ci1@@M+H_Qh1@@m+I_Ci1@@M+J_Qh1@@m+K_Ci1@@M+L_Qh1@@m+M_Ci1@@M+B_DL1L@@@+N_Dj1l@@@+B_ED1L@@@+N_E[1l@@@+B_Ep1L@@@+N_FB1l@@@+B_FS1L@@@+N_Fc1l@@@+B_Fq1L@@@+N_F~1l@@@+B_GK1L@@@+N_GW1l@@@+B_Gb1L@@@+N_Gl1l@@@+B_Gv1L@@@+N_H@1l@@@+B_HI1L@@@+N_HR1l@@@+B_HZ1L@@@+N_Hb1l@@@+B_Hi1L@@@+N_Hq1l@@@+B_Hx1L@@@+N_H1l@@@+B_IE1L@@@+N_IU1l@@@+B_Ic1L@@@+N_Iq1l@@@+B_I}1L@@@+N_JI1l@@@+B_JT1L@@@+N_J_1l@@@+B_Ji1L@@@+N_KL1l@@@+B_Kj1L@@@+N_LD1l@@@+B_L[1L@@@+N_Lo1l@@@+B_MB1L@@@+N_MS1l@@@+B_Mb1L@@@+N_Mq1l@@@+B_M~1L@@@+N_NK1l@@@+B_NV1L@@@+N_Nb1l@@@+B_Nl1L@@@+N_Nv1l@@@+B_O@1L@@@+N_OI1l@@@+B_OQ1L@@@+N_OZ1l@@@+B_Oa1L@@@+N_Oi1l@@@+B_Op1L@@@+N_Ow1l@@@+B_O~1L@@@+N_PE1l@@@+B_PT1L@@@+N_Pc1l@@@+B_Pp1L@@@+N_P}1l@@@+B_QI1L@@@+N_QT1l@@@+B_Q^1L@@@+B_Ci1@@ML@@@@@ml@@@+I]Ci1@vBG@lAN@_@x@R@l@D@c`I@^`V@Z``@W`g@U`k@R`n@Q`l@P`h@N`b@M`Z@M`Q@L`G@K@B@J@J@J@S@J@X@I@]@H@_@I@_@H@]@G@Z@H@U@G@N@G@I@F@B@G`E@F`J@F`O@E`R@F`U@F`U@E`U@E`S@E`P@E`M@E`H@E`C@D@A@E@E@D@I@D@K@D@N@E@N@D@O@C+H_Oa1@N@D@L@D@J@D@G@C@D@D@A@C`C@D`D@C`G@D`I@C`J@C`J@C`J@C`I@C`G@C`F@C`D@C`B@C@A@C@B@C@D@C@F@B@F@C@G@C@G@B@F@C@F@B@E@C@C@B@B@C@@@B`A@C`B@B`C@B`D@C`E@B`E@B`D@B`E@C`C@B`C@B`B@B@@@B@@@B@A@B@B@B@B@B@C@B@D@B+H\Qf1@C@B+LOCi1`]BG`iAN`p@x`v@l`w@c`t@^`o@Z`f@W`]@U`R@R`F@Q@E@P@P@N@X@M@_@M@d@L@e@K@e@J@b@J@^@J@W@I@P@H@I@I@@@H`G@G`N@H`T@G`W@G`Y@F`Z@G`X@F`V@F`S@E`M@F`I@F`C@E@C@E@G@E@L@E@N@E@Q@E@R@D@Q@E@P@D@N@D@K@D@H@E@D@D@@@C+IXOa1`C@D`G@D`I@D`K@C`L@D`L@C`L@D`J@C`I@D`F@C`D@C`B@C@B@C@C@C@F@C@F@C@H@C@I@C@H@C@H@C@F@C@E@B@D@C@B@C@@@B`B@C`C@B`D@C`E@B`F@C`F@B`E@C`E@B`D@B`C@C`B@B`A@B@A@B@B@C@B@B@C@B@D@B@D@B@D@B@D@B@C@B@B@B@B@B@A@B+HlQf1@@@B% 7B+@J@\6556I 03 09-23-84 22.961 frame no. 08
MH9220,M158,DREXLER 7C+E`QhA POLAR PLOT WITH GRID+H_Jr1@@`G+H_Jr1B@@@@@`G@@@G7B+JFJb 0.5+J_Jr1B@@@@@`G@@@G+LEJb 1.0+L_Jr1B@@@@@`G@@@G+NEJb 1.5+JJJRADIUS+H_Jr1`G@@+H_Jr1@@B@`G@@@G@@+HMLX 0.5+H_Lr1@@B@`G@@@G@@+HMNX 1.0+H_Nr1@@A`G@@@G@@+HMPX 1.5+GyMp +B_Jr1@@`G+BXJb 1.5+B_Jr1B@@@@@`G@@@G+DFJb 1.0+D_Jr1B@@@@@`G@@@G+FFJb 0.5+F_Jr1B@@@@@`G@@@G+E^JJ +H_Dr1`G@@+HMDk 1.5+H_Dr1@@B@`G@@@G@@+HMFY 1.0+H_Fr1@@B@`G@@@G@@+HMHX 0.5+H_Hr1@@B@`G@@@G@@+GyGq +N^J1a`D+L^KD1B@@H+N\KZ1a`N+L\KU1A@R+NYKt1c|`l+LYKg1A}@Z+NSLO1a|`_+LUKx1A{@c+NLLh1az`g+HkJv1E\A+NCMA1aw`o+LILZ1At@t+MxMZ1as`x+LALj1Aq@|+MkMr1c]b@+KxLy1AlAD+M]NH1ajaG+KnMH1AgAK+MMN^1adaO+HiJz1D\Cn+L|Nr1a_aU+KWMc1A\AY+LiOF1aXa\+KJMp1AVA_+LVOX1becD+J|M{1AOAe+L@Oh1aKag+JnNF1AGAj+KjOw1aDal+HeJ}1BzEA+KSPD1`|ap+JONX1@xAs+J{PP1`tau+IN_1@pAv+JbPZ1aWcp+InNe1@hAz+JIPc1`da{+I]Nj1@_A|+IoPi1`[a}+HaJ~1AAEn+ITPn1`Qa+HzNp1@MA+HzPp1`Ia+HhNq1@DB@+H_Pq1@@c+HVNq1`DB@+HDPp1@Ia+HDNp1`MA+GjPn1@Qa+H]J~1aAEn+GOPi1@[a}+GaNj1`_A|+FuPc1@ca{+GPNe1`hAz+F\PZ1AWcp+FN_1`pAv+FCPP1@tau+FoNX1`xAs+EkPD1@|ap+HYJ}1bzEA+ETOw1ACal+FPNF1aHAj+D}Oh1ALag+FBM{1aOAe+DhOX1BecD+EtMp1aVA_+DTOF1AYa\+EgMc1a\AY+DBNr1A_aU+HUJz1d\Cn+CqN^1AdaO+EPMH1agAK+CaNH1AjaG+EFLy1alAD+CSMr1C]b@+D}Lj1aq@|+CFMZ1As`x+DuLZ1at@t+B{MA1Aw`o+HSJv1e]A+BrLh1Az`g+DiKx1a{@c+BkLO1A|`_+DeKg1a}@Z+BeKt1C|`l+DbKU1a@R+BaKZ1B@`N+D`KD1b@@H+B`J1A`D+HRJr1es@@+B`Jd1A@E+D`J`1b@`I+BaJJ1B@@M+DbJN1a`R+BeIo1C|@m+DeI}1a}`[+BkIU1A|@_+DiIk1a{`c+BrH{1Az@h+HSJm1e]a+B{Hb1Aw@p+DuIJ1at`t+CFHJ1As@x+D}Hz1aq`|+CSGr1C]B@+EFHj1alaD+CaG[1AjAH+EPH[1agaK+CqGE1AdAO+HUJi1d\cn+DBFq1A_AV+EgH@1a\aY+DTF^1AYA\+EtGt1aVa_+DhFL1BeCD+FBGh1aOae+D}E{1ALAh+FPG^1aHaj+ETEl1ACAm+HYJg1bzeB+EkE_1@|Aq+FoGL1`xas+FCES1@tAu+FGE1`paw+F\EI1AWCq+GPF~1`hay+FuEA1@cA{+GaFz1`_a}+GODz1@[A~+H]Je1aAem+GjDv1@QA~+HDFs1`Ma+HDDs1@IB@+HVFr1`Db@+H_Dr1@@D@+HhFr1@Db@+HzDs1`IB@+HzFs1@Ma+ITDv1`QA~+HaJe1AAem+IoDz1`[A~+I]Fz1@_a}+JIEA1`dA{+InF~1@hay+JbEI1aWCq+IGE1@paw+J{ES1`tAu+JOGL1@xas+KSE_1`|Aq+HeJg1BzeB+KjEl1aDAm+JnG^1AGaj+L@E{1aKAh+J|Gh1AOae+LVFL1beCD+KJGt1AVa_+LiF^1aXA\+KWH@1A\aY+L|Fq1a_AV+HiJi1D\cn+MMGE1adAO+KnH[1AgaK+M]G[1ajAH+KxHj1AlaD+MkGr1c]B@+LAHz1Aq`|+MxHJ1as@x+LIIJ1At`t+NCHb1aw@p+HkJm1E\a+NLH{1az@h+LUIk1A{`c+NSIU1a|@_+LYI}1A}`[+NYIo1c|@l+L\JN1A`R+N\JJ1a@M+L^J`1B@`I+N^Jd1a@E+HlJr1Es@@+HlJr1`B@F`E@E`F@B`F`B`E`E`B`F@B`G@E`D@F`B@F@B@E@D@B@G+HJr1`A@F`B@F`C@F`D@E`E@D`F@C`F@A`G@A`F`A`F`C`F`C`D`D`D`F`C`F`A`F@@`G@A`F@C`F@D`E@D`E@F`C@F`B@F`A@G@@@F@B@F@C@E@D@D@D@C@F@B@F@A@G+I_Jr1@@@F`A@G`B@F`B@F`C@F`D@E`D@E`D@E`E@D`E@D`F@C`F@C`F@B`F@A`G@A`F@@`G`A`F`A`F`B`F`C`F`C`E`D`E`D`E`E`D`E`C`E`C`F`B`F`B`F`A`G@@`F@@`G@A`F@B`F@B`G@C`E@C`F@D`E@E`E@E`D@E`D@F`C@F`B@F`B@F`B@G@@@F@@@G@@@F@B+HoIt1@F@B@F@B@F@C@E@D@E@D@D@E@D@E@D@F@C@E@B@G@B@F@A@F@@@G+IJr1@@@F`A@F`A@G`B@F`A@F`C@F`B@F`D@F`C@E`D@E`D@E`D@E`E@D`E@D`E@D`F@C`F@C`F@B`F@B`F@B`F@A`F@A`G@A`F@@`G`A`F`A`F`A`F`B`G`B`E`B`F`C`F`C`E`D`E`D`E`D`D`E`D`E`D`E`D`E`C`F`B`F`C`F`B`F`A`F`A`G`A`F@@`F@@`G@A`F+G@Je1@A`F@A`G@B`F@C`F@B`F@C`E@D`F@D`E@D`E@D`D@E`E@E`D@E`C@F`C@F`C@F`C@F`B@F`B@F`A@F`A@G@@@F@@@G@@@F@A@F@A@F@B@F@B@F@C@F@C@F@C@E@C@E@D@E@E@D@D@D@E@D@E@C@F@D@E@B@F@C@F@A@F@B@G@A@F@A@F@@@G+J_Jr1@@@F`A@G`A@F`A@F`A@G`B@F`B@F`B@F`C@F`C@E`C@F`D@E`D@E`D@E`D@E`D@E`E@D`E@D`E@D`F@D`E@C`F@C`F@C`E@B`G@B`F@B`F@B`F@A`G@A`F@@`F@A`G@@`F`A`G`A`F`A`F`A`F`B`G`B`F`B`E`C`F`B`F`D`E`C`E`D`F`D`D`D`E`D`D`E`E`E+F{LB1`C`E`D`E`D`F`C`F`B`E`C`F`B`F`B`F`B`G`A`F`A`F`A`G@@`F@@`G@@`F@A`F@A`G@A`F@B`F@B`F@B`F@C`F@B`F@C`F@D`E@D`E@C`F@E`D@D`E@E`E@D`D@F`D@E`D@E`C@F`C@F`C@E`C@F`B@G`B@F`B@F`A@F`A@G`A@F@@@G@@@F@@@F@A@G@A@F@A+HzHu1@F@A@F@B@G@B@E@C@F@B@F@C@E@D@F@C@E@D@E@D@E@E@D@D@D@E@E@E@C@E@D@F@C@E@C@F@C@F@B@F@B@F@B@F@A@F@A@G@A@F@A@F@@@G+JJr1@@@F`A@F@@@G`A@F`A@F`B@G`A@F`B@F`B@F`C@F`B@F`C@F`C@E`D@F`C@E`D@E`D@E`D@E`D@E`E@D`D@E`E@D`E@D`E@D`F@C`E@D`F@C`E@C`F@B`F@C`F@B`F@B`F@B`G@A`F@A`F@A`G@A`F@@`F@A`G@@`F`A`G@@`F`A`F`A`F`B`G`A`F`B`F`B`F`B+GbMF1`F`C`E`C`F`C`F`C`E`C`E`D`E`D`E`D`E`D`E`E`D`D`D`E`D`E`D`E`D`F`C`E`C`F`C`E`C`F`B`F`C`F`B`F`A`F`B`F`A`G`A`F`A`F`A`G@@`F@@`F@@`G@A`F@A`G@A`F@A`F@B`F@A`G@B`F@C`F@B`F@C`E@C`F@C`F@C`E@D`E@D`E@D`E@D`E@D`E+FmIA1@E`D@E`D@E`E@E`C@E`D@E`D@F`C@F`C@E`C@F`B@F`B@F`C@F`A@G`B@F`A@F`A@F`A@G`A@F@@@G@@@F@@@F@@@G@A@F@A@F@A@G@B@F@B@F@A@F@C@F@B@F@C@E@C@F@C@E@C@F@D@E@C@E@D@E@E@D@D@E@E@D@D@D@E@D@E@D@E@C@F@D@E@C@F@C@F@B@E+JrIs1@C@F@B@F@B@G@A@F@B@F@A@F@A@G@@@F@A@F@@@G+K_Jr1@@@F`A@G@@@F`A@F`A@G`A@F`A@F`B@F`B@G`B@F`B@F`B@F`C@E`C@F`C@F`C@E`C@F`D@E`D@F`C@E`E@E`D@D`D@E`E@E`D@D`E@D`E@D`E@D`E@D`F@C`E@D`F@C`F@C`E@C`F@B`F@C`F@B`F@B`F@B`G@A`F@B`F@A`F@A`G@A`F@@`G@@`F@A`F`A`G@@+HRMq1`F@@`G`A`F`A`F`A`G`B`F`A`F`B`F`B`F`B`F`C`F`B`F`C`E`C`F`C`E`D`F`C`E`D`E`D`E`D`E`D`D`D`E`E`D`E`E`D`D`E`C`E`D`F`D`E`C`F`C`E`C`F`C`F`C`E`B`F`B`F`B`F`B`G`B`F`A`F`A`F`A`G`A`F@@`F`A`G@@`F@@`G@A`F@@`F@A`G+EaJX1@A`F@A`G@A`F@B`F@B`F@B`F@B`F@B`F@C`F@C`F@C`E@C`F@C`F@D`E@D`E@C`E@D`E@E`E@D`E@E`D@D`E@E`D@E`D@E`D@E`C@F`D@E`C@F`D@E`C@F`B@F`C@F`B@F`C@F`B@F`A@G`B@F`A@F`A@F`A@G`A@F`A@G@@@F@@@F@@@G@@@F@A@G@A@F@A@F@A+IEGv1@F@A@G@B@F@A@F@B@F@C@F@B@F@C@E@B@F@C@F@D@E@C@F@D@E@C@E@D@E@D@E@D@D@E@E@D@D@E@D@E@E@E@C@E@D@E@D@E@C@F@C@F@C@E@C@F@C@F@B@F@B@F@B@F@B@F@B@F@A@G@A@F@A@F@A@G@@@F@A@F@@@G+KJr1@@@F`A@G@@@F`A@F`A@G`A@F`A@F`A@G`B@F`A@F`B@F`B@F`C@F`B@F`C@F`B@F`C@F`C@E`D@F`C@E`D@F`C@E`D@E`D@E`D@E`E@E`D@D`E@E`D@D`E@D`E@E`E@D`E@C`F@D`E@D`E@C`F@C`F@C`E@C`F@C`F@B`F@C`F@B`F@B`F@B`F@B`G@A`F@A`F@A+IDNN1`G@A`F@A`F@A`G@@`F@@`G@A`F`A`F@@`G@@`F`A`G`A`F`A`F`A`G`B`F`A`F`B`F`B`F`B`F`B`F`C`F`C`F`B`E`C`F`C`E`D`F`C`E`D`E`D`E`C`E`D`E`E`E`D`E`D`D`E`E`E`D`E`D`E`D`E`D`E`C`E`D`F`C`E`C`F`C`E`C`F`C`F`B`F`C`F`B`F+EKKz1`B`F`B`F`A`F`B`G`A`F`A`F`A`F`A`G@@`F`A`G@@`F@@`G@@`F@A`F@@`G@A`F@A`F@A`G@A`F@B`F@A`G@B`F@B`F@B`F@C`F@B`F@C`F@C`E@C`F@C`F@C`E@D`E@C`F@D`E@D`E@D`E@D`E@E`E@D`D@E`E@E`D@E`D@E`D@E`D@E`D@E`C@F`D@E`C@F`C+FuGm1@E`C@F`C@F`C@F`B@F`B@F`C@F`B@F`A@G`B@F`A@F`B@F`A@G@@@F`A@G`A@F@@@F@@@G@@@F@@@G@A@F@@@F@A@G@A@F@A@F@A@G@B@F@B@F@A@F@B@F@C@F@B@F@C@F@B@E@C@F@C@F@D@E@C@E@C@F@D@E@D@E@D@E@D@E@D@D@E@E@D@D@E@E@E@D@D@D@F+KPHi1@D@E@C@E@D@E@C@F@D@E@C@F@C@F@B@E@C@F@B@F@C@F@B@F@B@F@A@G@B@F@A@F@A@F@A@G@A@F@A@F@@@G@A@F@@@G+L_Jr1@@@F`A@G@@@F`A@F@@@G`A@F`A@F`A@G`B@F`A@F`B@F`B@F`B@F`B@G`B@F`C@E`B@F`C@F`C@F`C@E`C@F`C@F`D@E`C@E`D@F`D@E`D@E`D@E`D@E`D@D`E@E`D@D`E@E`D@D`E@D`E@D`E@D`F@D`E@D`E@C`F@D`E@C`F@C`E@C`F@C`F@B`F@C`F@B`F@C+IuNc1`F@B`F@B`F@A`F@B`F@A`G@B`F@A`F@A`G@A`F@@`F@A`G@@`F@@`G@A`F`A`F@@`G@@`F`A`G`A`F`A`F`A`F`A`G`A`F`B`F`B`F`A`F`B`F`C`F`B`F`B`F`C`F`C`F`C`E`C`F`C`E`C`F`D`E`C`E`D`E`D`E`D`E`D`E`D`E`D`D`E`E`D`D`E`D`E`E`E+EYMT1`D`E`C`E`D`E`D`E`C`F`D`E`C`F`C`E`C`F`C`F`B`F`C`F`B`E`B`F`B`G`B`F`B`F`B`F`A`F`A`G`A`F`A`F`A`G`A`F@@`F`A`G@@`F@@`F@@`G@A`F@@`G@A`F@A`F@A`G@A`F@A`F@A`G@B`F@B`F@B`F@B`F@B`F@B`F@C`F@B`F@C`F@C`E@C`F@C`E+ECHo1@D`F@C`E@D`F@D`E@C`E@D`E@E`E@D`D@D`E@E`E@D`D@E`E@E`D@E`D@E`D@E`D@E`C@E`D@F`C@E`D@F`C@E`C@F`C@F`C@F`B@F`C@F`B@F`B@F`B@F`B@F`B@F`A@G`B@F`A@F`A@F`A@G`A@F@@@G`A@F@@@F@@@G@@@F@@@G@A@F@@@F@A@G@A@F@A@F@A+IPFw1@G@A@F@A@F@B@F@B@F@B@F@B@F@B@F@C@F@B@F@C@F@C@E@C@F@C@E@C@F@C@E@D@E@C@F@D@E@D@E@D@E@D@D@E@E@D@E@E@D@D@D@E@D@E@E@E@C@E@D@E@D@E@C@E@D@F@C@E@C@F@C@F@C@E@C@F@B@F@C@F@B@F@B@F@B@F@B@F@B@F@A@G@B@F@A@F@A@F+L\JK1@A@G@@@F@A@G@@@F@A@F@@@G+LJr1@@@F`A@G@@@F@@@F`A@G`A@F`A@F`A@G`A@F`A@F`B@G`B@F`A@F`B@F`B@F`B@F`C@F`B@F`C@F`B@F`C@F`C@E`C@F`C@E`D@F`C@E`D@F`D@E`C@E`D@E`D@E`D@E`E@E`D@D`D@E`E@E`E@D`D@D`E@D`E@E`E@D`E@C`F@D`E@D`E@C`F@D`E@C`F@C`E@C+JdNq1`F@C`F@C`F@B`F@C`F@B`F@B`F@C`F@B`F@A`F@B`F@B`G@A`F@A`F@A`G@A`F@A`F@A`G@A`F@@`F@@`G@@`F@@`G@@`F@@`F@@`G`A`F`A`G`A`F`A`F`A`F`A`G`A`F`B`F`B`F`A`F`B`F`C`F`B`F`B`F`C`F`B`F`C`F`C`E`C`F`C`E`C`F`D`E`C`F`D+EyN]1`E`D`E`C`E`D`E`E`E`D`D`D`E`D`E`E`D`E`D`D`E`E`D`E`D`E`D`E`D`E`C`E`D`F`C`E`D`F`C`E`C`F`C`F`C`E`B`F`C`F`B`F`C`F`B`F`B`F`B`F`B`F`A`F`B`G`A`F`A`F`A`G`A`F`A`F`A`G@@`F@@`F`A`G@@`F@@`G@A`F@@`G@@`F@A`F@A`G+DBJK1@A`F@A`F@A`G@A`F@B`F@A`F@B`F@B`G@B`F@B`F@C`F@B`F@C`F@B`E@C`F@C`F@C`E@C`F@D`E@C`F@D`E@C`E@D`F@D`E@D`E@D`E@E`D@D`E@D`E@E`D@E`E@D`D@E`D@E`D@E`D@E`D@F`D@E`C@E`D@F`C@E`D@F`C@E`C@F`C@F`B@F`C@F`B@F`C@F`B+F~Fc1@F`B@F`B@F`B@F`B@F`A@G`B@F`A@F`A@F`A@G`A@F`A@G@@@F`A@F@@@G@@@F@@@G@@@F@@@F@A@G@@@F@A@G@A@F@A@F@A@F@A@G@B@F@A@F@B@F@B@F@B@F@B@F@B@F@C@F@B@F@C@F@B@F@C@E@C@F@C@E@D@F@C@E@D@E@C@F@D@E@D@E@D@E@D@E@D@D@D+KbG^1@E@E@E@D@D@E@D@E@E@D@D@E@D@E@D@E@C@F@D@E@D@E@C@F@D@E@C@F@C@E@C@F@C@F@B@F@C@E@B@F@C@F@B@F@B@F@B@G@A@F@B@F@B@F@A@F@A@G@A@F@A@F@A@G@A@F@@@G@@@F@A@F@@@G+M_Jr1@@@F`A@G@@@F@@@F`A@G`A@F@@@F`A@G`B@F`A@F`A@G`B@F`A@F`B@F`B@F`B@F`B@F`B@F`B@F`C@F`B@F`C@F`C@F`C@E`C@F`C@F`C@E`C@F`D@E`C@E`D@F`D@E`D@E`D@E`D@E`D@E`D@D`D@E`E@E`D@D`E@E`E@D`E@D`D@D`E@D`E@D`F@D`E@D`E@C+KQN{1`E@D`F@C`E@D`F@C`F@C`E@C`F@C`F@B`F@C`E@B`F@C`F@B`F@B`F@B`G@B`F@B`F@B`F@A`F@A`G@B`F@A`F@A`G@A`F@A`F@@`G@A`F@@`F@@`G@@`F@@`G@@`F@@`F@@`G`A`F@@`G`A`F`A`F`A`F`A`G`B`F`A`F`A`F`B`F`B`G`B`F`B`F`B`F`B`F`C+FeOY1`F`B`E`C`F`B`F`C`F`C`E`C`F`C`E`D`F`C`E`D`E`C`E`D`F`D`E`D`E`D`E`D`D`D`E`D`E`E`D`D`E`E`D`E`D`D`D`E`E`E`D`E`C`E`D`E`D`F`C`E`D`E`C`F`C`E`D`F`C`F`B`E`C`F`C`F`B`F`C`F`B`F`B`F`B`F`B`F`B`F`B`F`B`F`A`F`A`G+CfKq1`B`F`A`F`A`G@@`F`A`F`A`G@@`F@@`G`A`F@@`F@@`G@A`F@@`F@@`G@A`F@A`G@@`F@A`F@A`G@B`F@A`F@A`F@B`G@B`F@B`F@B`F@B`F@B`F@B`F@C`F@B`F@C`F@C`E@B`F@C`F@D`E@C`F@C`E@D`F@C`E@D`E@D`E@C`E@D`E@E`E@D`E@D`E@D`E@E`D+D|GQ1@D`E@E`D@E`D@E`E@D`D@E`D@E`D@F`D@E`C@E`D@E`C@F`D@E`C@F`C@E`C@F`C@F`C@F`C@E`C@F`B@F`B@F`C@F`B@F`B@G`B@F`A@F`B@F`B@F`A@G`A@F`A@F`A@G`A@F`A@F`A@G@@@F`A@F@@@G@@@F@@@G@@@F@@@F@A@G@@@F@A@F@A@G@A@F@A@F@A+I[Ex1@G@A@F@A@F@B@F@B@F@A@G@B@F@B@F@B@F@C@F@B@E@B@F@C@F@C@F@C@F@C@E@C@F@C@E@C@F@D@E@C@E@D@E@C@F@D@E@D@E@D@D@D@E@E@E@D@E@D@D@E@E@D@D@E@D@E@D@E@D@E@D@E@D@E@D@E@D@E@C@E@D@F@C@E@C@F@C@E@D@F@B@F@C@E@C@F@B@F+MEHu1@C@F@B@F@B@F@B@F@B@F@B@F@B@F@A@G@B@F@A@F@A@F@B@G@A@F@@@F@A@G@A@F@@@G@@@F@A@F@@@G+MJr1@@@F`A@G@@@F@@@F`A@G@@@F`A@F`A@G`A@F`A@F`A@G`B@F`A@F`B@F`A@G`B@F`B@F`B@F`B@F`B@F`C@F`B@F`C@F`B@F`C@E`C@F`C@F`C@E`C@F`D@E`C@F`C@E`D@F`D@E`C@E`D@E`D@E`D@E`D@E`E@E`D@E`D@D`E@E`D@D`E@E`E@D`E@D`D@D`E@E+K|OD1`E@D`E@C`F@D`E@D`E@C`F@D`E@C`E@D`F@C`F@C`E@C`F@C`F@C`F@B`E@C`F@B`F@C`F@B`F@B`F@B`F@B`G@B`F@B`F@A`F@B`F@A`G@A`F@A`F@A`G@A`F@A`F@A`G@@`F@A`G@@`F@@`F@@`G@@`F@@`G@@`F@@`F`A`G@@`F`A`G`A`F`A`F`A`F`A`G`B+GTPI1`F`A`F`B`F`A`G`B`F`B`F`B`F`B`F`B`F`B`F`C`F`B`E`C`F`C`F`C`F`B`E`D`F`C`E`C`F`C`E`D`F`C`E`D`E`D`E`D`E`C`E`D`E`E`E`D`E`D`D`D`E`E`E`D`D`E`D`E`E`E`D`D`D`E`D`E`D`E`D`F`C`E`D`E`C`E`D`F`C`E`C`F`D`E`C`F`B`F+CeMO1`C`F`C`E`C`F`B`F`B`F`C`F`B`F`B`F`B`F`B`F`A`F`B`G`B`F`A`F`A`F`A`G`A`F`A`F`A`G`A`F`A`G@@`F@@`F`A`G@@`F@@`G@@`F@A`F@@`G@@`F@A`F@A`G@A`F@A`G@A`F@A`F@A`F@A`G@B`F@B`F@A`F@B`F@B`G@B`F@B`F@C`F@B`F@B`E@C`F+C_H`1@C`F@C`F@B`F@D`E@C`F@C`E@C`F@D`E@C`F@D`E@C`E@D`E@D`E@D`E@D`E@D`E@E`E@D`E@E`D@D`E@E`D@D`E@E`D@E`D@E`D@E`D@E`D@E`D@E`D@E`C@F`D@E`C@F`D@E`C@F`C@E`C@F`C@F`C@F`C@E`B@F`C@F`B@F`C@F`B@F`B@F`B@F`B@G`A@F`B+GHE]1@F`B@F`A@G`A@F`A@F`B@G`A@F@@@F`A@G`A@F@@@F`A@G@@@F@@@G@@@F@@@F@@@G@A@F@@@G@A@F@@@F@A@G@A@F@A@F@A@G@A@F@B@F@A@F@B@F@A@G@B@F@B@F@B@F@B@F@C@F@B@F@B@E@C@F@C@F@C@F@B@E@C@F@D@F@C@E@C@E@C@F@D@E@D@E@C@F@D+KrFX1@E@D@E@D@E@D@D@D@E@D@E@E@E@D@D@E@E@D@D@E@D@E@E@D@D@E@D@E@D@E@D@E@C@F@D@E@D@E@C@F@C@E@D@E@C@F@C@F@C@E@C@F@C@F@B@F@C@F@B@E@C@F@B@F@B@F@B@G@B@F@B@F@A@F@B@F@A@F@B@G@A@F@A@F@A@G@A@F@A@F@@@G@A@F@@@G@@@F+M~Je1@A@F@@@G+N_Jr1@@@F`A@G@@@F@@@F`A@G@@@F`A@F`A@G`A@F`A@G`A@F`A@F`A@F`B@G`A@F`B@F`B@F`B@F`B@G`B@F`B@F`B@F`B@F`C@F`B@E`C@F`C@F`C@F`C@E`C@F`C@F`C@E`C@F`D@E`C@F`D@E`C@E`D@E`D@E`D@F`D@E`D@D`D@E`E@E`D@E`D@D`E@E`D@E`E@D+LeOJ1`E@D`D@E`E@D`E@D`E@D`E@D`E@D`F@C`E@D`E@D`F@C`E@D`F@C`E@C`F@C`E@C`F@C`F@C`F@C`E@B`F@C`F@B`F@C`F@B`F@B`F@B`F@B`G@B`F@B`F@A`F@B`F@A`G@B`F@A`F@A`G@A`F@A`F@A`G@@`F@A`F@A`G@@`F@@`G@@`F@@`F@@`G@@`F@@`G@@+HEPq1`F`A`F`A`G@@`F`A`G`A`F`A`F`A`F`A`G`B`F`A`F`B`F`A`G`B`F`B`F`B`F`B`F`B`F`B`F`C`F`B`F`C`F`B`E`C`F`C`F`C`E`C`F`C`F`C`E`C`E`D`F`C`E`D`E`D`F`C`E`D`E`D`E`D`E`D`E`D`D`E`E`D`E`D`D`E`E`E`D`D`E`E`D`E`D`E`D`D+CvNe1`D`E`D`F`D`E`D`E`C`E`D`E`C`F`D`E`C`F`C`E`C`F`C`F`C`E`C`F`C`F`C`F`B`F`C`E`B`F`B`F`B`F`B`G`B`F`B`F`B`F`B`F`A`F`B`G`A`F`A`F`A`F`A`G`A`F`A`G`A`F@@`F`A`G@@`F@@`F`A`G@@`F@@`G@A`F@@`G@@`F@A`F@@`G@A`F@A`F+BcI1@A`G@A`F@A`F@A`G@A`F@B`F@A`F@B`G@B`F@B`F@B`F@B`F@B`F@B`F@B`F@C`F@B`F@C`F@C`F@C`E@C`F@C`F@C`E@C`F@C`E@D`F@C`E@D`E@C`F@D`E@D`E@D`E@D`E@D`E@D`E@D`E@E`D@D`E@E`E@D`D@E`E@E`D@D`D@E`D@E`D@E`D@E`D@E`D@F`D+EAEy1@E`D@E`C@F`D@E`C@E`C@F`D@F`C@E`C@F`C@F`C@F`B@E`C@F`C@F`B@F`B@F`C@F`B@F`B@F`B@F`B@G`A@F`B@F`B@F`A@G`A@F`B@F`A@G`A@F`A@F@@@G`A@F`A@F@@@G`A@F@@@G@@@F@@@F@@@G@@@F@@@G@A@F@@@F@A@G@A@F@@@F@A@G@A@F@A@F@B+IkDz1@G@A@F@A@F@B@F@B@G@A@F@B@F@B@F@B@F@B@F@C@F@B@F@B@F@C@E@C@F@B@F@C@F@C@E@C@F@C@E@D@F@C@E@C@F@D@E@C@E@D@F@D@E@D@E@D@E@D@E@D@E@D@D@D@E@D@E@E@D@D@E@E@D@E@D@D@E@E@D@E@D@E@D@E@D@E@D@E@D@E@C@F@D@E@C@E@D@F+MfGi1@C@E@C@F@C@E@C@F@C@F@C@E@C@F@C@F@B@F@C@F@B@F@B@F@B@F@B@F@B@F@B@F@B@F@B@G@A@F@B@F@A@F@A@G@A@F@A@F@A@G@A@F@A@F@@@G@A@F@@@G@@@F@A@F@@@G+DuJP1@@@J@K@@@@`J`K@@+DzJU1AP`I@p`B+FuJE1@@@J@J@@@@`J`J@@+FzJJ1@b@C@Y@F+GpJN1@@@J@J@@@@`J`J@@+GuJS1@S@I@N@K+HQJb1@@@J@J@@@@`J`J@@+HVJg1@I@K@F@L+H`Jy1@@@J@J@@@@`J`J@@+HeJ~1@B@L`A@K+HaKP1@@@J@J@@@@`J`J@@+HfKU1`D@J`F@I+HVKc1@@@J@K@@@@`J`K@@+H\Kh1`I@G`J@F+HDKp1@@@J@J@@@@`J`J@@+HIKu1`K@C`L@A+GmKt1@@@J@J@@@@`J`J@@+GrKy1`M`A`L`D+GSKo1@@@J@K@@@@`J`K@@+GYKt1`M`F`K`H+F{Ka1@@@J@K@@@@`J`K@@+GAKf1`K`K`I`L+FhKJ1@@@J@J@@@@`J`J@@+FmKO1`H`N`E`O+F[Jm1@@@J@J@@@@`J`J@@+F`Jr1`C`Q`A`Q+FVJK1@@@J@K@@@@`J`K@@+F\JP1@A`R@D`Q+F\Ig1@@@K@J@@@@`K`J@@+FaIm1@G`R@I`Q+FlIE1@@@J@J@@@@`J`J@@+FqIJ1@K`O@N`O+GEHg1@@@J@J@@@@`J`J@@+GJHl1@P`L@R`K+GgHP1@@@J@J@@@@`J`J@@+GlHU1@T`H@T`F+HOHB1@@@J@J@@@@`J`J@@+HTHG1@V`C@V@@+H{G1@@@J@J@@@@`J`J@@+I@HD1@V@C@V@F+IgHH1@@@J@K@@@@`J`K@@+IlHM1@V@I@T@K+JQH\1@@@J@K@@@@`J`K@@+JVHa1@S@O@R@Q+JvH{1@@@K@J@@@@`K`J@@+J{IA1@O@S@L@U+KQId1@@@J@J@@@@`J`J@@+KVIi1@J@W@G@X+KbJS1@@@K@J@@@@`K`J@@+KgJX1@D@Z@A@Z+KgKF1@@@K@J@@@@`K`J@@+KlKL1`C@Z`F@Y+K^Kz1@@@J@J@@@@`J`J@@+KcK1`J@Y`L@X+KHLk1@@@J@J@@@@`J`J@@+KMLp1`P@V`S@T+JeMU1@@@J@J@@@@`J`J@@+JjMZ1`U@R`W@O+IyMv1@@@J@J@@@@`J`J@@+I~M{1`Z@L`[@I+IDNK1@@@J@J@@@@`J`J@@+IINP1`\@E`\@B+HKNR1@@@J@K@@@@`J`K@@+HQNW1`]`B`]`E+GRNJ1@@@K@J@@@@`K`J@@+GWNP1`\`J`[`L+F[Mt1@@@K@J@@@@`K`J@@+F`Mz1`Y`Q`W`S+EkMQ1@@@J@J@@@@`J`J@@+EpMV1`T`V`R`Y+EELb1@@@J@J@@@@`J`J@@+EJLg1`N`[`K`]+DkKj1@@@J@K@@@@`J`K@@+DqKo1`H`^`C`_+DaJm1@@@J@J@@@@`J`J@@+DfJr1@@``@E`_+DfIn1@@@J@J@@@@`J`J@@+DkIs1@H`_@M`]+DzHr1@@@J@K@@@@`J`K@@+E@Hw1@P`\@S`Z+E^G|1@@@J@J@@@@`J`J@@+EcHA1@W`W@Y`T+FNGQ1@@@J@K@@@@`J`K@@+FSGV1@]`Q@^`N+GIFr1@@@K@J@@@@`K`J@@+GNFw1@_`I@a`E+HIFc1@@@K@J@@@@`K`J@@+HNFi1@b`B@a@C+ILFe1@@@J@J@@@@`J`J@@+IQFj1@a@G@`@L+JMFx1@@@J@J@@@@`J`J@@+JRF}1@_@O@\@S+KHGZ1@@@J@J@@@@`J`J@@+KMG_1@Z@W@W@Z+KyHK1@@@J@J@@@@`J`J@@+K~HP1@S@\@P@_+L\IF1@@@K@J@@@@`K`J@@+LaIK1@L@a@H@c+LpJI1@@@K@J@@@@`K`J@@+LuJO1@C@c+LsJm1@@@J@J@@@@`J`J@@% 7B+@J@\6556I 03 09-23-84 22.961 frame no. 09
MH9220,M158,DREXLER % 0707070014230643111006440057030057030000011714540522627504100003200000001672post.src/tests/postdaisy1 B
9
This line is u
_n
_d
_e
_r
_l
_i
_n
_e
_.
_
This
li
ne is bb
boo
oll
ldd
d...
This
line
is
u_uun_nnd_dde_eer_rrl_lli_iin_nne_e
e
_a_a
an_n
nd_d
d
_b_b
bo_o
ol_l
ld_d
d._..
This line is
S
u
b
Script.
This line is
S
u
p
e
r
Script.
B
0707070014230643121006440057030057030000011716700522627504100003000000037011post.src/tests/postdmd1 ²²UU²UU²UU²UU²UU²UU²UUUUU;¯»»»UUUU ¯ UUUU¯ÿÿüUUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀ UUUU ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ UUUU @ @ @ @ @ UUUU ¯ UUUU ‚ ?ð ÿ€ ÿ€ ?ñÿ€ U
UUU ÀÀ ÌÀà ÀÀÿ§ U
UUU á ! !à ‚ € ð€ UUUU €‚ ‚ @ § U
UUU ? à ? ÿ§ U
UUU D @ @ § UUUU ˆ@ ž@ ž@€ ¦ UUUU ‚ € à x x¡ UUUU ‚ ` ü ¦ UUUU ƒ € x x¡ UUUU ƒ € ¦ UUUU
‚ ` ýH ¦ UUUU Ž@ ž@` ž@ü$ ¦ UUUU @ @ @ ’ ¦ U
UUU ¿@ ¿@ ¿@
ð ¤ UUUU € €à €ÿ ¦ UUUU „
?ð ÿ€ ñ€ 0€¡ UUUU ¯ UUUU ‚ @‚ @‚ @‚ @‚ @ UUUU ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ UUUU ÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUUU ¯ UUî UU ° UU?ÿ€¯ UU ° UU ° UU ° UU ° UU ¯ UU ¯ UUð ¯ UUè ¯ UU° UUà ¯ UUà ¯ UU ° UUà ¯ UUø ¯ UU ° UU ° UU ° UU ° UU ° UU ° UU ¯ UU ¯ UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ¯ UU ¯ UU ° UU ° UU ° UU ° UUÀ ¯ UU ° UUÀ ¯ UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ¯ UU ¯ UU ° UU ° UU ° UU ° UUÀ ¯ UU ° UUÀ ¯ UU ° UU ° UU ° UU ° UU ° UU ° UU ° UU ¯ UU ¯ UU ° UU ° UU ° UU ° UU ° UU ° UU ¯ÿÿüUU ° UU ‚ UU ° UU ° UU ° UU ñøü a€¬ UU òõz|R€¬ UU €¼ UU ôø - ¬ UU ùx € ª UU ƒ ¬ UU ýx¼(€ ª UU üþ UU ƒ P ¬ UU ƒ ` ¬ UU ° UU ° UU ° UU ° UU ®ÿÿŽîîUU ¯ UUUU … x „ à þ~€€ 1€„ ‚ €À ççø ` ‰ UUUU „ À´ ƒ ‚Ð 0
‚ ~™€‚ P ‚ € (- @ 鑸 P ‰ UUUU „ À 8 „ 0
‚ $ƒ ° „ @ @ ‚ @ 8 ‰ UUUU ¯ UUUU „ Àƒ
ø ü~f€ ð 0ü ÷ø ‚ | €Çæaø À ÿ€ à Š UUUU „ 0 ƒ z½f/@Áè : ƒ x ‚ z «Öbô Ì€ ‚ €à Š UUUU „ 0 ‚ ø ‚ ÀÀ ƒ ÷ø x „ € Ì„ ÿ€€ ‹ UUUU ˆ ø =† ÷ø … € І ÿ€ Œ UUUU ‰ x>Ž ƒà” UUUU † (
‚ø Å è
÷ø $ƒ €€ 0P € P ÿ€ @ ( ‰ UUUU † À ¿/B€ð
‚ ~™ƒ P ‚ ñRô( @ é P ‰ UUUU „ ÀÀ À €ƒ ü0Æ þ~` ‚ 1† ðáø0 ?Ãa€À çæ ` ‰ UUUU ‰ z Ž ” UUUU Š ü ‚ ü † € ‚ À ‚ `?À UUUU ¯ UUUU ¯ UUUU ƒ ª UUUU ¯ UUUU ƒ (ª UUUU ¯ UUUUø(ƒ Pª UUUUø ® UUUU Pƒ ª UUUUð ® UUUUè ƒ @ª UUUU ¯ UUUUé@ƒ €ª UUUUð ® UUUU €ƒ ª UUUU ¯ UUUU ¯ »»UU ° UU ‚ € À 0ð„ ‚ €À ççø 0 ƒ à‚ ‚ þ~€Œ ÿüUU ‚ @@ PÀ‚
€ (- @ 鑸 ƒ ‚Ð 0
‚ ~™€ UU ‚ Ð ° „ @ @ ‚ @‚
„ 0 ƒ 4 Œ UU ° UU ‚ ƒ
€Çæaø À ÿ€ à ‚
Àø ü~f€ ð 0ü ÷ø Ž UU ‚ 3„ «Öbô Ì€ ‚ €à ‚ z½f/@Áè :ƒ x Ž UU ‚ 3ƒ € Ì„ ÿ€€ „ ø‚ ÀÀƒ ÷ø x UU † € І ÿ€ … ø = … ÷ø UU ‡ ƒàŽ x>