[comp.sources.misc] v14i068: Mp v2.4.5 - the mail/news pretty printer

rburridge@Sun.COM (Rich Burridge) (08/30/90)

Posting-number: Volume 14, Issue 68
Submitted-by: rburridge@Sun.COM (Rich Burridge)
Archive-name: mp-2.4.5/part02

------CUT HERE------mp.shar.part2------CUT HERE------
#! /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 to create the files:
#	Makefile.dist
#	mailp
#	mp.1
#	mp.el
#	Data (directory)
#	mp.pro.ps
#	mp.pro.alt.ps
#	mp.pro.filofax.ps
#	mp.pro.timeman.ps
# This archive created: Wed Aug 29 12:25:57 EST 1990
#
#
export PATH; PATH=/bin:$PATH
#
if [ -f Makefile.dist ]
then
echo shar: will not over-write existing file Makefile.dist
else
echo shar: extracting 'Makefile.dist',     2759 characters
cat > Makefile.dist <<'Funky_Stuff'
#
#  Makefile for mp, the PostScript pretty printer.
#
#  @(#)Makefile.dist 1.1 90/08/29
#
#  Copyright (c) Steve Holden and Rich Burridge.
#                All rights reserved.
#
#  Permission is given to distribute these sources, as long as the
#  copyright messages are not removed, and no monies are exchanged.
#
#  No responsibility is taken for any errors inherent either
#  to the comments or the code of this program, but if reported
#  to me then an attempt will be made to fix them.
#
#=====================================================================
#
#  It is possible to change the location of the mp prologue file
#  with the -p command line option. It can also be defined at compile
#  time, by uncommenting the macro definition below and setting
#  appropriately. If it's not present, then a sensible default value
#  is used.
#
#PROLOGUE = -DPROLOGUE=\"$(LIBDIR)\"
#---------------------------------------------------------------------
#  Not all machines have the index() string library function. If you
#  don't have this function then you should uncomment the NOINDEX
#  definition below.
#
#NOINDEX         = -DNOINDEX
#=====================================================================
#
#  Default locations where mp files will be installed.
#  You might wish to alter these values.
#
BINDIR   = /usr/local/bin
LIBDIR   = /usr/local/lib
MANDIR   = /usr/man/man$(MANSECT)
MANSECT  = l
#
#  Compilation flags and standard macro definitions.
#
CFLAGS   = -g $(NOINDEX) $(PROLOGUE)
LDFLAGS  =
#=================================================================

.KEEPSTATE:

BINARIES = mp

SRCS     = header.c io.c main.c misc.c print.c
OBJS     = header.o io.o main.o misc.o print.o

HDRS     = extern.h mp.h patchlevel.h
OTHERS   = README Makefile.dist mailp mp.1 \
	   MANIFEST FILES CHANGES TODO \
	   mp.el mp.pro.ps mp.pro.alt.ps mp.pro.filofax.ps \
	   mp.pro.timeman.ps Data

SFILES1  = $(SRCS) $(HDRS) README MANIFEST FILES CHANGES TODO
SFILES2  = Makefile.dist mailp mp.1 mp.el Data \
	   mp.pro.ps mp.pro.alt.ps mp.pro.filofax.ps mp.pro.timeman.ps

all:       $(BINARIES)

mp:        $(OBJS)
	   cc $(LDFLAGS) -o mp $(OBJS)

install:   $(BINARIES)
	   install -s -m 751 mp $(BINDIR)
	   install -c -m 644 mp.1 $(MANDIR)/mp.$(MANSECT)
	   install -c -m 644 mp.pro.ps $(LIBDIR)
	   install -c -m 644 mp.pro.filofax.ps $(LIBDIR)
	   install -c -m 644 mp.pro.timeman.ps $(LIBDIR)

clean:;    rm -rf mp *.o core

create:    SCCS
	   -sccs create $(SRCS) $(OTHERS)

lint:;     lint $(SRCS)

shar:;     shar.script $(SFILES1) > Part1
	   shar.script $(SFILES2) > Part2

SCCS:
	   mkdir SCCS
	   chmod 755 SCCS

header.o:	mp.h extern.h
io.o:		mp.h extern.h
main.o:		mp.h
misc.o:		mp.h extern.h patchlevel.h
print.o:	mp.h extern.h
Funky_Stuff
len=`wc -c < Makefile.dist`
if [ $len !=     2759 ] ; then
echo error: Makefile.dist was $len bytes long, should have been     2759
fi
fi # end of overwriting check
if [ -f mailp ]
then
echo shar: will not over-write existing file mailp
else
echo shar: extracting 'mailp',      655 characters
cat > mailp <<'Funky_Stuff'
#! /bin/sh
#
#  @(#)mailp 1.5 89/06/28
#
#  mailp, newsp, filep, digestp, filofaxp and timemanp
#  shell script de lancement de mp
#  (mail/news/file/digest/filofax/time-manager pretty printer)
#
#  Original: Bruno Pillard - October 1988.
#  Modified: Rich Burridge - June 1989.

BIN=/usr/local/bin

case $0 in
	*mailp)    PROG=mp       ;; 
	*newsp)	   PROG=mp       ;;
	*digestp)  PROG="mp -d"	 ;;
	*filep)	   PROG="mp -o"  ;;
	*filofaxp) PROG="mp -f 	 ;;
	*timemanp) PROG="mp -t 	 ;;
	*)	echo Unknown pretty printer: $0
		exit;;
esac

if    [ $# -eq 0 ]
then
	set - " - "
fi
while [ $# -gt 0 ]
do
	/bin/cat $1 | ${BIN}/${PROG} | lpr -h -Plw
	shift
done
Funky_Stuff
len=`wc -c < mailp`
if [ $len !=      655 ] ; then
echo error: mailp was $len bytes long, should have been      655
fi
fi # end of overwriting check
if [ -f mp.1 ]
then
echo shar: will not over-write existing file mp.1
else
echo shar: extracting 'mp.1',     4805 characters
cat > mp.1 <<'Funky_Stuff'
.\" @(#)mp.1 1.13 90/04/12
.TH MP 1L "12 April 1990"
.SH NAME
mp \- Postscript pretty printer
.SH SYNOPSIS
.B mp
[
.B \-a
]
[
.B \-d
]
[
.B \-f
]
[
.B \-l
]
[
.B \-m
]
[
.B \-o
]
[
.B \-p
.I prologue
]
[
.B \-s
.I subject
]
[
.B \-t
]
[
.B \-v
]
[
.B \-?
]
[
.IR filename .\|.\|.
]
.SH DESCRIPTION
.B mp
will read each
.I filename
in sequence and generate a Postscript file on standard output,
which is a pretty print of the original. If no filename argument is given
.B mp
reads from the standard input. If the standard input is a terminal, input
is terminated by an
.SM EOF
signal, usually
.SM CTRL-D\s0.
.LP
The input files to
.B mp
can be mail items, news articles or ordinary ASCII files. It is also
possible to print out complete mail folders and digests.
.PP
The format adopted has textured areas containing banner information
at the top and bottom of every page.
.PP
.B mp
was originally designed to be used in conjunction with the print
button in the
.B "mailtool (1)"
program, or the
.B pipe
command from within mail. Add (or alter) the following two line in your
.B .mailrc
file:
.in +1.0i
.nf
\fCset printmail='mp | lpr'
set cmd="mp | lpr &"\fP
.fi
.in -1.0i
.PP
Source the
.B .mailrc
file again, and you are ready.
.PP
A useful alias to use used in conjunction with your
.I .cshrc
file for printing out ordinary text files is:
.in +1.0i
.nf
\fCalias print 'mp -o -s "\\!*" <\\!* | lpr'\fP
.fi
.in -1.0i
.SH OPTIONS
.TP
.B \-a
The file on standard input is a news article, and should be printed with
"Article from
.I newsgroup
" in the top banner, where
.I newsgroup
is the first news group found on the Newsgroups: line.
.TP
.B \-d
The file on standard input is a digest so print accordingly.
.TP
.B \-f
The file on standard input is printed specifically was use with Filofax,
a personal organiser.
.TP
.B \-l
Prints output in landscape mode. Two pages of text will be printed per
sheet of paper.
.TP
.B \-m
The file on standard input is a mail folder, so print out multiple messages.
.TP
.B \-o
The file on standard input is an ASCII file so print accordingly.
.TP
.BI \-p " prologue filename"
Employ
.I "prologue filename"
as the Postscript prologue file. This overrides any previously defined
prologue values.
The
.I mp
prologue file is determined by first looking for the environment variable
.IR MP_PROLOGUE .
This will be the directory where the mp prologue files are to be found.
Three different prologue files are used. Normally the prologue file is
.I mp.pro.ps
but if the
.I \-f
option is used, then the prologue file is called
.I mp.pro.filofax.ps
and if the
.I \-t
option is used, then the prologue file is
.I mp.pro.timeman.ps
If
.I MP_PROLOGUE
isn't found, then the default location is used. The default location is
.IR /usr/local/lib/mp.pro.ps .
.TP
.BI \-s " subject"
Use
.I " subject"
as the new subject for the printout. If you are printing ordinary text
files which have been specified on the command line, the the subject will
default to the name of each of these files.
.TP
.B \-t
The file on standard input is printed specifically for use with Time Manager,
a personal organiser.
.TP
.B \-v
Print the version number of this release of the
.B mp
program.
.TP
.B \-?
Print the usage line for this program. Note that the
.B ?
character should be escaped if running from
.BR csh (1).
.SH FILES
.TP
.B /usr/local/bin/mp
executable
.TP
.B /usr/local/lib/mp.pro.ps
PostScript prologue to define required vocabulary for mail printing.
Editing this file will allow you to introduce some stylistic variation
in the printing of mail.
.TP
.B /usr/local/lib/mp.pro.filofax.ps
Postscript prologue used to print out files in Filofax format.
.TP
.B /usr/local/lib/mp.pro.timeman.ps
PostScript prologue used to print out files in Time Manager format.
.SH "SEE ALSO"
mail(1)
.SH AUTHORS
Original version by Steve Holden.
.PP
Converted to C, modified and maintained by Rich Burridge, Sun Microsystems Australia,
.PP
Original modified to handle net news articles and MH mail by Bruno Pillard, Chorus Systemes, France,
.PP
Handling of mail digests added by Dave Glowacki of Public Works Computer Services, St Paul, MN.
.PP
Manual page for the initial version revised by Rick Rodgers, UCSF School of Pharmacy, San Francicso.
.PP
Support for Personal Organiser printing style added by Douglas Buchanan,
Sun Microsystems Europe.
.PP
Substantial modifications to header parsing by Jeremy Webber,
Computer Science Department, University of Adelaide, Australia.
.PP
Support for printing multiple files and subject line filename print for
ordinary files added by Sam Manoharan, Edinburgh University.
.PP
Support for landscape mode written by Michael Tuciarone.
.PP
Rich Burridge,             Domain: richb@Aus.Sun.COM
.nf
PHONE: +61 2 413 2666   Path: {uunet,mcvax,ukc}!munnari!sunaus.oz!richb
.fi
Funky_Stuff
len=`wc -c < mp.1`
if [ $len !=     4805 ] ; then
echo error: mp.1 was $len bytes long, should have been     4805
fi
fi # end of overwriting check
if [ -f mp.el ]
then
echo shar: will not over-write existing file mp.el
else
echo shar: extracting 'mp.el',     2297 characters
cat > mp.el <<'Funky_Stuff'
;;  @(#)mp.el 1.1 90/08/14
;;
;;  From Roger Riggs <riggs@suneast.East.Sun.COM>
;;
;;  I and other people here have created functions to print with mp.
;;  This is particularly good with mail and newsgroup articles
;;  and the PostScript page decorations can be tailored if you know a
;;  little PostScript. Both are variations of the original lpr and print
;;  buffer/region code.
;;
;;  Interface to mp.

(defun mp-buffer ()
  "Print buffer contents as with Unix command `mp | lpr -h'.
`lpr-switches' is a list of extra switches (strings) to pass to lpr."
  (interactive)
  (mp-region-1 (point-min) (point-max)))

(defun mp-region (start end)
  "Print region contents as with Unix command `mp | lpr -h'.
`lpr-switches' is a list of extra switches (strings) to pass to lpr."
  (interactive "r")
  (mp-region-1 start end))

(defun mp-region-1 (start end)
  "Print region using mp to lpr"
  (interactive)
  (let ((mp-switches) (msg "Formatting...") (oldbuf (current-buffer)))
    (cond ((string-equal major-mode 'gnus-Article-mode)
	   (if (and (= (point-min) start) (= (point-max) end))
	       (setq mp-switches (list "-a"))
	     (setq mp-switches (list "-o" "-s" (mail-fetch-field "Subject")))))
	  ((string-equal major-mode 'rmail-mode)
	   (if (and (= (point-min) start) (= (point-max) end))
	       (setq mp-switches nil)
	     (setq mp-switches (list "-o" "-s" (mail-fetch-field "Subject")))))
	  (t 
	   (setq mp-switches
		 (list "-o" "-s" (concat "\"" (buffer-name) " Emacs buffer" "\"")))))
    (save-excursion
      (message "%s" msg)
      (set-buffer (get-buffer-create "*spool temp*"))
      (widen) (erase-buffer)
      (insert-buffer-substring oldbuf start end)
      (if (/= tab-width 8)
	  (progn
	    (setq msg (concat msg " tabs..."))
	    (message "%s" msg)
	    (setq tab-width tab-width)
	    (untabify (point-min) (point-max))))
      
      (setq msg (concat msg " mp..."))
      (message "%s" msg)
      (apply 'call-process-region
	     (nconc (list (point-min) (point-max) "mp" t t nil )
		    mp-switches))
      
      (setq msg (concat msg " lpr..."))
      (message "%s" msg)
      (apply 'call-process-region
	     (nconc (list (point-min) (point-max) "lpr" t nil nil "-h" )
		    lpr-switches))
      (setq msg (concat msg " done."))
      (message "%s" msg))))
Funky_Stuff
len=`wc -c < mp.el`
if [ $len !=     2297 ] ; then
echo error: mp.el was $len bytes long, should have been     2297
fi
fi # end of overwriting check
if [ -f Data ]
then
echo shar: can not write a directory over file Data
else
if [ ! -d Data ]
then
echo shar: creating directory Data
mkdir Data
fi
echo shar: entering directory Data
cd Data
if [ -f Mail ]
then
echo shar: will not over-write existing file Mail
else
echo shar: extracting 'Mail',     1296 characters
cat > Mail <<'Funky_Stuff'
Return-Path: rb-archive-server@Aus.Sun.COM
Received: by hawk from Sun.COM ([192.9.9.1])
        for pmaresch (from rb-archive-server@Aus.Sun.COM)
        id <AA23438@hawk>; Thu, 5 Jul 90 09:44:34 edt
Received: from Aus.Sun.COM ([129.158.10.50]) by Sun.COM (4.1/SMI-4.1)
	id AA04815; Thu, 5 Jul 90 06:48:22 PDT
Received: from stard.Aus.Sun.COM by Aus.Sun.COM (4.1/SMI-4.1)
	id AA28245; Thu, 5 Jul 90 23:51:17 EST
Received: by stard.Aus.Sun.COM (4.1/SMI-4.1)
	id AA19213; Thu, 5 Jul 90 23:46:07 EST
Date: Thu, 5 Jul 90 23:46:07 EST
Message-Id: <9007051346.AA19213@stard.Aus.Sun.COM>
From: Rich Burridge Archive Service <rb-archive-server@Aus.Sun.COM>
To: pmaresch@hawk.ulowell.edu (pierre mareschal)
Subject: ack receipt of your archive retrieval request
In-Reply-To: Request from pmaresch@hawk.ulowell.edu (pierre mareschal) dated Thu Jul 5 23:46:02 EST 1990

The Rich Burridge Archive Server has received your request.
All of the files that you asked for are in the database.
Your request is 66314 bytes. It has been placed in the mailer's work
queue. The work queue is periodically processed by the archive mailer, which
always sends the shortest queued request first. The length of time that it
takes to receive your request will depend on how many smaller requests are in
front of it in line.
Funky_Stuff
len=`wc -c < Mail`
if [ $len !=     1296 ] ; then
echo error: Mail was $len bytes long, should have been     1296
fi
fi # end of overwriting check
if [ -f MailFolder ]
then
echo shar: will not over-write existing file MailFolder
else
echo shar: extracting 'MailFolder',      318 characters
cat > MailFolder <<'Funky_Stuff'
From pmaresch Thu Jul  5 13:35:28 1990
Date: Thu, 5 Jul 90 13:35:22 EDT
From: pmaresch (Pierre Mareschal)
To: pmaresch
Subject: Subject 2
Status: R

Text Two

From pmaresch Thu Jul  5 13:35:28 1990
Date: Thu, 5 Jul 90 13:35:03 EDT
From: pmaresch (Pierre Mareschal)
To: pmaresch
Subject: Subject 1
Status: R

Text One

Funky_Stuff
len=`wc -c < MailFolder`
if [ $len !=      318 ] ; then
echo error: MailFolder was $len bytes long, should have been      318
fi
fi # end of overwriting check
if [ -f NewsArticle1 ]
then
echo shar: will not over-write existing file NewsArticle1
else
echo shar: extracting 'NewsArticle1',     2882 characters
cat > NewsArticle1 <<'Funky_Stuff'
Article: 3019 of +Comp.object
Path: swan!bbn.com!mit-eddie!rutgers!uwm.edu!rpi!image.soe.clarkson.edu!news
From: cline@cheetah.ece.clarkson.edu (Marshall Cline)
Newsgroups: comp.lang.c++,comp.object
Subject: ``Object Oriented Design'' by Grady Booch -- A First Look
Message-ID: <CLINE.90Jun2004848@cheetah.ece.clarkson.edu>
Date: 2 Jun 90 04:51:44 GMT
Sender: news@sun.soe.clarkson.edu
Reply-To: cline@sun.soe.clarkson.edu (Marshall Cline)
Distribution: comp
Organization: (I don't speak for the) ECE Dept, Clarkson Univ, Potsdam, NY
Lines: 44
Xref: swan comp.lang.c++:3019

Benjamin/Cummings just sent me a fresh copy of Grady Booch's new book:
``Object Oriented Design''.  I had heard good things about it 4th hand, and
I must say that I haven't been let down.  I like the numerous good examples,
the Software Engineering approach, and the emphasis on design.  I've skimmed
it, and will give a more complete report in a few weeks.  But my first
impressions were very positive.  It's about time we had a good OOD book!

	Author:		Grady Booch
	Title:		Object Oriented Design with Applications
	Publisher:	Benjamin/Cummings
	ISBN:		0-8053-0091-0
	Copyright:	1991

A couple of initial thoughts: the book is not based on any one OOPL, but
rather gives roughly equal time to C++, Smalltalk, CLOS, Object Pascal, and
Ada.  He doesn't seem to `put down' any one of these, but rather discusses
their relative strengths and weaknesses in a sensible manner.

The book is distinctly *not* a book from which you could learn all the
nuiances of any of these languages; rather it centers on the concepts of how
you do *design* in the OO paradigm.

Booch seems very concerned with unconstrained software complexity.  OOP
isn't just a fun theoretical ideal to him, but it's something which may
alleviate the software crisis we are presently battling.  He's wants
`industrial strength software'.  Healthy dose of reality.

The Section on Applications looks good.  It's quite a healthy chunk of the
book (250 pgs out of around 500 total).  There's a rather large example in
each of the major programming languages.  The key (as I understand Booch's
goals) is not `this language or that', but rather how can these problems be
*designed* using OO technology.  His method is: design a little, implement a
little, think it through and redesign, etc.  Most of us are embarassed to
admit that we do it that way too rather than getting it right the first time.

Marshall Cline
--
==============================================================================
Marshall Cline / Asst.Prof / ECE Dept / Clarkson Univ / Potsdam, NY 13676
cline@sun.soe.clarkson.edu / Bitnet:BH0W@CLUTX / uunet!clutx.clarkson.edu!bh0w
Voice: 315-268-3868 / FAX: 315-268-7600
Career search in progress; ECE faculty; research oriented; will send vita.
==============================================================================
Funky_Stuff
len=`wc -c < NewsArticle1`
if [ $len !=     2882 ] ; then
echo error: NewsArticle1 was $len bytes long, should have been     2882
fi
fi # end of overwriting check
if [ -f NewsArticle2 ]
then
echo shar: will not over-write existing file NewsArticle2
else
echo shar: extracting 'NewsArticle2',     1239 characters
cat > NewsArticle2 <<'Funky_Stuff'
Article: 3375 of +Comp.lang.c++
Path: swan!bbn.com!mit-eddie!rutgers!cs.utexas.edu!usc!samsung!uakari.primate.wisc.edu!uflorida!unf7!shite
From: shite@unf7.UUCP (Stephen Hite)
Newsgroups: comp.lang.c++
Subject: Grady Booch's OOD book is excellent!
Keywords: design
Message-ID: <272@unf7.UUCP>
Date: 28 Jun 90 05:52:17 GMT
Organization: Univ. of N. Florida, Jacksonville
Lines: 19


  Put "Object Oriented Design With Applications" by Grady Booch on your
"A+ shelf" right next to the others that are already there :-) ("C++ Primer" 
by Stanley Lippman, "C++ Answer Book" by Tony Hansen, the new annotated
C++ reference by Bjarne and "Object-oriented Software Construction by
Bertrand Meyer).

  It reads very well for me...almost reminiscent in its ease of explanation
as Andy Tanenbaum's Operating System book (Minix).  Booch has a great
command of references that blend well with his explanations.  The bibliography
is also truly amazing...I know, I'm probably sounding naieve...but it's
fun learning from someone who knows what they're talking about!  

...Now, if only Andy Koenig would write a "C++ Traps and Pitfalls" book...
I would achieve total nirvana!  :-)

-----------------------------
Steve Hite
...gatech!uflorida!unf7!shite
Funky_Stuff
len=`wc -c < NewsArticle2`
if [ $len !=     1239 ] ; then
echo error: NewsArticle2 was $len bytes long, should have been     1239
fi
fi # end of overwriting check
if [ -f NewsDigest ]
then
echo shar: will not over-write existing file NewsDigest
else
echo shar: extracting 'NewsDigest',    10627 characters
cat > NewsDigest <<'Funky_Stuff'
From swan!bbn.com!nic!bunny!husc6!rutgers!tut.cis.ohio-state.edu!ucbvax!CSL.SRI.COM!risks Thu Jul  5 10:07:45 EDT 1990
Article 85 of comp.risks:
Path: swan!bbn.com!nic!bunny!husc6!rutgers!tut.cis.ohio-state.edu!ucbvax!CSL.SRI.COM!risks
From: risks@CSL.SRI.COM (RISKS Forum)
Newsgroups: comp.risks
Subject: RISKS DIGEST 10.14
Message-ID: <CMM.0.88.646701765.risks@hercules.csl.sri.com>
Date: 29 Jun 90 23:22:45 GMT
Sender: daemon@ucbvax.BERKELEY.EDU
Reply-To: risks@csl.sri.com
Organization: The Internet
Lines: 208
Approved: risks@csl.sri.com

RISKS-LIST: RISKS-FORUM Digest  Friday 29 June 1990   Volume 10 : Issue 14

        FORUM ON RISKS TO THE PUBLIC IN COMPUTERS AND RELATED SYSTEMS 
   ACM Committee on Computers and Public Policy, Peter G. Neumann, moderator

Contents:
  RISKS WILL BE ON VACATION (RISKS Forum)
  Hubble (Dimitri Mihalas via Mark Bartelt)
  Re: "Unbreakable Math Code Finally Broken" (Richard A. Schumacher)
  More on the Risks of searching the Lexis fulltext database (Peter D. Junger)
  Re: info on carpal tunnel syndrome (Terry Kane)

The RISKS Forum is moderated.  Contributions should be relevant, sound, in good
taste, objective, coherent, concise, and nonrepetitious.  Diversity is welcome.
CONTRIBUTIONS to RISKS@CSL.SRI.COM, with relevant, substantive "Subject:" line
(otherwise they may be ignored).  REQUESTS to RISKS-Request@CSL.SRI.COM.
TO FTP VOL i ISSUE j:  ftp CRVAX.sri.com<CR>login anonymous<CR>AnyNonNullPW<CR>
cd sys$user2:[risks]<CR>GET RISKS-i.j <CR>; j is TWO digits.  Vol summaries in 
risks-i.00 (j=0); "dir risks-*.*<CR>" gives directory listing of back issues.
ALL CONTRIBUTIONS ARE CONSIDERED AS PERSONAL COMMENTS; USUAL DISCLAIMERS APPLY.

----------------------------------------------------------------------

Date: Fri, 29 Jun 1990 13:34:45 PDT
From: RISKS Forum <risks@csl.sri.com>
Subject: RISKS WILL BE ON VACATION

for the next three weeks.  There might be an issue or two, but don't bet on it.
Keep sending in the good stuff in any case.  Thanks.  The Management

------------------------------

Date: Fri, 29 Jun 90 13:20:14 EDT
From: Mark Bartelt <sysmark@orca.cita.utoronto.ca>
Subject: Hubble

[This is a message from Dimitri Mihalas (dmihalas@altair.astro.uiuc.edu).
Mark Bartelt, Canadian Institute of Theoretical Astrophysics]

in case you have not heard: from a reliable inside source i found out that the
problem with ST is that the SOFTWARE driving the polisher was defective. the
corrections for spherical aberration were put in with the wrong sign.
consequently the mirror is not corrected for sph. abb., but has an added dose
of it.
 
the error was not detected during testing because no test with collimated
light was ever done. (editorial remark: unthinkable!) apparently this was
a $30M economy measure in the face of the Challenger accident. likewise
none of the optics were ever tested in vacuum. the primary was and is
"perfect" relative to the specified curve; but alas the specification
was wrong. sigh.
 
from my amateur astronomer days (does that include 1990?) i recall that
spherical aberration is EASY to detect with the foucault test, which is
done with a pinhole, not collimated light. it is hard to believe that
ANYONE could have made such a blunder..
 
the only reason that people know this much is that the same software
was used for AXAF. the errors there were so huge as to be immediately
noticeable, and when the software was corrected, the mirror was "perfect".
i don't know whether the information from axaf was available prior to
the launch of ST, but it seems that it had to be. in which case one
wonders why PE didn't issue a "hold everything!".
 
the future: no chance of bringing the whole telescope down for a refit.
best plan is to design compensating optics into the lightpath for future 
instruments: relatively easy to do. but that will still take 3-5 years.
 
i suppose it's "win a few, lose a few..." but i personally think that
nasa, the government, and the people should stick it into PE and TURN
it hard until they agree to refund the cost of the mistake and of the repairs.
i'm sick of seeing defense and defense-related contractors get away
with bloody murder and just get fatter and fatter on the profits.
 
back to theory
dimitri

------------------------------

Date: 28 Jun 90 18:02:18 GMT
From: schumach@convex.UUCP (Richard A. Schumacher)
Subject: Re: "Unbreakable Math Code Finally Broken"
References: <CMM.0.88.646532535.risks@hercules.csl.sri.com>

Y. Radai <RADAI1@HBUNOS.BITNET> writes:
>  So the statements that an impenetrable code has been broken and that
>organizations need to change their cryptographic systems because of this
>achievement seem a wee bit exaggerated.

On the other hand, the NPR report mentioned that the Bank of England
was planning to use a 150 digit number as a key in a new transaction
processing system, but changed it to something "much larger" when
they learned of the 9th Fermat prime factoring.

------------------------------

Date: 29 Jun 90 16:25:00 EST
From: junger@cwru.cwru.edu
Subject: More on the Risks of searching the Lexis fulltext database

        A while back I sent to RISKS an (itself rather buggy) description of a
bug that turned up in the Lexis/Nexis database when I was doing date delimited
searches in the library containing the fulltext opinions of the United States
Supreme Court.  A representative of Mead Data Central--the owner of the
Nexis/Lexis service--has since contacted me to explain the nature of the bug
and to assure me that it will be corrected on June 30.

        In the first place, it appears that the bug is _not_ in the
basic software that searches through the database for cases decided on,
after, or before a specified date.  Secondly, it is clear that the bug
did _not_ cause me to miss any cases that I should have located, it just
turned up some additonal cases that were not decided within the period
that I was searching.  That is the good news.

        The bad news is that the problem relates to the way that the
Lexis/Nexis system parses dates in the database and that the proposed
fix will work only until the year 2000, at which time a new variant of
the bug should cause real havoc.

        Here is a corrected version of the type of search that exposed
the bug:

        Entitlement and date(aft 12/31/39 and bef 1/1/50)

That search, when conducted in the Supreme Court file, should find all
opinions, and only those opinions, decided by the United States Supreme
Court during the decade of the 1940's that contained the word
`entitlement'.  (Lexis warned me that it assumed that I meant after
12/31/1939 and before 1/1/1950.)  As it happens, there are no cases that meet
those criteria.  But Lexis reported that it had found a dozen or so
cases--cases that did contain the word `entitlement' but that were
decided in the 1960's, 70's, and 80's.

        It seems that a couple of months ago Mead Data Central decided
to include the argued-date as well as the decided-date within the date
field, and it is this enhancement that caused the bug.  The fix that
will be implimented this Saturday is to once again exclude the
argued-date from the date field.

        Since cases are not always decided in the same year that they
are argued, including the argued-date in the date field will, of course,
cause some cases to be reported as occurring in two different decades,
which would be a nuisance.  But that is only a miniscule part of the
bug.  The real problem occurs because some cases are argued on more than
one date, so that the argued-date field would appear in the database as,
say:  "argued June 22-23, 1980" and the decided date field as: "July 3,
1980)."  At first glance that would not seem to cause any problem.  And
it wouldn't, except for the fact that the Lexis system parses the date
fields in the same way that it parses user input, and thus concludes
that "June 22-23" means "June 22-1923".  Thus our hypothetical case
would have a date of July 3, 1980 (which is after December 31, 1939) and
would also have a date of June 22, 1923 (which is before January 1,
1950).  If that case--decided, you will recall, in 1980--contains the
word `entitlement' it will turn up in my search for cases in the decade
of the 1940's, and in my searches in the 1950's, and in the 1960's, etc.

        I can understand why the system parses user input so as to
interpret 1/1/50 as 1/1/1950--but I never dreamed that a system would
parse its own data.  According to the people at Mead Data Central,
however, their system parses the data fields in exactly the same way
that it parses user input.  It seems that the Lexis/Nexis database
contains texts--especially news reports--with dates in the form
"nn/nn/nn". Today those dates are parsed as "nn/nn/19nn", but what is
going to happen in the year 2000?

        It would seem that ambiguous data in the data base will be much
harder to find and fix than a software bug.

Peter D. Junger, CWRU Law School

------------------------------

Date: 29 Jun 90 19:36:47 GMT
From: tok@stiatl.UUCP (Terry Kane)
Subject: Re: info on carpal tunnel syndrome (CTS)

I am a long time sufferer of CTS.  The first symptoms I recall were during
high school, nearly twenty years ago, but it was not properly diagnosed
until I was in excruciating pain, dropping things, not sleeping because
my hand was burning at night and more, all about four years ago.

Tests said that I had "a very mild case"!?  That reassuring info did not
make my hand better.  I used splints, Motrin, ice until I finally insisted
on the carpal tunnel relief operation.  That was two years ago, this month,
but I still have recurrences - especially when I meet the same RISK which
pushed my CTS over the edge: using a MOUSE.

The typical mouse promotes all the bad habits that can result in CTS symptoms.
One typically rests the heel of the palm on the mouse, and press the chord
keys - frequently with constant pressure (on Apple's mice, the required
pressure is substantial for me, and their new mouse reqlly aggravates the
problem with its stylized, aerodynamic "look").  I cannot use a mouse to this
day without suffering a "mouse hangover".

Track balls are better for me, but I still would rather avoid them.

I am really looking forward to _getting_my_hands_on_ ;-) a touch screen.
I've seen some very nice ones with quite satisfactory resolution!

And please - If you think that you might have CTS - don't waste time.
			See Your M.D.

Terry Kane, Sales Technologies, Inc, Atlanta, GA  (404) 841-4000

------------------------------

End of RISKS-FORUM Digest 10.14
************************


Funky_Stuff
len=`wc -c < NewsDigest`
if [ $len !=    10627 ] ; then
echo error: NewsDigest was $len bytes long, should have been    10627
fi
fi # end of overwriting check
cd ..
echo shar: done with directory Data
fi
if [ -f mp.pro.ps ]
then
echo shar: will not over-write existing file mp.pro.ps
else
echo shar: extracting 'mp.pro.ps',     3592 characters
cat > mp.pro.ps <<'Funky_Stuff'
%!PS-Adobe-1.0
%%Creator: Steve Holden
%%Modified: Rich Burridge
%%Title: @(#)mp.pro.ps 1.7 90/08/29
%%CreationDate: see above
%%PageLength 60
%%LineLength 80
%%DocumentFonts: Times-Bold Times-Roman Courier
%%Pages: (atend)
%%EndComments

/inch { 72 mul } def
/leftedge 0 def
/rightedge 8.5 inch def
/bottomedge 0 def
/topedge 11 inch def
/LandscapeMode false def

%Title: backspacefont.ps suggested by Glenn Reid (Adobe Systems).

/backspacefont {
    /Courier findfont dup length dict begin
        { %forall
            1 index /FID eq { pop pop } { def } ifelse
        } forall
        currentdict /UniqueID known { %if
              /UniqueID UniqueID 16#800000 xor def
        } if
        CharStrings length 1 add dict begin
            CharStrings { def } forall
          /backspace { -600 0 setcharwidth } bind def
            currentdict
      end
        /CharStrings exch def
        /Encoding Encoding 256 array copy def
        Encoding 8 /backspace put
        currentdict
    end
    definefont
} bind def

/CourierBack backspacefont

/FontSize 9 def
/font1d /Times-Bold            findfont def
/font2d /Times-Roman           findfont def
/font3d /CourierBack           findfont def
/fontHd /Helvetica-BoldOblique findfont 14 scalefont def
/fontH2 /Helvetica-BoldOblique findfont 10 scalefont def
/fontNd /Times-Bold            findfont 12 scalefont def

/BoldFont      { font1d FontSize scalefont setfont } def
/pf            { font2d FontSize scalefont setfont } def
/sf            { font3d FontSize scalefont setfont } def
/fontH         { fontHd setfont } def
/fontD         { fontH2 setfont } def
/fontN         { fontNd setfont } def

/graybox	% x1 y1 x2 y2 graybox --
{
    newpath
      4 -1 roll 2 copy			% y2 x1
      10 sub exch moveto
      4 -1 roll 2 copy			% x1 y1
      10 180 270 arc
      4 -1 roll 1 copy 3 -1 roll	% x2 y1
      10 270 0 arc
      3 -1 roll 1 copy 3 1 roll		% x1 y2 x2 y2
      10 0 90 arc
      10 90 180 arc
    closepath
    0.75 setgray fill
} def

/endpage	% page_number endpage --
{
  gsave
    fontH
    leftedge 50 add topedge 56 sub	% bottom lt corner
    rightedge 50 sub topedge 36 sub	% top rt corner
    graybox
    newpath
      rightedge leftedge sub 2 div topedge 46 sub 15 0 360 arc
      gsave
        1 setgray fill
      grestore
    closepath
    0 setgray stroke
    leftedge 50 add topedge 52 sub moveto
    MailFor show
    User show
    fontD
    rightedge 50 sub TimeNow stringwidth pop sub
    topedge 52 sub moveto TimeNow show
    % center the page number
    fontN
    dup stringwidth
       topedge 52 sub exch sub				% y-centered
       exch 2 div rightedge leftedge sub 2 div exch sub	% x-centered
       exch moveto show
    fontH
    leftedge 50 add bottomedge 50 add	% bottom lt corner
    rightedge 50 sub bottomedge 70 add	% top rt corner
    graybox
    0 setgray
    leftedge 50 add bottomedge 54 add moveto Subject show
  grestore
  showpage              % display it
  newpage               % reset parameters for next
} def

/newpage
{
  LandscapeMode {setlandscape} if
  /lct 0 def
  /ypos topedge 92 sub def
  /xpos leftedge 50 add def
  xpos ypos moveto
  sf
} def

/setlandscape
{
  612 0 translate
  90 rotate
  /FontSize 7 def
} def

/Landscape
{
  /LandscapeMode true def
  /rightedge 11 inch def
  /topedge 8.5 inch def
  newpage
} def

/endcol
{
  /lct 0 def
  /ypos topedge 92 sub def
  /xpos rightedge leftedge sub 2 div def
  xpos ypos moveto
} def

/showline
{
  show
  /ypos ypos FontSize sub def
  xpos ypos moveto
} def

newpage	                % establish first page parameters
Funky_Stuff
len=`wc -c < mp.pro.ps`
if [ $len !=     3592 ] ; then
echo error: mp.pro.ps was $len bytes long, should have been     3592
fi
fi # end of overwriting check
if [ -f mp.pro.alt.ps ]
then
echo shar: will not over-write existing file mp.pro.alt.ps
else
echo shar: extracting 'mp.pro.alt.ps',     3444 characters
cat > mp.pro.alt.ps <<'Funky_Stuff'
%!PS-Adobe-1.0
%%Creator: Steve Holden
%%Modified: Rich Burridge
%%Title: @(#)mp.pro.alt.ps 1.3 90/08/29
%%CreationDate: see above
%%PageLength 60
%%LineLength 80
%%DocumentFonts: Times-Bold Times-Roman Courier
%%Pages: (atend)
%%EndComments

/inch { 72 mul } def
/leftedge 0 def
/rightedge 8.5 inch def
/bottomedge 0 def
/topedge 11 inch def
/LandscapeMode false def

%Title: backspacefont.ps suggested by Glenn Reid (Adobe Systems).

/backspacefont {
    /Courier findfont dup length dict begin
        { %forall
            1 index /FID eq { pop pop } { def } ifelse
        } forall
        currentdict /UniqueID known { %if
              /UniqueID UniqueID 16#800000 xor def
        } if
        CharStrings length 1 add dict begin
            CharStrings { def } forall
          /backspace { -600 0 setcharwidth } bind def
            currentdict
      end
        /CharStrings exch def
        /Encoding Encoding 256 array copy def
        Encoding 8 /backspace put
        currentdict
    end
    definefont
} bind def

/CourierBack backspacefont

/FontSize 9 def
/font1d /Times-Bold            findfont def
/font2d /Times-Roman           findfont def
/font3d /CourierBack           findfont def
/fontHd /Helvetica-BoldOblique findfont 14 scalefont def
/fontH2 /Helvetica-BoldOblique findfont 10 scalefont def
/fontNd /Times-Bold            findfont 12 scalefont def

/BoldFont      { font1d FontSize scalefont setfont } def
/pf            { font2d FontSize scalefont setfont } def
/sf            { font3d FontSize scalefont setfont } def
/fontH         { fontHd setfont } def
/fontD         { fontH2 setfont } def
/fontN         { fontNd setfont } def

/graybox	% x1 y1 x2 y2 graybox --
{
    newpath
      4 -1 roll 2 copy			% y2 x1
      10 sub exch moveto
      4 -1 roll 2 copy			% x1 y1
      10 180 270 arc
      4 -1 roll 1 copy 3 -1 roll	% x2 y1
      10 270 0 arc
      3 -1 roll 1 copy 3 1 roll		% x1 y2 x2 y2
      10 0 90 arc
      10 90 180 arc
    closepath
    0.75 setgray fill
} def

/endpage	% page_number endpage --
{
  gsave
    fontH
    leftedge 50 add topedge 56 sub	% bottom lt corner
    rightedge 50 sub topedge 36 sub	% top rt corner
    graybox
    0 setgray stroke
    leftedge 50 add topedge 52 sub moveto
    MailFor show
    User show
    fontD
    rightedge 50 sub TimeNow stringwidth pop sub
    topedge 52 sub moveto TimeNow show
    fontH
    leftedge 50 add bottomedge 50 add	% bottom lt corner
    rightedge 50 sub bottomedge 70 add	% top rt corner
    graybox
    0 setgray
    leftedge 50 add bottomedge 54 add moveto Subject show
    % page number of the left corner
    dup stringwidth
       bottomedge 54 add exch sub		% y-centered
       exch 2 div rightedge 54 sub exch sub	% x-centered
       exch moveto show
  grestore
  showpage              % display it
  newpage               % reset parameters for next
} def

/newpage
{
  LandscapeMode {setlandscape} if
  /lct 0 def
  /ypos topedge 92 sub def
  /xpos leftedge 50 add def
  xpos ypos moveto
  sf
} def

/setlandscape
{
  612 0 translate
  90 rotate
  /FontSize 7 def
} def

/Landscape
{
  /LandscapeMode true def
  /rightedge 11 inch def
  /topedge 8.5 inch def
  newpage
} def

/endcol
{
  /lct 0 def
  /ypos topedge 92 sub def
  /xpos rightedge leftedge sub 2 div def
  xpos ypos moveto
} def

/showline
{
  show
  /ypos ypos FontSize sub def
  xpos ypos moveto
} def

newpage	                % establish first page parameters
Funky_Stuff
len=`wc -c < mp.pro.alt.ps`
if [ $len !=     3444 ] ; then
echo error: mp.pro.alt.ps was $len bytes long, should have been     3444
fi
fi # end of overwriting check
if [ -f mp.pro.filofax.ps ]
then
echo shar: will not over-write existing file mp.pro.filofax.ps
else
echo shar: extracting 'mp.pro.filofax.ps',     4808 characters
cat > mp.pro.filofax.ps <<'Funky_Stuff'
%!PS-Adobe-1.0
%%Creator: Steve Holden
%%Modifed: Rich Burridge
%%Title: @(#)mp.pro.filofax.ps 1.4 90/08/29
%%CreationDate: see above
%%PageLength 60
%%LineLength 80
%%DocumentFonts: Times-Bold Times-Roman Courier
%%Pages: (atend)
%%EndComments

%Title: backspacefont.ps suggested by Glenn Reid (Adobe Systems).

/backspacefont {
    /Courier findfont dup length dict begin
        { %forall
            1 index /FID eq { pop pop } { def } ifelse
        } forall
        currentdict /UniqueID known { %if
              /UniqueID UniqueID 16#800000 xor def
        } if
        CharStrings length 1 add dict begin
            CharStrings { def } forall
          /backspace { -600 0 setcharwidth } bind def
            currentdict
      end
        /CharStrings exch def
        /Encoding Encoding 256 array copy def
        Encoding 8 /backspace put
        currentdict
    end
    definefont
} bind def
 
/CourierBack backspacefont
 
/FontSize 11 def
/font1d /Times-Bold            findfont def
/font2d /Times-Roman           findfont def
/font3d /CourierBack           findfont def
/fontHd /Helvetica-BoldOblique findfont 15 scalefont def
/fontH2 /Helvetica-BoldOblique findfont 10 scalefont def
/fontNd /Times-Bold            findfont 12 scalefont def

/BoldFont      { font1d FontSize scalefont setfont } def
/pf            { font2d FontSize scalefont setfont } def
/sf            { font3d 10       scalefont setfont } def
/fontH         { fontHd setfont } def
/fontD         { fontH2 setfont } def
/fontN         { fontNd setfont } def


sf
%% stick in all the fudge factors here. May need changing for page sizes,
%% laserwriter setups etc?
%%
/binderspace 100 def
/filowidth 484 def
/filoheight 972 def
/margin 12 def
/xleft binderspace 6 add def
/yco filoheight 50 sub def			% space at the top
/xright filowidth binderspace add 30 sub def	% space at right

/endpage
{
  gsave
    fontH
    % draw the top for owner
    newpath
      xleft 10 sub yco moveto
      xleft yco 20 sub 10 180 270 arc
      xright yco 20 sub 10 270 0 arc
      xright yco 10 0 90 arc
      xleft yco 10 90 180 arc
    closepath
    0.90 setgray fill
    0 setgray stroke
    xleft yco 16 sub moveto
    MailFor show
    User show
    fontD
    TimeNow stringwidth pop neg xright add yco 16 sub moveto TimeNow show
    fontN
    % dup stringwidth pop 2 div neg 318 add 858 moveto show
    fontH
    % lower box for subject etc
    newpath
      xleft 10 sub 60 moveto
      xleft 40 10 180 270 arc
      xright 40 10 270 0 arc
      xright 60 10 0 90 arc
      xleft 60 10 90 180 arc
    closepath
    0.90 setgray fill
    % stick the page number just a few points in from the right hand edge
    newpath
      xright 10 sub 50 15 0 360 arc
      gsave
        1 setgray fill
      grestore
    closepath
    0 setgray stroke
    xleft 44 moveto Subject show
    fontN
    % position and print the page number
    dup stringwidth pop 2 div neg xright 10 sub add 46 moveto show
    fontH
  grestore
  modu 2 eq eof 0 ne or { showpage } if	% do a 'form feed'
					% if ready for it
  eof 0 eq { newpage } if	% reset parameters for next if not end of file
} def

/endfile
{
     /eof 1 def
     endpage
} def

/xo 36 def
/yo 0 def
/pageno 0 def
/modu pageno 3 mod def	% get mod to work out page pos
/eof 0 def

/weearc			% draws a little arc to show where the holes go
{ newpath
  xo yo 4 0 360 arc
  closepath
  fill
} def

/filopage
{ gsave
%  24 -118 translate
  /xstart filowidth modu mul def
  /xstart xstart binderspace add def
  /xfin xstart filowidth add def
  modu 0 eq {		% first break
	/yo 130 def	% show where the holes should be punched
	weearc		% except that they will normally be off the edge of
	/yo 238 def	% the page
	weearc
	/yo 346 def
	weearc
	/yo 639 def
	weearc
	/yo 742 def
	weearc
	/yo 850 def
	weearc
  } if
  [1 4] 0 setdash	% use dashed lines for marker
  newpath
  xstart 0 moveto
  xfin 0 lineto
  xfin filoheight lineto
  stroke
  grestore
} def

/newpage
{ 
  pageno 0 eq {			% set initial values for landscape drawing
        0.5 0.5 scale
        90 rotate
        -50 0 translate
        gsave			% save state for easy restore
	/eof 0 def
  } {
        grestore gsave		% return to preferred original state
  } ifelse			% initial setup

  /modu pageno 3 mod def	% get mod to work out page pos
  0 0 filoheight sub translate	% initial position (-filoheight)
  filopage			% draw neccessary page breaks
  /times filowidth modu mul def % shift origin as far right as needed
  /times times margin add def	% move right by fudge factor 12
  times 0 translate
  /lct 0 def
  /ypos filoheight 110 sub def
  xleft ypos moveto
  /pageno pageno 1 add def	% add one for the next time
} def

/showline
{
  show
  /ypos ypos 12 sub def
  xleft ypos moveto
} def

newpage			% establish first page parameters
Funky_Stuff
len=`wc -c < mp.pro.filofax.ps`
if [ $len !=     4808 ] ; then
echo error: mp.pro.filofax.ps was $len bytes long, should have been     4808
fi
fi # end of overwriting check
if [ -f mp.pro.timeman.ps ]
then
echo shar: will not over-write existing file mp.pro.timeman.ps
else
echo shar: extracting 'mp.pro.timeman.ps',     4808 characters
cat > mp.pro.timeman.ps <<'Funky_Stuff'
%!PS-Adobe-1.0
%%Creator: Steve Holden
%%Modifed: Rich Burridge
%%Title: @(#)mp.pro.timeman.ps 1.4 90/08/29
%%CreationDate: see above
%%PageLength 60
%%LineLength 80
%%DocumentFonts: Times-Bold Times-Roman Courier
%%Pages: (atend)
%%EndComments

%Title: backspacefont.ps suggested by Glenn Reid (Adobe Systems).

/backspacefont {
    /Courier findfont dup length dict begin
        { %forall
            1 index /FID eq { pop pop } { def } ifelse
        } forall
        currentdict /UniqueID known { %if
              /UniqueID UniqueID 16#800000 xor def
        } if
        CharStrings length 1 add dict begin
            CharStrings { def } forall
          /backspace { -600 0 setcharwidth } bind def
            currentdict
      end
        /CharStrings exch def
        /Encoding Encoding 256 array copy def
        Encoding 8 /backspace put
        currentdict
    end
    definefont
} bind def
 
/CourierBack backspacefont
 
/FontSize 12 def
/font1d /Times-Bold            findfont def
/font2d /Times-Roman           findfont def
/font3d /CourierBack           findfont def
/fontHd /Helvetica-BoldOblique findfont 15 scalefont def
/fontH2 /Helvetica-BoldOblique findfont 10 scalefont def
/fontNd /Times-Bold            findfont 12 scalefont def

/BoldFont      { font1d FontSize scalefont setfont } def
/pf            { font2d FontSize scalefont setfont } def
/sf            { font3d 11       scalefont setfont } def
/fontH         { fontHd setfont } def
/fontD         { fontH2 setfont } def
/fontN         { fontNd setfont } def

sf
%% stick in all the fudge factors here. May need changing for page sizes,
%% laserwriter setups etc?
%%
/binderspace 100 def
/filowidth 520 def
/filoheight 1024 def
/margin 12 def
/xleft binderspace 6 add def
/yco filoheight 50 sub def			% space at the top
/xright filowidth binderspace add 30 sub def	% space at right

/endpage
{
  gsave
    fontH
    % draw the top for owner
    newpath
      xleft 10 sub yco moveto
      xleft yco 20 sub 10 180 270 arc
      xright yco 20 sub 10 270 0 arc
      xright yco 10 0 90 arc
      xleft yco 10 90 180 arc
    closepath
    0.90 setgray fill
    0 setgray stroke
    xleft yco 16 sub moveto
    MailFor show
    User show
    fontD
    TimeNow stringwidth pop neg xright add yco 16 sub moveto TimeNow show
    fontN
    % dup stringwidth pop 2 div neg 318 add 858 moveto show
    fontH
    % lower box for subject etc
    newpath
      xleft 10 sub 60 moveto
      xleft 40 10 180 270 arc
      xright 40 10 270 0 arc
      xright 60 10 0 90 arc
      xleft 60 10 90 180 arc
    closepath
    0.90 setgray fill
    % stick the page number just a few points in from the right hand edge
    newpath
      xright 10 sub 50 15 0 360 arc
      gsave
        1 setgray fill
      grestore
    closepath
    0 setgray stroke
    xleft 44 moveto Subject show
    fontN
    % position and print the page number
    dup stringwidth pop 2 div neg xright 10 sub add 46 moveto show
    fontH
  grestore
  modu 2 eq eof 0 ne or { showpage } if	% do a 'form feed'
					% if ready for it
  eof 0 eq { newpage } if	% reset parameters for next if not end of file
} def

/endfile
{
     /eof 1 def
     endpage
} def

/xo 36 def
/yo 0 def
/pageno 0 def
/modu pageno 3 mod def	% get mod to work out page pos
/eof 0 def

/weearc			% draws a little arc to show where the holes go
{ newpath
  xo yo 4 0 360 arc
  closepath
  fill
} def

/filopage
{ gsave
%  24 -118 translate
  /xstart filowidth modu mul def
  /xstart xstart binderspace add def
  /xfin xstart filowidth add def
  modu 0 eq {		% first break
	/yo 130 def	% show where the holes should be punched
	weearc		% except that they will normally be off the edge of
	/yo 238 def	% the page
	weearc
	/yo 346 def
	weearc
	/yo 639 def
	weearc
	/yo 742 def
	weearc
	/yo 850 def
	weearc
  } if
  [1 4] 0 setdash	% use dashed lines for marker
  newpath
  xstart 0 moveto
  xfin 0 lineto
  xfin filoheight lineto
  stroke
  grestore
} def

/newpage
{ 
  pageno 0 eq {			% set initial values for landscape drawing
        0.5 0.5 scale
        90 rotate
        -50 0 translate
        gsave			% save state for easy restore
	/eof 0 def
  } {
        grestore gsave		% return to preferred original state
  } ifelse			% initial setup

  /modu pageno 3 mod def	% get mod to work out page pos
  0 0 filoheight sub translate	% initial position (-filoheight)
  filopage			% draw neccessary page breaks
  /times filowidth modu mul def % shift origin as far right as needed
  /times times margin add def	% move right by fudge factor 12
  times 0 translate
  /lct 0 def
  /ypos filoheight 110 sub def
  xleft ypos moveto
  /pageno pageno 1 add def	% add one for the next time
} def

/showline
{
  show
  /ypos ypos 12 sub def
  xleft ypos moveto
} def

newpage			% establish first page parameters
Funky_Stuff
len=`wc -c < mp.pro.timeman.ps`
if [ $len !=     4808 ] ; then
echo error: mp.pro.timeman.ps was $len bytes long, should have been     4808
fi
fi # end of overwriting check