[comp.sources.unix] v12i054: A PostScript interpreter, Part05/18

rsalz@uunet.UU.NET (Rich Salz) (11/03/87)

Submitted-by: Crispin Goswell <caag@vd.rl.ac.uk>
Posting-number: Volume 12, Issue 54
Archive-name: postscript/part05

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 5 (of 18)."
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'doc/hard-interface' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'doc/hard-interface'\"
else
echo shar: Extracting \"'doc/hard-interface'\" \(7674 characters\)
sed "s/^X//" >'doc/hard-interface' <<'END_OF_FILE'
X#include "main.h"
X#include "graphics.h"
X
Xstruct hardware
X {
X };
X
X/*
X *	This file describes the interface that PostScript requires to the
X *	graphics system at Version 1.4.
X *	
X *	''Hardware'' in this context refers to a pointer to windows and/or
X *	bitmaps and is the lowest level
X *	of access that PostScript is interested in. Any Hardware parameter
X *	may be expected to be NULL.
X */
X
X/************************* CREATION OF WINDOWS AND BITMAPS *******************/
X
Xstruct hardware *InitHardware () {}
X/*
X *	InitHardware () returns a default device which PostScript may use
X *	immediately (or NULL if not appropriate).
X *	Its size and shape are not defined. Most typically the user will want
X *	to start up another device
X *	before it is used anyway. No attempt will be made by PostScript to
X *	Destroy the resulting
X *	device.
X */
X
Xstruct hardware *NewBitmapHardware (width, height) int width, height; {}
X
Xstruct hardware *NewWindowHardware (width, height) int width, height; {}
X/*
X *	NewBitmapHardware () is expected to create a new bitmap. Only one plane will be needed.
X *	
X *	NewWindowHardware () is expected to create a window on the screen.
X *	On a colour system this will
X *	be expected to support full colour.
X */
X
Xint IsWindowHardware (h) struct hardware *h; {}
X/*
X *	IsWindowHardware () should return TRUE if the hardware is a window,
X *	FALSE otherwise.
X *	NULL is a window.
X */
X
Xvoid DestroyHardware (h) struct hardware *h; {}
X/*	
X *	DestroyHardware () should release the resources required by the
X *	hardware, bitmap or window.
X *	This should cause a window device to vanish.
X *	NULL is not an error (does nothing).
X */
X
X
XMatrix DeviceMatrix (width, height) int width, height; {}
X
XDevicePoint HardwareExtent (h) struct hardware *h; {}
X/*
X *
X *	DeviceMatrix () should return a matrix appropriate to a device of the
X *	given height and width.
X *	For a typical display with a graphics origin at the top left of a
X *	window,
X *	an appropriate definition would be:
X *	
X *	Matrix DeviceMatrix (width, height) int width, height;
X *	 {
X *	 	return NewMatrix (PIXELS_PER_INCH / 72.0, 0.0, 0.0,
X *			-PIXELS_PER_INCH / 72.0, 0.0, (float) height);
X *	 }
X *
X *	HardwareExtent () returns a DevicePoint describing the width and
X *	height of the argument.
X *	NULL has extent NewDevicePoint (0, 0).
X */
X
X/*********************** OUTPUT PRIMITIVES ******************************/	
X
Xvoid BitBlt (from, to, fromPoint, toPoint, extent, rop)
X	struct hardware *from, *to;
X	DevicePoint toPoint, fromPoint, extent;
X	int rop;
X {}
X
Xvoid Paint (from, to, fromPoint, toPoint, extent, colour)
X	struct hardware *from, *to;
X	DevicePoint toPoint, fromPoint, extent;
X	Colour colour;
X {}
X
X/*	
X *	BitBlt () is a full function RasterOp will the ability to mask the
X *	source with a colour. The 'rop' argument
X *	will have values as described in the header file hard.h.
X *	If the from argument is NULL it is taken to be
X *	a bitmap full of ones the shape of the fromPoint and extent.
X *	If the to argument is NULL, this is a no-op.
X *	
X *	Paint () is an addition to BitBlt. Bits that are set in the source
X *	are Painted into the destination
X *	in the given colour with a copying rasterop so that they replace
X *	pixels previously there. If the
X *	machine does not support colour windows, half-toning should be
X *	performed. 
X *	Colour values have hue, saturation and brightness components.
X *	on a black and white or greyscale
X *	system the brightness value will be a FP value between 0.0 (black)
X *	and 1.1 (white), which can be
X *	used as a grey level.
X */
X
Xvoid BitBltTrapezoid (to, lefttop, leftbottom, righttop, rightbottom, top,
X	bottom, rop)
X	struct hardware *to;
X	DevicePoint lefttop, leftbottom, righttop, rightbottom;
X	int top, bottom, rop;
X {}
X
Xvoid PaintTrapezoid (to, lefttop, leftbottom, righttop, rightbottom, top,
X	bottom, colour)
X	struct hardware *to;
X	DevicePoint lefttop, leftbottom, righttop, rightbottom;
X	int top, bottom;
X	Colour colour;
X {}
X
X/*
X * 	BitBltTrapezoid () and PaintTrapezoid () render a complete
X *	trapezoidal shape.
X *	The corners of the trapezoid may lie far outside the range of
X *	interesting scan-lines, but the slope
X *	of the line should be clipped by the top and bottom. The coordinates
X *	are half-open.
X */
X
Xvoid Line (h, fromPoint, toPoint, rop)
X	struct hardware *h;
X	DevicePoint fromPoint, toPoint;
X	int rop;
X {}
X
Xvoid PaintLine (h, fromPoint, toPoint, colour)
X	struct hardware *h;
X	DevicePoint fromPoint, toPoint;
X	Colour colour;
X {}
X
X/*	
X *	Line () is expected to draw a line between the given points (the last pixel is expected to be drawn)
X *	with the given RasterOp and colour masking. The line should be one pixel wide and half-open. [Thicker lines are
X *	done with BitBlt.]
X *	
X *	PaintLine () is expected to Paint a line by analogy with Paint and BitBlt.
X */
X
Xint TransferSize () {}
X
Xvoid SetTransfer (vec) float *vec; {}
X/*	
X *	TransferSize () and SetTransfer () control the mapping function
X *	between user brightnesses
X *	and device brightnesses. The interface is expected to perform this
X *	mapping of brightnesses
X *	to a sufficient resolution. SetTransfer takes a table of floating
X *	point numbers between
X *	0 and 1. User brightnesses are scaled to the size of this table and
X *	mapped through it.
X *	The argument table given to SetTransfer () will be deleted after use.
X *	TransferSize () simply
X *	enquires the required size of the table.
X *	
X *	It may be appropriate to half-tone on a grayscale or colour device to
X *	improve rendering if it is not too
X *	expensive. TransferSize () returns the size of the pattern table.
X */
X
Xchar *StringFromHardware (h) struct hardware *h; {}
X
Xstruct hardware *HardwareFromString (s, width, height)
Xchar *s; int width, height; {}
X/*	
X *	StringFromHardware () produces a string from its argument which
X *	describes the bitmap.
X *	The bitmap is returned in row-major order with the leftmost bit of
X *	each byte in the most significant
X *	position. Rows are padded to byte boundaries. Only single plane
X *	bitmaps are used.
X *	
X *	HardwareFromString () performs the inverse mapping, generating a
X *	bitmap from a set of bits, given
X *	a width and height. Only single plane bitmaps are used.
X */
X
Xint ScreenSize (freq, rotation) float freq, rotation; {}
X
Xvoid BuildScreen (freq, rotation, x, y) float freq, rotation, *x, *y; {}
X
Xvoid SetScreen (freq, rotation, thresh) float freq, rotation, *thresh; {}
X/*
X *	ScreenSize () allows PostScript to determine how large an array of
X *	sample points to expect.
X *	It should return the length of the side of the sample square.
X *	
X *	BuildScreen () returns a set of sampling coordinates to PostScript to
X *	hand to the users spot-function
X *	
X *	SetScreen () allows PostScript to set the thresholds for each sample
X *	point so that half-tone bitmaps
X *	can be made.
X */
X
Xvoid SetClipHardware (h, clip) struct hardware *h, *clip; {}
X/*	
X *	SetClipHardware sets hardware which is a clip mask for BitBlt.
X *	This mask should be ANDed with any output
X *	operation. If clip is NULL, masking will not be needed.
X */
X
Xvoid HardUpdate () {}
X/*
X *	HardUpdate is a hook to allow devices which do output buffering to
X *	flush that buffering when appropriate.
X *	This allows an interactive user to see completed graphics between
X *	prompts (it is called as a side-effect
X *	of the PostScript flush operator). Typically is is a no-op.
X */
X
Xvoid UpdateControl ()
X {}
X/*
X * 	This call can be used to enable batching of output operations.
X *	UpdateControl (FALSE) means ``start of
X *	batching'' UpdateControl (TRUE) means ``end of batching''.
X *	It is used to improve performance on machines
X *	where screen updates have a high locking overhead. It may be a no-op.
X */
END_OF_FILE
if test 7674 -ne `wc -c <'doc/hard-interface'`; then
    echo shar: \"'doc/hard-interface'\" unpacked with wrong size!
fi
# end of 'doc/hard-interface'
fi
if test -f 'postscript/demos/fishes' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'postscript/demos/fishes'\"
else
echo shar: Extracting \"'postscript/demos/fishes'\" \(7514 characters\)
sed "s/^X//" >'postscript/demos/fishes' <<'END_OF_FILE'
X%!
X%  The following are all the functions required to produce the famous
X%  "Square Limit" drawing by M. C. Escher. These functions were derived by
X%  Peter Henderson. See his paper in 1982 Conf. on LISP and Func. Prog.
X%  (C) Miranda coding by Michael Parsons, September 1985
X%  Translation to PostScript by Peter Bumbulis, July 1986
X%
X
X30 0 translate
X
X%  quartet combines 4 images, one image in each quadrant, to produce one image.
X/quartet {
X  4 -1 roll 1 2 div   0   1 zoom
X  4 -1 roll 1 2 div   1   1 zoom
X  4 -1 roll 1 2 div   0   0 zoom
X  4 -1 roll 1 2 div   1   0 zoom
X  4 {exec} /repeat cvx
X  7 array astore cvx
X} def
X
X%  nonet arranges 9 images in equal sized squares to form 1 image.
X/nonet {
X  9 -1 roll 1 3 div   0   1 zoom
X  9 -1 roll 1 3 div 0.5   1 zoom
X  9 -1 roll 1 3 div   1   1 zoom
X  9 -1 roll 1 3 div   0 0.5 zoom
X  9 -1 roll 1 3 div 0.5 0.5 zoom
X  9 -1 roll 1 3 div   1 0.5 zoom
X  9 -1 roll 1 3 div   0   0 zoom
X  9 -1 roll 1 3 div 0.5   0 zoom
X  9 -1 roll 1 3 div   1   0 zoom
X  9 {exec} /repeat cvx
X  12 array astore cvx
X} def
X
X%  cycle combines 4 smaller copies of an image, each rotated by a different
X%  multiple of 90 degrees.
X/cycle {dup 270 rot dup 180 rot dup  90 rot quartet} def
X
X%  t is one of the basic fish rearrangements.
X/t {{p} {q} {r} {s} quartet} def
X
X%  u is another of the basic fish rearrangements.
X/u {{q} 90 rot cycle} def
X
X%  side defines one side of the picture at level n.
X/side {
X  dup 0 le
X    {  pop   {} dup t 90 rot t quartet}
X    {1 sub side dup t 90 rot t quartet}
X  ifelse
X} def
X
X%  corner defines one corner of the picture at level n.
X/corner {
X  dup 0 le
X    {  pop         {}        {}         {} u quartet}
X    {1 sub dup corner exch side dup 90 rot u quartet}
X  ifelse
X} def
X
X%  quadcorner forms one quarter of the image at level n;
X/quadcorner {
X  dup corner exch side dup dup 90 rot dup u exch t 90 rot dup 3 1 roll
X  {q} 90 rot nonet
X} def
X
X%  squarelimit produces the fish drawing.
X/squarelimit {quadcorner cycle} def
X
X%  fish gives a border to produce the final drawing.
X/fish {
X  squarelimit exec
X  newpath
X  0 0 moveto
X  0 1 lineto
X  1 1 lineto
X  1 0 lineto
X  closepath
X  stroke
X} def
X
X/flip {0.5 0.5 translate 1 -1 scale -0.5 -0.5 translate} def
X
X%  All the data needed to draw the fish.
X/p {
X    gsave flip
X    newpath
X    0 0.8125 moveto 0 0.5 lineto
X    0 0.8125 moveto 0.1875 0.75 lineto
X    0.75 0 moveto 0.8125 6.25e-2 lineto
X    0.1875 0.75 moveto 0 0.5 lineto
X    0.375 1 moveto 0.25 0.75 lineto
X    0.25 0.6875 moveto 0.4375 0.625 lineto
X    0.25 0.6875 moveto 0.25 0.375 lineto
X    0.4375 0.625 moveto 0.25 0.375 lineto
X    0.6875 1 moveto 0.625 0.75 lineto
X    0.6875 1 moveto 0.875 0.875 lineto
X    0.875 0.875 moveto 1 0.875 lineto
X    0.625 0.75 moveto 0.8125 0.6875 lineto
X    0.8125 0.6875 moveto 1 0.75 lineto
X    0.625 0.75 moveto 0.5 0.5 lineto
X    0.5625 0.625 moveto 0.75 0.5625 lineto
X    0.75 0.5625 moveto 1 0.625 lineto
X    0.5 0.5 moveto 0.75 0.4375 lineto
X    0.75 0.4375 moveto 1 0.5 lineto
X    0.5 0.5 moveto 0.25 0.1875 lineto
X    0.25 0.1875 moveto 0 0 lineto
X    0.5 0.25 moveto 1 0.375 lineto
X    1 0.25 moveto 0.75 0.25 lineto
X    0.75 0.25 moveto 0.5 0 lineto
X    0.5 0 moveto 0.375 6.25e-2 lineto
X    0.375 6.25e-2 moveto 0 0 lineto
X    0.625 0 moveto 0.75 0.125 lineto
X    0.75 0.125 moveto 1 0.1875 lineto
X    1 0.125 moveto 0.8125 6.25e-2 lineto
X    1 6.25e-2 moveto 0.875 0 lineto
X    stroke
X    grestore
X} def
X
X/q {
X    gsave flip
X    newpath
X    0 0 moveto 0 0.25 lineto
X    0 0.5 moveto 0 1 lineto
X    0 1 moveto 0.5 1 lineto
X    0.75 1 moveto 1 1 lineto
X    0.125 1 moveto 0.25 0.6875 lineto
X    0.25 1 moveto 0.375 0.6875 lineto
X    0.375 1 moveto 0.5 0.6875 lineto
X    0.5 1 moveto 0.625 0.625 lineto
X    0.25 0.6875 moveto 0.25 0.5625 lineto
X    0.375 0.6875 moveto 0.375 0.5625 lineto
X    0.5 0.6875 moveto 0.5 0.5 lineto
X    0.625 0.625 moveto 0.625 0.4375 lineto
X    0.625 1 moveto 0.875 0.3125 lineto
X    0.75 1 moveto 0.8125 0.75 lineto
X    0.8125 1 moveto 1 0.625 lineto
X    0.875 1 moveto 1 0.75 lineto
X    0.9375 1 moveto 1 0.875 lineto
X    0 0.25 moveto 0.1875 0.1875 lineto
X    0 0.375 moveto 0.4375 0.3125 lineto
X    0 0.5 moveto 0.25 0.5625 lineto
X    0.125 0 moveto 0.1875 0.1875 lineto
X    0.1875 0.1875 moveto 0.3125 0.125 lineto
X    0.3125 0.125 moveto 0.25 0 lineto
X    0.3125 0.125 moveto 0.4375 6.25e-2 lineto
X    0.4375 6.25e-2 moveto 0.5 0 lineto
X    0.5 6.25e-2 moveto 0.6875 6.25e-2 lineto
X    0.6875 6.25e-2 moveto 0.5625 0.1875 lineto
X    0.5625 0.1875 moveto 0.5 6.25e-2 lineto
X    0.5625 0.25 moveto 0.75 0.25 lineto
X    0.75 0.25 moveto 0.625 0.375 lineto
X    0.625 0.375 moveto 0.5625 0.25 lineto
X    1 0 moveto 0.75 0.375 lineto
X    0.375 0 moveto 0.4375 6.25e-2 lineto
X    0.75 0.375 moveto 0.375 0.5625 lineto
X    0.375 0.5625 moveto 0.25 0.5625 lineto
X    1 0 moveto 0.9375 0.375 lineto
X    0.9375 0.375 moveto 1 0.5 lineto
X    1 0.5 moveto 0.8125 0.75 lineto
X    stroke
X    grestore
X} def
X
X/r {
X    gsave flip
X    newpath
X    0.5 0.5 moveto 0.125 0.25 lineto
X    0.125 0.25 moveto 0 0 lineto
X    0 0.5 moveto 0.125 0.25 lineto
X    0 0.25 moveto 6.25e-2 0.125 lineto
X    0 1 moveto 0.5 0.5 lineto
X    0 0.75 moveto 0.3125 0.375 lineto
X    6.25e-2 0.9375 moveto 0.25 1 lineto
X    0.125 0.875 moveto 0.5 1 lineto
X    0.1875 0.8125 moveto 0.5 0.875 lineto
X    0.3125 0.6875 moveto 0.75 0.8125 lineto
X    0.5 0.875 moveto 0.75 1 lineto
X    0.75 0.8125 moveto 1 1 lineto
X    0.5 0.5 moveto 0.875 0.625 lineto
X    1 0.625 moveto 0.6875 0.375 lineto
X    0.6875 0.375 moveto 0.375 0 lineto
X    1 0.5 moveto 0.75 0.25 lineto
X    1 0.75 moveto 0.875 0.625 lineto
X    0.75 0.25 moveto 0.6875 0 lineto
X    0.75 0.25 moveto 1 0 lineto
X    1 0.375 moveto 0.8125 0.1875 lineto
X    1 0.25 moveto 0.875 0.125 lineto
X    1 0.125 moveto 0.9375 6.25e-2 lineto
X    stroke
X    grestore
X} def
X
X/s {
X    gsave flip
X    newpath
X    0 1 moveto 0.25 0.875 lineto
X    0.125 0.9375 moveto 0 0.75 lineto
X    0.25 0.875 moveto 0.5 0.875 lineto
X    0.5 0.875 moveto 1 1 lineto
X    1 1 moveto 0.625 0.75 lineto
X    0.625 0.75 moveto 0.5 0.625 lineto
X    0 0.625 moveto 0.4375 0.75 lineto
X    0 0.5 moveto 0.5 0.625 lineto
X    0 0.375 moveto 0.4375 0.5 lineto
X    0 0.25 moveto 0.4375 0.375 lineto
X    0 0.125 moveto 0.4375 0.1875 lineto
X    0.5 0.625 moveto 0.4375 0.5 lineto
X    0.4375 0.5 moveto 0.4375 0.1875 lineto
X    0.4375 0.1875 moveto 0.5 0 lineto
X    0.625 0 moveto 0.6875 0.375 lineto
X    0.75 0 moveto 0.8125 0.1875 lineto
X    0.8125 0.1875 moveto 0.9375 0.4375 lineto
X    0.9375 0.4375 moveto 1 0.5 lineto
X    1 0.125 moveto 0.8125 0.1875 lineto
X    1 0.25 moveto 0.875 0.3125 lineto
X    1 0.375 moveto 0.9375 0.4375 lineto
X    0.75 0.5625 moveto 0.75 0.75 lineto
X    0.75 0.75 moveto 0.625 0.625 lineto
X    0.625 0.625 moveto 0.75 0.5625 lineto
X    0.8125 0.5625 moveto 0.9375 0.5 lineto
X    0.9375 0.5 moveto 0.9375 0.6875 lineto
X    0.9375 0.6875 moveto 0.8125 0.5625 lineto
X    stroke
X    grestore
X} def
X
X%  rot rotates an image by th radians anti-clockwise, about the image centre.
X/rotcode {gsave 0.5 0.5 translate rotate -0.5 -0.5 translate exec grestore} def
X
X/rot { /rotcode cvx 3 array astore cvx } def
X
X%  zoom scales an image up or down with one fixed point.
X/zoomcode {
X  gsave 2 copy neg exch neg exch 5 2 roll translate dup scale translate exec grestore
X} def
X/zoom { /zoomcode cvx 5 array astore cvx} def
X 
X/setup {0 144 translate 72 7 mul dup scale .25 7 div dup translate .001 setlinewidth} def
X 
X%  display a level 2 fish
X 
Xsetup
X2 fish
Xcopypage
Xcopypage
Xshowpage
END_OF_FILE
if test 7514 -ne `wc -c <'postscript/demos/fishes'`; then
    echo shar: \"'postscript/demos/fishes'\" unpacked with wrong size!
fi
# end of 'postscript/demos/fishes'
fi
if test -f 'postscript/fonts/Times/italic.a' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'postscript/fonts/Times/italic.a'\"
else
echo shar: Extracting \"'postscript/fonts/Times/italic.a'\" \(7989 characters\)
sed "s/^X//" >'postscript/fonts/Times/italic.a' <<'END_OF_FILE'
XCharStrings
X/parenleft
X<CB30
X4932
X4735
X4539
X443E
X4442
X4547
X474B
X494E
X4B50
XC932
X4736
X4639
X453E
X4542
X4647
X474A
X494E
X>
Xput
XMetrics
X/parenleft
X[9
X14]
Xput
XCharStrings
X/parenright
X<C330
X4532
X4735
X4939
X4A3E
X4A42
X4947
X474B
X454E
X4350
XC532
X4736
X4839
X493E
X4942
X4847
X474A
X454E
X>
Xput
XMetrics
X/parenright
X[9
X14]
Xput
XCharStrings
X/bracketleft
X<C430
X4450
XC530
X4550
XC430
X4B30
XC450
X4B50
X>
Xput
XMetrics
X/bracketleft
X[9
X14]
Xput
XCharStrings
X/bracketright
X<C930
X4950
XCA30
X4A50
XC330
X4A30
XC350
X4A50
X>
Xput
XMetrics
X/bracketright
X[9
X14]
Xput
XCharStrings
X/braceleft
X<C930
X4731
X4632
X4534
X4536
X4638
X4739
X483B
X483D
X463F
XC731
X4633
X4635
X4737
X4838
X493A
X493C
X483E
X4440
X4842
X4944
X4946
X4848
X4749
X464B
X464D
X474F
XC641
X4843
X4845
X4747
X4648
X454A
X454C
X464E
X474F
X4950
X>
Xput
XMetrics
X/braceleft
X[9
X14]
Xput
XCharStrings
X/braceright
X<C530
X4731
X4832
X4934
X4936
X4838
X4739
X463B
X463D
X483F
XC731
X4833
X4835
X4737
X4638
X453A
X453C
X463E
X4A40
X4642
X4544
X4546
X4648
X4749
X484B
X484D
X474F
XC841
X4643
X4645
X4747
X4848
X494A
X494C
X484E
X474F
X4550
X>
Xput
XMetrics
X/braceright
X[9
X14]
Xput
XCharStrings
X/zero
X<C934
X4635
X4438
X433D
X4340
X4445
X4648
X4949
X4B49
X4E48
X5045
X5140
X513D
X5038
X4E35
X4B34
X4934
XC934
X4735
X4636
X4538
X443D
X4440
X4545
X4647
X4748
X4949
XCB49
X4D48
X4E47
X4F45
X5040
X503D
X4F38
X4E36
X4D35
X4B34
X>
Xput
XMetrics
X/zero
X[2
X20]
Xput
XCharStrings
X/one
X<C638
X4837
X4B34
X4B49
XCA35
X4A49
XC649
X4F49
X>
Xput
XMetrics
X/one
X[2
X20]
Xput
XCharStrings
X/two
X<C438
X4539
X443A
X4339
X4338
X4436
X4535
X4834
X4C34
X4F35
X5036
X5138
X513A
X503C
X4D3E
X4840
X4641
X4443
X4346
X4349
XCC34
X4E35
X4F36
X5038
X503A
X4F3C
X4C3E
X4840
XC347
X4446
X4646
X4B48
X4E48
X5047
X5146
XC646
X4B49
X4F49
X5048
X5146
X5144
X>
Xput
XMetrics
X/two
X[2
X20]
Xput
XCharStrings
X/three
X<C438
X4539
X443A
X4339
X4338
X4436
X4535
X4834
X4C34
X4F35
X5037
X503A
X4F3C
X4C3D
X493D
XCC34
X4E35
X4F37
X4F3A
X4E3C
X4C3D
XCC3D
X4E3E
X5040
X5142
X5145
X5047
X4F48
X4C49
X4849
X4548
X4447
X4345
X4344
X4443
X4544
X4445
XCF3F
X5042
X5045
X4F47
X4E48
X4C49
X>
Xput
XMetrics
X/three
X[2
X20]
Xput
XCharStrings
X/four
X<CC36
X4C49
XCD34
X4D49
XCD34
X4243
X5243
XC949
X5049
X>
Xput
XMetrics
X/four
X[2
X20]
Xput
XCharStrings
X/five
X<C534
X433E
XC33E
X453C
X483B
X4B3B
X4E3C
X503E
X5141
X5143
X5046
X4E48
X4B49
X4849
X4548
X4447
X4345
X4344
X4443
X4544
X4445
XCB3B
X4D3C
X4F3E
X5041
X5043
X4F46
X4D48
X4B49
XC534
X4F34
XC535
X4A35
X4F34
X>
Xput
XMetrics
X/five
X[2
X20]
Xput
XCharStrings
X/six
X<CF37
X4E38
X4F39
X5038
X5037
X4F35
X4D34
X4A34
X4735
X4537
X4439
X433D
X4343
X4446
X4648
X4949
X4B49
X4E48
X5046
X5143
X5142
X503F
X4E3D
X4B3C
X4A3C
X473D
X453F
X4442
XCA34
X4835
X4637
X4539
X443D
X4443
X4546
X4748
X4949
XCB49
X4D48
X4F46
X5043
X5042
X4F3F
X4D3D
X4B3C
X>
Xput
XMetrics
X/six
X[2
X20]
Xput
XCharStrings
X/seven
X<C334
X433A
XC338
X4436
X4634
X4834
X4D37
X4F37
X5036
X5134
XC436
X4635
X4835
X4D37
XD134
X5137
X503A
X4C3F
X4B41
X4A44
X4A49
XD03A
X4B3F
X4A41
X4944
X4949
X>
Xput
XMetrics
X/seven
X[2
X20]
Xput
XCharStrings
X/eight
X<C834
X4535
X4437
X443A
X453C
X483D
X4C3D
X4F3C
X503A
X5037
X4F35
X4C34
X4834
XC834
X4635
X4537
X453A
X463C
X483D
XCC3D
X4E3C
X4F3A
X4F37
X4E35
X4C34
XC83D
X453E
X443F
X4341
X4345
X4447
X4548
X4849
X4C49
X4F48
X5047
X5145
X5141
X503F
X4F3E
X4C3D
XC83D
X463E
X453F
X4441
X4445
X4547
X4648
X4849
XCC49
X4E48
X4F47
X5045
X5041
X4F3F
X4E3E
X4C3D
X>
Xput
XMetrics
X/eight
X[2
X20]
Xput
XCharStrings
X/nine
X<D03B
X4F3E
X4D40
X4A41
X4941
X4640
X443E
X433B
X433A
X4437
X4635
X4934
X4B34
X4E35
X5037
X513A
X5140
X5044
X4F46
X4D48
X4A49
X4749
X4548
X4446
X4445
X4544
X4645
X4546
XC941
X4740
X453E
X443B
X443A
X4537
X4735
X4934
XCB34
X4D35
X4F37
X503A
X5040
X4F44
X4E46
X4C48
X4A49
X>
Xput
XMetrics
X/nine
X[2
X20]
Xput
XCharStrings
X/period
X<C547
X4448
X4549
X4648
X4547
X>
Xput
XMetrics
X/period
X[-4
X10]
Xput
XCharStrings
X/comma
X<C549
X4448
X4547
X4648
X464A
X454C
X444D
X>
Xput
XMetrics
X/comma
X[-4
X10]
Xput
XCharStrings
X/colon
X<C53B
X443C
X453D
X463C
X453B
XC547
X4448
X4549
X4648
X4547
X>
Xput
XMetrics
X/colon
X[0
X10]
Xput
XCharStrings
X/semicolon
X<C53B
X443C
X453D
X463C
X453B
XC549
X4448
X4547
X4648
X464A
X454C
X444D
X>
Xput
XMetrics
X/semicolon
X[0
X10]
Xput
XCharStrings
X/exclam
X<C534
X4436
X4542
X4636
X4534
XC536
X453C
XC547
X4448
X4549
X4648
X4547
X>
Xput
XMetrics
X/exclam
X[7
X10]
Xput
XCharStrings
X/question
X<C438
X4539
X443A
X4339
X4338
X4436
X4535
X4734
X4A34
X4D35
X4E36
X4F38
X4F3A
X4E3C
X4D3D
X493F
X4942
XCA34
X4C35
X4D36
X4E38
X4E3A
X4D3C
X4B3E
XC947
X4848
X4949
X4A48
X4947
X>
Xput
XMetrics
X/question
X[3
X18]
Xput
XCharStrings
X/quoteright
X<C434
X433B
XC534
X433B
X>
Xput
XMetrics
X/quoteright
X[8
X8]
Xput
XCharStrings
X/quotedbl
X<C434
X433B
XC534
X433B
XCC34
X4B3B
XCD34
X4B3B
X>
Xput
XMetrics
X/quotedbl
X[4
X16]
Xput
XCharStrings
X/ring
X<C634
X4435
X4337
X4339
X443B
X463C
X483C
X4A3B
X4B39
X4B37
X4A35
X4834
X4634
X>
Xput
XMetrics
X/ring
X[5
X14]
Xput
XCharStrings
X/asterisk
X<C834
X4840
XC337
X4D3D
XCD37
X433D
X>
Xput
XMetrics
X/asterisk
X[4
X16]
Xput
XCharStrings
X/slash
X<D430
X4250
X>
Xput
XMetrics
X/slash
X[5
X22]
Xput
XCharStrings
X/parenleft
X<CB30
X4932
X4735
X4539
X443E
X4442
X4547
X474B
X494E
X4B50
XC932
X4736
X4639
X453E
X4542
X4647
X474A
X494E
X>
Xput
XMetrics
X/parenleft
X[9
X14]
Xput
XCharStrings
X/parenright
X<C330
X4532
X4735
X4939
X4A3E
X4A42
X4947
X474B
X454E
X4350
XC532
X4736
X4839
X493E
X4942
X4847
X474A
X454E
X>
Xput
XMetrics
X/parenright
X[9
X14]
Xput
XCharStrings
X/bracketleft
X<C430
X4450
XC530
X4550
XC430
X4B30
XC450
X4B50
X>
Xput
XMetrics
X/bracketleft
X[9
X14]
Xput
XCharStrings
X/bracketright
X<C930
X4950
XCA30
X4A50
XC330
X4A30
XC350
X4A50
X>
Xput
XMetrics
X/bracketright
X[9
X14]
Xput
XCharStrings
X/braceleft
X<C930
X4731
X4632
X4534
X4536
X4638
X4739
X483B
X483D
X463F
XC731
X4633
X4635
X4737
X4838
X493A
X493C
X483E
X4440
X4842
X4944
X4946
X4848
X4749
X464B
X464D
X474F
XC641
X4843
X4845
X4747
X4648
X454A
X454C
X464E
X474F
X4950
X>
Xput
XMetrics
X/braceleft
X[9
X14]
Xput
XCharStrings
X/braceright
X<C530
X4731
X4832
X4934
X4936
X4838
X4739
X463B
X463D
X483F
XC731
X4833
X4835
X4737
X4638
X453A
X453C
X463E
X4A40
X4642
X4544
X4546
X4648
X4749
X484B
X484D
X474F
XC841
X4643
X4645
X4747
X4848
X494A
X494C
X484E
X474F
X4550
X>
Xput
XMetrics
X/braceright
X[9
X14]
Xput
XCharStrings
X/angleleft
X<CA30
X4340
X4A50
X>
Xput
XMetrics
X/angleleft
X[9
X14]
Xput
XCharStrings
X/angleright
X<C430
X4B40
X4450
X>
Xput
XMetrics
X/angleright
X[9
X14]
Xput
XCharStrings
X/bar
X<C430
X4450
X>
Xput
XMetrics
X/bar
X[12
X8]
Xput
XCharStrings
X/minus
X<C440
X5640
X>
Xput
XMetrics
X/minus
X[-4
X26]
Xput
XCharStrings
X/plus
X<CD37
X4D49
XC440
X5640
X>
Xput
XMetrics
X/plus
X[-4
X26]
Xput
XCharStrings
X/equal
X<C43D
X563D
XC443
X5643
X>
Xput
XMetrics
X/equal
X[-4
X26]
Xput
XCharStrings
X/less
X<D437
X4440
X5449
X>
Xput
XMetrics
X/less
X[-3
X24]
Xput
XCharStrings
X/greater
X<C437
X5440
X4449
X>
Xput
XMetrics
X/greater
X[-3
X24]
Xput
XCharStrings
X/asciicircum
X<C342
X4B3D
X5342
XC342
X4B3E
X5342
X>
Xput
XMetrics
X/asciicircum
X[-3
X22]
Xput
XCharStrings
X/quoteleft
X<C536
X4435
X4534
X4635
X4637
X4539
X443A
X>
Xput
XMetrics
X/quoteleft
X[7
X10]
Xput
XCharStrings
X/quoteright
X<C634
X4535
X4437
X4439
X453A
X4639
X4538
X>
Xput
XMetrics
X/quoteright
X[7
X10]
Xput
XCharStrings
X/percent
X<D534
X4349
XC834
X4A36
X4A38
X493A
X473B
X453B
X4339
X4337
X4435
X4634
X4834
X4A35
X4D36
X5036
X5335
X5534
XD142
X4F43
X4E45
X4E47
X5049
X5249
X5448
X5546
X5544
X5342
X5142
X>
Xput
XMetrics
X/percent
X[0
X24]
Xput
XCharStrings
X/ampersand
X<D53C
X543D
X553E
X563D
X563C
X553B
X543B
X533C
X523E
X5043
X4E46
X4C48
X4A49
X4749
X4448
X4346
X4343
X4441
X4A3D
X4C3B
X4D39
X4D37
X4C35
X4A34
X4835
X4737
X4739
X483C
X4A3F
X4F46
X5148
X5449
X5549
X5648
X5647
XC749
X4548
X4446
X4443
X4541
X473F
XC739
X483B
X5046
X5248
X5449
X>
Xput
XMetrics
X/ampersand
X[0
X25]
Xput
XCharStrings
X/at
X<D23C
X513A
X4F39
X4C39
X4A3A
X493B
X483E
X4841
X4943
X4B44
X4E44
X5043
X5141
XCC39
X4A3B
X493E
X4941
X4A43
X4B44
XD239
X5141
X5143
X5344
X5544
X5742
X583F
X583D
X573A
X5638
X5436
X5235
X4F34
X4C34
X4935
X4736
X4538
X443A
X433D
X4340
X4443
X4545
X4747
X4948
X4C49
X4F49
X5248
X5447
X5546
XD339
X5241
X5243
X5344
X>
Xput
XMetrics
X/at
X[-1
X27]
Xput
XCharStrings
X/dollar
X<C830
X484D
XCC30
X4C4D
XD037
X4F38
X5039
X5138
X5137
X4F35
X4C34
X4834
X4535
X4337
X4339
X443B
X453C
X473D
X4D3F
X4F40
X5142
XC339
X453B
X473C
X4D3E
X4F3F
X5040
X5142
X5146
X4F48
X4C49
X4849
X4548
X4346
X4345
X4444
X4545
X4446
X>
Xput
XMetrics
X/dollar
X[6
X20]
Xput
XCharStrings
X/numbersign
X<CB34
X4450
XD134
X4A50
XC43F
X523F
XC345
X5145
X>
Xput
XMetrics
X/numbersign
X[2
X21]
Xput
XCharStrings
X/space
X()
Xput
XMetrics
X/space
X[0
X20]
Xput
XCharStrings
X/.notdef
X<CF44
X4F45
X4E47
X4D48
X4B49
X4749
X4548
X4447
X4345
X4343
X4441
X4540
X493E
X493B
XC936
X4A35
X4934
X4835
X4936
X>
Xput
XMetrics
X/.notdef
X[3
X18]
Xput
XCharStrings
X/hyphen
X<C342
X4341
X4B41
X4B42
X4342
X>
Xput
XMetrics
X/hyphen
X[-3
X14]
Xput
XCharStrings
X/underscore
X<C048
X4049
X5049
X5048
X4048
X>
Xput
XMetrics
X/underscore
X[0
X16]
Xput
XCharStrings
X/backslash
X<C43D
X563D
X5643
X>
Xput
XMetrics
X/backslash
X[-4
X26]
Xput
XCharStrings
X/asciitilde
X<C343
X4341
X443E
X463D
X483D
X4A3E
X4E41
X5042
X5242
X5441
X553F
XC341
X443F
X463E
X483E
X4A3F
X4E42
X5043
X5243
X5442
X553F
X553D
X>
Xput
XMetrics
X/asciitilde
X[-3
X24]
Xput
END_OF_FILE
if test 7989 -ne `wc -c <'postscript/fonts/Times/italic.a'`; then
    echo shar: \"'postscript/fonts/Times/italic.a'\" unpacked with wrong size!
fi
# end of 'postscript/fonts/Times/italic.a'
fi
if test -f 'postscript/fonts/Times/roman.a' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'postscript/fonts/Times/roman.a'\"
else
echo shar: Extracting \"'postscript/fonts/Times/roman.a'\" \(7887 characters\)
sed "s/^X//" >'postscript/fonts/Times/roman.a' <<'END_OF_FILE'
XCharStrings
X/parenleft
X<CB30
X4932
X4735
X4539
X443E
X4442
X4547
X474B
X494E
X4B50
XC932
X4736
X4639
X453E
X4542
X4647
X474A
X494E
X>
Xput
XMetrics
X/parenleft
X[9
X14]
Xput
XCharStrings
X/parenright
X<C330
X4532
X4735
X4939
X4A3E
X4A42
X4947
X474B
X454E
X4350
XC532
X4736
X4839
X493E
X4942
X4847
X474A
X454E
X>
Xput
XMetrics
X/parenright
X[9
X14]
Xput
XCharStrings
X/bracketleft
X<C430
X4450
XC530
X4550
XC430
X4B30
XC450
X4B50
X>
Xput
XMetrics
X/bracketleft
X[9
X14]
Xput
XCharStrings
X/bracketright
X<C930
X4950
XCA30
X4A50
XC330
X4A30
XC350
X4A50
X>
Xput
XMetrics
X/bracketright
X[9
X14]
Xput
XCharStrings
X/braceleft
X<C930
X4731
X4632
X4534
X4536
X4638
X4739
X483B
X483D
X463F
XC731
X4633
X4635
X4737
X4838
X493A
X493C
X483E
X4440
X4842
X4944
X4946
X4848
X4749
X464B
X464D
X474F
XC641
X4843
X4845
X4747
X4648
X454A
X454C
X464E
X474F
X4950
X>
Xput
XMetrics
X/braceleft
X[9
X14]
Xput
XCharStrings
X/braceright
X<C530
X4731
X4832
X4934
X4936
X4838
X4739
X463B
X463D
X483F
XC731
X4833
X4835
X4737
X4638
X453A
X453C
X463E
X4A40
X4642
X4544
X4546
X4648
X4749
X484B
X484D
X474F
XC841
X4643
X4645
X4747
X4848
X494A
X494C
X484E
X474F
X4550
X>
Xput
XMetrics
X/braceright
X[9
X14]
Xput
XCharStrings
X/zero
X<C934
X4635
X4438
X433D
X4340
X4445
X4648
X4949
X4B49
X4E48
X5045
X5140
X513D
X5038
X4E35
X4B34
X4934
XC934
X4735
X4636
X4538
X443D
X4440
X4545
X4647
X4748
X4949
XCB49
X4D48
X4E47
X4F45
X5040
X503D
X4F38
X4E36
X4D35
X4B34
X>
Xput
XMetrics
X/zero
X[2
X20]
Xput
XCharStrings
X/one
X<C638
X4837
X4B34
X4B49
XCA35
X4A49
XC649
X4F49
X>
Xput
XMetrics
X/one
X[2
X20]
Xput
XCharStrings
X/two
X<C438
X4539
X443A
X4339
X4338
X4436
X4535
X4834
X4C34
X4F35
X5036
X5138
X513A
X503C
X4D3E
X4840
X4641
X4443
X4346
X4349
XCC34
X4E35
X4F36
X5038
X503A
X4F3C
X4C3E
X4840
XC347
X4446
X4646
X4B48
X4E48
X5047
X5146
XC646
X4B49
X4F49
X5048
X5146
X5144
X>
Xput
XMetrics
X/two
X[2
X20]
Xput
XCharStrings
X/three
X<C438
X4539
X443A
X4339
X4338
X4436
X4535
X4834
X4C34
X4F35
X5037
X503A
X4F3C
X4C3D
X493D
XCC34
X4E35
X4F37
X4F3A
X4E3C
X4C3D
XCC3D
X4E3E
X5040
X5142
X5145
X5047
X4F48
X4C49
X4849
X4548
X4447
X4345
X4344
X4443
X4544
X4445
XCF3F
X5042
X5045
X4F47
X4E48
X4C49
X>
Xput
XMetrics
X/three
X[2
X20]
Xput
XCharStrings
X/four
X<CC36
X4C49
XCD34
X4D49
XCD34
X4243
X5243
XC949
X5049
X>
Xput
XMetrics
X/four
X[2
X20]
Xput
XCharStrings
X/five
X<C534
X433E
XC33E
X453C
X483B
X4B3B
X4E3C
X503E
X5141
X5143
X5046
X4E48
X4B49
X4849
X4548
X4447
X4345
X4344
X4443
X4544
X4445
XCB3B
X4D3C
X4F3E
X5041
X5043
X4F46
X4D48
X4B49
XC534
X4F34
XC535
X4A35
X4F34
X>
Xput
XMetrics
X/five
X[2
X20]
Xput
XCharStrings
X/six
X<CF37
X4E38
X4F39
X5038
X5037
X4F35
X4D34
X4A34
X4735
X4537
X4439
X433D
X4343
X4446
X4648
X4949
X4B49
X4E48
X5046
X5143
X5142
X503F
X4E3D
X4B3C
X4A3C
X473D
X453F
X4442
XCA34
X4835
X4637
X4539
X443D
X4443
X4546
X4748
X4949
XCB49
X4D48
X4F46
X5043
X5042
X4F3F
X4D3D
X4B3C
X>
Xput
XMetrics
X/six
X[2
X20]
Xput
XCharStrings
X/seven
X<C334
X433A
XC338
X4436
X4634
X4834
X4D37
X4F37
X5036
X5134
XC436
X4635
X4835
X4D37
XD134
X5137
X503A
X4C3F
X4B41
X4A44
X4A49
XD03A
X4B3F
X4A41
X4944
X4949
X>
Xput
XMetrics
X/seven
X[2
X20]
Xput
XCharStrings
X/eight
X<C834
X4535
X4437
X443A
X453C
X483D
X4C3D
X4F3C
X503A
X5037
X4F35
X4C34
X4834
XC834
X4635
X4537
X453A
X463C
X483D
XCC3D
X4E3C
X4F3A
X4F37
X4E35
X4C34
XC83D
X453E
X443F
X4341
X4345
X4447
X4548
X4849
X4C49
X4F48
X5047
X5145
X5141
X503F
X4F3E
X4C3D
XC83D
X463E
X453F
X4441
X4445
X4547
X4648
X4849
XCC49
X4E48
X4F47
X5045
X5041
X4F3F
X4E3E
X4C3D
X>
Xput
XMetrics
X/eight
X[2
X20]
Xput
XCharStrings
X/nine
X<D03B
X4F3E
X4D40
X4A41
X4941
X4640
X443E
X433B
X433A
X4437
X4635
X4934
X4B34
X4E35
X5037
X513A
X5140
X5044
X4F46
X4D48
X4A49
X4749
X4548
X4446
X4445
X4544
X4645
X4546
XC941
X4740
X453E
X443B
X443A
X4537
X4735
X4934
XCB34
X4D35
X4F37
X503A
X5040
X4F44
X4E46
X4C48
X4A49
X>
Xput
XMetrics
X/nine
X[2
X20]
Xput
XCharStrings
X/period
X<C547
X4448
X4549
X4648
X4547
X>
Xput
XMetrics
X/period
X[-4
X10]
Xput
XCharStrings
X/comma
X<C549
X4448
X4547
X4648
X464A
X454C
X444D
X>
Xput
XMetrics
X/comma
X[-4
X10]
Xput
XCharStrings
X/colon
X<C53B
X443C
X453D
X463C
X453B
XC547
X4448
X4549
X4648
X4547
X>
Xput
XMetrics
X/colon
X[0
X10]
Xput
XCharStrings
X/semicolon
X<C53B
X443C
X453D
X463C
X453B
XC549
X4448
X4547
X4648
X464A
X454C
X444D
X>
Xput
XMetrics
X/semicolon
X[0
X10]
Xput
XCharStrings
X/exclam
X<C534
X4436
X4542
X4636
X4534
XC536
X453C
XC547
X4448
X4549
X4648
X4547
X>
Xput
XMetrics
X/exclam
X[7
X10]
Xput
XCharStrings
X/question
X<C438
X4539
X443A
X4339
X4338
X4436
X4535
X4734
X4A34
X4D35
X4E36
X4F38
X4F3A
X4E3C
X4D3D
X493F
X4942
XCA34
X4C35
X4D36
X4E38
X4E3A
X4D3C
X4B3E
XC947
X4848
X4949
X4A48
X4947
X>
Xput
XMetrics
X/question
X[3
X18]
Xput
XCharStrings
X/quoteright
X<C434
X433B
XC534
X433B
X>
Xput
XMetrics
X/quoteright
X[8
X8]
Xput
XCharStrings
X/quotedbl
X<C434
X433B
XC534
X433B
XCC34
X4B3B
XCD34
X4B3B
X>
Xput
XMetrics
X/quotedbl
X[4
X16]
Xput
XCharStrings
X/ring
X<C634
X4435
X4337
X4339
X443B
X463C
X483C
X4A3B
X4B39
X4B37
X4A35
X4834
X4634
X>
Xput
XMetrics
X/ring
X[5
X14]
Xput
XCharStrings
X/asterisk
X<C834
X4840
XC337
X4D3D
XCD37
X433D
X>
Xput
XMetrics
X/asterisk
X[4
X16]
Xput
XCharStrings
X/slash
X<D430
X4250
X>
Xput
XMetrics
X/slash
X[5
X22]
Xput
XCharStrings
X/parenleft
X<CB30
X4932
X4735
X4539
X443E
X4442
X4547
X474B
X494E
X4B50
XC932
X4736
X4639
X453E
X4542
X4647
X474A
X494E
X>
Xput
XMetrics
X/parenleft
X[9
X14]
Xput
XCharStrings
X/parenright
X<C330
X4532
X4735
X4939
X4A3E
X4A42
X4947
X474B
X454E
X4350
XC532
X4736
X4839
X493E
X4942
X4847
X474A
X454E
X>
Xput
XMetrics
X/parenright
X[9
X14]
Xput
XCharStrings
X/bracketleft
X<C430
X4450
XC530
X4550
XC430
X4B30
XC450
X4B50
X>
Xput
XMetrics
X/bracketleft
X[9
X14]
Xput
XCharStrings
X/bracketright
X<C930
X4950
XCA30
X4A50
XC330
X4A30
XC350
X4A50
X>
Xput
XMetrics
X/bracketright
X[9
X14]
Xput
XCharStrings
X/braceleft
X<C930
X4731
X4632
X4534
X4536
X4638
X4739
X483B
X483D
X463F
XC731
X4633
X4635
X4737
X4838
X493A
X493C
X483E
X4440
X4842
X4944
X4946
X4848
X4749
X464B
X464D
X474F
XC641
X4843
X4845
X4747
X4648
X454A
X454C
X464E
X474F
X4950
X>
Xput
XMetrics
X/braceleft
X[9
X14]
Xput
XCharStrings
X/braceright
X<C530
X4731
X4832
X4934
X4936
X4838
X4739
X463B
X463D
X483F
XC731
X4833
X4835
X4737
X4638
X453A
X453C
X463E
X4A40
X4642
X4544
X4546
X4648
X4749
X484B
X484D
X474F
XC841
X4643
X4645
X4747
X4848
X494A
X494C
X484E
X474F
X4550
X>
Xput
XMetrics
X/braceright
X[9
X14]
Xput
XCharStrings
X/angleleft
X<CA30
X4340
X4A50
X>
Xput
XMetrics
X/angleleft
X[9
X14]
Xput
XCharStrings
X/angleright
X<C430
X4B40
X4450
X>
Xput
XMetrics
X/angleright
X[9
X14]
Xput
XCharStrings
X/bar
X<C430
X4450
X>
Xput
XMetrics
X/bar
X[12
X8]
Xput
XCharStrings
X/minus
X<C440
X5640
X>
Xput
XMetrics
X/minus
X[-4
X26]
Xput
XCharStrings
X/plus
X<CD37
X4D49
XC440
X5640
X>
Xput
XMetrics
X/plus
X[-4
X26]
Xput
XCharStrings
X/equal
X<C43D
X563D
XC443
X5643
X>
Xput
XMetrics
X/equal
X[-4
X26]
Xput
XCharStrings
X/less
X<D437
X4440
X5449
X>
Xput
XMetrics
X/less
X[-3
X24]
Xput
XCharStrings
X/greater
X<C437
X5440
X4449
X>
Xput
XMetrics
X/greater
X[-3
X24]
Xput
XCharStrings
X/asciicircum
X<C342
X4B3D
X5342
XC342
X4B3E
X5342
X>
Xput
XMetrics
X/asciicircum
X[-3
X22]
Xput
XCharStrings
X/quoteright
X<C536
X4435
X4534
X4635
X4637
X4539
X443A
X>
Xput
XMetrics
X/quoteleft
X[7
X10]
Xput
XCharStrings
X/quoteleft
X<C634
X4535
X4437
X4439
X453A
X4639
X4538
X>
Xput
XMetrics
X/quoteright
X[7
X10]
Xput
XCharStrings
X/percent
X<D534
X4349
XC834
X4A36
X4A38
X493A
X473B
X453B
X4339
X4337
X4435
X4634
X4834
X4A35
X4D36
X5036
X5335
X5534
XD142
X4F43
X4E45
X4E47
X5049
X5249
X5448
X5546
X5544
X5342
X5142
X>
Xput
XMetrics
X/percent
X[0
X24]
Xput
XCharStrings
X/ampersand
X<D53C
X543D
X553E
X563D
X563C
X553B
X543B
X533C
X523E
X5043
X4E46
X4C48
X4A49
X4749
X4448
X4346
X4343
X4441
X4A3D
X4C3B
X4D39
X4D37
X4C35
X4A34
X4835
X4737
X4739
X483C
X4A3F
X4F46
X5148
X5449
X5549
X5648
X5647
XC749
X4548
X4446
X4443
X4541
X473F
XC739
X483B
X5046
X5248
X5449
X>
Xput
XMetrics
X/ampersand
X[0
X25]
Xput
XCharStrings
X/at
X<D23C
X513A
X4F39
X4C39
X4A3A
X493B
X483E
X4841
X4943
X4B44
X4E44
X5043
X5141
XCC39
X4A3B
X493E
X4941
X4A43
X4B44
XD239
X5141
X5143
X5344
X5544
X5742
X583F
X583D
X573A
X5638
X5436
X5235
X4F34
X4C34
X4935
X4736
X4538
X443A
X433D
X4340
X4443
X4545
X4747
X4948
X4C49
X4F49
X5248
X5447
X5546
XD339
X5241
X5243
X5344
X>
Xput
XMetrics
X/at
X[-1
X27]
Xput
XCharStrings
X/dollar
X<C830
X484D
XCC30
X4C4D
XD037
X4F38
X5039
X5138
X5137
X4F35
X4C34
X4834
X4535
X4337
X4339
X443B
X453C
X473D
X4D3F
X4F40
X5142
XC339
X453B
X473C
X4D3E
X4F3F
X5040
X5142
X5146
X4F48
X4C49
X4849
X4548
X4346
X4345
X4444
X4545
X4446
X>
Xput
XMetrics
X/dollar
X[6
X20]
Xput
XCharStrings
X/space
X()
Xput
XMetrics
X/space
X[0
X20]
Xput
XCharStrings
X/.notdef
X<CF44
X4F45
X4E47
X4D48
X4B49
X4749
X4548
X4447
X4345
X4343
X4441
X4540
X493E
X493B
XC936
X4A35
X4934
X4835
X4936
X>
Xput
XMetrics
X/.notdef
X[3
X18]
Xput
XCharStrings
X/hyphen
X<C342
X4341
X4B41
X4B42
X4342
X>
Xput
XMetrics
X/hyphen
X[-3
X14]
Xput
XCharStrings
X/underscore
X<C048
X4049
X5049
X5048
X4048
X>
Xput
XMetrics
X/underscore
X[0
X16]
Xput
XCharStrings
X/backslash
X<C43D
X563D
X5643
X>
Xput
XMetrics
X/backslash
X[-4
X26]
Xput
XCharStrings
X/asciitilde
X<C343
X4341
X443E
X463D
X483D
X4A3E
X4E41
X5042
X5242
X5441
X553F
XC341
X443F
X463E
X483E
X4A3F
X4E42
X5043
X5243
X5442
X553F
X553D
X>
Xput
XMetrics
X/asciitilde
X[-3
X24]
Xput
END_OF_FILE
if test 7887 -ne `wc -c <'postscript/fonts/Times/roman.a'`; then
    echo shar: \"'postscript/fonts/Times/roman.a'\" unpacked with wrong size!
fi
# end of 'postscript/fonts/Times/roman.a'
fi
if test -f 'postscript/fonts/times/greek.r' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'postscript/fonts/times/greek.r'\"
else
echo shar: Extracting \"'postscript/fonts/times/greek.r'\" \(7459 characters\)
sed "s/^X//" >'postscript/fonts/times/greek.r' <<'END_OF_FILE'
XCharStrings
X/1127
X<C63D
X443E
X433F
X4241
X4243
X4345
X4546
X4646
X4845
X4A43
X4C40
X4D3D
XC63D
X443F
X4341
X4343
X4445
X4546
XC63D
X483D
X4A3E
X4C45
X4D46
XC83D
X493E
X4B45
X4D46
X4E46
X>
Xput
XMetrics
X/1127
X[-2
X16]
Xput
XCharStrings
X/1128
X<C739
X453B
X443D
X4243
X404A
XC63A
X453C
X4342
X414A
XC739
X4939
X4B3A
X4B3C
X4A3E
X473F
XC939
X4A3A
X4A3C
X493E
X473F
XC73F
X4940
X4A42
X4A44
X4945
X4746
X4646
X4445
X4342
XC73F
X4840
X4942
X4944
X4746
X>
Xput
XMetrics
X/1128
X[0
X13]
Xput
XCharStrings
X/1129
X<C13F
X433D
X453D
X473E
X4841
X4846
X474A
XC13F
X433E
X453E
X473F
X4841
XCC3D
X4B40
X4846
X464A
X>
Xput
XMetrics
X/1129
X[-1
X14]
Xput
XCharStrings
X/1130
X<C83D
X463D
X443E
X433F
X4241
X4243
X4345
X4546
X4746
X4945
X4A44
X4B42
X4B40
X4A3E
X473C
X463A
X4639
X4738
X4938
X4A39
X4B3B
XC63D
X443F
X4341
X4344
X4546
XC746
X4944
X4A42
X4A3F
X483D
XC63A
X4739
X4939
X4B3B
X>
Xput
XMetrics
X/1130
X[1
X14]
Xput
XCharStrings
X/1131
X<CA3E
X483D
X453D
X433E
X433F
X4440
X4641
XC53D
X443E
X443F
X4641
XC641
X4342
X4243
X4245
X4446
X4746
X4945
XC641
X4442
X4343
X4345
X4446
X>
Xput
XMetrics
X/1131
X[-2
X12]
Xput
XCharStrings
X/1132
X<C639
X453A
X453B
X473C
X4A3C
X4A3B
X473C
X443D
X433E
X4240
X4242
X4344
X4445
X4646
X4747
X4749
X464A
X444A
X4349
XC73C
X453D
X443E
X4340
X4342
X4444
X4646
X>
Xput
XMetrics
X/1132
X[1
X11]
Xput
XCharStrings
X/1133
X<C140
X423E
X433D
X453D
X463E
X463F
X4446
XC43D
X453E
X453F
X4346
XC63F
X473E
X493D
X4B3D
X4D3E
X4D40
X4A4A
XCB3D
X4C3E
X4C40
X494A
X>
Xput
XMetrics
X/1133
X[-1
X16]
Xput
XCharStrings
X/1134
X<C141
X423F
X433E
X453E
X463F
X4644
X4746
XC43E
X453F
X4543
X4645
X4746
X4846
X4A45
X4B44
X4C42
X4D3F
X4D3C
X4C3A
X4B39
X4939
X483A
X483C
X493E
X4C40
X4E41
XC846
X4A44
X4B42
X4C3F
X4C3C
X4B39
X>
Xput
XMetrics
X/1134
X[-1
X16]
Xput
XCharStrings
X/1135
X<C43D
X4244
X4245
X4346
X4546
X4745
X4843
XC53D
X4344
X4345
X4446
X>
Xput
XMetrics
X/1135
X[-1
X9]
Xput
XCharStrings
X/1136
X<C43D
X4146
XC53D
X4246
XCA3D
X4B3E
X4C3E
X4B3D
X493D
X473F
X4440
XC440
X4541
X4745
X4946
X4B45
X4C43
XC440
X4641
X4845
X4946
X>
Xput
XMetrics
X/1136
X[-1
X14]
Xput
XCharStrings
X/1137
X<C039
X4239
X443A
X4B46
XC239
X433A
X4A46
XC63E
X4146
XC63E
X4246
X>
Xput
XMetrics
X/1137
X[1
X12]
Xput
XCharStrings
X/1138
X<C43D
X404A
XC53D
X414A
XC343
X4345
X4446
X4646
X4845
X4944
XCB3D
X4944
X4945
X4A46
X4C46
X4D45
X4E43
XCC3D
X4A44
X4A45
X4B46
X>
Xput
XMetrics
X/1138
X[0
X15]
Xput
XCharStrings
X/1139
X<C43D
X4346
XC53D
X4443
X4346
XCC40
X4C3D
X4D3D
X4C40
X4A43
X4745
X4446
X4346
XC23D
X453D
X>
Xput
XMetrics
X/1139
X[-2
X15]
Xput
XCharStrings
X/1140
X<C539
X443A
X443B
X463C
X493C
XC73C
X443D
X433E
X4340
X4541
X4841
XC73C
X453D
X443E
X4440
X4541
XC641
X4342
X4243
X4245
X4446
X4647
X4748
X4749
X464A
X444A
XC641
X4442
X4343
X4345
X4446
X>
Xput
XMetrics
X/1140
X[2
X11]
Xput
XCharStrings
X/1141
X<C63D
X443E
X433F
X4241
X4243
X4345
X4546
X4746
X4945
X4A44
X4B42
X4B40
X4A3E
X483D
X463D
XC63D
X443F
X4341
X4344
X4546
XC746
X4944
X4A42
X4A3F
X483D
X>
Xput
XMetrics
X/1141
X[-2
X13]
Xput
XCharStrings
X/1142
X<C73E
X4446
XC73E
X4546
XCB3E
X4A46
XCB3E
X4B46
XC23F
X443D
X4F3D
XC23F
X443E
X4F3E
X>
Xput
XMetrics
X/1142
X[-2
X17]
Xput
XCharStrings
X/1143
X<C93D
X473D
X453E
X443F
X4341
X404A
XC73D
X453F
X4441
X414A
XC93D
X4B3E
X4C40
X4C42
X4B44
X4A45
X4846
X4646
X4445
X4343
XC93D
X4B3F
X4B42
X4A44
X4846
X>
Xput
XMetrics
X/1143
X[0
X14]
Xput
XCharStrings
X/1144
X<CE3D
X463D
X443E
X433F
X4241
X4243
X4345
X4546
X4746
X4945
X4A44
X4B42
X4B40
X4A3E
X4E3E
XC63D
X443F
X4341
X4344
X4546
XC746
X4944
X4A42
X4A3F
X483D
X>
Xput
XMetrics
X/1144
X[-2
X16]
Xput
XCharStrings
X/1145
X<C83E
X4646
XC83E
X4746
XC23F
X443D
X4D3D
XC23F
X443E
X4D3E
X>
Xput
XMetrics
X/1145
X[-2
X15]
Xput
XCharStrings
X/1146
X<C140
X423E
X433D
X453D
X463E
X4640
X4543
X4545
X4646
XC43D
X453E
X4540
X4443
X4445
X4646
X4746
X4945
X4B43
X4C40
X4C3D
X4B3D
X4C3E
X>
Xput
XMetrics
X/1146
X[-1
X14]
Xput
XCharStrings
X/1147
X<C43E
X433F
X4241
X4243
X4345
X4546
X4746
X4A45
X4C43
X4D40
X4D3E
X4C3D
X4A3D
X493E
X4840
X4743
X444A
XC243
X4344
X4545
X4745
X4A44
X4C42
X4D40
XCD3F
X4C3E
X4A3E
X4840
XC743
X4646
X454A
X>
Xput
XMetrics
X/1147
X[-2
X15]
Xput
XCharStrings
X/1148
X<C23D
X433D
X453E
X4849
X494A
XC33D
X443E
X4749
X494A
X4A4A
XCB3D
X4940
X4347
X414A
X>
Xput
XMetrics
X/1148
X[-1
X13]
Xput
XCharStrings
X/1149
X<CB39
X484A
XCC39
X474A
XC140
X423E
X433D
X453D
X463E
X4644
X4745
X4A45
X4C44
X4E42
XC43D
X453E
X4542
X4645
X4746
X4A46
X4C45
X4E42
X4F40
X503D
X>
Xput
XMetrics
X/1149
X[-1
X18]
Xput
XCharStrings
X/1150
X<C43E
X463E
X463D
X443E
X433F
X4241
X4243
X4345
X4446
X4646
X4745
X4843
X4940
XC243
X4445
X4645
X4843
XC840
X4845
X4946
X4B46
X4D44
X4E42
X4E40
X4D3E
X4C3D
X4C3E
X4D3E
XC843
X4945
X4B45
X4D44
X>
Xput
XMetrics
X/1150
X[-2
X16]
Xput
XCharStrings
X/1027
X<C739
X4246
XC73C
X4B46
XC739
X4C46
XC442
X4942
XC046
X4546
XC946
X4E46
X>
Xput
XMetrics
X/1027
X[0
X14]
Xput
XCharStrings
X/1028
X<C439
X4446
XC539
X4546
XC239
X4939
X4C3A
X4D3C
X4C3E
X493F
XC939
X4B3A
X4C3C
X4B3E
X493F
XC53F
X493F
X4C40
X4D42
X4D43
X4C45
X4946
X4246
XC93F
X4B40
X4C42
X4C43
X4B45
X4946
X>
Xput
XMetrics
X/1028
X[-1
X16]
Xput
XCharStrings
X/1029
X<C439
X4446
XC539
X4546
XC239
X4C39
X4C3D
X4B39
XC246
X4746
X>
Xput
XMetrics
X/1029
X[0
X13]
Xput
XCharStrings
X/1030
X<C739
X4146
XC73B
X4C46
XC739
X4D46
XC245
X4B45
XC146
X4D46
X>
Xput
XMetrics
X/1030
X[0
X14]
Xput
XCharStrings
X/1031
X<C439
X4446
XC539
X4546
XC93D
X4941
XC239
X4C39
X4C3D
X4B39
XC53F
X493F
XC246
X4C46
X4C42
X4B46
X>
Xput
XMetrics
X/1031
X[-1
X15]
Xput
XCharStrings
X/1032
X<CA39
X4246
XCB39
X4346
XC339
X423D
X4239
X4B39
XC246
X4B46
X4B42
X4A46
X>
Xput
XMetrics
X/1032
X[1
X13]
Xput
XCharStrings
X/1033
X<C439
X4446
XC539
X4546
XCC39
X4C46
XCD39
X4D46
XC239
X4739
XCA39
X4F39
XC53F
X4C3F
XC246
X4746
XCA46
X4F46
X>
Xput
XMetrics
X/1033
X[-1
X17]
Xput
XCharStrings
X/1034
X<C639
X443A
X433B
X423E
X4241
X4344
X4445
X4646
X4946
X4B45
X4C44
X4D41
X4D3E
X4C3B
X4B3A
X4939
X4639
XC639
X443B
X433E
X4341
X4444
X4646
XC946
X4B44
X4C41
X4C3E
X4B3B
X4939
XC63D
X4642
XC93D
X4942
XC63F
X493F
XC640
X4940
X>
Xput
XMetrics
X/1034
X[0
X15]
Xput
XCharStrings
X/1035
X<C439
X4446
XC539
X4546
XC239
X4739
XC246
X4746
X>
Xput
XMetrics
X/1035
X[3
X9]
Xput
XCharStrings
X/1036
X<C439
X4446
XC539
X4546
XCD39
X4541
XC73F
X4C46
XC83F
X4D46
XC239
X4739
XCA39
X4F39
XC246
X4746
XCA46
X4F46
X>
Xput
XMetrics
X/1036
X[-1
X16]
Xput
XCharStrings
X/1037
X<C739
X4246
XC73C
X4B46
XC739
X4C46
XC046
X4546
XC946
X4E46
X>
Xput
XMetrics
X/1037
X[0
X14]
Xput
XCharStrings
X/1038
X<C439
X4446
XC53C
X4946
XC539
X4943
XCE39
X4946
XCE39
X4E46
XCF39
X4F46
XC239
X4539
XCE39
X5139
XC246
X4646
XCC46
X5146
X>
Xput
XMetrics
X/1038
X[-2
X19]
Xput
XCharStrings
X/1039
X<C439
X4446
XC53B
X4C46
XC539
X4C44
XCC39
X4C46
XC239
X4539
XCA39
X4E39
XC246
X4646
X>
Xput
XMetrics
X/1039
X[-1
X16]
Xput
XCharStrings
X/1040
X<C338
X423B
XCE38
X4D3B
XC63E
X4541
XCB3E
X4A41
XC344
X4247
XCE44
X4D47
XC339
X4D39
XC33A
X4D3A
XC63F
X4A3F
XC640
X4A40
XC345
X4D45
XC346
X4D46
X>
Xput
XMetrics
X/1040
X[0
X16]
Xput
XCharStrings
X/1041
X<C639
X443A
X433B
X423E
X4241
X4344
X4445
X4646
X4946
X4B45
X4C44
X4D41
X4D3E
X4C3B
X4B3A
X4939
X4639
XC639
X443B
X433E
X4341
X4444
X4646
XC946
X4B44
X4C41
X4C3E
X4B3B
X4939
X>
Xput
XMetrics
X/1041
X[0
X15]
Xput
XCharStrings
X/1042
X<C439
X4446
XC539
X4546
XCC39
X4C46
XCD39
X4D46
XC239
X4F39
XC246
X4746
XCA46
X4F46
X>
Xput
XMetrics
X/1042
X[-1
X17]
Xput
XCharStrings
X/1043
X<C439
X4446
XC539
X4546
XC239
X4939
X4C3A
X4D3C
X4D3D
X4C3F
X4940
X4540
XC939
X4B3A
X4C3C
X4C3D
X4B3F
X4940
XC246
X4746
X>
Xput
XMetrics
X/1043
X[-1
X15]
Xput
XCharStrings
X/1044
X<C239
X473F
XC339
X483F
X4246
XC239
X4C39
X4D3D
X4B39
XC345
X4C45
XC246
X4C46
X4D42
X4B46
X>
Xput
XMetrics
X/1044
X[0
X16]
Xput
XCharStrings
X/1045
X<C739
X4746
XC839
X4846
XC339
X423D
X4239
X4D39
X4D3D
X4C39
XC546
X4A46
X>
Xput
XMetrics
X/1045
X[0
X15]
Xput
XCharStrings
X/1046
X<C23D
X433A
X4439
X4539
X463A
X473D
X4746
XCD3D
X4C3A
X4B39
X4A39
X493A
X483D
X4846
XC23D
X433B
X443A
X453A
X463B
X473D
XCD3D
X4C3B
X4B3A
X4A3A
X493B
X483D
XC546
X4A46
X>
Xput
XMetrics
X/1046
X[0
X15]
Xput
XCharStrings
X/1047
X<C739
X4746
XC839
X4846
XC63C
X433D
X423F
X4240
X4342
X4643
X4943
X4C42
X4D40
X4D3F
X4C3D
X493C
X463C
XC63C
X443D
X433F
X4340
X4442
X4643
XC943
X4B42
X4C40
X4C3F
X4B3D
X493C
XC539
X4A39
XC546
X4A46
X>
Xput
XMetrics
X/1047
X[0
X15]
Xput
XCharStrings
X/1048
X<C339
X4B46
XC439
X4C46
XCC39
X4346
XC139
X4639
XC939
X4E39
XC146
X4646
XC946
X4E46
X>
Xput
XMetrics
X/1048
X[0
X15]
Xput
XCharStrings
X/1049
X<C839
X4846
XC939
X4946
XC23E
X433D
X443D
X4541
X4743
XCA43
X4C41
X4D3D
X4E3D
X4F3E
XC33D
X4440
X4542
X4743
X4A43
X4C42
X4D40
X4E3D
XC639
X4B39
XC646
X4B46
X>
Xput
XMetrics
X/1049
X[-1
X17]
Xput
XCharStrings
X/1050
X<C244
X4346
X4646
X4240
X423D
X433B
X443A
X4639
X4939
X4B3A
X4C3B
X4D3D
X4D40
X4946
X4C46
X4D44
XC443
X4340
X433D
X443B
X4639
XC939
X4B3B
X4C3D
X4C40
X4B43
XC345
X4545
XCA45
X4C45
X>
Xput
XMetrics
X/1050
X[0
X15]
Xput
END_OF_FILE
if test 7459 -ne `wc -c <'postscript/fonts/times/greek.r'`; then
    echo shar: \"'postscript/fonts/times/greek.r'\" unpacked with wrong size!
fi
# end of 'postscript/fonts/times/greek.r'
fi
if test -f 'source/device.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/device.c'\"
else
echo shar: Extracting \"'source/device.c'\" \(7801 characters\)
sed "s/^X//" >'source/device.c' <<'END_OF_FILE'
X/*
X * Copyright (C) Rutherford Appleton Laboratory 1987
X * 
X * This source may be copied, distributed, altered or used, but not sold for profit
X * or incorporated into a product except under licence from the author.
X * It is not in the public domain.
X * This notice should remain in the source unaltered, and any changes to the source
X * made by persons other than the author should be marked as such.
X * 
X *	Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd
X */
X#include "main.h"
X#include "graphics.h"
X
Xstatic int NullDevice ();
Xstatic int FrameDevice ();
Xstatic int GrabBits ();
X
XColour Black = { 0.0, 0.0, 0.0 }, White = { 0.0, 0.0, 1.0 };
X
Xstruct device *NewWindowDevice (), *NewBitmapDevice (), *NewCacheDevice ();
X
XInitDevices ()
X {
X 	struct hardware *h;
X 	DevicePoint extent;
X 	
X	InstallOp ("framedevice",	FrameDevice, 		4, 0, 0, 0, Array, Integer, Integer, Array);
X	InstallOp ("nulldevice",	NullDevice,		0, 0, 0, 0);
X	InstallOp ("grabbits",		GrabBits,		4, 0, 0, 0, Float, Float, Float, Float);
X	
X	extent = HardwareExtent (h = InitHardware ());
X 	gstate->device = NULL; gstate->clipdevice = NULL;
X	SetDevice (LinkDevice (DeviceFrom (h, DeviceMatrix (extent.dx, extent.dy))));
X }
X
Xstatic int GrabBits (x, y, w, h) Object x, y, w, h;
X {
X 	HardPoint origin, corner, extent;
X 	int width, height, size;
X 	char *s;
X 	struct hardware *dev;
X 	
X 	origin = ExtToInt (NewPoint (BodyReal (x), BodyReal (y)));
X 	corner = ExtToInt (NewPoint (BodyReal (x) + BodyReal (w), BodyReal (y) + BodyReal (h)));
X 	width = corner.hx - origin.hx;
X 	height = corner.hy - origin.hy;
X 	
X 	fprintf (stderr, "width = %d, height = %d\n", width, height);
X 	
X 	extent = NewHardPoint ((float) width, (float) height);
X 	
X 	dev = NewBitmapHardware (width, height);
X 	
X 	BitBlt (gstate->device->dev, dev,
X 		NewDevicePoint ((int) origin.hx, (int) origin.hy),
X 		NewDevicePoint (0, 0),
X 		NewDevicePoint ((int) extent.hx, (int) extent.hy),
X 		ROP_SOURCE);
X 	s = StringFromHardware (dev);
X 	DestroyHardware (dev);
X 	size = (width + 7) / 8 * height;
X 	
X 	Push (OpStack, MakeString (s, size));
X 	Free (s);
X 	Push (OpStack, MakeInteger (width));
X 	Push (OpStack, MakeInteger (height));
X 	
X 	return TRUE;
X }
X
Xstatic int NullDevice ()
X {
X 	SetDevice (
X 		NewDevice (
X 			NewClipPath (0.0, 0.0, 0.0, 0.0),
X 			NewMatrix (1.0, 0.0, 0.0, 1.0, 0.0, 0.0),
X 			(struct hardware *) NULL));
X 	return TRUE;
X }
X
X/*ARGSUSED*/
Xstatic int FrameDevice (mat, width, height, proc) Object mat, width, height, proc;
X {
X 	Matrix m;
X 	
X 	if (lengthArray (mat) != 6 || !ExtractMatrix (&m, mat))
X 		return Error (PTypeCheck);
X 	if (BodyInteger (width) < 0 || BodyInteger (height) < 0)
X 		return Error (PRangeCheck);
X 	SetDevice (NewWindowDevice (BodyInteger (width) * 8, BodyInteger (height), m));
X 	ErasePage ();
X 	
X	return TRUE;
X }
X
Xstruct device *DeviceFrom (h, m) struct hardware *h; Matrix m;
X {
X 	DevicePoint extent;
X 	
X 	extent = HardwareExtent (h);
X 	return NewDevice (
X 			NewClipPath (0.0, (float) extent.dx, (float) extent.dy, 0.0),
X 			m,
X 			h);
X }
X
Xstruct device *NewWindowDevice (width, height, m) int width, height; Matrix m;
X {
X 	return DeviceFrom (NewWindowHardware (width, height), m);
X }
X
Xstruct device *NewBitmapDevice (width, height, m) int width, height; Matrix m;
X {
X 	return DeviceFrom (NewBitmapHardware (width, height), m);
X }
X
Xstruct device *NewCacheDevice (m, width, height, swidth, sheight) Matrix m; int width, height, swidth, sheight;
X {
X 	return NewDevice (
X 			NewClipPath (0.0, (float) width, (float) height, 0.0),
X 			NewMatrix (m.A, m.B, m.C, m.D, (float) swidth, (float) height - sheight),
X 			NewBitmapHardware (width, height));
X }
X
XPath NewClipPath (left, right, top, bottom) float left, right, top, bottom;
X {
X 	Path p = NewPath ();
X 	HardPoint cp;
X 	int cp_def = gstate->cp_defined;
X 	
X 	cp = gstate->cp;
X 	VOID MoveTo (p, NewHardPoint (left, 	bottom));
X 	VOID LineTo (p, NewHardPoint (right, bottom));
X 	VOID LineTo (p, NewHardPoint (right, top));
X 	VOID LineTo (p, NewHardPoint (left,  top));
X 	ClosePath (p);
X 	
X 	gstate->cp = cp; gstate->cp_defined = cp_def;
X 	
X 	return p;
X }
X
Xstruct device *NewDevice (clip, m, dev) Path clip; Matrix m; struct hardware *dev;
X {
X 	struct device *res = (struct device *) Malloc (sizeof (struct device));
X 	
X 	res->link_count = 0;
X 	res->default_clip = clip;
X 	res->default_matrix = m;
X 	res->dev = dev;
X 	
X 	return res;
X }
X
XSetDevice (d) struct device *d;
X {
X 	UnlinkDevice (gstate->device);
X 	gstate->device = LinkDevice (d);
X 	gstate->CTM = d->default_matrix;
X 	InitClip ();
X }
X
Xint IsCache (d) struct device *d;
X {
X	return !IsWindowHardware (d->dev);
X }
X
Xstruct device *LinkDevice (d) struct device *d;
X {
X 	if (d)
X 		++d->link_count;
X 	
X	return d;
X }
X
XUnlinkDevice (d) struct device *d;
X {
X 	if (d == NULL)
X 		return;
X 	if (--d->link_count != 0)
X		return;
X	if (d->dev != NULL)
X 		DestroyHardware (d->dev);	
X 	Free ((char *) d);
X }
X
Xstruct device *UniqueDevice (d) struct device *d;
X {
X 	struct device *res;
X 	DevicePoint ex;
X 	
X 	if (d && d->link_count == 1)
X 		return d;
X 	ex = HardwareExtent (gstate->device->dev);
X 	res = LinkDevice (NewBitmapDevice (ex.dx, ex.dy, gstate->CTM));
X 	/*if (d)
X 	 {
X 	 	BitBlt (d->dev, res->dev, NewDevicePoint (0, 0), NewDevicePoint (0, 0), ex, ROP_SOURCE);
X 		UnlinkDevice (d);
X 	 }
X 	else
X 		*/BitBlt (NULL, res->dev, NewDevicePoint (0, 0), NewDevicePoint (0, 0), ex, ROP_FALSE);
X 	
X 	return res;
X }
X
XDevicePoint NewDevicePoint (x, y) int x, y;
X {
X 	DevicePoint res;
X 	
X 	res.dx = x; res.dy = y;
X 	
X 	return res;
X }
X
XDevicePoint HardToDevice (p) HardPoint p;
X {
X 	return NewDevicePoint ((int) p.hx, (int) p.hy);
X }
X
XDevicePaintLine (d, fromPoint, toPoint, colour)
X	struct device *d;
X	HardPoint fromPoint, toPoint;
X	Colour colour;
X {
X 	PaintLine (d->dev, HardToDevice (fromPoint), HardToDevice (toPoint), colour);
X }
X
X/*
Xvoid ColourLine (h, fromPoint, toPoint, rop, colour) 
X  	struct hardware *h;
X	DevicePoint fromPoint, toPoint;
X	int rop;
X	Colour colour;
X {
X 	int x1 = fromPoint.dx, y1 = fromPoint.dy, x2 = toPoint.dx, y2 = toPoint.dy;
X 	int col = IsWindowHardware (h) ? HardColour (colour) : HardBlack;
X	
X 	if (col == HardBlack)
X 	 {
X 	 	ddbm = h->bm;
X 	 	dd->d_line = rop_map [rop];
X		line (x1, y1, LNMOVEABS);
X 		line (x2, y2, LNDRAWABS);
X	 }
X 	else
X 	 {
X 	 	box b;
X 	 	
X 	 	b = boxbuild (Min (x1, x2), Min (y1, y2), Max (x1, x2), Max (y1, y2));
X 	 	
X 	 	NeedAux (h);
X 	 	GraySync (h, col);
X 	 	bmxcopy (h->bm, b, h->bm, b, WWXOR);
X 	 	
X 	 	ddbm = h->aux;
X 	 	dd->d_line = WWOR;
X 		line (x1, y1, LNMOVEABS);
X 		line (x2, y2, LNDRAWABS);
X 		
X 	 	bmxcopy (h->aux,  b, h->bm,  b, WWAND | WWNOT);
X 	 	bmxcopy (h->gray, b, h->aux, b, WWAND);
X  		bmxcopy (h->aux,  b, h->bm,  b, rop_map [rop]);
X	 	
X	 }
X }
X*/
X
X/*
Xvoid ColourBitBlt (from, to, fromPoint, toPoint, extent, rop, colour)
X	struct hardware *from, *to;
X	DevicePoint fromPoint, toPoint, extent;
X	int rop;
X	Colour colour;
X {
X 	box frombox, tobox;
X 	int col = IsWindowHardware (to) ? HardColour (colour) : HardBlack;
X 	int op = rop_map [rop];
X 	
X 	
X 	frombox = boxbuild (fromPoint.dx, fromPoint.dy,
X 		fromPoint.dx + extent.dx - 1, fromPoint.dy + extent.dy - 1);
X 	tobox = boxbuild (toPoint.dx, toPoint.dy,
X 		toPoint.dx + extent.dx - 1, toPoint.dy + extent.dy - 1);
X 	
X	if (to == NULL)
X 		return;
X 	
X 	if (rop == ROP_FALSE)
X		bmxcopy (to->bm, tobox, to->bm, tobox, WWXOR);
X 	else if (rop == ROP_TRUE)
X		if (col == HardBlack)
X 			bmxcopy (to->bm, tobox, to->bm, tobox, WWXOR | WWNOT);
X 		else
X		 {
X 			GraySync (to, col);
X			bmxcopy (to->gray, tobox, to->bm, tobox, WWCOPY);
X		 }
X	else if (col == HardBlack)
X		bmxcopy (from->bm, frombox, to->bm, tobox, op);
X	else
X	 {
X 		GraySync (to, col);
X		NeedAux (to);
X		bmxcopy (to->gray, tobox, to->aux, tobox, WWCOPY);
X		bmxcopy (from->bm, frombox, to->aux, tobox, WWAND);
X		bmxcopy (to->aux, tobox, to->bm, tobox, op);
X	 }
X }
X*/
END_OF_FILE
if test 7801 -ne `wc -c <'source/device.c'`; then
    echo shar: \"'source/device.c'\" unpacked with wrong size!
fi
# end of 'source/device.c'
fi
echo shar: End of archive 5 \(of 18\).
cp /dev/null ark5isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 18 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0