v03i058: xbench -- benchmark X servers, Part01/04

Dan Heller argv at island.uu.net
Wed Mar 29 04:05:41 AEST 1989


Submitted-by: Claus Gittinger <unido!sinix!claus>
Posting-number: Volume 3, Issue 58
Archive-name: xbench/part01

#! /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 1 (of 4)."
# Contents:  AUTHOR README arcs.c bitmap1.bit complex1.c externals.h
#   filledarcs.c filledpoly.c fillrects.c hline.c imagestr.c
#   invrects.c patchlevel.h rects.c results screencpy.c script.run
#   scripts scripts/Make.proto scripts/insSep.sh scripts/postfix.ms
#   scripts/prefix.ms scripts/summary.awk scroll.c sline.c
#   stipple1.bit stipple2.bit tile1.bit tile2.bit vline.c
# Wrapped by x11 at babel on Thu Mar 23 14:07:52 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'AUTHOR' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'AUTHOR'\"
else
echo shar: Extracting \"'AUTHOR'\" \(185 characters\)
sed "s/^X//" >'AUTHOR' <<'END_OF_FILE'
XXbench was written by Claus Gittinger
currently consultant at Siemens Munich.
X(email address unido!sinix!claus).
Permission granted to freely copy and
distribute on a non-profit basis.
END_OF_FILE
if test 185 -ne `wc -c <'AUTHOR'`; then
    echo shar: \"'AUTHOR'\" unpacked with wrong size!
fi
# end of 'AUTHOR'
fi
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(3904 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
This is xbench; a benchmark for X servers
X
xbench gives you a chance of measuring tuning, enhancements and
comparing different server implementations/machines.
X
xbench is a graphic test - it does not test overall workstation
performance.
X
XXbench has been written because think that numbers are better than
works like "this machine performs good/bad/wonderful ...."  :-).
X
read man-page and documentation for more detail.
X
How to make xbench
X==================
X
extract all files with:
X
X	sh Part01
X	sh Part02
X	sh Part03
X	sh Part04
X
for those who have imake and an MIT-like directory tree, I have
included an Imakefile.
X
Others can rename mkfile to Makefile.
X(I did not name it Makefile since imake overwrites it)
X
You may have to change the Imakefile/Makefile for your specific machine;
X(look for the "LIBS=", "CFLAGS=" and "TROFF=" lines)
X
There shouldn't be any problems with compiling xbench.
X(it compiles without problems on uVax, SUN3, our 4.2 based 9733 systems,
X and on 386's running Interactive System 5)
X
XFor a first test, run 
X
X	xbench -ask -nruns 1 -timegoal 5
X
and answer "s" (sync) to every question. (see manual and documentation)
Look carefully at the display to see if your server cheats
X(some servers draw solid lines instead of dashed ones ...).
X
Now you are ready to run the real bench with:
X
X	xset s off      (screensaver off !)
X	xbench -ask >results/<myMachine>.out
X
Answer "n" to all tests which didn't work well in the first run.
I have also prepared a script called "script.run" which you can
pipe into xbench with:
X
X	xbench -ask <script.run >results/<myMachine>.out
X
X(do not forget to edit the first 4 lines in this script)
X
The real test should be run without syncing - but be prepared: it can run
for hours on slow servers since many commands get buffered in the 
communication lines; problematic are mainly the wide-line, arcs,
and stipple stuff. If they are too slow on your server, run
those tests with syncing on.
X
X
This creates the raw-data file. If you have more than one server
to test, repeat the "xbench" command for every server.
X
To get a nice summary listing which includes your xStone rating type in:
X
X	make summary.ms detail.ms
X
this creates the files "summary.ms" and "detail.ms"
which must be piped through "tbl" and "[tn]roff".
X
If you have set up the "TROFF=" line correctly, you can also type:
X
X	make print
X
to get a nice formatted document which includes all benchmark data
and a sorted summary covering all tested servers.
X
X(the information is extracted and computed with the help of some awk(1)-
X scripts - they are all found in "scripts/". Of special interrest is:
X
X    xstones.awk      which computes the xstone rating from the
X		     raw data
X
X    summary.awk      which creates a summary line in tbl(1)/nroff(1)
X		     format
X
X    detail.awk       creates a detail page in tbl(1)/nroff(1)
X		     format
X
see the Imakefile and the generated tmp/makefile for more info)
X
The documentation can be printed with:
X
X 	tbl xbench.doc | troff -Twhatever -ms | your_printer
X
To get a feeling on how the different servers perform, I'd be very
happy to see your benchmark-data on the net; would someone like to
collect the data and compile a complete list (like the dhrystone-list) ?
X(but do not forget to type in the server/client/communication and note
X fields)
X
To give you some start, I have included the benchmark data for those
machines/servers I have access to at this moment; they include:
X
X    DEC gpx         running untuned MIT R2 Xqdss server
X    sun3-160        running untuned MIT R2 Xsun server
X    sun3-50         running untuned MIT R3 Xsun server
X    siemens 9733    running our tuned R2 server
X
X
X
Have fun.
X
X			Claus
X
Claus Gittinger
System Software Consulting
X
currently at:
X
Siemens AG Munich
Dep D-ST-SP4
D-8000 Muenchen/Neuperlach
Otto-Hahn-Ring
X
email: unido!sinix!claus
X
Suggestions, enhancements welcome ....
flames to /dev/null please !
END_OF_FILE
if test 3904 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'arcs.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'arcs.c'\"
else
echo shar: Extracting \"'arcs.c'\" \(2129 characters\)
sed "s/^X//" >'arcs.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)arcs.c	1.1 89/02/08";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
X
X/*
X * arcs
X */
arcs_setup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X
X	drawWhite = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawWhite) return 1;
X	XSetForeground(dpy, drawWhite, WhitePixel(dpy, screen));
X	XSetBackground(dpy, drawWhite, BlackPixel(dpy, screen));
X
X	drawBlack = XCreateGC(dpy, win, 0L, NULL);
X	if (!drawBlack) return 1;
X	XSetForeground(dpy, drawBlack, BlackPixel(dpy, screen));
X	XSetBackground(dpy, drawBlack, WhitePixel(dpy, screen));
X
X	return 0;
X}
X
arcs_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawWhite);
X	XFreeGC(dpy, drawBlack);
X}
X
arcs_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int angle;
X	int narcs;
X
X	angle = 5*64;
X	narcs = 0;
X	while (benchRunning) {
X	    XDrawArc(dpy, win, drawWhite, 0, 0, len, len, 0, angle);
X	    XDrawArc(dpy, win, drawBlack, 0, 0, len, len, 0, angle);
X	    angle += 5*64;
X	    if (angle >= 360*64) {
X		angle = 5*64;
X	    }
X	    if (sync) XSync(dpy, 0);
X	    narcs += 2;
X	}
X	return narcs;
X}
X
arcs_msg(deltaT, narcs, len, rate)
double rate;
X{
X	printf("ARCS\n");
X	printf("\n");
X	printf("%d arcs with %d pixel diameter in %d secs\n",
X				narcs, len, deltaT);
X	printf("rate = %8.2f arcs/sec\n", rate);
X}
END_OF_FILE
if test 2129 -ne `wc -c <'arcs.c'`; then
    echo shar: \"'arcs.c'\" unpacked with wrong size!
fi
# end of 'arcs.c'
fi
if test -f 'bitmap1.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bitmap1.bit'\"
else
echo shar: Extracting \"'bitmap1.bit'\" \(284 characters\)
sed "s/^X//" >'bitmap1.bit' <<'END_OF_FILE'
X#define bitmap1_width 16
X#define bitmap1_height 16
static char bitmap1_bits[] = {
X   0x55, 0x55, 0xaa, 0xaa, 0x01, 0x40, 0x02, 0x80, 0x31, 0x4c, 0xb2, 0x8d,
X   0x81, 0x41, 0xc2, 0x81, 0xc1, 0x40, 0x12, 0x8c, 0x31, 0x46, 0xe2, 0x83,
X   0x01, 0x40, 0x02, 0x80, 0x55, 0x55, 0xaa, 0xaa};
END_OF_FILE
if test 284 -ne `wc -c <'bitmap1.bit'`; then
    echo shar: \"'bitmap1.bit'\" unpacked with wrong size!
fi
# end of 'bitmap1.bit'
fi
if test -f 'complex1.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'complex1.c'\"
else
echo shar: Extracting \"'complex1.c'\" \(2093 characters\)
sed "s/^X//" >'complex1.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)complex1.c	1.1 89/02/08";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
X
X/*
X * complex benchmark
X *
X * gives an idea of xterm, xedit ... windows
X *
X * creates subwindow,
X * draw text, fill rectangle, scrolls,
X * destroys window
X */
complex1_setup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	return 0;
X}
X
complex1_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X}
X
complex1_bench(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X	int black = BlackPixel(dpy, screen);
X	int white = WhitePixel(dpy, screen);
X	Window subwin;
X	GC subGC;
X	int ncomplex = 0;
X
X	while (benchRunning) {
X	    subwin = XCreateSimpleWindow(dpy, win, 0, 0, 400, 200, 1, white, black);
X	    XMapWindow(dpy, subwin);
X	    subGC = XCreateGC(dpy, subwin, 0L, NULL);
X	    XClearArea(dpy, subwin, 0, 90, 400, 20, False);
X	    XDrawImageString(dpy, subwin, subGC, 0, 100, "hello", 5);
X	    XCopyArea(dpy, subwin, subwin, subGC, 0, 10, 400, 190, 0, 0);
X	    XSync(dpy, 0);
X	    XDestroyWindow(dpy, subwin);
X	    ncomplex++;
X	}
X	return ncomplex;
X}
X
complex1_msg(deltaT, nrun, dummy, rate)
double rate;
X{
X	printf("WINDOW CREATE/DRAW/DESTROY\n");
X	printf("\n");
X	printf("%d runs %d secs\n", nrun, deltaT);
X	printf("rate = %8.2f runs/sec\n", rate);
X}
END_OF_FILE
if test 2093 -ne `wc -c <'complex1.c'`; then
    echo shar: \"'complex1.c'\" unpacked with wrong size!
fi
# end of 'complex1.c'
fi
if test -f 'externals.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'externals.h'\"
else
echo shar: Extracting \"'externals.h'\" \(120 characters\)
sed "s/^X//" >'externals.h' <<'END_OF_FILE'
extern Display *dpy;
extern Window  win;
extern int     benchRunning;
extern int     screenHeight;
extern int     sync;
END_OF_FILE
if test 120 -ne `wc -c <'externals.h'`; then
    echo shar: \"'externals.h'\" unpacked with wrong size!
fi
# end of 'externals.h'
fi
if test -f 'filledarcs.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'filledarcs.c'\"
else
echo shar: Extracting \"'filledarcs.c'\" \(2187 characters\)
sed "s/^X//" >'filledarcs.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)filledarcs.c	1.1 89/02/08";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
X
X/*
X * filled arcs
X */
filledarcs_setup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X
X	drawWhite = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawWhite) return 1;
X	XSetForeground(dpy, drawWhite, WhitePixel(dpy, screen));
X	XSetBackground(dpy, drawWhite, BlackPixel(dpy, screen));
X
X	drawBlack = XCreateGC(dpy, win, 0L, NULL);
X	if (!drawBlack) return 1;
X	XSetForeground(dpy, drawBlack, BlackPixel(dpy, screen));
X	XSetBackground(dpy, drawBlack, WhitePixel(dpy, screen));
X
X	return 0;
X}
X
filledarcs_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawWhite);
X	XFreeGC(dpy, drawBlack);
X}
X
filledarcs_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int angle;
X	int narcs;
X
X	angle = 5*64;
X	narcs = 0;
X	while (benchRunning) {
X	    XFillArc(dpy, win, drawWhite, 0, 0, len, len, 0, angle);
X	    XFillArc(dpy, win, drawBlack, 0, 0, len, len, 0, angle);
X	    angle += 5*64;
X	    if (angle >= 360*64) {
X		angle = 5*64;
X	    }
X	    if (sync) XSync(dpy, 0);
X	    narcs += 2;
X	}
X	return narcs;
X}
X
filledarcs_msg(deltaT, narcs, len, rate)
double rate;
X{
X	printf("FILLED ARCS\n");
X	printf("\n");
X	printf("%d filled arcs with %d pixel diameter in %d secs\n",
X				narcs, len, deltaT);
X	printf("rate = %8.2f filled arcs/sec\n", rate);
X}
END_OF_FILE
if test 2187 -ne `wc -c <'filledarcs.c'`; then
    echo shar: \"'filledarcs.c'\" unpacked with wrong size!
fi
# end of 'filledarcs.c'
fi
if test -f 'filledpoly.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'filledpoly.c'\"
else
echo shar: Extracting \"'filledpoly.c'\" \(2479 characters\)
sed "s/^X//" >'filledpoly.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)filledpoly.c	1.1 89/02/08";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
X
X#define NPOINT  5
XXPoint  points[NPOINT];
X
X/*
X * filled polygons
X */
filledpoly_setup(dpy, win, vertlen)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X
X	drawWhite = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawWhite) return 1;
X	XSetForeground(dpy, drawWhite, WhitePixel(dpy, screen));
X	XSetBackground(dpy, drawWhite, BlackPixel(dpy, screen));
X
X	drawBlack = XCreateGC(dpy, win, 0L, NULL);
X	if (!drawBlack) return 1;
X	XSetForeground(dpy, drawBlack, BlackPixel(dpy, screen));
X	XSetBackground(dpy, drawBlack, WhitePixel(dpy, screen));
X
X	points[0].x = vertlen/2;
X	points[0].y = 0;
X
X	points[1].x = 0;
X	points[1].y = vertlen/2;
X
X	points[2].x = 0;
X	points[2].y = vertlen + vertlen/2;
X
X	points[3].x = vertlen;
X	points[3].y = vertlen + vertlen/2;
X
X	points[4].x = vertlen;
X	points[4].y = vertlen/2;
X
X	return 0;
X}
X
filledpoly_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawWhite);
X	XFreeGC(dpy, drawBlack);
X}
X
filledpoly_bench(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	int npoly;
X
X	npoly = 0;
X	while (benchRunning) {
X	    XFillPolygon(dpy, win, drawWhite, points, NPOINT,
X				       Convex, CoordModeOrigin);
X	    XFillPolygon(dpy, win, drawBlack, points, NPOINT,
X				       Convex, CoordModeOrigin);
X	    if (sync) XSync(dpy, 0);
X	    npoly += 2;
X	}
X	return npoly;
X}
X
filledpoly_msg(deltaT, npoly, len, rate)
double rate;
X{
X	printf("FILLED POLYGONS\n");
X	printf("\n");
X	printf("%d filled polygons with %d points (size %d) in %d secs\n",
X				npoly, NPOINT, len, deltaT);
X	printf("rate = %8.2f filled polygons/sec\n", rate);
X}
END_OF_FILE
if test 2479 -ne `wc -c <'filledpoly.c'`; then
    echo shar: \"'filledpoly.c'\" unpacked with wrong size!
fi
# end of 'filledpoly.c'
fi
if test -f 'fillrects.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fillrects.c'\"
else
echo shar: Extracting \"'fillrects.c'\" \(2511 characters\)
sed "s/^X//" >'fillrects.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)fillrects.c	1.2 89/02/22";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
static XRectangle *rectangles;
X#define NRECT   64
X
X/*
X * filled rectangles
X *
X * almost everywhere used
X */
fillrects_setup(dpy, win, len)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X	int i;
X	XRectangle *rp;
X
X	drawWhite = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawWhite) return 1;
X	XSetForeground(dpy, drawWhite, WhitePixel(dpy, screen));
X	XSetBackground(dpy, drawWhite, BlackPixel(dpy, screen));
X
X	drawBlack = XCreateGC(dpy, win, 0L, NULL);
X	if (!drawBlack) return 1;
X	XSetForeground(dpy, drawBlack, BlackPixel(dpy, screen));
X	XSetBackground(dpy, drawBlack, WhitePixel(dpy, screen));
X
X	rectangles = (XRectangle *)malloc(sizeof(XRectangle) * NRECT);
X	if (rectangles == (XRectangle *)0)
X	    return 1;
X
X	rp = rectangles;
X	for (i=0; i<NRECT; i++) {
X	    rp->x = i; rp->y = i;
X	    rp->width = len; rp->height = len;
X	    rp++;
X	}
X	return 0;
X}
X
fillrects_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawWhite);
X	XFreeGC(dpy, drawBlack);
X	free(rectangles);
X}
X
fillrects_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int nrects;
X
X	nrects = 0;
X	while (benchRunning) {
X	    XFillRectangles(dpy, win, drawWhite, rectangles, NRECT);
X	    XFillRectangles(dpy, win, drawBlack, rectangles, NRECT);
X	    if (sync) XSync(dpy, 0);
X	    nrects += NRECT*2;
X	}
X	return nrects;
X}
X
fillrects_msg(deltaT, nrects, len, rate)
double rate;
X{
X	printf("FILLED RECTANGLES\n");
X	printf("\n");
X	printf("%d rectangles with %d pixel sides in %d secs\n",
X				nrects, len, deltaT);
X	printf("rate = %8.2f rectangles/sec (%d Pixels/sec)\n",
X				rate, (nrects*len*len)/deltaT);
X}
END_OF_FILE
if test 2511 -ne `wc -c <'fillrects.c'`; then
    echo shar: \"'fillrects.c'\" unpacked with wrong size!
fi
# end of 'fillrects.c'
fi
if test -f 'hline.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'hline.c'\"
else
echo shar: Extracting \"'hline.c'\" \(2424 characters\)
sed "s/^X//" >'hline.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)hline.c	1.2 89/02/22";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
static XSegment *segments;
X#define NSEG    256
X
X/*
X * horizontal lines
X *
X * often called for boxes/labels and spans
X */
hline_setup(dpy, win, len)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X	int i;
X	XSegment *sp;
X
X	drawWhite = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawWhite) return 1;
X	XSetForeground(dpy, drawWhite, WhitePixel(dpy, screen));
X	XSetBackground(dpy, drawWhite, BlackPixel(dpy, screen));
X
X	drawBlack = XCreateGC(dpy, win, 0L, NULL);
X	if (!drawBlack) return 1;
X	XSetForeground(dpy, drawBlack, BlackPixel(dpy, screen));
X	XSetBackground(dpy, drawBlack, WhitePixel(dpy, screen));
X
X	segments = (XSegment *)malloc(sizeof(XSegment) * NSEG);
X	if (segments == (XSegment *)0)
X	    return 1;
X
X	sp = segments;
X	for (i=0; i<NSEG; i++) {
X	    sp->x1 = i; sp->y1 = i;
X	    sp->x2 = i+len; sp->y2 = i;
X	    sp++;
X	}
X	return 0;
X}
X
hline_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawWhite);
X	XFreeGC(dpy, drawBlack);
X	free(segments);
X}
X
hline_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int nline;
X
X	nline = 0;
X	while (benchRunning) {
X	    XDrawSegments(dpy, win, drawWhite, segments, NSEG);
X	    XDrawSegments(dpy, win, drawBlack, segments, NSEG);
X	    nline += NSEG*2;
X	}
X	return nline;
X}
X
hline_msg(deltaT, nline, len, rate)
double rate;
X{
X	printf("HORIZONTAL LINES\n");
X	printf("\n");
X	printf("%d horizontal vectors of len. %d in %d secs\n",
X				nline, len, deltaT);
X	printf("rate = %8.2f vectors/sec (%d Pixels/sec)\n",
X				rate, (nline*len)/deltaT);
X}
END_OF_FILE
if test 2424 -ne `wc -c <'hline.c'`; then
    echo shar: \"'hline.c'\" unpacked with wrong size!
fi
# end of 'hline.c'
fi
if test -f 'imagestr.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'imagestr.c'\"
else
echo shar: Extracting \"'imagestr.c'\" \(2530 characters\)
sed "s/^X//" >'imagestr.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)imagestr.c	1.1 89/02/08";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC myGC;
static XFontStruct *fontinfo;
static int fontHeight, fontAscent;
X
X/*
X * draw image strings in different fixed fonts
X *
X * almost everywhere used esp. in terminal emulators
X */
imagestring_setup(dpy, win, fontName)
Display *dpy;
Window win;
char *fontName;
X{
X	int screen = DefaultScreen(dpy);
X
X	fontinfo = XLoadQueryFont(dpy, fontName);
X	if (fontinfo == NULL) {
X	    printf("FONT %s NOT AVAILABLE - BENCHMARK NOT POSSIBLE\n", fontName);
X	    return 1;
X	}
X
X	myGC = XCreateGC(dpy, win, 0L, NULL);
X	if (!myGC) return 1;
X
X	XSetForeground(dpy, myGC, WhitePixel(dpy, screen));
X	XSetBackground(dpy, myGC, BlackPixel(dpy, screen));
X	XSetFont(dpy, myGC, fontinfo->fid);
X
X	fontAscent = fontinfo->max_bounds.ascent;
X	fontHeight = fontAscent + fontinfo->max_bounds.descent;
X	return 0;
X}
X
imagestring_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeFont(dpy, fontinfo);
X	XFreeGC(dpy, myGC);
X}
X
imagestring_bench(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	int y;
X	int nstrings;
X	char *theString = "123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
X	int len;
X
X	len = strlen(theString);
X	y = fontAscent;
X	nstrings = 0;
X	while (benchRunning) {
X	    XDrawImageString(dpy, win, myGC, 0, y, theString, len);
X	    y = (y + 1) & 0xFF;
X	    if (y == 0) {
X		y = fontAscent;
X	    }
X	    nstrings++;
X	}
X	return (nstrings * len);
X}
X
imagestring_msg(deltaT, nchars, fontName, rate)
char *fontName;
double rate;
X{
X	printf("DRAW IMAGE STRING - font=\"%s\" (height = %d)\n", fontName, fontHeight);
X	printf("\n");
X	printf("%d chars in %d secs\n", nchars, deltaT);
X	printf("rate = %8.2f chars/sec\n", rate);
X}
END_OF_FILE
if test 2530 -ne `wc -c <'imagestr.c'`; then
    echo shar: \"'imagestr.c'\" unpacked with wrong size!
fi
# end of 'imagestr.c'
fi
if test -f 'invrects.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'invrects.c'\"
else
echo shar: Extracting \"'invrects.c'\" \(1994 characters\)
sed "s/^X//" >'invrects.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)invrects.c	1.1 89/02/08";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawInv;
X
X/*
X * invert rectangles
X *
X * used mainly in plaid -:)
X */
invrects_setup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X	int black, white;
X
X	white = WhitePixel(dpy, screen);
X	black = BlackPixel(dpy, screen);
X
X	drawInv = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawInv) return 1;
X	XSetForeground(dpy, drawInv, black^white);
X	XSetFunction(dpy, drawInv, GXxor);
X
X	return 0;
X}
X
invrects_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawInv);
X}
X
invrects_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int x, y;
X	int nrects;
X
X	y = 0; x = 0;
X	nrects = 0;
X	while (benchRunning) {
X	    XFillRectangle(dpy, win, drawInv, x, y, len, len);
X	    y = (y + 1) & 0x0F;
X	    x = (x + 1) & 0x0F;
X	    if (sync) XSync(dpy, 0);
X	    nrects++;
X	}
X	return nrects;
X}
X
invrects_msg(deltaT, nrects, len, rate)
double rate;
X{
X	printf("INVERTED RECTANGLES\n");
X	printf("\n");
X	printf("%d rectangles with %d pixel sides in %d secs\n",
X				nrects, len, deltaT);
X	printf("rate = %8.2f rectangles/sec (%d Pixels/sec)\n",
X				rate, (nrects*len*len)/deltaT);
X}
END_OF_FILE
if test 1994 -ne `wc -c <'invrects.c'`; then
    echo shar: \"'invrects.c'\" unpacked with wrong size!
fi
# end of 'invrects.c'
fi
if test -f 'patchlevel.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patchlevel.h'\"
else
echo shar: Extracting \"'patchlevel.h'\" \(22 characters\)
sed "s/^X//" >'patchlevel.h' <<'END_OF_FILE'
X#define PATCHLEVEL 1
X
END_OF_FILE
if test 22 -ne `wc -c <'patchlevel.h'`; then
    echo shar: \"'patchlevel.h'\" unpacked with wrong size!
fi
# end of 'patchlevel.h'
fi
if test -f 'rects.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'rects.c'\"
else
echo shar: Extracting \"'rects.c'\" \(2462 characters\)
sed "s/^X//" >'rects.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)rects.c	1.2 89/02/22";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
static XRectangle *rectangles;
X#define NRECT   64
X
X/*
X * rectangles
X *
X * often called for boxes/labels/rubbering
X */
rects_setup(dpy, win, len)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X	int i;
X	XRectangle *rp;
X
X	drawWhite = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawWhite) return 1;
X	XSetForeground(dpy, drawWhite, WhitePixel(dpy, screen));
X	XSetBackground(dpy, drawWhite, BlackPixel(dpy, screen));
X
X	drawBlack = XCreateGC(dpy, win, 0L, NULL);
X	if (!drawBlack) return 1;
X	XSetForeground(dpy, drawBlack, BlackPixel(dpy, screen));
X	XSetBackground(dpy, drawBlack, WhitePixel(dpy, screen));
X
X	rectangles = (XRectangle *)malloc(sizeof(XRectangle) * NRECT);
X	if (rectangles == (XRectangle *)0)
X	    return 1;
X
X	rp = rectangles;
X	for (i=0; i<NRECT; i++) {
X	    rp->x = i; rp->y = i;
X	    rp->width = len; rp->height = len;
X	    rp++;
X	}
X	return 0;
X}
X
rects_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawWhite);
X	XFreeGC(dpy, drawBlack);
X	free(rectangles);
X}
X
rects_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int nrects;
X
X	nrects = 0;
X	while (benchRunning) {
X	    XDrawRectangles(dpy, win, drawWhite, rectangles, NRECT);
X	    XDrawRectangles(dpy, win, drawBlack, rectangles, NRECT);
X	    nrects += 2*NRECT;
X	}
X	return nrects;
X}
X
rects_msg(deltaT, nrects, len, rate)
double rate;
X{
X	printf("RECTANGLES\n");
X	printf("\n");
X	printf("%d rectangles with %d pixel sides in %d secs\n",
X				nrects, len, deltaT);
X	printf("rate = %8.2f rectangles/sec (%d Pixels/sec)\n",
X				rate, (nrects*4*len)/deltaT);
X}
END_OF_FILE
if test 2462 -ne `wc -c <'rects.c'`; then
    echo shar: \"'rects.c'\" unpacked with wrong size!
fi
# end of 'rects.c'
fi
if test ! -d 'results' ; then
    echo shar: Creating directory \"'results'\"
    mkdir 'results'
fi
if test -f 'screencpy.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'screencpy.c'\"
else
echo shar: Extracting \"'screencpy.c'\" \(2225 characters\)
sed "s/^X//" >'screencpy.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)screencpy.c	1.1 89/02/08";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC myGC;
X
X/*
X * screen->screen copy area
X *
X * used for moving windows, scrolling
X */
screencopy_setup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X
X	myGC = XCreateGC(dpy, win, 0L, NULL);
X	if (! myGC) return 1;
X	XSetForeground(dpy, myGC, WhitePixel(dpy, screen));
X	XSetBackground(dpy, myGC, BlackPixel(dpy, screen));
X	XDrawImageString(dpy, win, myGC, 0, 5, "copy", 4);
X
X	return 0;
X}
X
screencopy_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, myGC);
X}
X
screencopy_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int ncopy;
X
X	ncopy= 0;
X	while (benchRunning) {
X	    XCopyArea(dpy, win, win, myGC, 0, 0, len, len, 16, 16);
X	    XCopyArea(dpy, win, win, myGC, 0, 0, len, len, 16, 16);
X	    XCopyArea(dpy, win, win, myGC, 0, 0, len, len, 16, 16);
X	    XCopyArea(dpy, win, win, myGC, 16, 16, len, len, 0, 0);
X	    XCopyArea(dpy, win, win, myGC, 16, 16, len, len, 0, 0);
X	    XCopyArea(dpy, win, win, myGC, 16, 16, len, len, 0, 0);
X	    if (sync) XSync(dpy, 0);
X	    ncopy += 6;
X	}
X	return ncopy;
X}
X
screencopy_msg(deltaT, ncopy, len, rate)
double rate;
X{
X	printf("COPYAREA (SCREEN->SCREEN)\n");
X	printf("\n");
X	printf("%d copies with %d pixel sides in %d secs\n",
X				ncopy, len, deltaT);
X	printf("rate = %8.2f copies/sec (%d Pixels/sec)\n",
X				rate, (ncopy*len*len)/deltaT);
X}
END_OF_FILE
if test 2225 -ne `wc -c <'screencpy.c'`; then
    echo shar: \"'screencpy.c'\" unpacked with wrong size!
fi
# end of 'screencpy.c'
fi
if test -f 'script.run' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'script.run'\"
else
echo shar: Extracting \"'script.run'\" \(2566 characters\)
sed "s/^X//" >'script.run' <<'END_OF_FILE'
name of server-machine
name of clients machine
type of connection
additional notes
X!------------------------------------------------------------------
X! change line 1 to brand/type of your server machine
X!   examples:   sun 3/150
X!               siemens 9733
X!               ibm rt
X! change line 2 to brand/type of the machine xbench runs
X!   examples:   like above
X! change line 3 to type of communication used;
X!   examples:   unix-socket (i.e. unix:0 for bsd systems)
X!               unix-stream (i.e. for sysVsystems)
X!               10 Mb ether
X!               3 Mb ether
X!               thin wire
X!               slip
X! add special notes into line 4
X!   examples:   no FPU; 8 Mb main mem; 64 Kb cache; 25 Mhz 386 CPU
X!
X! (These lines are for documentation only and
X!  will appear unchanged in the output script)
X!
X! lines beginning with excla are ignored
X! put in y if you want to have a test included,
X!        s if you have a slow server and want the test with sync on
X!        n to exclude the test (server crashes or draws incorrect)
X!------------------------------------------------------------------
X! line10, line100 and line400
y
y
y
X! dline10, dline100 and dline400
X!   if your server draws solid lines instead, change into "n"
y
y
y
X! wline10, wline100 and wline400
X!   if your server draws thin lines instead, change into "n"
X!   if your server draws them fast, change "s" into "y"
X!   if your server is very slow, change "y" into "s"
y
y
y
X! rects10, rects100 and wrects400
y
y
y
X! fillrects10, fillrects100 and fillrects400
y
y
y
X! tiledrects10, tiledrects100 and tiledrects400
X!   if your server does not tile-fill, change into "n"
X!   some servers are slow here - change "y" into "s" then
y
y
y
X! stippledrects10, stippledrects100 and stippledrects400
X!   if your server does not stipple-fill, change into "n"
X!   some servers are slow here - change "y" into "s" then
y
y
y
X! invrects10, invrects100 and invrects400
y
y
y
X! arcs10, arcs100 and arcs400
X!   most r3 server are terribly slow here ...
X!   if your server draws them fast, change "s" into "y"
X!   if your server is very slow, change "y" into "s"
y
s
s
X! filledarcs10, filledarcs100 and filledarcs400
X!   most r3 server are terribly slow here ...
X!   if your server draws them fast, change "s" into "y"
X!   if your server is very slow, change "y" into "s"
y
s
s
X! filledpoly100
y
X! screencopy10, screencopy100 and screencopy400
y
y
y
X! scroll
y
X! bitmapcopy10, bitmapcopy100 and bitmapcopy400
X!   some servers are slow here - change "y" into "s" then
y
y
y
X! imagestring
y
X! complex
y
END_OF_FILE
if test 2566 -ne `wc -c <'script.run'`; then
    echo shar: \"'script.run'\" unpacked with wrong size!
fi
# end of 'script.run'
fi
if test ! -d 'scripts' ; then
    echo shar: Creating directory \"'scripts'\"
    mkdir 'scripts'
fi
if test -f 'scripts/Make.proto' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'scripts/Make.proto'\"
else
echo shar: Extracting \"'scripts/Make.proto'\" \(928 characters\)
sed "s/^X//" >'scripts/Make.proto' <<'END_OF_FILE'
X.SUFFIXES: .out .out_
X
X.out.out_:
X	cp $*.out $*.out_
X	awk -f ../scripts/xstones.awk < $*.out >> $*.out_
X
X.SUFFIXES: .out_ .out__
X
X.out_.out__:
X	awk -f ../scripts/summary.awk < $*.out_ > $*.out__
X
all:	
X	echo must be called from Makefile
X
link:
X	rm -f *.out
X	ln ../results/*.out .
X
summary.raw: link $(SFILES)
X	cat $(SFILES) > summary.raw
X
summary.sorted: link summary.raw
X	sort -t! +9 -n -r <summary.raw >summary.sorted
X
summary.tbl: link summary.sorted
X	-sh ../scripts/insSep.sh < summary.sorted > summary.tbl
X
summary.ms: link summary.tbl
X	cat ../scripts/prefix.ms summary.tbl ../scripts/postfix.ms > summary.ms
X	-(if grep "(2)" summary.ms > /dev/null; then\
X	    echo ".br" >> summary.ms; \
X	    echo "(2) corrupted benchmark data file" >> summary.ms ; \
X	  fi);
X	echo ".LP" >> summary.ms
X
detail.ms:  link
X	    -rm detail.ms
X	    -(for i in *.out; do     \
X		awk -f ../scripts/detail.awk < $$i >> detail.ms ; \
X	      done)
END_OF_FILE
if test 928 -ne `wc -c <'scripts/Make.proto'`; then
    echo shar: \"'scripts/Make.proto'\" unpacked with wrong size!
fi
# end of 'scripts/Make.proto'
fi
if test -f 'scripts/insSep.sh' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'scripts/insSep.sh'\"
else
echo shar: Extracting \"'scripts/insSep.sh'\" \(241 characters\)
sed "s/^X//" >'scripts/insSep.sh' <<'END_OF_FILE'
X#!/bin/sh
X
X#
X# insert _ line after every input line
X#
X
read line
echo $line;
read line                  
while [ "$line" != "" ]; do       
X   echo "_"                     
X   echo $line                  
X   read line                  
done
END_OF_FILE
if test 241 -ne `wc -c <'scripts/insSep.sh'`; then
    echo shar: \"'scripts/insSep.sh'\" unpacked with wrong size!
fi
chmod +x 'scripts/insSep.sh'
# end of 'scripts/insSep.sh'
fi
if test -f 'scripts/postfix.ms' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'scripts/postfix.ms'\"
else
echo shar: Extracting \"'scripts/postfix.ms'\" \(162 characters\)
sed "s/^X//" >'scripts/postfix.ms' <<'END_OF_FILE'
X.TE
X.LP
notes:
X.br
X(*) incomplete test - rating computed by taking the performance of
the existing tests as the
X.B expected
performance of the missing tests.
X.br
END_OF_FILE
if test 162 -ne `wc -c <'scripts/postfix.ms'`; then
    echo shar: \"'scripts/postfix.ms'\" unpacked with wrong size!
fi
# end of 'scripts/postfix.ms'
fi
if test -f 'scripts/prefix.ms' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'scripts/prefix.ms'\"
else
echo shar: Extracting \"'scripts/prefix.ms'\" \(1165 characters\)
sed "s/^X//" >'scripts/prefix.ms' <<'END_OF_FILE'
X.RP
X.TL
xbench - results
X.AF ""
X.AI
Siemens AG Munich Dep. D ST SP 4
X.NH
XX Server performance overview
X.LP
All ratings are relative to a monochrome SUN 3/50 running X11R3
communicating via unix sockets.
The ratings are scaled to give this reference machine an
X.I xStone
rating of 10000. A machine with double performance
will therefore get 20000
X.I xStones;
a machine with half performance
will get 5000
X.I xStones.
X.LP
The value in the
X.B line 
field is the
X.I lineStone
rating for solid-line, dashed-line, wide-line
and rectangle performance.
X.br
The value in the
X.B fill
field is the
X.I fillStone
rating for solid-, tile- and stipple-rectangle-fill
performance.
X.br
The value in the
X.B blit
field is the
X.I blitStone
rating for invrects,
screencopy, scroll, and
bitmapcopy performance.
X.br
The value in the
X.B arc
field is the
X.I arcStone
rating for arc- and filledarc
performance.
X.br
The value in the
X.B p
field is the number of color/greyscale planes. Machines with a '1' in
the
X.B p
field are monochrome.
X.sp
X.TS
X.box, tab(!);
l | c | c | c | c | c | c | c | c | c
l | r | c | r | r | r | r | r | r | r.
machine!p!comm!line!fill!blt!text!arc!cmplx!xstones
X=
END_OF_FILE
if test 1165 -ne `wc -c <'scripts/prefix.ms'`; then
    echo shar: \"'scripts/prefix.ms'\" unpacked with wrong size!
fi
# end of 'scripts/prefix.ms'
fi
if test -f 'scripts/summary.awk' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'scripts/summary.awk'\"
else
echo shar: Extracting \"'scripts/summary.awk'\" \(2617 characters\)
sed "s/^X//" >'scripts/summary.awk' <<'END_OF_FILE'
BEGIN           {
X		    stones["lineStones"] = "?";
X		    stones["fillStones"] = "?";
X		    stones["blitStones"] = "?";
X		    stones["arcStones"] = "?";
X		    stones["textStones"] = "?";
X		    stones["complexStones"] = "?";
X		    stones["xStones"] = "?";
X		    nplanes = "?";
X		    server = "?";
X		    com = "?";
X		    s = "?";
X		    e["xStones"] = "+";
X		}
X
X/server:/        {
X		    server = $2
X		    if ( $3 != "") {
X		      server = server " " $3
X		    }
X		    if ( $4 != "") {
X		      server = server " " $4
X		    }
X		    if ( $5 != "") {
X		      server = server " " $5
X		    }
X		    if ( $6 != "") {
X		      server = server " " $6
X		    }
X		    if ( $7 != "") {
X		      server = server " " $7
X		    }
X		    if ( $8 != "") {
X		      server = server " " $8
X		    }
X		    if ( $9 != "") {
X		      server = server " " $9
X		    }
X		}
X
X/communication:/{
X		    com = $2
X		    if ( $3 != "") {
X		      com = com " " $3
X		    }
X		    if ( $4 != "") {
X		      com = com " " $4
X		    }
X		    if ( $5 != "") {
X		      com = com " " $5
X		    }
X		    if ( $6 != "") {
X		      com = com " " $6
X		    }
X		    if ( $7 != "") {
X		      com = com " " $7
X		    }
X		    if ( $8 != "") {
X		      com = com " " $8
X		    }
X		    if ( $9 != "") {
X		      com = com " " $9
X		    }
X		}
X
X/Defaultdepth rootwindow/ { nplanes = $4 }
X
X/TOTAL \? /       { stones[$3] = "?"; e[$3] = "*"; }
X/TOTAL expected / { stones[$4] = int($3); e[$4] = "*"; }
X/TOTAL [0-9]* /   { stones[$3] = int($2); e[$3] = " " }
X
XEND             {
X		  if (stones["lineStones"] == 0) {
X		      l = "?";
X		  } else {
X		      l = int(stones["lineStones"] + 0.5);
X		  }
X		  if (stones["fillStones"] == 0) {
X		      f = "?";
X		  } else {
X		      f = int(stones["fillStones"] + 0.5);
X		  }
X		  if (stones["blitStones"] == 0) {
X		      b = "?";
X		  } else {
X		      b = int(stones["blitStones"] + 0.5);
X		  }
X		  if (stones["arcStones"] == 0) {
X		      a = "?";
X		  } else {
X		      a = int(stones["arcStones"] + 0.5);
X		  }
X		  if (stones["textStones"] == "?") {
X		      t = "?";
X		  } else {
X		      t = int(stones["textStones"] + 0.5);
X		  }
X		  if (stones["complexStones"] == "?") {
X		      c = "?";
X		  } else {
X		      c = int(stones["complexStones"] + 0.5);
X		  }
X		  if (stones["xStones"] == "?") {
X		      all = "?";
X		  } else {
X		      all = int(stones["xStones"] + 0.5);
X		  }
X		  print server "!" nplanes "!" com "!"      \
X				   e["lineStones"]    l  "!"    \
X				   e["fillStones"]    f  "!"    \
X				   e["blitStones"]    b  "!"    \
X				   e["textStones"]    t  "!"    \
X				   e["arcStones"]     a "!"     \
X				   e["complexStones"] c "!" \
X				   all ;
X		}
END_OF_FILE
if test 2617 -ne `wc -c <'scripts/summary.awk'`; then
    echo shar: \"'scripts/summary.awk'\" unpacked with wrong size!
fi
# end of 'scripts/summary.awk'
fi
if test -f 'scroll.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'scroll.c'\"
else
echo shar: Extracting \"'scroll.c'\" \(2035 characters\)
sed "s/^X//" >'scroll.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)scroll.c	1.1 89/02/08";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC myGC;
X
X#define SCROLLWIDTH     640
X#define SCROLLHEIGHT    400
X
X/*
X * screen->screen copy area vertical only
X *
X * special case for scrolling
X */
scroll_setup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X
X	myGC = XCreateGC(dpy, win, 0L, NULL);
X	if (! myGC) return 1;
X	XSetForeground(dpy, myGC, WhitePixel(dpy, screen));
X	XSetBackground(dpy, myGC, BlackPixel(dpy, screen));
X	XDrawImageString(dpy, win, myGC, 0, SCROLLHEIGHT+5, "scroll", 6);
X
X	return 0;
X}
X
scroll_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, myGC);
X}
X
scroll_bench(dpy, win, delta)
Display *dpy;
Window win;
X{
X	int ncopy;
X
X	ncopy= 0;
X	while (benchRunning) {
X	    XCopyArea(dpy, win, win, myGC, 0, delta, SCROLLWIDTH, SCROLLHEIGHT,
X						 0, 0);
X	    if (sync) XSync(dpy, 0);
X	    ncopy++;
X	}
X	return ncopy;
X}
X
scroll_msg(deltaT, ncopy, delta, rate)
double rate;
X{
X	printf("SCROLL\n");
X	printf("\n");
X	printf("%d scrolls (area: %d x %d) in %d secs\n",
X				ncopy, SCROLLWIDTH, SCROLLHEIGHT, delta, deltaT);
X	printf("rate = %8.2f scrolls/sec (%d Pixels/sec)\n",
X				rate,
X				(ncopy*SCROLLWIDTH*SCROLLHEIGHT)/deltaT);
X}
END_OF_FILE
if test 2035 -ne `wc -c <'scroll.c'`; then
    echo shar: \"'scroll.c'\" unpacked with wrong size!
fi
# end of 'scroll.c'
fi
if test -f 'sline.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'sline.c'\"
else
echo shar: Extracting \"'sline.c'\" \(2383 characters\)
sed "s/^X//" >'sline.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)sline.c	1.2 89/02/22";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
static XSegment *segments;
X#define NSEG    256
X
X/*
X * sloped lines
X */
sline_setup(dpy, win, len)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X	int i;
X	XSegment *sp;
X
X	drawWhite = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawWhite) return 1;
X	XSetForeground(dpy, drawWhite, WhitePixel(dpy, screen));
X	XSetBackground(dpy, drawWhite, BlackPixel(dpy, screen));
X
X	drawBlack = XCreateGC(dpy, win, 0L, NULL);
X	if (!drawBlack) return 1;
X	XSetForeground(dpy, drawBlack, BlackPixel(dpy, screen));
X	XSetBackground(dpy, drawBlack, WhitePixel(dpy, screen));
X
X	segments = (XSegment *)malloc(sizeof(XSegment) * NSEG);
X	if (segments == (XSegment *)0)
X	    return 1;
X
X	sp = segments;
X	for (i=0; i<NSEG; i++) {
X	    sp->x1 = i; sp->y1 = 0;
X	    sp->x2 = i+len; sp->y2 = i+len;
X	    sp++;
X	}
X	return 0;
X}
X
sline_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawWhite);
X	XFreeGC(dpy, drawBlack);
X	free(segments);
X}
X
sline_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int nline;
X
X	nline = 0;
X	while (benchRunning) {
X	    XDrawSegments(dpy, win, drawWhite, segments, NSEG);
X	    XDrawSegments(dpy, win, drawBlack, segments, NSEG);
X	    nline += NSEG*2;
X	}
X	return nline;
X}
X
sline_msg(deltaT, nline, len, rate)
double rate;
X{
X	printf("SLOPED (DIAGONAL) LINES\n");
X	printf("\n");
X	printf("%d diagonal vectors of len. %d in %d secs\n",
X				nline, len, deltaT);
X	printf("rate = %8.2f vectors/sec (%d Pixels/sec)\n",
X				rate, (nline*len)/deltaT);
X}
END_OF_FILE
if test 2383 -ne `wc -c <'sline.c'`; then
    echo shar: \"'sline.c'\" unpacked with wrong size!
fi
# end of 'sline.c'
fi
if test -f 'stipple1.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'stipple1.bit'\"
else
echo shar: Extracting \"'stipple1.bit'\" \(887 characters\)
sed "s/^X//" >'stipple1.bit' <<'END_OF_FILE'
X#define stipple1_width 32
X#define stipple1_height 32
static char stipple1_bits[] = {
X   0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22,
X   0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
X   0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88,
X   0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
X   0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22,
X   0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
X   0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88,
X   0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
X   0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22,
X   0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
X   0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11};
END_OF_FILE
if test 887 -ne `wc -c <'stipple1.bit'`; then
    echo shar: \"'stipple1.bit'\" unpacked with wrong size!
fi
# end of 'stipple1.bit'
fi
if test -f 'stipple2.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'stipple2.bit'\"
else
echo shar: Extracting \"'stipple2.bit'\" \(887 characters\)
sed "s/^X//" >'stipple2.bit' <<'END_OF_FILE'
X#define stipple2_width 32
X#define stipple2_height 32
static char stipple2_bits[] = {
X   0x77, 0x77, 0x77, 0x77, 0xbb, 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd,
X   0xee, 0xee, 0xee, 0xee, 0x77, 0x77, 0x77, 0x77, 0xbb, 0xbb, 0xbb, 0xbb,
X   0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0x77, 0x77, 0x77, 0x77,
X   0xbb, 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee,
X   0x77, 0x77, 0x77, 0x77, 0xbb, 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd,
X   0xee, 0xee, 0xee, 0xee, 0x77, 0x77, 0x77, 0x77, 0xbb, 0xbb, 0xbb, 0xbb,
X   0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0x77, 0x77, 0x77, 0x77,
X   0xbb, 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee,
X   0x77, 0x77, 0x77, 0x77, 0xbb, 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd,
X   0xee, 0xee, 0xee, 0xee, 0x77, 0x77, 0x77, 0x77, 0xbb, 0xbb, 0xbb, 0xbb,
X   0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee};
END_OF_FILE
if test 887 -ne `wc -c <'stipple2.bit'`; then
    echo shar: \"'stipple2.bit'\" unpacked with wrong size!
fi
# end of 'stipple2.bit'
fi
if test -f 'tile1.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'tile1.bit'\"
else
echo shar: Extracting \"'tile1.bit'\" \(878 characters\)
sed "s/^X//" >'tile1.bit' <<'END_OF_FILE'
X#define tile1_width 32
X#define tile1_height 32
static char tile1_bits[] = {
X   0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44,
X   0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22,
X   0x44, 0x44, 0x44, 0x44, 0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x11, 0x11,
X   0x22, 0x22, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x88, 0x88, 0x88, 0x88,
X   0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44,
X   0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22,
X   0x44, 0x44, 0x44, 0x44, 0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x11, 0x11,
X   0x22, 0x22, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x88, 0x88, 0x88, 0x88,
X   0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44,
X   0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22,
X   0x44, 0x44, 0x44, 0x44, 0x88, 0x88, 0x88, 0x88};
END_OF_FILE
if test 878 -ne `wc -c <'tile1.bit'`; then
    echo shar: \"'tile1.bit'\" unpacked with wrong size!
fi
# end of 'tile1.bit'
fi
if test -f 'tile2.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'tile2.bit'\"
else
echo shar: Extracting \"'tile2.bit'\" \(878 characters\)
sed "s/^X//" >'tile2.bit' <<'END_OF_FILE'
X#define tile2_width 32
X#define tile2_height 32
static char tile2_bits[] = {
X   0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd, 0xbb, 0xbb, 0xbb, 0xbb,
X   0x77, 0x77, 0x77, 0x77, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd,
X   0xbb, 0xbb, 0xbb, 0xbb, 0x77, 0x77, 0x77, 0x77, 0xee, 0xee, 0xee, 0xee,
X   0xdd, 0xdd, 0xdd, 0xdd, 0xbb, 0xbb, 0xbb, 0xbb, 0x77, 0x77, 0x77, 0x77,
X   0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd, 0xbb, 0xbb, 0xbb, 0xbb,
X   0x77, 0x77, 0x77, 0x77, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd,
X   0xbb, 0xbb, 0xbb, 0xbb, 0x77, 0x77, 0x77, 0x77, 0xee, 0xee, 0xee, 0xee,
X   0xdd, 0xdd, 0xdd, 0xdd, 0xbb, 0xbb, 0xbb, 0xbb, 0x77, 0x77, 0x77, 0x77,
X   0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd, 0xbb, 0xbb, 0xbb, 0xbb,
X   0x77, 0x77, 0x77, 0x77, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd,
X   0xbb, 0xbb, 0xbb, 0xbb, 0x77, 0x77, 0x77, 0x77};
END_OF_FILE
if test 878 -ne `wc -c <'tile2.bit'`; then
    echo shar: \"'tile2.bit'\" unpacked with wrong size!
fi
# end of 'tile2.bit'
fi
if test -f 'vline.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vline.c'\"
else
echo shar: Extracting \"'vline.c'\" \(2372 characters\)
sed "s/^X//" >'vline.c' <<'END_OF_FILE'
static char SCCSID[] = "@(#)vline.c	1.2 89/02/22";
X/*
X * Copyright 1989 Siemens
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of Siemens not be used in advertising or
X * publicity pertaining to distribution of the software without specific,
X * written prior permission.  Siemens makes no representations about the
X * suitability of this software for any purpose.  It is provided "as is"
X * without express or implied warranty.
X *
X * Author:  Claus Gittinger, Siemens Munich, unido!sinix!claus at uunet.uu.net
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X#include "externals.h"
X
static GC drawWhite, drawBlack;
static XSegment *segments;
X#define NSEG    256
X
X/*
X * vertical lines
X */
vline_setup(dpy, win, len)
Display *dpy;
Window win;
X{
X	int screen = DefaultScreen(dpy);
X	int i;
X	XSegment *sp;
X
X	drawWhite = XCreateGC(dpy, win, 0L, NULL);
X	if (! drawWhite) return 1;
X	XSetForeground(dpy, drawWhite, WhitePixel(dpy, screen));
X	XSetBackground(dpy, drawWhite, BlackPixel(dpy, screen));
X
X	drawBlack = XCreateGC(dpy, win, 0L, NULL);
X	if (!drawBlack) return 1;
X	XSetForeground(dpy, drawBlack, BlackPixel(dpy, screen));
X	XSetBackground(dpy, drawBlack, WhitePixel(dpy, screen));
X
X	segments = (XSegment *)malloc(sizeof(XSegment) * NSEG);
X	if (segments == (XSegment *)0)
X	    return 1;
X
X	sp = segments;
X	for (i=0; i<NSEG; i++) {
X	    sp->x1 = i; sp->y1 = i;
X	    sp->x2 = i; sp->y2 = i+len;
X	    sp++;
X	}
X	return 0;
X}
X
vline_cleanup(dpy, win, dummy)
Display *dpy;
Window win;
X{
X	XFreeGC(dpy, drawWhite);
X	XFreeGC(dpy, drawBlack);
X	free(segments);
X}
X
vline_bench(dpy, win, len)
Display *dpy;
Window win;
X{
X	int nline;
X
X	nline = 0;
X	while (benchRunning) {
X	    XDrawSegments(dpy, win, drawWhite, segments, NSEG);
X	    XDrawSegments(dpy, win, drawBlack, segments, NSEG);
X	    nline += NSEG*2;
X	}
X	return nline;
X}
X
vline_msg(deltaT, nline, len, rate)
double rate;
X{
X	printf("VERTICAL LINES\n");
X	printf("\n");
X	printf("%d vertical vectors of len. %d in %d secs\n",
X				nline, len, deltaT);
X	printf("rate = %8.2f vectors/sec (%d Pixels/sec)\n",
X				rate, (nline*len)/deltaT);
X}
END_OF_FILE
if test 2372 -ne `wc -c <'vline.c'`; then
    echo shar: \"'vline.c'\" unpacked with wrong size!
fi
# end of 'vline.c'
fi
echo shar: End of archive 1 \(of 4\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 4 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0



More information about the Comp.sources.x mailing list