/*
 * SpaceShuttle.c
 *
 * Hey freax, I was bored.  So I made a spinning space shuttle with 
 * some scrolltext-like stuff.  X is so fun.  Heh.
 *
 * BSI Fri Jan 26 20:43:37 EST 1996
 *
 * compile with: gcc filename.c -L/usr/X11/lib -lX11
 * 
 * gcc -I/depot/x11r5/include -o x x.c -L/depot/x11r5/lib -lXm -lXt -lX11 -lm
 * ...if you're in Pond's 111 Sun lab.  
 */

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/cursorfont.h>
#include <stdio.h>
#include <signal.h>
#include <time.h>

/*------------------------------------------------------------------ */
#ifndef ITIMER_REAL              /* fixes compiles on suns and linux */
#define ITIMER_REAL     0
#define ITIMER_VIRTUAL  1
#define ITIMER_PROF     2

struct timeval {
        long    tv_sec;         /* seconds */
        long    tv_usec;        /* and microseconds */
};


struct  itimerval {
        struct  timeval it_interval;    /* timer interval */
        struct  timeval it_value;       /* current value */
};
#endif
/*------------------------------------------------------------------ */

#define XWIN_SIZE 400
#define YWIN_SIZE 400

/*
 * Those Lovely Prototypes...
 */
void Rotate(short *,short *,short,short,short,short,short,short);
void DrawObject(short,short,short,short,short,short);
void scroll(void);

/*
 * Multi-Purpose Sine/Cosine lookup table...I know, what's a .h file? =)
 * See implementation in Rotate()
 */
const signed short sincos[]={
        0x0000,0x0001,0x0003,0x0004,0x0006,0x0007,0x0009,0x000A,
        0x000C,0x000E,0x000F,0x0011,0x0012,0x0014,0x0015,0x0017,
        0x0019,0x001A,0x001C,0x001D,0x001F,0x0020,0x0022,0x0024,
        0x0025,0x0027,0x0028,0x002A,0x002B,0x002D,0x002E,0x0030,
        0x0031,0x0033,0x0035,0x0036,0x0038,0x0039,0x003B,0x003C,
        0x003E,0x003F,0x0041,0x0042,0x0044,0x0045,0x0047,0x0048,
        0x004A,0x004B,0x004D,0x004E,0x0050,0x0051,0x0053,0x0054,
        0x0056,0x0057,0x0059,0x005A,0x005C,0x005D,0x005F,0x0060,
        0x0061,0x0063,0x0064,0x0066,0x0067,0x0069,0x006A,0x006C,
        0x006D,0x006E,0x0070,0x0071,0x0073,0x0074,0x0075,0x0077,
        0x0078,0x007A,0x007B,0x007C,0x007E,0x007F,0x0080,0x0082,
        0x0083,0x0084,0x0086,0x0087,0x0088,0x008A,0x008B,0x008C,
        0x008E,0x008F,0x0090,0x0092,0x0093,0x0094,0x0095,0x0097,
        0x0098,0x0099,0x009B,0x009C,0x009D,0x009E,0x009F,0x00A1,
        0x00A2,0x00A3,0x00A4,0x00A6,0x00A7,0x00A8,0x00A9,0x00AA,
        0x00AB,0x00AD,0x00AE,0x00AF,0x00B0,0x00B1,0x00B2,0x00B3,
        0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,
        0x00BD,0x00BE,0x00BF,0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,
        0x00C5,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,
        0x00CD,0x00CE,0x00CF,0x00D0,0x00D1,0x00D2,0x00D3,0x00D3,
        0x00D4,0x00D5,0x00D6,0x00D7,0x00D8,0x00D9,0x00D9,0x00DA,
        0x00DB,0x00DC,0x00DD,0x00DD,0x00DE,0x00DF,0x00E0,0x00E1,
        0x00E1,0x00E2,0x00E3,0x00E3,0x00E4,0x00E5,0x00E6,0x00E6,
        0x00E7,0x00E8,0x00E8,0x00E9,0x00EA,0x00EA,0x00EB,0x00EB,
        0x00EC,0x00ED,0x00ED,0x00EE,0x00EE,0x00EF,0x00EF,0x00F0,
        0x00F1,0x00F1,0x00F2,0x00F2,0x00F3,0x00F3,0x00F4,0x00F4,
        0x00F4,0x00F5,0x00F5,0x00F6,0x00F6,0x00F7,0x00F7,0x00F7,
        0x00F8,0x00F8,0x00F9,0x00F9,0x00F9,0x00FA,0x00FA,0x00FA,
        0x00FB,0x00FB,0x00FB,0x00FB,0x00FC,0x00FC,0x00FC,0x00FC,
        0x00FD,0x00FD,0x00FD,0x00FD,0x00FE,0x00FE,0x00FE,0x00FE,
        0x00FE,0x00FE,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,
        0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,
        0x0100,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,
        0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FE,
        0x00FE,0x00FE,0x00FE,0x00FE,0x00FE,0x00FD,0x00FD,0x00FD,
        0x00FD,0x00FC,0x00FC,0x00FC,0x00FC,0x00FB,0x00FB,0x00FB,
        0x00FB,0x00FA,0x00FA,0x00FA,0x00F9,0x00F9,0x00F9,0x00F8,
        0x00F8,0x00F7,0x00F7,0x00F7,0x00F6,0x00F6,0x00F5,0x00F5,
        0x00F4,0x00F4,0x00F4,0x00F3,0x00F3,0x00F2,0x00F2,0x00F1,
        0x00F1,0x00F0,0x00EF,0x00EF,0x00EE,0x00EE,0x00ED,0x00ED,
        0x00EC,0x00EB,0x00EB,0x00EA,0x00EA,0x00E9,0x00E8,0x00E8,
        0x00E7,0x00E6,0x00E6,0x00E5,0x00E4,0x00E3,0x00E3,0x00E2,
        0x00E1,0x00E1,0x00E0,0x00DF,0x00DE,0x00DD,0x00DD,0x00DC,
        0x00DB,0x00DA,0x00D9,0x00D9,0x00D8,0x00D7,0x00D6,0x00D5,
        0x00D4,0x00D3,0x00D3,0x00D2,0x00D1,0x00D0,0x00CF,0x00CE,
        0x00CD,0x00CC,0x00CB,0x00CA,0x00C9,0x00C8,0x00C7,0x00C6,
        0x00C5,0x00C4,0x00C3,0x00C2,0x00C1,0x00C0,0x00BF,0x00BE,
        0x00BD,0x00BC,0x00BB,0x00BA,0x00B9,0x00B8,0x00B7,0x00B6,
        0x00B5,0x00B3,0x00B2,0x00B1,0x00B0,0x00AF,0x00AE,0x00AD,
        0x00AB,0x00AA,0x00A9,0x00A8,0x00A7,0x00A6,0x00A4,0x00A3,
        0x00A2,0x00A1,0x009F,0x009E,0x009D,0x009C,0x009B,0x0099,
        0x0098,0x0097,0x0095,0x0094,0x0093,0x0092,0x0090,0x008F,
        0x008E,0x008C,0x008B,0x008A,0x0088,0x0087,0x0086,0x0084,
        0x0083,0x0082,0x0080,0x007F,0x007E,0x007C,0x007B,0x007A,
        0x0078,0x0077,0x0075,0x0074,0x0073,0x0071,0x0070,0x006E,
        0x006D,0x006C,0x006A,0x0069,0x0067,0x0066,0x0064,0x0063,
        0x0061,0x0060,0x005F,0x005D,0x005C,0x005A,0x0059,0x0057,
        0x0056,0x0054,0x0053,0x0051,0x0050,0x004E,0x004D,0x004B,
        0x004A,0x0048,0x0047,0x0045,0x0044,0x0042,0x0041,0x003F,
        0x003E,0x003C,0x003B,0x0039,0x0038,0x0036,0x0035,0x0033,
        0x0031,0x0030,0x002E,0x002D,0x002B,0x002A,0x0028,0x0027,
        0x0025,0x0024,0x0022,0x0020,0x001F,0x001D,0x001C,0x001A,
        0x0019,0x0017,0x0015,0x0014,0x0012,0x0011,0x000F,0x000E,
        0x000C,0x000A,0x0009,0x0007,0x0006,0x0004,0x0003,0x0001,
        0xFFFF,0xFFFE,0xFFFC,0xFFFB,0xFFF9,0xFFF8,0xFFF6,0xFFF5,
        0xFFF3,0xFFF1,0xFFF0,0xFFEE,0xFFED,0xFFEB,0xFFEA,0xFFE8,
        0xFFE6,0xFFE5,0xFFE3,0xFFE2,0xFFE0,0xFFDF,0xFFDD,0xFFDB,
        0xFFDA,0xFFD8,0xFFD7,0xFFD5,0xFFD4,0xFFD2,0xFFD1,0xFFCF,
        0xFFCE,0xFFCC,0xFFCA,0xFFC9,0xFFC7,0xFFC6,0xFFC4,0xFFC3,
        0xFFC1,0xFFC0,0xFFBE,0xFFBD,0xFFBB,0xFFBA,0xFFB8,0xFFB7,
        0xFFB5,0xFFB4,0xFFB2,0xFFB1,0xFFAF,0xFFAE,0xFFAC,0xFFAB,
        0xFFA9,0xFFA8,0xFFA6,0xFFA5,0xFFA3,0xFFA2,0xFFA0,0xFF9F,
        0xFF9E,0xFF9C,0xFF9B,0xFF99,0xFF98,0xFF96,0xFF95,0xFF93,
        0xFF92,0xFF91,0xFF8F,0xFF8E,0xFF8C,0xFF8B,0xFF8A,0xFF88,
        0xFF87,0xFF85,0xFF84,0xFF83,0xFF81,0xFF80,0xFF7F,0xFF7D,
        0xFF7C,0xFF7B,0xFF79,0xFF78,0xFF77,0xFF75,0xFF74,0xFF73,
        0xFF71,0xFF70,0xFF6F,0xFF6D,0xFF6C,0xFF6B,0xFF6A,0xFF68,
        0xFF67,0xFF66,0xFF64,0xFF63,0xFF62,0xFF61,0xFF60,0xFF5E,
        0xFF5D,0xFF5C,0xFF5B,0xFF59,0xFF58,0xFF57,0xFF56,0xFF55,
        0xFF54,0xFF52,0xFF51,0xFF50,0xFF4F,0xFF4E,0xFF4D,0xFF4C,
        0xFF4A,0xFF49,0xFF48,0xFF47,0xFF46,0xFF45,0xFF44,0xFF43,
        0xFF42,0xFF41,0xFF40,0xFF3F,0xFF3E,0xFF3D,0xFF3C,0xFF3B,
        0xFF3A,0xFF39,0xFF38,0xFF37,0xFF36,0xFF35,0xFF34,0xFF33,
        0xFF32,0xFF31,0xFF30,0xFF2F,0xFF2E,0xFF2D,0xFF2C,0xFF2C,
        0xFF2B,0xFF2A,0xFF29,0xFF28,0xFF27,0xFF26,0xFF26,0xFF25,
        0xFF24,0xFF23,0xFF22,0xFF22,0xFF21,0xFF20,0xFF1F,0xFF1E,
        0xFF1E,0xFF1D,0xFF1C,0xFF1C,0xFF1B,0xFF1A,0xFF19,0xFF19,
        0xFF18,0xFF17,0xFF17,0xFF16,0xFF15,0xFF15,0xFF14,0xFF14,
        0xFF13,0xFF12,0xFF12,0xFF11,0xFF11,0xFF10,0xFF10,0xFF0F,
        0xFF0E,0xFF0E,0xFF0D,0xFF0D,0xFF0C,0xFF0C,0xFF0B,0xFF0B,
        0xFF0B,0xFF0A,0xFF0A,0xFF09,0xFF09,0xFF08,0xFF08,0xFF08,
        0xFF07,0xFF07,0xFF06,0xFF06,0xFF06,0xFF05,0xFF05,0xFF05,
        0xFF04,0xFF04,0xFF04,0xFF04,0xFF03,0xFF03,0xFF03,0xFF03,
        0xFF02,0xFF02,0xFF02,0xFF02,0xFF01,0xFF01,0xFF01,0xFF01,
        0xFF01,0xFF01,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,
        0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,
        0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,
        0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF00,0xFF01,
        0xFF01,0xFF01,0xFF01,0xFF01,0xFF01,0xFF02,0xFF02,0xFF02,
        0xFF02,0xFF03,0xFF03,0xFF03,0xFF03,0xFF04,0xFF04,0xFF04,
        0xFF04,0xFF05,0xFF05,0xFF05,0xFF06,0xFF06,0xFF06,0xFF07,
        0xFF07,0xFF08,0xFF08,0xFF08,0xFF09,0xFF09,0xFF0A,0xFF0A,
        0xFF0B,0xFF0B,0xFF0B,0xFF0C,0xFF0C,0xFF0D,0xFF0D,0xFF0E,
        0xFF0E,0xFF0F,0xFF10,0xFF10,0xFF11,0xFF11,0xFF12,0xFF12,
        0xFF13,0xFF14,0xFF14,0xFF15,0xFF15,0xFF16,0xFF17,0xFF17,
        0xFF18,0xFF19,0xFF19,0xFF1A,0xFF1B,0xFF1C,0xFF1C,0xFF1D,
        0xFF1E,0xFF1E,0xFF1F,0xFF20,0xFF21,0xFF22,0xFF22,0xFF23,
        0xFF24,0xFF25,0xFF26,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,
        0xFF2B,0xFF2C,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,
        0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,
        0xFF3A,0xFF3B,0xFF3C,0xFF3D,0xFF3E,0xFF3F,0xFF40,0xFF41,
        0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,
        0xFF4A,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,
        0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5B,0xFF5C,
        0xFF5D,0xFF5E,0xFF60,0xFF61,0xFF62,0xFF63,0xFF64,0xFF66,
        0xFF67,0xFF68,0xFF6A,0xFF6B,0xFF6C,0xFF6D,0xFF6F,0xFF70,
        0xFF71,0xFF73,0xFF74,0xFF75,0xFF77,0xFF78,0xFF79,0xFF7B,
        0xFF7C,0xFF7D,0xFF7F,0xFF80,0xFF81,0xFF83,0xFF84,0xFF85,
        0xFF87,0xFF88,0xFF8A,0xFF8B,0xFF8C,0xFF8E,0xFF8F,0xFF91,
        0xFF92,0xFF93,0xFF95,0xFF96,0xFF98,0xFF99,0xFF9B,0xFF9C,
        0xFF9E,0xFF9F,0xFFA0,0xFFA2,0xFFA3,0xFFA5,0xFFA6,0xFFA8,
        0xFFA9,0xFFAB,0xFFAC,0xFFAE,0xFFAF,0xFFB1,0xFFB2,0xFFB4,
        0xFFB5,0xFFB7,0xFFB8,0xFFBA,0xFFBB,0xFFBD,0xFFBE,0xFFC0,
        0xFFC1,0xFFC3,0xFFC4,0xFFC6,0xFFC7,0xFFC9,0xFFCA,0xFFCC,
        0xFFCE,0xFFCF,0xFFD1,0xFFD2,0xFFD4,0xFFD5,0xFFD7,0xFFD8,
        0xFFDA,0xFFDB,0xFFDD,0xFFDF,0xFFE0,0xFFE2,0xFFE3,0xFFE5,
        0xFFE6,0xFFE8,0xFFEA,0xFFEB,0xFFED,0xFFEE,0xFFF0,0xFFF1,
        0xFFF3,0xFFF5,0xFFF6,0xFFF8,0xFFF9,0xFFFB,0xFFFC,0xFFFE

};

/*------------------------------------------------------------------------*/

Display *display;
Window window;
int screen;
GC clear;
GC pixor, pixcopy;
Pixmap buffer;

/*
 * 72 Hz IRQ routine...
 */
void update()
{
static i;

XFillRectangle(display, buffer, clear, 0, 0, XWIN_SIZE, YWIN_SIZE);

DrawObject(i++,i<<3,i<<2,1200,(XWIN_SIZE>>1),(YWIN_SIZE>>1));

XCopyArea(display,buffer,window,pixcopy,0,0,XWIN_SIZE,YWIN_SIZE,0,0);
scroll();

XFlush(display);
}


/*
 * Calls all of the X nonsense...
 */
main()
{
struct itimerval time;
XEvent evt;
GC background;
XGCValues val;
unsigned long msk;

if((display=XOpenDisplay((char *)0))==(Display *)0)
   {
   fprintf(stdout,"Cannot Open Display!");
   exit(0);
   }

screen=DefaultScreen(display);

window=XCreateSimpleWindow(display,RootWindow(display,screen),0,
       0,XWIN_SIZE,YWIN_SIZE+8, 1, BlackPixel(display,screen),
       BlackPixel(display,screen));

background=XCreateGC(display, window, 0, (XGCValues *)0);
XSetForeground(display, background, WhitePixel(display,screen));

msk=GCFunction;
val.function=GXclear;
clear=XCreateGC(display, window, msk, &val);

msk=GCFunction;
val.function=GXor;
pixor=XCreateGC(display, window, msk, &val);
XSetForeground(display, pixor, BlackPixel(display, screen));

val.function=GXcopy;
pixcopy=XCreateGC(display, window, msk, &val);
XSetForeground(display, pixcopy, BlackPixel(display, screen));

XMapWindow(display, window);

buffer=XCreatePixmap(display,window,XWIN_SIZE,YWIN_SIZE,8);

XSelectInput(display, window, StructureNotifyMask);
XNextEvent(display, &evt);
XSelectInput(display, window, NoEventMask);

XFillRectangle(display, window, clear, 0, 0, XWIN_SIZE, YWIN_SIZE+8);
XFillRectangle(display, window, background, 0, 0, XWIN_SIZE, YWIN_SIZE+8);

signal(SIGALRM, update);

time.it_interval.tv_sec=0;
time.it_interval.tv_usec=13889;  /* make this match your frame rate */
time.it_value.tv_sec=0;
time.it_value.tv_usec=1;

setitimer(ITIMER_REAL, &(time), (struct itimerval *)0);

while(1) { pause(); }
}


/*
 * Rotate in 3D then convert 3-D to 2-D projection...
 */
void Rotate(short *points3d,short *points2d,short xrot,short yrot,short zrot,
        short distance,short centerx,short centery){
            
short sinx,siny,cosx,cosy,sinz,cosz;
short x,y,z;
long  t,u;

sinx=sincos[xrot&0x3ff];                          /* Get sincos of 3 axes... */
cosx=sincos[(xrot+0x100)&0x3ff];

siny=sincos[yrot&0x3ff];                /* Table is 1024 entries so MOD 1023 */
cosy=sincos[(yrot+0x100)&0x3ff];        /* Cos 0 = Sin PI/4 so 1024/4 = 256! */

sinz=sincos[zrot&0x3ff];
cosz=sincos[(zrot+0x100)&0x3ff];

for(;;) {
        if((x=*(points3d++))==0x7fff) break;    /* See if end of sequence... */
            y=*(points3d++);                    /* otherwise, fetch + go!    */
            z=*(points3d++);

        t =((x*cosz)-(y*sinz))>>8;                    /* Rotate X - Y thru Z */
        u =((y*cosz)+(x*sinz))>>8;

        x =(short)t;
        y =(short)u;

        t =((y*cosx)-(z*sinx))>>8;                    /* Rotate Y - Z thru X */
        u =((z*cosx)+(y*sinx))>>8;
        y =(short)t;
        z =(short)u;

        t =((x*cosy)-(z*siny))>>8;                    /* Rotate X - Z thru Y */
        u =((z*cosy)+(x*siny))>>8;
        x =(short)t;
        z =(short)u;

        *(points2d++)=((long)x<<8)/(z+distance)+centerx;       /* 3-D to 2-D */
        *(points2d++)=((long)y<<8)/(z+distance)+centery;       /* conversion */
        }
*(points2d++)=0x7fff;                /* Mark the end of table with MAXINT... */
}

/*
 * Draw an object with hidden faces...
 */

void DrawObject(short xrot,short yrot,
                short zrot,short distance,short centerx,short centery){

short xypoints[2048];  /* Buffer for pts converted to 2-D... */

/*
 * Vector Data: From, To.  Wow this is a lot of embedded data.
 * All in the name of speeeeeeeed!
 */
short connect[]={
	0x0000,0x0001,0x0001,0x0002,0x0000,0x0002,0x0001,0x0003,
	0x0000,0x0003,0x0001,0x0004,0x0003,0x0004,0x0001,0x0005,
	0x0004,0x0005,0x0001,0x0006,0x0005,0x0006,0x0001,0x0007,
	0x0006,0x0007,0x0001,0x0008,0x0007,0x0008,0x0001,0x0009,
	0x0008,0x0009,0x0002,0x0009,0x0009,0x000A,0x000A,0x000B,
	0x0002,0x000B,0x0008,0x000C,0x000A,0x000C,0x0007,0x000D,
	0x000C,0x000D,0x0006,0x000E,0x000D,0x000E,0x0005,0x000F,
	0x000E,0x000F,0x0004,0x0010,0x000F,0x0010,0x0003,0x0011,
	0x0010,0x0011,0x0000,0x0012,0x0011,0x0012,0x000B,0x0012,
	0x000A,0x0013,0x0013,0x0014,0x000B,0x0014,0x000C,0x0015,
	0x0013,0x0015,0x000D,0x0016,0x0015,0x0016,0x000E,0x0017,
	0x0016,0x0017,0x000F,0x0018,0x0017,0x0018,0x0010,0x0019,
	0x0018,0x0019,0x0011,0x001A,0x0019,0x001A,0x0012,0x001B,
	0x001A,0x001B,0x0014,0x001B,0x0013,0x001C,0x001C,0x001D,
	0x0014,0x001D,0x0015,0x001E,0x001C,0x001E,0x0016,0x001F,
	0x001E,0x001F,0x0017,0x0020,0x001F,0x0020,0x0018,0x0021,
	0x0020,0x0021,0x0019,0x0022,0x0021,0x0022,0x001A,0x0023,
	0x0022,0x0023,0x001B,0x0024,0x0023,0x0024,0x001D,0x0024,
	0x0025,0x0026,0x0026,0x0027,0x0025,0x0027,0x0025,0x0028,
	0x0027,0x0028,0x0028,0x0029,0x0027,0x0029,0x0028,0x002A,
	0x0029,0x002A,0x002B,0x002C,0x0026,0x002C,0x0026,0x002B,
	0x0025,0x002B,0x002B,0x002D,0x0025,0x002D,0x0028,0x002D,
	0x002D,0x002E,0x0028,0x002E,0x002A,0x002E,0x002E,0x002F,
	0x002A,0x002F,0x002B,0x0030,0x002C,0x0030,0x002B,0x0031,
	0x0030,0x0031,0x002D,0x0031,0x002D,0x0032,0x0031,0x0032,
	0x002E,0x0032,0x002E,0x0033,0x0032,0x0033,0x002F,0x0033,
	0x0031,0x0033,0x0030,0x0033,0x002F,0x0034,0x0033,0x0034,
	0x0034,0x0035,0x0033,0x0035,0x0034,0x0036,0x0036,0x0037,
	0x0034,0x0037,0x0034,0x0038,0x0036,0x0038,0x0039,0x003A,
	0x003A,0x003B,0x0039,0x003B,0x0039,0x003C,0x003A,0x003C,
	0x0039,0x003D,0x003C,0x003D,0x003D,0x003E,0x003C,0x003E,
	0x003E,0x003F,0x003C,0x003F,0x003F,0x0040,0x003C,0x0040,
	0x003F,0x0041,0x0040,0x0041,0x0041,0x0042,0x0040,0x0042,
	0x0041,0x0043,0x0042,0x0043,0x0044,0x0045,0x0042,0x0045,
	0x0042,0x0044,0x0044,0x0046,0x0042,0x0046,0x0046,0x0047,
	0x0042,0x0047,0x0043,0x0047,0x0026,0x003D,0x0027,0x003D,
	0x0026,0x003E,0x002C,0x003F,0x0026,0x003F,0x0030,0x003F,
	0x0030,0x0041,0x0030,0x0043,0x0033,0x0043,0x0036,0x0044,
	0x0038,0x0045,0x0037,0x0046,0x0035,0x0047,0x0035,0x0037,
	0x0027,0x003A,0x0027,0x003B,0x0029,0x003A,0x0029,0x0048,
	0x0027,0x0048,0x0048,0x0049,0x0029,0x0049,0x0048,0x004A,
	0x0049,0x004A,0x004A,0x004B,0x0048,0x004B,0x004B,0x004C,
	0x004A,0x004C,0x004C,0x004D,0x004B,0x004D,0x004D,0x004E,
	0x004C,0x004E,0x004F,0x0050,0x0050,0x0051,0x0051,0x0052,
	0x004F,0x0052,0x0053,0x0054,0x0050,0x0054,0x004F,0x0053,
	0x0055,0x0056,0x0054,0x0056,0x0053,0x0055,0x0052,0x0057,
	0x0049,0x0057,0x0049,0x0052,0x0051,0x0058,0x0057,0x0058,
	0x002A,0x0049,0x002A,0x0057,0x002F,0x0058,0x0034,0x0058,
	0x0051,0x0059,0x0056,0x0059,0x0059,0x005A,0x005A,0x005B,
	0x0058,0x005B,0x0052,0x005C,0x0053,0x005C,0x004E,0x0052,
	0x004E,0x005C,0x0045,0x005D,0x0042,0x005D,0x0038,0x005E,
	0x0058,0x005E,0x0045,0x005F,0x005E,0x005F,0x005D,0x005F,
	0x0058,0x0060,0x005E,0x0060,0x005B,0x0060,0x0061,0x0062,
	0x0059,0x0062,0x0059,0x0061,0x005A,0x0062,0x0061,0x0063,
	0x0062,0x0063,0x0063,0x0064,0x0062,0x0064,0x005D,0x0065,
	0x0042,0x0065,0x0066,0x0067,0x005E,0x0067,0x005E,0x0066,
	0x0067,0x0068,0x005E,0x0068,0x0068,0x0069,0x005F,0x0069,
	0x0069,0x006A,0x005F,0x006A,0x005D,0x006A,0x0065,0x006A,
	0x006A,0x006B,0x006A,0x006C,0x006B,0x006C,0x006C,0x006D,
	0x0066,0x006D,0x0066,0x006B,0x0067,0x006D,0x005E,0x006E,
	0x006E,0x006F,0x005E,0x006F,0x0066,0x006F,0x005E,0x0070,
	0x006E,0x0070,0x005E,0x0064,0x0064,0x0070,0x0063,0x0071,
	0x0071,0x0072,0x0063,0x0072,0x0063,0x0070,0x0070,0x0072,
	0x0065,0x006B,0x001D,0x004D,0x0024,0x004D,0x0024,0x004B,
	0x0024,0x0048,0x0023,0x0048,0x0023,0x0027,0x0022,0x0027,
	0x0022,0x003D,0x0022,0x0039,0x0021,0x0039,0x0021,0x003B,
	0x0020,0x003B,0x0074,0x0075,0x0073,0x0074,0x0073,0x0075,
	0x0073,0x0076,0x0075,0x0076,0x0076,0x0077,0x0075,0x0077,
	0x0076,0x0078,0x0077,0x0078,0x0074,0x007A,0x0079,0x007A,
	0x0074,0x0079,0x0073,0x0079,0x0079,0x007B,0x0073,0x007B,
	0x0076,0x007B,0x007B,0x007C,0x0076,0x007C,0x0078,0x007C,
	0x007C,0x007D,0x0078,0x007D,0x0079,0x007E,0x007A,0x007E,
	0x007E,0x007F,0x0079,0x007F,0x007B,0x007F,0x007F,0x0080,
	0x007B,0x0080,0x007C,0x0080,0x0080,0x0081,0x007C,0x0081,
	0x007D,0x0081,0x007F,0x0081,0x007E,0x0081,0x0081,0x0082,
	0x007D,0x0082,0x0081,0x0083,0x0082,0x0083,0x0083,0x0084,
	0x0082,0x0084,0x0084,0x0085,0x0082,0x0085,0x0085,0x0086,
	0x0082,0x0086,0x003A,0x0087,0x003B,0x0087,0x003C,0x0087,
	0x0087,0x0088,0x003C,0x0088,0x003C,0x0089,0x0088,0x0089,
	0x0089,0x008A,0x003C,0x008A,0x0040,0x008A,0x008A,0x008B,
	0x0040,0x008B,0x0042,0x008B,0x0042,0x008C,0x008B,0x008C,
	0x0042,0x008E,0x008D,0x008E,0x0042,0x008D,0x008D,0x008F,
	0x0042,0x008F,0x008F,0x0090,0x0042,0x0090,0x008C,0x0090,
	0x0075,0x0088,0x0074,0x0088,0x0074,0x0089,0x007A,0x008A,
	0x0074,0x008A,0x007E,0x008B,0x007E,0x008A,0x007E,0x008C,
	0x0081,0x008C,0x0085,0x008D,0x0086,0x008E,0x0084,0x008F,
	0x0083,0x0090,0x003A,0x0075,0x003B,0x0075,0x003A,0x0077,
	0x0077,0x0091,0x0075,0x0091,0x0077,0x0092,0x0091,0x0092,
	0x0092,0x0093,0x0091,0x0093,0x0093,0x0094,0x0091,0x0094,
	0x0093,0x0095,0x0094,0x0095,0x004D,0x0095,0x004D,0x0094,
	0x004E,0x0095,0x0098,0x0099,0x0097,0x0098,0x0096,0x0097,
	0x0096,0x0099,0x0097,0x009B,0x009A,0x009B,0x0096,0x009A,
	0x0056,0x009B,0x0055,0x009A,0x0092,0x009C,0x0099,0x009C,
	0x0092,0x0099,0x009C,0x009D,0x0098,0x009D,0x0078,0x0092,
	0x0078,0x009C,0x007D,0x009D,0x0082,0x009D,0x0059,0x0098,
	0x009D,0x009F,0x009E,0x009F,0x0059,0x009E,0x005C,0x0099,
	0x0055,0x005C,0x004E,0x0099,0x008E,0x00A0,0x0042,0x00A0,
	0x0086,0x00A1,0x009D,0x00A1,0x008E,0x00A2,0x00A1,0x00A2,
	0x00A0,0x00A2,0x00A1,0x00A3,0x009D,0x00A3,0x009F,0x00A3,
	0x0059,0x00A5,0x00A4,0x00A5,0x0059,0x00A4,0x009E,0x00A5,
	0x00A5,0x00A6,0x00A4,0x00A6,0x00A5,0x00A7,0x00A6,0x00A7,
	0x0065,0x00A0,0x00A1,0x00A8,0x0066,0x00A8,0x0066,0x00A1,
	0x00A8,0x00A9,0x00A1,0x00A9,0x00A2,0x00AA,0x00A9,0x00AA,
	0x00AA,0x00AB,0x00A2,0x00AB,0x0065,0x00AB,0x00A0,0x00AB,
	0x00AB,0x00AC,0x006B,0x00AB,0x006B,0x00AC,0x0066,0x00AD,
	0x00AC,0x00AD,0x00A8,0x00AD,0x006F,0x00AE,0x00A1,0x00AE,
	0x006F,0x00A1,0x00AE,0x00AF,0x00A1,0x00AF,0x00A7,0x00AF,
	0x00A1,0x00A7,0x0071,0x00A6,0x0072,0x00A6,0x00A6,0x00AF,
	0x0072,0x00AF,0x001C,0x004D,0x001C,0x0094,0x001C,0x0091,
	0x001E,0x0091,0x001E,0x0075,0x001F,0x0075,0x001F,0x0088,
	0x001F,0x0087,0x0020,0x0087,0x0072,0x00B0,0x00B0,0x00B1,
	0x0070,0x00B1,0x00B1,0x00B2,0x006E,0x00B2,0x00B2,0x00B3,
	0x006F,0x00B3,0x00B3,0x00B4,0x00AE,0x00B4,0x00B4,0x00B5,
	0x00AF,0x00B5,0x00B0,0x00B5,0x00B0,0x00B6,0x00B6,0x00B7,
	0x00B1,0x00B7,0x00B7,0x00B8,0x00B2,0x00B8,0x00B8,0x00B9,
	0x00B3,0x00B9,0x00B9,0x00BA,0x00B4,0x00BA,0x00BA,0x00BB,
	0x00B5,0x00BB,0x00B6,0x00BB,0x00B6,0x00C2,0x00C2,0x00C3,
	0x00B7,0x00C3,0x00C3,0x00C4,0x00B8,0x00C4,0x00C4,0x00C5,
	0x00B9,0x00C5,0x00C5,0x00C6,0x00BA,0x00C6,0x00C6,0x00C7,
	0x00BB,0x00C7,0x00C2,0x00C7,0x00C2,0x00C8,0x00C8,0x00C9,
	0x00C3,0x00C9,0x00C9,0x00CA,0x00C4,0x00CA,0x00CA,0x00CB,
	0x00C5,0x00CB,0x00CB,0x00CC,0x00C6,0x00CC,0x00CC,0x00CD,
	0x00C7,0x00CD,0x00C8,0x00CD,0x0059,0x00CE,0x0059,0x00CF,
	0x00CE,0x00CF,0x0061,0x00CE,0x00CE,0x00D0,0x00CF,0x00D0,
	0x00CE,0x00D1,0x00D0,0x00D1,0x00D0,0x00D2,0x00D1,0x00D2,
	0x0061,0x00D1,0x00D1,0x00D3,0x0061,0x00D3,0x00D3,0x00D4,
	0x0061,0x00D4,0x00D4,0x00D5,0x0061,0x00D5,0x0063,0x00D5,
	0x00D2,0x00D4,0x0071,0x00D5,0x0067,0x00D6,0x00D6,0x00D7,
	0x0068,0x00D7,0x00D7,0x00D8,0x0069,0x00D8,0x00D8,0x00D9,
	0x006A,0x00D9,0x00D9,0x00DA,0x006C,0x00DA,0x00DA,0x00DB,
	0x006D,0x00DB,0x00D6,0x00DB,0x00D6,0x00DC,0x00DC,0x00DD,
	0x00D7,0x00DD,0x00DD,0x00DE,0x00D8,0x00DE,0x00DE,0x00DF,
	0x00D9,0x00DF,0x00DF,0x00E0,0x00DA,0x00E0,0x00E0,0x00E1,
	0x00DB,0x00E1,0x00DC,0x00E1,0x00DC,0x00E8,0x00E8,0x00E9,
	0x00DD,0x00E9,0x00E9,0x00EA,0x00DE,0x00EA,0x00EA,0x00EB,
	0x00DF,0x00EB,0x00EB,0x00EC,0x00E0,0x00EC,0x00EC,0x00ED,
	0x00E1,0x00ED,0x00E8,0x00ED,0x00E8,0x00EE,0x00EE,0x00EF,
	0x00E9,0x00EF,0x00EF,0x00F0,0x00EA,0x00F0,0x00F0,0x00F1,
	0x00EB,0x00F1,0x00F1,0x00F2,0x00EC,0x00F2,0x00F2,0x00F3,
	0x00ED,0x00F3,0x00EE,0x00F3,0x0060,0x00F4,0x005B,0x00F4,
	0x00F4,0x00F5,0x005B,0x00F5,0x005A,0x00F5,0x00F5,0x00F6,
	0x005A,0x00F6,0x0062,0x00F6,0x005E,0x00F7,0x005E,0x00F4,
	0x00F4,0x00F7,0x00F7,0x00F8,0x005E,0x00F8,0x00A9,0x00FA,
	0x00F9,0x00FA,0x00A8,0x00F9,0x00AA,0x00FC,0x00FB,0x00FC,
	0x00A9,0x00FB,0x00AB,0x00FD,0x00FC,0x00FD,0x00AC,0x00FE,
	0x00FD,0x00FE,0x00AD,0x00FF,0x00FE,0x00FF,0x00A8,0x0100,
	0x00FF,0x0100,0x00FB,0x0102,0x0101,0x0102,0x0100,0x0101,
	0x00FB,0x0100,0x00FC,0x0103,0x0102,0x0103,0x00FD,0x0104,
	0x0103,0x0104,0x00FE,0x0105,0x0104,0x0105,0x00FF,0x0106,
	0x0105,0x0106,0x0101,0x0106,0x0102,0x010E,0x010D,0x010E,
	0x0101,0x010D,0x0103,0x010F,0x010E,0x010F,0x0104,0x0110,
	0x010F,0x0110,0x0105,0x0111,0x0110,0x0111,0x0106,0x0112,
	0x0111,0x0112,0x010D,0x0112,0x010E,0x0114,0x0113,0x0114,
	0x010D,0x0113,0x010F,0x0115,0x0114,0x0115,0x0110,0x0116,
	0x0115,0x0116,0x0111,0x0117,0x0116,0x0117,0x0112,0x0118,
	0x0117,0x0118,0x0113,0x0118,0x00A3,0x0119,0x009F,0x0119,
	0x0119,0x011A,0x009F,0x011A,0x009E,0x011A,0x011A,0x011B,
	0x009E,0x011B,0x00A5,0x011B,0x00A1,0x0119,0x00A1,0x011C,
	0x0119,0x011C,0x00A1,0x011D,0x011C,0x011D,0x00BC,0x00BD,
	0x00BD,0x00BE,0x00BE,0x00BF,0x00BF,0x00C0,0x00C0,0x00C1,
	0x00BC,0x00C1,0x00E2,0x00E3,0x00E3,0x00E4,0x00E4,0x00E5,
	0x00E5,0x00E6,0x00E6,0x00E7,0x00E2,0x00E7,0x0107,0x0108,
	0x0108,0x0109,0x0109,0x010A,0x010A,0x010B,0x010B,0x010C,
	0x0107,0x010C,0x011E,0x011F,0x011F,0x0120,0x011E,0x0120,
	0x011F,0x0121,0x011E,0x0121,0x011E,0x0122,0x0121,0x0122,
	0x00A4,0x011F,0x00A4,0x0121,0x0121,0x0123,0x00A4,0x0123,
	0x0123,0x0124,0x00A4,0x0124,0x0124,0x0125,0x00A4,0x0125,
	0x0125,0x0126,0x00A4,0x0126,0x0122,0x0124,0x0126,0x0127,
	0x0125,0x0127
};


/*
 * Obj Coords in x,y,z format...delineate end of list with MAXINT
 */
short coords[]={
    -726, -21,  10,
    -732, -34,   0,
    -726, -17,   0,
    -724, -30,  15,
    -723, -40,  13,
    -722, -47,   5,
    -722, -47,  -5,
    -723, -40, -13,
    -724, -30, -15,
    -726, -21, -10,
    -675,   6, -27,
    -676,  16,   0,
    -672, -19, -41,
    -668, -47, -36,
    -666, -65, -14,
    -666, -65,  14,
    -668, -47,  36,
    -672, -19,  41,
    -675,   6,  27,
    -614,  27, -38,
    -616,  42,   0,
    -609,  -7, -59,
    -604, -47, -52,
    -601, -74, -20,
    -601, -74,  20,
    -604, -47,  52,
    -609,  -7,  59,
    -614,  27,  38,
    -555,  46, -47,
    -557,  63,   0,
    -549,   2, -73,
    -542, -46, -64,
    -538, -79, -25,
    -538, -79,  25,
    -542, -46,  64,
    -549,   2,  73,
    -555,  46,  47,
    -111, -51, 136,
    -130, -74, 146,
    -507, -54,  86,
     -96, -43, 122,
    -436, -46,  91,
     -86, -30,  90,
     -17, -58, 187,
     -17, -72, 203,
     -17, -50, 168,
     -17, -36, 128,
     -17, -31,  90,
     179, -62, 399,
     179, -57, 381,
     179, -51, 365,
     250, -55, 399,
     182, -64,  89,
     250, -64, 269,
     250, -72, 101,
     250, -64, 264,
     250, -72,  96,
    -507, -79,  69,
    -436, -87,   0,
    -507, -85,   0,
     -87, -94,   0,
    -507, -62,  86,
     -96, -90, 122,
     -17, -83, 168,
     -17, -96,   0,
     179, -68, 365,
     182,-102,   0,
     250, -65, 399,
     250, -96, 102,
     250, -96,  97,
     250, -82, 264,
     250, -82, 269,
    -507,  35,  83,
    -436,  27,  89,
    -438,  63,  88,
    -507,  89,  39,
    -440,  99,  45,
    -507,  99,   0,
    -441, 104,   0,
    -436, -12,  77,
     182, -12,  77,
     182,  27,  77,
    -436,  27,  77,
    -436, -52,  52,
     182, -52,  52,
    -436, -61,   0,
     182, -61,   0,
    -132,  27,  89,
     182,  27,  89,
     182, 104,   0,
     182,  99,  45,
     182,  63,  88,
    -436,  27,   0,
     366, -87, 109,
     342,  31, 106,
     361, -65, 109,
     226,  36,  98,
     273, 115,  14,
     225, 103,  29,
     318, 119,  11,
     320, 110,  21,
     366, -87,   0,
     342,  31,   0,
     343,  21,  46,
     349,  -2,  84,
     357, -44,  84,
     361, -65,  46,
     361, -65,   0,
     358, -47,   5,
     349,   0,   4,
     339,  43,  39,
     345,  21,   0,
     327,  86,  39,
     318, 119,   0,
     320, 108,   0,
    -111, -51,-136,
    -130, -74,-146,
    -507, -54, -86,
     -96, -43,-122,
    -436, -46, -91,
     -86, -30, -90,
     -17, -58,-187,
     -17, -72,-203,
     -17, -50,-168,
     -17, -36,-128,
     -17, -31, -90,
     179, -62,-399,
     179, -57,-381,
     179, -51,-365,
     250, -55,-399,
     182, -64, -89,
     250, -64,-269,
     250, -64,-264,
     250, -72,-101,
     250, -72, -96,
    -507, -79, -69,
    -507, -62, -86,
     -96, -90,-122,
     -17, -83,-168,
     179, -68,-365,
     250, -65,-399,
     250, -96,-102,
     250, -96, -97,
     250, -82,-264,
     250, -82,-269,
    -507,  35, -83,
    -436,  27, -89,
    -438,  63, -88,
    -507,  89, -39,
    -440,  99, -45,
    -436, -12, -77,
     182, -12, -77,
     182,  27, -77,
    -436,  27, -77,
    -436, -52, -52,
     182, -52, -52,
    -132,  27, -89,
     182,  27, -89,
     182,  99, -45,
     182,  63, -88,
     366, -87,-109,
     342,  31,-106,
     361, -65,-109,
     226,  36, -98,
     273, 115, -14,
     225, 103, -29,
     318, 119, -11,
     320, 110, -21,
     343,  21, -46,
     349,  -2, -84,
     357, -44, -84,
     361, -65, -46,
     358, -47,  -5,
     349,   0,  -4,
     339,  43, -39,
     327,  86, -39,
     339,  95,   0,
     343,  81,  23,
     350,  55,  23,
     354,  42,   0,
     350,  55, -23,
     343,  81, -23,
     342,  86,   0,
     344,  77,  15,
     349,  60,  15,
     352,  51,   0,
     349,  60, -15,
     344,  77, -15,
     342,  86,   0,
     344,  77, -15,
     349,  60, -15,
     352,  51,   0,
     349,  60,  15,
     344,  77,  15,
     376, 110,   0,
     381,  94,  27,
     389,  65,  27,
     394,  49,   0,
     389,  65, -27,
     381,  94, -27,
     413, 127,   0,
     419, 109,  33,
     429,  72,  33,
     434,  54,   0,
     429,  72, -33,
     419, 109, -33,
     204, 128,   4,
     186, 133,   0,
     413, 364,   0,
     432, 373,   1,
     432, 373,   0,
     465, 373,   5,
     512, 373,   0,
     413, 169,   0,
     362,   5,  47,
     364,  -7,  71,
     368, -35,  72,
     372, -48,  48,
     372, -35,  24,
     366,  -7,  23,
     364,  -3,  47,
     365, -13,  63,
     368, -29,  63,
     370, -39,  48,
     370, -29,  32,
     367, -13,  32,
     364,  -3,  47,
     367, -13,  32,
     370, -29,  32,
     370, -39,  48,
     368, -29,  63,
     365, -13,  63,
     401,  16,  50,
     402,   0,  77,
     408, -29,  77,
     412, -45,  50,
     411, -29,  23,
     406,   0,  23,
     440,  30,  52,
     441,  11,  85,
     447, -25,  86,
     453, -45,  53,
     451, -25,  19,
     445,  11,  19,
     225,  75, 103,
     225, 104,  87,
     225, 118,  58,
     353,  75, 124,
     356,  32, 104,
     362,   5, -48,
     364,  -7, -71,
     364,  -7, -71,
     368, -35, -72,
     372, -48, -48,
     372, -35, -24,
     366,  -7, -23,
     362,   5, -47,
     364,  -3, -47,
     365, -13, -63,
     368, -29, -63,
     370, -39, -48,
     370, -29, -32,
     367, -13, -32,
     364,  -3, -47,
     367, -13, -32,
     370, -29, -32,
     370, -39, -48,
     368, -29, -63,
     365, -13, -63,
     401,  16, -50,
     402,   0, -77,
     408, -29, -77,
     412, -45, -50,
     411, -29, -23,
     406,   0, -23,
     440,  30, -52,
     441,  11, -86,
     447, -25, -86,
     453, -45, -53,
     451, -25, -19,
     445,  11, -19,
     225,  75,-103,
     225, 104, -87,
     225, 118, -58,
     353,  75,-124,
     356,  32,-104,
     413, 364,   0,
     204, 128,  -4,
     186, 133,   0,
     432, 373,  -1,
     432, 373,   0,
     465, 373,  -5,
     512, 373,   0,
     413, 169,   0,
     318, 119, -11,
     318, 119,   0,
     32767 };

/* after all of that embedded data...10 lines of code.  =)  */
short x1,y1,x2,y2,t,lc;

Rotate(coords,xypoints,xrot,yrot,zrot,distance,centerx,centery);

for(lc=t=0;lc<673;lc++) 
        {
        x1=xypoints[connect[t]<<1];   y1=xypoints[(connect[t++]<<1)+1];
        x2=xypoints[connect[t]<<1];   y2=xypoints[(connect[t++]<<1)+1];

        XDrawLine(display, buffer, pixor,
                 (long)x1,(long)y1,(long)x2,(long)y2);         
        }
}

/* ------------------------------------------------------------------------- */
unsigned short font[]={
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x01E0,0x00F0,0x00F0,0x1E78,0x3C3C,0x3C3C,0x7FFE,0x7FFE,
        0xFFF0,0xFFFE,0x003E,0x7CF8,0x7CFC,0x7C3E,0x7FFE,0x7FF0,
        0x01FE,0x1FFE,0x3F00,0x7C00,0x7C00,0x3F00,0x1FFE,0x01FE,
        0xFF80,0xFFF8,0x007C,0x7C1E,0x7C1E,0x7C7C,0x7FF8,0x7F80,
        0xFFFE,0xFFFE,0x0000,0x7FF0,0x7FF0,0x7C00,0x7FFE,0x7FFE,
        0xFFFE,0xFFFE,0x0000,0x7FFC,0x7FFC,0x7C00,0x7C00,0x7C00,
        0x03F0,0x1FFE,0x3F00,0x7CFE,0x7CFE,0x3F1E,0x1FFE,0x03F0,
        0x7C3E,0x7C3E,0x7C3E,0x7DFE,0x7DFE,0x7C3E,0x7C3E,0x7C3E,
        0x1FF0,0x1FF0,0x07C0,0x07C0,0x07C0,0x07C0,0x1FF0,0x1FF0,
        0x01FC,0x01FC,0x007C,0x007C,0x007C,0x00FC,0x3FF8,0x3FE0,
        0x7C3E,0x7C7E,0x7CFC,0x7FF0,0x7FF8,0x7C7E,0x7C3E,0x7C3E,
        0x7C00,0x7C00,0x7C00,0x7C00,0x7C00,0x7C00,0x7FFE,0x7FFE,
        0x7FE0,0x7FFC,0x001E,0x7DDE,0x7DDE,0x7DDE,0x7DDE,0x7DDE,
        0x7FE0,0x7FFC,0x003E,0x7C1E,0x7C1E,0x7C1E,0x7C1E,0x7C1E,
        0x07C0,0x3FF8,0x7C7C,0xF83E,0xF83E,0x7C7C,0x3FF8,0x07C0,
        0xFFF0,0xFFFC,0x003E,0x7FFC,0x7FF0,0x7C00,0x7C00,0x7C00,
        0x03C0,0x3FFC,0x7C3E,0xF81F,0xF81F,0x7C3E,0x3F00,0x0FC0,
        0xFFF8,0xFFFC,0x003E,0x7FFC,0x7FFC,0x7C3E,0x7C3E,0x7C3E,
        0x0FE0,0x1F80,0x0FE0,0x01FC,0x003E,0x007E,0x7FFC,0x7FE0,
        0xFFFE,0xFFFE,0x0000,0x7C00,0x7C00,0x7E00,0x3FFC,0x0FFC,
        0x7C3E,0x7C3E,0x7C3E,0x7C3E,0x7C3E,0x7E00,0x3FFE,0x0FFE,
        0x7C3E,0x7C3E,0x3E7C,0x1FF8,0x0FF0,0x0FF0,0x07E0,0x03C0,
        0x7C3E,0x7C3E,0x7C3E,0x7C3E,0x7DBE,0x7DBE,0x3FFC,0x0FF0,
        0x7C3E,0x3E7C,0x1FF8,0x0FF0,0x0FF0,0x1FF8,0x3E7C,0x7C3E,
        0x7C3E,0x7C3E,0x7C3E,0x3FFC,0x0FF0,0x07E0,0x07E0,0x07E0,
        0xFFFE,0xFFFE,0x0000,0x07E0,0x0FC0,0x1F80,0x3FFE,0x7FFE,
        0x0000,0x7FFC,0xDFF6,0xF7DE,0xF55E,0xDFF6,0x7FFC,0x0000,
        0x0000,0x3E3E,0x7FFF,0x7FFF,0x3FFE,0x07F0,0x01C0,0x0000,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x7FFC,0xFCFE,0xF39E,0xDC66,0x613C,0x3F38,0x0FE0,0x0380,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x07C0,0x0FE0,0x0FE0,0x07C0,0x0380,0x0000,0x07C0,0x0380,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x7FFE,0x40F8,0x7FFE,0x7E7E,0x7E7E,0x7E7E,0x7E7E,0x7FFE,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x380E,0x7C3E,0x38F8,0x03E0,0x0F80,0x3E38,0xF87C,0xE038,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0078,0x01E0,0x0780,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x01E0,0x0780,0x0F00,0x1E00,0x1E00,0x0F00,0x0780,0x01E0,
        0x0780,0x01E0,0x00F0,0x0078,0x0078,0x00F0,0x01E0,0x0780,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x03C0,0x03C0,0x3FFC,0x3FFC,0x03C0,0x03C0,0x0000,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03C0,0x0000,
        0x0000,0x0000,0x0000,0x3FFC,0x3FFC,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FC0,0x0780,
        0x000E,0x003E,0x00F8,0x03E0,0x0F80,0x3E00,0xF800,0xE000,
        0x07E0,0x3FFC,0x7C3E,0x781E,0x781E,0x7C3E,0x3FFC,0x07E0,
        0x01F0,0x07F0,0x1FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,
        0x7FF0,0x7FFC,0x003E,0x3FFE,0x7FFC,0x0000,0x7FFC,0x7FFE,
        0x7FFE,0x7FF8,0x0000,0x07FC,0x1FFE,0x007E,0x7FFC,0x7FF0,
        0x07C0,0x0F80,0x1F78,0x3FFE,0x7FFE,0x0000,0x03F8,0x03F8,
        0x7FFE,0x7FFE,0x0000,0x7FFC,0x7FFE,0x003E,0x7FFC,0x7FF0,
        0x03F0,0x0FC0,0x1F00,0x3E3E,0x7C1F,0x3E3E,0x3FFC,0x07E0,
        0xFFFE,0xFFFE,0x0000,0x01F8,0x03F0,0x07E0,0x1F80,0x3F00,
        0x07E0,0x3FFC,0x7C3E,0x3FFC,0x3C3C,0x7C3E,0x3FFC,0x07E0,
        0x07E0,0x3FFC,0x7C7C,0x783E,0x3C3C,0x00F8,0x03F0,0x0FC0,
        0x0000,0x0000,0x07C0,0x0380,0x0380,0x07C0,0x0000,0x0000,
        0x0000,0x0000,0x07E0,0x03C0,0x0000,0x07C0,0x07C0,0x1F00,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x3FFC,0x0000,0x3FFC,0x3FFC,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
        };

const unsigned short pow2[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
char text[]="HERE IT IS... THE SPACE SHUTTLE WIREFRAME MODEL.  THIS ONE IS 296 POINTS ROTATED IN REALTIME AND IS COMPOSED OF 673 LINES.  WOO HOO!   AS SCROLLTEXT IS VERY BORING, I'M GOING TO CUT THIS ONE SHORT...  TAKE IT EASY.  (W)1995 BSI...                    ";

void scroll(void)
{
static char smoothx=15;
static char *cpos=text;
char curchar;
short fontindex, i;

XCopyArea(display,window,window,pixcopy,1,YWIN_SIZE,XWIN_SIZE-1,8,
          0,YWIN_SIZE);

curchar=(*cpos)&63;
fontindex=((short)curchar)<<3;

for(i=0;i<8;i++)
  {
   if(font[fontindex+i]&pow2[smoothx])
     XDrawPoint(display,window,pixor,XWIN_SIZE-1,YWIN_SIZE+i);
   else 
     XDrawPoint(display,window,clear,XWIN_SIZE-1,YWIN_SIZE+i);
  }

smoothx--;

if(smoothx==-1)
  {
    smoothx=15;
    if(!(*(++cpos))) cpos=text;
  }

}

