Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!uunet!rsalz
From: rsalz@uunet.UU.NET (Rich Salz)
Newsgroups: comp.sources.unix
Subject: REPOST v12i055:  A PostScript interpreter, Part06/18
Message-ID: <3630@uunet.UU.NET>
Date: Sun, 29-Nov-87 18:56:22 EST
Article-I.D.: uunet.3630
Posted: Sun Nov 29 18:56:22 1987
Date-Received: Wed, 2-Dec-87 20:55:52 EST
Organization: UUNET Communications Services, Arlington, VA
Lines: 4540
Approved: rs@uunet.UU.NET

Submitted-by: Crispin Goswell 
Posting-number: Volume 12, Issue 55
Archive-name: postscript/part06

[  Sorry for the delays; when the net was free, I was  busy.  --r$  ]

#! /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 'postscript/fonts/Times/greek.r' <<'END_OF_FILE'
XCharStrings
X/2027
X
Xput
XMetrics
X/2027
X[2
X20]
Xput
XCharStrings
X/2028
X
Xput
XMetrics
X/2028
X[1
X22]
Xput
XCharStrings
X/2029
X
Xput
XMetrics
X/2029
X[3
X18]
Xput
XCharStrings
X/2030
X
Xput
XMetrics
X/2030
X[2
X20]
Xput
XCharStrings
X/2031
X
Xput
XMetrics
X/2031
X[1
X21]
Xput
XCharStrings
X/2032
X
Xput
XMetrics
X/2032
X[2
X20]
Xput
XCharStrings
X/2033
X
Xput
XMetrics
X/2033
X[0
X24]
Xput
XCharStrings
X/2034
X
Xput
XMetrics
X/2034
X[1
X22]
Xput
XCharStrings
X/2035
X
Xput
XMetrics
X/2035
X[7
X11]
Xput
XCharStrings
X/2036
X
Xput
XMetrics
X/2036
X[0
X22]
Xput
XCharStrings
X/2037
X
Xput
XMetrics
X/2037
X[2
X20]
Xput
XCharStrings
X/2038
X
Xput
XMetrics
X/2038
X[0
X25]
Xput
XCharStrings
X/2039
X
Xput
XMetrics
X/2039
X[1
X23]
Xput
XCharStrings
X/2040
X
Xput
XMetrics
X/2040
X[2
X22]
Xput
XCharStrings
X/2041
X
Xput
XMetrics
X/2041
X[1
X22]
Xput
XCharStrings
X/2042
X
Xput
XMetrics
X/2042
X[0
X24]
Xput
XCharStrings
X/2043
X
Xput
XMetrics
X/2043
X[1
X22]
Xput
XCharStrings
X/2044
X
Xput
XMetrics
X/2044
X[2
X21]
Xput
XCharStrings
X/2045
X
Xput
XMetrics
X/2045
X[3
X19]
Xput
XCharStrings
X/2046
X
Xput
XMetrics
X/2046
X[3
X19]
Xput
XCharStrings
X/2047
X
Xput
XMetrics
X/2047
X[2
X21]
Xput
XCharStrings
X/2048
X
Xput
XMetrics
X/2048
X[2
X20]
Xput
XCharStrings
X/2049
X
Xput
XMetrics
X/2049
X[1
X23]
Xput
XCharStrings
X/2050
X
Xput
XMetrics
X/2050
X[1
X22]
Xput
XCharStrings
X/2127
X
Xput
XMetrics
X/2127
X[-3
X23]
Xput
XCharStrings
X/2128
X
Xput
XMetrics
X/2128
X[1
X21]
Xput
XCharStrings
X/2129
X
Xput
XMetrics
X/2129
X[-1
X20]
Xput
XCharStrings
X/2130
X
Xput
XMetrics
X/2130
X[4
X19]
Xput
XCharStrings
X/2131
X
Xput
XMetrics
X/2131
X[-3
X18]
Xput
XCharStrings
X/2132
X
Xput
XMetrics
X/2132
X[3
X18]
Xput
XCharStrings
X/2133
X
Xput
XMetrics
X/2133
X[-1
X22]
Xput
XCharStrings
X/2134
X
Xput
XMetrics
X/2134
X[0
X23]
Xput
XCharStrings
X/2135
X
Xput
XMetrics
X/2135
X[-1
X12]
Xput
XCharStrings
X/2136
X
Xput
XMetrics
X/2136
X[-2
X20]
Xput
XCharStrings
X/2137
X
Xput
XMetrics
X/2137
X[2
X20]
Xput
XCharStrings
X/2138
X
Xput
XMetrics
X/2138
X[-1
X23]
Xput
XCharStrings
X/2139
X
Xput
XMetrics
X/2139
X[-3
X20]
Xput
XCharStrings
X/2140
X
Xput
XMetrics
X/2140
X[3
X17]
Xput
XCharStrings
X/2141
X
Xput
XMetrics
X/2141
X[-3
X18]
Xput
XCharStrings
X/2142
X
Xput
XMetrics
X/2142
X[-2
X22]
Xput
XCharStrings
X/2143
X
Xput
XMetrics
X/2143
X[0
X19]
Xput
XCharStrings
X/2144
X
Xput
XMetrics
X/2144
X[-3
X21]
Xput
XCharStrings
X/2145
X
Xput
XMetrics
X/2145
X[-2
X20]
Xput
XCharStrings
X/2146
X
Xput
XMetrics
X/2146
X[-1
X20]
Xput
XCharStrings
X/2147
X
Xput
XMetrics
X/2147
X[-3
X22]
Xput
XCharStrings
X/2148
X
Xput
XMetrics
X/2148
X[-1
X18]
Xput
XCharStrings
X/2149
X
Xput
XMetrics
X/2149
X[0
X23]
Xput
XCharStrings
X/2150
X
Xput
XMetrics
X/2150
X[-3
X23]
Xput
END_OF_FILE
if test 8441 -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 'postscript/fonts/Times/roman.r' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'postscript/fonts/Times/roman.r'\"
else
echo shar: Extracting \"'postscript/fonts/Times/roman.r'\" \(9406 characters\)
sed "s/^X//" >'postscript/fonts/Times/roman.r' <<'END_OF_FILE'
XCharStrings
X/a
X
Xput
XMetrics
X/a
X[-3
X20]
Xput
XCharStrings
X/b
X
Xput
XMetrics
X/b
X[1
X21]
Xput
XCharStrings
X/c
X
Xput
XMetrics
X/c
X[-3
X19]
Xput
XCharStrings
X/d
X
Xput
XMetrics
X/d
X[2
X21]
Xput
XCharStrings
X/e
X
Xput
XMetrics
X/e
X[-3
X19]
Xput
XCharStrings
X/f
X
Xput
XMetrics
X/f
X[5
X13]
Xput
XCharStrings
X/g
X
Xput
XMetrics
X/g
X[-2
X19]
Xput
XCharStrings
X/h
X
Xput
XMetrics
X/h
X[1
X22]
Xput
XCharStrings
X/i
X
Xput
XMetrics
X/i
X[7
X11]
Xput
XCharStrings
X/j
X
Xput
XMetrics
X/j
X[7
X11]
Xput
XCharStrings
X/k
X
Xput
XMetrics
X/k
X[1
X21]
Xput
XCharStrings
X/l
X
Xput
XMetrics
X/l
X[7
X11]
Xput
XCharStrings
X/m
X
Xput
XMetrics
X/m
X[-2
X33]
Xput
XCharStrings
X/n
X
Xput
XMetrics
X/n
X[-2
X22]
Xput
XCharStrings
X/o
X
Xput
XMetrics
X/o
X[-3
X20]
Xput
XCharStrings
X/p
X
Xput
XMetrics
X/p
X[-2
X21]
Xput
XCharStrings
X/q
X
Xput
XMetrics
X/q
X[-3
X20]
Xput
XCharStrings
X/r
X
Xput
XMetrics
X/r
X[-2
X17]
Xput
XCharStrings
X/s
X
Xput
XMetrics
X/s
X[-3
X17]
Xput
XCharStrings
X/t
X
Xput
XMetrics
X/t
X[5
X15]
Xput
XCharStrings
X/u
X
Xput
XMetrics
X/u
X[-2
X22]
Xput
XCharStrings
X/v
X
Xput
XMetrics
X/v
X[-1
X18]
Xput
XCharStrings
X/w
X
Xput
XMetrics
X/w
X[-1
X24]
Xput
XCharStrings
X/x
X
Xput
XMetrics
X/x
X[-2
X20]
Xput
XCharStrings
X/y
X
Xput
XMetrics
X/y
X[-2
X19]
Xput
XCharStrings
X/z
X
Xput
XMetrics
X/z
X[-3
X18]
Xput
XCharStrings
X/space
X()
Xput
XMetrics
X/space
X[0
X20]
Xput
XCharStrings
X/A
X
Xput
XMetrics
X/A
X[2
X20]
Xput
XCharStrings
X/B
X
Xput
XMetrics
X/B
X[1
X22]
Xput
XCharStrings
X/C
X
Xput
XMetrics
X/C
X[1
X21]
Xput
XCharStrings
X/D
X
Xput
XMetrics
X/D
X[1
X22]
Xput
XCharStrings
X/E
X
Xput
XMetrics
X/E
X[1
X21]
Xput
XCharStrings
X/F
X
Xput
XMetrics
X/F
X[1
X20]
Xput
XCharStrings
X/G
X
Xput
XMetrics
X/G
X[1
X23]
Xput
XCharStrings
X/H
X
Xput
XMetrics
X/H
X[0
X24]
Xput
XCharStrings
X/I
X
Xput
XMetrics
X/I
X[7
X11]
Xput
XCharStrings
X/J
X
Xput
XMetrics
X/J
X[5
X15]
Xput
XCharStrings
X/K
X
Xput
XMetrics
X/K
X[0
X22]
Xput
XCharStrings
X/L
X
Xput
XMetrics
X/L
X[3
X18]
Xput
XCharStrings
X/M
X
Xput
XMetrics
X/M
X[0
X25]
Xput
XCharStrings
X/N
X
Xput
XMetrics
X/N
X[1
X23]
Xput
XCharStrings
X/O
X
Xput
XMetrics
X/O
X[1
X22]
Xput
XCharStrings
X/P
X
Xput
XMetrics
X/P
X[1
X22]
Xput
XCharStrings
X/Q
X
Xput
XMetrics
X/Q
X[1
X22]
Xput
XCharStrings
X/R
X
Xput
XMetrics
X/R
X[1
X22]
Xput
XCharStrings
X/S
X
Xput
XMetrics
X/S
X[2
X20]
Xput
XCharStrings
X/T
X
Xput
XMetrics
X/T
X[3
X19]
Xput
XCharStrings
X/U
X
Xput
XMetrics
X/U
X[0
X24]
Xput
XCharStrings
X/V
X
Xput
XMetrics
X/V
X[2
X20]
Xput
XCharStrings
X/W
X
Xput
XMetrics
X/W
X[0
X24]
Xput
XCharStrings
X/X
X
Xput
XMetrics
X/X
X[2
X20]
Xput
XCharStrings
X/Y
X
Xput
XMetrics
X/Y
X[2
X21]
Xput
XCharStrings
X/Z
X
Xput
XMetrics
X/Z
X[2
X20]
Xput
XCharStrings
X/ff
X
Xput
XMetrics
X/ff
X[1
X23]
Xput
XCharStrings
X/fi
X
Xput
XMetrics
X/fi
X[1
X22]
Xput
XCharStrings
X/fl
X
Xput
XMetrics
X/fl
X[1
X22]
Xput
XCharStrings
X/ffi
X
Xput
XMetrics
X/ffi
X[-2
X33]
Xput
XCharStrings
X/ffl
X
Xput
XMetrics
X/ffl
X[-2
X33]
Xput
XCharStrings
X/dotlessi
X
Xput
XMetrics
X/dotlessi
X[0
X11]
Xput
END_OF_FILE
if test 9406 -ne `wc -c <'postscript/fonts/Times/roman.r'`; then
    echo shar: \"'postscript/fonts/Times/roman.r'\" unpacked with wrong size!
fi
# end of 'postscript/fonts/Times/roman.r'
fi
if test -f 'source/colour-ww.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/colour-ww.c'\"
else
echo shar: Extracting \"'source/colour-ww.c'\" \(9048 characters\)
sed "s/^X//" >'source/colour-ww.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#include "canon.h"
X#include "wwinfo.h"
X
Xstatic void xxrasterop ();
X
Xstatic struct hardware *NewHardware ();
X
X#define COLOURS 256
X
Xstatic unsigned char reds[COLOURS], greens[COLOURS], blues[COLOURS];
Xstatic int colours_used = 0;
X
Xstruct hardware *InitHardware ()
X {
X	wwstartup (COLOURS);
X 	InitTransfer (wwask (ASKXPPI));
X 	
X 	return NULL;
X }
X
Xint HardColour (h, colour) struct hardware *h; Colour colour;
X {
X	float r, g, b;
X	unsigned char red, green, blue;
X	int i;
X	
X	ColourRGB (colour, &r, &g, &b);
X	
X	red = 255 * r; green = 255 * g; blue = 255 * b;
X	for (i = 0; i < colours_used; i++)
X		if (reds[i] == red && greens[i] == green && blues[i] == blue)
X			return i;
X	if (colours_used == COLOURS)
X		return 0;
X	reds[colours_used] = red; greens[colours_used] = green; blues[colours_used] = blue;
X	colours_used++;
X	
X	InstallColour (h, i);
X	return i;
X }
X
Xvoid Paint  (from, to, fromPoint, toPoint, extent, colour)
X	struct hardware *from, *to;
X	DevicePoint fromPoint, toPoint, extent;
X	Colour colour;
X {
X	dd->d_fore = HardColour (to, colour);
X	BitBlt (from, to, fromPoint, toPoint, extent, ROP_OR);
X }
X
Xvoid PaintLine (h, fromPoint, toPoint, colour)
X	struct hardware *h;
X	DevicePoint fromPoint, toPoint;
X	Colour colour;
X {
X	dd->d_fore = HardColour (h, colour);
X	BitBltLine (h, fromPoint, toPoint, ROP_TRUE);
X }
X
Xvoid PaintTrapezoid (to, lefttop, leftbottom, righttop, rightbottom, top, bottom, colour)
X	struct hardware *to;
X	DevicePoint lefttop, leftbottom, righttop, rightbottom;
X	int top, bottom;
X	Colour colour;
X {
X	dd->d_fore = HardColour (to, colour);
X	BitBltTrapezoid (to, lefttop, leftbottom, righttop, rightbottom, top, bottom, ROP_TRUE);
X }
X
X#define TRANSFER_SIZE	256
X
Xstatic int transfer [TRANSFER_SIZE];
X
Xvoid InitTransfer (ppi) int ppi;
X {
X 	int i;
X 	
X 	pixels_per_inch = ppi;
X 	for (i = 0; i < TRANSFER_SIZE; i++)
X 		transfer [i] = i;
X }
X
Xint TransferSize ()
X {
X	return TRANSFER_SIZE;
X }
X
Xvoid SetTransfer (tran) float *tran;
X {
X 	int i;
X 	
X 	for (i = 0; i < TRANSFER_SIZE; i++)
X 		transfer [i] = (TRANSFER_SIZE - 1) * tran[i] + .5;
X }
X
Xint ScreenSize (freq, rot) float freq, rot;
X {
X 	return 0;
X }
X
Xvoid BuildScreen (freq, rotation, x, y) float freq, rotation, *x, *y;
X {
X }
X
Xvoid SetScreen (freq, rotation, thresh) float freq, rotation, *thresh;
X {
X }
X
Xstruct hardware *NewWindowHardware (width, height) int width, height;
X {
X 	DevicePoint real_extent;
X 	window *w;
X 	
X 	real_extent = NewDevicePoint (width, height);
X 	
X 	if (width == 0)
X 		width = 1;
X 	if (height == 0)
X 		height = 1;
X 	
X 	if ((w = wwxget (boxbuild (0, 0, width, height), COLOURS, "PostScript", 0)) == NULL)
X 		return NULL;
X 	return NewHardware (w->w_bm, real_extent, ISWIN);
X }
X
Xstruct hardware *NewBitmapHardware (width, height) int width, height;
X {
X 	DevicePoint real_extent;
X 	bitmap *bm;
X 	
X 	real_extent = NewDevicePoint (width, height);
X 	
X 	if (width == 0)
X 		width = 1;
X 	if (height == 0)
X 		height = 1;
X 	if ((bm = bmxget (width, height, 2)) == NULL)
X 		return NULL;
X 	
X 	return NewHardware (bm, real_extent, 0);
X }
X
X#define DeviceBitmap(h) ((bitmap *) ((h)->hard.addr))
X
XInstallColour (h, col) struct hardware *h; int col;
X {
X	corep (DeviceBitmap (h), &reds[col], &greens[col], &blues[col], 0, col, 1, COSET);
X }
X
Xstatic void DestroyHard (dev) struct hardware *dev;
X {
X 	bitmap *bm = DeviceBitmap (dev);
X 	
X 	if (bm)
X 	 {
X 	 	if (bm->bm_window)
X 	 		wwfree (bm->bm_window);
X 		else
X 			bmfree (bm);
X 	 }
X }
X
Xvoid DestroyHardware (dev) struct hardware *dev;
X {
X 	if (dev == NULL)
X 		return;
X 	DestroyHard (dev);
X 	if (dev->aux)
X 		DestroyHardware (dev->aux);
X 	Free ((char *) dev);
X }
X
Xstatic struct hardware *NewHardware (bm, extent, flags) bitmap *bm; DevicePoint extent; int flags;
X {
X 	struct hardware *d = (struct hardware *) Malloc (sizeof (struct hardware));
X 	
X 	d->flags = flags;
X 	d->hard.addr = (char *) bm;
X 	d->aux = d->clip = NULL;
X 	d->extent = extent;
X 	
X 	return d;
X }
X
Xstruct hardware *HardwareFromString (st, width, height) char *st; int width, height;
X {
X 	unsigned size = height * (width + 7) / 8;
X 	char *s = Malloc (size + 4);
X 	struct hardware *h;
X 	
X 	s[0] = height >> 8; s[1] = height;
X 	s[2] = width >> 8;  s[3] = width;
X 	Bcopy (s + 4, st, size);
X 	
X 	h = NewHardware (bmdecode (s, ENWWSTYLE), NewDevicePoint (width, height), 0);
X 	Free ((char *) s);
X 	
X 	return h;
X }
X
Xchar *StringFromHardware (dev) struct hardware *dev;
X {
X 	int length;
X 	
X 	return bmencode (DeviceBitmap (dev), ENWWSTYLE, &length) + 4;
X }
X
Xvoid UpdateControl (h, flag) struct hardware *h; int flag;
X {
X 	window *oldddwin = ddwin;
X 	
X 	if (h == NULL)
X 		return;
X 	ddwin = DeviceBitmap (h)->bm_window;
X 	if (ddwin)
X		wwstack (flag ? WWPOP : WWPUSHOFF);
X	ddwin = oldddwin;
X }
X
Xvoid RasterTile (from, to, toPoint, extent, rop)
X	struct hardware *from, *to;
X	DevicePoint toPoint, extent;
X	int rop;
X {
X 	if (to == NULL || DeviceBitmap (to) == NULL || extent.dx == 0 || extent.dy == 0)
X 		return;
X 	bmclip (DeviceBitmap (to), boxbuild (toPoint.dx, toPoint.dy, toPoint.dx + extent.dx - 1, toPoint.dy + extent.dy - 1));
X 	xxrasterop (DeviceBitmap (from), DeviceBitmap (from)->bm_box, DeviceBitmap (to), DeviceBitmap (to)->bm_box, rop);
X 	bmclip (DeviceBitmap (to), noclipbox);
X }
X
Xvoid BitBlt (from, to, fromPoint, toPoint, extent, rop)
X	struct hardware *from, *to;
X	DevicePoint fromPoint, toPoint, extent;
X	int rop;
X {
X	box frombox, tobox;
X	
X	if (to == NULL || DeviceBitmap (to) == NULL || extent.dx == 0 || extent.dy == 0)
X 		return;
X	
X 	if (from == NULL || DeviceBitmap (from) == NULL)
X 		rop = single_rop [rop];
X 	else
X 		frombox = boxbuild (fromPoint.dx, fromPoint.dy, fromPoint.dx + extent.dx - 1, fromPoint.dy + extent.dy - 1);
X 	
X  	tobox = boxbuild (toPoint.dx, toPoint.dy, toPoint.dx + extent.dx - 1, toPoint.dy + extent.dy - 1);
X	
X	xxrasterop ((from == NULL ? NULL : DeviceBitmap (from)), frombox, DeviceBitmap (to), tobox, rop);
X }
X
Xvoid BitBltLine (h, fromPoint, toPoint, rop) 
X  	struct hardware *h;
X	DevicePoint fromPoint, toPoint;
X	int rop;
X {
X 	if (h == NULL || DeviceBitmap (h) == NULL)
X 		return;
X 	
X	switch (single_rop [rop])
X	 {
X	 	case ROP_FALSE: 	rop = WWAND; 	break;
X	 	case ROP_TRUE:  	rop = WWOR;  	break;
X	 	case ROP_NOTDEST: 	rop = WWXOR; 	break;
X	 	case ROP_DEST: 		return; 	break;
X	 	
X	 	default:
X	 		fprintf (stderr, "illegal rasterop\n");
X	 		exit (1);
X	 }
X	
X	ddbm = DeviceBitmap (h);
X 	dd->d_line = rop;
X 	
X	line (fromPoint.dx, fromPoint.dy, LNMOVEABS);
X 	line (toPoint.dx, toPoint.dy, LNDRAWABS);
X }
X
Xvoid BitBltBlob (to, top, height, left, right, rop) struct hardware *to; int top, height, *left, *right, rop;
X {
X 	int i, op, offset = top;
X 	height += top;
X 	switch (rop)
X 	 {
X 	 	case ROP_FALSE: 	op = BMCLEARALL; break;
X 	 	case ROP_DEST: 		return;
X 	 	case ROP_NOTDEST: 	op = BMNOTALL; break;
X 	 	case ROP_TRUE: 		op = BMNOTALL | BMCLEARALL; break;
X 	 }
X 	ddbm = DeviceBitmap (to);
X 	wwstack (WWPUSHOFF);
X 	for (i = top; i < height; i++)
X 		bmbox (boxbuild (left[i - offset], i, right[i - offset], i), op);
X 	wwstack (WWPOP);
X }
X
Xstatic void xxrasterop (from, frombox, to, tobox, rop) bitmap *from, *to; box frombox, tobox; int rop;
X {
X	switch (rop)
X 	 {
X 	 	case ROP_FALSE: 							    bmxbox (to, tobox, BMCLEARALL);	break;
X 	 	case ROP_AND: 		bmxcopy (from, frombox, to, tobox, WWAND); 						break;
X 	 	case ROP_ANDNOT:	bmxcopy (from, frombox, to, tobox, WWOR | WWNOT);   bmxbox (to, tobox, BMNOTALL); 	break;
X	 	case ROP_SOURCE: 	bmxcopy (from, frombox, to, tobox, WWCOPY); 						break;
X	 	case ROP_NOTAND: 	bmxcopy (from, frombox, to, tobox, WWAND | WWNOT); 					break;
X 	 	case ROP_DEST: 													break;
X 	 	case ROP_XOR:		bmxcopy (from, frombox, to, tobox, WWXOR); 						break;
X  	 	case ROP_OR:		bmxcopy (from, frombox, to, tobox, WWOR); 						break;
X  	 	case ROP_NOR:		bmxcopy (from, frombox, to, tobox, WWOR); 	    bmxbox (to, tobox, BMNOTALL); 	break;
X  	 	case ROP_NXOR:		bmxcopy (from, frombox, to, tobox, WWXOR); 	    bmxbox (to, tobox, BMNOTALL); 	break;
X	 	case ROP_NOTDEST: 							    bmxbox (to, tobox, BMNOTALL); 	break;
X	 	case ROP_ORNOT:		bmxcopy (from, frombox, to, tobox, WWAND | WWNOT);  bmxbox (to, tobox, BMNOTALL);	break;
X	 	case ROP_NOTSOURCE:	bmxcopy (from, frombox, to, tobox, WWCOPY | WWNOT); 					break;
X  	 	case ROP_NOTOR:		bmxcopy (from, frombox, to, tobox, WWOR | WWNOT); 					break;
X	 	case ROP_NAND:		bmxcopy (from, frombox, to, tobox, WWAND); 	    bmxbox (to, tobox, BMNOTALL); 	break;
X 	 	case ROP_TRUE: 							bmxbox (to, tobox, BMCLEARALL | BMNOTALL); 	break;
X 	 	
X 	 	default:
X 	 		fprintf (stderr, "Illegal rasterop %d (hex 0x%x)\n", rop, rop);
X 	 		exit (1);
X 	 }
X }
END_OF_FILE
if test 9048 -ne `wc -c <'source/colour-ww.c'`; then
    echo shar: \"'source/colour-ww.c'\" unpacked with wrong size!
fi
# end of 'source/colour-ww.c'
fi
if test -f 'source/integer.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/integer.c'\"
else
echo shar: Extracting \"'source/integer.c'\" \(8759 characters\)
sed "s/^X//" >'source/integer.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 
X#include "main.h"
X
Xstatic Object OpFor;
X	
Xstatic int For (), PFor (), Eq (), Lt (), Le (), Gt (), Ge (), Not (), And (), Or (), Xor (), BitShift ();
Xstatic int Abs (), Add (), Sub (), Mul (), Div (), Mod (), Neg ();
Xstatic int Exp (), Sqrt (), Sin (), Cos (), Atan (), Ln (), Log (), Identity ();
Xstatic int Cvr (), Cvs (), EqEq ();
X
Xstatic int WordSize, Word2, LowMask;
X
XInitInteger ()
X {
X 	unsigned word;
X 	
X 	OpFor = MakeOp ("(forinteger)", For, 0, 1, 5, 6);
X 	
X	TypeInstallOp (Integer, "cvi", 		Identity,	1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "cvr", 		Cvr,		1, 1, 0, 0, Integer);
X  	TypeInstallOp (Integer, "cvs", 		Cvs,		2, 1, 0, 0, Integer, String);
X	TypeInstallOp (Integer, "==", 		EqEq,		1, 0, 0, 0, Integer);
X 	TypeInstallOp (Integer, "for", 		PFor, 		4, 0, 0, 6, Integer, Integer, Integer, Array);
X  	TypeInstallOp (Integer, "eq", 		Eq,		2, 1, 0, 0, Integer, Integer);
X  	TypeInstallOp (Integer, "lt", 		Lt,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "le", 		Le,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "gt", 		Gt,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "ge", 		Ge,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "not", 		Not,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "and", 		And,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "or", 		Or,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "xor", 		Xor,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "bitshift", 	BitShift,	2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "abs", 		Abs,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "add", 		Add,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "sub", 		Sub,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "mul", 		Mul,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "div", 		Div,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "mod", 		Mod,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "neg", 		Neg,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "exp", 		Exp,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "sqrt", 	Sqrt,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "sin", 		Sin,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "cos", 		Cos,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "atan", 	Atan,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "ln", 		Ln,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "log", 		Log,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "ceiling", 	Identity,	1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "floor", 	Identity,	1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "round", 	Identity,	1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "truncate", 	Identity,	1, 1, 0, 0, Integer);
X 	
X 	word = -1;
X 	PanicIf (word != ~0, "Need 2's complement machine! Sorry.");
X 	
X 	for (WordSize = 0; word != 0; WordSize++)
X 		word >>= 1;
X 	Word2 = WordSize / 2;
X 	LowMask = (1<> Word2;
X 	btop = b >> Word2;
X 	sum = abot * btop + atop * bbot;
X 	sum += ((unsigned) (abot * bbot) >> Word2);
X 	sum = ((unsigned) sum >> Word2) + atop * btop;
X 	if (sum != 0 || a * b < 0)
X 		kill (getpid (), SIGFPE);
X 	return signed ? -a * b : a * b;
X }
X
Xint StrictAdd (a, b) int a, b;
X {
X	if ((a < 0) == (b < 0) && (a < 0) != (a + b < 0))
X		kill (getpid (), SIGFPE);
X	return a + b;
X }
X
Xint BodyInteger (item) Object item;
X {
X 	return item.u.Integer;
X }
X
Xstatic int Body (item) Object item;
X {
X 	return item.u.Integer;
X }
X
XObject MakeInteger (i) int i;
X {
X 	Object res;
X 	
X 	res = MakeObject (Integer);
X 	res.u.Integer = i;
X 	
X 	return res;
X }
X
Xstatic Object Make (i) int i;
X {
X 	Object res;
X 	
X 	res = MakeObject (Integer);
X 	res.u.Integer = i;
X 	
X 	return res;
X }
X
Xstatic int Cvr (item) Object item;
X {
X	return Push (OpStack, RealInteger (item));
X }
X
Xstatic int Cvs (v, string) Object v, string;
X {
X	int length;
X	char buf [BUFSIZE];
X 	
X	VOID sprintf (buf, "%d", BodyInteger (v));
X	if ((length = strlen (buf)) > lengthString (string))
X		return Error (PRangeCheck);
X	VOID Bcopy (BodyString (string), buf, length);
X	return Push (OpStack, getIString (string, 0, length));
X }
X
Xstatic int EqEq (v) Object v;
X {
X	printf ("%d", BodyInteger (v));
X	return TRUE;
X }
X
XObject IntReal (o) Object o;
X {
X 	return Make ((int) BodyReal (o));
X }
X
Xstatic int PFor (initial, increment, limit, proc) Object initial, increment, limit, proc;
X {
X 	VOID Push (ExecStack, Nil);
X	VOID Push (ExecStack, increment);
X	VOID Push (ExecStack, limit);
X	VOID Push (ExecStack, initial);
X	VOID Push (ExecStack, proc);
X	VOID Push (ExecStack, OpFor);
X	
X	return TRUE;
X }
X
Xstatic int For ()
X {
X	Object current, limit, increment, proc;
X	
X	proc	  = Pop (ExecStack);
X	current   = Pop (ExecStack);
X	limit	  = Pop (ExecStack);
X	increment = Pop (ExecStack);
X	
X	if (Body (increment) > 0
X				? Body (current) > Body (limit)
X				: Body (current) < Body (limit))
X	 	VOID Pop (ExecStack);
X	else
X	 {
X	 	VOID Push (ExecStack, increment);
X	 	VOID Push (ExecStack, limit);
X	 	VOID Push (ExecStack, Make (StrictAdd (Body (current), Body (increment))));
X	 	VOID Push (ExecStack, proc);
X	 	VOID Push (ExecStack, OpFor);
X	 	VOID Push (ExecStack, proc);
X	 	VOID Push (OpStack, current);
X	 }
X	return TRUE;
X }
X
Xstatic int Eq (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) == Body (b)));
X }
X
Xstatic int Lt (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) < Body (b)));
X }
X
Xstatic int Le (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) <= Body (b)));
X }
X
Xstatic int Gt (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) > Body (b)));
X }
X
Xstatic int Ge (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) >= Body (b)));
X }
X
Xstatic int Not (integer) Object integer;
X {
X 	 return Push (OpStack, Make (~ Body (integer)));
X }
X
Xstatic int And (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (Body (a) & Body (b)));
X }
X
Xstatic int Or (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (Body (a) | Body (b)));
X }
X
Xstatic int Xor (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (Body (a) ^ Body (b)));
X }
X
Xstatic int BitShift (a, b) Object a, b;
X {
X 	if (Body (b) > 0)
X 		return Push (OpStack, Make ((int) ((unsigned) Body (a) << Body (b))));
X 	else
X 		return Push (OpStack, Make ((int) ((unsigned) Body (a) >> (-Body (b)))));
X }
X
Xstatic int Abs (v) Object v;
X {
X 	return Push (OpStack, Make (Body (v) >= 0 ? Body (v) : -Body (v)));
X }
X
Xstatic int Add (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (StrictAdd (Body (a), Body (b))));
X }
X
Xstatic int Sub (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (StrictAdd (Body (a), -Body (b))));
X }
X
Xstatic int Mul (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (StrictMul (Body (a), Body (b))));
X }
X
Xstatic int Div (a, b) Object a, b;
X {
X 	if (Body (b) == 0)
X 		return Error (PUnResult);
X 	return Push (OpStack, MakeReal ((float) Body (a) / (float) Body (b)));
X }
X
Xstatic int Mod (a, b) Object a, b;
X {
X 	if (Body (b) == 0)
X 		return Error (PUnResult);
X 	return Push (OpStack, Make (Body (a) % Body (b)));
X }
X
Xstatic int Neg (a) Object a;
X {
X	return Push (OpStack, Make (-Body (a)));
X }
X
Xstatic int Sqrt (v) Object v;
X {
X  	if (Body (v) < 0)
X 		return Error (PUnResult);
X	return Push (OpStack, MakeReal ((float) sqrt ((double) Body (v))));
X }
X
Xstatic int Exp (a, b) Object a, b;
X {
X	return Push (OpStack, MakeReal ((float) pow ((double) Body (a), (double) Body (b))));
X }
X
Xstatic int Identity (v) Object v;
X {
X 	return Push (OpStack, v);
X }
X
Xstatic int Sin (v) Object v;
X {
X 	return Push (OpStack, MakeReal ((float) sin (Rad ((double) Body (v)))));
X }
X
Xstatic int Cos (v) Object v;
X {
X 	return Push (OpStack, MakeReal ((float) cos (Rad ((double) Body (v)))));
X }
X
Xstatic int Atan (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeReal ((float) Deg (atan2 ((double) Body (a), (double) Body (b)))));
X }
X
Xstatic int Ln (v) Object v;
X {
X 	return Push (OpStack, MakeReal ((float) log ((double) Body (v))));
X }
X
Xstatic int Log (v) Object v;
X {
X 	return Push (OpStack, MakeReal ((float) log10 ((double) Body (v))));
X }
END_OF_FILE
if test 8759 -ne `wc -c <'source/integer.c'`; then
    echo shar: \"'source/integer.c'\" unpacked with wrong size!
fi
# end of 'source/integer.c'
fi
if test -f 'source/operator.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/operator.c'\"
else
echo shar: Extracting \"'source/operator.c'\" \(8110 characters\)
sed "s/^X//" >'source/operator.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
Xstruct op_struct
X {
X 	Object name;
X 	int (*fn)(), arguments, results, execpop, execpush;
X 	Type *argtypes;
X };
X
Xint ExecOperator ();
Xstatic int EqEq (), Cvs (), Eq (), Signature ();
X
XInitOperator ()
X {
X 	
X	TypeInstallOp (Operator, "==", 	EqEq,			1, 0, 0, 0, Operator);
X  	TypeInstallOp (Operator, "cvs", Cvs,			2, 1, 0, 0, Operator, String);
X  	TypeInstallOp (Operator, "exec",ExecOperator,		1, 0, 0, 0, Operator);
X  	TypeInstallOp (Operator, "eq",	Eq,			2, 1, 0, 0, Operator, Operator);
X  	TypeInstallOp (Operator, "signature",	Signature,	1, 0, 0, 0, Operator);
X }
X
X/*VARARGS6*/
X/*ARGSUSED*/
XObject MakeOp (name, fn, arguments, results, execpop, execpush, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
X		char *name;
X		int (*fn)(), arguments, results, execpop, execpush;
X		Type arg1, arg2, arg3, arg4, arg5, arg6, arg7;
X {
X 	Object res;
X 	struct op_struct *op;
X 	int i;
X 	
X 	res = Cvx (MakeObject (Operator));
X 	res.u.Operator = op = (struct op_struct *) Malloc (sizeof (struct op_struct));
X	
X	op->name	= NameFrom (name);
X	op->fn		= fn;
X 	op->arguments	= arguments;
X 	op->results	= results;
X 	op->execpop	= execpop;
X 	op->execpush	= execpush;
X 	
X 	op->argtypes = (Type *) Malloc ((unsigned) sizeof (Type) * arguments);
X 	
X 	for (i = 0; i < arguments; i++)
X 		op->argtypes[i] = (&arg1)[i];
X 	
X 	return res;
X }
X
X/*VARARGS6*/
X/*ARGSUSED*/
XInstallOp (name, fn, arguments, results, execpop, execpush, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
X		char *name;
X		int (*fn)(), arguments, results, execpop, execpush;
X		Type arg1, arg2, arg3, arg4, arg5, arg6, arg7;
X {
X 	Object res;
X 	struct op_struct *op;
X 	int i;
X 	res = Cvx (MakeObject (Operator));
X 	res.u.Operator = op = (struct op_struct *) Malloc (sizeof (struct op_struct));
X	
X	op->name	= NameFrom (name);
X	op->fn		= fn;
X 	op->arguments	= arguments;
X 	op->results	= results;
X 	op->execpop	= execpop;
X 	op->execpush	= execpush;
X 	
X 	op->argtypes = (Type *) Malloc ((unsigned) sizeof (Type) * arguments);
X	
X/* 	for (i = 0; i < arguments; i++)
X 		op->argtypes[i] = (&arg1)[i];
X */	switch (arguments)
X 	 {
X 	 	default:
X 	 		Panic ("too many arguments in InstallOp");
X 	 		break;
X 	 	case 7: op->argtypes[6] = arg7;
X 		case 6: op->argtypes[5] = arg6;
X 		case 5: op->argtypes[4] = arg5;
X 		case 4: op->argtypes[3] = arg4;
X 		case 3: op->argtypes[2] = arg3;
X 		case 2: op->argtypes[1] = arg2;
X 		case 1: op->argtypes[0] = arg1;
X 		case 0: break;
X 	 }
X	DictStore (SysDict, NameOperator (res), res);
X }
X
X/*VARARGS7*/
X/*ARGSUSED*/
XTypeInstallOp (type, name, fn, arguments, results, execpop, execpush, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
X		char *name;
X		int (*fn)(), arguments, results, execpop, execpush;
X		Type type, arg1, arg2, arg3, arg4, arg5, arg6, arg7;
X {
X 	Object res;
X 	struct op_struct *op;
X 	int i;
X 	
X 	res = Cvx (MakeObject (Operator));
X 	res.u.Operator = op = (struct op_struct *) Malloc (sizeof (struct op_struct));
X	
X	op->name	= NameFrom (name);
X	op->fn		= fn;
X 	op->arguments	= arguments;
X 	op->results	= results;
X 	op->execpop	= execpop;
X 	op->execpush	= execpush;
X 	
X 	op->argtypes = (Type *) Malloc ((unsigned) sizeof (Type) * arguments);
X 	
X 	for (i = 0; i < arguments; i++)
X 		op->argtypes[i] = (&arg1)[i];
X 	
X 	TypeInstall (type, name, res);
X }
X
Xstatic struct op_struct *Body (item) Object item;
X {
X 	return item.u.Operator;
X }
X
X#define Body(op)	((op).u.Operator)
X
Xstatic int Eq (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) == Body (b)));
X }
X
XObject NameOperator (item) Object item;
X {
X 	return Body (item)->name;
X }
X
X#define NameOperator(op)	((op).u.Operator->name)
X
Xstatic int Cvs (v, string) Object v, string;
X {
X 	Object vv;
X 	int length;
X 	
X 	vv = NameOperator (v);
X 	
X	if (lengthString (string) < (length = lengthName (vv)))
X		return Error (PRangeCheck);
X	VOID strncpy (BodyString (string), BodyName (vv), length);
X	return Push (OpStack, getIString (string, 0, length));
X }
X
Xstatic int EqEq (v) Object v;
X {
X 	VOID Push (OpStack, NameOperator (v));
X 	VOID Push (ExecStack, Cvx (NameFrom ("==")));
X	return TRUE;
X }
X
X/*
X * Operator types.
X *
X *	PostScript has 200 or so operators which can be divided into groups by the
X *	arguments required.
X *
X *	The type Real 		causes an Integer argument to get floated.
X *	The type Unchecked 	causes an argument to be passed through whatever type it has.
X *	The type Number		causes all Number arguments to be Integer or Real
X *
X *	An operator object comprises several pieces of information:
X *
X *	1	Number of arguments required
X *	2	Number of results which may be returned
X *	3	Number of items required on the ExecStack
X *	4	Number of items added to the ExecStack
X *	5	A List of argument types
X *
X *	Functions requiring strange arguments can declare themselves to take few
X *	arguments and then use some directly from the OpStack.
X *
X *	The first four arguments are only required for checking Stack over and underflow,
X *	thus operators are not required to hold to their requests.
X *
X *	After resolving any peculiar type rules, Exec will lookup the operator name in the type
X *	dictionary for the argument type which is specified as being the controlling argument.
X *	The operator will receive the correct number of arguments and will be expected to stack
X *	its own results. There will be a fixed maximum limit of the number of arguments an operator
X *	can declare for itself. This is likely to be the maximum that PostScript uses, i.e. 6 or 7.
X *
X */
X
Xint ExecOperator (item) Object item;
X {
X	struct op_struct *op = Body (item);
X	int i, res, (*fn)() = op->fn;
X	Object arg[7];
X	
X	Self = NameOperator (item);
X	     if (op->results	> MaxStack (OpStack)   - Height (OpStack))	return Error (POpOverflow);
X	else if (op->execpush	> MaxStack (ExecStack) - Height (ExecStack))	return Error (PExecOverflow);
X	else if (op->arguments  > Height   (OpStack))				return Error (POpUnderflow);
X	else if (op->execpop	> Height   (ExecStack))				return Error (PExecUnderflow);
X	
X	for (i = op->arguments - 1; i >= 0; i--)
X		arg[i] = Pop (OpStack);
X	for (i = op->arguments - 1; i >= 0; i--)
X	 {
X	 	Type formal = op->argtypes[i], actual = TypeOf (arg[i]);
X	 	
X	 	if (formal == Float && actual == Integer)
X 	 		arg[i] = RealInteger (arg[i]);
X		if (formal == actual ||
X				formal == Poly ||
X				formal == Float &&
X					(actual == Integer || actual == Real))
X	 	 	continue;
X	 	for (i = 0; i < op->arguments; i++)
X			VOID Push (OpStack, arg[i]);
X		return Error (PTypeCheck);
X	 }
X	
X	/*if (setjmp (env))
X	 	res = Error (PUnResult);
X	else */
X		switch (op->arguments)
X		 {
X		 	case 0: res = (*fn) (); break;
X		 	case 1: res = (*fn) (arg[0]); break;
X		 	case 2: res = (*fn) (arg[0], arg[1]); break;
X		 	case 3: res = (*fn) (arg[0], arg[1], arg[2]); break;
X		 	case 4: res = (*fn) (arg[0], arg[1], arg[2], arg[3]); break;
X		 	case 5: res = (*fn) (arg[0], arg[1], arg[2], arg[3], arg[4]); break;
X		 	case 6: res = (*fn) (arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]); break;
X		 	case 7: res = (*fn) (arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]); break;
X		 	
X		 	default: Panic ("primitve with too many arguments");
X		 }
X	 	/*	res = (*fn) (arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]);	*/
X	
X	if (!res)
X		for (i = 0; i < op->arguments; i++)
X			VOID Push (OpStack, arg[i]);
X	return res;
X }
X
Xstatic int Signature (op) Object op;
X {
X	Object tn;
X 	struct op_struct *ops = Body (op);
X 	int i;
X 	
X 	tn = NameFrom ("type");
X 	if (!OpCheck (0, ops->arguments + 1))
X 		return FALSE;
X 	for (i = 0; i < ops->arguments; i++)
X 		VOID Push (OpStack, Lookup (ops->argtypes[i], tn));
X 	VOID Push (OpStack, MakeInteger (ops->arguments));
X 	VOID Push (OpStack, MakeInteger (ops->results));
X 	
X 	return TRUE;
X }
END_OF_FILE
if test 8110 -ne `wc -c <'source/operator.c'`; then
    echo shar: \"'source/operator.c'\" unpacked with wrong size!
fi
# end of 'source/operator.c'
fi
echo shar: End of archive 6 \(of 18\).
cp /dev/null ark6isdone
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