[comp.windows.x] XFillRectangle with Tile Vs Manual tiling

afzal@uni2a.unige.ch (11/06/90)

Newsgroups: comp.windows.x
Subject: XFillRectangle with Tile Vs Manual Tiling
Expires: 
References: 
Sender: 
Reply-To: afzal@cuisun.unige.ch ()
Followup-To: 
Organization: University of Geneva, Switzerland
Keywords: 

(not sure if this got posted)

Hi,
	I have a question regarding tiling rectangular areas
of a drawable.

In the course of writing a widget I have been considering the question of
tiling a rectangular area of a drawable.  I have tried the obvious way of
doing this, i.e., setting the tile attribute of a gc, the ts_x_origin,
ts_y_origin, and the fill style to FillTiled, and the not-so-obvious way,
i.e., doing it yourself.

In both cases I was using a Pixmap to tile a drawable.  I found (much to my
surprise) that the not-so-obvious way was MUCH faster (one my Sparcstation
1) with an area about twelve times the area of the tile.  This seems bizzare
to me, after all the obvious way requires one trip to the server, while the
not-so-obvious way requires many trips. 

Has anyone else noticed such behaviour, or have I most likely overlooked
something? 

The code is in a widget I am writing, so I do not include it here, however,
I will go off now and try and reproduce this in straight Xlib calls.  In the
meantime, if anyone has advice, flames (:-), etc., I'll be happy to receive
them, and will post a summary to the net if there is interest

-Afzal Ballim


(later....)

I've written two raw Xlib programs to demonstrate the problem. (Compile
with -lX11).

+------------------------------cut here------------------------------+
#! /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 shell archive."
# Contents:  prob.c prob2.c
# Wrapped by afzal@issun3 on Tue Nov  6 12:19:25 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'prob.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'prob.c'\"
else
echo shar: Extracting \"'prob.c'\" \(13428 characters\)
sed "s/^X//" >'prob.c' <<'END_OF_FILE'
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
Xstatic char pixbits[] = {
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xf4, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00, 0xa0, 0xf6,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x3f, 0x00, 0x20, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x01, 0x00, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0xba, 0x4a, 0x08,
X   0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00,
X   0x54, 0x25, 0x01, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0x1f, 0x20, 0xa2, 0xd2, 0x02, 0x0a, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x88, 0x48, 0x00, 0x00, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0x02, 0x02, 0x00,
X   0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x92,
X   0x10, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0x00, 0x20, 0xa4, 0x02, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x01, 0x88, 0x2a, 0x14, 0x80, 0x08, 0x00, 0x80, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x01, 0x5a, 0x04, 0x50, 0x82,
X   0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x50, 0xe0, 0x52,
X   0x00, 0xa8, 0x08, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13,
X   0x00, 0x42, 0x05, 0x43, 0xb8, 0x24, 0x81, 0x00, 0xfc, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x03, 0x00, 0x48, 0xf1, 0x06, 0x05, 0x41, 0x0a, 0x00, 0xf8,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x09, 0x21, 0x5c, 0x01, 0x50, 0x2a,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0xc4,
X   0x40, 0x85, 0x94, 0x0a, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01,
X   0x40, 0x04, 0x50, 0x91, 0x24, 0x14, 0x00, 0x08, 0xe0, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0x01, 0x04, 0x01, 0x10, 0x60, 0x09, 0xa1, 0x48, 0x00, 0xc0,
X   0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x20, 0x10, 0x02, 0xa6, 0x42, 0x08,
X   0x00, 0x88, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x09, 0x04, 0x40,
X   0xae, 0x14, 0x20, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x20,
X   0x40, 0x88, 0x00, 0x57, 0x41, 0x15, 0x20, 0xa8, 0x11, 0xff, 0xff, 0xff,
X   0xff, 0x37, 0x08, 0x20, 0x35, 0x10, 0x57, 0x2d, 0x52, 0x00, 0x09, 0x05,
X   0xff, 0xff, 0xff, 0xff, 0x37, 0x40, 0xa2, 0x06, 0x44, 0xde, 0x4b, 0x15,
X   0x00, 0x50, 0x01, 0xfe, 0xff, 0xff, 0xff, 0x3b, 0x02, 0xa0, 0xa5, 0x20,
X   0xf4, 0xaa, 0x5a, 0x40, 0x04, 0x15, 0xfc, 0xff, 0xff, 0xff, 0x1b, 0x28,
X   0x0d, 0x4a, 0x52, 0xed, 0xa8, 0x38, 0x04, 0x50, 0x25, 0xfc, 0xff, 0xff,
X   0xff, 0x0d, 0x02, 0xae, 0xc3, 0x50, 0xea, 0xea, 0xe5, 0x00, 0x82, 0x0d,
X   0xfc, 0xff, 0xff, 0xff, 0x1d, 0x11, 0x1d, 0xca, 0x05, 0xe1, 0xf8, 0xc1,
X   0x01, 0x24, 0x83, 0xf0, 0xff, 0xff, 0xff, 0x8e, 0x54, 0x04, 0x41, 0x91,
X   0xb4, 0x7b, 0x55, 0x4a, 0xc8, 0x13, 0xf8, 0xff, 0xff, 0xff, 0x1e, 0x11,
X   0x29, 0xd0, 0x05, 0x2a, 0xff, 0x96, 0x05, 0x40, 0x83, 0xf8, 0xff, 0xff,
X   0x7f, 0x7f, 0xad, 0x02, 0x00, 0x80, 0xfe, 0xd5, 0x77, 0x0f, 0xca, 0x15,
X   0xf0, 0xff, 0xff, 0x7f, 0x5f, 0xa9, 0x0a, 0xe4, 0x20, 0xfe, 0xeb, 0xdb,
X   0x97, 0xd0, 0x4b, 0xf1, 0xff, 0xff, 0x7f, 0xff, 0x82, 0x44, 0x13, 0xd2,
X   0xfe, 0xe2, 0xad, 0x03, 0x2a, 0x84, 0xe0, 0xff, 0xff, 0xbf, 0xff, 0x29,
X   0x14, 0x21, 0xa0, 0xfe, 0xd1, 0x9b, 0xab, 0xf8, 0x14, 0xe0, 0xff, 0xff,
X   0xbf, 0xff, 0xa8, 0x8a, 0x8a, 0x7c, 0x3f, 0xe5, 0x76, 0x28, 0xb4, 0x00,
X   0xe0, 0xff, 0xff, 0xbf, 0xff, 0x55, 0x0a, 0x21, 0xfa, 0x7f, 0xf1, 0x7a,
X   0x55, 0x79, 0x25, 0xe0, 0xff, 0xff, 0xdf, 0xff, 0xab, 0x5c, 0x88, 0xfe,
X   0x5f, 0xeb, 0x7e, 0x2c, 0xff, 0x10, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0x7f,
X   0x03, 0x72, 0xff, 0xff, 0xf1, 0xbe, 0x1a, 0xfe, 0x01, 0xc0, 0xff, 0xff,
X   0xdf, 0xff, 0xdf, 0x5a, 0xf4, 0xff, 0xff, 0x6a, 0x3f, 0x0c, 0xf7, 0x91,
X   0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x87, 0xfb, 0xff, 0xfd, 0xb7, 0x4e,
X   0x1d, 0x7f, 0x01, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x25, 0xfe, 0xff,
X   0xfd, 0x2e, 0x6e, 0x0c, 0xff, 0x50, 0x80, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xef, 0xbf, 0xb7, 0x47, 0xfc, 0xbf, 0x00, 0xa0, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xdf, 0x2b, 0xec, 0x7f, 0x04,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x9b, 0x05,
X   0xfe, 0xbf, 0x90, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xdf, 0xab, 0x21, 0xfc, 0x3f, 0xa0, 0xa2, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xbf, 0x09, 0x45, 0xfa, 0x1f, 0x80, 0x81, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xd7, 0x99, 0xde, 0x7f, 0x20,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xb0,
X   0x97, 0xbf, 0x80, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf4,
X   0x7f, 0xfe, 0xf5, 0x2b, 0x7a, 0x21, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xf8, 0xff, 0xf4, 0xf9, 0x57, 0xfe, 0x00, 0xa2, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xa3, 0xf8, 0x01,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfa, 0xff,
X   0x0b, 0xfd, 0x85, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xbe, 0x7f, 0xa2, 0xfa, 0x15, 0xb0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xfe, 0x4f, 0xb4, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf4, 0x7f, 0x8b,
X   0xb8, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0x2e, 0xba, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x7f, 0xff, 0x7f, 0x08, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa,
X   0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
X   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
X   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xe3,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
X   0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
X};
X
X
X/* border width */
X#define BDW 4
X
Xmain(argc, argv)
Xint	argc;
Xchar	*argv[];
X{
X/* declarations */
XDisplay *mydisplay;
XWindow mywindow;
XXGCValues gcvalues;
XGC copygc,tilegc;
XXSizeHints hints;
Xint myscreen;
Xunsigned long foreground,background;
Xint i,j,k;	/* :-) */
Xint done;
X
X/* Initialisation */
X
Xmydisplay = XOpenDisplay("");
Xmyscreen = DefaultScreen(mydisplay);
X
X/* pixel values */
Xforeground = WhitePixel(mydisplay,myscreen);
Xbackground = BlackPixel(mydisplay,myscreen);
X
X/* hints */
Xhints.x = 200; hints.y = 300;
Xhints.width = 360; hints.height = 480;
X
Xhints.flags = PPosition | PSize;
X
X/* make a window */
X
Xmywindow = XCreateSimpleWindow(mydisplay,
X		DefaultRootWindow(mydisplay),
X		hints.x,hints.y,hints.width,hints.height,
X		BDW,foreground,background);
XXSetStandardProperties(mydisplay,mywindow,"Tile test","Tile test",
X	None,argv,argc,&hints);
X
X/* make the GCs */
X
Xgcvalues.foreground= foreground;
Xgcvalues.background= background;
Xcopygc = XCreateGC(mydisplay,mywindow,GCBackground|GCForeground,&gcvalues);
X
Xgcvalues.fill_style = FillTiled;
Xgcvalues.tile = XCreatePixmapFromBitmapData(mydisplay,mywindow,
X                pixbits,120,120,foreground,background,
X		DefaultDepth(mydisplay,myscreen));
Xtilegc =
XXCreateGC(mydisplay,mywindow,GCBackground|GCForeground|GCTile|GCFillStyle,
X		&gcvalues);
X
X/* raise window */
XXMapRaised(mydisplay,mywindow);
XXFlush(mydisplay);
X
X
X/* main loop, don't care about events */
X
X/* first tile the window twelve hundred times */
Xprintf("Tile the window twelve hundred times using XFillRectangle\n");
Xfor (i=0;i<1200;i++) {
X	/* set the TS origins here because in general what I want to
X           do requires this (scrolling over a pixmap) */
X	gcvalues.ts_x_origin = i;
X	gcvalues.ts_y_origin = i;
X	XChangeGC(mydisplay,tilegc,
X		GCTileStipXOrigin|GCTileStipYOrigin,&gcvalues);
X	XFillRectangle(mydisplay,mywindow,tilegc,
X		0,0,360,480);
X	XFlush(mydisplay);
X}
Xprintf("finished tiling with gc\n");
X
X/* now manual tiling */
X
XXFreeGC(mydisplay,copygc);
XXFreeGC(mydisplay,tilegc);
XXDestroyWindow(mydisplay,mywindow);
XXCloseDisplay(mydisplay);
Xexit(0);
X
X}
END_OF_FILE
if test 13428 -ne `wc -c <'prob.c'`; then
    echo shar: \"'prob.c'\" unpacked with wrong size!
fi
# end of 'prob.c'
fi
if test -f 'prob2.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'prob2.c'\"
else
echo shar: Extracting \"'prob2.c'\" \(13968 characters\)
sed "s/^X//" >'prob2.c' <<'END_OF_FILE'
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
Xstatic char pixbits[] = {
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xf4, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00, 0xa0, 0xf6,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x3f, 0x00, 0x20, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x01, 0x00, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0xba, 0x4a, 0x08,
X   0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00,
X   0x54, 0x25, 0x01, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0x1f, 0x20, 0xa2, 0xd2, 0x02, 0x0a, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x88, 0x48, 0x00, 0x00, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0x02, 0x02, 0x00,
X   0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x92,
X   0x10, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0x00, 0x20, 0xa4, 0x02, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x01, 0x88, 0x2a, 0x14, 0x80, 0x08, 0x00, 0x80, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x01, 0x5a, 0x04, 0x50, 0x82,
X   0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x50, 0xe0, 0x52,
X   0x00, 0xa8, 0x08, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13,
X   0x00, 0x42, 0x05, 0x43, 0xb8, 0x24, 0x81, 0x00, 0xfc, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x03, 0x00, 0x48, 0xf1, 0x06, 0x05, 0x41, 0x0a, 0x00, 0xf8,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x09, 0x21, 0x5c, 0x01, 0x50, 0x2a,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0xc4,
X   0x40, 0x85, 0x94, 0x0a, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01,
X   0x40, 0x04, 0x50, 0x91, 0x24, 0x14, 0x00, 0x08, 0xe0, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0x01, 0x04, 0x01, 0x10, 0x60, 0x09, 0xa1, 0x48, 0x00, 0xc0,
X   0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x20, 0x10, 0x02, 0xa6, 0x42, 0x08,
X   0x00, 0x88, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x09, 0x04, 0x40,
X   0xae, 0x14, 0x20, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x20,
X   0x40, 0x88, 0x00, 0x57, 0x41, 0x15, 0x20, 0xa8, 0x11, 0xff, 0xff, 0xff,
X   0xff, 0x37, 0x08, 0x20, 0x35, 0x10, 0x57, 0x2d, 0x52, 0x00, 0x09, 0x05,
X   0xff, 0xff, 0xff, 0xff, 0x37, 0x40, 0xa2, 0x06, 0x44, 0xde, 0x4b, 0x15,
X   0x00, 0x50, 0x01, 0xfe, 0xff, 0xff, 0xff, 0x3b, 0x02, 0xa0, 0xa5, 0x20,
X   0xf4, 0xaa, 0x5a, 0x40, 0x04, 0x15, 0xfc, 0xff, 0xff, 0xff, 0x1b, 0x28,
X   0x0d, 0x4a, 0x52, 0xed, 0xa8, 0x38, 0x04, 0x50, 0x25, 0xfc, 0xff, 0xff,
X   0xff, 0x0d, 0x02, 0xae, 0xc3, 0x50, 0xea, 0xea, 0xe5, 0x00, 0x82, 0x0d,
X   0xfc, 0xff, 0xff, 0xff, 0x1d, 0x11, 0x1d, 0xca, 0x05, 0xe1, 0xf8, 0xc1,
X   0x01, 0x24, 0x83, 0xf0, 0xff, 0xff, 0xff, 0x8e, 0x54, 0x04, 0x41, 0x91,
X   0xb4, 0x7b, 0x55, 0x4a, 0xc8, 0x13, 0xf8, 0xff, 0xff, 0xff, 0x1e, 0x11,
X   0x29, 0xd0, 0x05, 0x2a, 0xff, 0x96, 0x05, 0x40, 0x83, 0xf8, 0xff, 0xff,
X   0x7f, 0x7f, 0xad, 0x02, 0x00, 0x80, 0xfe, 0xd5, 0x77, 0x0f, 0xca, 0x15,
X   0xf0, 0xff, 0xff, 0x7f, 0x5f, 0xa9, 0x0a, 0xe4, 0x20, 0xfe, 0xeb, 0xdb,
X   0x97, 0xd0, 0x4b, 0xf1, 0xff, 0xff, 0x7f, 0xff, 0x82, 0x44, 0x13, 0xd2,
X   0xfe, 0xe2, 0xad, 0x03, 0x2a, 0x84, 0xe0, 0xff, 0xff, 0xbf, 0xff, 0x29,
X   0x14, 0x21, 0xa0, 0xfe, 0xd1, 0x9b, 0xab, 0xf8, 0x14, 0xe0, 0xff, 0xff,
X   0xbf, 0xff, 0xa8, 0x8a, 0x8a, 0x7c, 0x3f, 0xe5, 0x76, 0x28, 0xb4, 0x00,
X   0xe0, 0xff, 0xff, 0xbf, 0xff, 0x55, 0x0a, 0x21, 0xfa, 0x7f, 0xf1, 0x7a,
X   0x55, 0x79, 0x25, 0xe0, 0xff, 0xff, 0xdf, 0xff, 0xab, 0x5c, 0x88, 0xfe,
X   0x5f, 0xeb, 0x7e, 0x2c, 0xff, 0x10, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0x7f,
X   0x03, 0x72, 0xff, 0xff, 0xf1, 0xbe, 0x1a, 0xfe, 0x01, 0xc0, 0xff, 0xff,
X   0xdf, 0xff, 0xdf, 0x5a, 0xf4, 0xff, 0xff, 0x6a, 0x3f, 0x0c, 0xf7, 0x91,
X   0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x87, 0xfb, 0xff, 0xfd, 0xb7, 0x4e,
X   0x1d, 0x7f, 0x01, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x25, 0xfe, 0xff,
X   0xfd, 0x2e, 0x6e, 0x0c, 0xff, 0x50, 0x80, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xef, 0xbf, 0xb7, 0x47, 0xfc, 0xbf, 0x00, 0xa0, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xdf, 0x2b, 0xec, 0x7f, 0x04,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x9b, 0x05,
X   0xfe, 0xbf, 0x90, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xdf, 0xab, 0x21, 0xfc, 0x3f, 0xa0, 0xa2, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xbf, 0x09, 0x45, 0xfa, 0x1f, 0x80, 0x81, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xd7, 0x99, 0xde, 0x7f, 0x20,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xb0,
X   0x97, 0xbf, 0x80, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf4,
X   0x7f, 0xfe, 0xf5, 0x2b, 0x7a, 0x21, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xf8, 0xff, 0xf4, 0xf9, 0x57, 0xfe, 0x00, 0xa2, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xa3, 0xf8, 0x01,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfa, 0xff,
X   0x0b, 0xfd, 0x85, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xbe, 0x7f, 0xa2, 0xfa, 0x15, 0xb0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xfe, 0x4f, 0xb4, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf4, 0x7f, 0x8b,
X   0xb8, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0x2e, 0xba, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x7f, 0xff, 0x7f, 0x08, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa,
X   0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
X   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
X   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xe3,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
X   0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
X};
X
X
X/* define MD, a macro similar to REMAINDER but with
X   different semantics. If MD(x,y) = z then it should
X   always be the case that z <= 0, and z is the difference
X   between the greatest number evenly divisible by y
X   that is NO GREATER THAN x, and the number x itself. */
X
X#define MD(x,y) ((x < 0) ? -((y+(x%y))%y) : -(x%y))
X
X/* end MD definition */
X
X
X/* border width */
X#define BDW 4
X
X
X/* just to minimise differences, change nothing except the 
X   printing loop. */
X
Xmain(argc, argv)
Xint	argc;
Xchar	*argv[];
X{
X/* declarations */
XDisplay *mydisplay;
XWindow mywindow;
XXGCValues gcvalues;
XGC copygc,tilegc;
XXSizeHints hints;
Xint myscreen;
Xunsigned long foreground,background;
Xint i,j,k;	/* :-) */
Xint done;
X
Xint tmpsx,tmpsy;
XPixmap thepixmap;
X
X/* Initialisation */
X
Xmydisplay = XOpenDisplay("");
Xmyscreen = DefaultScreen(mydisplay);
X
X/* pixel values */
Xforeground = WhitePixel(mydisplay,myscreen);
Xbackground = BlackPixel(mydisplay,myscreen);
X
X/* hints */
Xhints.x = 200; hints.y = 300;
Xhints.width = 360; hints.height = 480;
X
Xhints.flags = PPosition | PSize;
X
X/* make a window */
X
Xmywindow = XCreateSimpleWindow(mydisplay,
X		DefaultRootWindow(mydisplay),
X		hints.x,hints.y,hints.width,hints.height,
X		BDW,foreground,background);
XXSetStandardProperties(mydisplay,mywindow,"Tile test","Tile test",
X	None,argv,argc,&hints);
X
X/* make the GCs */
X
Xgcvalues.foreground= foreground;
Xgcvalues.background= background;
Xcopygc = XCreateGC(mydisplay,mywindow,GCBackground|GCForeground,&gcvalues);
X
Xgcvalues.fill_style = FillTiled;
Xthepixmap = gcvalues.tile = XCreatePixmapFromBitmapData(mydisplay,mywindow,
X                pixbits,120,120,foreground,background,
X		DefaultDepth(mydisplay,myscreen));
Xtilegc =
XXCreateGC(mydisplay,mywindow,GCBackground|GCForeground|GCTile|GCFillStyle,
X		&gcvalues);
X
X/* raise window */
XXMapRaised(mydisplay,mywindow);
XXFlush(mydisplay);
X
X
X/* main loop, don't care about events */
X
X/* first tile the window twelve hundred times */
Xprintf("Tile the window twelve hundred times using XCopyArea/Plane\n");
Xfor (i=0;i<1200;i++) {
X  for (tmpsx=MD(-i,120); tmpsx<360; tmpsx+=120)
X    for (tmpsy=MD(-i,120);tmpsy<480;tmpsy+=120) {
X        if (DefaultDepth(mydisplay,myscreen) == 1)
X            XCopyArea(mydisplay, thepixmap, mywindow, 
X		copygc, 0, 0, 120, 120, tmpsx, tmpsy);
X        else
X            XCopyPlane(mydisplay, thepixmap, mywindow, 
X		copygc, 0, 0, 120, 120, tmpsx, tmpsy);
X    }
X  XFlush(mydisplay);
X}
Xprintf("finished tiling manually\n");
X
X/* now manual tiling */
X
XXFreeGC(mydisplay,copygc);
XXFreeGC(mydisplay,tilegc);
XXDestroyWindow(mydisplay,mywindow);
XXCloseDisplay(mydisplay);
Xexit(0);
X
X}
END_OF_FILE
if test 13968 -ne `wc -c <'prob2.c'`; then
    echo shar: \"'prob2.c'\" unpacked with wrong size!
fi
# end of 'prob2.c'
fi
echo shar: End of shell archive.
exit 0

cjmchale@swift.cs.tcd.ie (11/06/90)

I'm posting this on behalf of Afzal Ballim <afzal@divsun.unige.ch>
who at the moment can read but not post to the net. Either followup
or reply to him (not me).

-------------------------------------------------------------------
Newsgroups: comp.windows.x
Subject: XFillRectangle with Tile Vs Manual Tiling
Reply-To: afzal@cuisun.unige.ch

(not sure if this got posted)

Hi,
	I have a question regarding tiling rectangular areas
of a drawable.

In the course of writing a widget I have been considering the question of
tiling a rectangular area of a drawable.  I have tried the obvious way of
doing this, i.e., setting the tile attribute of a gc, the ts_x_origin,
ts_y_origin, and the fill style to FillTiled, and the not-so-obvious way,
i.e., doing it yourself.

In both cases I was using a Pixmap to tile a drawable.  I found (much to my
surprise) that the not-so-obvious way was MUCH faster (one my Sparcstation
1) with an area about twelve times the area of the tile.  This seems bizzare
to me, after all the obvious way requires one trip to the server, while the
not-so-obvious way requires many trips. 

Has anyone else noticed such behaviour, or have I most likely overlooked
something? 

The code is in a widget I am writing, so I do not include it here, however,
I will go off now and try and reproduce this in straight Xlib calls.  In the
meantime, if anyone has advice, flames (:-), etc., I'll be happy to receive
them, and will post a summary to the net if there is interest

-Afzal Ballim


(later....)

I've written two raw Xlib programs to demonstrate the problem. (Compile
with -lX11).

+------------------------------cut here------------------------------+
#! /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 shell archive."
# Contents:  prob.c prob2.c
# Wrapped by afzal@issun3 on Tue Nov  6 12:19:25 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'prob.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'prob.c'\"
else
echo shar: Extracting \"'prob.c'\" \(13428 characters\)
sed "s/^X//" >'prob.c' <<'END_OF_FILE'
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
Xstatic char pixbits[] = {
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xf4, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00, 0xa0, 0xf6,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x3f, 0x00, 0x20, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x01, 0x00, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0xba, 0x4a, 0x08,
X   0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00,
X   0x54, 0x25, 0x01, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0x1f, 0x20, 0xa2, 0xd2, 0x02, 0x0a, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x88, 0x48, 0x00, 0x00, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0x02, 0x02, 0x00,
X   0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x92,
X   0x10, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0x00, 0x20, 0xa4, 0x02, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x01, 0x88, 0x2a, 0x14, 0x80, 0x08, 0x00, 0x80, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x01, 0x5a, 0x04, 0x50, 0x82,
X   0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x50, 0xe0, 0x52,
X   0x00, 0xa8, 0x08, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13,
X   0x00, 0x42, 0x05, 0x43, 0xb8, 0x24, 0x81, 0x00, 0xfc, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x03, 0x00, 0x48, 0xf1, 0x06, 0x05, 0x41, 0x0a, 0x00, 0xf8,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x09, 0x21, 0x5c, 0x01, 0x50, 0x2a,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0xc4,
X   0x40, 0x85, 0x94, 0x0a, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01,
X   0x40, 0x04, 0x50, 0x91, 0x24, 0x14, 0x00, 0x08, 0xe0, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0x01, 0x04, 0x01, 0x10, 0x60, 0x09, 0xa1, 0x48, 0x00, 0xc0,
X   0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x20, 0x10, 0x02, 0xa6, 0x42, 0x08,
X   0x00, 0x88, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x09, 0x04, 0x40,
X   0xae, 0x14, 0x20, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x20,
X   0x40, 0x88, 0x00, 0x57, 0x41, 0x15, 0x20, 0xa8, 0x11, 0xff, 0xff, 0xff,
X   0xff, 0x37, 0x08, 0x20, 0x35, 0x10, 0x57, 0x2d, 0x52, 0x00, 0x09, 0x05,
X   0xff, 0xff, 0xff, 0xff, 0x37, 0x40, 0xa2, 0x06, 0x44, 0xde, 0x4b, 0x15,
X   0x00, 0x50, 0x01, 0xfe, 0xff, 0xff, 0xff, 0x3b, 0x02, 0xa0, 0xa5, 0x20,
X   0xf4, 0xaa, 0x5a, 0x40, 0x04, 0x15, 0xfc, 0xff, 0xff, 0xff, 0x1b, 0x28,
X   0x0d, 0x4a, 0x52, 0xed, 0xa8, 0x38, 0x04, 0x50, 0x25, 0xfc, 0xff, 0xff,
X   0xff, 0x0d, 0x02, 0xae, 0xc3, 0x50, 0xea, 0xea, 0xe5, 0x00, 0x82, 0x0d,
X   0xfc, 0xff, 0xff, 0xff, 0x1d, 0x11, 0x1d, 0xca, 0x05, 0xe1, 0xf8, 0xc1,
X   0x01, 0x24, 0x83, 0xf0, 0xff, 0xff, 0xff, 0x8e, 0x54, 0x04, 0x41, 0x91,
X   0xb4, 0x7b, 0x55, 0x4a, 0xc8, 0x13, 0xf8, 0xff, 0xff, 0xff, 0x1e, 0x11,
X   0x29, 0xd0, 0x05, 0x2a, 0xff, 0x96, 0x05, 0x40, 0x83, 0xf8, 0xff, 0xff,
X   0x7f, 0x7f, 0xad, 0x02, 0x00, 0x80, 0xfe, 0xd5, 0x77, 0x0f, 0xca, 0x15,
X   0xf0, 0xff, 0xff, 0x7f, 0x5f, 0xa9, 0x0a, 0xe4, 0x20, 0xfe, 0xeb, 0xdb,
X   0x97, 0xd0, 0x4b, 0xf1, 0xff, 0xff, 0x7f, 0xff, 0x82, 0x44, 0x13, 0xd2,
X   0xfe, 0xe2, 0xad, 0x03, 0x2a, 0x84, 0xe0, 0xff, 0xff, 0xbf, 0xff, 0x29,
X   0x14, 0x21, 0xa0, 0xfe, 0xd1, 0x9b, 0xab, 0xf8, 0x14, 0xe0, 0xff, 0xff,
X   0xbf, 0xff, 0xa8, 0x8a, 0x8a, 0x7c, 0x3f, 0xe5, 0x76, 0x28, 0xb4, 0x00,
X   0xe0, 0xff, 0xff, 0xbf, 0xff, 0x55, 0x0a, 0x21, 0xfa, 0x7f, 0xf1, 0x7a,
X   0x55, 0x79, 0x25, 0xe0, 0xff, 0xff, 0xdf, 0xff, 0xab, 0x5c, 0x88, 0xfe,
X   0x5f, 0xeb, 0x7e, 0x2c, 0xff, 0x10, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0x7f,
X   0x03, 0x72, 0xff, 0xff, 0xf1, 0xbe, 0x1a, 0xfe, 0x01, 0xc0, 0xff, 0xff,
X   0xdf, 0xff, 0xdf, 0x5a, 0xf4, 0xff, 0xff, 0x6a, 0x3f, 0x0c, 0xf7, 0x91,
X   0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x87, 0xfb, 0xff, 0xfd, 0xb7, 0x4e,
X   0x1d, 0x7f, 0x01, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x25, 0xfe, 0xff,
X   0xfd, 0x2e, 0x6e, 0x0c, 0xff, 0x50, 0x80, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xef, 0xbf, 0xb7, 0x47, 0xfc, 0xbf, 0x00, 0xa0, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xdf, 0x2b, 0xec, 0x7f, 0x04,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x9b, 0x05,
X   0xfe, 0xbf, 0x90, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xdf, 0xab, 0x21, 0xfc, 0x3f, 0xa0, 0xa2, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xbf, 0x09, 0x45, 0xfa, 0x1f, 0x80, 0x81, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xd7, 0x99, 0xde, 0x7f, 0x20,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xb0,
X   0x97, 0xbf, 0x80, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf4,
X   0x7f, 0xfe, 0xf5, 0x2b, 0x7a, 0x21, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xf8, 0xff, 0xf4, 0xf9, 0x57, 0xfe, 0x00, 0xa2, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xa3, 0xf8, 0x01,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfa, 0xff,
X   0x0b, 0xfd, 0x85, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xbe, 0x7f, 0xa2, 0xfa, 0x15, 0xb0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xfe, 0x4f, 0xb4, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf4, 0x7f, 0x8b,
X   0xb8, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0x2e, 0xba, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x7f, 0xff, 0x7f, 0x08, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa,
X   0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
X   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
X   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xe3,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
X   0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
X};
X
X
X/* border width */
X#define BDW 4
X
Xmain(argc, argv)
Xint	argc;
Xchar	*argv[];
X{
X/* declarations */
XDisplay *mydisplay;
XWindow mywindow;
XXGCValues gcvalues;
XGC copygc,tilegc;
XXSizeHints hints;
Xint myscreen;
Xunsigned long foreground,background;
Xint i,j,k;	/* :-) */
Xint done;
X
X/* Initialisation */
X
Xmydisplay = XOpenDisplay("");
Xmyscreen = DefaultScreen(mydisplay);
X
X/* pixel values */
Xforeground = WhitePixel(mydisplay,myscreen);
Xbackground = BlackPixel(mydisplay,myscreen);
X
X/* hints */
Xhints.x = 200; hints.y = 300;
Xhints.width = 360; hints.height = 480;
X
Xhints.flags = PPosition | PSize;
X
X/* make a window */
X
Xmywindow = XCreateSimpleWindow(mydisplay,
X		DefaultRootWindow(mydisplay),
X		hints.x,hints.y,hints.width,hints.height,
X		BDW,foreground,background);
XXSetStandardProperties(mydisplay,mywindow,"Tile test","Tile test",
X	None,argv,argc,&hints);
X
X/* make the GCs */
X
Xgcvalues.foreground= foreground;
Xgcvalues.background= background;
Xcopygc = XCreateGC(mydisplay,mywindow,GCBackground|GCForeground,&gcvalues);
X
Xgcvalues.fill_style = FillTiled;
Xgcvalues.tile = XCreatePixmapFromBitmapData(mydisplay,mywindow,
X                pixbits,120,120,foreground,background,
X		DefaultDepth(mydisplay,myscreen));
Xtilegc =
XXCreateGC(mydisplay,mywindow,GCBackground|GCForeground|GCTile|GCFillStyle,
X		&gcvalues);
X
X/* raise window */
XXMapRaised(mydisplay,mywindow);
XXFlush(mydisplay);
X
X
X/* main loop, don't care about events */
X
X/* first tile the window twelve hundred times */
Xprintf("Tile the window twelve hundred times using XFillRectangle\n");
Xfor (i=0;i<1200;i++) {
X	/* set the TS origins here because in general what I want to
X           do requires this (scrolling over a pixmap) */
X	gcvalues.ts_x_origin = i;
X	gcvalues.ts_y_origin = i;
X	XChangeGC(mydisplay,tilegc,
X		GCTileStipXOrigin|GCTileStipYOrigin,&gcvalues);
X	XFillRectangle(mydisplay,mywindow,tilegc,
X		0,0,360,480);
X	XFlush(mydisplay);
X}
Xprintf("finished tiling with gc\n");
X
X/* now manual tiling */
X
XXFreeGC(mydisplay,copygc);
XXFreeGC(mydisplay,tilegc);
XXDestroyWindow(mydisplay,mywindow);
XXCloseDisplay(mydisplay);
Xexit(0);
X
X}
END_OF_FILE
if test 13428 -ne `wc -c <'prob.c'`; then
    echo shar: \"'prob.c'\" unpacked with wrong size!
fi
# end of 'prob.c'
fi
if test -f 'prob2.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'prob2.c'\"
else
echo shar: Extracting \"'prob2.c'\" \(13968 characters\)
sed "s/^X//" >'prob2.c' <<'END_OF_FILE'
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
Xstatic char pixbits[] = {
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xf4, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00, 0xa0, 0xf6,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x3f, 0x00, 0x20, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x01, 0x00, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0xba, 0x4a, 0x08,
X   0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00,
X   0x54, 0x25, 0x01, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0x1f, 0x20, 0xa2, 0xd2, 0x02, 0x0a, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x88, 0x48, 0x00, 0x00, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0x02, 0x02, 0x00,
X   0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x92,
X   0x10, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0x00, 0x20, 0xa4, 0x02, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x01, 0x88, 0x2a, 0x14, 0x80, 0x08, 0x00, 0x80, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x01, 0x5a, 0x04, 0x50, 0x82,
X   0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x50, 0xe0, 0x52,
X   0x00, 0xa8, 0x08, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13,
X   0x00, 0x42, 0x05, 0x43, 0xb8, 0x24, 0x81, 0x00, 0xfc, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x03, 0x00, 0x48, 0xf1, 0x06, 0x05, 0x41, 0x0a, 0x00, 0xf8,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x09, 0x21, 0x5c, 0x01, 0x50, 0x2a,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0xc4,
X   0x40, 0x85, 0x94, 0x0a, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01,
X   0x40, 0x04, 0x50, 0x91, 0x24, 0x14, 0x00, 0x08, 0xe0, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0x01, 0x04, 0x01, 0x10, 0x60, 0x09, 0xa1, 0x48, 0x00, 0xc0,
X   0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x20, 0x10, 0x02, 0xa6, 0x42, 0x08,
X   0x00, 0x88, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x09, 0x04, 0x40,
X   0xae, 0x14, 0x20, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x20,
X   0x40, 0x88, 0x00, 0x57, 0x41, 0x15, 0x20, 0xa8, 0x11, 0xff, 0xff, 0xff,
X   0xff, 0x37, 0x08, 0x20, 0x35, 0x10, 0x57, 0x2d, 0x52, 0x00, 0x09, 0x05,
X   0xff, 0xff, 0xff, 0xff, 0x37, 0x40, 0xa2, 0x06, 0x44, 0xde, 0x4b, 0x15,
X   0x00, 0x50, 0x01, 0xfe, 0xff, 0xff, 0xff, 0x3b, 0x02, 0xa0, 0xa5, 0x20,
X   0xf4, 0xaa, 0x5a, 0x40, 0x04, 0x15, 0xfc, 0xff, 0xff, 0xff, 0x1b, 0x28,
X   0x0d, 0x4a, 0x52, 0xed, 0xa8, 0x38, 0x04, 0x50, 0x25, 0xfc, 0xff, 0xff,
X   0xff, 0x0d, 0x02, 0xae, 0xc3, 0x50, 0xea, 0xea, 0xe5, 0x00, 0x82, 0x0d,
X   0xfc, 0xff, 0xff, 0xff, 0x1d, 0x11, 0x1d, 0xca, 0x05, 0xe1, 0xf8, 0xc1,
X   0x01, 0x24, 0x83, 0xf0, 0xff, 0xff, 0xff, 0x8e, 0x54, 0x04, 0x41, 0x91,
X   0xb4, 0x7b, 0x55, 0x4a, 0xc8, 0x13, 0xf8, 0xff, 0xff, 0xff, 0x1e, 0x11,
X   0x29, 0xd0, 0x05, 0x2a, 0xff, 0x96, 0x05, 0x40, 0x83, 0xf8, 0xff, 0xff,
X   0x7f, 0x7f, 0xad, 0x02, 0x00, 0x80, 0xfe, 0xd5, 0x77, 0x0f, 0xca, 0x15,
X   0xf0, 0xff, 0xff, 0x7f, 0x5f, 0xa9, 0x0a, 0xe4, 0x20, 0xfe, 0xeb, 0xdb,
X   0x97, 0xd0, 0x4b, 0xf1, 0xff, 0xff, 0x7f, 0xff, 0x82, 0x44, 0x13, 0xd2,
X   0xfe, 0xe2, 0xad, 0x03, 0x2a, 0x84, 0xe0, 0xff, 0xff, 0xbf, 0xff, 0x29,
X   0x14, 0x21, 0xa0, 0xfe, 0xd1, 0x9b, 0xab, 0xf8, 0x14, 0xe0, 0xff, 0xff,
X   0xbf, 0xff, 0xa8, 0x8a, 0x8a, 0x7c, 0x3f, 0xe5, 0x76, 0x28, 0xb4, 0x00,
X   0xe0, 0xff, 0xff, 0xbf, 0xff, 0x55, 0x0a, 0x21, 0xfa, 0x7f, 0xf1, 0x7a,
X   0x55, 0x79, 0x25, 0xe0, 0xff, 0xff, 0xdf, 0xff, 0xab, 0x5c, 0x88, 0xfe,
X   0x5f, 0xeb, 0x7e, 0x2c, 0xff, 0x10, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0x7f,
X   0x03, 0x72, 0xff, 0xff, 0xf1, 0xbe, 0x1a, 0xfe, 0x01, 0xc0, 0xff, 0xff,
X   0xdf, 0xff, 0xdf, 0x5a, 0xf4, 0xff, 0xff, 0x6a, 0x3f, 0x0c, 0xf7, 0x91,
X   0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x87, 0xfb, 0xff, 0xfd, 0xb7, 0x4e,
X   0x1d, 0x7f, 0x01, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x25, 0xfe, 0xff,
X   0xfd, 0x2e, 0x6e, 0x0c, 0xff, 0x50, 0x80, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xef, 0xbf, 0xb7, 0x47, 0xfc, 0xbf, 0x00, 0xa0, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xdf, 0x2b, 0xec, 0x7f, 0x04,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x9b, 0x05,
X   0xfe, 0xbf, 0x90, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xdf, 0xab, 0x21, 0xfc, 0x3f, 0xa0, 0xa2, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xbf, 0x09, 0x45, 0xfa, 0x1f, 0x80, 0x81, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xd7, 0x99, 0xde, 0x7f, 0x20,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xb0,
X   0x97, 0xbf, 0x80, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf4,
X   0x7f, 0xfe, 0xf5, 0x2b, 0x7a, 0x21, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xf8, 0xff, 0xf4, 0xf9, 0x57, 0xfe, 0x00, 0xa2, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xa3, 0xf8, 0x01,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfa, 0xff,
X   0x0b, 0xfd, 0x85, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xbe, 0x7f, 0xa2, 0xfa, 0x15, 0xb0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xfe, 0x4f, 0xb4, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf4, 0x7f, 0x8b,
X   0xb8, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0x2e, 0xba, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x7f, 0xff, 0x7f, 0x08, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa,
X   0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
X   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
X   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xe3,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
X   0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
X};
X
X
X/* define MD, a macro similar to REMAINDER but with
X   different semantics. If MD(x,y) = z then it should
X   always be the case that z <= 0, and z is the difference
X   between the greatest number evenly divisible by y
X   that is NO GREATER THAN x, and the number x itself. */
X
X#define MD(x,y) ((x < 0) ? -((y+(x%y))%y) : -(x%y))
X
X/* end MD definition */
X
X
X/* border width */
X#define BDW 4
X
X
X/* just to minimise differences, change nothing except the 
X   printing loop. */
X
Xmain(argc, argv)
Xint	argc;
Xchar	*argv[];
X{
X/* declarations */
XDisplay *mydisplay;
XWindow mywindow;
XXGCValues gcvalues;
XGC copygc,tilegc;
XXSizeHints hints;
Xint myscreen;
Xunsigned long foreground,background;
Xint i,j,k;	/* :-) */
Xint done;
X
Xint tmpsx,tmpsy;
XPixmap thepixmap;
X
X/* Initialisation */
X
Xmydisplay = XOpenDisplay("");
Xmyscreen = DefaultScreen(mydisplay);
X
X/* pixel values */
Xforeground = WhitePixel(mydisplay,myscreen);
Xbackground = BlackPixel(mydisplay,myscreen);
X
X/* hints */
Xhints.x = 200; hints.y = 300;
Xhints.width = 360; hints.height = 480;
X
Xhints.flags = PPosition | PSize;
X
X/* make a window */
X
Xmywindow = XCreateSimpleWindow(mydisplay,
X		DefaultRootWindow(mydisplay),
X		hints.x,hints.y,hints.width,hints.height,
X		BDW,foreground,background);
XXSetStandardProperties(mydisplay,mywindow,"Tile test","Tile test",
X	None,argv,argc,&hints);
X
X/* make the GCs */
X
Xgcvalues.foreground= foreground;
Xgcvalues.background= background;
Xcopygc = XCreateGC(mydisplay,mywindow,GCBackground|GCForeground,&gcvalues);
X
Xgcvalues.fill_style = FillTiled;
Xthepixmap = gcvalues.tile = XCreatePixmapFromBitmapData(mydisplay,mywindow,
X                pixbits,120,120,foreground,background,
X		DefaultDepth(mydisplay,myscreen));
Xtilegc =
XXCreateGC(mydisplay,mywindow,GCBackground|GCForeground|GCTile|GCFillStyle,
X		&gcvalues);
X
X/* raise window */
XXMapRaised(mydisplay,mywindow);
XXFlush(mydisplay);
X
X
X/* main loop, don't care about events */
X
X/* first tile the window twelve hundred times */
Xprintf("Tile the window twelve hundred times using XCopyArea/Plane\n");
Xfor (i=0;i<1200;i++) {
X  for (tmpsx=MD(-i,120); tmpsx<360; tmpsx+=120)
X    for (tmpsy=MD(-i,120);tmpsy<480;tmpsy+=120) {
X        if (DefaultDepth(mydisplay,myscreen) == 1)
X            XCopyArea(mydisplay, thepixmap, mywindow, 
X		copygc, 0, 0, 120, 120, tmpsx, tmpsy);
X        else
X            XCopyPlane(mydisplay, thepixmap, mywindow, 
X		copygc, 0, 0, 120, 120, tmpsx, tmpsy);
X    }
X  XFlush(mydisplay);
X}
Xprintf("finished tiling manually\n");
X
X/* now manual tiling */
X
XXFreeGC(mydisplay,copygc);
XXFreeGC(mydisplay,tilegc);
XXDestroyWindow(mydisplay,mywindow);
XXCloseDisplay(mydisplay);
Xexit(0);
X
X}
END_OF_FILE
if test 13968 -ne `wc -c <'prob2.c'`; then
    echo shar: \"'prob2.c'\" unpacked with wrong size!
fi
# end of 'prob2.c'
fi
echo shar: End of shell archive.
exit 0
-------------------------------------------------------------------

Remember, if replying by email then reply to Afzal Ballim rather than
to me.

Regards,
Ciaran.
-- 
Ciaran McHale		"An inappropiate joke for every occasion"
Department of Computer Science, Trinity College, Dublin 2, Ireland.
Telephone: +353-1-772941 ext 1538    FAX: +353-1-772204   Telex: 93782 TCD EI
email: cjmchale@cs.tcd.ie	or	cjmchale%cs.tcd.ie@cunyvm.cuny.edu
	My opinions are.

uucp@vicorp.com (Unix to Unix Copy) (11/07/90)

(not sure if this got posted)

Hi,
	I have a question regarding tiling rectangular areas
of a drawable.

In the course of writing a widget I have been considering the question of
tiling a rectangular area of a drawable.  I have tried the obvious way of
doing this, i.e., setting the tile attribute of a gc, the ts_x_origin,
ts_y_origin, and the fill style to FillTiled, and the not-so-obvious way,
i.e., doing it yourself.

In both cases I was using a Pixmap to tile a drawable.  I found (much to my
surprise) that the not-so-obvious way was MUCH faster (one my Sparcstation
1) with an area about twelve times the area of the tile.  This seems bizzare
to me, after all the obvious way requires one trip to the server, while the
not-so-obvious way requires many trips. 

Has anyone else noticed such behaviour, or have I most likely overlooked
something? 

The code is in a widget I am writing, so I do not include it here, however,
I will go off now and try and reproduce this in straight Xlib calls.  In the
meantime, if anyone has advice, flames (:-), etc., I'll be happy to receive
them, and will post a summary to the net if there is interest

-Afzal Ballim


(later....)

I've written two raw Xlib programs to demonstrate the problem. (Compile
with -lX11).

+------------------------------cut here------------------------------+
#! /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 shell archive."
# Contents:  prob.c prob2.c
# Wrapped by afzal@issun3 on Tue Nov  6 12:19:25 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'prob.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'prob.c'\"
else
echo shar: Extracting \"'prob.c'\" \(13428 characters\)
sed "s/^X//" >'prob.c' <<'END_OF_FILE'
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
Xstatic char pixbits[] = {
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xf4, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00, 0xa0, 0xf6,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x3f, 0x00, 0x20, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x01, 0x00, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0xba, 0x4a, 0x08,
X   0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00,
X   0x54, 0x25, 0x01, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0x1f, 0x20, 0xa2, 0xd2, 0x02, 0x0a, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x88, 0x48, 0x00, 0x00, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0x02, 0x02, 0x00,
X   0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x92,
X   0x10, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0x00, 0x20, 0xa4, 0x02, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x01, 0x88, 0x2a, 0x14, 0x80, 0x08, 0x00, 0x80, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x01, 0x5a, 0x04, 0x50, 0x82,
X   0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x50, 0xe0, 0x52,
X   0x00, 0xa8, 0x08, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13,
X   0x00, 0x42, 0x05, 0x43, 0xb8, 0x24, 0x81, 0x00, 0xfc, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x03, 0x00, 0x48, 0xf1, 0x06, 0x05, 0x41, 0x0a, 0x00, 0xf8,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x09, 0x21, 0x5c, 0x01, 0x50, 0x2a,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0xc4,
X   0x40, 0x85, 0x94, 0x0a, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01,
X   0x40, 0x04, 0x50, 0x91, 0x24, 0x14, 0x00, 0x08, 0xe0, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0x01, 0x04, 0x01, 0x10, 0x60, 0x09, 0xa1, 0x48, 0x00, 0xc0,
X   0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x20, 0x10, 0x02, 0xa6, 0x42, 0x08,
X   0x00, 0x88, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x09, 0x04, 0x40,
X   0xae, 0x14, 0x20, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x20,
X   0x40, 0x88, 0x00, 0x57, 0x41, 0x15, 0x20, 0xa8, 0x11, 0xff, 0xff, 0xff,
X   0xff, 0x37, 0x08, 0x20, 0x35, 0x10, 0x57, 0x2d, 0x52, 0x00, 0x09, 0x05,
X   0xff, 0xff, 0xff, 0xff, 0x37, 0x40, 0xa2, 0x06, 0x44, 0xde, 0x4b, 0x15,
X   0x00, 0x50, 0x01, 0xfe, 0xff, 0xff, 0xff, 0x3b, 0x02, 0xa0, 0xa5, 0x20,
X   0xf4, 0xaa, 0x5a, 0x40, 0x04, 0x15, 0xfc, 0xff, 0xff, 0xff, 0x1b, 0x28,
X   0x0d, 0x4a, 0x52, 0xed, 0xa8, 0x38, 0x04, 0x50, 0x25, 0xfc, 0xff, 0xff,
X   0xff, 0x0d, 0x02, 0xae, 0xc3, 0x50, 0xea, 0xea, 0xe5, 0x00, 0x82, 0x0d,
X   0xfc, 0xff, 0xff, 0xff, 0x1d, 0x11, 0x1d, 0xca, 0x05, 0xe1, 0xf8, 0xc1,
X   0x01, 0x24, 0x83, 0xf0, 0xff, 0xff, 0xff, 0x8e, 0x54, 0x04, 0x41, 0x91,
X   0xb4, 0x7b, 0x55, 0x4a, 0xc8, 0x13, 0xf8, 0xff, 0xff, 0xff, 0x1e, 0x11,
X   0x29, 0xd0, 0x05, 0x2a, 0xff, 0x96, 0x05, 0x40, 0x83, 0xf8, 0xff, 0xff,
X   0x7f, 0x7f, 0xad, 0x02, 0x00, 0x80, 0xfe, 0xd5, 0x77, 0x0f, 0xca, 0x15,
X   0xf0, 0xff, 0xff, 0x7f, 0x5f, 0xa9, 0x0a, 0xe4, 0x20, 0xfe, 0xeb, 0xdb,
X   0x97, 0xd0, 0x4b, 0xf1, 0xff, 0xff, 0x7f, 0xff, 0x82, 0x44, 0x13, 0xd2,
X   0xfe, 0xe2, 0xad, 0x03, 0x2a, 0x84, 0xe0, 0xff, 0xff, 0xbf, 0xff, 0x29,
X   0x14, 0x21, 0xa0, 0xfe, 0xd1, 0x9b, 0xab, 0xf8, 0x14, 0xe0, 0xff, 0xff,
X   0xbf, 0xff, 0xa8, 0x8a, 0x8a, 0x7c, 0x3f, 0xe5, 0x76, 0x28, 0xb4, 0x00,
X   0xe0, 0xff, 0xff, 0xbf, 0xff, 0x55, 0x0a, 0x21, 0xfa, 0x7f, 0xf1, 0x7a,
X   0x55, 0x79, 0x25, 0xe0, 0xff, 0xff, 0xdf, 0xff, 0xab, 0x5c, 0x88, 0xfe,
X   0x5f, 0xeb, 0x7e, 0x2c, 0xff, 0x10, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0x7f,
X   0x03, 0x72, 0xff, 0xff, 0xf1, 0xbe, 0x1a, 0xfe, 0x01, 0xc0, 0xff, 0xff,
X   0xdf, 0xff, 0xdf, 0x5a, 0xf4, 0xff, 0xff, 0x6a, 0x3f, 0x0c, 0xf7, 0x91,
X   0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x87, 0xfb, 0xff, 0xfd, 0xb7, 0x4e,
X   0x1d, 0x7f, 0x01, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x25, 0xfe, 0xff,
X   0xfd, 0x2e, 0x6e, 0x0c, 0xff, 0x50, 0x80, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xef, 0xbf, 0xb7, 0x47, 0xfc, 0xbf, 0x00, 0xa0, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xdf, 0x2b, 0xec, 0x7f, 0x04,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x9b, 0x05,
X   0xfe, 0xbf, 0x90, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xdf, 0xab, 0x21, 0xfc, 0x3f, 0xa0, 0xa2, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xbf, 0x09, 0x45, 0xfa, 0x1f, 0x80, 0x81, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xd7, 0x99, 0xde, 0x7f, 0x20,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xb0,
X   0x97, 0xbf, 0x80, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf4,
X   0x7f, 0xfe, 0xf5, 0x2b, 0x7a, 0x21, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xf8, 0xff, 0xf4, 0xf9, 0x57, 0xfe, 0x00, 0xa2, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xa3, 0xf8, 0x01,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfa, 0xff,
X   0x0b, 0xfd, 0x85, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xbe, 0x7f, 0xa2, 0xfa, 0x15, 0xb0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xfe, 0x4f, 0xb4, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf4, 0x7f, 0x8b,
X   0xb8, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0x2e, 0xba, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x7f, 0xff, 0x7f, 0x08, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa,
X   0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
X   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
X   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xe3,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
X   0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
X};
X
X
X/* border width */
X#define BDW 4
X
Xmain(argc, argv)
Xint	argc;
Xchar	*argv[];
X{
X/* declarations */
XDisplay *mydisplay;
XWindow mywindow;
XXGCValues gcvalues;
XGC copygc,tilegc;
XXSizeHints hints;
Xint myscreen;
Xunsigned long foreground,background;
Xint i,j,k;	/* :-) */
Xint done;
X
X/* Initialisation */
X
Xmydisplay = XOpenDisplay("");
Xmyscreen = DefaultScreen(mydisplay);
X
X/* pixel values */
Xforeground = WhitePixel(mydisplay,myscreen);
Xbackground = BlackPixel(mydisplay,myscreen);
X
X/* hints */
Xhints.x = 200; hints.y = 300;
Xhints.width = 360; hints.height = 480;
X
Xhints.flags = PPosition | PSize;
X
X/* make a window */
X
Xmywindow = XCreateSimpleWindow(mydisplay,
X		DefaultRootWindow(mydisplay),
X		hints.x,hints.y,hints.width,hints.height,
X		BDW,foreground,background);
XXSetStandardProperties(mydisplay,mywindow,"Tile test","Tile test",
X	None,argv,argc,&hints);
X
X/* make the GCs */
X
Xgcvalues.foreground= foreground;
Xgcvalues.background= background;
Xcopygc = XCreateGC(mydisplay,mywindow,GCBackground|GCForeground,&gcvalues);
X
Xgcvalues.fill_style = FillTiled;
Xgcvalues.tile = XCreatePixmapFromBitmapData(mydisplay,mywindow,
X                pixbits,120,120,foreground,background,
X		DefaultDepth(mydisplay,myscreen));
Xtilegc =
XXCreateGC(mydisplay,mywindow,GCBackground|GCForeground|GCTile|GCFillStyle,
X		&gcvalues);
X
X/* raise window */
XXMapRaised(mydisplay,mywindow);
XXFlush(mydisplay);
X
X
X/* main loop, don't care about events */
X
X/* first tile the window twelve hundred times */
Xprintf("Tile the window twelve hundred times using XFillRectangle\n");
Xfor (i=0;i<1200;i++) {
X	/* set the TS origins here because in general what I want to
X           do requires this (scrolling over a pixmap) */
X	gcvalues.ts_x_origin = i;
X	gcvalues.ts_y_origin = i;
X	XChangeGC(mydisplay,tilegc,
X		GCTileStipXOrigin|GCTileStipYOrigin,&gcvalues);
X	XFillRectangle(mydisplay,mywindow,tilegc,
X		0,0,360,480);
X	XFlush(mydisplay);
X}
Xprintf("finished tiling with gc\n");
X
X/* now manual tiling */
X
XXFreeGC(mydisplay,copygc);
XXFreeGC(mydisplay,tilegc);
XXDestroyWindow(mydisplay,mywindow);
XXCloseDisplay(mydisplay);
Xexit(0);
X
X}
END_OF_FILE
if test 13428 -ne `wc -c <'prob.c'`; then
    echo shar: \"'prob.c'\" unpacked with wrong size!
fi
# end of 'prob.c'
fi
if test -f 'prob2.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'prob2.c'\"
else
echo shar: Extracting \"'prob2.c'\" \(13968 characters\)
sed "s/^X//" >'prob2.c' <<'END_OF_FILE'
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
Xstatic char pixbits[] = {
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xf4, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00, 0xa0, 0xf6,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x3f, 0x00, 0x20, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x01, 0x00, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0xba, 0x4a, 0x08,
X   0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00,
X   0x54, 0x25, 0x01, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0x1f, 0x20, 0xa2, 0xd2, 0x02, 0x0a, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0x07, 0x00, 0x08, 0x88, 0x48, 0x00, 0x00, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0x02, 0x02, 0x00,
X   0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x92,
X   0x10, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0x00, 0x20, 0xa4, 0x02, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x01, 0x88, 0x2a, 0x14, 0x80, 0x08, 0x00, 0x80, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x01, 0x5a, 0x04, 0x50, 0x82,
X   0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x50, 0xe0, 0x52,
X   0x00, 0xa8, 0x08, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13,
X   0x00, 0x42, 0x05, 0x43, 0xb8, 0x24, 0x81, 0x00, 0xfc, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x03, 0x00, 0x48, 0xf1, 0x06, 0x05, 0x41, 0x0a, 0x00, 0xf8,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x09, 0x21, 0x5c, 0x01, 0x50, 0x2a,
X   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0xc4,
X   0x40, 0x85, 0x94, 0x0a, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01,
X   0x40, 0x04, 0x50, 0x91, 0x24, 0x14, 0x00, 0x08, 0xe0, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0x01, 0x04, 0x01, 0x10, 0x60, 0x09, 0xa1, 0x48, 0x00, 0xc0,
X   0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x20, 0x10, 0x02, 0xa6, 0x42, 0x08,
X   0x00, 0x88, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0x09, 0x04, 0x40,
X   0xae, 0x14, 0x20, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x20,
X   0x40, 0x88, 0x00, 0x57, 0x41, 0x15, 0x20, 0xa8, 0x11, 0xff, 0xff, 0xff,
X   0xff, 0x37, 0x08, 0x20, 0x35, 0x10, 0x57, 0x2d, 0x52, 0x00, 0x09, 0x05,
X   0xff, 0xff, 0xff, 0xff, 0x37, 0x40, 0xa2, 0x06, 0x44, 0xde, 0x4b, 0x15,
X   0x00, 0x50, 0x01, 0xfe, 0xff, 0xff, 0xff, 0x3b, 0x02, 0xa0, 0xa5, 0x20,
X   0xf4, 0xaa, 0x5a, 0x40, 0x04, 0x15, 0xfc, 0xff, 0xff, 0xff, 0x1b, 0x28,
X   0x0d, 0x4a, 0x52, 0xed, 0xa8, 0x38, 0x04, 0x50, 0x25, 0xfc, 0xff, 0xff,
X   0xff, 0x0d, 0x02, 0xae, 0xc3, 0x50, 0xea, 0xea, 0xe5, 0x00, 0x82, 0x0d,
X   0xfc, 0xff, 0xff, 0xff, 0x1d, 0x11, 0x1d, 0xca, 0x05, 0xe1, 0xf8, 0xc1,
X   0x01, 0x24, 0x83, 0xf0, 0xff, 0xff, 0xff, 0x8e, 0x54, 0x04, 0x41, 0x91,
X   0xb4, 0x7b, 0x55, 0x4a, 0xc8, 0x13, 0xf8, 0xff, 0xff, 0xff, 0x1e, 0x11,
X   0x29, 0xd0, 0x05, 0x2a, 0xff, 0x96, 0x05, 0x40, 0x83, 0xf8, 0xff, 0xff,
X   0x7f, 0x7f, 0xad, 0x02, 0x00, 0x80, 0xfe, 0xd5, 0x77, 0x0f, 0xca, 0x15,
X   0xf0, 0xff, 0xff, 0x7f, 0x5f, 0xa9, 0x0a, 0xe4, 0x20, 0xfe, 0xeb, 0xdb,
X   0x97, 0xd0, 0x4b, 0xf1, 0xff, 0xff, 0x7f, 0xff, 0x82, 0x44, 0x13, 0xd2,
X   0xfe, 0xe2, 0xad, 0x03, 0x2a, 0x84, 0xe0, 0xff, 0xff, 0xbf, 0xff, 0x29,
X   0x14, 0x21, 0xa0, 0xfe, 0xd1, 0x9b, 0xab, 0xf8, 0x14, 0xe0, 0xff, 0xff,
X   0xbf, 0xff, 0xa8, 0x8a, 0x8a, 0x7c, 0x3f, 0xe5, 0x76, 0x28, 0xb4, 0x00,
X   0xe0, 0xff, 0xff, 0xbf, 0xff, 0x55, 0x0a, 0x21, 0xfa, 0x7f, 0xf1, 0x7a,
X   0x55, 0x79, 0x25, 0xe0, 0xff, 0xff, 0xdf, 0xff, 0xab, 0x5c, 0x88, 0xfe,
X   0x5f, 0xeb, 0x7e, 0x2c, 0xff, 0x10, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0x7f,
X   0x03, 0x72, 0xff, 0xff, 0xf1, 0xbe, 0x1a, 0xfe, 0x01, 0xc0, 0xff, 0xff,
X   0xdf, 0xff, 0xdf, 0x5a, 0xf4, 0xff, 0xff, 0x6a, 0x3f, 0x0c, 0xf7, 0x91,
X   0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x87, 0xfb, 0xff, 0xfd, 0xb7, 0x4e,
X   0x1d, 0x7f, 0x01, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x25, 0xfe, 0xff,
X   0xfd, 0x2e, 0x6e, 0x0c, 0xff, 0x50, 0x80, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xef, 0xbf, 0xb7, 0x47, 0xfc, 0xbf, 0x00, 0xa0, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xdf, 0x2b, 0xec, 0x7f, 0x04,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x9b, 0x05,
X   0xfe, 0xbf, 0x90, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xdf, 0xab, 0x21, 0xfc, 0x3f, 0xa0, 0xa2, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xbf, 0x09, 0x45, 0xfa, 0x1f, 0x80, 0x81, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xd7, 0x99, 0xde, 0x7f, 0x20,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xb0,
X   0x97, 0xbf, 0x80, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf4,
X   0x7f, 0xfe, 0xf5, 0x2b, 0x7a, 0x21, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xf8, 0xff, 0xf4, 0xf9, 0x57, 0xfe, 0x00, 0xa2, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xa3, 0xf8, 0x01,
X   0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfa, 0xff,
X   0x0b, 0xfd, 0x85, 0xa0, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xbe, 0x7f, 0xa2, 0xfa, 0x15, 0xb0, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xfe, 0x4f, 0xb4, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf4, 0x7f, 0x8b,
X   0xb8, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0x2e, 0xba, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x7f, 0xff, 0x7f, 0x08, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
X   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa,
X   0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
X   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
X   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
X   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
X   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
X   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xe3,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
X   0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
X};
X
X
X/* define MD, a macro similar to REMAINDER but with
X   different semantics. If MD(x,y) = z then it should
X   always be the case that z <= 0, and z is the difference
X   between the greatest number evenly divisible by y
X   that is NO GREATER THAN x, and the number x itself. */
X
X#define MD(x,y) ((x < 0) ? -((y+(x%y))%y) : -(x%y))
X
X/* end MD definition */
X
X
X/* border width */
X#define BDW 4
X
X
X/* just to minimise differences, change nothing except the 
X   printing loop. */
X
Xmain(argc, argv)
Xint	argc;
Xchar	*argv[];
X{
X/* declarations */
XDisplay *mydisplay;
XWindow mywindow;
XXGCValues gcvalues;
XGC copygc,tilegc;
XXSizeHints hints;
Xint myscreen;
Xunsigned long foreground,background;
Xint i,j,k;	/* :-) */
Xint done;
X
Xint tmpsx,tmpsy;
XPixmap thepixmap;
X
X/* Initialisation */
X
Xmydisplay = XOpenDisplay("");
Xmyscreen = DefaultScreen(mydisplay);
X
X/* pixel values */
Xforeground = WhitePixel(mydisplay,myscreen);
Xbackground = BlackPixel(mydisplay,myscreen);
X
X/* hints */
Xhints.x = 200; hints.y = 300;
Xhints.width = 360; hints.height = 480;
X
Xhints.flags = PPosition | PSize;
X
X/* make a window */
X
Xmywindow = XCreateSimpleWindow(mydisplay,
X		DefaultRootWindow(mydisplay),
X		hints.x,hints.y,hints.width,hints.height,
X		BDW,foreground,background);
XXSetStandardProperties(mydisplay,mywindow,"Tile test","Tile test",
X	None,argv,argc,&hints);
X
X/* make the GCs */
X
Xgcvalues.foreground= foreground;
Xgcvalues.background= background;
Xcopygc = XCreateGC(mydisplay,mywindow,GCBackground|GCForeground,&gcvalues);
X
Xgcvalues.fill_style = FillTiled;
Xthepixmap = gcvalues.tile = XCreatePixmapFromBitmapData(mydisplay,mywindow,
X                pixbits,120,120,foreground,background,
X		DefaultDepth(mydisplay,myscreen));
Xtilegc =
XXCreateGC(mydisplay,mywindow,GCBackground|GCForeground|GCTile|GCFillStyle,
X		&gcvalues);
X
X/* raise window */
XXMapRaised(mydisplay,mywindow);
XXFlush(mydisplay);
X
X
X/* main loop, don't care about events */
X
X/* first tile the window twelve hundred times */
Xprintf("Tile the window twelve hundred times using XCopyArea/Plane\n");
Xfor (i=0;i<1200;i++) {
X  for (tmpsx=MD(-i,120); tmpsx<360; tmpsx+=120)
X    for (tmpsy=MD(-i,120);tmpsy<480;tmpsy+=120) {
X        if (DefaultDepth(mydisplay,myscreen) == 1)
X            XCopyArea(mydisplay, thepixmap, mywindow, 
X		copygc, 0, 0, 120, 120, tmpsx, tmpsy);
X        else
X            XCopyPlane(mydisplay, thepixmap, mywindow, 
X		copygc, 0, 0, 120, 120, tmpsx, tmpsy);
X    }
X  XFlush(mydisplay);
X}
Xprintf("finished tiling manually\n");
X
X/* now manual tiling */
X
XXFreeGC(mydisplay,copygc);
XXFreeGC(mydisplay,tilegc);
XXDestroyWindow(mydisplay,mywindow);
XXCloseDisplay(mydisplay);
Xexit(0);
X
X}
END_OF_FILE
if test 13968 -ne `wc -c <'prob2.c'`; then
    echo shar: \"'prob2.c'\" unpacked with wrong size!
fi
# end of 'prob2.c'
fi
echo shar: End of shell archive.
exit 0

mouse@LIGHTNING.MCRCIM.MCGILL.EDU (11/07/90)

> I have a question regarding tiling rectangular areas of a drawable.

> In the course of writing a widget I have been considering the
> question of tiling a rectangular area of a drawable.  I have tried
> the obvious way of doing this, i.e., setting the tile attribute of a
> gc, the ts_x_origin, ts_y_origin, and the fill style to FillTiled,
> and the not-so-obvious way, i.e., doing it yourself.

> In both cases I was using a Pixmap to tile a drawable.  I found (much
> to my surprise) that the not-so-obvious way was MUCH faster (one my
> Sparcstation 1) with an area about twelve times the area of the tile.
> This seems bizzare to me, after all the obvious way requires one trip
> to the server, while the not-so-obvious way requires many trips.

> Has anyone else noticed such behaviour, or have I most likely
> overlooked something?

I see a similar difference, and find it rather astonishing.

> I've written two raw Xlib programs to demonstrate the problem.

[excerpted -dM]

	Xgcvalues.tile = XCreatePixmapFromBitmapData(mydisplay,mywindow,
	X                pixbits,120,120,foreground,background,
	X		DefaultDepth(mydisplay,myscreen));
...
	Xfor (i=0;i<1200;i++) {
	X	/* set the TS origins here because in general what I want to
	X           do requires this (scrolling over a pixmap) */
	X	gcvalues.ts_x_origin = i;
	X	gcvalues.ts_y_origin = i;
	X	XChangeGC(mydisplay,tilegc,
	X		GCTileStipXOrigin|GCTileStipYOrigin,&gcvalues);
	X	XFillRectangle(mydisplay,mywindow,tilegc,
	X		0,0,360,480);
	X	XFlush(mydisplay);
	X}

[versus]

	Xthepixmap = gcvalues.tile = XCreatePixmapFromBitmapData(mydisplay,mywindow,
	X                pixbits,120,120,foreground,background,
	X		DefaultDepth(mydisplay,myscreen));
...
	X/* first tile the window twelve hundred times */
	Xprintf("Tile the window twelve hundred times using XCopyArea/Plane\n");
	Xfor (i=0;i<1200;i++) {
	X  for (tmpsx=MD(-i,120); tmpsx<360; tmpsx+=120)
	X    for (tmpsy=MD(-i,120);tmpsy<480;tmpsy+=120) {
	X        if (DefaultDepth(mydisplay,myscreen) == 1)
	X            XCopyArea(mydisplay, thepixmap, mywindow, 
	X		copygc, 0, 0, 120, 120, tmpsx, tmpsy);
	X        else
	X            XCopyPlane(mydisplay, thepixmap, mywindow, 
	X		copygc, 0, 0, 120, 120, tmpsx, tmpsy);
	X    }
	X  XFlush(mydisplay);
	X}

I see a similar speed difference.  My environment is the MIT sample
server on a Sun-3/60 with a "hi-res" (1600x1280) display.  You don't
say whether your SS1 is color or not, but I would guess not, because
you're missing the last argument to XCopyPlane.  (You also don't say
whose server you're using, but I suspect it doesn't make much
difference.)

Also note that the semantics of FillTiled are such that you should
always be using XCopyArea in the second program, to be fair.  However,
on a one-bit display, you are, and the speed difference is still
present.  In the interests of fairness, I also tried copying the
XChangeGC call into the outer loop in the second program.  It made no
visible difference.

Out of curiousity, I did delete the if and try it on a color machine, a
color SPARCstation 1+.  The speed difference is essentially gone.
However, the XFillRectangle code doesn't even work!  (It looks as
though something is getting confused with negative values somewhere.  I
shall be submitting a bug report....)  Aside from that, the
XFillRectangle code is aesthetically much nicer; the fills proceed in a
visually more even fashion.

I'd say the FillTiled code in the server needs work.  It really should
never be slower than doing many individual copies....

					der Mouse

			old: mcgill-vision!mouse
			new: mouse@larry.mcrcim.mcgill.edu

keith@EXPO.LCS.MIT.EDU (Keith Packard) (11/08/90)

> In both cases I was using a Pixmap to tile a drawable.  I found (much to my
> surprise) that the not-so-obvious way was MUCH faster (one my Sparcstation
> 1) with an area about twelve times the area of the tile.  This seems bizzare
> to me, after all the obvious way requires one trip to the server, while the
> not-so-obvious way requires many trips. 

This shouldn't seem so strange to you.  Tiling operations are very complicated
and cover a wide range of potential usages.  The most common tiling operations
use small tiles (< 32x32) to fill areas on the screen.  The R4 server optimizes
this case, and leaves the other cases to wither with pretty horrible code.  

The problem with other tile sizes is that the server needs to choose to either
emulate bitblt code, and plop down repeated blocks of the tile, or to attempt
something different.  For smaller tiles, emulating bitblt is painfully slow;
the frame buffer is repeatedly modified at the same addresses to lay down those
bits.  Larger tiles could make effective use of the bitblt code without the
performance penalty

So, while it may seem like the server should always choose the 'fastest' way of
doing something, it is also the case that the time spent optimizing various
of these algorithms is better spent doing something else.  You could spend an
arbitrary amount of time optimizing various potential combinations of client
requests; this one has never reached the top of the heap.

Yes, the R5 server will do the tiling case faster than the bitblt case on color
frame buffers.  I fixed your example which uses CopyArea to work correctly on
CFB (removing the CopyPlane call and disabling GraphicsExpose events) and
measured:

	24 seconds	Tiling code
	34 seconds	Bitblt code

I sped this up several months ago so that xphoon would run reasonably fast on
my display.

Besides, if everything went as fast as it could, I'd be out of work, wouldn't I.