deb@svax.cs.cornell.edu (David Baraff) (01/31/88)
Here's a program I use for printing envelopes on an Apple Laser
Writer. It uses the manualfeed option, so you can insert envelopes
into the manual feed. (Actually, push the envelope in until something
inside grabs it. You'll here a click. Then wait a second, and when
it actually starts feeding it in, help it if needed).
I find this produces really good looking envelopes (professional!)
if you use heavy paper for your envelopes. Anyway, here it is
in case you find it useful. Cut out the program below, stick
it in a file (e.g. 'psenv.c') and simply
$ cc psenv.c -o psenv
and
$ psenv adr-file | lpr -Ppostscript (or whatever)
Any comments appreciated.
-----------------------------Cut Here---------------------------------------
/*
David Baraff
Cornell University
Output postscript suitable for an Apple LaserWriter
to print addresses on envelopes (using manual feed).
The envelopes are put in with the upper (long) edge
parallel to the left edge of the manual feed tray.
Note that the text is rotated 90 degrees to account
for this.
I found that "heav-duty" enveloped (e.g. thick yellowish
ones) comd out much better than ordinary white ones, which
have a tendency to either wrinkle or (worse) seal themselves!
(Well, one could always put the letter in the envelope first,
thereby saving even more time!)
-------------------------------------------------------------
An entry in the input file consists of a return address
followed by a sender address, seperated by a line containing only
a '.'. There may be any number of entries in the input
file, each seperated also by a line containing only a '.'.
Each entry generates a seperate envelope.
E.g.:
John Q. Public
13 Main Ave.
Smalltown, KA. 12343
.
Zippy Pinhead
516 Flatstreet
San Jose, CA. 96524
.
Jane Doe
(etc)
.
Tom Smith
(etc)
Usage:
psenv [file]
If file is not present, the standard input is read. Postscript
output is produced on the standard output, and a count of
envelopes is written to standard error.
Enjoy!
*/
#include <stdio.h>
#define FROM_HOFFSET .5 /* return address position */
#define FROM_VOFFSET .5 /* (in inches) */
#define TO_HOFFSET 4.25 /* sendee addres position */
#define TO_VOFFSET 2.5 /* (in inches) */
#define FONT "Helvetica" /* Must be a valid postscript
font name */
#define PS 12 /* point size (in points) */
#define VS 14 /* vertical size (in points) */
static char s[256];
char *readline(f)
FILE *f;
{
if(fgets(s, 256, f) == NULL)
return NULL;
if(s[strlen(s) - 1] == '\n') /* remove newlines */
s[strlen(s) - 1] = '\0';
if(strlen(s) == 1 && s[0] == '.') /* item seperator */
return NULL;
return s;
}
main(argc, argv)
int argc;
char *argv[];
{
FILE *input = stdin;
int ctr = 0;
char *readline(), *buffer;
if(argc > 2)
{
fprintf(stderr, "Usage: %s [file]\n", argv[0]);
exit(-1);
}
if(argc == 2)
if((input = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "%s: Cannot read address file '%s'\n",
argv[0], argv[1]);
exit(-1);
}
printf("%%! *** Automatic Envelope Program ***\n");
printf("%% David Baraff\n");
printf("%% Cornell University\n\n");
printf("%%%% Begin Prolog\n\n");
printf("statusdict begin currentdict /manualfeed true put end\n");
printf("/inch { 72 mul } def\n");
printf("-90.0 rotate\n");
printf("-11.0 inch 0 inch translate\n");
printf("/%s findfont %d scalefont setfont\n", FONT, PS);
printf("%%%% End Prolog\n\n");
while(!feof(input))
{
double xpos = FROM_HOFFSET,
ypos = FROM_VOFFSET;
int wrote_something = 0;
printf("%%%% Envelope #%d\n\n", ++ctr);
while((buffer = readline(input)) != NULL)
{
wrote_something = 1;
printf("%g inch %g inch moveto (%s) show\n",
xpos, 8.5 - ypos, buffer);
ypos += (1./72.) * VS;
}
xpos = TO_HOFFSET;
ypos = TO_VOFFSET;
while((buffer = readline(input)) != NULL)
{
wrote_something = 1;
printf("%g inch %g inch moveto (%s) show\n",
xpos, 8.5 - ypos, buffer);
ypos += (1./72.) * VS;
}
if(wrote_something)
printf("\ngsave showpage grestore\n\n");
else
ctr--;
}
fprintf(stderr, "[Printing %d envelopes on standard output]\n", ctr);
}
----------------------Cut Here------------------------------------
David Baraff deb@svax.cs.cornell.edu
Program of Computer Graphics
Cornell University