mirror of
https://github.com/mabam/CAP.git
synced 2024-06-11 00:29:35 +00:00
1340 lines
36 KiB
Bash
1340 lines
36 KiB
Bash
#! /bin/sh
|
|
# This is a shell archive, meaning:
|
|
# 1. Remove everything above the #! /bin/sh line.
|
|
# 2. Save the resulting text in a file.
|
|
# 3. Execute the file with /bin/sh (not csh) to create the files:
|
|
# ReadMe
|
|
# Installation
|
|
# Makefile
|
|
# macaux.c
|
|
# macps.c
|
|
# prepfix.c
|
|
# str.h
|
|
# ucbwhich.c
|
|
# ucbwhich.h
|
|
# macps.config
|
|
# macps.1
|
|
# prepfix.1
|
|
# macps.shar - archive created: Mon Oct 30 10:48:50 PST 1989
|
|
if test -f ReadMe
|
|
then
|
|
echo shar: will not overwrite existing file "'ReadMe'"
|
|
else
|
|
echo 'x - ReadMe'
|
|
cat << \RAZZLE!DAZZLE > ReadMe
|
|
COPYRIGHT NOTICE (SCCSid = "@(#)ReadMe 2.2 10/24/89")
|
|
|
|
Copyright (c) 1988, The Regents of the University of California.
|
|
Edward Moy, Workstation Software Support Group, Workstation Support
|
|
Serices, Information Systems and Technology.
|
|
|
|
Permission is granted to any individual or institution to use, copy, or
|
|
redistribute this software so long as it is not sold for profit,
|
|
provided that this notice and the original copyright notices are
|
|
retained. The University of California makes no representations about
|
|
the suitability of this software for any purpose. It is provided "as
|
|
is" without express or implied warranty.
|
|
|
|
WHAT IS MACPS?
|
|
|
|
Macps is a Unix program that takes an uploaded PostScript file created
|
|
on a Macintosh (by typing Command-F at the LaserWriter dialog box; see
|
|
macps.1 for more details) and includes an appropriately modified
|
|
LaserPrep file so that the result can be sent to a PostScript printer
|
|
>From Unix. The LaserPrep file contains macros used by the PostScript
|
|
generator on the Macintosh.
|
|
|
|
WHY IS MACPS NEEDED?
|
|
|
|
This is how Mac printing works. When a Mac talks to a LaserWriter, it
|
|
asks if the LaserWriter has had a LaserPrep file downloaded to it. A
|
|
LaserWriter that is first powered up, has no such LaserPrep file, and
|
|
so the Mac downloads it and makes the LaserPrep file resident in
|
|
memory. Then the actual print file is sent to the LaserWriter.
|
|
Subsequent print requests need not download the LaserPrep file, unless
|
|
it is a different version.
|
|
|
|
Since a LaserWriter connected to a Unix system usually does things
|
|
other than Mac printing, it is unwise to make LaserPrep files resident
|
|
in memory so that other PostScript jobs have less memory to work with.
|
|
What prepfix does is to modify a LaserPrep file so that, among other
|
|
things, it does not make itself resident in memory. Thus, the
|
|
LaserPrep file must be downloaded for each Mac print job. This is the
|
|
function of macps, to automatically append the appropriate LaserPrep
|
|
file.
|
|
|
|
WHICH VERSION OF THE LASERPREP WILL BE USED?
|
|
|
|
Macps interprets the %%IncludeProcSet directive found in the PostScript
|
|
generated by LaserWriter driver 4.0 and greater. It takes the ProcSet
|
|
id and looks it up in a file "macps.config", to get the pathname of the
|
|
prep file, and thus macps can convert PostScript generated by different
|
|
versions of the LaserWriter driver.
|
|
|
|
HOW ARE THE LASERPREP FILES GENERATED?
|
|
|
|
Since the Apple LaserPrep files are copyrighted, I've included a
|
|
program, prepfix, that reads version 4.0 and up LaserPrep files, and
|
|
edits them so that they are compatible with Unix, and are even
|
|
electronically mailable (See prepfix.1 for more details).
|
|
|
|
WHERE IS THE MACPS.CONFIG FILE LOCATED?
|
|
|
|
Macps has some special code that is able to figure out from which
|
|
directory it was called from. It will then look in a "lib" subdiretory
|
|
for the macps.config file.
|
|
|
|
WHAT ABOUT BIT-SMOOTHING ON NON-LASERWRITER PRINTERS?
|
|
|
|
For PostScript printers using Motorola 680x0 processors and Adobe
|
|
PostScript firmware other than LaserWriters, there is an option that
|
|
will allow these printers to do bit-smoothing, just like LaserWriters.
|
|
|
|
CHANGES IN VERSION 2.2
|
|
|
|
Version 2.2 of prepfix now supports LaserPrep 6.0. The PostScript
|
|
save/restore context is now a compile-time option, since it caused
|
|
printing to fail on a NeXT printer (though it was harmless on most
|
|
other printers). This save/restore is now more intelligent about
|
|
clearing the stacks.
|
|
|
|
CHANGES IN VERSION 2.1
|
|
|
|
Version 2.1 of prepfix uses a safer method for turning on bit-smoothing
|
|
for non-Apple printers. This should get around some of the problems
|
|
people have been having with specialized macros in the LaserPreps that
|
|
are Apple printer specific. The -l and -p options in version 1.1 have
|
|
been replaced with the single -l option, and the limit on the number
|
|
of printers you can specify has been removed.
|
|
|
|
Also, prepfix removes some other various macros that cause
|
|
unpredictable problems, and a problem with Apple LaserWriter II/NTs
|
|
(but not other Apple printers).
|
|
|
|
Version 2.1 macps has several new options. The -c option allow you to
|
|
specify the number of copies to generate (overriding any multiple copy
|
|
option that was specified on the Macintosh). The -d option allows an
|
|
alternate directory to look for the macps.config file. Finally, the -r
|
|
(raw) option suppresses the conversion of 8-bit binary into ASCII, and
|
|
is useful for some graphics programs that manipulate gray-scale images,
|
|
and produce 8-bit binary PostScript output.
|
|
|
|
Macps will even work with a NeXT laser printer, but (at least the 0.8
|
|
version of the operating system) will not do bit smoothing. Beware,
|
|
though, that if you print Macintosh patterns at 400 dpi, they will
|
|
look funny.
|
|
RAZZLE!DAZZLE
|
|
fi # End ReadMe
|
|
if test -f Installation
|
|
then
|
|
echo shar: will not overwrite existing file "'Installation'"
|
|
else
|
|
echo 'x - Installation'
|
|
cat << \RAZZLE!DAZZLE > Installation
|
|
Installation Instructions (SCCSid = "@(#)Installation 2.2 10/24/89")
|
|
|
|
1) Look at the Makefile. There are three CFLAGS options that you can
|
|
use. Setting SYSV should allow macps and prepfix to compile on System
|
|
V machines (I've only tried it under A/UX). Setting CONFIGDIR will
|
|
cause macps to look for macps.config in that directory. Setting SAVE
|
|
will cause macps to enclose the entire print job is a PostScript
|
|
save/restore context. Normally you don't need SAVE, since most
|
|
spooling software will automatically do an EOF between print jobs, which
|
|
effectively does a restore of memory for you, but some spooling
|
|
software does require the save/restore. Note that defining SAVE will
|
|
cause printing to fail on a NeXT laser printer, while it is harmless on
|
|
most other systems.
|
|
|
|
The options will look something like:
|
|
|
|
CFLAGS = -O -DSYSV -DCONFIGDIR=\"/usr/new/lib\" -DSAVE
|
|
|
|
if you defined all the options.
|
|
|
|
2) Type "make". If all goes well, macps and prepfix will be created.
|
|
|
|
3) To create the unprocessed LaserPrep file on the Mac, as well as
|
|
creating the raw PostScript files that you want to print, make sure
|
|
that either you're not running MultiFinder, or if you are, go to the
|
|
Chooser under the Apple menu, click on the LaserWriter icon and then
|
|
turn off Background Printing.
|
|
|
|
4) For each version of LaserPrep on the Mac that you want to include,
|
|
install that version in the System Folder. Then, open an empty
|
|
document in some simple application (one that doesn't have its
|
|
own ProcSet to download). Choose Print from the File menu and the
|
|
LaserWriter print dialog will appear. Click on the OK button and
|
|
IMMEDIATELY press and hold Command-K. When a dialog box appears
|
|
telling you that it is creating a PostScript file, you can release
|
|
Command-K. The unprocessed LaserPrep file will usually be found in one
|
|
of three places, in the System Folder, in the same folder as the
|
|
application or at the top level of the disk.
|
|
|
|
5) Upload the PostScript file(s) to Unix, using some file transfer
|
|
program like MacTerminal, Versaterm, Red Ryder, MacKermit or NCSA
|
|
Telnet (if your file transfer program feels left out, feel free to add
|
|
it to your list).
|
|
|
|
6) Run prepfix on each unprocessed file, diverting the standard output
|
|
to an appropriataly named file (like LaserPrep5.2). If you want to
|
|
allow bit smoothing on a non-Apple PostScript printer, specify the -l
|
|
option to prepfix (you can specify as many printer names as you want,
|
|
each with a separate -l flag). If you aren't sure the your printer can
|
|
do smoothing, you can try it and see if it works (if it doesn't, you
|
|
can always re-run prepfix on the unprocessed file(s), leaving off the
|
|
printer that doesn't work). If you don't know the product name for you
|
|
printer, you can use the following PostScript code to print it:
|
|
|
|
%!
|
|
/in {72 mul} def
|
|
/Courier findfont 18 scalefont setfont
|
|
1 in 8 in moveto
|
|
statusdict /product get show
|
|
showpage
|
|
|
|
7) Put the modified LaserPrep file(s) in some directory and modify the
|
|
macps.config file to point to these LaserPrep files. Then put the
|
|
macps.config file in a "lib" subdirectory to where you install macps
|
|
(or in the directory CONFIGDIR if you used that option).
|
|
|
|
8) Now when you want to print something, do the same thing as in step 4
|
|
above with the LaserWriter print dialog, except press and hold
|
|
Command-F (this cause LaserPrep not to be included in the PostScript
|
|
file).
|
|
|
|
9) Upload the PostScript file and run macps on it, sending the output
|
|
to your printer, as in:
|
|
|
|
% macps psfile | lpr
|
|
RAZZLE!DAZZLE
|
|
fi # End Installation
|
|
if test -f Makefile
|
|
then
|
|
echo shar: will not overwrite existing file "'Makefile'"
|
|
else
|
|
echo 'x - Makefile'
|
|
cat << \RAZZLE!DAZZLE > Makefile
|
|
# Copyright (c) 1988, The Regents of the University of California.
|
|
# Edward Moy, Workstation Software Support Group, Workstation Support Serices,
|
|
# Information Systems and Technology.
|
|
#
|
|
# Permission is granted to any individual or institution to use, copy,
|
|
# or redistribute this software so long as it is not sold for profit,
|
|
# provided that this notice and the original copyright notices are
|
|
# retained. The University of California makes no representations about the
|
|
# suitability of this software for any purpose. It is provided "as is"
|
|
# without express or implied warranty.
|
|
#
|
|
# SCCSid = "@(#)Makefile 2.2 10/24/89"
|
|
#
|
|
# For System V, include -DSYSV in CFLAGS below.
|
|
# To specify a fixed path for macps.config, include -DCONFIGDIR=\"path\"
|
|
# in CFLAGS below (path is the full pathname of the directory).
|
|
# To do save/restore context, include -DSAVE in CFLAGS below.
|
|
#
|
|
CFLAGS = -O
|
|
MACPS = macps.o macaux.o ucbwhich.o
|
|
PREPFIX = prepfix.o macaux.o
|
|
|
|
all : macps prepfix
|
|
|
|
macps : $(MACPS)
|
|
cc -o macps $(CFLAGS) $(MACPS)
|
|
|
|
prepfix : $(PREPFIX)
|
|
cc -o prepfix $(CFLAGS) $(PREPFIX)
|
|
|
|
clean :
|
|
/bin/rm -f *.o macps prepfix
|
|
RAZZLE!DAZZLE
|
|
fi # End Makefile
|
|
if test -f macaux.c
|
|
then
|
|
echo shar: will not overwrite existing file "'macaux.c'"
|
|
else
|
|
echo 'x - macaux.c'
|
|
cat << \RAZZLE!DAZZLE > macaux.c
|
|
/*
|
|
* Copyright (c) 1988, The Regents of the University of California.
|
|
* Edward Moy, Workstation Software Support Group, Workstation Support Serices,
|
|
* Information Systems and Technology.
|
|
*
|
|
* Permission is granted to any individual or institution to use, copy,
|
|
* or redistribute this software so long as it is not sold for profit,
|
|
* provided that this notice and the original copyright notices are
|
|
* retained. The University of California makes no representations about the
|
|
* suitability of this software for any purpose. It is provided "as is"
|
|
* without express or implied warranty.
|
|
*/
|
|
|
|
#ifndef lint
|
|
static char *SCCSid = "@(#)macaux.c 2.2 10/24/89";
|
|
#endif lint
|
|
|
|
#include <ctype.h>
|
|
#include <stdio.h>
|
|
#include "str.h"
|
|
|
|
#define FALSE 0
|
|
#define TRUE 1
|
|
|
|
extern char *myname;
|
|
int rawmode = FALSE;
|
|
|
|
STR *
|
|
STRalloc()
|
|
{
|
|
register STR *str;
|
|
char *malloc();
|
|
|
|
if((str = (STR *)malloc(sizeof(STR))) == NULL ||
|
|
(str->bufptr = (unsigned char *)malloc(STRSIZE)) == NULL) {
|
|
fprintf(stderr, "%s: STRalloc: Out of memory\n", myname);
|
|
exit(1);
|
|
}
|
|
str->curendptr = str->bufptr;
|
|
str->realendptr = str->bufptr + STRSIZE;
|
|
return(str);
|
|
}
|
|
|
|
STRfree(str)
|
|
STR *str;
|
|
{
|
|
free((char *)str->bufptr);
|
|
free((char *)str);
|
|
}
|
|
|
|
STRexpand(str)
|
|
register STR *str;
|
|
{
|
|
register int curend, realend;
|
|
char *realloc();
|
|
|
|
curend = str->curendptr - str->bufptr;
|
|
realend = (str->realendptr - str->bufptr) + STRSIZEDELTA;
|
|
if((str->bufptr = (unsigned char *)realloc((char *)str->bufptr,
|
|
realend)) == NULL) {
|
|
fprintf(stderr, "%s: STRexpand: Out of memory\n", myname);
|
|
exit(1);
|
|
}
|
|
str->curendptr = str->bufptr + curend;
|
|
str->realendptr = str->bufptr + realend;
|
|
}
|
|
|
|
STRgets(str, fp)
|
|
register STR *str;
|
|
register FILE *fp;
|
|
{
|
|
register int c;
|
|
|
|
str->curendptr = str->bufptr;
|
|
for( ; ; ) {
|
|
if((c = getc(fp)) == EOF)
|
|
return(str->curendptr > str->bufptr);
|
|
if(str->curendptr >= str->realendptr)
|
|
STRexpand(str);
|
|
*str->curendptr++ = c;
|
|
if(c == '\n' || c == '\r')
|
|
return(TRUE);
|
|
}
|
|
}
|
|
|
|
STRputsptr(str, cp, fp)
|
|
register STR *str;
|
|
register unsigned char *cp;
|
|
register FILE *fp;
|
|
{
|
|
if(rawmode) {
|
|
for( ; cp < str->curendptr ; cp++)
|
|
putc(*cp, fp);
|
|
return;
|
|
}
|
|
for( ; cp < str->curendptr ; cp++) {
|
|
if(!isascii(*cp))
|
|
fprintf(fp, "\\%03o", *cp);
|
|
else if(isprint(*cp))
|
|
putc(*cp, fp);
|
|
else {
|
|
switch(*cp) {
|
|
case '\n':
|
|
case '\r':
|
|
putc('\n', fp);
|
|
continue;
|
|
case '\t':
|
|
putc('\t', fp);
|
|
continue;
|
|
default:
|
|
fprintf(fp, "\\%03o", *str);
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
STRcompareptr(str, cp, sp)
|
|
register STR *str;
|
|
register unsigned char *cp, *sp;
|
|
{
|
|
register int comp;
|
|
|
|
for( ; ; ) {
|
|
if(*sp == 0)
|
|
return(cp >= str->curendptr ? 0 : 1);
|
|
if(cp >= str->curendptr)
|
|
return(-1);
|
|
if(*sp == '\n') {
|
|
if(*cp != '\n' && *cp != '\r')
|
|
return((int)*cp - (int)*sp);
|
|
} else if((comp = (int)*cp - (int)*sp) != 0)
|
|
return(comp);
|
|
cp++;
|
|
sp++;
|
|
}
|
|
}
|
|
|
|
STRheadcmpptr(str, cp, sp)
|
|
register STR *str;
|
|
register unsigned char *cp, *sp;
|
|
{
|
|
register int comp;
|
|
|
|
for( ; ; ) {
|
|
if(*sp == 0)
|
|
return(0);
|
|
if(cp >= str->curendptr)
|
|
return(-1);
|
|
if(*sp == '\n') {
|
|
if(*cp != '\n' && *cp != '\r')
|
|
return((int)*cp - (int)*sp);
|
|
} else if((comp = (int)*cp - (int)*sp) != 0)
|
|
return(comp);
|
|
cp++;
|
|
sp++;
|
|
}
|
|
}
|
|
|
|
unsigned char *
|
|
STRmatch(str, sp)
|
|
register STR *str;
|
|
register unsigned char *sp;
|
|
{
|
|
register unsigned char *mp, *last;
|
|
register int firstchar;
|
|
|
|
firstchar = *sp;
|
|
last = str->curendptr - strlen(sp);
|
|
mp = str->bufptr;
|
|
while(mp <= last) {
|
|
if(*mp == firstchar && STRheadcmpptr(str, mp, sp) == 0)
|
|
return(mp);
|
|
mp++;
|
|
}
|
|
return(NULL);
|
|
}
|
|
RAZZLE!DAZZLE
|
|
fi # End macaux.c
|
|
if test -f macps.c
|
|
then
|
|
echo shar: will not overwrite existing file "'macps.c'"
|
|
else
|
|
echo 'x - macps.c'
|
|
cat << \RAZZLE!DAZZLE > macps.c
|
|
/*
|
|
* Copyright (c) 1988, The Regents of the University of California.
|
|
* Edward Moy, Workstation Software Support Group, Workstation Support Serices,
|
|
* Information Systems and Technology.
|
|
*
|
|
* Permission is granted to any individual or institution to use, copy,
|
|
* or redistribute this software so long as it is not sold for profit,
|
|
* provided that this notice and the original copyright notices are
|
|
* retained. The University of California makes no representations about the
|
|
* suitability of this software for any purpose. It is provided "as is"
|
|
* without express or implied warranty.
|
|
*/
|
|
|
|
#ifndef lint
|
|
static char *SCCSid = "@(#)macps.c 2.2 10/25/89";
|
|
#endif lint
|
|
|
|
#include <ctype.h>
|
|
#include <stdio.h>
|
|
#ifdef SYSV
|
|
#include <string.h>
|
|
#else SYSV
|
|
#include <strings.h>
|
|
#endif SYSV
|
|
#include <sys/types.h>
|
|
#include <sys/file.h>
|
|
#include "str.h"
|
|
#include "ucbwhich.h"
|
|
|
|
#define CONFIG "macps.config"
|
|
#ifdef SYSV
|
|
#define index strchr
|
|
#define rindex strrchr
|
|
#endif SYSV
|
|
|
|
#ifdef SAVE
|
|
char *finale = "clear countdictstack 2 sub{end}repeat macps restore\n";
|
|
char intro[] = "\
|
|
%%! *** Created by macps: %s\
|
|
/macps save def\n\
|
|
";
|
|
#else SAVE
|
|
char intro[] = "\
|
|
%%! *** Created by macps: %s\
|
|
";
|
|
#endif SAVE
|
|
char *myname;
|
|
int ncopies = 0;
|
|
#ifdef CONFIGDIR
|
|
char ucblib[UCBMAXPATHLEN] = CONFIGDIR;
|
|
#else CONFIGDIR
|
|
int ucbalternate;
|
|
char ucbpath[UCBMAXPATHLEN];
|
|
char ucblib[UCBMAXPATHLEN];
|
|
#endif CONFIGDIR
|
|
|
|
main(argc, argv)
|
|
int argc;
|
|
char **argv;
|
|
{
|
|
register STR* str;
|
|
register char *cp, *pp;
|
|
register FILE *fp;
|
|
register int i, fd;
|
|
char line[BUFSIZ];
|
|
char path[UCBMAXPATHLEN];
|
|
long ltime;
|
|
char *ctime();
|
|
|
|
#ifndef CONFIGDIR
|
|
ucbwhich(*argv);
|
|
#endif CONFIGDIR
|
|
if(myname = rindex(*argv, '/'))
|
|
myname++;
|
|
else
|
|
myname = *argv;
|
|
cp = NULL;
|
|
for(argc--, argv++ ; argc > 0 && **argv == '-' ; argc--, argv++) {
|
|
switch((*argv)[1]) {
|
|
case 'c': /* multiple copies */
|
|
if((*argv)[2])
|
|
ncopies = atoi(&(*argv[2]));
|
|
else {
|
|
if(argc < 2)
|
|
Usage(); /* never returns */
|
|
argc--;
|
|
ncopies = atoi(*++argv);
|
|
}
|
|
if(ncopies <= 0)
|
|
Usage(); /* never returns */
|
|
break;
|
|
case 'd': /* alternate directory for config file */
|
|
if((*argv)[2])
|
|
cp = &(*argv[2]);
|
|
else {
|
|
if(argc < 2)
|
|
Usage(); /* never returns */
|
|
argc--;
|
|
cp = *++argv;
|
|
}
|
|
strcpy(ucblib, cp);
|
|
break;
|
|
case 'r': /* raw mode */
|
|
rawmode++;
|
|
break;
|
|
default:
|
|
Usage(); /* never returns */
|
|
}
|
|
}
|
|
if(argc > 1)
|
|
Usage(); /* never returns */
|
|
if(argc == 1 && freopen(*argv, "r", stdin) == NULL) {
|
|
fprintf(stderr, "%s: can't open %s\n", myname, *argv);
|
|
exit(1);
|
|
}
|
|
str = STRalloc();
|
|
if(!STRgets(str, stdin)) {
|
|
fprintf(stderr, "%s: Null input\n", myname);
|
|
exit(1);
|
|
}
|
|
strcat(ucblib, "/");
|
|
strcpy(path, ucblib);
|
|
strcat(path, CONFIG);
|
|
if((fp = fopen(path, "r")) == NULL) {
|
|
fprintf(stderr, "%s: Can't open %s\n", myname, path);
|
|
exit(1);
|
|
}
|
|
time(<ime);
|
|
printf(intro, ctime(<ime));
|
|
do {
|
|
if(ncopies != 0 && STRheadcompare(str, "userdict /#copies ")
|
|
== 0)
|
|
continue;
|
|
if(STRcompare(str, "%%EOF\n") == 0) {
|
|
#ifdef SAVE
|
|
if(finale) {
|
|
fputs(finale, stdout);
|
|
finale = NULL;
|
|
}
|
|
#endif SAVE
|
|
STRputs(str, stdout);
|
|
continue;
|
|
}
|
|
if(STRheadcompare(str, "%%IncludeProcSet:") == 0) {
|
|
for(cp = (char *)&str->bufptr[17] ; ; cp++) {
|
|
if(!*cp) {
|
|
fprintf(stderr,
|
|
"%s: Syntax error on IncludeProcSet line\n",
|
|
myname);
|
|
exit(1);
|
|
}
|
|
if(!isascii(*cp) || !isspace(*cp))
|
|
break;
|
|
}
|
|
pp = (char *)str->curendptr;
|
|
while(--pp >= cp) {
|
|
if(!isascii(*pp) || !isspace(*pp))
|
|
break;
|
|
*pp = 0;
|
|
}
|
|
str->curendptr = (unsigned char *)(pp + 1);
|
|
fseek(fp, 0L, 0);
|
|
for( ; ; ) {
|
|
if(!fgets(line, BUFSIZ, fp)) {
|
|
fprintf(stderr,
|
|
"%s: Unknown IncludeProcSet %s\n",
|
|
myname, cp);
|
|
exit(1);
|
|
}
|
|
if(*line == '#')
|
|
continue;
|
|
if(pp = index(line, '\n')) {
|
|
if(pp == line)
|
|
continue;
|
|
*pp = 0;
|
|
}
|
|
if(!(pp = index(line, '\t'))) {
|
|
fprintf(stderr,
|
|
"%s: Syntax error in macps.config\n",
|
|
myname);
|
|
exit(1);
|
|
}
|
|
*pp++ = 0;
|
|
if(STRcompareptr(str, cp, line) == 0)
|
|
break;
|
|
}
|
|
if(*pp == '/')
|
|
strcpy(path, pp);
|
|
else {
|
|
strcpy(path, ucblib);
|
|
strcat(path, pp);
|
|
}
|
|
fflush(stdout);
|
|
if((fd = open(path, O_RDONLY, 0)) < 0) {
|
|
fprintf(stderr, "%s: Can't open %s\n", myname,
|
|
path);
|
|
exit(1);
|
|
}
|
|
while((i = read(fd, line, BUFSIZ)) > 0)
|
|
write(1, line, i);
|
|
close(fd);
|
|
continue;
|
|
}
|
|
STRputs(str, stdout);
|
|
if(ncopies > 1 && isascii(*str->bufptr) &&
|
|
isdigit(*str->bufptr)) {
|
|
cp = (char *)str->bufptr;
|
|
while(cp < (char *)str->curendptr && isascii(*cp)
|
|
&& isdigit(*cp))
|
|
cp++;
|
|
if((char *)str->curendptr - cp == 4 &&
|
|
STRcompareptr(str, cp, " mf\n") == 0) {
|
|
printf("userdict /#copies %d put\n", ncopies);
|
|
ncopies = -1;
|
|
}
|
|
}
|
|
} while(STRgets(str, stdin));
|
|
#ifdef SAVE
|
|
if(finale)
|
|
fputs(finale, stdout);
|
|
#endif SAVE
|
|
exit(0);
|
|
}
|
|
|
|
Usage()
|
|
{
|
|
fputs("Usage: macps [-c #] [-d directory] [-r] [file]\n", stderr);
|
|
exit(1);
|
|
}
|
|
RAZZLE!DAZZLE
|
|
fi # End macps.c
|
|
if test -f prepfix.c
|
|
then
|
|
echo shar: will not overwrite existing file "'prepfix.c'"
|
|
else
|
|
echo 'x - prepfix.c'
|
|
cat << \RAZZLE!DAZZLE > prepfix.c
|
|
/*
|
|
* Copyright (c) 1988, The Regents of the University of California.
|
|
* Edward Moy, Workstation Software Support Group, Workstation Support Serices,
|
|
* Information Systems and Technology.
|
|
*
|
|
* Permission is granted to any individual or institution to use, copy,
|
|
* or redistribute this software so long as it is not sold for profit,
|
|
* provided that this notice and the original copyright notices are
|
|
* retained. The University of California makes no representations about the
|
|
* suitability of this software for any purpose. It is provided "as is"
|
|
* without express or implied warranty.
|
|
*/
|
|
|
|
#ifndef lint
|
|
static char *SCCSid = "@(#)prepfix.c 2.2 10/25/89";
|
|
#endif lint
|
|
|
|
#include <ctype.h>
|
|
#include <stdio.h>
|
|
#ifdef SYSV
|
|
#include <string.h>
|
|
#else SYSV
|
|
#include <strings.h>
|
|
#endif SYSV
|
|
#include "str.h"
|
|
|
|
#define CLEARTOMARK 12
|
|
#define EEXECLEN 80
|
|
#define EXTRA (NZEROLINE * ZEROLINE + CLEARTOMARK)
|
|
#define LINELEN 256
|
|
#define NPRODUCTS 32
|
|
#define NZEROLINE 7
|
|
#define ZEROLINE 65
|
|
#ifdef SYSV
|
|
#define index strchr
|
|
#define rindex strrchr
|
|
#endif SYSV
|
|
|
|
char exstr[] = "\
|
|
%ck userdict/%s known not and{currentfile eexec}{%d{currentfile read\n\
|
|
pop pop}repeat}ifelse\n\
|
|
";
|
|
char *match();
|
|
char *myname;
|
|
int maxproducts = NPRODUCTS;
|
|
int nproducts = 0;
|
|
char Ok[] = "\
|
|
/Ok{ok{true}{save /Pd statusdict /product get def false 0 1 ProdArr length\n\
|
|
1 sub{Pd exch ProdArr exch get anchorsearch exch pop{pop pop true exit}if}for\n\
|
|
exch restore}ifelse}bind def\n\
|
|
";
|
|
char ProdArr0[] = "/ProdArr [\n";
|
|
char ProdArr1[] = "] def\n";
|
|
char **products;
|
|
char tempname[] = "/tmp/prepfixXXXXXX";
|
|
|
|
main(argc, argv)
|
|
int argc;
|
|
char **argv;
|
|
{
|
|
register STR *str;
|
|
register FILE *tp;
|
|
register int i;
|
|
register unsigned char *lp;
|
|
char buf[BUFSIZ];
|
|
char *malloc(), *realloc();
|
|
|
|
if(myname = rindex(*argv, '/'))
|
|
myname++;
|
|
else
|
|
myname = *argv;
|
|
for(argc--, argv++ ; argc > 0 && **argv == '-' ; argc--, argv++) {
|
|
switch((*argv)[1]) {
|
|
case 'h':
|
|
usage();
|
|
case 'l':
|
|
if(nproducts <= 0 && (products =
|
|
(char **)malloc(maxproducts*sizeof(char *))) == NULL) {
|
|
fprintf(stderr,
|
|
"%s: Out of memory creating products array\n",
|
|
myname);
|
|
exit(1);
|
|
} else if(nproducts >= maxproducts - 1 && (products =
|
|
(char **)realloc(products, (maxproducts += NPRODUCTS)
|
|
* sizeof(char *))) == NULL) {
|
|
fprintf(stderr,
|
|
"%s: Out of memory expanding products array\n",
|
|
myname);
|
|
exit(1);
|
|
}
|
|
if((*argv)[2])
|
|
products[nproducts++] = &(*argv)[2];
|
|
else {
|
|
if(argc < 2) {
|
|
fprintf(stderr,
|
|
"%s: No argument for -l\n", myname);
|
|
exit(1);
|
|
}
|
|
argc--;
|
|
argv++;
|
|
products[nproducts++] = *argv;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if(argc > 1)
|
|
usage();
|
|
if(argc > 0 && freopen(*argv, "r", stdin) == NULL) {
|
|
fprintf(stderr, "%s: Can't open %s\n", myname, *argv);
|
|
exit(1);
|
|
}
|
|
mktemp(tempname);
|
|
if((tp = fopen(tempname, "w+")) == NULL) {
|
|
fprintf(stderr, "%s: Can't create temp file %s\n",
|
|
myname, tempname);
|
|
exit(1);
|
|
}
|
|
unlink(tempname);
|
|
str = STRalloc();
|
|
if(!STRgets(str, stdin)) {
|
|
fprintf(stderr, "%s: Null input\n", myname);
|
|
exit(1);
|
|
}
|
|
for( ; ; ) {
|
|
if(STRheadcompare(str, "% \251") == 0) {
|
|
fputs("% ", tp);
|
|
str->bufptr[0] = '(';
|
|
str->bufptr[1] = 'C';
|
|
str->bufptr[2] = ')';
|
|
} else if(STRheadcompare(str, "%%BeginProcSet:") == 0) {
|
|
STRputs(str, stdout);
|
|
fseek(tp, 0L, 0);
|
|
while((i = fread(buf, 1, BUFSIZ, tp)) > 0)
|
|
fwrite(buf, 1, i, stdout);
|
|
fclose(tp);
|
|
break;
|
|
}
|
|
STRputs(str, tp);
|
|
if(!STRgets(str, stdin)) {
|
|
fprintf(stderr, "%s: No BeginProcSet\n", myname);
|
|
exit(1);
|
|
}
|
|
}
|
|
while(STRgets(str, stdin)) {
|
|
if(nproducts > 0 && STRheadcompare(str, "/ok{") == 0) {
|
|
STRputs(str, stdout);
|
|
fputs(ProdArr0, stdout);
|
|
for(i = 0 ; i < nproducts ; i++)
|
|
printf("(%s)\n", products[i]);
|
|
fputs(ProdArr1, stdout);
|
|
fputs(Ok, stdout);
|
|
continue;
|
|
} else if(STRmatch(str, "setdefaulttimeouts")
|
|
|| STRmatch(str, "setsccinteractive"))
|
|
continue;
|
|
else if(STRmatch(str, "/stretch") && STRmatch(str, "eexec")) {
|
|
eexec("stretch", str);
|
|
continue;
|
|
} else if(STRmatch(str, "/smooth4") && STRmatch(str, "eexec")) {
|
|
eexec("smooth4", str);
|
|
continue;
|
|
} else if(STRmatch(str, " checkload")) {
|
|
checkload(str);
|
|
continue;
|
|
} else if(STRmatch(str, "(LaserWriter II NT)")) {
|
|
while(STRgets(str, stdin) && STRheadcompare(str, "35de")
|
|
!= 0)
|
|
{ /* ignore line */ }
|
|
while(STRgets(str, stdin) && isxdigit(*str->bufptr))
|
|
{ /* ignore line */ }
|
|
} else if(lp = STRmatch(str, "scaleby96{ppr")) {
|
|
STRputsptr(str, lp, stdout);
|
|
continue;
|
|
} else if(STRmatch(str, "waittimeout"))
|
|
continue;
|
|
else if(STRheadcompare(str, "%%EndProcSet") == 0) {
|
|
STRputs(str, stdout);
|
|
break;
|
|
}
|
|
STRputs(str, stdout);
|
|
}
|
|
exit(0);
|
|
}
|
|
|
|
eexec(name, str)
|
|
char *name;
|
|
register STR *str;
|
|
{
|
|
register int len;
|
|
|
|
if(!STRgets(str, stdin)) {
|
|
fprintf(stderr, "%s: EOF during reading eexec\n", myname);
|
|
exit(1);
|
|
}
|
|
len = (str->curendptr - str->bufptr) - 1;
|
|
printf(exstr, nproducts > 0 ? 'O' : 'o', name, len + (len / EEXECLEN)
|
|
+ (len % EEXECLEN ? 1 : 0) + EXTRA);
|
|
spliteexec(str);
|
|
}
|
|
|
|
checkload(str)
|
|
register STR *str;
|
|
{
|
|
if(nproducts > 0)
|
|
*str->bufptr = 'O';
|
|
STRputs(str, stdout);
|
|
if(!STRgets(str, stdin)) {
|
|
fprintf(stderr, "%s: EOF during reading eexec\n", myname);
|
|
exit(1);
|
|
}
|
|
spliteexec(str);
|
|
}
|
|
|
|
spliteexec(str)
|
|
register STR *str;
|
|
{
|
|
register int len;
|
|
register unsigned char *bp;
|
|
|
|
bp = str->bufptr;
|
|
len = (str->curendptr - bp) - 1;
|
|
while(len >= 80) {
|
|
fwrite(bp, 80, 1, stdout);
|
|
putchar('\n');
|
|
bp += 80;
|
|
len -= 80;
|
|
}
|
|
if(len > 0) {
|
|
fwrite(bp, len, 1, stdout);
|
|
putchar('\n');
|
|
}
|
|
for( ; ; ) {
|
|
if(!STRgets(str, stdin)) {
|
|
fprintf(stderr, "%s: EOF reached before cleartomark\n",
|
|
myname);
|
|
exit(1);
|
|
}
|
|
STRputs(str, stdout);
|
|
if(STRheadcompare(str, "cleartomark") == 0)
|
|
return;
|
|
}
|
|
}
|
|
|
|
usage()
|
|
{
|
|
fprintf(stderr,
|
|
"Usage: %s [-l product_name1 [-l product_name2]...] [file]\n",
|
|
myname);
|
|
fprintf(stderr, " %s -help\n", myname);
|
|
exit(1);
|
|
}
|
|
RAZZLE!DAZZLE
|
|
fi # End prepfix.c
|
|
if test -f str.h
|
|
then
|
|
echo shar: will not overwrite existing file "'str.h'"
|
|
else
|
|
echo 'x - str.h'
|
|
cat << \RAZZLE!DAZZLE > str.h
|
|
/*
|
|
* Copyright (c) 1988, The Regents of the University of California.
|
|
* Edward Moy, Workstation Software Support Group, Workstation Support Serices,
|
|
* Information Systems and Technology.
|
|
*
|
|
* Permission is granted to any individual or institution to use, copy,
|
|
* or redistribute this software so long as it is not sold for profit,
|
|
* provided that this notice and the original copyright notices are
|
|
* retained. The University of California makes no representations about the
|
|
* suitability of this software for any purpose. It is provided "as is"
|
|
* without express or implied warranty.
|
|
*/
|
|
|
|
/*
|
|
* SCCSid = "@(#)str.h 2.2 10/24/89"
|
|
*/
|
|
|
|
#define STRSIZEDELTA 1024
|
|
#define STRSIZE 1024
|
|
|
|
#define STRcompare(str,fp) STRcompareptr((str), (str)->bufptr, (fp))
|
|
#define STRheadcompare(str,fp) STRheadcmpptr((str), (str)->bufptr, (fp))
|
|
#define STRputs(str,fp) STRputsptr((str), (str)->bufptr, (fp))
|
|
|
|
typedef struct {
|
|
unsigned char *bufptr;
|
|
unsigned char *curendptr;
|
|
unsigned char *realendptr;
|
|
} STR;
|
|
|
|
extern int rawmode;
|
|
|
|
STR *STRalloc();
|
|
int STRcompareptr();
|
|
int STRfree();
|
|
int STRgets();
|
|
int STRheadcmpptr();
|
|
unsigned char *STRmatch();
|
|
int STRputsptr();
|
|
RAZZLE!DAZZLE
|
|
fi # End str.h
|
|
if test -f ucbwhich.c
|
|
then
|
|
echo shar: will not overwrite existing file "'ucbwhich.c'"
|
|
else
|
|
echo 'x - ucbwhich.c'
|
|
cat << \RAZZLE!DAZZLE > ucbwhich.c
|
|
/*
|
|
* Copyright (c) 1988, The Regents of the University of California.
|
|
* Edward Moy, Workstation Software Support Group, Workstation Support Serices,
|
|
* Information Systems and Technology.
|
|
*
|
|
* Permission is granted to any individual or institution to use, copy,
|
|
* or redistribute this software so long as it is not sold for profit,
|
|
* provided that this notice and the original copyright notices are
|
|
* retained. The University of California makes no representations about the
|
|
* suitability of this software for any purpose. It is provided "as is"
|
|
* without express or implied warranty.
|
|
*/
|
|
|
|
#ifndef CONFIGDIR
|
|
#ifndef lint
|
|
static char *SCCSid = "@(#)ucbwhich.c 2.2 10/24/89";
|
|
#endif lint
|
|
|
|
#include <stdio.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include "ucbwhich.h"
|
|
|
|
#define F_OK 0 /* does file exist */
|
|
#define X_OK 1 /* is it executable by caller */
|
|
#define W_OK 2 /* writable by caller */
|
|
#define R_OK 4 /* readable by caller */
|
|
|
|
#define LIBLEN 4
|
|
#ifdef SYSV
|
|
#define index strchr
|
|
#define rindex strrchr
|
|
#endif SYSV
|
|
|
|
static char lib[] = "/lib";
|
|
|
|
char ucblib[UCBMAXPATHLEN];
|
|
int ucbalternate = 0;
|
|
char ucbpath[UCBMAXPATHLEN];
|
|
|
|
ucbwhich(str)
|
|
char *str;
|
|
{
|
|
register char *dir, *name, *cp, *tp;
|
|
register int len;
|
|
char dirbuf[UCBMAXPATHLEN], namebuf[UCBMAXPATHLEN];
|
|
struct stat sbuf;
|
|
char *index(), *rindex(), *getwd(), *getenv();
|
|
|
|
strcpy(name = namebuf, str);
|
|
if(*name == '/') /* absolute pathname */
|
|
*(rindex(dir = name, '/')) = 0 ; /* remove tail */
|
|
else {
|
|
if(cp = index(name, '/')) { /* relative pathname */
|
|
if((dir = getwd(dirbuf)) == NULL)
|
|
return(0);
|
|
/* if any errors occurs assume standard version */
|
|
*cp++ = 0;
|
|
for( ; ; ) {
|
|
if(*name != 0) { /* multiple slashes */
|
|
if(strcmp(name, "..") == 0) {
|
|
/* parent directory */
|
|
if((tp = rindex(dir, '/')) ==
|
|
NULL)
|
|
return(0);
|
|
if(tp == dir)
|
|
tp++;
|
|
/* root directory */
|
|
*tp = 0;
|
|
/* remove last component */
|
|
} else if(strcmp(name, ".") != 0) {
|
|
/* subdirectory */
|
|
strcat(dir, "/");
|
|
strcat(dir, name);
|
|
}
|
|
}
|
|
name = cp;
|
|
if((cp = index(name, '/')) == NULL) break;
|
|
/* ignore last component */
|
|
*cp++ = 0;
|
|
}
|
|
} else { /* look through $PATH variable */
|
|
if((tp = getenv("PATH")) == NULL)
|
|
return(0);
|
|
for(name = namebuf ; ; ) {
|
|
if(*tp == 0)
|
|
return(0);
|
|
else if(*tp == ':')
|
|
tp++;
|
|
if((cp = index(tp, ':')) == NULL)
|
|
cp = tp + strlen(tp);
|
|
/* positioned on null */
|
|
for(dir = dirbuf ; tp < cp ; )
|
|
*dir++ = *tp++;
|
|
*dir = 0;
|
|
strcpy(name, dir = dirbuf);
|
|
strcat(name, "/");
|
|
strcat(name, str);
|
|
if(stat(name, &sbuf) < 0 || (sbuf.st_mode &
|
|
S_IFMT) != S_IFREG)
|
|
continue;
|
|
if(access(name, X_OK) == 0) {
|
|
if(strcmp(dir, ".") == 0 &&
|
|
(dir = getwd(dirbuf)) == NULL)
|
|
return(0);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
strcpy(ucbpath, dir);
|
|
strcpy(ucblib, dir);
|
|
if((len = strlen(dir)) < LIBLEN || strcmp(&dir[len - LIBLEN], lib)
|
|
!= 0)
|
|
strcat(ucblib, lib);
|
|
else
|
|
ucbpath[len - LIBLEN] = 0;
|
|
ucbalternate = (strcmp(ucbpath, UCBSTANDARD) != 0);
|
|
#ifdef EBUG
|
|
fprintf(stderr, "ucbwhich: alt=%d path=%s lib=%s\n", ucbalternate,
|
|
ucbpath, ucblib);
|
|
#endif EBUG
|
|
return(ucbalternate);
|
|
}
|
|
#endif CONFIGDIR
|
|
RAZZLE!DAZZLE
|
|
fi # End ucbwhich.c
|
|
if test -f ucbwhich.h
|
|
then
|
|
echo shar: will not overwrite existing file "'ucbwhich.h'"
|
|
else
|
|
echo 'x - ucbwhich.h'
|
|
cat << \RAZZLE!DAZZLE > ucbwhich.h
|
|
/*
|
|
* Copyright (c) 1988, The Regents of the University of California.
|
|
* Edward Moy, Workstation Software Support Group, Workstation Support Serices,
|
|
* Information Systems and Technology.
|
|
*
|
|
* Permission is granted to any individual or institution to use, copy,
|
|
* or redistribute this software so long as it is not sold for profit,
|
|
* provided that this notice and the original copyright notices are
|
|
* retained. The University of California makes no representations about the
|
|
* suitability of this software for any purpose. It is provided "as is"
|
|
* without express or implied warranty.
|
|
*/
|
|
|
|
/*
|
|
* SCCSid = "@(#)ucbwhich.h 2.2 10/24/89"
|
|
*/
|
|
|
|
#define UCBMAXPATHLEN 128
|
|
#define UCBSTANDARD "/usr/ucb"
|
|
|
|
extern char ucblib[];
|
|
extern int ucbalternate;
|
|
extern char ucbpath[];
|
|
RAZZLE!DAZZLE
|
|
fi # End ucbwhich.h
|
|
if test -f macps.config
|
|
then
|
|
echo shar: will not overwrite existing file "'macps.config'"
|
|
else
|
|
echo 'x - macps.config'
|
|
cat << \RAZZLE!DAZZLE > macps.config
|
|
# This is the config file read by macps.
|
|
# SCCSid = "@(#)macps.config 2.2 10/24/89"
|
|
#
|
|
# Each line is composed of the %%IncludeProcSet id, a tab and the file
|
|
# containing the ProcSet. If the file doesn't begin with a slash, the
|
|
# the name is taken to be relative to the directory in which this config file
|
|
# resides.
|
|
|
|
"(AppleDict md)" 65 0 ProcSets/LaserPrep4.0
|
|
"(AppleDict md)" 66 ProcSets/LaserPrep5.0
|
|
"(AppleDict md)" 67 0 ProcSets/LaserPrep5.1
|
|
"(AppleDict md)" 68 0 ProcSets/LaserPrep5.2
|
|
"(AppleDict md)" 70 0 ProcSets/LaserPrep6.0
|
|
RAZZLE!DAZZLE
|
|
fi # End macps.config
|
|
if test -f macps.1
|
|
then
|
|
echo shar: will not overwrite existing file "'macps.1'"
|
|
else
|
|
echo 'x - macps.1'
|
|
cat << \RAZZLE!DAZZLE > macps.1
|
|
.\" SCCSid = "@(#)macps.1 2.2 10/24/89"
|
|
.TH MACPS 1 "24 Oct 1989"
|
|
.UC 4
|
|
.SH NAME
|
|
macps \- print Macintosh-created PostScript file on Unix
|
|
.SH SYNOPSIS
|
|
.B macps
|
|
[
|
|
\-c copies
|
|
]
|
|
[
|
|
\-d directory
|
|
]
|
|
[
|
|
\-r
|
|
]
|
|
[
|
|
file
|
|
]
|
|
.SH DESCRIPTION
|
|
.I Macps
|
|
takes the command-line file (or the standard input if no filename is given),
|
|
and prepends the appropriate Macintosh LaserPrep file (e.g., those generated
|
|
by
|
|
.IR prepfix (1)).
|
|
The standard output can then be directed to a PostScript printer, via
|
|
.IR lpr (1),
|
|
for example.
|
|
.PP
|
|
The input PostScript file is generated on a Macintosh by typing (and holding)
|
|
Command-F immediately after clicking the OK button of the LaserWriter printer
|
|
dialog box.
|
|
Another dialog will appear, confirming that a file named ``PostScript'' is
|
|
being created (the Command-F keys can be released now).
|
|
.PP
|
|
Depending on the application, the created PostScript file can be found in the
|
|
System Folder, the application folder or the top level of the disk.
|
|
This file can then be uploaded via some file transfer program, such as
|
|
MacTerminal/VersaTerm and
|
|
.IR macget (1)
|
|
or MacKermit/Red Ryder and
|
|
.IR kermit (1).
|
|
.PP
|
|
Normally, you would specify the number of copies in the LaserWriter
|
|
print dialog box on the Macintosh.
|
|
However, you can override that after uploading the PostScript file by
|
|
specifying the
|
|
.B \-c
|
|
option, followed by the number of copies.
|
|
.PP
|
|
The file
|
|
.B macps.config
|
|
specifies the mapping between the internal LaserPrep name and the actual
|
|
file it resides in.
|
|
This file is normally located in the lib subdirectory from which
|
|
.I macps
|
|
was called from.
|
|
The
|
|
.B \-d
|
|
option allow you to specify an alternate directory in which the
|
|
.B macps.config
|
|
file can be found.
|
|
.PP
|
|
Most Macintosh applications produce normal ASCII PostScript files.
|
|
However, some graphics programs that manipulate gray-scale images will
|
|
produce PostScript files that contain 8-bit binary data.
|
|
Since
|
|
.I macps
|
|
normally converts this binary data, these PostScript file will not work
|
|
properly.
|
|
The
|
|
.B \-r
|
|
(raw) option suppresses this binary conversion.
|
|
(Note: Depending on how the printer is physically connected, it may not be
|
|
able to handle 8-bit binary data properly, and results may be disappointing.)
|
|
.SH FILES
|
|
.TP "\w'lib/macps.config 'u"
|
|
lib/macps.config
|
|
maps ProcSet ids to LaserPrep filenames
|
|
.SH "SEE ALSO"
|
|
lpr(1), macget(1), kermit(1), prepfix(1)
|
|
.SH BUGS
|
|
.I Macps
|
|
only works with version 4.0 and up of the Macintosh LaserPrep files.
|
|
Because of the way bit smoothing is implimented by the LaserWriter driver,
|
|
some PostScript printers other than the Apple LaserWriters may not be able to
|
|
bit smooth.
|
|
RAZZLE!DAZZLE
|
|
fi # End macps.1
|
|
if test -f prepfix.1
|
|
then
|
|
echo shar: will not overwrite existing file "'prepfix.1'"
|
|
else
|
|
echo 'x - prepfix.1'
|
|
cat << \RAZZLE!DAZZLE > prepfix.1
|
|
.\" SCCSid = "@(#)prepfix.1 2.2 10/24/89"
|
|
.TH PREPFIX 1 "24 Oct 1989"
|
|
.UC 4
|
|
.SH NAME
|
|
prepfix \- converts Apple LaserPrep files to form useable on Unix
|
|
.SH SYNOPSIS
|
|
.B prepfix
|
|
[
|
|
\-l
|
|
printer_name1
|
|
[
|
|
\-l
|
|
printer_name2
|
|
]...
|
|
]
|
|
[
|
|
file
|
|
]
|
|
.SH DESCRIPTION
|
|
.I Prepfix
|
|
takes the command-line LaserPrep file (or the standard input if no filename is
|
|
given), and converts it into a form that is useable on Unix with the
|
|
.IR macps (1),
|
|
and is even electronically mailable.
|
|
.PP
|
|
To use
|
|
.IR prepfix ,
|
|
create the input LaserPrep file on a Macintosh by opening an empty
|
|
document in some application, selecting
|
|
.B Print
|
|
>From the
|
|
.B File
|
|
menu and then typing (and holding) Command-K immediately after clicking the
|
|
.B OK
|
|
button in the LaserWriter print dialog box.
|
|
Another dialog will appear, confirming that a file named ``PostScript'' is
|
|
being created (the Command-K keys can be released now).
|
|
.PP
|
|
Depending on the application, the created PostScript file can be found in the
|
|
System Folder, the application folder or the top level of the disk.
|
|
This file can then be uploaded via some file transfer program, such as
|
|
MacTerminal/VersaTerm and
|
|
.IR macget (1)
|
|
or MacKermit/Red Ryder and
|
|
.IR kermit (1).
|
|
.PP
|
|
Normally, only Apple LaserWriters can take advantage of the bit smoothing
|
|
feature of the LaserPrep file.
|
|
However, other PostScript laser printer using the Motorola 680x0 processor
|
|
and the Adobe PostScript firmware can be made to do bit smoothing by
|
|
specifying for each printer the
|
|
.B \-l
|
|
option and the printer's name, as returned by the PostScript
|
|
.B product
|
|
command in
|
|
.B statusdict
|
|
(remember to quote the printer name if it contains blanks).
|
|
The resulting LaserPrep file will be modified so that for LaserWriters and for
|
|
printers specified in the
|
|
.B \-l
|
|
option, bit smoothing will be allowed (smoothing must still be selected in the
|
|
Print Dialog box when saving the PostScript to disk).
|
|
More than one printer name can be specified using additional
|
|
.B \-l
|
|
and printer name pairs.
|
|
.SH "SEE ALSO"
|
|
macps(1), macget(1), kermit(1)
|
|
.SH BUGS
|
|
.I Prepfix
|
|
only works with version 4.0 and up of the Macintosh LaserPrep files.
|
|
RAZZLE!DAZZLE
|
|
fi # End prepfix.1
|
|
echo '***** End of' macps.shar '*****'
|
|
exit
|
|
|