argv@island.uu.net (Dan Heller) (03/29/89)
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@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@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@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@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@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@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@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@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@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@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@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@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@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@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