summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGethyn ThomasQuail <gethyn@XylemonsLaptop.localhost>2014-11-02 19:33:20 -0700
committerGethyn ThomasQuail <gethyn@XylemonsLaptop.localhost>2014-11-02 19:33:20 -0700
commit344096b34b114d9ca68be1e438318d97d3b4fc1e (patch)
treef362cb370fffe94228ec51ca3289fae32d9bf45a
parent68a8c43e0b73f25909237479199388777abc4895 (diff)
downloadxlennart-344096b34b114d9ca68be1e438318d97d3b4fc1e.tar.gz
xlennart-344096b34b114d9ca68be1e438318d97d3b4fc1e.tar.bz2
xlennart-344096b34b114d9ca68be1e438318d97d3b4fc1e.zip
Full game source.
-rw-r--r--Bill.c393
-rw-r--r--Bill.h41
-rw-r--r--Bucket.c49
-rw-r--r--Bucket.h19
-rw-r--r--Cable.c151
-rw-r--r--Cable.h12
-rw-r--r--ChangeLog4
-rw-r--r--Computer.c103
-rw-r--r--Computer.h23
-rw-r--r--Game.c340
-rw-r--r--Game.h17
-rw-r--r--Horde.c175
-rw-r--r--Horde.h23
-rw-r--r--INSTALL14
-rw-r--r--Makefile.in105
-rw-r--r--Network.c120
-rw-r--r--Network.h22
-rw-r--r--OS.c56
-rw-r--r--OS.h30
-rw-r--r--README65
-rw-r--r--README.Ports24
-rw-r--r--Scorelist.c100
-rw-r--r--Scorelist.h10
-rw-r--r--Spark.c29
-rw-r--r--Spark.h20
-rw-r--r--UI.c246
-rw-r--r--UI.h86
-rw-r--r--acconfig.h8
-rw-r--r--bitmaps/arch.xbm11
-rw-r--r--bitmaps/bsd.xbm10
-rw-r--r--bitmaps/bucket.xbm8
-rw-r--r--bitmaps/centos.xbm11
-rw-r--r--bitmaps/debian.xbm11
-rw-r--r--bitmaps/gentoo.xbm11
-rw-r--r--bitmaps/hand_down.xbm6
-rw-r--r--bitmaps/hand_down_mask.xbm6
-rw-r--r--bitmaps/hand_up.xbm6
-rw-r--r--bitmaps/hand_up_mask.xbm6
-rw-r--r--bitmaps/initfail.xbm11
-rw-r--r--bitmaps/mandriva.xbm11
-rw-r--r--bitmaps/redhat.xbm10
-rw-r--r--bitmaps/slackware.xbm11
-rw-r--r--bitmaps/suse.xbm11
-rw-r--r--bitmaps/ubuntu.xbm11
-rw-r--r--config.h.in22
-rw-r--r--config.in0
-rwxr-xr-xconfigure2922
-rw-r--r--configure.in102
-rw-r--r--gtk.c672
-rw-r--r--gtk.h9
-rwxr-xr-xinstall-sh251
-rw-r--r--mkinstalldirs40
-rw-r--r--pixmaps/about.xcfbin0 -> 60168 bytes
-rw-r--r--pixmaps/about.xpm387
-rw-r--r--pixmaps/arch.xpm173
-rw-r--r--pixmaps/billA_0.xpm52
-rw-r--r--pixmaps/billA_1.xpm52
-rw-r--r--pixmaps/billA_10.xpm52
-rw-r--r--pixmaps/billA_11.xpm52
-rw-r--r--pixmaps/billA_12.xpm52
-rw-r--r--pixmaps/billA_2.xpm52
-rw-r--r--pixmaps/billA_3.xpm52
-rw-r--r--pixmaps/billA_4.xpm52
-rw-r--r--pixmaps/billA_5.xpm51
-rw-r--r--pixmaps/billA_6.xpm52
-rw-r--r--pixmaps/billA_7.xpm52
-rw-r--r--pixmaps/billA_8.xpm52
-rw-r--r--pixmaps/billA_9.xpm52
-rw-r--r--pixmaps/billD_0.xpm49
-rw-r--r--pixmaps/billD_1.xpm50
-rw-r--r--pixmaps/billD_2.xpm48
-rw-r--r--pixmaps/billD_3.xpm46
-rw-r--r--pixmaps/billD_4.xpm44
-rw-r--r--pixmaps/billL_0.xpm49
-rw-r--r--pixmaps/billL_1.xpm49
-rw-r--r--pixmaps/billL_2.xpm49
-rw-r--r--pixmaps/billR_0.xpm49
-rw-r--r--pixmaps/billR_1.xpm49
-rw-r--r--pixmaps/billR_2.xpm49
-rw-r--r--pixmaps/bsd.xpm38
-rw-r--r--pixmaps/bsdcpu.xpm60
-rw-r--r--pixmaps/bucket.xpm40
-rw-r--r--pixmaps/centos.xpm391
-rw-r--r--pixmaps/debian.xpm184
-rw-r--r--pixmaps/gentoo.xpm322
-rw-r--r--pixmaps/icon.xpm85
-rw-r--r--pixmaps/initfail.xpm87
-rw-r--r--pixmaps/logo.xcfbin0 -> 21765 bytes
-rw-r--r--pixmaps/logo.xpm332
-rw-r--r--pixmaps/maccpu.xpm58
-rw-r--r--pixmaps/mandriva.xpm268
-rw-r--r--pixmaps/nextcpu.xpm54
-rw-r--r--pixmaps/os2cpu.xpm57
-rw-r--r--pixmaps/sgicpu.xpm58
-rw-r--r--pixmaps/slackware.xpm314
-rw-r--r--pixmaps/spark_0.xpm30
-rw-r--r--pixmaps/spark_1.xpm30
-rw-r--r--pixmaps/suncpu.xpm55
-rw-r--r--pixmaps/suse.xpm166
-rw-r--r--pixmaps/toaster.xpm64
-rw-r--r--pixmaps/ubuntu.xpm235
-rw-r--r--scores10
-rw-r--r--strings.h82
-rw-r--r--types.h11
-rw-r--r--util.c22
-rw-r--r--util.h29
-rw-r--r--x11-athena.c296
-rw-r--r--x11-athena.h9
-rw-r--r--x11-motif.c296
-rw-r--r--x11-motif.h9
-rw-r--r--x11.c388
-rw-r--r--x11.h56
-rw-r--r--xlennart.685
-rw-r--r--xlennart.desktop10
-rw-r--r--xlennart.spec56
-rw-r--r--xlennart.xpm85
116 files changed, 12592 insertions, 0 deletions
diff --git a/Bill.c b/Bill.c
new file mode 100644
index 0000000..2dc331b
--- /dev/null
+++ b/Bill.c
@@ -0,0 +1,393 @@
+#include <stdlib.h>
+
+#include "types.h"
+#include "util.h"
+
+#include "Bill.h"
+#include "Computer.h"
+#include "Game.h"
+#include "Horde.h"
+#include "Network.h"
+#include "OS.h"
+#include "UI.h"
+
+/* speed at which OS drops */
+#define GRAVITY 3
+
+/* speed of moving Bill */
+#define SLOW 0
+#define FAST 1
+
+#define WCELS 4 /* # of bill walking animation frames */
+#define DCELS 5 /* # of bill dying animation frames */
+#define ACELS 13 /* # of bill switching OS frames */
+
+static Picture *lcels[WCELS], *rcels[WCELS], *acels[ACELS], *dcels[DCELS];
+static int width, height;
+
+static void
+get_border(int *x, int *y) {
+ int i = RAND(0, 3);
+ int screensize = Game_screensize();
+
+ if (i % 2 == 0)
+ *x = RAND(0, screensize - width);
+ else
+ *y = RAND(0, screensize - height);
+
+ switch (i) {
+ case 0:
+ *y = -height - 16;
+ break;
+ case 1:
+ *x = screensize + 1;
+ break;
+ case 2:
+ *y = screensize + 1;
+ break;
+ case 3:
+ *x = - width - 2;
+ break;
+ }
+}
+
+/* Adds a bill to the in state */
+void
+Bill_enter(Bill **billp) {
+ Bill *bill;
+ Computer *computer;
+
+ bill = xalloc(sizeof *bill);
+
+ bill->state = BILL_STATE_IN;
+ get_border(&bill->x, &bill->y);
+ bill->index = 0;
+ bill->cels = lcels;
+ bill->cargo = OS_WINGDOWS;
+ bill->x_offset = -2;
+ bill->y_offset = -15;
+ bill->target_c = RAND(0, Network_num_computers() - 1);
+ computer = Network_get_computer(bill->target_c);
+ bill->target_x = computer->x + Computer_width() - BILL_OFFSET_X;
+ bill->target_y = computer->y + BILL_OFFSET_Y;
+ Horde_inc_counter(HORDE_COUNTER_ON, 1);
+ Horde_inc_counter(HORDE_COUNTER_OFF, -1);
+ bill->prev = NULL;
+ bill->next = NULL;
+ *billp = bill;
+}
+
+static int
+step_size(unsigned int level) {
+ return MIN(11 + level, 15);
+}
+
+/* Moves bill toward his target - returns whether or not he moved */
+static int
+move(Bill *bill, int mode) {
+ int xdist = bill->target_x - bill->x;
+ int ydist = bill->target_y - bill->y;
+ int step = step_size(Game_level());
+ int dx, dy;
+ int signx = xdist >= 0 ? 1 : -1;
+ int signy = ydist >= 0 ? 1 : -1;
+ xdist = abs(xdist);
+ ydist = abs(ydist);
+ if (!xdist && !ydist)
+ return 0;
+ else if (xdist < step && ydist < step) {
+ bill->x = bill->target_x;
+ bill->y = bill->target_y;
+ }
+ else {
+ dx = (xdist*step*signx)/(xdist+ydist);
+ dy = (ydist*step*signy)/(xdist+ydist);
+ if (mode == FAST) {
+ dx *= 1.25;
+ dy *= 1.25;
+ }
+ bill->x += dx;
+ bill->y += dy;
+ if (dx < 0)
+ bill->cels = lcels;
+ else if (dx > 0)
+ bill->cels = rcels;
+ }
+ return 1;
+}
+
+static void
+draw_std(Bill *bill) {
+ if (bill->cargo >= 0)
+ OS_draw(bill->cargo, bill->x + bill->x_offset,
+ bill->y + bill->y_offset);
+ UI_draw(bill->cels[bill->index], bill->x, bill->y);
+}
+
+static void
+draw_at(Bill *bill) {
+ Computer *computer = Network_get_computer(bill->target_c);
+ if (bill->index > 6 && bill->index < 12)
+ OS_draw(0, bill->x + bill->sx, bill->y + bill->sy);
+ if (bill->cargo >= 0)
+ OS_draw(bill->cargo, bill->x + bill->x_offset,
+ bill->y + bill->y_offset);
+ UI_draw(bill->cels[bill->index], computer->x, computer->y);
+}
+
+static void
+draw_stray(Bill *bill) {
+ OS_draw(bill->cargo, bill->x, bill->y);
+}
+
+void
+Bill_draw(Bill *bill) {
+ switch (bill->state) {
+ case BILL_STATE_IN:
+ case BILL_STATE_OUT:
+ case BILL_STATE_DYING:
+ draw_std(bill);
+ break;
+ case BILL_STATE_AT:
+ draw_at(bill);
+ break;
+ case BILL_STATE_STRAY:
+ draw_stray(bill);
+ break;
+ default:
+ break;
+ }
+}
+
+/* Update Bill's position */
+static void
+update_in(Bill *bill) {
+ int moved = move(bill, SLOW);
+ Computer *computer = Network_get_computer(bill->target_c);
+ if (!moved && computer->os != OS_WINGDOWS && !computer->busy) {
+ computer->busy = 1;
+ bill->cels = acels;
+ bill->index = 0;
+ bill->state = BILL_STATE_AT;
+ return;
+ }
+ else if (!moved) {
+ int i;
+ do {
+ i = RAND(0, Network_num_computers() - 1);
+ } while (i == bill->target_c);
+ computer = Network_get_computer(i);
+ bill->target_c = i;
+ bill->target_x = computer->x + Computer_width() - BILL_OFFSET_X;
+ bill->target_y = computer->y + BILL_OFFSET_Y;
+ }
+ bill->index++;
+ bill->index %= WCELS;
+ bill->y_offset += (8 * (bill->index % 2) - 4);
+}
+
+/* Update Bill standing at a computer */
+static void
+update_at(Bill *bill) {
+ Computer *computer = Network_get_computer(bill->target_c);
+ if (bill->index == 0 && computer->os == OS_OFF) {
+ bill->index = 6;
+ if (computer->stray == NULL)
+ bill->cargo = -1;
+ else {
+ bill->cargo = computer->stray->cargo;
+ Horde_remove_bill(computer->stray);
+ computer->stray = NULL;
+ }
+ } else
+ bill->index++;
+ if (bill->index == 13) {
+ bill->y_offset = -15;
+ bill->x_offset = -2;
+ get_border(&bill->target_x, &bill->target_y);
+ bill->index = 0;
+ bill->cels = lcels;
+ bill->state = BILL_STATE_OUT;
+ computer->busy = 0;
+ return;
+ }
+ bill->y_offset = height - OS_height();
+ switch (bill->index) {
+ case 1:
+ case 2:
+ bill->x -= 8;
+ bill->x_offset +=8;
+ break;
+ case 3:
+ bill->x -= 10;
+ bill->x_offset +=10;
+ break;
+ case 4:
+ bill->x += 3;
+ bill->x_offset -=3;
+ break;
+ case 5:
+ bill->x += 2;
+ bill->x_offset -=2;
+ break;
+ case 6:
+ if (computer->os != OS_OFF) {
+ Network_inc_counter(NETWORK_COUNTER_BASE, -1);
+ Network_inc_counter(NETWORK_COUNTER_OFF, 1);
+ bill->cargo = computer->os;
+ }
+ else {
+ bill->x -= 21;
+ bill->x_offset += 21;
+ }
+ computer->os = OS_OFF;
+ bill->y_offset = -15;
+ bill->x += 20;
+ bill->x_offset -=20;
+ break;
+ case 7:
+ bill->sy = bill->y_offset;
+ bill->sx = -2;
+ break;
+ case 8:
+ bill->sy = -15;
+ bill->sx = -2;
+ break;
+ case 9:
+ bill->sy = -7;
+ bill->sx = -7;
+ bill->x -= 8;
+ bill->x_offset +=8;
+ break;
+ case 10:
+ bill->sy = 0;
+ bill->sx = -7;
+ bill->x -= 15;
+ bill->x_offset +=15;
+ break;
+ case 11:
+ bill->sy = 0;
+ bill->sx = -7;
+ computer->os = OS_WINGDOWS;
+ Network_inc_counter(NETWORK_COUNTER_OFF, -1);
+ Network_inc_counter(NETWORK_COUNTER_WIN, 1);
+ break;
+ case 12:
+ bill->x += 11;
+ bill->x_offset -=11;
+ }
+}
+
+/* Updates Bill fleeing with his ill gotten gain */
+static void
+update_out(Bill *bill) {
+ int screensize = Game_screensize();
+ if (UI_intersect(bill->x, bill->y, width, height, 0, 0,
+ screensize, screensize))
+ {
+ move(bill, FAST);
+ bill->index++;
+ bill->index %= WCELS;
+ bill->y_offset += (8*(bill->index%2)-4);
+ }
+ else {
+ Horde_remove_bill(bill);
+ Horde_inc_counter(HORDE_COUNTER_ON, -1);
+ Horde_inc_counter(HORDE_COUNTER_OFF, 1);
+ }
+}
+
+
+/* Updates a Bill who is dying */
+static void
+update_dying(Bill *bill) {
+ if (bill->index < DCELS - 1){
+ bill->y_offset += (bill->index * GRAVITY);
+ bill->index++;
+ }
+ else {
+ bill->y += bill->y_offset;
+ if (bill->cargo < 0 || bill->cargo == OS_WINGDOWS)
+ Horde_remove_bill(bill);
+ else {
+ Horde_move_bill(bill);
+ bill->state = BILL_STATE_STRAY;
+ }
+ Horde_inc_counter(HORDE_COUNTER_ON, -1);
+ }
+}
+
+void
+Bill_update(Bill *bill) {
+ switch (bill->state) {
+ case BILL_STATE_IN:
+ update_in(bill);
+ break;
+ case BILL_STATE_AT:
+ update_at(bill);
+ break;
+ case BILL_STATE_OUT:
+ update_out(bill);
+ break;
+ case BILL_STATE_DYING:
+ update_dying(bill);
+ break;
+ default:
+ break;
+ }
+}
+
+void
+Bill_set_dying(Bill *bill) {
+ bill->index = -1;
+ bill->cels = dcels;
+ bill->x_offset = -2;
+ bill->y_offset = -15;
+ bill->state = BILL_STATE_DYING;
+}
+
+int
+Bill_clicked(Bill *bill, int locx, int locy) {
+ return (locx > bill->x && locx < bill->x + width &&
+ locy > bill->y && locy < bill->y + height);
+}
+
+int
+Bill_clickedstray(Bill *bill, int locx, int locy) {
+ return (locx > bill->x && locx < bill->x + OS_width() &&
+ locy > bill->y && locy < bill->y + OS_height());
+}
+
+void
+Bill_load_pix () {
+ int i;
+ for (i = 0; i < WCELS - 1; i++) {
+ UI_load_picture_indexed("billL", i, 1, &lcels[i]);
+ UI_load_picture_indexed("billR", i, 1, &rcels[i]);
+ }
+ lcels[WCELS - 1] = lcels[1];
+ rcels[WCELS - 1] = rcels[1];
+
+ for (i = 0; i < DCELS; i++)
+ UI_load_picture_indexed("billD", i, 1, &dcels[i]);
+ width = UI_picture_width(dcels[0]);
+ height = UI_picture_height(dcels[0]);
+
+ for (i = 0; i < ACELS; i++)
+ UI_load_picture_indexed("billA", i, 1, &acels[i]);
+}
+
+int
+Bill_width() {
+ return width;
+}
+
+int
+Bill_height() {
+ return height;
+}
+
+int
+Bill_get_state(Bill *bill) {
+ return bill->state;
+}
diff --git a/Bill.h b/Bill.h
new file mode 100644
index 0000000..71e0a53
--- /dev/null
+++ b/Bill.h
@@ -0,0 +1,41 @@
+#ifndef BILL_H
+#define BILL_H
+
+/* Bill's states */
+#define BILL_STATE_IN 1
+#define BILL_STATE_AT 2
+#define BILL_STATE_OUT 3
+#define BILL_STATE_DYING 4
+#define BILL_STATE_STRAY 5
+
+/* Offsets from upper right of computer */
+#define BILL_OFFSET_X 20
+#define BILL_OFFSET_Y 3
+
+struct Bill {
+ int state; /* what is it doing? */
+ int index; /* index of animation frame */
+ Picture **cels; /* array of animation frames */
+ int x, y; /* location */
+ int target_x; /* target x position */
+ int target_y; /* target y position */
+ int target_c; /* target computer */
+ int cargo; /* which OS carried */
+ int x_offset; /* accounts for width differences */
+ int y_offset; /* 'bounce' factor for OS carried */
+ int sx, sy; /* used for drawing extra OS during switch */
+ Bill *prev, *next;
+};
+
+void Bill_enter(Bill **billp);
+void Bill_draw(Bill *bill);
+void Bill_update(Bill *bill);
+void Bill_set_dying(Bill *bill);
+int Bill_clicked(Bill *bill, int locx, int locy);
+int Bill_clickedstray(Bill *bill, int locx, int locy);
+void Bill_load_pix(void);
+int Bill_width(void);
+int Bill_height(void);
+int Bill_get_state(Bill *bill);
+
+#endif
diff --git a/Bucket.c b/Bucket.c
new file mode 100644
index 0000000..f8b747c
--- /dev/null
+++ b/Bucket.c
@@ -0,0 +1,49 @@
+#include <util.h>
+
+#include "Bucket.h"
+#include "Cable.h"
+#include "Game.h"
+#include "Network.h"
+#include "UI.h"
+
+static Picture *picture;
+static MCursor *cursor;
+static int grabbed;
+
+void
+Bucket_load_pix() {
+ UI_load_picture("bucket", 1, &picture);
+ UI_load_cursor("bucket", CURSOR_OWN_MASK, &cursor);
+}
+
+int
+Bucket_clicked(int x, int y) {
+ return (x > 0 && x < UI_picture_width(picture) &&
+ y > 0 && y < UI_picture_height(picture));
+}
+
+void
+Bucket_draw() {
+ if (!grabbed)
+ UI_draw(picture, 0, 0);
+}
+
+void
+Bucket_grab(int x, int y) {
+ UNUSED(x);
+ UNUSED(y);
+
+ UI_set_cursor(cursor);
+ grabbed = 1;
+}
+
+void
+Bucket_release(int x, int y) {
+ int i;
+ for (i = 0; i < Network_num_cables(); i++) {
+ Cable *cable = Network_get_cable(i);
+ if (Cable_onspark(cable, x, y))
+ Cable_reset(cable);
+ }
+ grabbed = 0;
+}
diff --git a/Bucket.h b/Bucket.h
new file mode 100644
index 0000000..ad31a61
--- /dev/null
+++ b/Bucket.h
@@ -0,0 +1,19 @@
+#ifndef BUCKET_H
+#define BUCKET_H
+
+void
+Bucket_load_pix(void);
+
+void
+Bucket_draw(void);
+
+int
+Bucket_clicked(int x, int y);
+
+void
+Bucket_grab(int x, int y);
+
+void
+Bucket_release(int x, int y);
+
+#endif
diff --git a/Cable.c b/Cable.c
new file mode 100644
index 0000000..a221529
--- /dev/null
+++ b/Cable.c
@@ -0,0 +1,151 @@
+#include "stdio.h"
+#include "stdlib.h"
+
+#include "types.h"
+#include "util.h"
+
+#include "Cable.h"
+#include "Computer.h"
+#include "Game.h"
+#include "Network.h"
+#include "OS.h"
+#include "Spark.h"
+#include "UI.h"
+
+struct Cable {
+ int c1, c2; /* computers connected */
+ int x1, y1, x2, y2; /* endpoints of line representing cable */
+ int x, y; /* current location of spark */
+ float fx, fy; /* needed for line drawing */
+ int delay; /* how much time until spark leaves */
+ int active; /* is spark moving and from which end */
+ int index;
+};
+
+#define SWAP(x, y) do {int _t; _t = x; x = y; y = _t;} while(0)
+
+static void
+reverse(Cable *cable) {
+ SWAP(cable->c1, cable->c2);
+ SWAP(cable->x1, cable->x2);
+ SWAP(cable->y1, cable->y2);
+}
+
+void
+Cable_setup(Cable **cablep) {
+ Cable *cable;
+ Computer *comp1, *comp2;
+ int cwidth, cheight;
+
+ cable = xalloc(sizeof *cable);
+
+ cable->c1 = RAND(0, Network_num_computers() - 1);
+ do {
+ cable->c2 = RAND(0, Network_num_computers() - 1);
+ } while (cable->c2 == cable->c1);
+ cable->active = 0;
+ cable->index = 0;
+ cable->delay = SPARK_DELAY(Game_level());
+
+ comp1 = Network_get_computer(cable->c1);
+ comp2 = Network_get_computer(cable->c2);
+ cwidth = Computer_width();
+ cheight = Computer_height();
+ cable->x1 = comp1->x + cwidth/3;
+ cable->x2 = comp2->x + cwidth/3;
+ cable->y1 = comp1->y + cheight/2;
+ cable->y2 = comp2->y + cheight/2;
+
+ *cablep = cable;
+}
+
+
+void
+Cable_draw(Cable *cable) {
+ UI_draw_line(cable->x1, cable->y1, cable->x2, cable->y2);
+ if (cable->active) {
+ int rx = cable->x - Spark_width()/2;
+ int ry = cable->y - Spark_height()/2;
+ Spark_draw(rx, ry, cable->index);
+ }
+}
+
+void
+Cable_update(Cable *cable) {
+ Computer *comp1, *comp2;
+ comp1 = Network_get_computer(cable->c1);
+ comp2 = Network_get_computer(cable->c2);
+
+ if (cable->active) {
+ if ((comp1->os == OS_WINGDOWS) == (comp2->os == OS_WINGDOWS))
+ cable->active = 0;
+ else if (comp1->os == OS_WINGDOWS || comp2->os == OS_WINGDOWS) {
+ int xdist, ydist;
+ float sx, sy;
+
+ if (comp2->os == OS_WINGDOWS)
+ reverse(cable);
+
+ xdist = cable->x2 - cable->x;
+ ydist = cable->y2 - cable->y;
+
+ sx = xdist >= 0 ? 1.0 : -1.0;
+ sy = ydist >= 0 ? 1.0 : -1.0;
+ xdist = abs(xdist);
+ ydist = abs(ydist);
+ if (xdist == 0 && ydist == 0) {
+ if (!comp2->busy) {
+ int counter;
+ if (comp2->os == OS_OFF)
+ counter = NETWORK_COUNTER_OFF;
+ else
+ counter = NETWORK_COUNTER_BASE;
+ Network_inc_counter(counter, -1);
+ Network_inc_counter(NETWORK_COUNTER_WIN,
+ 1);
+ comp2->os = OS_WINGDOWS;
+ }
+ cable->active = 0;
+ }
+ else if (MAX(xdist, ydist) < SPARK_SPEED) {
+ cable->x = cable->x2;
+ cable->y = cable->y2;
+ }
+ else {
+ cable->fx+=(xdist*SPARK_SPEED*sx)/(xdist+ydist);
+ cable->fy+=(ydist*SPARK_SPEED*sy)/(xdist+ydist);
+ cable->x = (int)cable->fx;
+ cable->y = (int)cable->fy;
+ }
+ cable->index = 1 - cable->index;
+ }
+ }
+ else {
+ if ((comp1->os == OS_WINGDOWS) == (comp2->os == OS_WINGDOWS))
+ ;
+ else if (comp1->os == OS_WINGDOWS || comp2->os == OS_WINGDOWS) {
+ cable->active = 1;
+ cable->delay = SPARK_DELAY(Game_level());
+ if (comp2->os == OS_WINGDOWS)
+ reverse(cable);
+ cable->x = cable->x1;
+ cable->fx = cable->x1;
+ cable->y = cable->y1;
+ cable->fy = cable->y1;
+ }
+ }
+}
+
+int
+Cable_onspark(Cable *cable, int locx, int locy) {
+ if (!cable->active)
+ return 0;
+ return (abs(locx - cable->x) < Spark_width() &&
+ abs(locy - cable->y) < Spark_height());
+}
+
+void
+Cable_reset(Cable *cable) {
+ cable->active = 0;
+ cable->delay = SPARK_DELAY(Game_level());
+}
diff --git a/Cable.h b/Cable.h
new file mode 100644
index 0000000..4888018
--- /dev/null
+++ b/Cable.h
@@ -0,0 +1,12 @@
+#ifndef CABLE_H
+#define CABLE_H
+
+#include "types.h"
+
+void Cable_setup(Cable **cablep);
+void Cable_draw(Cable *cable);
+void Cable_update(Cable *cable);
+int Cable_onspark(Cable *cable, int locx, int locy);
+void Cable_reset(Cable *cable);
+
+#endif
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..ef319d1
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,4 @@
+XLennart history:
+
+1.0 (29/10/2014):
+ - First release! A controversy is sure to broil!
diff --git a/Computer.c b/Computer.c
new file mode 100644
index 0000000..4db70fa
--- /dev/null
+++ b/Computer.c
@@ -0,0 +1,103 @@
+#include <stdlib.h>
+
+#include "types.h"
+#include "util.h"
+
+#include "Bill.h"
+#include "Computer.h"
+#include "Horde.h"
+#include "Network.h"
+#include "Game.h"
+#include "OS.h"
+#include "UI.h"
+
+#define OS_OFFSET 4 /* offset of screen from 0,0 */
+#define BORDER(size) (size / 10) /* at least this far from a side */
+
+#define MIN_PC 6 /* type >= MIN_PC means the computer is a PC */
+
+static const char *cpuname[] = {"toaster", "maccpu", "nextcpu", "sgicpu",
+ "suncpu", "os2cpu", "bsdcpu"};
+
+#define NUM_SYS (sizeof(cpuname) / sizeof(cpuname[0]))
+
+static Picture *pictures[NUM_SYS]; /* array of cpu pictures */
+static int width, height;
+
+
+static int
+determineOS(Computer *computer) {
+ if (computer->type < MIN_PC)
+ return computer->type;
+ else
+ return OS_randpc();
+}
+
+int
+Computer_setup(Computer *computer, int index) {
+ int j, counter = 0, flag;
+ int x, y;
+ int screensize = Game_screensize();
+ int border = BORDER(screensize);
+ do {
+ if (++counter > 4000)
+ return 0;
+ x = RAND(border, screensize - border - width);
+ y = RAND(border, screensize - border - height);
+ flag = 1;
+ /* check for conflicting computer placement */
+ for (j = 0; j < index && flag; j++) {
+ Computer *c = Network_get_computer(j);
+ int twidth = width - BILL_OFFSET_X + Bill_width();
+ if (UI_intersect(x, y, twidth, height,
+ c->x, c->y, twidth, height))
+ flag = 0;
+ }
+ } while (!flag);
+ computer->x = x;
+ computer->y = y;
+ computer->type = RAND(1, NUM_SYS - 1);
+ computer->os = determineOS(computer);
+ computer->busy = 0;
+ computer->stray = NULL;
+ return 1;
+}
+
+int
+Computer_on(Computer *computer, int locx, int locy) {
+ return (abs(locx - computer->x) < width &&
+ abs(locy - computer->y) < height);
+}
+
+int
+Computer_compatible(Computer *computer, int system) {
+ return (computer->type == system ||
+ (computer->type >= MIN_PC && OS_ispc(system)));
+}
+
+void
+Computer_draw(Computer *computer) {
+ UI_draw(pictures[computer->type], computer->x, computer->y);
+ if (computer->os != OS_OFF)
+ OS_draw(computer->os,
+ computer->x + OS_OFFSET, computer->y + OS_OFFSET);
+}
+
+void
+Computer_load_pix() {
+ unsigned int i;
+ for (i = 0; i < NUM_SYS; i++)
+ UI_load_picture(cpuname[i], 1, &pictures[i]);
+ width = UI_picture_width(pictures[0]);
+ height = UI_picture_height(pictures[0]);
+}
+
+int
+Computer_width() {
+ return width;
+}
+
+int
+Computer_height() {
+ return height;
+}
diff --git a/Computer.h b/Computer.h
new file mode 100644
index 0000000..fdd4449
--- /dev/null
+++ b/Computer.h
@@ -0,0 +1,23 @@
+#ifndef COMPUTER_H
+#define COMPUTER_H
+
+struct Computer {
+ int type; /* CPU type */
+ int os; /* current OS */
+ int x, y; /* location */
+ int busy; /* is the computer being used? */
+ Bill *stray;
+};
+
+
+int Computer_setup(Computer *computer, int i);
+void Computer_draw(Computer *computer);
+int Computer_on (Computer *computer, int locx, int locy);
+int Computer_compatible(Computer *computer, int system);
+void Computer_load_pix(void);
+int Computer_width(void);
+int Computer_height(void);
+
+#define COMPUTER_TOASTER 0 /* computer 0 is a toaster */
+
+#endif
diff --git a/Game.c b/Game.c
new file mode 100644
index 0000000..cb36fd1
--- /dev/null
+++ b/Game.c
@@ -0,0 +1,340 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+
+#include "types.h"
+#include "util.h"
+
+#include "Bill.h"
+#include "Bucket.h"
+#include "Computer.h"
+#include "Cable.h"
+#include "Game.h"
+#include "Horde.h"
+#include "Network.h"
+#include "OS.h"
+#include "Scorelist.h"
+#include "Spark.h"
+#include "UI.h"
+
+#define SCREENSIZE 400
+
+/* Game states */
+#define STATE_PLAYING 1
+#define STATE_BETWEEN 2
+#define STATE_END 3
+#define STATE_WAITING 4
+
+/* Score related constants */
+#define SCORE_ENDLEVEL -1
+#define SCORE_BILLPOINTS 5
+
+static unsigned int state;
+static int efficiency;
+static int score, level, iteration;
+static Picture *logo, *icon, *about;
+static MCursor *defaultcursor, *downcursor;
+static Bill *grabbed;
+static const char *gui;
+static int screensize = SCREENSIZE;
+
+static void
+setup_level(int newlevel) {
+ level = newlevel;
+ Horde_setup();
+ grabbed = NULL;
+ UI_set_cursor(defaultcursor);
+ Network_setup();
+ iteration = 0;
+ efficiency = 0;
+}
+
+void
+Game_start(int newlevel) {
+ state = STATE_PLAYING;
+ score = 0;
+ UI_restart_timer();
+ UI_set_pausebutton(1);
+ setup_level(newlevel);
+}
+
+void
+Game_quit() {
+ Scorelist_write();
+ exit(0);
+}
+
+static void
+update_info(void) {
+ char str[80];
+ int on_screen = Horde_get_counter(HORDE_COUNTER_ON);
+ int off_screen = Horde_get_counter(HORDE_COUNTER_OFF);
+ int base = Network_get_counter(NETWORK_COUNTER_BASE);
+ int off = Network_get_counter(NETWORK_COUNTER_OFF);
+ int win = Network_get_counter(NETWORK_COUNTER_WIN);
+ int units = Network_num_computers();
+ sprintf(str, "Lenn:%d/%d System:%d/%d/%d Level:%d Score:%d",
+ on_screen, off_screen, base, off, win, level, score);
+ UI_draw_str(str, 5, screensize - 5);
+ efficiency += ((100 * base - 10 * win) / units);
+}
+
+void
+Game_warp_to_level(int lev) {
+ if (state == STATE_PLAYING) {
+ if (lev <= level)
+ return;
+ setup_level(lev);
+ }
+ else {
+ if (lev <= 0)
+ return;
+ Game_start(lev);
+ }
+}
+
+void
+Game_add_high_score(const char *str) {
+ Scorelist_recalc(str, level, score);
+}
+
+void
+Game_button_press(int x, int y) {
+ int counter;
+
+ if (state != STATE_PLAYING)
+ return;
+ UI_set_cursor(downcursor);
+
+ if (Bucket_clicked(x, y)) {
+ Bucket_grab(x, y);
+ return;
+ }
+
+ grabbed = Horde_clicked_stray(x, y);
+ if (grabbed != NULL) {
+ OS_set_cursor(grabbed->cargo);
+ return;
+ }
+
+ counter = Horde_process_click(x, y);
+ score += (counter * counter * SCORE_BILLPOINTS);
+}
+
+void
+Game_button_release(int x, int y) {
+ int i;
+ UI_set_cursor(defaultcursor);
+
+ if (state != STATE_PLAYING)
+ return;
+
+ if (grabbed == NULL) {
+ Bucket_release(x, y);
+ return;
+ }
+
+ for (i = 0; i < Network_num_computers(); i++) {
+ Computer *computer = Network_get_computer(i);
+
+ if (Computer_on(computer, x, y) &&
+ Computer_compatible(computer, grabbed->cargo) &&
+ (computer->os == OS_WINGDOWS || computer->os == OS_OFF)) {
+ int counter;
+
+ Network_inc_counter(NETWORK_COUNTER_BASE, 1);
+ if (computer->os == OS_WINGDOWS)
+ counter = NETWORK_COUNTER_WIN;
+ else
+ counter = NETWORK_COUNTER_OFF;
+ Network_inc_counter(counter, -1);
+ computer->os = grabbed->cargo;
+ Horde_remove_bill(grabbed);
+ grabbed = NULL;
+ return;
+ }
+ }
+ Horde_add_bill(grabbed);
+ grabbed = NULL;
+}
+
+static void
+draw_logo(void) {
+ UI_clear();
+ UI_draw(logo,
+ (screensize - UI_picture_width(logo)) / 2,
+ (screensize - UI_picture_height(logo)) / 2);
+}
+
+void
+Game_update() {
+ char str[40];
+
+ switch (state) {
+ case STATE_PLAYING:
+ UI_clear();
+ Bucket_draw();
+ Network_update();
+ Network_draw();
+ Horde_update(iteration);
+ Horde_draw();
+ update_info();
+ if (Horde_get_counter(HORDE_COUNTER_ON) +
+ Horde_get_counter(HORDE_COUNTER_OFF) == 0) {
+ score += (level * efficiency / iteration);
+ state = STATE_BETWEEN;
+ }
+ if ((Network_get_counter(NETWORK_COUNTER_BASE) +
+ Network_get_counter(NETWORK_COUNTER_OFF)) <= 1)
+ state = STATE_END;
+ break;
+ case STATE_END:
+ UI_set_cursor(defaultcursor);
+ UI_clear();
+ Network_toasters();
+ Network_draw();
+ UI_refresh();
+ UI_popup_dialog(DIALOG_ENDGAME);
+ if (Scorelist_ishighscore(score)) {
+ UI_popup_dialog(DIALOG_ENTERNAME);
+ Scorelist_update();
+ }
+ UI_popup_dialog(DIALOG_HIGHSCORE);
+ draw_logo();
+ UI_kill_timer();
+ UI_set_pausebutton(0);
+ state = STATE_WAITING;
+ break;
+ case STATE_BETWEEN:
+ UI_set_cursor(defaultcursor);
+ sprintf(str, "After Level %d:\nScore: %d", level, score);
+ UI_update_dialog(DIALOG_SCORE, str);
+ UI_popup_dialog(DIALOG_SCORE);
+ state = STATE_PLAYING;
+ setup_level(++level);
+ break;
+ }
+ UI_refresh();
+ iteration++;
+}
+
+int
+Game_score() {
+ return score;
+}
+
+int
+Game_level() {
+ return level;
+}
+
+int
+Game_screensize() {
+ return screensize;
+}
+
+double
+Game_scale(int dimensions) {
+ double scale = (double)screensize / SCREENSIZE;
+ double d = 1;
+ for ( ; dimensions > 0; dimensions--)
+ d *= scale;
+ return (d);
+}
+
+/*
+ * Note - don't use getopt, since it might reorder the args or do something
+ * that the UI-specific argument parser doesn't like.
+ */
+static void
+parse_args(int argc, char **argv) {
+ char *s;
+ char *endp;
+ int i;
+
+ for (i = 1; i < argc; i++) {
+ if (strncasecmp(argv[i], "-l", 2) == 0) {
+ if (strlen(argv[i]) == 2 && i == argc - 1)
+ fatal("-l takes an argument");
+ if (strlen(argv[i]) > 2)
+ s = argv[i] + 2;
+ else
+ s = argv[++i];
+ level = strtol(s, &endp, 10);
+ if (*endp != '\0' || level <= 0)
+ fatal("invalid level '%s'", s);
+ } else if (strcmp(argv[i], "--gui") == 0) {
+ if (i == argc - 1)
+ fatal("--gui takes an argument");
+ gui = argv[++i];
+ } else if (strcmp(argv[i], "--size") == 0) {
+ if (i == argc - 1)
+ fatal("--size takes an argument");
+ s = argv[++i];
+ screensize = strtol(s, &endp, 10);
+ if (*endp != '\0' || screensize <= 0)
+ fatal("invalid screensize '%s'", s);
+ if (screensize < SCREENSIZE)
+ fatal("screensize must be larger than '%d'",
+ SCREENSIZE);
+ } else if (strcmp(argv[1], "-v") == 0 ||
+ strcmp(argv[1], "--version") == 0)
+ {
+ printf ("XLennart version 1.0\n\n");
+ exit(0);
+ } else if (strcmp(argv[1], "-h") == 0 ||
+ strcmp(argv[1], "--help") == 0)
+ {
+ printf("XLennart version 1.0\n");
+ printf("Options:\n");
+ printf("-l <n>\tStart at level n.\n");
+ printf("--gui <gui> \tUse a specific gui "
+ "(athena, motif, gtk)\n");
+ printf("--size <size>\t\tUse a larger playing area.\n");
+ printf("-v\t\tPrint version number and exit.\n");
+ printf("-h\t\tPrint help and exit.\n");
+ printf("All standard toolkit options are also ");
+ printf("supported.\n\n");
+ exit(0);
+ }
+ }
+}
+
+int
+main(int argc, char **argv) {
+ srand(time(NULL));
+ parse_args(argc, argv);
+ UI_initialize(gui, &argc, argv);
+ UI_make_main_window(screensize);
+ UI_graphics_init();
+ UI_load_picture("logo", 0, &logo);
+ UI_load_picture("icon", 0, &icon);
+ UI_load_picture("about", 0, &about);
+ draw_logo();
+ UI_refresh();
+ UI_make_dialogs(logo, icon, about);
+ UI_set_icon(icon);
+
+ Scorelist_read();
+ Scorelist_update();
+
+ UI_load_cursor("hand_up", CURSOR_SEP_MASK, &defaultcursor);
+ UI_load_cursor("hand_down", CURSOR_SEP_MASK, &downcursor);
+ UI_set_cursor(defaultcursor);
+
+ Bill_load_pix();
+ OS_load_pix();
+ Computer_load_pix();
+ Bucket_load_pix();
+ Spark_load_pix();
+
+ state = STATE_WAITING;
+ if (level)
+ Game_start(level);
+ else
+ UI_set_pausebutton(0);
+ UI_main_loop();
+ exit(0);
+}
diff --git a/Game.h b/Game.h
new file mode 100644
index 0000000..50b9582
--- /dev/null
+++ b/Game.h
@@ -0,0 +1,17 @@
+#ifndef GAME_H
+#define GAME_H
+
+void Game_start(int newlevel);
+void Game_quit(void);
+void Game_warp_to_level(int lev);
+void Game_add_high_score(const char *str);
+void Game_button_press(int x, int y);
+void Game_button_release(int x, int y);
+void Game_update(void);
+
+int Game_score(void);
+int Game_level(void);
+int Game_screensize(void);
+double Game_scale(int dimensions);
+
+#endif
diff --git a/Horde.c b/Horde.c
new file mode 100644
index 0000000..2dbd99c
--- /dev/null
+++ b/Horde.c
@@ -0,0 +1,175 @@
+#include <stdlib.h>
+
+#include "types.h"
+#include "util.h"
+
+#include "Bill.h"
+#include "Computer.h"
+#include "Game.h"
+#include "Horde.h"
+#include "Network.h"
+#include "UI.h"
+
+static Bill *alive, *strays;
+static int counters[HORDE_COUNTER_MAX + 1];
+
+#define MAX_BILLS 100 /* max Bills per level */
+
+#define UNLINK(bill, list) \
+ do { \
+ if ((bill)->next != NULL) \
+ (bill)->next->prev = (bill)->prev; \
+ if ((bill)->prev != NULL) \
+ (bill)->prev->next = (bill)->next; \
+ else if ((bill) == list) \
+ (list) = (bill)->next; \
+ (bill)->prev = NULL; \
+ (bill)->next = NULL; \
+ } while (0)
+
+#define PREPEND(bill, list) \
+ do { \
+ (bill)->next = (list); \
+ if ((list) != NULL) \
+ (list)->prev = (bill); \
+ (list) = (bill); \
+ } while (0)
+
+static int
+on(unsigned int lev) {
+ int perlevel = (int)((8 + 3 * lev) * Game_scale(2));
+ return MIN(perlevel, MAX_BILLS);
+}
+
+static int
+max_at_once(unsigned int lev) {
+ return MIN(2 + lev / 4, 12);
+}
+
+static int
+between(unsigned int lev) {
+ return MAX(14 - lev / 3, 10);
+}
+
+/* Launches Bills whenever called */
+static void
+launch(int max) {
+ Bill *bill;
+ int n;
+ int off_screen = counters[HORDE_COUNTER_OFF];
+
+ if (max == 0 || off_screen == 0)
+ return;
+ n = RAND(1, MIN(max, off_screen));
+ for (; n > 0; n--) {
+ Bill_enter(&bill);
+ PREPEND(bill, alive);
+ }
+}
+
+void
+Horde_setup() {
+ Bill *bill;
+ while (alive != NULL) {
+ bill = alive;
+ UNLINK(bill, alive);
+ free(bill);
+ }
+ while (strays != NULL) {
+ bill = strays;
+ UNLINK(bill, strays);
+ free(bill);
+ }
+ counters[HORDE_COUNTER_OFF] = on(Game_level());
+ counters[HORDE_COUNTER_ON] = 0;
+}
+
+void
+Horde_update(int iteration) {
+ Bill *bill, *next;
+ int level = Game_level();
+ if (iteration % between(level) == 0)
+ launch(max_at_once(level));
+ for (bill = alive; bill != NULL; bill = next) {
+ next = bill->next;
+ Bill_update(bill);
+ }
+}
+
+void
+Horde_draw() {
+ Bill *bill;
+
+ for (bill = strays; bill != NULL; bill = bill->next)
+ Bill_draw(bill);
+ for (bill = alive; bill != NULL; bill = bill->next)
+ Bill_draw(bill);
+}
+
+void
+Horde_move_bill(Bill *bill) {
+ UNLINK(bill, alive);
+ PREPEND(bill, strays);
+}
+
+void
+Horde_remove_bill(Bill *bill) {
+ if (bill->state == BILL_STATE_STRAY)
+ UNLINK(bill, strays);
+ else
+ UNLINK(bill, alive);
+ Network_clear_stray(bill);
+ free(bill);
+}
+
+void
+Horde_add_bill(Bill *bill) {
+ if (bill->state == BILL_STATE_STRAY)
+ PREPEND(bill, strays);
+ else
+ PREPEND(bill, alive);
+}
+
+Bill *
+Horde_clicked_stray(int x, int y) {
+ Bill *bill;
+
+ for (bill = strays; bill != NULL; bill = bill->next) {
+ if (!Bill_clickedstray(bill, x, y))
+ continue;
+ UNLINK(bill, strays);
+ return bill;
+ }
+ return NULL;
+}
+
+int
+Horde_process_click(int x, int y) {
+ Bill *bill;
+ int counter = 0;
+
+ for (bill = alive; bill != NULL; bill = bill->next) {
+ if (bill->state == BILL_STATE_DYING ||
+ !Bill_clicked(bill, x, y))
+ continue;
+ if (bill->state == BILL_STATE_AT) {
+ Computer *comp;
+ comp = Network_get_computer(bill->target_c);
+ comp->busy = 0;
+ comp->stray = bill;
+ }
+ Bill_set_dying(bill);
+ counter++;
+ }
+ return counter;
+}
+
+void
+Horde_inc_counter(int counter, int val) {
+ counters[counter] += val;
+}
+
+int
+Horde_get_counter(int counter) {
+ return counters[counter];
+}
diff --git a/Horde.h b/Horde.h
new file mode 100644
index 0000000..f064417
--- /dev/null
+++ b/Horde.h
@@ -0,0 +1,23 @@
+#ifndef HORDE_H
+#define HORDE_H
+
+#include "types.h"
+
+/* Counters */
+#define HORDE_COUNTER_OFF 0
+#define HORDE_COUNTER_ON 1
+#define HORDE_COUNTER_MAX 1
+
+void Horde_setup(void);
+void Horde_update(int iteration);
+void Horde_draw(void);
+Bill * Horde_get_bill(int index);
+void Horde_move_bill(Bill *bill);
+void Horde_remove_bill(Bill *bill);
+void Horde_add_bill(Bill *bill);
+Bill *Horde_clicked_stray(int x, int y);
+int Horde_process_click(int x, int y);
+void Horde_inc_counter(int counter, int val);
+int Horde_get_counter(int counter);
+
+#endif
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..5cfb52d
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,14 @@
+To install:
+ ./configure
+ make
+ make install
+
+Notes:
+ - libXpm is required when using Motif or Athena widgets. If you don't
+ have it, get it from any X ftp site.
+
+ - By default, xbill will be detect the presence of GTK, Motif, and Athena
+ widgets, and build with all that are present. It will also use Xaw3d
+ as a replacement for the standard Athena sidgets if present.
+
+ - The default UI is GTK, if compiled in, followed by Motif and Athena.
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..ae5b438
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,105 @@
+CC = @CC@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@ @X_LIBS@ @WIDGET_LIBS@ @X_PRE_LIBS@
+INSTALL=@INSTALL@
+INSTALL_DATA=@INSTALL_DATA@
+MKINSTALLDIRS = $(SHELL) $(top_srcdir)/mkinstalldirs
+
+X_CFLAGS=@X_CFLAGS@
+GTK_CFLAGS=@GTK_CFLAGS@
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+mandir=@mandir@
+datadir=@datadir@
+localstatedir=@localstatedir@
+top_srcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+ALL_CFLAGS = $(CFLAGS) $(CPPFLAGS) -I$(srcdir)
+ALL_LDFLAGS = $(CFLAGS) $(LDFLAGS)
+IMAGE_DEFINES=-DIMAGES=\"${datadir}/xlennart\"
+SCORE_DEFINES=-DSCOREFILE=\"${localstatedir}/xlennart/scores\"
+
+PROG = xlennart
+
+OBJS = Bill.o Bucket.o Cable.o Computer.o Game.o Horde.o Network.o \
+ OS.o Scorelist.o Spark.o UI.o util.o @WIDGET_OBJS@
+
+XPMS = pixmaps/about.xpm pixmaps/apple.xpm pixmaps/billA_0.xpm \
+ pixmaps/billA_1.xpm pixmaps/billA_10.xpm pixmaps/billA_11.xpm \
+ pixmaps/billA_12.xpm pixmaps/billA_2.xpm pixmaps/billA_3.xpm \
+ pixmaps/billA_4.xpm pixmaps/billA_5.xpm pixmaps/billA_6.xpm \
+ pixmaps/billA_7.xpm pixmaps/billA_8.xpm pixmaps/billA_9.xpm \
+ pixmaps/billD_0.xpm pixmaps/billD_1.xpm pixmaps/billD_2.xpm \
+ pixmaps/billD_3.xpm pixmaps/billD_4.xpm pixmaps/billL_0.xpm \
+ pixmaps/billL_1.xpm pixmaps/billL_2.xpm pixmaps/billR_0.xpm \
+ pixmaps/billR_1.xpm pixmaps/billR_2.xpm pixmaps/bsd.xpm \
+ pixmaps/bsdcpu.xpm pixmaps/bucket.xpm pixmaps/arch.xpm \
+ pixmaps/icon.xpm pixmaps/centos.xpm pixmaps/logo.xpm \
+ pixmaps/maccpu.xpm pixmaps/debian.xpm pixmaps/nextcpu.xpm \
+ pixmaps/gentoo.xpm pixmaps/os2cpu.xpm \
+ pixmaps/palm.xpm pixmaps/palmcpu.xpm pixmaps/mandriva.xpm \
+ pixmaps/spark_0.xpm pixmaps/slackware.xpm pixmaps/suse.xpm \
+ pixmaps/spark_1.xpm pixmaps/ubuntu.xpm pixmaps/suncpu.xpm \
+ pixmaps/toaster.xpm pixmaps/initfail.xpm
+
+XBMS = bitmaps/apple.xbm bitmaps/bsd.xbm bitmaps/bucket.xbm \
+ bitmaps/hand_down.xbm bitmaps/hand_down_mask.xbm bitmaps/hand_up.xbm \
+ bitmaps/hand_up_mask.xbm bitmaps/hurd.xbm bitmaps/linux.xbm \
+ bitmaps/next.xbm bitmaps/os2.xbm bitmaps/palm.xbm bitmaps/redhat.xbm \
+ bitmaps/sgi.xbm bitmaps/sun.xbm
+
+MANDIR = man6
+MAN = xlennart.6
+
+all: ${PROG}
+
+xlennart: ${OBJS}
+ $(CC) $(ALL_LDFLAGS) -o $@ ${OBJS} ${LIBS}
+
+.c.o:
+ $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+Scorelist.o: Scorelist.c
+ $(CC) $(ALL_CFLAGS) $(SCORE_DEFINES) -c $< -o $@
+
+x11-motif.o: x11-motif.c
+ $(CC) $(ALL_CFLAGS) $(X_CFLAGS) -c $< -o $@
+
+x11-athena.o: x11-athena.c
+ $(CC) $(ALL_CFLAGS) $(X_CFLAGS) -c $< -o $@
+
+x11.o: x11.c
+ $(CC) $(ALL_CFLAGS) $(X_CFLAGS) $(IMAGE_DEFINES) -c $< -o $@
+
+gtk.o: gtk.c
+ $(CC) $(ALL_CFLAGS) $(GTK_CFLAGS) $(IMAGE_DEFINES) -c $< -o $@
+
+install:
+ $(MKINSTALLDIRS) ${DESTDIR}${bindir}
+ $(INSTALL) ${PROG} ${DESTDIR}${bindir}/${PROG}
+ $(MKINSTALLDIRS) ${DESTDIR}${mandir}/${MANDIR}
+ $(INSTALL_DATA) ${srcdir}/${MAN} ${DESTDIR}${mandir}/${MANDIR}
+ $(MKINSTALLDIRS) ${DESTDIR}${localstatedir}/xlennart
+ $(INSTALL_DATA) -m 0666 ${srcdir}/scores ${DESTDIR}${localstatedir}/xlennart
+ $(MKINSTALLDIRS) ${DESTDIR}${datadir}/xlennart
+ $(MKINSTALLDIRS) ${DESTDIR}${datadir}/xlennart/pixmaps
+ $(MKINSTALLDIRS) ${DESTDIR}${datadir}/xlennart/bitmaps
+ for i in ${XPMS}; do \
+ ${INSTALL_DATA} ${srcdir}/$$i ${DESTDIR}${datadir}/xlennart/pixmaps ; \
+ done
+ for i in ${XBMS}; do \
+ ${INSTALL_DATA} ${srcdir}/$$i ${DESTDIR}${datadir}/xlennart/bitmaps ; \
+ done
+
+distclean::
+ rm -f config.cache config.h config.log config.status Makefile
+
+distclean clean::
+ rm -f ${PROG} *.o
+ rm -f *core core*
diff --git a/Network.c b/Network.c
new file mode 100644
index 0000000..71c93ef
--- /dev/null
+++ b/Network.c
@@ -0,0 +1,120 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "types.h"
+#include "util.h"
+
+#include "Cable.h"
+#include "Computer.h"
+#include "Game.h"
+#include "Network.h"
+#include "OS.h"
+#include "UI.h"
+
+#define STD_MAX_COMPUTERS 20
+
+static Computer *computers;
+static int ncomputers;
+static Cable **cables;
+static int ncables;
+static int counters[NETWORK_COUNTER_MAX + 1]; /* number in each state */
+
+static int
+on(int level) {
+ int normal = MIN(8 + level, STD_MAX_COMPUTERS);
+ return (int)(normal * Game_scale(2));
+}
+
+/* sets up network for each level */
+void
+Network_setup() {
+ int i;
+ ncomputers = on(Game_level());
+ if (computers != NULL)
+ free(computers);
+ if (cables != NULL) {
+ for (i = 0; i < ncables; i++)
+ if (cables[i] != NULL)
+ free(cables[i]);
+ free(cables);
+ }
+ computers = xalloc(ncomputers * sizeof(Computer));
+ for (i = 0; i < ncomputers; i++)
+ if (!Computer_setup(&computers[i], i)) {
+ ncomputers = i - 1;
+ break;
+ }
+ counters[NETWORK_COUNTER_OFF] = 0;
+ counters[NETWORK_COUNTER_BASE] = ncomputers;
+ counters[NETWORK_COUNTER_WIN] = 0;
+ ncables = MIN(Game_level(), ncomputers/2);
+ cables = xalloc(ncables * sizeof(Cable *));
+ for (i = 0; i < ncables; i++)
+ Cable_setup(&cables[i]);
+}
+
+/* redraws the computers at their location with the proper image */
+void
+Network_draw () {
+ int i;
+ for (i = 0; i < ncables; i++)
+ Cable_draw(cables[i]);
+ for (i = 0; i < ncomputers; i++)
+ Computer_draw(&computers[i]);
+}
+
+void
+Network_update () {
+ int i;
+ for (i = 0; i < ncables; i++)
+ Cable_update(cables[i]);
+}
+
+void
+Network_toasters () {
+ int i;
+ for (i = 0; i < ncomputers; i++) {
+ computers[i].type = COMPUTER_TOASTER;
+ computers[i].os = OS_OFF;
+ }
+ ncables = 0;
+}
+
+Computer *
+Network_get_computer(int index) {
+ return &computers[index];
+}
+
+int
+Network_num_computers() {
+ return ncomputers;
+}
+
+Cable *
+Network_get_cable(int index) {
+ return cables[index];
+}
+
+int
+Network_num_cables() {
+ return ncables;
+}
+
+void
+Network_clear_stray(Bill *bill) {
+ int i;
+ for (i = 0; i < ncomputers; i++) {
+ if (computers[i].stray == bill)
+ computers[i].stray = NULL;
+ }
+}
+
+void
+Network_inc_counter(int counter, int val) {
+ counters[counter] += val;
+}
+
+int
+Network_get_counter(int counter) {
+ return counters[counter];
+}
diff --git a/Network.h b/Network.h
new file mode 100644
index 0000000..223c981
--- /dev/null
+++ b/Network.h
@@ -0,0 +1,22 @@
+#ifndef NETWORK_H
+#define NETWORK_H
+
+/* Counters */
+#define NETWORK_COUNTER_OFF 0
+#define NETWORK_COUNTER_BASE 1
+#define NETWORK_COUNTER_WIN 2
+#define NETWORK_COUNTER_MAX 2
+
+void Network_setup(void);
+void Network_draw(void);
+void Network_update(void);
+void Network_toasters(void);
+Computer * Network_get_computer(int index);
+int Network_num_computers(void);
+Cable * Network_get_cable(int index);
+int Network_num_cables(void);
+void Network_clear_stray(Bill *bill);
+void Network_inc_counter(int counter, int val);
+int Network_get_counter(int counter);
+
+#endif
diff --git a/OS.c b/OS.c
new file mode 100644
index 0000000..6aecddf
--- /dev/null
+++ b/OS.c
@@ -0,0 +1,56 @@
+#include "types.h"
+#include "util.h"
+
+#include "OS.h"
+#include "UI.h"
+
+#define MIN_PC 6 /* OS >= MIN_PC means the OS is a PC OS */
+
+static const char *osname[] = { "initfail", "arch", "bsd", "centos", "debian",
+ "gentoo", "mandriva", "slackware", "suse",
+ "ubuntu"};
+#define NUM_OS (sizeof(osname) / sizeof(osname[0]))
+
+static Picture *os[NUM_OS]; /* array of OS pictures*/
+static MCursor *cursor[NUM_OS]; /* array of OS cursors (drag/drop) */
+
+
+void
+OS_load_pix() {
+ unsigned int i;
+ for (i = 0; i < NUM_OS; i++) {
+ UI_load_picture(osname[i], 1, &os[i]);
+ if (i != 0)
+ UI_load_cursor(osname[i], CURSOR_OWN_MASK, &cursor[i]);
+ }
+}
+
+void
+OS_draw(int index, int x, int y) {
+ UI_draw(os[index], x, y);
+}
+
+int
+OS_width() {
+ return UI_picture_width(os[0]);
+}
+
+int
+OS_height() {
+ return UI_picture_height(os[0]);
+}
+
+void
+OS_set_cursor(int index) {
+ UI_set_cursor(cursor[index]);
+}
+
+int
+OS_randpc() {
+ return (RAND(MIN_PC, NUM_OS - 1));
+}
+
+int
+OS_ispc(int index) {
+ return (index >= MIN_PC);
+}
diff --git a/OS.h b/OS.h
new file mode 100644
index 0000000..d90d1d8
--- /dev/null
+++ b/OS.h
@@ -0,0 +1,30 @@
+#ifndef OS_H
+#define OS_H
+
+#define OS_WINGDOWS 0 /* OS 0 is the init */
+#define OS_OFF -1 /* OS -1 means the computer is off */
+#define OS_PC 6 /* OS >= PC means the OS is a PC OS */
+
+void
+OS_load_pix(void);
+
+void
+OS_draw(int index, int x, int y);
+
+int
+OS_width(void);
+
+int
+OS_height(void);
+
+void
+OS_set_cursor(int index);
+
+int
+OS_randpc(void);
+
+int
+OS_ispc(int index);
+
+
+#endif
diff --git a/README b/README
new file mode 100644
index 0000000..7b00019
--- /dev/null
+++ b/README
@@ -0,0 +1,65 @@
+XLennart 1.0
+
+Welcome to XLennart...
+
+Ever get the feeling that nothing is going right? You're a sysadmin,
+and someone's trying to destroy your computers. The little people
+running around the screen are trying to infect your computers with
+SystenD [TM], a virus cleverly designed to resemble a popular
+init system. Your objective is to click the mouse on them, ending
+the potential threat. If one of the people reaches a computer, it will
+attempt to replace your operating system with the virus it carries. It
+will then attempt to run off the screen with your vital software. The
+game ends when only 1 (or 0) of your computers are being productive.
+Additionally, some computers are connected with network cables. When
+one computer on a network becomes infected, a spark will be sent down
+the cable, and will infect the computer on the other end when it reaches
+there.
+
+Clicking the button on one of the little people will cause it to cry out
+in pain and melt (id software eat your heart out!), dropping the stolen
+os if it is carrying one. If a computer is running SystenD or is
+temporarily off, the os can be dragged back to the computer (or
+another computer compatible with that os). To extinguish a spark drag
+the bucket of water from the upper left corner onto it.
+
+ The status bar at the bottom tells the following:
+ Number of Lenns on/off the screen
+ Number of Computers running their init/off/SystenD
+ Level
+ Score
+
+Options:
+ -l <n> Start at level n.
+
+ --gui <gui>
+ Use a specific front end. The possible values are
+ gtk, motif, and athena. Note that some of these
+ may not be compiled into the binary.
+
+ -size <size>
+ Play on a field of size x size, instead of the normal
+ 400x400. <size> must be larger than 400.
+
+ -v Print version number and exit.
+
+ -h Print help and exit.
+
+ When using the GTK gui, all standard GTK options are supported.
+ When using the Athena or Motif GUI, all standard X Intrinsics
+ options are supported.
+
+
+Authors:
+
+Main Programmer:
+
+ Brian Wellington <bwelling@xbill.org> for XBill 2.1
+
+ Gethyn ThomasQuail <xylem2020@gmail.com> for XLennart
+
+Programming & graphics:
+
+ Matias Duarte <matias@hyperimage.com> for XBill 2.0
+
+ Gethyn ThomasQuail <xylem2020@gmail.com> for XLennart
diff --git a/README.Ports b/README.Ports
new file mode 100644
index 0000000..eb520f3
--- /dev/null
+++ b/README.Ports
@@ -0,0 +1,24 @@
+Here's the status of the various ports:
+
+Mac:
+Josh Adams <jadams@hyperimage.com> mostly finished this, based on a beta
+of 2.0, but never released it for some reason. If I can borrow a Mac OS X
+machine for a day or two, porting it should be easy now.
+
+Java:
+There are a bunch of Java ports around. I've never found one that works
+well. I started porting 2.0 a few years ago, and never finished. It's
+possible I'll start again.
+
+XFree86 for OS/2:
+Darwin O'Connor <doconno@cc.UManitoba.CA> ported 2.0, and you can get it from
+http://www.reamined.on.ca/doconnor/xprogs.html.
+
+Linux SVGA:
+I got this mostly working on a beta of 2.0, but it had a couple problems
+(mouse support wasn't very good, no menus or windows), and is now hopelessly
+outdated. It does have an XPM and XBM reader. If anyone wants to finish
+this (write the missing parts and the new parts), let me know, and I can find
+the old code.
+
+- Brian (bwelling@xbill.org)
diff --git a/Scorelist.c b/Scorelist.c
new file mode 100644
index 0000000..9c2afc6
--- /dev/null
+++ b/Scorelist.c
@@ -0,0 +1,100 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "Scorelist.h"
+#include "UI.h"
+
+#define NAMELEN 20
+#define SCORES 10
+
+typedef struct Score {
+ char name[NAMELEN + 1];
+ int level;
+ int score;
+} Score;
+
+static Score scores[SCORES];
+
+void
+Scorelist_read() {
+ FILE *scorefile = fopen(SCOREFILE, "r");
+ int i;
+
+ if (scorefile != NULL) {
+ for (i = 0; i < SCORES; i++)
+ fscanf(scorefile, "%20s%d%d\n", scores[i].name,
+ &scores[i].level, &scores[i].score);
+ fclose(scorefile);
+ }
+ else {
+ for (i = 0; i < SCORES; i++) {
+ strcpy(scores[i].name, "Anonymous");
+ scores[i].level = 0;
+ scores[i].score = 0;
+ }
+ }
+}
+
+void
+Scorelist_write() {
+ FILE *scorefile = fopen(SCOREFILE, "w");
+ int i;
+ if (scorefile == NULL)
+ return;
+ for (i = 0; i < SCORES; i++)
+ fprintf(scorefile, "%-*s %d %d\n", NAMELEN,
+ scores[i].name, scores[i].level, scores[i].score);
+ fclose(scorefile);
+}
+
+/* Add new high score to list */
+void
+Scorelist_recalc(const char *str, int level, int score) {
+ int i;
+ char tname[NAMELEN + 1];
+ char *nl;
+
+ if (scores[SCORES - 1].score >= score)
+ return;
+ for (i = SCORES - 1; i > 0; i--) {
+ if (scores[i - 1].score < score) {
+ strcpy (scores[i].name, scores[i - 1].name);
+ scores[i].level = scores[i - 1].level;
+ scores[i].score = scores[i - 1].score;
+ }
+ else
+ break;
+ }
+
+ memset(tname, 0, sizeof(tname));
+ if (str == NULL || str[0] == 0)
+ strcpy(tname, "Anonymous");
+ strncpy(tname, str, sizeof(tname) - 1);
+ nl = strchr(tname,'\n');
+ if (nl != NULL)
+ *nl = 0;
+
+ strcpy(scores[i].name, tname);
+ scores[i].level = level;
+ scores[i].score = score;
+}
+
+void
+Scorelist_update() {
+ char str[500];
+ int i;
+ sprintf(str, "%s\n\n", "High Scores:");
+ sprintf(str, "%s%-*s %6s %7s\n", str, NAMELEN,
+ "Name", "Level", "Score");
+ for (i = 0; i < SCORES; i++) {
+ sprintf(str, "%s%-*s %6d %7d\n", str, NAMELEN,
+ scores[i].name, scores[i].level, scores[i].score);
+ }
+ UI_update_dialog(DIALOG_HIGHSCORE, str);
+}
+
+int
+Scorelist_ishighscore(int val) {
+ return (val > scores[SCORES - 1].score);
+}
diff --git a/Scorelist.h b/Scorelist.h
new file mode 100644
index 0000000..0b35106
--- /dev/null
+++ b/Scorelist.h
@@ -0,0 +1,10 @@
+#ifndef SCORELIST_H
+#define SCORELIST_H
+
+void Scorelist_read(void);
+void Scorelist_write(void);
+void Scorelist_recalc(const char *str, int level, int score);
+void Scorelist_update(void);
+int Scorelist_ishighscore(int val);
+
+#endif
diff --git a/Spark.c b/Spark.c
new file mode 100644
index 0000000..e618030
--- /dev/null
+++ b/Spark.c
@@ -0,0 +1,29 @@
+#include "types.h"
+#include "util.h"
+
+#include "Spark.h"
+#include "UI.h"
+
+static Picture *pictures[2];
+
+void
+Spark_load_pix() {
+ int i;
+ for (i = 0; i < 2; i++)
+ UI_load_picture_indexed("spark", i, 1, &pictures[i]);
+}
+
+int
+Spark_width() {
+ return UI_picture_width(pictures[0]);
+}
+
+int
+Spark_height() {
+ return UI_picture_height(pictures[0]);
+}
+
+void
+Spark_draw(int x, int y, int index) {
+ UI_draw(pictures[index], x, y);
+}
diff --git a/Spark.h b/Spark.h
new file mode 100644
index 0000000..1aa3be3
--- /dev/null
+++ b/Spark.h
@@ -0,0 +1,20 @@
+#ifndef SPARK_H
+#define SPARK_H
+
+#define SPARK_SPEED 4
+#define SPARK_DELAY(level) (MAX(20 - (level), 0))
+
+void
+Spark_load_pix(void);
+
+int
+Spark_width(void);
+
+int
+Spark_height(void);
+
+void
+Spark_draw(int x, int y, int index);
+
+
+#endif
diff --git a/UI.c b/UI.c
new file mode 100644
index 0000000..78b1616
--- /dev/null
+++ b/UI.c
@@ -0,0 +1,246 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "strings.h"
+#include "types.h"
+#include "util.h"
+
+#include "config.h"
+
+#include "Game.h"
+#include "UI.h"
+
+#if USE_ATHENA
+#include "x11-athena.h"
+#endif
+
+#if USE_MOTIF
+#include "x11-motif.h"
+#endif
+
+#if USE_GTK
+#include "gtk.h"
+#endif
+
+static int playing;
+static UI_methods *methods;
+static const char *dialog_strings[DIALOG_MAX + 1];
+static const char *menu_strings[DIALOG_MAX + 1];
+
+/*
+ * Timer control routines
+ */
+
+void
+UI_restart_timer() {
+ methods->start_timer(200);
+}
+
+void
+UI_kill_timer() {
+ methods->stop_timer();
+}
+
+void
+UI_pause_game() {
+ if (methods->timer_active())
+ playing = 1;
+ UI_kill_timer();
+}
+
+void
+UI_resume_game() {
+ if (playing && !methods->timer_active())
+ UI_restart_timer();
+ playing = 0;
+}
+
+/*
+ * Window routines
+ */
+
+typedef struct guimap {
+ const char *name;
+ void (*setmethods)(UI_methods **methodsp);
+} guimap;
+
+static guimap guis[] = {
+#ifdef USE_GTK
+ {"gtk", gtk_ui_setmethods},
+#endif
+#ifdef USE_MOTIF
+ {"motif", x11_motif_setmethods},
+#endif
+#ifdef USE_ATHENA
+ {"athena", x11_athena_setmethods},
+#endif
+ {NULL, NULL},
+};
+
+void
+UI_initialize(const char *gui, int *argc, char **argv) {
+ guimap *map;
+ if (gui == NULL) {
+ map = guis;
+ if (map->name == NULL)
+ fatal("no configured GUIs");
+ map->setmethods(&methods);
+ } else {
+ for (map = guis; map->name != NULL; map++)
+ if (strcasecmp(gui, map->name) == 0)
+ break;
+ if (map->name == NULL)
+ fatal("GUI '%s' not found", gui);
+ map->setmethods(&methods);
+ }
+ methods->initialize(argc, argv);
+}
+
+void
+UI_make_main_window(int size) {
+ menu_strings[DIALOG_NEWGAME] = newgame_menu_str;
+ menu_strings[DIALOG_PAUSEGAME] = pause_menu_str;
+ menu_strings[DIALOG_WARPLEVEL] = warp_menu_str;
+ menu_strings[DIALOG_HIGHSCORE] = highscore_menu_str;
+ menu_strings[DIALOG_QUITGAME] = quit_menu_str;
+ menu_strings[DIALOG_STORY] = story_menu_str;
+ menu_strings[DIALOG_RULES] = rules_menu_str;
+ menu_strings[DIALOG_ABOUT] = about_menu_str;
+ menu_strings[DIALOG_SCORE] = score_menu_str;
+ menu_strings[DIALOG_ENDGAME] = endgame_menu_str;
+ menu_strings[DIALOG_ENTERNAME] = entername_menu_str;
+ methods->make_main_window(size);
+}
+
+void
+UI_graphics_init() {
+ methods->graphics_init();
+}
+
+void
+UI_make_dialogs(Picture *logo, Picture *icon, Picture *about) {
+ dialog_strings[DIALOG_NEWGAME] = newgame_dialog_str;
+ dialog_strings[DIALOG_PAUSEGAME] = pause_dialog_str;
+ dialog_strings[DIALOG_WARPLEVEL] = warp_dialog_str;
+ dialog_strings[DIALOG_HIGHSCORE] = NULL;
+ dialog_strings[DIALOG_QUITGAME] = quit_dialog_str;
+ dialog_strings[DIALOG_STORY] = story_dialog_str;
+ dialog_strings[DIALOG_RULES] = rules_dialog_str;
+ dialog_strings[DIALOG_ABOUT] = NULL;
+ dialog_strings[DIALOG_SCORE] = NULL;
+ dialog_strings[DIALOG_ENDGAME] = endgame_dialog_str;
+ dialog_strings[DIALOG_ENTERNAME] = entername_dialog_str;
+ methods->create_dialogs(logo, icon, about);
+}
+
+void
+UI_popup_dialog(int dialog) {
+ methods->popup_dialog(dialog);
+}
+
+/*
+ * Graphics routines
+ */
+
+void
+UI_set_cursor(MCursor *cursor) {
+ methods->set_cursor(cursor);
+}
+
+void
+UI_set_icon(Picture *icon) {
+ methods->set_icon(icon);
+}
+
+void
+UI_clear() {
+ methods->clear_window();
+}
+
+void
+UI_refresh() {
+ methods->refresh_window();
+}
+
+void
+UI_draw(Picture *pict, int x, int y) {
+ methods->draw_image(pict, x, y);
+}
+
+void
+UI_draw_line(int x1, int y1, int x2, int y2) {
+ methods->draw_line(x1, y1, x2, y2);
+}
+
+void
+UI_draw_str(const char *str, int x, int y) {
+ methods->draw_string(str, x, y);
+}
+
+/*
+ * Other routines
+ */
+
+void
+UI_set_pausebutton (int action) {
+ methods->set_pausebutton(action);
+}
+
+void
+UI_main_loop() {
+ methods->main_loop();
+}
+
+void
+UI_load_picture_indexed(const char *name, int index, int trans, Picture **pictp)
+{
+ char *newname;
+ if (index > 99)
+ fatal("image index too large");
+ newname = xalloc(strlen(name) + 4);
+ sprintf(newname, "%s_%d", name, index);
+ UI_load_picture(newname, trans, pictp);
+ free(newname);
+}
+
+void
+UI_load_picture(const char *name, int trans, Picture **pictp) {
+ methods->load_picture(name, trans, pictp);
+}
+
+int
+UI_picture_width(Picture *pict) {
+ return methods->picture_width(pict);
+}
+
+int
+UI_picture_height(Picture *pict) {
+ return methods->picture_height(pict);
+}
+
+void
+UI_load_cursor(const char *name, int masked, MCursor **cursorp) {
+ methods->load_cursor(name, masked, cursorp);
+}
+
+int
+UI_intersect(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) {
+ return ((abs(x2 - x1 + (w2 - w1) / 2) < (w1 + w2) / 2) &&
+ (abs(y2 - y1 + (h2 - h1) / 2) < (h1 + h2) / 2));
+}
+
+void
+UI_update_dialog(int index, const char *str) {
+ methods->update_dialog(index, str);
+}
+
+const char *
+UI_dialog_string(int index) {
+ return dialog_strings[index];
+}
+
+const char *
+UI_menu_string(int index) {
+ return menu_strings[index];
+}
diff --git a/UI.h b/UI.h
new file mode 100644
index 0000000..9e9a765
--- /dev/null
+++ b/UI.h
@@ -0,0 +1,86 @@
+#ifndef X11_UI_H
+#define X11_UI_H
+
+#include "types.h"
+
+#define CURSOR_SEP_MASK 0
+#define CURSOR_OWN_MASK 1
+
+#define DIALOG_NEWGAME 0
+#define DIALOG_PAUSEGAME 1
+#define DIALOG_WARPLEVEL 2
+#define DIALOG_HIGHSCORE 3
+#define DIALOG_QUITGAME 4
+#define DIALOG_STORY 5
+#define DIALOG_RULES 6
+#define DIALOG_ABOUT 7
+#define DIALOG_SCORE 8
+#define DIALOG_ENDGAME 9
+#define DIALOG_ENTERNAME 10
+#define DIALOG_MAX 10
+
+void UI_restart_timer(void);
+void UI_kill_timer(void);
+
+void UI_pause_game(void);
+void UI_resume_game(void);
+
+void UI_initialize(const char *gui, int *argc, char **argv);
+void UI_make_main_window(int size);
+void UI_graphics_init(void);
+void UI_make_dialogs(Picture *logo, Picture *icon, Picture *about);
+
+void UI_popup_dialog(int index);
+void UI_set_cursor(MCursor *cursor);
+void UI_set_icon(Picture *icon);
+void UI_clear(void);
+void UI_refresh(void);
+void UI_draw(Picture *picture, int x, int y);
+void UI_draw_line(int x1, int y1, int x2, int y2);
+void UI_draw_str(const char *str, int x, int y);
+
+void UI_set_pausebutton(int action);
+void UI_main_loop(void);
+
+void UI_update_dialog(int index, const char *str);
+
+void UI_load_picture(const char *name, int trans, Picture **pictp);
+void UI_load_picture_indexed(const char *name, int index, int trans,
+ Picture **pictp);
+int UI_picture_width(Picture *pict);
+int UI_picture_height(Picture *pict);
+
+void UI_load_cursor(const char *name, int masked, MCursor **cursorp);
+
+int
+UI_intersect(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
+
+const char *UI_dialog_string(int index);
+const char *UI_menu_string(int index);
+
+typedef struct UI_methods {
+ void (*set_cursor)(MCursor *cursor);
+ void (*load_cursor)(const char *name, int masked, MCursor **cursorp);
+ void (*load_picture)(const char *name, int trans, Picture **pictp);
+ void (*set_icon)(Picture *pict);
+ int (*picture_width)(Picture *pict);
+ int (*picture_height)(Picture *pict);
+ void (*graphics_init)(void);
+ void (*clear_window)(void);
+ void (*refresh_window)(void);
+ void (*draw_image)(Picture *pict, int x, int y);
+ void (*draw_line)(int x1, int y1, int x2, int y2);
+ void (*draw_string)(const char *str, int x, int y);
+ void (*start_timer)(int ms);
+ void (*stop_timer)(void);
+ int (*timer_active)(void);
+ void (*popup_dialog)(int index);
+ void (*main_loop)(void);
+ void (*initialize)(int *argc, char **argv);
+ void (*make_main_window)(int size);
+ void (*create_dialogs)(Picture *logo, Picture *icon, Picture *about);
+ void (*set_pausebutton)(int active);
+ void (*update_dialog)(int index, const char *str);
+} UI_methods;
+
+#endif
diff --git a/acconfig.h b/acconfig.h
new file mode 100644
index 0000000..a401e61
--- /dev/null
+++ b/acconfig.h
@@ -0,0 +1,8 @@
+/* Use athena widgets */
+#undef USE_ATHENA
+
+/* Use motif widgets */
+#undef USE_MOTIF
+
+/* Use gtk widgets */
+#undef USE_GTK
diff --git a/bitmaps/arch.xbm b/bitmaps/arch.xbm
new file mode 100644
index 0000000..083b26c
--- /dev/null
+++ b/bitmaps/arch.xbm
@@ -0,0 +1,11 @@
+#define arch_width 28
+#define arch_height 24
+static unsigned char arch_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
+ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00,
+ 0x00, 0xf8, 0x01, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0xfc, 0x03, 0x00,
+ 0x00, 0xfe, 0x07, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x9f, 0x0f, 0x00,
+ 0x80, 0x0f, 0x1f, 0x00, 0x80, 0x0f, 0x1f, 0x00, 0xc0, 0x0f, 0x1f, 0x00,
+ 0xc0, 0x0f, 0x3f, 0x00, 0xe0, 0x03, 0x7c, 0x00, 0x60, 0x00, 0x70, 0x00,
+ 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/bitmaps/bsd.xbm b/bitmaps/bsd.xbm
new file mode 100644
index 0000000..14654cb
--- /dev/null
+++ b/bitmaps/bsd.xbm
@@ -0,0 +1,10 @@
+#define bsd_width 28
+#define bsd_height 24
+static char bsd_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x10,0x00,0x00,0xf0,0x31,
+ 0x00,0x00,0xf8,0x37,0x00,0x00,0xf8,0x3f,0x00,0x00,0xf8,0x1f,0x00,0x40,0xf8,
+ 0x07,0x00,0x90,0xfc,0x07,0x00,0xa0,0xfc,0x07,0x00,0xc8,0xf9,0x03,0x00,0xb0,
+ 0xf1,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xfc,0x01,0x00,
+ 0x00,0xf0,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf8,0x03,
+ 0x00,0x00,0xf0,0x1f,0x00,0x00,0xf8,0xf1,0x00,0x00,0xff,0x01,0x01,0x00,0xf7,
+ 0xc1,0x00,0x00,0x60,0x00,0x00};
diff --git a/bitmaps/bucket.xbm b/bitmaps/bucket.xbm
new file mode 100644
index 0000000..629ecc6
--- /dev/null
+++ b/bitmaps/bucket.xbm
@@ -0,0 +1,8 @@
+#define bucket_width 24
+#define bucket_height 24
+static char bucket_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0xe0,0xff,0x07,0x78,0xff,0x1f,
+ 0x78,0xff,0x1f,0x7c,0xc0,0x3f,0x1c,0x80,0x3f,0x1c,0x80,0x3f,0xfc,0xc3,0x3f,
+ 0xf8,0xff,0x1b,0xf8,0xff,0x1b,0xf8,0xff,0x19,0xf8,0xff,0x19,0xf8,0xff,0x1d,
+ 0xf0,0xff,0x1d,0xf0,0xff,0x1d,0xf0,0xff,0x1f,0xf0,0xff,0x0f,0xe0,0xff,0x05,
+ 0xc0,0xff,0x03,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/centos.xbm b/bitmaps/centos.xbm
new file mode 100644
index 0000000..ec59b8c
--- /dev/null
+++ b/bitmaps/centos.xbm
@@ -0,0 +1,11 @@
+#define centos_width 28
+#define centos_height 24
+static unsigned char centos_bits[] = {
+ 0xff, 0xff, 0xff, 0x0f, 0xff, 0x9f, 0xff, 0x0f, 0xf7, 0x86, 0xbd, 0x0f,
+ 0xbf, 0x07, 0xff, 0x0e, 0x1f, 0xc0, 0xff, 0x0f, 0x1f, 0xc0, 0xff, 0x0f,
+ 0x1b, 0xc0, 0xff, 0x0f, 0x1f, 0xc0, 0xff, 0x0d, 0x3f, 0xc0, 0xff, 0x0f,
+ 0x1f, 0xc0, 0xff, 0x0f, 0x3f, 0xe0, 0xff, 0x0f, 0xfe, 0xff, 0xff, 0x0f,
+ 0xff, 0xff, 0xff, 0x0f, 0xff, 0x1f, 0xe0, 0x0f, 0xff, 0x9f, 0xe0, 0x0f,
+ 0xfe, 0x1f, 0xc1, 0x0e, 0xff, 0x1f, 0xe0, 0x0f, 0xfd, 0x1f, 0xc0, 0x0f,
+ 0xff, 0x1f, 0xe0, 0x0b, 0xff, 0x1f, 0xc2, 0x0f, 0xff, 0x07, 0xff, 0x0f,
+ 0xfd, 0x8f, 0xff, 0x0f, 0xff, 0xdf, 0x7f, 0x0f, 0xff, 0xff, 0xfb, 0x0f };
diff --git a/bitmaps/debian.xbm b/bitmaps/debian.xbm
new file mode 100644
index 0000000..22c4f59
--- /dev/null
+++ b/bitmaps/debian.xbm
@@ -0,0 +1,11 @@
+#define debian_width 28
+#define debian_height 24
+static unsigned char debian_bits[] = {
+ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0x1f, 0x00,
+ 0x80, 0x07, 0x3c, 0x00, 0xc0, 0x03, 0x78, 0x00, 0xe0, 0x00, 0x70, 0x00,
+ 0xe0, 0x40, 0x70, 0x00, 0x60, 0xa0, 0x60, 0x00, 0x30, 0x10, 0x60, 0x00,
+ 0x30, 0x08, 0x60, 0x00, 0x30, 0x08, 0x60, 0x00, 0x30, 0x18, 0x30, 0x00,
+ 0x30, 0x10, 0x10, 0x00, 0x30, 0x30, 0x18, 0x00, 0x20, 0xe0, 0x0f, 0x00,
+ 0x60, 0x00, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
+ 0xc0, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 };
diff --git a/bitmaps/gentoo.xbm b/bitmaps/gentoo.xbm
new file mode 100644
index 0000000..a7b096f
--- /dev/null
+++ b/bitmaps/gentoo.xbm
@@ -0,0 +1,11 @@
+#define gentoo_width 28
+#define gentoo_height 24
+static unsigned char gentoo_bits[] = {
+ 0x00, 0x2a, 0x00, 0x00, 0xb5, 0xc0, 0xb7, 0x05, 0x4a, 0x00, 0x4b, 0x02,
+ 0x34, 0x00, 0x5e, 0x05, 0x1a, 0x00, 0x5c, 0x05, 0x12, 0x80, 0x78, 0x05,
+ 0x0a, 0xf0, 0x29, 0x09, 0x0a, 0xf0, 0x79, 0x02, 0x1c, 0xe0, 0x69, 0x0a,
+ 0x31, 0x00, 0x70, 0x02, 0xf4, 0x00, 0x6c, 0x08, 0x81, 0x01, 0x30, 0x02,
+ 0x2a, 0x00, 0x0c, 0x05, 0x0a, 0x00, 0x88, 0x05, 0x12, 0x00, 0x86, 0x04,
+ 0x05, 0x00, 0xe0, 0x02, 0x02, 0x00, 0x30, 0x05, 0x02, 0x00, 0xac, 0x04,
+ 0x02, 0x00, 0xae, 0x02, 0x02, 0x80, 0x57, 0x05, 0x0c, 0xe0, 0x55, 0x05,
+ 0x11, 0x7c, 0x55, 0x05, 0xf6, 0xff, 0xaa, 0x02, 0xf4, 0xbf, 0xaa, 0x04 };
diff --git a/bitmaps/hand_down.xbm b/bitmaps/hand_down.xbm
new file mode 100644
index 0000000..5dc984d
--- /dev/null
+++ b/bitmaps/hand_down.xbm
@@ -0,0 +1,6 @@
+#define hand_down_width 16
+#define hand_down_height 16
+static char hand_down_bits[] = {
+ 0x00,0x00,0xc0,0x01,0x22,0x23,0x24,0x14,0x20,0x04,0x20,0x08,0x30,0x08,0x2b,
+ 0x68,0x28,0x08,0x28,0x08,0x08,0x08,0x08,0x08,0x10,0x04,0x24,0x14,0x22,0x24,
+ 0x00,0x00};
diff --git a/bitmaps/hand_down_mask.xbm b/bitmaps/hand_down_mask.xbm
new file mode 100644
index 0000000..6d6ff1d
--- /dev/null
+++ b/bitmaps/hand_down_mask.xbm
@@ -0,0 +1,6 @@
+#define hand_down_mask_width 16
+#define hand_down_mask_height 16
+static char hand_down_mask_bits[] = {
+ 0x00, 0x00, 0xc0, 0x01, 0xe2, 0x23, 0xe4, 0x17, 0xe0, 0x07, 0xe0, 0x0f,
+ 0xf0, 0x0f, 0xfb, 0x6f, 0xf8, 0x0f, 0xf8, 0x0f, 0xf8, 0x0f, 0xf8, 0x0f,
+ 0xf0, 0x07, 0xe4, 0x17, 0xe2, 0x27, 0x00, 0x00};
diff --git a/bitmaps/hand_up.xbm b/bitmaps/hand_up.xbm
new file mode 100644
index 0000000..76bf319
--- /dev/null
+++ b/bitmaps/hand_up.xbm
@@ -0,0 +1,6 @@
+#define hand_up_width 16
+#define hand_up_height 16
+static char hand_up_bits[] = {
+ 0x80,0x03,0xe0,0x06,0xa0,0x1a,0xa0,0x2a,0xa0,0x2a,0xb0,0x2a,0xa8,0x2a,0x28,
+ 0x28,0x28,0x20,0x28,0x20,0x08,0x20,0x08,0x20,0x10,0x20,0x20,0x10,0x40,0x10,
+ 0x40,0x10};
diff --git a/bitmaps/hand_up_mask.xbm b/bitmaps/hand_up_mask.xbm
new file mode 100644
index 0000000..4029017
--- /dev/null
+++ b/bitmaps/hand_up_mask.xbm
@@ -0,0 +1,6 @@
+#define hand_up_mask_width 16
+#define hand_up_mask_height 16
+static char hand_up_mask_bits[] = {
+ 0x80, 0x03, 0xe0, 0x07, 0xe0, 0x1f, 0xe0, 0x3f, 0xe0, 0x3f, 0xf0, 0x3f,
+ 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x3f,
+ 0xf0, 0x3f, 0xe0, 0x1f, 0xc0, 0x1f, 0xc0, 0x1f};
diff --git a/bitmaps/initfail.xbm b/bitmaps/initfail.xbm
new file mode 100644
index 0000000..3d6e600
--- /dev/null
+++ b/bitmaps/initfail.xbm
@@ -0,0 +1,11 @@
+#define initfail_width 28
+#define initfail_height 24
+static unsigned char initfail_bits[] = {
+ 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x0f, 0xaf, 0xdd, 0xff, 0x0f,
+ 0xff, 0xff, 0xff, 0x0f, 0xef, 0x00, 0xc8, 0x0f, 0xff, 0x94, 0xa4, 0x0f,
+ 0xd7, 0x00, 0x80, 0x0f, 0xff, 0x90, 0xa0, 0x0f, 0xff, 0xff, 0xff, 0x0f,
+ 0xf7, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x0f, 0xfb, 0xff, 0xff, 0x0f,
+ 0xff, 0xff, 0xff, 0x0f, 0xf5, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x0f,
+ 0xff, 0xff, 0xff, 0x0f, 0xff, 0x24, 0xc9, 0x0f, 0xff, 0x04, 0xa0, 0x0f,
+ 0xff, 0x04, 0x84, 0x0f, 0xb7, 0x90, 0xa0, 0x0f, 0xff, 0xff, 0xff, 0x0f,
+ 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x0f };
diff --git a/bitmaps/mandriva.xbm b/bitmaps/mandriva.xbm
new file mode 100644
index 0000000..d9547eb
--- /dev/null
+++ b/bitmaps/mandriva.xbm
@@ -0,0 +1,11 @@
+#define mandriva_width 28
+#define mandriva_height 24
+static unsigned char mandriva_bits[] = {
+ 0xaa, 0xaa, 0xaa, 0x0a, 0x55, 0xa5, 0xa4, 0x04, 0x92, 0x14, 0x4c, 0x05,
+ 0x24, 0x25, 0x90, 0x04, 0x4d, 0x14, 0x64, 0x05, 0x52, 0x05, 0x94, 0x04,
+ 0x0d, 0x08, 0x28, 0x05, 0x1c, 0x00, 0x90, 0x04, 0x07, 0x00, 0x50, 0x04,
+ 0x16, 0x00, 0x00, 0x04, 0x57, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x08,
+ 0xa7, 0x00, 0x00, 0x00, 0x97, 0x00, 0xa0, 0x06, 0x57, 0x00, 0xa8, 0x0a,
+ 0x27, 0x00, 0xa8, 0x04, 0x4f, 0x00, 0x90, 0x04, 0x1f, 0x30, 0x20, 0x05,
+ 0x3e, 0x1c, 0x58, 0x0a, 0xff, 0x6f, 0x80, 0x04, 0xfe, 0xab, 0x78, 0x09,
+ 0xfa, 0x4a, 0x11, 0x05, 0x4a, 0x55, 0xa5, 0x04, 0x55, 0x49, 0x4a, 0x05 };
diff --git a/bitmaps/redhat.xbm b/bitmaps/redhat.xbm
new file mode 100644
index 0000000..05f0c30
--- /dev/null
+++ b/bitmaps/redhat.xbm
@@ -0,0 +1,10 @@
+#define redhat_width 28
+#define redhat_height 24
+static char redhat_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x1c,0x00,0x80,0xff,0x1f,
+ 0x00,0x80,0xff,0x1f,0x00,0x80,0xff,0x1f,0x00,0x80,0xff,0x1f,0x00,0x80,0xff,
+ 0x1f,0x00,0x80,0xff,0x1f,0x00,0x80,0xff,0x1f,0x00,0x80,0xff,0x1f,0x00,0x80,
+ 0xff,0x1f,0x00,0x80,0xff,0x1f,0x00,0x80,0xff,0x1f,0x00,0x80,0xff,0x1f,0x00,
+ 0x80,0xff,0x1f,0x00,0x80,0xff,0x1f,0x00,0x86,0xff,0x1f,0x06,0x8e,0xff,0x1f,
+ 0x07,0xfc,0xff,0xff,0x03,0xf8,0xff,0xff,0x01,0xe0,0xff,0x7f,0x00,0x00,0xff,
+ 0x0f,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/slackware.xbm b/bitmaps/slackware.xbm
new file mode 100644
index 0000000..129a514
--- /dev/null
+++ b/bitmaps/slackware.xbm
@@ -0,0 +1,11 @@
+#define slackware_width 28
+#define slackware_height 24
+static unsigned char slackware_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+ 0x00, 0x54, 0x01, 0x00, 0x80, 0x92, 0x02, 0x00, 0x80, 0x74, 0x17, 0x00,
+ 0x20, 0x85, 0x0a, 0x00, 0x50, 0x2e, 0x2a, 0x00, 0xa0, 0x52, 0x29, 0x00,
+ 0x48, 0x2e, 0x49, 0x00, 0xa0, 0xfa, 0x93, 0x00, 0x88, 0xf4, 0x2f, 0x00,
+ 0x50, 0x09, 0x4f, 0x00, 0x10, 0x53, 0xae, 0x00, 0xa0, 0x4f, 0x4f, 0x00,
+ 0x48, 0xbf, 0x5f, 0x00, 0x20, 0xff, 0x87, 0x00, 0xa0, 0x7f, 0x29, 0x00,
+ 0x40, 0x80, 0x44, 0x00, 0x80, 0x2a, 0x09, 0x00, 0x00, 0x42, 0x12, 0x00,
+ 0x80, 0x94, 0x04, 0x00, 0x00, 0x54, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/bitmaps/suse.xbm b/bitmaps/suse.xbm
new file mode 100644
index 0000000..e6052e2
--- /dev/null
+++ b/bitmaps/suse.xbm
@@ -0,0 +1,11 @@
+#define suse_width 28
+#define suse_height 24
+static unsigned char suse_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00,
+ 0x00, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x05,
+ 0xf8, 0xff, 0xff, 0x07, 0xf8, 0xff, 0xbf, 0x06, 0xfc, 0xff, 0xff, 0x06,
+ 0x0e, 0xff, 0xff, 0x03, 0xf6, 0x9e, 0x07, 0x00, 0xb6, 0x0d, 0x0e, 0x00,
+ 0x76, 0x0d, 0x0c, 0x00, 0x8c, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00,
+ 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/bitmaps/ubuntu.xbm b/bitmaps/ubuntu.xbm
new file mode 100644
index 0000000..e248c7e
--- /dev/null
+++ b/bitmaps/ubuntu.xbm
@@ -0,0 +1,11 @@
+#define ubuntu_width 28
+#define ubuntu_height 24
+static unsigned char ubuntu_bits[] = {
+ 0x00, 0xf8, 0x01, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x80, 0xff, 0x3f, 0x00,
+ 0xc0, 0xff, 0x7b, 0x00, 0xe0, 0xff, 0xf1, 0x00, 0xf0, 0x1f, 0xf1, 0x00,
+ 0xf8, 0x07, 0xfa, 0x01, 0xf8, 0xd9, 0xf8, 0x01, 0xf8, 0xf8, 0xf1, 0x03,
+ 0xfc, 0xfc, 0xe3, 0x03, 0x7c, 0xfc, 0xe7, 0x03, 0x8c, 0xfe, 0xf7, 0x03,
+ 0x1c, 0xfe, 0xef, 0x03, 0xdc, 0xfc, 0xe7, 0x03, 0xfc, 0xfc, 0xf3, 0x03,
+ 0xf8, 0xf8, 0xf3, 0x03, 0xf8, 0x79, 0xf8, 0x01, 0xf8, 0x07, 0xfa, 0x01,
+ 0xf0, 0x8f, 0xf0, 0x01, 0xe0, 0xff, 0x79, 0x00, 0xe0, 0xff, 0x7b, 0x00,
+ 0xc0, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xfc, 0x03, 0x00 };
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..53c8d14
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,22 @@
+/* config.h.in. Generated automatically from configure.in by autoheader. */
+
+/* Define to empty if the keyword does not work. */
+#undef const
+
+/* Define if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Use athena widgets */
+#undef USE_ATHENA
+
+/* Use motif widgets */
+#undef USE_MOTIF
+
+/* Use gtk widgets */
+#undef USE_GTK
+
+/* Define if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
diff --git a/config.in b/config.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/config.in
diff --git a/configure b/configure
new file mode 100755
index 0000000..021263f
--- /dev/null
+++ b/configure
@@ -0,0 +1,2922 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+ --with-x use the X Window System"
+ac_help="$ac_help
+ --enable-motif build with the Motif widget set"
+ac_help="$ac_help
+ --enable-athena build with the Athena widget set"
+ac_help="$ac_help
+ --enable-gtk build with the GTK widget set"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=Bucket.h
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+
+for ac_prog in 'bison -y' byacc
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:541: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$YACC"; then
+ ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_YACC="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+YACC="$ac_cv_prog_YACC"
+if test -n "$YACC"; then
+ echo "$ac_t""$YACC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:574: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:604: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:655: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:687: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 698 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:729: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:734: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:743: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:762: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:794: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # This must be in double quotes, not single quotes, because CPP may get
+ # substituted into the Makefile and "${CC-cc}" will confuse make.
+ CPP="${CC-cc} -E"
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+#line 809 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:815: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+#line 826 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -nologo -E"
+ cat > conftest.$ac_ext <<EOF
+#line 843 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+ ac_cv_prog_CPP="$CPP"
+fi
+ CPP="$ac_cv_prog_CPP"
+else
+ ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+# Extract the first word of "flex", so it can be a program name with args.
+set dummy flex; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:876: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$LEX"; then
+ ac_cv_prog_LEX="$LEX" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_LEX="flex"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_LEX" && ac_cv_prog_LEX="lex"
+fi
+fi
+LEX="$ac_cv_prog_LEX"
+if test -n "$LEX"; then
+ echo "$ac_t""$LEX" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$LEXLIB"
+then
+ case "$LEX" in
+ flex*) ac_lib=fl ;;
+ *) ac_lib=l ;;
+ esac
+ echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
+echo "configure:910: checking for yywrap in -l$ac_lib" >&5
+ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-l$ac_lib $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 918 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char yywrap();
+
+int main() {
+yywrap()
+; return 0; }
+EOF
+if { (eval echo configure:929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LEXLIB="-l$ac_lib"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:982: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:1035: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ rm -f conftestdata
+if ln -s X conftestdata 2>/dev/null
+then
+ rm -f conftestdata
+ ac_cv_prog_LN_S="ln -s"
+else
+ ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:1056: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+# Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1085: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_RANLIB="ranlib"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+ echo "$ac_t""$RANLIB" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1117: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CXX="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CXX="$ac_cv_prog_CXX"
+if test -n "$CXX"; then
+ echo "$ac_t""$CXX" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$CXX" && break
+done
+test -n "$CXX" || CXX="gcc"
+
+
+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:1149: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 1160 "configure"
+#include "confdefs.h"
+
+int main(){return(0);}
+EOF
+if { (eval echo configure:1165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cxx_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cxx_cross=no
+ else
+ ac_cv_prog_cxx_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cxx_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
+if test $ac_cv_prog_cxx_works = no; then
+ { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:1191: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
+cross_compiling=$ac_cv_prog_cxx_cross
+
+echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
+echo "configure:1196: checking whether we are using GNU C++" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.C <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1205: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gxx=yes
+else
+ ac_cv_prog_gxx=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gxx" 1>&6
+
+if test $ac_cv_prog_gxx = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+
+ac_test_CXXFLAGS="${CXXFLAGS+set}"
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS=
+echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
+echo "configure:1224: checking whether ${CXX-g++} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.cc
+if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
+ ac_cv_prog_cxx_g=yes
+else
+ ac_cv_prog_cxx_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS="$ac_save_CXXFLAGS"
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+
+
+# If we find X, set shell vars x_includes and x_libraries to the
+# paths, otherwise set no_x=yes.
+# Uses ac_ vars as temps to allow command line to override cache and checks.
+# --without-x overrides everything else, but does not touch the cache.
+echo $ac_n "checking for X""... $ac_c" 1>&6
+echo "configure:1261: checking for X" >&5
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+ withval="$with_x"
+ :
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=NO ac_x_libraries=NO
+rm -fr conftestdir
+if mkdir conftestdir; then
+ cd conftestdir
+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+ cat > Imakefile <<'EOF'
+acfindx:
+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+EOF
+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl; do
+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ test -f $ac_im_libdir/libX11.$ac_extension; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case "$ac_im_incroot" in
+ /usr/include) ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;;
+ esac
+ case "$ac_im_usrlibdir" in
+ /usr/lib | /lib) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;;
+ esac
+ fi
+ cd ..
+ rm -fr conftestdir
+fi
+
+if test "$ac_x_includes" = NO; then
+ # Guess where to find include files, by looking for this one X11 .h file.
+ test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+ # First, try using that file with no special directory specified.
+cat > conftest.$ac_ext <<EOF
+#line 1323 "configure"
+#include "confdefs.h"
+#include <$x_direct_test_include>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1328: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ # Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ for ac_dir in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/include \
+ /usr/local/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ ; \
+ do
+ if test -r "$ac_dir/$x_direct_test_include"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+ done
+fi
+rm -f conftest*
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+ # Check for the libraries.
+
+ test -z "$x_direct_test_library" && x_direct_test_library=Xt
+ test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1397 "configure"
+#include "confdefs.h"
+
+int main() {
+${x_direct_test_function}()
+; return 0; }
+EOF
+if { (eval echo configure:1404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f conftest*
+fi # $ac_x_libraries = NO
+
+if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ echo "$ac_t""$have_x" 1>&6
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
+fi
+
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+ cat >> confdefs.h <<\EOF
+#define X_DISPLAY_MISSING 1
+EOF
+
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ case "`(uname -sr) 2>/dev/null`" in
+ "SunOS 5"*)
+ echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
+echo "configure:1510: checking whether -R must be followed by a space" >&5
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
+ cat > conftest.$ac_ext <<EOF
+#line 1513 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_R_nospace=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_R_nospace=no
+fi
+rm -f conftest*
+ if test $ac_R_nospace = yes; then
+ echo "$ac_t""no" 1>&6
+ X_LIBS="$X_LIBS -R$x_libraries"
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat > conftest.$ac_ext <<EOF
+#line 1536 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_R_space=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_R_space=no
+fi
+rm -f conftest*
+ if test $ac_R_space = yes; then
+ echo "$ac_t""yes" 1>&6
+ X_LIBS="$X_LIBS -R $x_libraries"
+ else
+ echo "$ac_t""neither works" 1>&6
+ fi
+ fi
+ LIBS="$ac_xsave_LIBS"
+ esac
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And karl@cs.umb.edu says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
+echo "configure:1575: checking for dnet_ntoa in -ldnet" >&5
+ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldnet $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1583 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa();
+
+int main() {
+dnet_ntoa()
+; return 0; }
+EOF
+if { (eval echo configure:1594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
+echo "configure:1616: checking for dnet_ntoa in -ldnet_stub" >&5
+ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldnet_stub $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1624 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa();
+
+int main() {
+dnet_ntoa()
+; return 0; }
+EOF
+if { (eval echo configure:1635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to dickey@clark.net.
+ echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
+echo "configure:1664: checking for gethostbyname" >&5
+if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1669 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostbyname(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+gethostbyname();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_gethostbyname=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_gethostbyname=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_gethostbyname = no; then
+ echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
+echo "configure:1713: checking for gethostbyname in -lnsl" >&5
+ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lnsl $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1721 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname();
+
+int main() {
+gethostbyname()
+; return 0; }
+EOF
+if { (eval echo configure:1732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says simon@lia.di.epfl.ch: it contains
+ # gethostby* variants that don't use the nameserver (or something).
+ # -lsocket must be given before -lnsl if both are needed.
+ # We assume that if connect needs -lnsl, so does gethostbyname.
+ echo $ac_n "checking for connect""... $ac_c" 1>&6
+echo "configure:1762: checking for connect" >&5
+if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1767 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_connect) || defined (__stub___connect)
+choke me
+#else
+connect();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_connect=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_connect=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_connect = no; then
+ echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
+echo "configure:1811: checking for connect in -lsocket" >&5
+ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1819 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect();
+
+int main() {
+connect()
+; return 0; }
+EOF
+if { (eval echo configure:1830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
+ echo $ac_n "checking for remove""... $ac_c" 1>&6
+echo "configure:1854: checking for remove" >&5
+if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1859 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char remove(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_remove) || defined (__stub___remove)
+choke me
+#else
+remove();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_remove=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_remove=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_remove = no; then
+ echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
+echo "configure:1903: checking for remove in -lposix" >&5
+ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lposix $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1911 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove();
+
+int main() {
+remove()
+; return 0; }
+EOF
+if { (eval echo configure:1922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ echo $ac_n "checking for shmat""... $ac_c" 1>&6
+echo "configure:1946: checking for shmat" >&5
+if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1951 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shmat(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shmat) || defined (__stub___shmat)
+choke me
+#else
+shmat();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_shmat=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_shmat=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_shmat = no; then
+ echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
+echo "configure:1995: checking for shmat in -lipc" >&5
+ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lipc $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2003 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat();
+
+int main() {
+shmat()
+; return 0; }
+EOF
+if { (eval echo configure:2014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS="$LDFLAGS"
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
+ echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
+echo "configure:2047: checking for IceConnectionNumber in -lICE" >&5
+ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2055 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char IceConnectionNumber();
+
+int main() {
+IceConnectionNumber()
+; return 0; }
+EOF
+if { (eval echo configure:2066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ LDFLAGS="$ac_save_LDFLAGS"
+
+fi
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:2091: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2096 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2104: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ ac_cv_header_stdc=yes
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 2121 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 2139 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+ :
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2160 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:2171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+ cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+for ac_hdr in unistd.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2198: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2203 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2208: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:2236: checking for working const" >&5
+if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2241 "configure"
+#include "confdefs.h"
+
+int main() {
+
+/* Ultrix mips cc rejects this. */
+typedef int charset[2]; const charset x;
+/* SunOS 4.1.1 cc rejects this. */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this. */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in an arm
+ of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+}
+
+; return 0; }
+EOF
+if { (eval echo configure:2290: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_c_const=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_c_const=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_const" 1>&6
+if test $ac_cv_c_const = no; then
+ cat >> confdefs.h <<\EOF
+#define const
+EOF
+
+fi
+
+
+# Check whether --enable-motif or --disable-motif was given.
+if test "${enable_motif+set}" = set; then
+ enableval="$enable_motif"
+ :
+fi
+
+
+if test "$enable_motif" != "no"; then
+ saved_cflags="$CFLAGS"
+ saved_libs="$LIBS"
+ CFLAGS="$CFLAGS $X_CFLAGS"
+ LIBS="$LIBS $X_LIBS $X_PRE_LIBS"
+ echo $ac_n "checking for XmGetPixmap in -lXm""... $ac_c" 1>&6
+echo "configure:2324: checking for XmGetPixmap in -lXm" >&5
+ac_lib_var=`echo Xm'_'XmGetPixmap | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lXm -lXt -lX11 $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2332 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XmGetPixmap();
+
+int main() {
+XmGetPixmap()
+; return 0; }
+EOF
+if { (eval echo configure:2343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ motif=yes
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+ if test "X$motif" = X"yes"; then
+ cat >> confdefs.h <<\EOF
+#define USE_MOTIF 1
+EOF
+
+ WIDGET_LIBS="$WIDGET_LIBS -lXm"
+ if test "X$libxp" = X"yes"; then
+ WIDGET_LIBS="$WIDGET_LIBS -lXp -lXext"
+ fi
+ WIDGET_OBJS="$WIDGET_OBJS x11-motif.o"
+ fi
+
+ CFLAGS=$saved_cflags
+ LIBS=$saved_libs
+fi
+
+# Check whether --enable-athena or --disable-athena was given.
+if test "${enable_athena+set}" = set; then
+ enableval="$enable_athena"
+ :
+fi
+
+
+if test "$enable_athena" != "no"; then
+ saved_cflags="$CFLAGS"
+ saved_libs="$LIBS"
+ CFLAGS="$CFLAGS $X_CFLAGS"
+ LIBS="$LIBS $X_LIBS $X_PRE_LIBS"
+ echo $ac_n "checking for XawInitializeWidgetSet in -lXaw3d""... $ac_c" 1>&6
+echo "configure:2393: checking for XawInitializeWidgetSet in -lXaw3d" >&5
+ac_lib_var=`echo Xaw3d'_'XawInitializeWidgetSet | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lXaw3d -lXmu -lXt -lX11 $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2401 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XawInitializeWidgetSet();
+
+int main() {
+XawInitializeWidgetSet()
+; return 0; }
+EOF
+if { (eval echo configure:2412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ athena=yes athena3d=yes
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+ if test "X$athena" != X"yes"; then
+ echo $ac_n "checking for XawInitializeWidgetSet in -lXaw""... $ac_c" 1>&6
+echo "configure:2435: checking for XawInitializeWidgetSet in -lXaw" >&5
+ac_lib_var=`echo Xaw'_'XawInitializeWidgetSet | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lXaw -lXmu -lXt -lXpm -lX11 $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2443 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XawInitializeWidgetSet();
+
+int main() {
+XawInitializeWidgetSet()
+; return 0; }
+EOF
+if { (eval echo configure:2454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ athena=yes
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ if test "X$athena" = X"yes"; then
+ cat >> confdefs.h <<\EOF
+#define USE_ATHENA 1
+EOF
+
+ if test "X$athena3d" = X"yes"; then
+ xawlib=-lXaw3d
+ else
+ xawlib=-lXaw
+ fi
+ WIDGET_LIBS="$WIDGET_LIBS $xawlib -lXmu"
+ WIDGET_OBJS="$WIDGET_OBJS x11-athena.o"
+ fi
+
+ CFLAGS=$saved_cflags
+ LIBS=$saved_libs
+fi
+
+if test "X$motif" = X"yes" -o "X$athena" = X"yes"; then
+ WIDGET_LIBS="$WIDGET_LIBS -lXt -lX11"
+ WIDGET_OBJS="$WIDGET_OBJS x11.o"
+
+
+fi
+
+# Check whether --enable-gtk or --disable-gtk was given.
+if test "${enable_gtk+set}" = set; then
+ enableval="$enable_gtk"
+ :
+fi
+
+
+if test "$enable_gtk" != "no"; then
+ # Extract the first word of "gtk-config", so it can be a program name with args.
+set dummy gtk-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2512: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_GTKCONFIG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$GTKCONFIG"; then
+ ac_cv_prog_GTKCONFIG="$GTKCONFIG" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_GTKCONFIG="yes"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_GTKCONFIG" && ac_cv_prog_GTKCONFIG="no"
+fi
+fi
+GTKCONFIG="$ac_cv_prog_GTKCONFIG"
+if test -n "$GTKCONFIG"; then
+ echo "$ac_t""$GTKCONFIG" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+ if test "X$GTKCONFIG" = X"yes"; then
+ cat >> confdefs.h <<\EOF
+#define USE_GTK 1
+EOF
+
+ GTK_CFLAGS="`gtk-config --cflags`"
+ WIDGET_LIBS="$WIDGET_LIBS `gtk-config --libs`"
+ WIDGET_OBJS="$WIDGET_OBJS gtk.o"
+ fi
+fi
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@YACC@%$YACC%g
+s%@CC@%$CC%g
+s%@CPP@%$CPP%g
+s%@LEX@%$LEX%g
+s%@LEXLIB@%$LEXLIB%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@LN_S@%$LN_S%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@RANLIB@%$RANLIB%g
+s%@CXX@%$CXX%g
+s%@X_CFLAGS@%$X_CFLAGS%g
+s%@X_PRE_LIBS@%$X_PRE_LIBS%g
+s%@X_LIBS@%$X_LIBS%g
+s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g
+s%@WIDGET_LIBS@%$WIDGET_LIBS%g
+s%@WIDGET_OBJS@%$WIDGET_OBJS%g
+s%@GTKCONFIG@%$GTKCONFIG%g
+s%@GTK_CFLAGS@%$GTK_CFLAGS%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..e4dd9b4
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,102 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(Bucket.h)
+
+AC_CONFIG_HEADER(config.h)
+
+dnl Checks for programs.
+AC_PROG_YACC
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_LEX
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+AC_PROG_CXX
+
+dnl Checks for header files.
+AC_PATH_XTRA
+AC_HEADER_STDC
+AC_CHECK_HEADERS(unistd.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+
+AC_ARG_ENABLE(motif,
+ [ --enable-motif build with the Motif widget set])
+
+if test "$enable_motif" != "no"; then
+ saved_cflags="$CFLAGS"
+ saved_libs="$LIBS"
+ CFLAGS="$CFLAGS $X_CFLAGS"
+ LIBS="$LIBS $X_LIBS $X_PRE_LIBS"
+ AC_CHECK_LIB(Xm, XmGetPixmap, motif=yes, , -lXt -lX11)
+
+ if test "X$motif" = X"yes"; then
+ AC_DEFINE(USE_MOTIF)
+ WIDGET_LIBS="$WIDGET_LIBS -lXm"
+ if test "X$libxp" = X"yes"; then
+ WIDGET_LIBS="$WIDGET_LIBS -lXp -lXext"
+ fi
+ WIDGET_OBJS="$WIDGET_OBJS x11-motif.o"
+ fi
+
+ CFLAGS=$saved_cflags
+ LIBS=$saved_libs
+fi
+
+AC_ARG_ENABLE(athena,
+ [ --enable-athena build with the Athena widget set])
+
+if test "$enable_athena" != "no"; then
+ saved_cflags="$CFLAGS"
+ saved_libs="$LIBS"
+ CFLAGS="$CFLAGS $X_CFLAGS"
+ LIBS="$LIBS $X_LIBS $X_PRE_LIBS"
+ AC_CHECK_LIB(Xaw3d, XawInitializeWidgetSet,
+ [athena=yes athena3d=yes], ,
+ -lXmu -lXt -lX11)
+
+ if test "X$athena" != X"yes"; then
+ AC_CHECK_LIB(Xaw, XawInitializeWidgetSet, athena=yes, ,
+ -lXmu -lXt -lX11)
+ fi
+
+ if test "X$athena" = X"yes"; then
+ AC_DEFINE(USE_ATHENA)
+ if test "X$athena3d" = X"yes"; then
+ xawlib=-lXaw3d
+ else
+ xawlib=-lXaw
+ fi
+ WIDGET_LIBS="$WIDGET_LIBS $xawlib -lXmu"
+ WIDGET_OBJS="$WIDGET_OBJS x11-athena.o"
+ fi
+
+ CFLAGS=$saved_cflags
+ LIBS=$saved_libs
+fi
+
+if test "X$motif" = X"yes" -o "X$athena" = X"yes"; then
+ WIDGET_LIBS="$WIDGET_LIBS -lXt -lXpm -lX11"
+ WIDGET_OBJS="$WIDGET_OBJS x11.o"
+ AC_SUBST(WIDGET_LIBS)
+ AC_SUBST(WIDGET_OBJS)
+fi
+
+AC_ARG_ENABLE(gtk,
+ [ --enable-gtk build with the GTK widget set])
+
+if test "$enable_gtk" != "no"; then
+ AC_CHECK_PROG(GTKCONFIG, gtk-config, yes, no)
+
+ if test "X$GTKCONFIG" = X"yes"; then
+ AC_DEFINE(USE_GTK)
+ GTK_CFLAGS="`gtk-config --cflags`"
+ WIDGET_LIBS="$WIDGET_LIBS `gtk-config --libs`"
+ WIDGET_OBJS="$WIDGET_OBJS gtk.o"
+ fi
+fi
+AC_SUBST(GTK_CFLAGS)
+
+AC_OUTPUT(Makefile)
diff --git a/gtk.c b/gtk.c
new file mode 100644
index 0000000..4748bea
--- /dev/null
+++ b/gtk.c
@@ -0,0 +1,672 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <gtk/gtk.h>
+
+#include "util.h"
+
+#include "gtk.h"
+
+#include "Game.h"
+#include "UI.h"
+
+struct MCursor {
+ GdkCursor *cursor;
+};
+
+struct Picture {
+ gint width, height;
+ GdkPixmap *pix;
+ GdkBitmap *mask;
+ GdkGC *gc;
+};
+
+static const char *pictdir;
+
+static GtkWidget *toplevel, *base, *menubar, *field;
+static GtkWidget *dialogs[DIALOG_MAX + 1];
+static GtkWidget *pausebutton;
+static guint timer;
+static GdkGC *stdgc;
+static GdkPixmap *offscreen;
+static GdkFont *font;
+static GdkColor white, black;
+static int screensize;
+
+/*
+ * Callback functions
+ */
+
+static void
+gtk_ui_popup_dialog(int index) {
+ GtkWidget *popup;
+ int tx, ty, tw, th;
+ int px, py, pw, ph;
+
+ popup = dialogs[index];
+
+ gdk_window_get_origin(toplevel->window, &tx, &ty);
+ gdk_window_get_size(toplevel->window, &tw, &th);
+ gdk_window_get_size(popup->window, &pw, &ph);
+ px = tx + (tw - pw) / 2;
+ py = ty + (th - ph) / 2;
+ gtk_window_set_position(GTK_WINDOW(popup), GTK_WIN_POS_NONE);
+ gtk_widget_set_uposition(popup, px, py);
+ gtk_widget_show_all(popup);
+ gtk_main();
+}
+
+static void
+popdown(void) {
+ gtk_main_quit();
+}
+
+static void
+new_game(void) {
+ Game_start(1);
+}
+
+static void
+quit_game(void) {
+ Game_quit();
+}
+
+static void
+warp_apply(GtkWidget *text) {
+ char *str;
+ char *endp;
+ int newlevel;
+
+ str = gtk_entry_get_text(GTK_ENTRY(text));
+ newlevel = strtol(str, &endp, 10);
+ if (*endp != '\0')
+ return;
+ Game_warp_to_level(newlevel);
+}
+
+static void
+enter_name(GtkWidget *text) {
+ char *str;
+
+ str = gtk_entry_get_text(GTK_ENTRY(text));
+ Game_add_high_score(str);
+}
+
+/*
+ * Event handlers
+ */
+
+static gboolean
+leave_window(GtkWidget *widget, GdkEvent *event, gpointer user_data) {
+ UNUSED(widget);
+ UNUSED(event);
+ UNUSED(user_data);
+
+ UI_pause_game();
+ return FALSE;
+}
+
+static gboolean
+enter_window(GtkWidget *widget, GdkEvent *event, gpointer user_data) {
+ UNUSED(widget);
+ UNUSED(event);
+ UNUSED(user_data);
+
+ UI_resume_game();
+ return FALSE;
+}
+
+static gboolean
+redraw_window(GtkWidget *widget, GdkEvent *event, gpointer user_data) {
+ UNUSED(widget);
+ UNUSED(event);
+ UNUSED(user_data);
+
+ UI_refresh();
+ return FALSE;
+}
+
+static gboolean
+button_press(GtkWidget *widget, GdkEvent *event, gpointer user_data) {
+ GdkEventButton *buttonevent = (GdkEventButton *) event;
+
+ UNUSED(widget);
+ UNUSED(user_data);
+
+ Game_button_press((int)buttonevent->x, (int)buttonevent->y);
+ return FALSE;
+}
+
+static gboolean
+button_release(GtkWidget *widget, GdkEvent *event, gpointer user_data) {
+ GdkEventButton *buttonevent = (GdkEventButton *) event;
+
+ UNUSED(widget);
+ UNUSED(user_data);
+
+ Game_button_release((int)buttonevent->x, (int)buttonevent->y);
+ return FALSE;
+}
+
+static int
+timer_tick(gpointer arg) {
+ UNUSED(arg);
+
+ UI_restart_timer();
+ Game_update();
+ return TRUE;
+}
+
+/*
+ * Cursor handling
+ */
+
+#include "bitmaps/initfail.xbm"
+#include "bitmaps/arch.xbm"
+#include "bitmaps/bsd.xbm"
+#include "bitmaps/centos.xbm"
+#include "bitmaps/debian.xbm"
+#include "bitmaps/gentoo.xbm"
+#include "bitmaps/mandriva.xbm"
+#include "bitmaps/slackware.xbm"
+#include "bitmaps/suse.xbm"
+#include "bitmaps/ubuntu.xbm"
+#include "bitmaps/bucket.xbm"
+#include "bitmaps/hand_down.xbm"
+#include "bitmaps/hand_down_mask.xbm"
+#include "bitmaps/hand_up.xbm"
+#include "bitmaps/hand_up_mask.xbm"
+
+typedef struct cursormap {
+ const char *name;
+ int width, height;
+ const char *data, *maskdata;
+} cursormap;
+
+#define CURSOR_ADD(x) \
+ {#x, x ## _width, x ## _height, x ## _bits, NULL}
+
+#define CURSOR_ADD_MASKED(x) \
+ {#x, x ## _width, x ## _height, x ## _bits, x ## _mask_bits}
+
+static cursormap cursors[] = {
+ CURSOR_ADD(arch), CURSOR_ADD( bsd), CURSOR_ADD(centos),
+ CURSOR_ADD(debian), CURSOR_ADD(gentoo), CURSOR_ADD(mandriva),
+ CURSOR_ADD(slackware), CURSOR_ADD(suse), CURSOR_ADD(ubuntu),
+ CURSOR_ADD(bucket),
+ CURSOR_ADD_MASKED(hand_up), CURSOR_ADD_MASKED(hand_down),
+ {NULL, 0, 0, NULL, NULL},
+};
+
+static void
+gtk_ui_set_cursor(MCursor *cursor) {
+ gdk_window_set_cursor(field->window, cursor->cursor);
+}
+
+static void
+gtk_ui_load_cursor(const char *name, int masked, MCursor **cursorp) {
+ MCursor *cursor;
+ GdkBitmap *bitmap, *mask;
+ cursormap *c;
+
+ cursor = xalloc(sizeof *cursor);
+
+ for (c = cursors; c->name != NULL; c++)
+ if (strcmp(name, c->name) == 0)
+ break;
+ if (c->name == NULL)
+ fatal("couldn't load cursor: %s", name);
+ bitmap = gdk_bitmap_create_from_data(field->window, c->data,
+ c->width, c->height);
+
+ if (masked == CURSOR_SEP_MASK)
+ mask = gdk_bitmap_create_from_data(field->window, c->maskdata,
+ c->width, c->height);
+ else
+ mask = bitmap;
+ cursor->cursor = gdk_cursor_new_from_pixmap(bitmap, mask,
+ &black, &white,
+ c->width/2, c->height/2);
+ *cursorp = cursor;
+}
+
+/*
+ * Pixmap handling
+ */
+
+static void
+gtk_ui_load_picture(const char *name, int trans, Picture **pictp) {
+ Picture *pict;
+ char file[255];
+ GdkBitmap *mask;
+
+ UNUSED(trans);
+
+ pict = xalloc(sizeof *pict);
+
+ sprintf(file, "%s/pixmaps/%s.xpm", pictdir, name);
+ pict->pix = gdk_pixmap_create_from_xpm(toplevel->window, &mask,
+ NULL, file);
+ if (pict->pix == NULL)
+ fatal("error reading %s", file);
+ pict->mask = mask;
+ pict->gc = gdk_gc_new(toplevel->window);
+ gdk_gc_set_exposures(pict->gc, FALSE);
+ gdk_gc_set_clip_mask(pict->gc, mask);
+ gdk_window_get_size(pict->pix, &pict->width, &pict->height);
+
+ *pictp = pict;
+}
+
+static void
+gtk_ui_set_icon(Picture *icon) {
+ gdk_window_set_icon(toplevel->window, NULL, icon->pix, icon->mask);
+}
+
+static int
+gtk_ui_picture_width(Picture *pict) {
+ return (pict->width);
+}
+
+static int
+gtk_ui_picture_height(Picture *pict) {
+ return (pict->height);
+}
+
+/*
+ * Graphics operations
+ */
+
+static void
+gtk_ui_clear_window(void) {
+ gdk_draw_rectangle(offscreen, field->style->white_gc, TRUE, 0, 0,
+ screensize, screensize);
+}
+
+static void
+gtk_ui_refresh_window(void) {
+ gdk_draw_pixmap(field->window, stdgc, offscreen, 0, 0, 0, 0,
+ screensize, screensize);
+}
+
+static void
+gtk_ui_draw_image(Picture *pict, int x, int y) {
+ gdk_gc_set_clip_origin(pict->gc, x, y);
+ gdk_draw_pixmap(offscreen, pict->gc, pict->pix, 0, 0, x, y,
+ pict->width, pict->height);
+}
+
+static void
+gtk_ui_draw_line(int x1, int y1, int x2, int y2) {
+ gdk_draw_line(offscreen, stdgc, x1, y1, x2, y2);
+}
+
+static void
+gtk_ui_draw_string(const char *str, int x, int y) {
+ gdk_draw_string(offscreen, font, stdgc, x, y, str);
+}
+
+/*
+ * Timer operations
+ */
+
+static void
+gtk_ui_start_timer(int ms) {
+ if (timer == 0)
+ timer = gtk_timeout_add(ms, timer_tick, NULL);
+}
+
+static void
+gtk_ui_stop_timer(void) {
+ if (timer != 0)
+ gtk_timeout_remove(timer);
+ timer = 0;
+}
+
+static int
+gtk_ui_timer_active(void) {
+ return (!!timer);
+}
+
+/*
+ * Main Loop
+ */
+static void
+gtk_ui_main_loop(void) {
+ gtk_main();
+}
+
+/*
+ * Initialization
+ */
+static void
+gtk_ui_initialize(int *argc, char **argv) {
+ struct stat stats;
+
+ gtk_init(argc, &argv);
+ toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+
+ timer = 0;
+ gtk_window_set_title(GTK_WINDOW(toplevel), "XLennart - A XBill Modification");
+
+ gtk_signal_connect(GTK_OBJECT(toplevel), "delete_event",
+ GTK_SIGNAL_FUNC(quit_game), NULL);
+
+ if (stat(IMAGES, &stats) == 0)
+ pictdir = IMAGES;
+ else
+ pictdir = ".";
+}
+
+static GtkWidget *
+new_menu_item(GtkWidget *menu, int dialog) {
+ GtkWidget *menu_item;
+
+ menu_item = gtk_menu_item_new_with_label(UI_menu_string(dialog));
+ gtk_menu_append(GTK_MENU(menu), menu_item);
+ gtk_signal_connect_object(GTK_OBJECT(menu_item), "activate",
+ gtk_ui_popup_dialog, (gpointer) dialog);
+ return (menu_item);
+}
+
+static GtkWidget *
+CreateMenuBar(void) {
+ GtkWidget *menubar;
+ GtkWidget *game_item, *game_menu;
+ GtkWidget *info_item, *info_menu;
+ GtkWidget *tearoff;
+
+ menubar = gtk_menu_bar_new();
+
+ game_item = gtk_menu_item_new_with_label("Game");
+ game_menu = gtk_menu_new();
+
+ tearoff = gtk_tearoff_menu_item_new();
+ gtk_menu_append(GTK_MENU(game_menu), tearoff);
+
+ new_menu_item(game_menu, DIALOG_NEWGAME);
+ pausebutton = new_menu_item(game_menu, DIALOG_PAUSEGAME);
+ new_menu_item(game_menu, DIALOG_WARPLEVEL);
+ new_menu_item(game_menu, DIALOG_HIGHSCORE);
+ new_menu_item(game_menu, DIALOG_QUITGAME);
+
+ gtk_menu_bar_append(GTK_MENU_BAR(menubar), game_item);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(game_item), game_menu);
+
+ info_item = gtk_menu_item_new_with_label("Info");
+ info_menu = gtk_menu_new();
+
+ tearoff = gtk_tearoff_menu_item_new();
+ gtk_menu_append(GTK_MENU(info_menu), tearoff);
+
+ new_menu_item(info_menu, DIALOG_STORY);
+ new_menu_item(info_menu, DIALOG_RULES);
+ new_menu_item(info_menu, DIALOG_ABOUT);
+
+ gtk_menu_bar_append(GTK_MENU_BAR(menubar), info_item);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(info_item), info_menu);
+
+ return menubar;
+}
+
+static GtkWidget *
+CreateDrawingArea(int width, int height) {
+ GtkWidget *w = gtk_drawing_area_new();
+ gtk_drawing_area_size(GTK_DRAWING_AREA(w), width, height);
+ return w;
+}
+
+static void
+gtk_ui_make_main_window(int size) {
+ GdkWindowHints flags;
+ GdkGeometry geom;
+ gint winwidth, winheight;
+
+ screensize = size;
+
+ base = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(toplevel), base);
+
+ menubar = CreateMenuBar();
+ gtk_box_pack_start(GTK_BOX(base), menubar, FALSE, FALSE, 0);
+
+ field = CreateDrawingArea(size, size);
+ gtk_box_pack_start(GTK_BOX(base), field, FALSE, FALSE, 0);
+
+ gtk_signal_connect(GTK_OBJECT(field), "button-press-event",
+ GTK_SIGNAL_FUNC(button_press), NULL);
+ gtk_signal_connect(GTK_OBJECT(field), "button-release-event",
+ GTK_SIGNAL_FUNC(button_release), NULL);
+ gtk_signal_connect(GTK_OBJECT(field), "enter-notify-event",
+ GTK_SIGNAL_FUNC(enter_window), NULL);
+ gtk_signal_connect(GTK_OBJECT(field), "leave-notify-event",
+ GTK_SIGNAL_FUNC(leave_window), NULL);
+ gtk_signal_connect(GTK_OBJECT(field), "expose-event",
+ GTK_SIGNAL_FUNC(redraw_window), NULL);
+ gtk_widget_set_events(field, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_ENTER_NOTIFY_MASK |
+ GDK_LEAVE_NOTIFY_MASK |
+ GDK_EXPOSURE_MASK);
+
+ gtk_widget_show_all(toplevel);
+
+ gdk_window_get_size(toplevel->window, &winwidth, &winheight);
+ geom.min_width = geom.max_width = geom.base_width = winwidth;
+ geom.min_height = geom.max_height = geom.base_height = winheight;
+ geom.width_inc = geom.height_inc = 0;
+ flags = GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE | GDK_HINT_BASE_SIZE |
+ GDK_HINT_RESIZE_INC;
+ gdk_window_set_geometry_hints(toplevel->window, &geom, flags);
+
+ gdk_color_parse("white", &white);
+ gdk_color_parse("black", &black);
+}
+
+static void
+gtk_ui_graphics_init(void) {
+ offscreen = gdk_pixmap_new(field->window, screensize, screensize, -1);
+ stdgc = gdk_gc_new(offscreen);
+ gdk_gc_set_exposures(stdgc, FALSE);
+ gdk_gc_set_line_attributes(stdgc, 2, GDK_LINE_SOLID, GDK_CAP_ROUND,
+ GDK_JOIN_MITER);
+ font = gdk_font_load("fixed");
+}
+
+static GtkWidget *
+new_button(GtkWidget *dialog, const char *text, GtkSignalFunc func,
+ GtkObject *obj)
+{
+ GtkWidget *button = gtk_button_new_with_label(text);
+ if (func != NULL)
+ gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
+ func, obj);
+ gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
+ GTK_SIGNAL_FUNC(gtk_widget_hide),
+ GTK_OBJECT(dialog));
+ gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
+ GTK_SIGNAL_FUNC(popdown), NULL);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
+ button);
+ gtk_widget_show(button);
+ return button;
+}
+
+static void
+CreateDialog(int index, int hascancel, Picture *icon,
+ const char *buttonlabel, GtkSignalFunc func)
+{
+ GtkWidget *dialog, *pixmap, *label, *hbox;
+
+ dialog = gtk_dialog_new();
+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+
+ if (icon != NULL) {
+ pixmap = gtk_pixmap_new(icon->pix, icon->mask);
+ gtk_container_add(GTK_CONTAINER(hbox), pixmap);
+ }
+
+ label = gtk_label_new(UI_dialog_string(index));
+ gtk_container_add(GTK_CONTAINER(hbox), label);
+
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
+ gtk_widget_show_all(hbox);
+
+ if (buttonlabel == NULL)
+ buttonlabel = "OK";
+ new_button(dialog, buttonlabel, func, NULL);
+
+ if (hascancel)
+ new_button(dialog, "Cancel", NULL, NULL);
+
+ gtk_widget_realize(dialog);
+ dialogs[index] = dialog;
+}
+
+static void
+CreateEnterText(int index, GtkSignalFunc func) {
+ GtkWidget *dialog, *label, *entry;
+
+ dialog = gtk_dialog_new();
+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+
+ label = gtk_label_new(UI_dialog_string(index));
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
+ gtk_widget_show(label);
+
+ entry = gtk_entry_new_with_max_length(20);
+ gtk_signal_connect_object(GTK_OBJECT(entry), "activate",
+ func, GTK_OBJECT(entry));
+ gtk_signal_connect_object(GTK_OBJECT(entry), "activate",
+ GTK_SIGNAL_FUNC(gtk_widget_hide),
+ GTK_OBJECT(dialog));
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), entry);
+ gtk_widget_show(entry);
+
+ new_button(dialog, "OK", func, GTK_OBJECT(entry));
+
+ gtk_widget_realize(dialog);
+ dialogs[index] = dialog;
+}
+
+static void
+CreatePixmapBox(int index, Picture *logo, Picture *pix) {
+ GtkWidget *dialog, *pixmap, *label;
+ const char *text = UI_dialog_string(index);
+
+ dialog = gtk_dialog_new();
+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+
+ pixmap = gtk_pixmap_new(logo->pix, logo->mask);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), pixmap);
+ gtk_widget_show(pixmap);
+
+ if (pix != NULL) {
+ pixmap = gtk_pixmap_new(pix->pix, pix->mask);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
+ pixmap);
+ gtk_widget_show(pixmap);
+ }
+
+ if (text != NULL) {
+ label = gtk_label_new(text);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
+ label);
+ gtk_widget_show(label);
+ }
+
+ new_button(dialog, "OK", NULL, NULL);
+
+ gtk_widget_realize(dialog);
+ dialogs[index] = dialog;
+}
+
+static void
+gtk_ui_create_dialogs(Picture *logo, Picture *icon, Picture *about) {
+ CreateDialog(DIALOG_NEWGAME, 1, NULL, NULL, new_game);
+ CreateDialog(DIALOG_PAUSEGAME, 0, icon, "Continue", NULL);
+ CreateEnterText(DIALOG_WARPLEVEL, warp_apply);
+ CreateDialog(DIALOG_HIGHSCORE, 0, NULL, NULL, NULL);
+ CreateDialog(DIALOG_QUITGAME, 1, NULL, NULL, quit_game);
+
+ CreatePixmapBox(DIALOG_STORY, logo, NULL);
+ CreatePixmapBox(DIALOG_RULES, logo, NULL);
+ CreatePixmapBox(DIALOG_ABOUT, logo, about);
+
+ CreateDialog(DIALOG_SCORE, 0, NULL, NULL, NULL);
+ CreateDialog(DIALOG_ENDGAME, 0, NULL, "Nuts!", NULL);
+ CreateEnterText(DIALOG_ENTERNAME, enter_name);
+}
+
+static void
+set_label(GtkWidget *dialog, const char *str) {
+ GList *list;
+ GtkWidget *hbox = NULL;
+
+ list = gtk_container_children(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox));
+ while (list != NULL) {
+ GtkWidget *w = (GtkWidget *) list->data;
+ list = g_list_next(list);
+ if (GTK_IS_HBOX(w)) {
+ hbox = w;
+ break;
+ }
+ }
+ if (hbox == NULL)
+ return;
+ list = gtk_container_children(GTK_CONTAINER(hbox));
+ while (list != NULL) {
+ GtkWidget *w = (GtkWidget *) list->data;
+ list = g_list_next(list);
+ if (GTK_IS_LABEL(w)) {
+ gtk_label_set_text(GTK_LABEL(w), str);
+ return;
+ }
+ }
+}
+
+static void
+gtk_ui_update_dialog(int index, const char *str) {
+ set_label(dialogs[index], str);
+}
+
+static void
+gtk_ui_set_pausebutton(int active) {
+ if (pausebutton != NULL)
+ gtk_widget_set_sensitive(pausebutton, active);
+}
+
+static struct UI_methods gtk_methods = {
+ gtk_ui_set_cursor,
+ gtk_ui_load_cursor,
+ gtk_ui_load_picture,
+ gtk_ui_set_icon,
+ gtk_ui_picture_width,
+ gtk_ui_picture_height,
+ gtk_ui_graphics_init,
+ gtk_ui_clear_window,
+ gtk_ui_refresh_window,
+ gtk_ui_draw_image,
+ gtk_ui_draw_line,
+ gtk_ui_draw_string,
+ gtk_ui_start_timer,
+ gtk_ui_stop_timer,
+ gtk_ui_timer_active,
+ gtk_ui_popup_dialog,
+ gtk_ui_main_loop,
+ gtk_ui_initialize,
+ gtk_ui_make_main_window,
+ gtk_ui_create_dialogs,
+ gtk_ui_set_pausebutton,
+ gtk_ui_update_dialog,
+};
+
+void
+gtk_ui_setmethods(UI_methods **methodsp) {
+ *methodsp = &gtk_methods;
+}
diff --git a/gtk.h b/gtk.h
new file mode 100644
index 0000000..17bd956
--- /dev/null
+++ b/gtk.h
@@ -0,0 +1,9 @@
+#ifndef GTK_H
+#define GTK_H
+
+#include "UI.h"
+
+void
+gtk_ui_setmethods(UI_methods **methodsp);
+
+#endif
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..e9de238
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ chmodcmd=""
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100644
index 0000000..67382c8
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.1 2001/10/28 22:31:20 bwelling Exp $
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/pixmaps/about.xcf b/pixmaps/about.xcf
new file mode 100644
index 0000000..62adbfe
--- /dev/null
+++ b/pixmaps/about.xcf
Binary files differ
diff --git a/pixmaps/about.xpm b/pixmaps/about.xpm
new file mode 100644
index 0000000..ae3555e
--- /dev/null
+++ b/pixmaps/about.xpm
@@ -0,0 +1,387 @@
+/* XPM */
+static char * about_xpm[] = {
+"300 140 244 2",
+" c None",
+". c #315294",
+"+ c #020407",
+"@ c #000000",
+"# c #000001",
+"$ c #010305",
+"% c #2A4780",
+"& c #010103",
+"* c #070C16",
+"= c #18294A",
+"- c #060A12",
+"; c #2B4883",
+"> c #2C4A87",
+", c #080D18",
+"' c #274277",
+") c #060B14",
+"! c #2E4D8B",
+"~ c #0C1527",
+"{ c #090F1C",
+"] c #020306",
+"^ c #29457D",
+"/ c #010203",
+"( c #29467E",
+"_ c #1C2F55",
+": c #060B13",
+"< c #0D1629",
+"[ c #263F73",
+"} c #28447B",
+"| c #172747",
+"1 c #1C2F56",
+"2 c #080E1A",
+"3 c #090F1B",
+"4 c #162543",
+"5 c #1E325A",
+"6 c #0A111F",
+"7 c #101C32",
+"8 c #111D34",
+"9 c #243C6D",
+"0 c #2C4985",
+"a c #284379",
+"b c #050911",
+"c c #2B4882",
+"d c #0C1425",
+"e c #060A13",
+"f c #1D3057",
+"g c #203662",
+"h c #264074",
+"i c #1D3159",
+"j c #010205",
+"k c #253E70",
+"l c #2E4E8C",
+"m c #1B2E53",
+"n c #070C17",
+"o c #1C2F54",
+"p c #03060B",
+"q c #0D1527",
+"r c #1F345E",
+"s c #2C4A86",
+"t c #152441",
+"u c #0A111E",
+"v c #0B1322",
+"w c #05080F",
+"x c #000102",
+"y c #0F1A30",
+"z c #0C1526",
+"A c #2F4E8E",
+"B c #1F3560",
+"C c #2F4F8F",
+"D c #2A4781",
+"E c #0F192D",
+"F c #14223E",
+"G c #111C34",
+"H c #0B1323",
+"I c #2B4984",
+"J c #0A101E",
+"K c #14223D",
+"L c #2E4C8A",
+"M c #03050A",
+"N c #1E325B",
+"O c #2D4C8A",
+"P c #101A30",
+"Q c #030509",
+"R c #253E71",
+"S c #223A69",
+"T c #29457E",
+"U c #2E4E8D",
+"V c #2F5090",
+"W c #070C15",
+"X c #29457C",
+"Y c #305192",
+"Z c #162645",
+"` c #192A4C",
+" . c #04060C",
+".. c #18294B",
+"+. c #121F38",
+"@. c #2D4C89",
+"#. c #020408",
+"$. c #15233F",
+"%. c #0E172A",
+"&. c #1A2B4F",
+"*. c #213764",
+"=. c #0B1221",
+"-. c #1F345D",
+";. c #233B6A",
+">. c #2A467F",
+",. c #0E182B",
+"'. c #0D1628",
+"). c #121E37",
+"!. c #0E182C",
+"~. c #13213B",
+"{. c #1D325A",
+"]. c #101B31",
+"^. c #111D35",
+"/. c #080E19",
+"(. c #223967",
+"_. c #152442",
+":. c #223968",
+"<. c #1A2C50",
+"[. c #04070E",
+"}. c #2D4B88",
+"|. c #203560",
+"1. c #010204",
+"2. c #253D6F",
+"3. c #203661",
+"4. c #305091",
+"5. c #13213C",
+"6. c #000101",
+"7. c #0F1A2F",
+"8. c #192B4D",
+"9. c #1B2D52",
+"0. c #04070D",
+"a. c #233B6B",
+"b. c #182849",
+"c. c #5A395A",
+"d. c #FFFFFF",
+"e. c #DEDEBD",
+"f. c #FFFFF7",
+"g. c #32642C",
+"h. c #945831",
+"i. c #1C3057",
+"j. c #050810",
+"k. c #070D17",
+"l. c #1D315A",
+"m. c #1A2C4F",
+"n. c #253F72",
+"o. c #2B4983",
+"p. c #274176",
+"q. c #2C4984",
+"r. c #233C6C",
+"s. c #1F335D",
+"t. c #29447C",
+"u. c #213865",
+"v. c #1F345F",
+"w. c #162544",
+"x. c #233A6A",
+"y. c #172646",
+"z. c #070D18",
+"A. c #233A69",
+"B. c #263F72",
+"C. c #04080E",
+"D. c #1E335C",
+"E. c #274175",
+"F. c #1C2E54",
+"G. c #0B1222",
+"H. c #13203A",
+"I. c #0C1525",
+"J. c #1B2D51",
+"K. c #203763",
+"L. c #243D6E",
+"M. c #213866",
+"N. c #264175",
+"O. c #070B15",
+"P. c #121F39",
+"Q. c #0F192E",
+"R. c #03060C",
+"S. c #2F4F90",
+"T. c #284378",
+"U. c #284278",
+"V. c #264075",
+"W. c #243D6F",
+"X. c #2E4D8C",
+"Y. c #111C33",
+"Z. c #152340",
+"`. c #050910",
+" + c #243C6C",
+".+ c #09101C",
+"++ c #28437A",
+"@+ c #1D3158",
+"#+ c #274278",
+"$+ c #04080F",
+"%+ c #050912",
+"&+ c #253F71",
+"*+ c #14213D",
+"=+ c #172645",
+"-+ c #0D1627",
+";+ c #2C4B87",
+">+ c #28447A",
+",+ c #172746",
+"'+ c #0A1220",
+")+ c #04070C",
+"!+ c #162644",
+"~+ c #18085A",
+"{+ c #222772",
+"]+ c #20206D",
+"^+ c #18095B",
+"/+ c #232A75",
+"(+ c #1D1765",
+"_+ c #4AB5EF",
+":+ c #4A8CBD",
+"<+ c #294A6B",
+"[+ c #233B6C",
+"}+ c #020509",
+"|+ c #264073",
+"1+ c #2F4F8E",
+"2+ c #1A2D51",
+"3+ c #1A2B4E",
+"4+ c #14223F",
+"5+ c #020307",
+"6+ c #14233F",
+"7+ c #121E36",
+"8+ c #172848",
+"9+ c #162442",
+"0+ c #0C1424",
+"a+ c #213763",
+"b+ c #101C33",
+"c+ c #1F355F",
+"d+ c #1B2E54",
+"e+ c #09101D",
+"f+ c #0A1120",
+"g+ c #13203B",
+"h+ c #182848",
+"i+ c #2D4B89",
+"j+ c #2F4E8D",
+"k+ c #0D172A",
+"l+ c #203663",
+"m+ c #111D36",
+"n+ c #19294B",
+"o+ c #2C4A85",
+"p+ c #162542",
+"q+ c #1A2C51",
+"r+ c #1D3058",
+"s+ c #253E6F",
+"t+ c #0B1424",
+"u+ c #1E335D",
+" ",
+" ",
+" ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" . + @ # $ . . % & @ @ * . = - @ ; = - @ ; = - @ ; > , @ ; ",
+" . ' + ) @ ! . ~ { ] > . . . ^ / . . ^ / . . ^ / . . ( / . ",
+" . _ : < @ [ . } @ | * . . . . . . . 1 : . . 1 : . . . . . . . 1 : . . 1 ) . ",
+" . 2 3 4 @ 5 . . 6 7 8 3 . . 9 , @ : 0 . . . . . 3 3 . . . . . 3 3 . . a 2 @ b c . . . . . 3 3 . . 2 d . . . . . . . . . . . . . . . . . ",
+" . e f g @ 4 . h @ ! : i . . } j k l m n . . o p @ q 3 r . . o p @ q 3 r . . s @ _ l t u . . o p @ q 3 r . . : v w @ x y ! . z @ @ A ) @ @ B . @ C ",
+" . @ D % @ E . , F . @ c . w ( . . @ . . G H s I 3 @ I . G H s I 3 @ I . J K . . L x . . G H s I 3 @ I . ] M N O I P , . F Q C . A + R . . . . ",
+" D @ . . / 3 S @ C D @ . T @ . . @ . A @ . . . g + . A @ . . . g + . U Q V . . ' W . A @ . . . g + . I @ X . . Y @ . g @ C . Z ` . ",
+" . 1 e . . - .2 ... 1 ) . +.{ . . @.#.. $.%.. . &.) . . $.%.. . &.) . *.@ @ @ @ @ =.. $.%.. . &.) . . -.n . V ] . l @ ;.>.@ . ",
+" . E ,.. . '.@ - Y . =.H . m ).. . { 4 . !.... . . J ~.. . !.... . . J ~.. {.].. . . h h . !.... . . J ~.. . ^./.. . . ^.].. . e $.=.;.. ",
+" . V (./ * @.. _.@ :.. C W <.. . L [.' }.= @ . . |.2 0 ; ].@ ` . . |.2 0 ; ].@ ` . D 1.2.U N @ @.. |.2 0 ; ].@ ` . . : @ ` }.@.Z @ . . '.@ P . . . . ",
+" . 6 @ @ @ M . 3.{ . ].@ @ @ * . . i @ @ ).4.. . 5.@ 6.7.] @ 5 . 5.@ 6.7.] @ 5 . 8.& @ J % . . 5.@ 6.7.] @ 5 X 7.9.#.@ 0.t 4.. . o # C . . @ . ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C p a.. . . . ",
+" *.` e 7 . ",
+" b.@ <.. . ",
+" . . . ",
+" ",
+" c.c.c.c.c.c. ",
+" c.c.c.@ @ @ @ @ @ c.c. ",
+" c.@ @ @ @ @ c.@ @ @ @ @ c. ",
+" c.@ @ @ @ @ c.@ @ @ @ @ @ c. ",
+" c.@ @ @ @ @ @ @ @ @ @ @ @ @ c. ",
+" c.@ @ @ @ c.@ @ @ @ @ @ @ @ c. ",
+" c.@ @ @ @ c.c.@ @ @ @ @ @ @ @ @ c. ",
+" c.@ @ c.c.d.e.c.@ @ @ @ @ @ @ @ c. ",
+" c.@ @ c.d.e.d.e.c.@ @ @ @ @ @ @ c. ",
+" c.c.@ c.d.e.d.e.d.e.c.@ @ @ @ @ @ c. ",
+" c.@ @ c.e.d.@ d.e.d.@ c.c.@ @ @ @ c. ",
+" c.@ @ c.d.@ d.@ d.@ d.@ d.c.@ @ @ c. ",
+" c.@ @ c.e.d.@ d.e.d.@ d.e.c.@ @ c.c. ",
+" c.c.@ c.d.e.f.e.d.e.d.e.d.e.c.@ c. ",
+" c.@ c.c.f.e.f.e.d.e.d.e.f.c.@ c. ",
+" c.@ @ c.e.d.c.c.c.f.e.f.e.c.@ c. ",
+" c.c.@ c.f.e.d.e.f.e.c.e.f.c.@ c. ",
+" c.@ c.c.f.e.f.e.c.e.@ c.c.c.c. ",
+" c.c.@ c.f.e.c.e.@ @ c.g.g.c. ",
+" c.c.@ @ c.c.c.@ @ c.g.g.g.g.c. ",
+" c.g.g.c.@ @ @ @ @ c.g.g.c.g.g.c. ",
+" c.g.g.g.c.c.@ @ c.g.g.g.c.g.g.c. ",
+" c.g.g.c.g.g.c.@ c.c.g.g.g.c.g.g.c. ",
+" c.g.g.c.g.g.c.@ c.c.g.g.c.g.g.g.c. ",
+" c.g.g.c.g.g.c.@ c.c.g.g.c.g.g.g.g.c. ",
+" c.g.g.c.g.g.c.@ c.c.g.c.g.g.g.g.g.c. ",
+" c.g.g.g.g.g.c.@ c.c.g.g.c.g.g.g.c.c. ",
+" c.c.g.c.g.g.c.c.c.c.c.g.g.c.g.c.c. ",
+" c.c.g.g.g.c.. c.c.g.c.g.g.c.c. ",
+" c.c.g.g.c.. c.c.g.g.g.c.c. ",
+" c.c.c.. . c.c.c.c.c.c. ",
+" c.. . . . c.. . . . c. ",
+" c.. . . . c.. . . . c. ",
+" c.. . . . c.. . . . c. ",
+" c.. c.c.c.c.c.c.c.. c. ",
+" c.c.h.h.h.c.h.h.h.c.c. ",
+" c.h.h.h.h.c.h.h.h.h.c. ",
+" c.c.c.c.c.c.c.c.c.c.c. ",
+" ",
+" ",
+" ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" . i.* & @ j.i.e . . . . 9.3 x C . ) @ @ @ @ @ @ @ k.l.3 x C . . m.) @ # * 1 . 3.@ n.. 0.* # . ",
+" . , H c U a.W @ M . C @ . . Y @ o. . [.[.p.q.@ 0 p.[.- . Y @ o. . < #.a.l U r.Q %.. . . . . . 4.@ . ",
+" . s.n . . . V - ] . . . . . . . . t.@ . . @ ' . @ u.. . @ . . g @ . . @ ' . . . . . . . . . . . . . |.@ . . . . $ v.. . . . . . . . . . . . @ . ",
+" . p I . . 9 @ . . 4 x @ w.. 4.7 @ . . . . @ x.. . . . . . . . . . . . . . . . . . . . . . 1.. . @ . . & . . @ x.. . . . . F # @ y.. . . . . . . . . . . . . . . x.z.6.@ - (.. . . . . . . . 0.A.. . B.C.. . . . . . . . . x.z.6.@ - (.. y.$.G . . @ . ",
+" . x . . H . . D.& E.0 z.F.. :.@ @ @ @ u. . @ 1 G.@ Q a.. 1.@ 2 > @ @ @ . M J ) a.C.@ C.:.. . F . . @ . . K . . @ 1 G.@ Q a.. . H.I.D o.z K . M J ) J.@ x |.K.0.@ b ;.. . p D 4.% H. .. . ` # @ 3 J . . @ . . x L.{ x . = { x . . p D 4.% H. .. M.v.@ . . @ . ",
+" . @ . . . . . . . . - F.. . N.O.. . . @ . . . . @ =.N.! P.M . Q.- 4.. ( ] ( . . U @ /.p.! H.R.. . . . . @ . . . . . @ =.N.! P.M . . @ S.. . A @ . . A @ < }.J.M J T.O F #.. . @ . . . V @ . . Q >.X 0.J . . @ . . x . Y @ . . Y @ . . @ . . . V @ . . @ . . @ . ",
+" . @ . . u @ @ @ +.. + ! . . }.0.. . @ . . @ U.. . A @ . V.@ % . i H.. . @ U.. . A @ . . @ . . @ U.. . A @ . . @ . . @ . . @ 0 . V @ ( . . V @ . . . 0 < Q e @ . . @ F.O W.~ . . & . . . . . . . @ . . @ . . @ . . . 0 < Q e @ . . @ . . @ . ",
+" . ] X.. . . D @ ! . . & @ @ @ @ / . . @ . . s . . @ 4. . @ . . /.Y.. @ >.. . @ 4. . @ . . @ . . @ 4. . @ . . @ . . @ . . @ . . @ . . @ . . Z.j ` ! . @ . . t /.@ x F.. . R.A B [.@ `. +. a.#.. . @ . V @ . . Z.j ` ! . @ . . @ . . @ . ",
+" . Z .+. . . U.@ . . `.O . . . J.. . @ . O @ . . @ . . @ . . v.@ ++3 . . @ . . @ . . @ . . @ . . @ . . @ S.. . S.@ . . @ . . @ . . @ . . * . . . c @ . . 0.Y . E.@ . . @+Z Q #+O z $ % $+Z . . @ . . ' @ . . * . . . c @ . . @ . . @ . ",
+" . .%+&+C @.D.`.$ . . *+2 >.! H.j . . & [ =+) . . > @ }.. . }.@ > . . Q Q r.. . Y >.@ }.. . }.@ > . . . 0 @ > . . . > @ }.. . }.@ > . 5.-+c c d K . Y >.@ }.. }.@ @.. . }.@ > . . ] p.C M.`.@ % O . @ 7.;+a ] . . = @ >+4.i @ & * . . ] *.> 3 @ c . . ] p.C M.`.@ % O . s @ > . . > @ }.. ",
+" . . = ) # @ - K.E . . . ~.x @ d X.. . $.x ] r.. L.@ @ @ a.a.@ @ @ L.. *+#.. . @ @ @ @ a.a.@ @ @ L. . e @ @ @ O.. L.@ @ @ a.a.@ @ @ L.. ,+@ @ | . . @ @ @ @ _.@ @ @ [ R @ @ @ a.. 9.+ @ 0.<.'+Q n.. )+H @ j 1 . . g W @ / + M ! . . . 9.6.@ ,+@ @ m . 9.+ @ 0.<.'+Q n.u.@ @ @ u.:.@ @ @ :. ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^.1.C - @+ . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" . ,.^.@ . . N @ ,+H 0 ",
+" . @ e s . 4.=.1.!+. ",
+" . ~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+{+{+{+]+^+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+]+/+/+/+(+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+",
+" _+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+",
+" ",
+" ",
+" ",
+" . . . . . . . . . . . . . :+. . . . . . . . :+ . . . . . . . . . . . . . . :+ . . . . . . . :+. . . . . . . . . . . . . . . :+. . . . . . . . . . . . . . . . . . . . :+ :+. . . . . . . . . . :+:+. . . . . . . . . . :+:+. . . . . . :+. . . :+. . . . . :+ :+. . . :+. . . . . . . . :+:+ . . . . . . . . . . . . . ",
+" . . <+<+<+. <+. . <+<+. <+. . . <+<+<+<+<+<+. <+. . <+<+<+<+<+. . . . . <+<+<+. <+<+ <+<+<+<+<+. <+. :+. <+<+<+<+. <+. :+. <+~+<+<+. . . ~+:+ . . <+<+<+<+<+<+<+<+. <+. . . <+<+<+<+<+<+<+<+<+:+ . . <+<+<+<+<+<+<+<+. <+:+. <+<+<+<+<+<+<+<+. ~+. :+<+<+<+<+<+~+. <+. ~+:+<+<+. <+<+ . . <+<+:+ :+. <+<+<+<+<+<+<+<+<+. :+ <+<+<+<+<+<+<+<+<+. ~+:+ . . <+<+:+ ",
+" . . <+~+~+. ~+~+. ~+<+. ~+~+. . . ~+~+<+<+<+. ~+~+<+<+ . . ~+~+. . ~+~+<+. . ~+~+. ~+~+. . . ~+~+. . ~+~+. :+. :+~+~+. <+~+~+:+. ~+~+. <+. . ~+<+~+~+:+ . . . ~+~+. <+. . ~+<+<+~+<+. . ~+~+. . . <+~+~+<+. . . . ~+~+<+<+<+<+~+. ~+<+<+. ~+~+<+<+<+<+~+. ~+~+. . ~+~+:+~+~+. ~+. ~+. . ~+. ~+~+. . ~+~+. ~+:+ :+<+:+~+~+<+. . . ~+~+<+~+:+ <+. ~+~+~+<+<+. ~+. ~+~+:+. ~+~+<+~+ ",
+" . . ~+~+. ~+~+<+~+. ~+~+~+. :+. ~+~+. ~+~+~+. ~+<+~+. . . ~+:+~+~+~+. . . ~+. ~+~+~+<+ . . ~+. ~+~+~+. . <+~+:+~+~+~+. <+~+<+~+~+~+<+. <+~+~+:+ :+. ~+~+<+~+~+~+. <+<+~+. . . ~+. <+~+~+. <+~+<+~+:+ :+. ~+~+<+~+~+<+~+. ~+<+ . <+~+. ~+~+~+~+. ~+~+ . ~+~+. ~+~+<+~+. ~+~+<+<+~+~+~+<+ . . ~+~+. ~+~+ . <+~+:+~+~+~+. ~+~+<+. . . ~+. ~+~+~+<+. ~+~+. <+~+~+. ~+. ",
+" . . . <+~+~+<+. ~+~+~+~+. . <+<+<+~+~+~+. <+<+<+~+ . . <+. ~+~+~+. :+. <+. ~+~+~+. . . <+. ~+~+~+. . <+<+. ~+~+~+<+<+. <+~+~+ . <+~+~+:+ . <+<+<+~+~+. <+<+<+~+. :+. <+. ~+~+~+~+. <+<+~+<+ . <+<+<+~+~+~+<+. ~+<+ . <+<+. ~+~+~+<+. ~+~+ <+. . <+~+<+<+. <+~+~+<+. ~+~+~+. . . . . <+~+~+:+ . <+<+. ~+~+~+<+<+<+<+~+:+ . . <+. ~+~+~+<+. ~+~+. . ~+<+<+~+~+ ",
+" :+. . . . <+~+. ~+~+. . . . <+~+. :+<+. . <+~+. . . :+. ~+~+:+ :+. :+. ~+~+. . . :+. ~+~+:+ . . . . ~+~+ . . . <+~+:+ . <+~+~+:+ . . . <+~+. . . <+~+. :+. :+. ~+~+<+<+. . . ~+~+ . . . <+~+. . . . ~+<+ . . . . ~+<+:+. . ~+~+ . . . ~+. ~+. . <+~+<+. ~+~+ . ~+:+. . <+~+. . . . . ~+~+. . <+. . ~+. . . :+. ~+~+ <+. ~+~+. <+<+<+. ~+~+ ",
+" . . . ~+. ~+~+. . :+. <+~+<+. . :+. ~+~+. . . :+. ~+~+ :+. :+:+~+~+:+ . . . ~+~+ . . . . ~+<+ :+. . . ~+. . . :+<+~+~+:+ . :+. <+~+~+ ~+~+~+~+. :+. :+. ~+~+. . . :+. ~+~+:+ . . . <+~+<+. <+~+~+<+ . . . . ~+~+:+~+~+~+~+ :+. :+. <+. <+. :+. ~+<+<+~+. :+. ~+<+:+:+. ~+<+ . . . . ~+~+. . . . <+~+<+ . . :+. ~+~+:+~+<+~+~+. . . . <+~+~+ ",
+" :+. <+. ~+. ~+~+:+ . <+~+<+<+<+<+<+<+. ~+~+. . . <+. ~+~+ :+. . . ~+~+:+ . . . . ~+~+ . <+<+. ~+<+ . ~+<+<+~+~+<+. . <+<+:+ . <+~+. . . <+:+~+~+~+. :+. . <+<+<+<+<+<+<+<+~+~+:+ . <+~+<+<+. . <+~+~+<+ . <+<+<+<+. <+. ~+~+~+ <+<+<+. . . . <+. <+<+~+~+. . . <+~+. . . ~+~+ . <+<+<+<+<+<+~+<+. ~+~+<+ . . <+<+<+<+<+. ~+~+~+. . <+<+<+~+~+ ",
+" . :+. :+<+~+. . . :+:+:+:+ . . <+~+~+:+ . . :+~+~+ :+. . :+~+~+:+ . :+. . ~+~+ . :+. . ~+<+ . . :+. . :+:+~+:+ . . :+:+:+. ~+. . . . :+:+:+<+ :+. . ~+~+~+ . . :+:+:+. ~+:+. . . . :+. :+:+:+~+. . . . <+:+<+. :+. :+<+:+. ~+~+:+ . :+. ~+. . :+~+~+:+ . :+. <+:+~+~+~+. . :+. :+:+:+~+<+. . . :+. . . <+~+<+ ",
+" . :+. ~+:+~+:+ . ~+. <+~+~+~+. ~+:+~+. . . ~+. ~+~+ :+. ~+. ~+~+:+ . . ~+. ~+~+ . . ~+. ~+<+ <+<+:+ ~+~+:+<+~+ . ~+. <+~+~+~+~+ :+. ~+:+<+<+<+. ~+:+~+~+. . ~+. <+~+~+~+. . . ~+. ~+~+~+<+ . . ~+. . . ~+. :+:+~+~+ . <+. <+~+. . . <+. <+<+. ~+<+. ~+~+:+ . . ~+. ~+~+~+~+ . . . ~+~+. ",
+" :+. :+~+. <+. . . :+<+~+~+~+. <+:+<+. . :+~+:+~+~+ :+:+~+:+~+~+:+ :+:+:+ . :+~+:+~+~+ :+:+:+ . . <+. ~+<+ . . . <+~+<+:+:+~+. . ~+. . . . <+~+~+~+~+ :+:+~+ ~+~+~+. . . <+~+. :+ . . . <+~+~+~+. <+:+ . . . . ~+~+~+<+<+. . . ~+:+ <+. <+. . ~+~+ :+. :+. . ~+<+ . . . . ~+~+~+:+~+:+~+<+. . :+~+:+~+~+~+<+. <+ . . . ~+~+. ",
+" . :+ . :+. :+~+:+ . . :+<+~+<+. . . :+<+~+ . . :+~+~+ :+:+. ~+~+:+ <+. <+ . . :+~+~+ :+. <+. . . . ~+<+ . <+:+. ~+~+. . . :+~+<+ . . :+<+~+<+:+:+ :+:+. ~+~+<+. :+. . . ~+:+ . . :+<+~+<+<+ . ~+:+ . :+. . ~+~+. :+:+~+:+ :+. . :+ <+~+:+. . ~+<+ . :+:+<+<+<+:+. :+~+~+ . :+:+. ~+~+. :+. ~+ . . . . :+~+~+:+. ~+. . . . ~+~+. ",
+" :+. . ~+:+:+:+. <+ . :+ <+~+. :+. :+ <+~+. . :+:+~+~+ :+:+:+ ~+~+:+:+. :+~+. . :+:+~+~+ . :+. ~+:+ . :+. ~+<+ . . <+ :+~+ :+. ~+~+ . :+ <+~+. :+:+:+ ~+~+:+. :+. . ~+<+ . :+ <+~+. . . ~+. . :+. ~+<+. :+:+~+~+ <+:+:+ ~+~+ . <+~+. . :+~+~+~+:+:+ ~+~+:+ . :+. ~+<+ . :+ ~+ . ~+:+. :+:+~+~+:+. ~+~+:+:+~+~+~+~+:+ ",
+" . :+ ~+~+<+ :+:+~+. :+. :+ . ~+<+. :+ ~+~+. . :+ ~+~+ . :+:+ . ~+<+. :+:+~+~+ . :+ <+~+. . . ~+<+ :+. :+:+~+<+ . . <+:+:+<+ :+. ~+~+ :+. :+ . ~+. . :+:+ <+~+:+:+:+:+ :+:+~+~+:+. :+ <+~+<+. . ~+<+:+. :+. ~+~+. :+~+~+ <+:+:+ ~+~+:+:+ ~+~+. :+. :+~+~+~+:+:+ . ~+<+ :+. :+:+~+<+ . :+ :+ . ~+. . :+:+~+~+. :+ ~+~+. . :+:+~+~+ ",
+" :+<+:+ :+<+~+. :+<+:+. . :+ :+:+:+ . ~+~+. <+:+ :+<+:+<+. :+~+~+<+:+ . ~+<+ :+<+:+ . <+ . :+. . :+ :+~+~+~+ . . :+. <+ <+. :+<+. . . ~+~+. :+. . . ~+~+<+:+ . . :+ :+~+~+ . :+ :+~+~+. :+~+~+:+. . . ~+. :+<+~+. <+:+ . <+:+. ~+~+<+:+ :+. :+ ~+~+. . <+~+ ",
+" . . . . . <+. :+. ~+~+~+. . . <+. :+~+~+. . ~+<+ :+:+ <+. . . <+. :+ :+. ~+~+~+<+ . ~+. . :+~+:+. :+ <+~+~+ . ~+~+:+ :+~+~+ :+. . ~+<+. :+~+~+ . ~+ :+~+~+:+ <+<+:+. :+~+~+. ~+~+. . . . ~+~+. ",
+" :+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+:+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+<+ :+~+~+~+~+~+~+~+~+<+~+~+~+~+~+~+~+~+~+~+~+:+ . ~+~+~+~+~+~+~+~+ <+~+~+~+~+~+~+~+~+:+~+<+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+ ~+~+~+~+<+<+~+~+~+<+ . ~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+. <+~+<+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+. :+~+~+~+~+. ",
+" :+~+~+~+~+~+~+~+~+~+~+~+~+<+<+~+~+~+~+~+~+~+~+~+~+~+:+ :+~+~+~+~+~+~+~+. ~+~+~+~+~+~+~+~+~+~+~+~+:+~+~+~+~+~+~+~+~+~+~+~+<+ . ~+~+~+~+~+~+~+. ~+~+~+<+<+~+~+~+~+~+:+ <+~+~+~+~+~+~+~+ :+~+~+~+~+~+~+~+~+ . ~+~+~+~+:+<+~+~+~+~+~+~+~+~+~+~+<+. ~+~+~+~+~+~+~+~+~+~+~+ :+~+~+~+. :+~+~+~+<+ . ~+~+~+~+~+~+~+~+~+~+~+~+~+. ~+~+~+~+~+~+~+. :+~+~+~+~+<+:+~+~+~+~+~+~+~+~+~+~+~+. . ~+~+~+. ",
+" :+. . . . . . . . . . . . :+. . . . . . . . . . :+ . . . . . . . :+:+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :+:+. . :+ :+. . :+ :+. . . . . . . :+. . . . . . . :+. . :+ :+. . . . . . . . . . . . . . . . . . . . . . . . . :+ :+. . :+ . . . . . . :+. . . . . . . . . . . . . :+ . . :+ . . . . . . . . . . . :+ :+. . ",
+" ",
+" ",
+" ",
+" ",
+" . ~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+",
+" _+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+",
+" . . . ",
+" [ k [ . . . U [+. . . . . . . . . . . . . !+F 4.. . . T . . Y . . . . . . . U [+. . . . . . . . U [+. . . . . . . . . . . W.Z.. ",
+" D @ D . . . . . . _ . . . . . . . . . . . . . . . @ . a.@ . . _ . . }.C.}+@ - m . . v.# @ ... $.4 $.!.. | ..@ . A 0.. . . '.#. .p @ w. . _ . a.@ . V.@ _.@ 4 @ V.a.@ . . . . . . . . . . U - x - $ p 0 . . . . . . . @ . @.@ . ",
+" a.% . | |+. @ . . R ` 1+. . . . . . . . . . i.2+I . 3+R.4 @ . @ . . . v.#.= . *.y.W.. J.)+F @ 5 . . . . . 3+R.4 @ D i . . . . . . @ . . . . @ . . . _.Y.+.a.* 1.' . 4+q.= @ . p ^ #+5+. . . @ . % @ . . 6+Y.. . . 1+= . R ` 1+. @ . . @ . . . . . . . . . . . . . @.V.Y @ Y V.@.. @ . . . . *.y.W.. 1 [.6 *+F 6.).. i.2+I . Y R #.S.Q.9.. . . F H S ^.. L.7+Y i.2+I . D i . . @ . ",
+" h @ n.!.4.. @ . . 2+< v.`.1 [.u E . 1 [.u E . @ +.$.w . A @ :.9.9 @ 4 c . 8+9+<.F y.4 T 0+K U @ 9 _.+ 8 j.@.@ b A @ :.9.C @ . a+<.b+E 5.. @ 6 E . 9 @ 4 c . ,+@ c . D *.k. . @.. } p . @ C O @ . . @ . ! @ . . x I . . 2+< v.`.9 @ 4 A @ 6 E . =.j.@.@ b 1 [.u E . . @ . . @ 6 E . y.4 T 0+K U @ c+# N B x . @ +.$.w . # u.r M.@ ! . c @ U @ . U @ d++.$.w . C @ . . @ . ",
+" . 8 $ Y . . @ . . @ z ` @ A @ 9 x . A @ 9 x . s 2+i.@ . . @ Y . @ . . . # > . 4.@ ;+. D @ . @ . ;+@ O @ . $ 1+. @ Y . @ . @ I D @ . . @ [+x . . @ . . . | / W.. 1+F.Q. . 4.e+[ . @ ; O 1.. . @ . . D . @ 4.. . @ a . 5 3.v z ` @ . @ . . @ [+x . 0 @ . $ 1+A @ 9 x . . @ . . @ [+x . @ ;+. D @ . @ Y @ . Y @ . s 2+i.@ . .@ 7 [ @ ++. ;+j . @ . . @ @.2+i.@ . . @ . . @ . ",
+" . ].$ :.. . @ . . ; 9 ] c+. . . @ . @ . . @ . @ . @ ++A @ . Y @ Y . @ Y . . @ L.. . & R . >+)+. @ Y L.u . 2 g | . Y @ Y Y @ . Q.d ..&.. . @ . @ . . @ Y . . w.y.f+g+Z.@ ;+ . Y ^.[ . . [.W.|+) . . @ . u.@ @ @ #.. . O . . 7 3 V . . V @ 0+c+. . . @ Y . @ . @ . . 2 g | . . @ . @ . Y @ Y . @ . @ . & R . >+)+Y @ Y @ . . @ Y @ ++A @ . p.I h+@ z z . . . b.$.. & O o.@ Q >.A @ . Y @ . . @ . ",
+" #.9.N.@ ^ R @ <.6 @ :.i @ 6 e+[ @ % @ h [ @ % @ h 3 .+v.@ i u.@ N . * 4 4.. i j.q h D.O.P.b+k . @ 7 2 ^ . (.@ i+ u.@ N [+@ L.3 @ ) J J.[ @ % @ h . * 4 4.. j+=.6 f+/ *.. . 3 @ + @ r d+{ f+B . i.@ 1 Y 4.W.@ [ . M.@ . . Y Q.1./.b o ~ W.@ 6 e+. * 4 [ @ % @ h . (.@ i+ [ @ % @ h 3.@ g [ @ % @ h D.O.P.b+k (.@ i.@ M.. @ (.3 .+v.@ i @ %.P.!+U j + q +.7+. . G..+J.@ @ < v.@ i [+@ L.[+@ [+ ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @ . . . . Y k+. . . . . . . 1.l+A A.@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e+n.. . . . . . . . . . . . . . . . . . . . Y k+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b./ @ J ,.. . . . . . . . . . . . . . . . ",
+" 4.@ 4. . . H 1 . . e+7., +.g . . ` . . . H 1 . . . U &.H. ",
+" [+` p. . @ #.. . . . . . . . @ #.. ",
+" . . . . . . . . . . . ",
+" . . . . . . . . . ",
+" . . . . . . . . . W.Z.. W.Z.. . . . U [+. . . . . . . . . T . . . <.!+4.. . <.!+4.. . Y . . . . . . . U [+. . R @ 3+ ",
+" K.@ 3+0+H . . @ . @.@ . @.@ . . . . . . . . . . . . . . . @ . a.@ . . _ . . }.C.}+@ - m . | ..@ . . m+n+<.Q.. m+n+<.Q.. A 0.. 1 @ <.< ,.. . . . a.@ . . b T . _ . ",
+" a.% . | |+Y @ . D @ . D i . . @ . . @ . . v.#.= . *.y.W.. J.)+F @ 5 . . . . . 3+R.4 @ D i . . . . . . @ . . . . @ . . . _.Y.+.a.* 1.' . . @ . . @ ;+}.@ . @ ;+}.@ . % @ . Y @ . c @ Y R #.}.. . . . . . v.#.= . @ . . . . *.y.W.. Y R #.o+. *.y.W.. 4.@ T V @ . . ",
+" h @ n.!.4.. @ _ G.s.. C @ . . @ . . @ . . 8+9+<.F y.4 T 0+K U @ 9 _.+ 8 j.@.@ b A @ :.9.C @ . a+<.b+E 5.. @ 6 E . 9 @ 4 c . ,+@ c . D *.k. . @ . . 1.p+_ @ . 1.p+_ @ . ! @ . . @ ' P m.0.u.r g+=.j.@.@ h+8+9+<.@ . @ 6 E . y.4 T 0+K 0.u.r M.y.4 T 0+K [ @ 1 u.@ 4 c ",
+" . 8 $ Y . . @ A Z.] . . @ . . @ . . @ . . # > . 4.@ ;+. D @ . @ . ;+@ O @ . $ 1+. @ Y . @ . @ I D @ . . @ [+x . . @ . . . | / W.. 1+F.Q. . @ . . q+@ < `.. q+@ < `.. D . @ 4.. . @ . . . .@ 7 B.}.@ . $ Y # > . X.. @ [+x . @ ;+. D @ 2 @ 7 |+@ ;+. D @ . @ . . @ . . ",
+" . ].$ :.. . @ . ^ @ . Y @ . . @ . . @ . . @ L.. . & R . >+)+. @ Y L.u . 2 g | . Y @ Y Y @ . Q.d ..&.. . @ . @ . . @ Y . . w.y.f+g+Z.@ ;+ . @ . . . Z.4 . . . Z.4 u.@ @ @ #.. . O . Y @ Y . p.I h+@ . 2 g | . @ L.. . . @ . @ . & R . >+)+T I h+# & R . >+)+. @ . . @ Y . ",
+" #.9.N.@ ^ a @ = %.f . [+@ L.[+@ [+[+@ [+ . i j.q h D.O.P.b+k . @ 7 2 ^ . (.@ i+ u.@ N [+@ L.3 @ ) J J.[ @ % @ h . * 4 4.. j+=.6 f+/ *.. i.@ 1 ^.@ . ^.@ . . 4.W.@ [ . M.@ . s.@ M. . @ %.P.!+. (.@ i+. i j.q &.[ @ % @ h D.O.P.b+k - %.P.!+r O.P.b+k S @ x.. * 4 4. ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . @ . . . . Y k+. . . . . . . 1.l+A A.@ . . . . . . . . . . . . . . . . . . E 4 . . E 4 . . . . . . e+n.. . . . . . . . . . Y k+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" 4.@ 4. . . H 1 . . e+7., +.g . . ` . . . H 1 . ",
+" [+` p. . @ #.. . . . . . . . @ #.. ",
+" . . . . . . . . . . . ",
+" . . . ",
+" . . . . . . . U [+. . . . W.Z.. . . . U [+. U [+. . . . . . . ",
+" V.@ _.@ 4 @ V.a.@ . . . . . . . @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . _ . . . . . . . @.@ . . _ . . . . . . . . . . . . . . . . . . @ . a.@ . . _ . . _ . a.@ . . @ . . . . . . . . . . . . . . . . . . . . . _ . . @ . . . . . . . ",
+" @.V.Y @ Y V.@.. @ . . . . R ` 1+. . i r+X.| 9. i.2+I . 3+R.4 @ D i . . *.y.W.. S ^.. L.7+Y R #. . v.#.= . *.y.W.. 1 [.6 *+F 6.).. J.)+F @ 5 S ^.. L.7+. @ . . R ` 1+3+R.4 @ . . @ . . *.y.W.. . . . . . . *.y.W.. Y R #. . R ` 1+. @ . . v.#.= . . v.#.= . *.y.W.. J.)+F @ 5 . . . . . 3+R.4 @ D i . . . . . . @ . . . . @ . . . @ . . @ . . . . R ` 1+D i . 3+R.4 @ . . 3+R.4 @ . R ` 4.Y R #.q.J.)+F @ 5 . R ` 1+. v.#.= . @ . D i . i r+X.| 9.. R ` 1+. . . *.y.W.. {.@+! ++. +1 X.. . . . . . R ` 1+3+R.4 , Y R #. ",
+" . @ . . @ 6 E . 2+< v.`.. . H.O.Y @ P.@ +.$.w . A @ :.9.C @ . y.4 T 0+K U @ . U @ e u.r H. . 8+9+<.F y.4 T 0+K U @ c+# N B x . U @ 9 _.+ U @ . U @ 9 @ 4 | < v.`.A @ :.9.. . @ . y.4 T 0+K *.<.b+E 5.y.4 T 0+K 0.u.r H. . 2+< v.`.9 @ 4 Z.9+<.@ . . 8+9+<.F y.4 T 0+K U @ 9 _.+ 8 j.@.@ b A @ :.9.C @ . a+<.b+E 5.. @ 6 E . 9 @ 4 c 9 @ 4 A @ 6 E . 2+< v.`.C @ . A @ :.9.. . A @ :.N 2+< v.`.# u.r H.U @ 9 _.+ :.< v.2 8+9+<.@ 9 @ 4 @.@ . H.O.Y @ f 2+< v.`.. . y.4 T 0+K ` w V @ k s+@ S.1 [.u E . 2+< v.`.A @ :.M.# u.r H. ",
+" . @ . . @ [+x . @ z ` @ . . C @ 4.- . s 2+i.@ . . @ Y . @ . @ ;+. D @ . @ . . @ '+@ 7 B.. . # > . 4.@ ;+. D @ . @ Y @ . Y @ . . @ . ;+@ . @ . . @ . @ . @ z ` @ . @ Y . @ . @ ;+. D @ 6.I D @ . @ ;+. D @ 2 @ 7 B.. . @ z ` @ . @ . # > . X.. . # > . 4.@ ;+. D @ . @ . ;+@ O @ . $ 1+. @ Y . @ . @ I D @ . . @ [+x . . @ . . . @ . . @ [+x . @ z ` @ . @ . . @ Y . @ Y . @ z ` @ .@ 7 B.. @ . ;+@ { z ` M # > . X.. @ . . @ . C @ 4.- . @ z ` @ . . @ ;+. D @ C @ k J f+8.p.. A @ 9 x . @ z ` @ . @ Y . .@ 7 B.. ",
+" Y @ Y . @ . @ . ] c+. . . . d 7.*.. @ ++A @ . Y @ Y Y @ . & R . >+)+. & O o.@ >.}.h+@ . . @ L.. . & R . >+)+Y @ Y @ . . @ Y . @ Y L.u . & O o.@ Y @ Y ] c+. . Y @ Y . @ . & R . >+)+P d ..&.. & R . >+)+T I h+@ . O . . ] c+. . . @ Y @ L.. . 4.1+. . @ L.. . & R . >+)+. @ Y L.u . 2 g | . Y @ Y Y @ . Q.d ..&.. . @ . @ . . @ Y . . @ Y . @ . @ . ] c+. . Y @ . Y @ Y Y @ Y . ] c+. . p.I h+@ . @ Y L.u u c+. . @ L.. . . @ Y Y @ . . d 7.*.. ] c+. . . . & R . >+)+. + t+Y @ Z. . @ . @ . ] c+. . Y @ Y . p.I h+@ Y 1+. ",
+" 3.@ g [ @ % @ h i @ 6 e+ . ++@ . . 3 .+v.@ i u.@ N [+@ L.D.O.P.b+k . G..+J.@ @ J.P.!+. . i j.q h D.O.P.b+k (.@ i.@ M.. @ (.. @ 7 2 ^ . G..+J.@ = * 4 r+@ 6 e+u.@ N [+@ [+D.O.P.b+k 3 @ ) J J.u+O.P.b+k - %.P.!+U.@ . . i @ 6 e+. * 4 i j.q &.'.@ . . i j.q h D.O.P.b+k . @ 7 2 ^ . (.@ i+ u.@ N [+@ L.3 @ ) J J.[ @ % @ h . * 4 4. . * 4 [ @ % @ h i @ 6 e+[+@ L.u.@ N u.@ N . i @ 6 Y.@ %.P.!+. @ 7 2 ^ i @ 6 J.i j.q &.. * 4 a.@ L.. ++@ . . i @ 6 e+ . D.O.P.b+k . Q.z . H h+ [ @ % @ h i @ 6 e+u.@ N . @ %.P.!+D.@ . ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . . . . . . . . . . 1.l+A A.@ . . . . . . . . . e+n.. . . . . . . . . . . . . . . . . . . . . . . . . @ . . . . Y k+. . . . . . . 1.l+A A.@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" 4.@ 4. . e+7., +.g . . ` . 4.@ 4. . e <.. . e+7., +.g . 4.@ 4. "};
diff --git a/pixmaps/arch.xpm b/pixmaps/arch.xpm
new file mode 100644
index 0000000..8f95bc0
--- /dev/null
+++ b/pixmaps/arch.xpm
@@ -0,0 +1,173 @@
+/* XPM */
+static char * arch_xpm[] = {
+"28 24 146 2",
+" c None",
+". c #BAB9B9",
+"+ c #93AFBE",
+"@ c #9CB3BE",
+"# c #B7B8B9",
+"$ c #55A0C6",
+"% c #6AA8C6",
+"& c #9AB1BD",
+"* c #2997CD",
+"= c #3E9ECD",
+"- c #A9B6BC",
+"; c #6DA7C5",
+"> c #1E96D1",
+", c #2498D2",
+"' c #81AEC5",
+") c #AAB5BC",
+"! c #45A0CE",
+"~ c #2599D3",
+"{ c #2499D3",
+"] c #56A5CE",
+"^ c #B0B7BA",
+"/ c #8EB1C2",
+"( c #2F9DD4",
+"_ c #2C9DD5",
+": c #2A9CD4",
+"< c #35A0D5",
+"[ c #8EB3C5",
+"} c #B2B6B9",
+"| c #84AFC5",
+"1 c #5DA8CC",
+"2 c #33A0D6",
+"3 c #319FD6",
+"4 c #64ABCF",
+"5 c #B2B7BA",
+"6 c #8AB2C5",
+"7 c #43A5D7",
+"8 c #5AA9CF",
+"9 c #4AA5D3",
+"0 c #38A2D6",
+"a c #36A1D7",
+"b c #41A4D6",
+"c c #93B4C5",
+"d c #B0B7BB",
+"e c #66ADD1",
+"f c #46A9DA",
+"g c #44A7D9",
+"h c #45A6D7",
+"i c #3FA5D7",
+"j c #3DA4D8",
+"k c #3BA4D8",
+"l c #69ADCF",
+"m c #B3B7BA",
+"n c #8EB4C7",
+"o c #51ADDB",
+"p c #4BABDB",
+"q c #41A6D9",
+"r c #37A1D7",
+"s c #309ED5",
+"t c #329FD6",
+"u c #3FA4D6",
+"v c #91B3C5",
+"w c #AFB7BC",
+"x c #6DB1D3",
+"y c #40A6D9",
+"z c #2B9CD5",
+"A c #1C95D2",
+"B c #1793D1",
+"C c #1A94D1",
+"D c #4FA2CB",
+"E c #7DADC5",
+"F c #2F9DD3",
+"G c #1994D1",
+"H c #1692CF",
+"I c #389ACB",
+"J c #3699CB",
+"K c #1B92D0",
+"L c #7BABC3",
+"M c #A3B3BC",
+"N c #3B9BCA",
+"O c #5FA3C5",
+"P c #ADB5BA",
+"Q c #53A0C7",
+"R c #419DC9",
+"S c #AAB5BB",
+"T c #69A6C3",
+"U c #2B97CC",
+"V c #9DB2BC",
+"W c #90AFBE",
+"X c #2396CF",
+"Y c #1792D0",
+"Z c #73A8C2",
+"` c #9BB1BD",
+" . c #3198CC",
+".. c #439DCA",
+"+. c #B4B8BA",
+"@. c #AFB6BA",
+"#. c #1893D0",
+"$. c #2396CD",
+"%. c #469DC9",
+"&. c #A4B3BB",
+"*. c #61A4C5",
+"=. c #499EC8",
+"-. c #B3B7B9",
+";. c #3F9BCA",
+">. c #489EC8",
+",. c #A3B3BB",
+"'. c #90AFBF",
+"). c #2896CD",
+"!. c #1792CF",
+"~. c #62A4C6",
+"{. c #B0B6BA",
+"]. c #59A2C7",
+"^. c #2695CD",
+"/. c #5CA2C5",
+"(. c #A9B4BA",
+"_. c #B6B8B9",
+":. c #55A1C6",
+"<. c #2095CF",
+"[. c #4A9FC9",
+"}. c #78A9C3",
+"|. c #9FB2BC",
+"1. c #B2B7B9",
+"2. c #B1B6B9",
+"3. c #71A7C2",
+"4. c #439CC9",
+"5. c #1C93D0",
+"6. c #63A5C4",
+"7. c #B8B9B9",
+"8. c #B2BBBD",
+"9. c #B9B9B9",
+"0. c #85ACC0",
+"a. c #2996CD",
+"b. c #89AEC0",
+"c. c #80AAC0",
+"d. c #4B9EC9",
+"e. c #3098CD",
+"f. c #93B0BF",
+"g. c #B8B8B9",
+"h. c #B1B6BA",
+"i. c #81ABC0",
+"j. c #86ADC0",
+"k. c #B5B7B9",
+"l. c #B1B7BA",
+"m. c #7DAAC1",
+"n. c #87ACBF",
+"o. c #AEB6BA",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . + @ . . . . . . . . . . . . . ",
+". . . . . . . . . . . . # $ % . . . . . . . . . . . . . ",
+". . . . . . . . . . . . & * = - . . . . . . . . . . . . ",
+". . . . . . . . . . . . ; > , ' . . . . . . . . . . . . ",
+". . . . . . . . . . . ) ! ~ { ] ^ . . . . . . . . . . . ",
+". . . . . . . . . . . / ( _ : < [ . . . . . . . . . . . ",
+". . . . . . . . . . } | 1 2 3 3 4 5 . . . . . . . . . . ",
+". . . . . . . . . . 6 7 8 9 0 a b c . . . . . . . . . . ",
+". . . . . . . . . d e f g h i j k l m . . . . . . . . . ",
+". . . . . . . . . n o p q r 3 s t u v . . . . . . . . . ",
+". . . . . . . . w x y z A B B B B C D d . . . . . . . . ",
+". . . . . . . . E F G B H I J B B B K L . . . . . . . . ",
+". . . . . . . M N B B H O P M Q B B B R S . . . . . . . ",
+". . . . . . . T H B B U V . . W X B B Y Z . . . . . . . ",
+". . . . . . ` .B B B ..+.. . @.I B #.$.%.&.. . . . . . ",
+". . . . . . *.H B B B =.# . . -.;.B B U >.,.. . . . . . ",
+". . . . . '.).B B !.* ~.} . . {.].^.H B #./.(.. . . . . ",
+". . . . _.:.B <.[.}.|.1.. . . . 2.& 3.4.5.H 6.7.8.9.. . ",
+". . . . 0.a.Q b.} . . . . . . . . . . @.c.d.e.f.8.g.. . ",
+". . . h.i.j.k.. . . . . . . . . . . . . . l.m.n.g.. . . ",
+". . . . 5 . . . . . . . . . . . . . . . . . . o.. . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/pixmaps/billA_0.xpm b/pixmaps/billA_0.xpm
new file mode 100644
index 0000000..d6a632f
--- /dev/null
+++ b/pixmaps/billA_0.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_0_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFFF7",
+"% c #DEDEBD",
+"& c #292929",
+" ",
+" ",
+" ........ ",
+" ..++++++++... ",
+" .+++++++++++++.. ",
+" .++++++++++++++++.. ",
+" .+++++++++++++++.++. ",
+" ..++++++++++++++.+++. ",
+" .++++++++++++++++++++. ",
+" .++++++++++++++++++++++.",
+" .++++++++++@@@@++++++++.",
+" .++@@@@+++@####@+++++++.",
+" .+@####@+@#####@+++++++.",
+" .@####@+@##### @@@@+.+.",
+" @#####@@######@$%.+.. ",
+" @#####@@######@%$... ",
+" @#####@$@#####@$%. ",
+" @@###@$%@####@$%. ",
+" @@@$%$%@@@@$... ",
+" .%.%$%$%$%. ",
+" .$%.%$%$.$. ",
+" ..$%$%$.... ",
+" ..&&.$%$..&&&. ",
+" .&&.&....&&&&&. ",
+" .&.&.&.&&.&&&&&&. ",
+" .&.&.&.&.&&&&&&&&. ",
+" .&&.&&..&.&&.&&&&&. ",
+" ..&.&&...&&&&.&&&&&. ",
+" .$%..&&&..&&&&.&&&... ",
+" .% %.&&&.&&&&&&.&.%$. ",
+" .% .&&&.&&&&&&&.%$%$. ",
+" .. .............%$. ",
+" .&&&&&&&&. .. ",
+" .&&&&&&&&. ",
+" .&&.&&&&. ",
+" .&&.&&&. ",
+" .&&.&&&. ",
+" ........... ",
+" ............. ",
+" ........... ",
+" "};
diff --git a/pixmaps/billA_1.xpm b/pixmaps/billA_1.xpm
new file mode 100644
index 0000000..b442a84
--- /dev/null
+++ b/pixmaps/billA_1.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_1_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFFF7",
+"% c #DEDEBD",
+"& c #292929",
+" ",
+" ",
+" ....... ",
+" .++++++. ",
+" ...++++++++.... ",
+" .+++++++++++++++. . ",
+" .++++++++++++++++.+. ",
+" ..++++++++++++++.++. ",
+" .++++++++++++++++++++. ",
+" ..+++++++++++++++++++++. ",
+" .++++++++++++++++++++++. ",
+" .++++++++++@@@@++++++++. ",
+" .++@@@@+++@####@+++++++. ",
+" .+@####@+@#####@+++++.+. ",
+" .@####@+@######@@@@+.+. ",
+" @#####@@######@$%.+.. ",
+" @#####@@######@%$.. ",
+" @#####@$@#####@$%. ",
+" @@###@$%@####@$%. ",
+" @@@$%$%@@@@$... ",
+" .%.%$%$%$%. ",
+" .$%.%$%$.$. ",
+" ..$%$%$.... ",
+" ..&&.$%$..&&&. ",
+" .&&.&....&&&&&. ",
+" .&.&.&.&&.&&&&&&. ",
+" .&.&.&.&.&&&&&&&&. ",
+" .&&.&&..&.&&.&&&&&. ",
+" ..&.&&...&&&&.&&&&&. ",
+" .$%..&&&..&&&&.&&&... ",
+" .% %.&&&.&&&&&&.&.%$. ",
+" .% .&&&.&&&&&&&.%$%$. ",
+" .. .............%$. ",
+" .&&&&&&&&&&&.. ",
+" .. .&&..&&&&&.. ",
+" ....&&&&....&.... ",
+" ......&&. ...... ",
+" ........ ....... ",
+" ....... ...... ",
+" ... .... ",
+" "};
diff --git a/pixmaps/billA_10.xpm b/pixmaps/billA_10.xpm
new file mode 100644
index 0000000..6f9875b
--- /dev/null
+++ b/pixmaps/billA_10.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_10_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #DEDEBD",
+"# c #000000",
+"$ c #FFFFFF",
+"% c #FFFFF7",
+"& c #292929",
+" ....... ",
+" . .+++++++.... ",
+" .+.++++++++++++. ",
+" ..++++++++++++++++. ",
+" ..+++++++++++++++++. ",
+" .++++++++++++++++++. ",
+" .+++++++++++++++++... ",
+" .+++++++++++++++++++.. ",
+" .++++++++++++++++++++. ",
+" .++++..+++++++++++++. ",
+" .....@.++++++++++++. ",
+" ######.++++++++++. ",
+" #$.@$@..++++++++. ",
+" #$.$@$@.++++++++. ",
+" #.@$@.++++++++. % ",
+" .@$@..++++++. ",
+" .$@$@...++++. ",
+" ...$............ ",
+" ...&&&&&&&&&&&. ",
+" ...&&&&&&&&&&&&&&. ",
+" ...&&&&&&&&&&&&&&&&&. ",
+" .....&&&&&&&&&&&&&&&&&&&.. ",
+" . @.&&&&&&&&&&&&&&&&&&.. ",
+" .@ .&&&&&&&&&&&&&&&&&&. % ",
+" ....&&&&&&&&&&&&&&&&&. ",
+" ......&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&. ",
+" .&&&&&&.....&&. ",
+" .&&....&&&&&.&. ",
+" ...&&&&&&&&&. ",
+" .&&&&&&&&&&. ",
+" .&&&&&.&&&&. ",
+" .&&&&&..&&&&. ",
+" .&&&&&..&&&&. ",
+" .&&&&&. .&&&&. ",
+" .&&&&&. .&&&&. ",
+" ....... ..... ",
+" ......... ...... ",
+" ....... .... ",
+" "};
diff --git a/pixmaps/billA_11.xpm b/pixmaps/billA_11.xpm
new file mode 100644
index 0000000..0e19a4c
--- /dev/null
+++ b/pixmaps/billA_11.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_11_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #DEDEBD",
+"# c #000000",
+"$ c #FFFFFF",
+"% c #FFFFF7",
+"& c #292929",
+" ....... ",
+" . .+++++++.... ",
+" .+.++++++++++++. ",
+" ..++++++++++++++++. ",
+" ..+++++++++++++++++. ",
+" .++++++++++++++++++. ",
+" .+++++++++++++++++... ",
+" .+++++++++++++++++++.. ",
+" .++++++++++++++++++++. ",
+" .++++..+++++++++++++. ",
+" .....@.++++++++++++. ",
+" ######.++++++++++. ",
+" #$.@$@..++++++++. . ",
+" #$.$@$@.++++++++..@. ",
+" #.@$@.++++++++...%. ",
+" .@$@..+++++...... ",
+" .$@$@...+++.&&... ",
+" ...$......&&&&. ",
+" ...&&&&&&&&&. ",
+" ...&&&&&&&&&&.. ",
+" ..&&&&&&&&&&&... ",
+" .&&&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&&&&. % ",
+" .&&&&&&&&&&&&&&&&&. ",
+" .&&&&&&.&&&&&&&&&&&. ",
+" ..&&&..&&&&&&&&&&&&&. ",
+" ..@..&. .&&&&&&&&&&&&&. ",
+" .@ .. . .&&&&&&.....&&. ",
+" .. .&&....&&&&&.&. ",
+" ...&&&&&&&&&. ",
+" .&&&&&&&&&&. ",
+" .&&&&&.&&&&. ",
+" .&&&&&..&&&&. ",
+" .&&&&&..&&&&. ",
+" .&&&&&. .&&&&. ",
+" .&&&&&. .&&&&. ",
+" ....... ..... ",
+" ......... ...... ",
+" ....... .... ",
+" "};
diff --git a/pixmaps/billA_12.xpm b/pixmaps/billA_12.xpm
new file mode 100644
index 0000000..5a1de6e
--- /dev/null
+++ b/pixmaps/billA_12.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_12_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #DEDEBD",
+"% c #FFFFF7",
+"& c #292929",
+" ",
+" ",
+" ",
+" ....... ",
+" .++++++. ",
+" ....++++++++... ",
+" . .+++++++++++++++. ",
+" .+.++++++++++++++++. ",
+" .++.++++++++++++++.. ",
+" .++++++++++++++++++++. ",
+" .+++++++++++++++++++++.. ",
+" .++++++++++++++++++++++. ",
+" .++++++++@@@@++++++++++. ",
+" .+++++++@####@+++@@@@++. ",
+" .+.+++++@#####@+@####@+. ",
+" .+.+@@@@######@+@####@. ",
+" ..+.$%@######@@#####@ ",
+" ..%$@######@@#####@ ",
+" .$%@#####@%@#####@ ",
+" .$%@####@$%@###@@ ",
+" ...%@@@@$%$%@@@ ",
+" .$%$%$%$.$. ",
+" .%.%$%$.$%. ",
+" ....%$%$%.. ",
+" .&&&..%$%.&&.. ",
+" .&&&&&....&.&&. ",
+" .&&&&&&.&&.&.&.&. ",
+" .&&&&&&&&.&.&.&.&. ",
+" .&&&&&.&&.&..&&.&&. ",
+" .&&&&&.&&&&...&&.&.. ",
+" ...&&&.&&&&..&&&..$%. ",
+" .%$.&.&&&&&&.&&&.$ $. ",
+" .%$%$.&&&&&&&.&&&. $. ",
+" .%$............. .. ",
+" ..&&&&&&&&&&&. ",
+" ..&&&&&..&&. .. ",
+" ....&....&&&&.... ",
+" ...... .&&...... ",
+" ....... ........ ",
+" ...... ....... ",
+" .... ... "};
diff --git a/pixmaps/billA_2.xpm b/pixmaps/billA_2.xpm
new file mode 100644
index 0000000..8e13ae6
--- /dev/null
+++ b/pixmaps/billA_2.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_2_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFFF7",
+"% c #DEDEBD",
+"& c #292929",
+" ",
+" ",
+" ........ ",
+" ..++++++++... ",
+" .+++++++++++++.. ",
+" .++++++++++++++++.. ",
+" .+++++++++++++++.++. ",
+" ..++++++++++++++.+++. ",
+" .++++++++++++++++++++. ",
+" .++++++++++++++++++++++. ",
+" .++++++++++@@@@++++++++. ",
+" .++@@@@+++@####@+++++++. ",
+" .+@####@+@#####@+++++++. ",
+" .@####@+@######@@@@+.+. ",
+" @#####@@######@$%.+.. ",
+" @#####@@######@%$... ",
+" @#####@$@#####@$%. ",
+" @###@$%@####@$%. ",
+" @@@$%$%@@@@$... ",
+" .%.%$%$%$%. ",
+" .$%.%$%$.$. ",
+" ..$%$%$..... ",
+" ..&&.$%$..&&&.$ ",
+" .&&.&....&&&&&.$ ",
+" .&.&.&.&&.&&&&&&. ",
+" .&.&.&.&.&&&&&&&&. ",
+" .&&.&&..&.&&.&&&&&. ",
+" ..&.&&...&&&&.&&&&&. ",
+" .$%..&&&..&&&&.&&&... ",
+" .% %.&&&.&&&&&&.&.%$. ",
+" .% .&&&.&&&&&&&.%$%$. ",
+" .. .............%$. ",
+" .&&&&&&&&.. .. ",
+" .&&&&&&&&. ",
+" .&&.&&&&. ",
+" .&&.&&&. ",
+" .&&.&&&. ",
+" .......... ",
+" ............ ",
+" .......... ",
+" "};
diff --git a/pixmaps/billA_3.xpm b/pixmaps/billA_3.xpm
new file mode 100644
index 0000000..4836797
--- /dev/null
+++ b/pixmaps/billA_3.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_3_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #FFFFFF",
+"# c #000000",
+"$ c #DEDEBD",
+"% c #FFFFF7",
+"& c #292929",
+" . ",
+" ......+.. ",
+" ..++.++++++. ",
+" .++++++++++++.. ",
+" .++++++++++++.++. ",
+" .++++++++++++++++. ",
+" ..+++++++++++++++. ",
+" .+++++++++++++++++. ",
+" ..+++++++++++++++++++. ",
+" .++++++++++++++++++++. ",
+" .+++++++++++++++++++. ",
+" .++++++...++++++++++. ",
+" .+++++.@@.+++++++++.. . ",
+" .+++++.@##...++++... .$. ",
+" .++++.@#@@@@...... .%. ",
+" ..++.@#@@@@@.@@@. ..&.. ",
+" ...#@@@.@@@@@@@...&&&&. ",
+" #@#.@@.@@@@@@@.&&&&&. ",
+" ##@.@@.@......&&&&&&. ",
+" ###.@...&&&&&&&&&&. ",
+" ..&&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&.. ",
+" .&&&&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&&&&. ",
+" .&&&&&.&&&&&&&&&&&. ",
+" .&&&...&&&&&&&&&&&&. ",
+" .$.&. .&&&&&......&. ",
+" .$ .. .&&&...&&&&..&. ",
+" .. .&...&&&&&&&&. ",
+" .. ..&&&&&&&&. ",
+" .&&&&&&&&&. ",
+" .&&&&&.&&&&. ",
+" .&&&&&..&&&&. ",
+" .&&&&&..&&&&. ",
+" .&&&&&. .&&&&. ",
+" .&&&&&. .&&&&. ",
+" ....... ..... ",
+" ......... ...... ",
+" ....... .... ",
+" "};
diff --git a/pixmaps/billA_4.xpm b/pixmaps/billA_4.xpm
new file mode 100644
index 0000000..5cf10a8
--- /dev/null
+++ b/pixmaps/billA_4.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_4_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #DEDEBD",
+"# c #000000",
+"$ c #FFFFFF",
+"% c #FFFFF7",
+"& c #292929",
+" ....... ",
+" . .+++++++.... ",
+" .+.++++++++++++. ",
+" ..++++++++++++++++. ",
+" ..+++++++++++++++++. ",
+" .++++++++++++++++++. ",
+" .+++++++++++++++++... ",
+" .+++++++++++++++++++.. ",
+" .++++++++++++++++++++. ",
+" .++++..+++++++++++++. ",
+" .... @.++++++++++++. ",
+" ######.++++++++++. ",
+" #$.@$@..++++++++. . ",
+" #$.$@$@.++++++++..@. ",
+" #.@$@.++++++++...%. ",
+" .@$@..+++++...... ",
+" .$@$@...+++.&&... ",
+" ...$......&&&&. ",
+" ...&&&&&&&&&. ",
+" ...&&&&&&&&&&.. ",
+" ..&&&&&&&&&&&... ",
+" .&&&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&&&. ",
+" .&&&&&&&&&&&&&&&&. % ",
+" .&&&&&&&&&&&&&&&&&. ",
+" .&&&&&&.&&&&&&&&&&&. ",
+" ..&&&..&&&&&&&&&&&&&. ",
+" ..@..&. .&&&&&&&&&&&&&. ",
+" .@ .. . .&&&&&&.....&&. ",
+" .. .&&....&&&&&.&. ",
+" ...&&&&&&&&&. ",
+" .&&&&&&&&&&. ",
+" .&&&&&.&&&&. ",
+" .&&&&&..&&&&. ",
+" .&&&&&..&&&&. ",
+" .&&&&&. .&&&&. ",
+" .&&&&&. .&&&&. ",
+" ....... ..... ",
+" ......... ...... ",
+" ....... .... ",
+" "};
diff --git a/pixmaps/billA_5.xpm b/pixmaps/billA_5.xpm
new file mode 100644
index 0000000..b59a99b
--- /dev/null
+++ b/pixmaps/billA_5.xpm
@@ -0,0 +1,51 @@
+/* XPM */
+static char * billA_5_xpm[] = {
+"58 41 7 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #DEDEBD",
+"$ c #FFFFFF",
+"% c #292929",
+" ",
+" ",
+" ",
+" ... ",
+" .+++.. ",
+" ......@@@@+++. ",
+" .....#$#@$$$$@+++. ",
+" ..$.$.$#@$$$$$@++++. ",
+" ..$.$$.#$@$$$$$@+++++. ",
+" .$.$$.#$#@$$$$$@+++++.. ",
+" ..$..#$#$@@@@@@+++++++. ",
+" ...$#@@@@@++++++++++++. ",
+" .#$#@$$$$@++++++++++++. ",
+" .$#@$$$$$@++++++++++++. ",
+" .$@$$$$$@++++++++++++. ",
+" .#@$$$$$@++++++++++.+. ",
+" .@$$$$$@+++++++++++.. ",
+" .$@$$$@++++++++++++. ",
+" ..#@@@+++++++++++++. ",
+" ..%.+++++++++++++++. ",
+" .%%%%.++++++++.+++... ",
+" .%%%%%..++++++++.... ",
+" .%%%%%%%...++..... ",
+" .%%%%%%%%%%%...... ",
+" .%%%%%%%%%%%%%%%%%.. ",
+" .%%%%%.%%%%%%%%%%%%%. ",
+" ...%%...%%%%%%%%%%%%%. ",
+" ..# ....%%%%%%%%%%%%%%%. ",
+" . #... ...%%%%%%%%%%%.. ",
+" ... .%......%%%.. ",
+" .%%%%%%%.... ",
+" .%%%%%%%%%%%. ",
+" .%%%%%%...%%. ",
+" .%%%%%.%%%%%. ",
+" .%%%%..%%%%. ",
+" .%%%%. .%%%.. ",
+" .%%%%. .%%... ",
+" ....... ..... ",
+" ......... ...... ",
+" ....... .... ",
+" "};
diff --git a/pixmaps/billA_6.xpm b/pixmaps/billA_6.xpm
new file mode 100644
index 0000000..2b0d44b
--- /dev/null
+++ b/pixmaps/billA_6.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_6_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFFF7",
+"% c #DEDEBD",
+"& c #292929",
+" ",
+" ",
+" ....... ",
+" ..++++++. ",
+" ...++++++++.... ",
+" .+++++++++++++++. . ",
+" .++++++++++++++++.+. ",
+" ..++++++++++++++.++. ",
+" .++++++++++++++++++++. ",
+" ..+++++++++++++++++++++. ",
+" .++++++++++++++++++++++. ",
+" .++++++++++@@@@++++++++. ",
+" .++@@@@+++@####@+++++++. ",
+" .+@####@+@#####@+++++.+. ",
+" .@####@+@######@@@@+.+. ",
+" @#####@@######@$%.... ",
+" ..@#####@@######@%$.. ",
+" ..@#####@$@#####@....... ",
+" .$@@###@$%@####@$..%.%$. ",
+" .%$%@@@$%$%@@@@$...$%$.. ",
+" ....&&.%.%$%$%$.&&.%$%. ",
+" .&&&.$%.%$%$.&&&.$%$. ",
+" .&&&.$%$%$.&&&&..... ",
+" .&&&&.$%$..&&&&&&.. ",
+" .&&.&...&&&&&&&.. ",
+" ..&.&.&&.&&&&&&. ",
+" .&.&.&.&&&&&&. ",
+" .&&..&.&&&&&&. ",
+" .&&...&&&&&&&. ",
+" .&&&..&&&&&&&. ",
+" .&&&.&&&&&&&&. ",
+" .&&&.&&&&&&&.. ",
+" ............ ",
+" .&&&&&&&&&&. ",
+" .. .&&..&&&&&... ",
+" ....&&&&....&.... ",
+" ......&&. ...... ",
+" ........ ...... ",
+" ....... ...... ",
+" ... .... ",
+" "};
diff --git a/pixmaps/billA_7.xpm b/pixmaps/billA_7.xpm
new file mode 100644
index 0000000..0e74222
--- /dev/null
+++ b/pixmaps/billA_7.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_7_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFFF7",
+"% c #DEDEBD",
+"& c #292929",
+" ",
+" ",
+" ",
+" ........ ",
+" ..++++++++... ",
+" .+++++++++++++.. ",
+" .++++++++++++++++.. ",
+" .+++++++++++++++.++. ",
+" ..++++++++++++++.+++. ",
+" .++++++++++++++++++++. ",
+" .++++++++++++++++++++++. ",
+" .++++++++++@@@@++++++++. ",
+" .++@@@@+++@####@+++++++. ",
+" .+@####@+@#####@+++++++. ",
+" .@####@+@######@@@@+.+. ",
+" @#####@@######@$%.+.. ",
+" @#####@@######@%$... ",
+" @#####@$@#####@$%. ",
+" @@###@$%@####@$%. ",
+" @@@$%$%@@@@$... $ ",
+" .%.%$%$%$%. ",
+" .$%.%$%$.$. ",
+" ..$%$%$.... ",
+" ..&&.$%$..&&&. ",
+" .&&.&....&&&&&. ",
+" .&.&.&.&&.&&&&&&. ",
+" .&.&.&.&.&&&&&&&&. ",
+" .&&.&&..&.&&.&&&&&. ",
+" ..&.&&...&&&&.&&&&&. ",
+" .$%..&&&..&&&&.&&&... ",
+" .% %.&&&.&&&&&&.&.%$. ",
+" .% .&&&.&&&&&&&.%$%$. ",
+" .. .............%$. ",
+" .&&&&&&&&. .. ",
+" .&&&&&&&&. ",
+" .&&.&&&&. ",
+" .&&.&&&. ",
+" .&&.&&&. ",
+" ........... ",
+" ............. ",
+" ........... "};
diff --git a/pixmaps/billA_8.xpm b/pixmaps/billA_8.xpm
new file mode 100644
index 0000000..0876f0e
--- /dev/null
+++ b/pixmaps/billA_8.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_8_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFFF7",
+"% c #DEDEBD",
+"& c #292929",
+" ",
+" ",
+" ....... ",
+" .++++++.. ",
+" ...++++++++.... ",
+" .+++++++++++++++. . ",
+" .++++++++++++++++.+. ",
+" ..++++++++++++++.++. ",
+" .++++++++++++++++++++. ",
+" ..+++++++++++++++++++++. ",
+" .++++++++++++++++++++++. ",
+" .++++++++++@@@@++++++++. ",
+" .++@@@@+++@####@+++++++. ",
+" .+@####@+@#####@+++++.+. ",
+" .@####@+@######@@@@+.+. ",
+" @#####@@######@$%.... ",
+" ..@#####@@######@%$.. ",
+" ..@#####@$@#####@....... ",
+" .$@@###@$%@####@$..%.%$. ",
+" .%$%@@@$%$%@@@@$...$%$.. ",
+" ....&&.%.%$%$%$.&&.%$%. ",
+" .&&&.$%.%$%$.&&&.$%$. ",
+" .&&&.$%$%$.&&&&..... ",
+" .&&&&.$%$..&&&&&&.. ",
+" .&&.&...&&&&&&&.. ",
+" .&.&.&&.&&&&&&. ",
+" .&.&.&.&&&&&&. ",
+" .&&..&.&&&&&&. ",
+" .&&...&&&&&&&. ",
+" .&&&..&&&&&&&. ",
+" .&&&.&&&&&&&&. ",
+" .&&&.&&&&&&&.. ",
+" ............ ",
+" .&&&&&&&&. ",
+" .&&&&&&&&. ",
+" .&&.&&&&. ",
+" .&&.&&&. ",
+" .&&.&&&. ",
+" ........... ",
+" ............. ",
+" ........... "};
diff --git a/pixmaps/billA_9.xpm b/pixmaps/billA_9.xpm
new file mode 100644
index 0000000..9df0d12
--- /dev/null
+++ b/pixmaps/billA_9.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * billA_9_xpm[] = {
+"58 41 8 1",
+" c None",
+". c #5A395A",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFFF7",
+"% c #DEDEBD",
+"& c #292929",
+" ",
+" ",
+" ",
+" ....... ",
+" .++++++.. ",
+" ...++++++++.... ",
+" .+++++++++++++++. . ",
+" .++++++++++++++++.+. ",
+" ..++++++++++++++.++. ",
+" .++++++++++++++++++++. ",
+" ..+++++++++++++++++++++. ",
+" .++++++++++++++++++++++. ",
+" .++++++++++@@@@++++++++. ",
+" .++@@@@+++@####@+++++++. ",
+" .+@####@+@#####@+++++.+. ",
+" .@####@+@######@@@@+.+. ",
+" @#####@@######@$%.... ",
+" ..@#####@@######@%$.. ",
+" ..@#####@$@#####@....... ",
+" .$@@###@$%@####@$..%.%$. ",
+" .%$%@@@$%$%@@@@$...$%$.. ",
+" ....&&.%.%$%$%$.&&.%$%. ",
+" .&&&.$%.%$%$.&&&.$%$. ",
+" .&&&.$%$%$.&&&&..... ",
+" .&&&&.$%$..&&&&&&.. ",
+" .&&.&...&&&&&&&.. ",
+" .&.&.&&.&&&&&&. ",
+" .&.&.&.&&&&&&.. ",
+" .&&..&.&&&&&&. ",
+" .&&...&&&&&&&. ",
+" .&&&..&&&&&&&. ",
+" .&&&.&&&&&&&&. ",
+" .&&&.&&&&&&&. ",
+" ............ ",
+" .&&&&&&&&&&. ",
+" .. .&&..&&&&&... ",
+" ....&&&&....&.... ",
+" ......&&. ...... ",
+" ........ ...... ",
+" ....... ..... ",
+" ... ... "};
diff --git a/pixmaps/billD_0.xpm b/pixmaps/billD_0.xpm
new file mode 100644
index 0000000..c82dc04
--- /dev/null
+++ b/pixmaps/billD_0.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * billD_0_xpm[] = {
+"24 38 8 1",
+" c None",
+". c #5D3C5D",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #3F5FBF",
+"% c #DFDFBE",
+"& c #292929",
+" .. ... ",
+" .. .+. .. ",
+" ... .++...+. ... ",
+" .+. .+++.++. ..+. . . ",
+" .+++.+++.++..+++.... ",
+"....++++++++++++++.++. ",
+" .++++++++++++++++++. ",
+" .+++++++++++++++++. .",
+" .++++++++++++++++.... ",
+" .++++++++@@@@+++++++. ",
+"...@@@@+++@####@+++++. ",
+".+@#$##@+@#$###@++++.. ",
+"..@#$##@+@##$###@@@@. ",
+"..@$$###@@###$##@#%.+. ",
+" @##$##@@##$#$#@%#.+. ",
+" @##$#@%#@$###@@..+... ",
+" @#$#@#%@####@%.+. ",
+" . @@@#%#%@@@@ .+. .. ",
+". .... %... % .%... .%. ",
+".%.&&&. .... ....... . .",
+". .&&&&.% % ..&&&&. % %.",
+".%.&&&&&....&.&&&&.% % .",
+"...&&&&.&&.&&.&&&&&.% %.",
+" ....&.&&.&.&&&&&&.... ",
+" .&&.&.&.&&&&&.. ",
+" .&&.&..&&&&&. ",
+" .&&&...&&&&&. ",
+" .&&&..&&&&&&. ",
+" .&&&&.&&&&&&. ",
+" .&&&.&&&&&.. ",
+" .. .&.&&.&&....&. ",
+".... .&&.....&&&&&. .. ",
+".....&&&&&&&&&&&&&&. ...",
+" ....&&&&&.....&&&&&....",
+" .....&&.. .&&&.... ",
+" ...... ....... ",
+" .... ..... ",
+" ... "};
diff --git a/pixmaps/billD_1.xpm b/pixmaps/billD_1.xpm
new file mode 100644
index 0000000..476de31
--- /dev/null
+++ b/pixmaps/billD_1.xpm
@@ -0,0 +1,50 @@
+/* XPM */
+static char * billD_1_xpm[] = {
+"24 38 9 1",
+" c None",
+". c #5D3C5D",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FF0000",
+"% c #DFDFBE",
+"& c #9F3F5F",
+"* c #292929",
+" . . ",
+" .... ... ",
+" ... .+++.++. .... ",
+" .+++.+++.++..++..... ",
+"...+++++++++++++..++. ",
+".++++++++++++++++++. ",
+".+++++++++++++++++. ",
+" .++++++++++++++++.... ",
+" .++++++++@@@@+++++++.. ",
+"..@@@@+++@####@+++++. ",
+".@#$##@+@$$###@++++.. ",
+".@#$##@+@##$###@@@@. ",
+".@$$###@@###$##@#%.+. ",
+" @##$##@@##$#$#@%#.+.$$ ",
+" @##$#@%#@$###@$$.$$$.$&",
+" @#$#@#%@####$$ $$.. ",
+". @@@#%#%@@@$$ && .%. ",
+" ..****... % $$&&.. . . ",
+"%.$$$**.... .$&&*. % %. ",
+" $&&$$$$ % .$&&**.% % . ",
+"%.**&&&$$.$$$&****.% %. ",
+"..****&$$$$$&&**$$$$$$ ",
+" .*$&$$$&$$$$$$$$$$$ ",
+" $$$$$$$$$$$$$***&&&&&$",
+"&&&&&&$$$$$$$**$$$$ &",
+" &.$$$$$$&$&&$$$$$ ",
+" $$$$*&&$$$$$$**&&&$$$ ",
+" $$$ &&$*&$$&$**. &&&$$",
+"$$ $&*.$&$&$***. &&$",
+" $& $&$$&$$*.. & ",
+" $ $&$*$&$&$..*. ",
+" .. .*&**$&.&****. .. ",
+".... .**..$&.&*****. ...",
+".....******& &.*****....",
+" ....*****.$ & .***.... ",
+" .....**.. $ ....... ",
+" ...... $ ..... ",
+" .... ... "};
diff --git a/pixmaps/billD_2.xpm b/pixmaps/billD_2.xpm
new file mode 100644
index 0000000..63b1ca9
--- /dev/null
+++ b/pixmaps/billD_2.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * billD_2_xpm[] = {
+"24 38 7 1",
+" c None",
+". c #ff0000",
+"X c #bf3f5f",
+"o c #5d3c5d",
+"O c #000000",
+"+ c #ffffff",
+"@ c #ffff9e",
+" . .X .",
+". . ..X. . . ",
+" . .. ..X. . . ",
+" . .. ..X. . ",
+" . .. oo o.X . ",
+" ..OOOO oo ..X .. ",
+" O+.++O OOOO . .",
+"o O+.++O. O++++O . ",
+"o O..+++OO..+++O . ",
+" O++.++XX++.+++O. . ",
+" . X++.+OXO+++.++O. . ",
+" .@X.+.+OXO++.+.+O ... ",
+" .XXOOO.X.O.+++O. ... ",
+" ...X...X.O++++.....o X",
+" .XX...X..OOO..X..o ",
+" ..X.........X...o. ",
+" XXX........X.XXXX.. ",
+"..............X..X..... ",
+"XXXXX...X.X..X..X...... ",
+" .............X..oooooo",
+".X.. .........X....... ",
+" X XXX............. ",
+" .............. . ",
+" ..XX............. ",
+" ..X.X.........XX.... ",
+" ......X..........Xo .",
+" oo ..XX...........oo @ ",
+" ..oXX...........o ",
+"......oX...X....X.... o ",
+" ....o.XX..X..X.X..@. oo",
+"...X. X....X..X.X.X.. .o",
+"..X..X........X.XX.X. X ",
+"..X X.X....... .XX.X.. X",
+"... .X. .o... .X...X. X",
+" .. .X. ..... .. .X. X",
+" . .. .. .X ",
+" X . .. . .. ",
+" . . . . "};
diff --git a/pixmaps/billD_3.xpm b/pixmaps/billD_3.xpm
new file mode 100644
index 0000000..4ede86c
--- /dev/null
+++ b/pixmaps/billD_3.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char * billD_3_xpm[] = {
+"24 38 5 1",
+" c None",
+". c #ff0000",
+"X c #bf3f5f",
+"o c #5d3c5d",
+"O c #000000",
+". . ",
+" ...X .. ",
+" ...X ....",
+" . ....X .....",
+" .. .. . o..o. .....",
+"...... ..o.... .......",
+" ..... . ..O. . ......",
+" .... .... . ...... ",
+". . .. ... . .... ",
+".. .. .. .... . ",
+"... . . . .... . ",
+" ... ... . ",
+" ... . ",
+" . .o ",
+" . . .... ",
+" .. . .......",
+" .. X... . ...X...",
+"..... ... ........",
+" . X . . ",
+" .... ",
+". . .... ",
+" .. . ..... ",
+". . . . . .... ",
+" . XX ... ",
+" X.. . ....",
+" .... . o ...",
+" ..... .. . o...",
+" . ... . ... . ",
+" .... X ..X . . ",
+" ... . X X.X .. ",
+" ... . X X.X X. ",
+" . . . X.X .. ",
+" . . .X ... ",
+" . .. .X ... ",
+" . . ... .X.. ",
+" . . ... ..X. ",
+" .. . . .... ",
+" ... . . "};
diff --git a/pixmaps/billD_4.xpm b/pixmaps/billD_4.xpm
new file mode 100644
index 0000000..52d33bf
--- /dev/null
+++ b/pixmaps/billD_4.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char * billD_4_xpm[] = {
+"24 38 3 1",
+" c None",
+". c #ff0000",
+"X c #bf3f5f",
+" .. ",
+" .. .. ",
+" .. ....",
+" ... .....",
+" .. . .. ... ",
+" ... . .. ",
+" .. . . ",
+" . . .. ",
+" . ",
+".. . . ",
+" ",
+" ",
+" ",
+" ",
+" .. ",
+" ....",
+" ...",
+" ..",
+" ",
+" ",
+" . . ",
+" ... . ",
+".. . . ",
+".. . ",
+". ",
+" .. ",
+" . . .. ",
+" . . ",
+" . . ..",
+" .. . . .",
+" .. . X .",
+" . . ",
+" . . ",
+" .X .. ",
+" . ... X. ",
+" .. . ... .X ",
+" .. . . ",
+" . . "};
diff --git a/pixmaps/billL_0.xpm b/pixmaps/billL_0.xpm
new file mode 100644
index 0000000..8bb1ec1
--- /dev/null
+++ b/pixmaps/billL_0.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * billL_0_xpm[] = {
+"24 38 8 1",
+" c None",
+". c #5D3C5D",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFBF3",
+"% c #DFDFBE",
+"& c #292929",
+" ....... ",
+" .++++++.. ",
+" ...++++++++.... ",
+" .+++++++++++++++. . ",
+" .++++++++++++++++.+. ",
+" ..++++++++++++++.++. ",
+" .++++++++++++++++++++. ",
+"..+++++++++++++++++++++.",
+".++++++++++++++++++++++.",
+".++++++++++@@@@++++++++.",
+".++@@@@+++@####@+++++++.",
+".+@####@+@#####@+++++.+.",
+" .@####@+@######@@@@+.+.",
+" @#####@@######@$%.... ",
+"..@#####@@######@%$.. ",
+"..@#####@$@#####@.......",
+".$@@###@$%@####@$..%.%$.",
+".%$%@@@$%$%@@@@$...$%$..",
+"....&&.%.%$%$%$.&&.%$%. ",
+" .&&&.$%.%$%$.&&&.$%$. ",
+" .&&&.$%$%$.&&&&..... ",
+" .&&&&.$%$..&&&&&&.. ",
+" .&&.&...&&&&&&&.. ",
+" .&.&.&&.&&&&&&. ",
+" .&.&.&.&&&&&&. ",
+" .&&..&.&&&&&&. ",
+" .&&...&&&&&&&. ",
+" .&&&..&&&&&&&. ",
+" .&&&.&&&&&&&&. ",
+" .&&&.&&&&&&&.. ",
+" ............ ",
+" .&&&&&&&&&&. ",
+" .. .&&..&&&&&... ",
+" ....&&&&....&.... ",
+" ......&&. ...... ",
+" ........ ...... ",
+" ....... ...... ",
+" ... .... "};
diff --git a/pixmaps/billL_1.xpm b/pixmaps/billL_1.xpm
new file mode 100644
index 0000000..5d7cd95
--- /dev/null
+++ b/pixmaps/billL_1.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * billL_1_xpm[] = {
+"24 38 8 1",
+" c None",
+". c #5D3C5D",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFBF3",
+"% c #DFDFBE",
+"& c #292929",
+" ........ ",
+" ..++++++++... ",
+" .+++++++++++++.. ",
+" .++++++++++++++++.. ",
+" .+++++++++++++++.++. ",
+" ..++++++++++++++.+++. ",
+" .++++++++++++++++++++. ",
+".++++++++++++++++++++++.",
+".++++++++++@@@@++++++++.",
+".++@@@@+++@####@+++++++.",
+".+@####@+@#####@+++++++.",
+" .@####@+@######@@@@+.+.",
+" @#####@@######@$%.+.+ ",
+"..@#####@@######@%$... ",
+"..@#####@$@#####@.......",
+".$@@###@$%@####@$..%.%$.",
+".%$%@@@$%$%@@@@$...$%$..",
+"....&&.%.%$%$%$.&&.%$%. ",
+" .&&&.$%.%$%$.&&&.$%$. ",
+" .&&&.$%$%$.&&&&..... ",
+" .&&&&.$%$..&&&&&&.. ",
+" .&&.&...&&&&&&&.. ",
+" .&.&.&&.&&&&&&. ",
+" .&.&.&.&&&&&&. ",
+" .&&..&.&&&&&&. ",
+" .&&...&&&&&&&. ",
+" .&&&..&&&&&&&. ",
+" .&&&.&&&&&&&&. ",
+" .&&&.&&&&&&&.. ",
+" ............ ",
+" .&&&&&&&&. ",
+" .&&&&&&&&. ",
+" .&&.&&&&. ",
+" .&&.&&&. ",
+" .&&.&&&. ",
+" ........... ",
+" ............. ",
+" ........... "};
diff --git a/pixmaps/billL_2.xpm b/pixmaps/billL_2.xpm
new file mode 100644
index 0000000..a2363b0
--- /dev/null
+++ b/pixmaps/billL_2.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * billL_2_xpm[] = {
+"24 38 8 1",
+" c None",
+". c #5D3C5D",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFBF3",
+"% c #DFDFBE",
+"& c #292929",
+" ....... ",
+" .++++++.. ",
+" ...++++++++.... ",
+" .+++++++++++++++. . ",
+" .++++++++++++++++.+. ",
+" ..++++++++++++++.++. ",
+" .++++++++++++++++++++. ",
+"..+++++++++++++++++++++.",
+".++++++++++++++++++++++.",
+".++++++++++@@@@++++++++.",
+".++@@@@+++@####@+++++++.",
+".+@####@+@#####@+++++.+.",
+" .@####@+@######@@@@+.+.",
+" @#####@@######@$%.... ",
+"..@#####@@######@%$.. ",
+"..@#####@$@#####@.......",
+".$@@###@$%@####@$..%.%$.",
+".%$%@@@$%$%@@@@$...$%$..",
+"....&&.%.%$%$%$.&&.%$%. ",
+" .&&&.$%.%$%$.&&&.$%$. ",
+" .&&&.$%$%$.&&&&..... ",
+" .&&&&.$%$..&&&&&&.. ",
+" .&&.&...&&&&&&&.. ",
+" .&.&.&&.&&&&&&. ",
+" .&.&.&.&&&&&&. ",
+" .&&..&.&&&&&&. ",
+" .&&...&&&&&&&. ",
+" .&&&..&&&&&&&. ",
+" .&&&.&&&&&&&&. ",
+" .&&&.&&&&&&&.. ",
+" ............ ",
+" .&&&&&&&&. ",
+" . ..&&&&&... ",
+" ....&&&&&.&.. ",
+" .....&&&.&... ",
+" .....&...... ",
+" ........... ",
+" ... .... "};
diff --git a/pixmaps/billR_0.xpm b/pixmaps/billR_0.xpm
new file mode 100644
index 0000000..19f598a
--- /dev/null
+++ b/pixmaps/billR_0.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * billR_0_xpm[] = {
+"24 38 8 1",
+" c None",
+". c #5D3C5D",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFBF3",
+"% c #DFDFBE",
+"& c #292929",
+" ....... ",
+" ..++++++. ",
+" ....++++++++... ",
+" . .+++++++++++++++. ",
+" .+.++++++++++++++++. ",
+" .++.++++++++++++++.. ",
+" .++++++++++++++++++++. ",
+".+++++++++++++++++++++..",
+".++++++++++++++++++++++.",
+".++++++++@@@@++++++++++.",
+".+++++++@####@+++@@@@++.",
+".+.+++++@#####@+@####@+.",
+".+.+@@@@######@+@####@. ",
+" ....$%@######@@#####@ ",
+" ..%$@######@@#####@..",
+".......@#####@%@#####@..",
+".%$.$..%@####@$%@###@@%.",
+"..%$%...%@@@@$%$%@@@$%$.",
+" .$%$.&&.%$%$%$.$.&&....",
+" .%$%.&&&.%$%$.$%.&&&. ",
+" .....&&&&.%$%$%.&&&. ",
+" ..&&&&&&..%$%.&&&&. ",
+" ..&&&&&&&...&.&&. ",
+" .&&&&&&.&&.&.&. ",
+" .&&&&&&.&.&.&. ",
+" .&&&&&&.&..&&. ",
+" .&&&&&&&...&&. ",
+" .&&&&&&&..&&&. ",
+" .&&&&&&&&.&&&. ",
+" ..&&&&&&&.&&&. ",
+" ............ ",
+" .&&&&&&&&&&. ",
+" ...&&&&&..&&. .. ",
+" ....&....&&&&.... ",
+" ...... .&&...... ",
+" ...... ........ ",
+" ...... ....... ",
+" .... ... "};
diff --git a/pixmaps/billR_1.xpm b/pixmaps/billR_1.xpm
new file mode 100644
index 0000000..4582f35
--- /dev/null
+++ b/pixmaps/billR_1.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * billR_1_xpm[] = {
+"24 38 8 1",
+" c None",
+". c #5D3C5D",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFBF3",
+"% c #DFDFBE",
+"& c #292929",
+" ........ ",
+" ...++++++++.. ",
+" ..+++++++++++++. ",
+" ..++++++++++++++++. ",
+" .++.+++++++++++++++. ",
+" .+++.++++++++++++++.. ",
+" .++++++++++++++++++++. ",
+".++++++++++++++++++++++.",
+".++++++++@@@@++++++++++.",
+".+++++++@####@+++@@@@++.",
+".+++++++@#####@+@####@+.",
+".+.+@@@@######@+@####@. ",
+" +.+.$%@######@@#####@ ",
+" ...%$@######@@#####@..",
+".......@#####@%@#####@..",
+".%$.$..%@####@$%@###@@%.",
+"..%$%...%@@@@$%$%@@@$%$.",
+" .$%$.&&.%$%$%$.$.&&....",
+" .%$%.&&&.%$%$.$%.&&&. ",
+" .....&&&&.%$%$%.&&&. ",
+" ..&&&&&&..%$%.&&&&. ",
+" ..&&&&&&&...&.&&. ",
+" .&&&&&&.&&.&.&. ",
+" .&&&&&&.&.&.&. ",
+" .&&&&&&.&..&&. ",
+" .&&&&&&&...&&. ",
+" .&&&&&&&..&&&. ",
+" .&&&&&&&&.&&&. ",
+" ..&&&&&&&.&&&. ",
+" ............ ",
+" .&&&&&&&&. ",
+" .&&&&&&&&. ",
+" .&&&&.&&. ",
+" .&&&.&&. ",
+" .&&&.&&. ",
+" ........... ",
+" ............. ",
+" ........... "};
diff --git a/pixmaps/billR_2.xpm b/pixmaps/billR_2.xpm
new file mode 100644
index 0000000..f991b4d
--- /dev/null
+++ b/pixmaps/billR_2.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * billR_2_xpm[] = {
+"24 38 8 1",
+" c None",
+". c #5D3C5D",
+"+ c #D0D081",
+"@ c #000000",
+"# c #FFFFFF",
+"$ c #FFFBF3",
+"% c #DFDFBE",
+"& c #292929",
+" ....... ",
+" ..++++++. ",
+" ....++++++++... ",
+" . .+++++++++++++++. ",
+" .+.++++++++++++++++. ",
+" .++.++++++++++++++.. ",
+" .++++++++++++++++++++. ",
+".+++++++++++++++++++++..",
+".++++++++++++++++++++++.",
+".++++++++@@@@++++++++++.",
+".+++++++@####@+++@@@@++.",
+".+.+++++@#####@+@####@+.",
+".+.+@@@@######@+@####@. ",
+" ....$%@######@@#####@ ",
+" ..%$@######@@#####@..",
+".......@#####@%@#####@..",
+".%$.$..%@####@$%@###@@%.",
+"..%$%...%@@@@$%$%@@@$%$.",
+" .$%$.&&.%$%$%$.$.&&....",
+" .%$%.&&&.%$%$.$%.&&&. ",
+" .....&&&&.%$%$%.&&&. ",
+" ..&&&&&&..%$%.&&&&. ",
+" ..&&&&&&&...&.&&. ",
+" .&&&&&&.&&.&.&. ",
+" .&&&&&&.&.&.&. ",
+" .&&&&&&.&..&&. ",
+" .&&&&&&&...&&. ",
+" .&&&&&&&..&&&. ",
+" .&&&&&&&&.&&&. ",
+" ..&&&&&&&.&&&. ",
+" ............ ",
+" .&&&&&&&&. ",
+" ...&&&&&.. . ",
+" ..&.&&&&&.... ",
+" ...&.&&&..... ",
+" ......&..... ",
+" ........... ",
+" .... ... "};
diff --git a/pixmaps/bsd.xpm b/pixmaps/bsd.xpm
new file mode 100644
index 0000000..70dc885
--- /dev/null
+++ b/pixmaps/bsd.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char * bsd_xpm[] = {
+"28 24 6 1 XPMEXT",
+" c #e0ffff",
+". c #cd5c5c",
+"X c #888888",
+"o c #FFFFFF",
+"O c #000000",
+"+ c #cccccc",
+" ",
+" .. ",
+" .X . ",
+" ..... .X ",
+" ........ .X ",
+" .o........X ",
+" .Oo.o...XX ",
+" O ....Oo.. ",
+" O O ...X..... ",
+" O O .+...+... ",
+" O OOO .+++... ",
+" OO OO ..... ",
+" .. .XX. ",
+" .OO .... ",
+" OO.XX.. ",
+" ..... ",
+" .X.... ",
+" ..XXO. ",
+" ....... ",
+" ......... ",
+" ..o... .... ",
+" +...++... . ",
+" ... ..... .. ",
+" .. ",
+"XPMEXT copyright",
+"Copyright © 1988, Marshall Kirk McKusick",
+"All Rights Reserved. Reproduced with permission.",
+"",
+"XPMENDEXT"};
diff --git a/pixmaps/bsdcpu.xpm b/pixmaps/bsdcpu.xpm
new file mode 100644
index 0000000..832b780
--- /dev/null
+++ b/pixmaps/bsdcpu.xpm
@@ -0,0 +1,60 @@
+/* XPM */
+static char * bsdcpu_xpm[] = {
+"55 45 11 1",
+" c #888888",
+". c None",
+"X c #cccccc",
+"o c #bbbbbb",
+"O c #000000",
+"+ c #eeeeee",
+"@ c #cd5c5c",
+"# c #32cd32",
+"$ c #999999",
+"% c #666666",
+"& c #555555",
+" ...................",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...................",
+" XooooooooooooooooooooooooooooooooX ...................",
+" Xo oX ...................",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ...................",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ...................",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +@@+###+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +@O+##O+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +oooooo+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +oOoooo+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +oOoooo+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +oooooo+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +oOoooo+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +oOoooo+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +$$$$$$+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... +$$$$$$+ ....",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ..... ++++++++ ....",
+" Xo oX ..... +$$$$$$+ ....",
+" XooooooooooooooooooooooooooooooooX ..... ++++++++ ....",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..... ....",
+" ..... oooooooo ....",
+"... % % % % % % % % % % % % % % %........ oooooooo ....",
+"... % % % % % % % % % % % % % % %........ ....",
+"......&&%%%%%%%%%%%%%%%%%%%%&&............ .....",
+"......&&&&&%%%%%%%%%%%%%%&&&&&.........................",
+" ...... .........",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX . ... ... ........",
+" Xo+++++++++++++++++++oooXXXXXooooX ... . .....",
+" Xoo+++++++++++++++++++ooXXoXX+++oX ....... X X X .....",
+" Xoooo+++++++++++++++ooooXoooX+++oX ....... X X X .....",
+" X$$$$$$$$$$$$$$$$$$$$$$$X$$$X$$$$X ....... .....",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....... XXXXX .....",
+" oooooooooooooooooooooooooooooooooo ....... XXXXX .....",
+" ....... ....."};
+
diff --git a/pixmaps/bucket.xpm b/pixmaps/bucket.xpm
new file mode 100644
index 0000000..15fbc7d
--- /dev/null
+++ b/pixmaps/bucket.xpm
@@ -0,0 +1,40 @@
+/* XPM */
+static char * bucket_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"24 24 10 1",
+/* colors */
+" c #FFFFFF",
+". c #1A1B1A",
+"X c #191718",
+"o c #ABABAC",
+"O c #595959",
+"+ c #9A9A9A",
+"@ c #A9D0E3",
+"# c #A4A3A4",
+"$ c #83BAD8",
+"% c #355C76",
+/* pixels */
+" ",
+" ",
+" .X.... ",
+" ..X.oOOOOO.X.X ",
+" .X+o@o####OOOOOO.. ",
+" .+++@###oo#OOOOOO. ",
+" .X+++@@$$@$@%%%OOO.. ",
+" ..+@$@$@@@@@$%%%%O.. ",
+" .O.$$$$$$$$@@%%%%.+. ",
+" ..O.X.X.@@$@%.XX.#.. ",
+" .OO.OOX.....##o@#. ",
+" .OO.+O.+++##o##@#. ",
+" .OOOX.+++++o##@@#. ",
+" XOOO+O.+++++##@@oX ",
+" XOOO++OX++++o#@##. ",
+" .OO+++O.X++##@#O. ",
+" .OO+++++O.X.#@#.. ",
+" .OO++++++++O..... ",
+" .OOO+++++++oOOO. ",
+" .OO++++++###@. ",
+" ..OOO+++o#.. ",
+" ........ ",
+" ",
+" "};
diff --git a/pixmaps/centos.xpm b/pixmaps/centos.xpm
new file mode 100644
index 0000000..f18492d
--- /dev/null
+++ b/pixmaps/centos.xpm
@@ -0,0 +1,391 @@
+/* XPM */
+static char * centos_xpm[] = {
+"28 24 364 2",
+" c None",
+". c #8E8E8E",
+"+ c #888888",
+"@ c #9A9994",
+"# c #898989",
+"$ c #878787",
+"% c #AEA491",
+"& c #DEC392",
+"* c #AEA18B",
+"= c #868686",
+"- c #ADA391",
+"; c #E6C17E",
+"> c #F2BD5D",
+", c #E5BE77",
+"' c #AB9F89",
+") c #858585",
+"! c #8D8D8D",
+"~ c #8B8B8B",
+"{ c #9C9C99",
+"] c #9EA393",
+"^ c #9DA292",
+"/ c #9DA192",
+"( c #9B9E92",
+"_ c #B1B1A5",
+": c #D4C89A",
+"< c #E6C37C",
+"[ c #EEBC61",
+"} c #E0B976",
+"| c #D3B69D",
+"1 c #AEA5A6",
+"2 c #9C919A",
+"3 c #9E929B",
+"4 c #9E9A9E",
+"5 c #8A8A8A",
+"6 c #8C8C8C",
+"7 c #B3C193",
+"8 c #B9D870",
+"9 c #B9D970",
+"0 c #AFCD68",
+"a c #BFD28F",
+"b c #C2DC86",
+"c c #B1D25E",
+"d c #CECF86",
+"e c #ECBB62",
+"f c #CD9F98",
+"g c #B76EA4",
+"h c #C28CB5",
+"i c #C190B6",
+"j c #AF659D",
+"k c #AF619C",
+"l c #AA5A96",
+"m c #A6829F",
+"n c #7E7E7E",
+"o c #B4C391",
+"p c #BADC6C",
+"q c #B7D86B",
+"r c #BCD287",
+"s c #C1DB84",
+"t c #B1D757",
+"u c #A9D14D",
+"v c #C8CB7B",
+"w c #EBB85B",
+"x c #CC9C96",
+"y c #B56AA4",
+"z c #B66BA5",
+"A c #BD87B0",
+"B c #BF88B2",
+"C c #AB5698",
+"D c #A54B90",
+"E c #9E7494",
+"F c #757575",
+"G c #B4C390",
+"H c #AFD161",
+"I c #B9D578",
+"J c #BED783",
+"K c #BDD87F",
+"L c #ACD450",
+"M c #A6CF47",
+"N c #C7CA78",
+"O c #EBB554",
+"P c #CB9A93",
+"Q c #B263A0",
+"R c #AD619C",
+"S c #B680A9",
+"T c #B67EA9",
+"U c #AD659D",
+"V c #9F448A",
+"W c #9D7293",
+"X c #ADBB8D",
+"Y c #B9D181",
+"Z c #C8DB9A",
+"` c #BDD780",
+" . c #BAD67A",
+".. c #B9D676",
+"+. c #A3CD42",
+"@. c #C7C976",
+"#. c #EAB450",
+"$. c #CB9891",
+"%. c #AA5B98",
+"&. c #B67FA9",
+"*. c #B077A3",
+"=. c #B277A4",
+"-. c #BF8CB3",
+";. c #AF6CA0",
+">. c #9B7292",
+",. c #BEC5AB",
+"'. c #C1DC84",
+"). c #B1D758",
+"!. c #BDD87D",
+"~. c #B9D577",
+"{. c #B7D473",
+"]. c #B2D06C",
+"^. c #C6C874",
+"/. c #EBB553",
+"(. c #C7978E",
+"_. c #B47CA7",
+":. c #B27AA5",
+"<. c #B278A5",
+"[. c #B573A6",
+"}. c #A03D89",
+"|. c #B0689F",
+"1. c #AE94A8",
+"2. c #747474",
+"3. c #A0949D",
+"4. c #C6CEA2",
+"5. c #AFD654",
+"6. c #B0D655",
+"7. c #AFD655",
+"8. c #BCD87A",
+"9. c #B6D471",
+"0. c #B4D26F",
+"a. c #D6D196",
+"b. c #E5B050",
+"c. c #D5B5A2",
+"d. c #B47EA8",
+"e. c #B37AA6",
+"f. c #B879A9",
+"g. c #A5488F",
+"h. c #9E3A87",
+"i. c #962E7E",
+"j. c #B28AAD",
+"k. c #8E8E98",
+"l. c #848484",
+"m. c #A1919D",
+"n. c #B37FA7",
+"o. c #B9AC98",
+"p. c #ADC768",
+"q. c #ADC667",
+"r. c #ADC668",
+"s. c #ACC566",
+"t. c #BCCA8E",
+"u. c #B5C97E",
+"v. c #BFC69A",
+"w. c #CCB68F",
+"x. c #BDA2A9",
+"y. c #B384AA",
+"z. c #B88FB1",
+"A. c #A56298",
+"B. c #A35E96",
+"C. c #9F5691",
+"D. c #994E8B",
+"E. c #9C7AA5",
+"F. c #7777A4",
+"G. c #8A8A98",
+"H. c #A1979F",
+"I. c #B57BA8",
+"J. c #B1629F",
+"K. c #BC7DAD",
+"L. c #BA7EA7",
+"M. c #B97CA6",
+"N. c #B87BA5",
+"O. c #B779A4",
+"P. c #B678A3",
+"Q. c #BB88AD",
+"R. c #A1989E",
+"S. c #767574",
+"T. c #99999F",
+"U. c #9693B7",
+"V. c #9590B7",
+"W. c #918CB4",
+"X. c #8883AF",
+"Y. c #7F79A9",
+"Z. c #7570A3",
+"`. c #6B69A0",
+" + c #403F87",
+".+ c #666596",
+"++ c #93939B",
+"@+ c #A29AA0",
+"#+ c #B178A4",
+"$+ c #AA5998",
+"%+ c #B178A5",
+"&+ c #A773A2",
+"*+ c #A672A1",
+"=+ c #A570A0",
+"-+ c #A5709F",
+";+ c #A36E9D",
+">+ c #B287AA",
+",+ c #A29BA2",
+"'+ c #828381",
+")+ c #ABAAAD",
+"!+ c #9D9AB2",
+"~+ c #9993A6",
+"{+ c #958FA4",
+"]+ c #8E889F",
+"^+ c #86809A",
+"/+ c #7F7895",
+"(+ c #6F6C99",
+"_+ c #3A3980",
+":+ c #636391",
+"<+ c #7D7D84",
+"[+ c #7B7B7B",
+"}+ c #9F939B",
+"|+ c #AD78A1",
+"1+ c #9980AA",
+"2+ c #716EA3",
+"3+ c #7472A5",
+"4+ c #7472A6",
+"5+ c #6F6DA0",
+"6+ c #908EB0",
+"7+ c #8482A9",
+"8+ c #A6A9B0",
+"9+ c #C0CF9D",
+"0+ c #D6CB9F",
+"a+ c #EACA91",
+"b+ c #E8CB97",
+"c+ c #EDC173",
+"d+ c #EEC170",
+"e+ c #EDBD68",
+"f+ c #E9B75E",
+"g+ c #BAA38A",
+"h+ c #707099",
+"i+ c #71717B",
+"j+ c #656565",
+"k+ c #9F959D",
+"l+ c #A49EB9",
+"m+ c #6A69A0",
+"n+ c #6E6EA4",
+"o+ c #6A699E",
+"p+ c #8787AC",
+"q+ c #7E7EA5",
+"r+ c #7E7DA5",
+"s+ c #B4BCB0",
+"t+ c #BAD876",
+"u+ c #D5D4A3",
+"v+ c #ECCD94",
+"w+ c #EBCA8F",
+"x+ c #ECCA8D",
+"y+ c #F2BF64",
+"z+ c #F2BC59",
+"A+ c #E9B14A",
+"B+ c #D2BB92",
+"C+ c #7B7B82",
+"D+ c #ABABB8",
+"E+ c #8C8CB3",
+"F+ c #616198",
+"G+ c #8281A9",
+"H+ c #7B7AA3",
+"I+ c #7B7BA5",
+"J+ c #7574A2",
+"K+ c #91999B",
+"L+ c #BBD978",
+"M+ c #D5CB86",
+"N+ c #ECC988",
+"O+ c #EBC98A",
+"P+ c #EAC683",
+"Q+ c #EBC47F",
+"R+ c #EAB24C",
+"S+ c #E0B972",
+"T+ c #BEAF95",
+"U+ c #686868",
+"V+ c #8E8EA7",
+"W+ c #8181AC",
+"X+ c #9797B6",
+"Y+ c #7A7AA3",
+"Z+ c #7A79A3",
+"`+ c #7675A4",
+" @ c #414086",
+".@ c #8E9698",
+"+@ c #B5D66B",
+"@@ c #D4CA81",
+"#@ c #F1BD5D",
+"$@ c #ECC783",
+"%@ c #EAC47E",
+"&@ c #E8C078",
+"*@ c #E4C58C",
+"=@ c #E3B86C",
+"-@ c #BFA472",
+";@ c #8E8DA8",
+">@ c #585795",
+",@ c #6C6BA0",
+"'@ c #7979A3",
+")@ c #7574A4",
+"!@ c #424188",
+"~@ c #3A3981",
+"{@ c #8C9495",
+"]@ c #B2D462",
+"^@ c #D3C97E",
+"/@ c #F2BB57",
+"(@ c #F1B954",
+"_@ c #E8C079",
+":@ c #EBC278",
+"<@ c #EFBA5A",
+"[@ c #ECAC38",
+"}@ c #BFA36F",
+"|@ c #8D8DA7",
+"1@ c #525192",
+"2@ c #504F90",
+"3@ c #7575A4",
+"4@ c #7170A2",
+"5@ c #3B3A83",
+"6@ c #34337E",
+"7@ c #8A9393",
+"8@ c #AED25B",
+"9@ c #D2C87B",
+"0@ c #F1B851",
+"a@ c #EBB24B",
+"b@ c #E1BA72",
+"c@ c #EBC072",
+"d@ c #F0AF39",
+"e@ c #ECA931",
+"f@ c #BEA36E",
+"g@ c #9190A6",
+"h@ c #5D5C8F",
+"i@ c #59598E",
+"j@ c #56558B",
+"k@ c #8787A8",
+"l@ c #74739F",
+"m@ c #505184",
+"n@ c #97A195",
+"o@ c #ABD155",
+"p@ c #CAC67A",
+"q@ c #DDB25C",
+"r@ c #DAB878",
+"s@ c #D6B986",
+"t@ c #DAA951",
+"u@ c #D9A84E",
+"v@ c #D7A54B",
+"w@ c #B9A27B",
+"x@ c #969697",
+"y@ c #7E7E82",
+"z@ c #79797D",
+"A@ c #989A97",
+"B@ c #B7C698",
+"C@ c #B4D569",
+"D@ c #A7D243",
+"E@ c #ADD05C",
+"F@ c #BAC78E",
+"G@ c #929288",
+"H@ c #807D76",
+"I@ c #838079",
+"J@ c #81807E",
+"K@ c #838383",
+"L@ c #9FA593",
+"M@ c #AFCA6F",
+"N@ c #9DC936",
+"O@ c #A5C065",
+"P@ c #808472",
+"Q@ c #676767",
+"R@ c #828282",
+"S@ c #9EA492",
+"T@ c #B0C187",
+"U@ c #808672",
+"V@ c #8B8C8A",
+"W@ c #6E6E6E",
+". . . . . . . . . . . . + @ # . . . . . . . . . . . . . ",
+". . . . . . . . . . . $ % & * = . . . . . . . . . . . . ",
+". . . . . . . . . . $ - ; > , ' ) ! ! ! ! . . . . . . . ",
+". . . . ~ { ] ^ / ( _ : < [ } | 1 2 3 3 3 4 5 . . . . . ",
+". . . . 6 7 8 9 0 a b c d e f g h i j k l m n 6 . . . . ",
+". . . . 6 o p q r s t u v w x y z A B C D E F 6 . . . . ",
+". . . . 6 G H I J K L M N O P Q R S T U V W F 6 . . . . ",
+". . . . 6 X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.F 6 . . . . ",
+". . . . + ,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.6 . . . . ",
+". . . $ 3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.. . . . ",
+". . $ m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.) . . . ",
+". . H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++= . . ",
+". . @+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+. . ",
+". . # }+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+$ . . ",
+". . . + k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+j+$ . . . ",
+". . . . + D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+= . . . . ",
+". . . . 6 V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@2.6 . . . . ",
+". . . . 6 ;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@F 6 . . . . ",
+". . . . 6 |@1@2@3@4@5@6@7@8@9@0@a@b@c@d@e@f@F 6 . . . . ",
+". . . . 6 g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@F 6 . . . . ",
+". . . . ! x@y@z@z@z@A@B@C@D@E@F@G@H@I@I@I@J@F ! . . . . ",
+". . . . . 6 $ = = = K@L@M@N@O@P@Q@R@= = = = ~ . . . . . ",
+". . . . . . . . . . . + S@T@U@Q@$ . . . . . . . . . . . ",
+". . . . . . . . . . . . + V@W@$ . . . . . . . . . . . . "};
diff --git a/pixmaps/debian.xpm b/pixmaps/debian.xpm
new file mode 100644
index 0000000..ab469a1
--- /dev/null
+++ b/pixmaps/debian.xpm
@@ -0,0 +1,184 @@
+/* XPM */
+static char * debian_xpm[] = {
+"28 24 157 2",
+" c None",
+". c #FFFFFF",
+"+ c #FBE1E9",
+"@ c #ED95B5",
+"# c #E46290",
+"$ c #E76E99",
+"% c #EC8BAD",
+"& c #EC8FB0",
+"* c #F0AAC3",
+"= c #FAE6ED",
+"- c #FDF7F8",
+"; c #FDF5F7",
+"> c #ED93B3",
+", c #DE3B75",
+"' c #D60751",
+") c #D70751",
+"! c #D70B54",
+"~ c #D70952",
+"{ c #DF3773",
+"] c #E5608F",
+"^ c #EFA4BF",
+"/ c #FCF6F7",
+"( c #F7D3DF",
+"_ c #E56592",
+": c #DA2062",
+"< c #E76C98",
+"[ c #ED96B5",
+"} c #F0A6C0",
+"| c #EE9BB9",
+"1 c #E8749D",
+"2 c #DF3A75",
+"3 c #D70E56",
+"4 c #E66A96",
+"5 c #F9E0E9",
+"6 c #F9DCE6",
+"7 c #E25386",
+"8 c #D91B5F",
+"9 c #E978A0",
+"0 c #F5C2D4",
+"a c #FAE2EA",
+"b c #E87BA2",
+"c c #D60650",
+"d c #E56794",
+"e c #FCF3F5",
+"f c #E97AA1",
+"g c #E0437B",
+"h c #EA7FA5",
+"i c #ED94B4",
+"j c #F2B1C8",
+"k c #DB2566",
+"l c #E45B8C",
+"m c #F7D1DE",
+"n c #FBEBF0",
+"o c #E24E83",
+"p c #FCF1F4",
+"q c #FCF0F4",
+"r c #E3598A",
+"s c #DE3873",
+"t c #F6CEDC",
+"u c #F8D8E3",
+"v c #F1AEC6",
+"w c #F2B4CA",
+"x c #EE9DBA",
+"y c #DA1A5E",
+"z c #ED99B7",
+"A c #FCF7F8",
+"B c #FDFDFD",
+"C c #F3BDD0",
+"D c #D9185D",
+"E c #EA84A8",
+"F c #F3B9CE",
+"G c #EF9BB9",
+"H c #F3BACF",
+"I c #F9E1E9",
+"J c #F7D5E1",
+"K c #F7D4E0",
+"L c #DB2364",
+"M c #EC8EB0",
+"N c #FDFBFB",
+"O c #ED91B1",
+"P c #DA2364",
+"Q c #F6CDDC",
+"R c #FAE7ED",
+"S c #EFA1BD",
+"T c #FEFEFE",
+"U c #DC2C6B",
+"V c #E879A1",
+"W c #E97DA4",
+"X c #DF4179",
+"Y c #F2B0C7",
+"Z c #FDF6F9",
+"` c #FBE8EE",
+" . c #DD2D6C",
+".. c #E979A1",
+"+. c #FFFEFE",
+"@. c #FEFAFB",
+"#. c #EE99B7",
+"$. c #F5C7D7",
+"%. c #FAE4EB",
+"&. c #DD3672",
+"*. c #E97CA3",
+"=. c #E56290",
+"-. c #EE98B7",
+";. c #EF9CB9",
+">. c #FBF1F4",
+",. c #FDF6F7",
+"'. c #EFA3BE",
+"). c #E24D82",
+"!. c #F9E2EA",
+"~. c #EA81A6",
+"{. c #E45C8C",
+"]. c #FFFDFD",
+"^. c #F4BFD2",
+"/. c #E8769F",
+"(. c #FAEAEF",
+"_. c #F0A5C0",
+":. c #FEFCFC",
+"<. c #EC92B2",
+"[. c #DF3C76",
+"}. c #FBECF1",
+"|. c #F9E0E8",
+"1. c #E8759E",
+"2. c #EB89AB",
+"3. c #FDF0F4",
+"4. c #F4C2D4",
+"5. c #E66B97",
+"6. c #F3B5CB",
+"7. c #DB2969",
+"8. c #F7D7E2",
+"9. c #F8DCE6",
+"0. c #ED92B3",
+"a. c #ED97B6",
+"b. c #E4618F",
+"c. c #EFA0BC",
+"d. c #F9DFE8",
+"e. c #E7729C",
+"f. c #F8D9E4",
+"g. c #F1B0C7",
+"h. c #ED98B6",
+"i. c #EE9FBB",
+"j. c #E76F9A",
+"k. c #D60A53",
+"l. c #F4BED1",
+"m. c #DA1D60",
+"n. c #E7709B",
+"o. c #FFFCFD",
+"p. c #E97AA2",
+"q. c #F7CDDC",
+"r. c #E35386",
+"s. c #E0447B",
+"t. c #FAE9EF",
+"u. c #F5C6D7",
+"v. c #E45A8B",
+"w. c #E66A97",
+"x. c #F9E4EB",
+"y. c #EB8AAC",
+"z. c #F0A8C2",
+". . . . . . . . . . + @ # $ % & * = - . . . . . . . . . ",
+". . . . . . . . ; > , ' ) ' ! ~ ! { ] ^ / . . . . . . . ",
+". . . . . . . ( _ ' ) : < [ } | 1 2 ) 3 4 5 . . . . . . ",
+". . . . . . 6 7 ) 8 9 0 . . . . . a b c ) d e . . . . . ",
+". . . . . . f ) g } . . . . . . . . . h ) ) i . . . . . ",
+". . . . ; j k l m . . . . . . . . . . n o 3 9 p . . . . ",
+". . . . q r s t . . . . . u v w m . . . x y z A . . . . ",
+". . . B C D E . . . . . F G H I J q . . K L M N . . . . ",
+". . . . O P Q . . . . R S R . . . T . . R U V . . . . . ",
+". . . . W X e . . . . j Y . . . . . Z . ` ...+.. . . . ",
+". . . . W 7 @.. . . . #.$.. . . . . / . %.&.v . . . . . ",
+". . . . *.=.B . . . . -.;.. . . . >.,.. '.).!.. . . . . ",
+". . . . ~.{.].. . . . ^./.; . (.(.N . a {._.:.. . . . . ",
+". . . . <.[.}.. . . . |.1.2.3.. . . 4.5.h N . . . . . . ",
+". . . . 6.7.8.. . . . e 9.4 $ 0.a.V b.c.. . . . . . . . ",
+". . . . d.U e.n . . . . . f.g.h.i.4.n . . . . . . . . . ",
+". . . . +.j.k.^ . . . . . . . ; - . . . . . . . . . . . ",
+". . . . . l.m.n.o.. . . . . . . . . . . . . . . . . . . ",
+". . . . . . p.U q.. . . . . . . . . . . . . . . . . . . ",
+". . . . . . I r.=.3.. . . . . . . . . . . . . . . . . . ",
+". . . . . . . 4.s.p.t.. . . . . . . . . . . . . . . . . ",
+". . . . . . . . u.v.w.x.. . . . . . . . . . . . . . . . ",
+". . . . . . . . . n y.1.z.@.. . . . . . . . . . . . . . ",
+". . . . . . . . . . . d.j u.I @.. . . . . . . . . . . . "};
diff --git a/pixmaps/gentoo.xpm b/pixmaps/gentoo.xpm
new file mode 100644
index 0000000..1ea1455
--- /dev/null
+++ b/pixmaps/gentoo.xpm
@@ -0,0 +1,322 @@
+/* XPM */
+static char * gentoo_xpm[] = {
+"28 24 295 2",
+" c None",
+". c #B7ADBC",
+"+ c #B3A9BE",
+"@ c #B1A8C3",
+"# c #B2AAC7",
+"$ c #B1AAC9",
+"% c #AEA5C7",
+"& c #B0A5C3",
+"* c #B6ABBE",
+"= c #B1A7C1",
+"- c #BBB3CF",
+"; c #D1CCE2",
+"> c #E2E0EE",
+", c #EDEBF5",
+"' c #EBE9F5",
+") c #D4D1EE",
+"! c #B9B4E8",
+"~ c #A79DDC",
+"{ c #ABA0CD",
+"] c #B6ACBB",
+"^ c #AAA0C8",
+"/ c #C8C4E2",
+"( c #EDECF6",
+"_ c #FFFFFF",
+": c #FDFDFE",
+"< c #F4F4FC",
+"[ c #E8E8FA",
+"} c #CAC7F7",
+"| c #ADA5F3",
+"1 c #A59BDD",
+"2 c #B0A5C6",
+"3 c #AAA0CE",
+"4 c #CEC9EC",
+"5 c #FEFEFE",
+"6 c #F7F7FD",
+"7 c #EBEBFB",
+"8 c #DFDEF8",
+"9 c #D1D0F6",
+"0 c #B7B2F5",
+"a c #A8A1E8",
+"b c #ADA4D0",
+"c c #AA9FCE",
+"d c #CBC4F1",
+"e c #F3F3FC",
+"f c #E1E1F9",
+"g c #E1E0F9",
+"h c #D4D4F6",
+"i c #C8C7F4",
+"j c #B8B5F3",
+"k c #ACA6F0",
+"l c #AFA6D5",
+"m c #B4AABF",
+"n c #B7AFE7",
+"o c #F4F3FE",
+"p c #F9F8FE",
+"q c #DEDCF9",
+"r c #B9B5F5",
+"s c #B9B4EC",
+"t c #D1D0F2",
+"u c #C9C8F4",
+"v c #BDBCF3",
+"w c #B6B3F3",
+"x c #B0ABF2",
+"y c #B3ADD7",
+"z c #B4AABE",
+"A c #ABA1CD",
+"B c #C6C1F8",
+"C c #EFEFFC",
+"D c #C6C0F6",
+"E c #9A8FF0",
+"F c #988DEE",
+"G c #8179C0",
+"H c #9B98BF",
+"I c #BEBCF3",
+"J c #B1ADF4",
+"K c #B8B4F3",
+"L c #BCB6DA",
+"M c #B5ABBD",
+"N c #A99ED3",
+"O c #C1BCF7",
+"P c #F7F6FD",
+"Q c #D3D0F9",
+"R c #9C93EA",
+"S c #998DDE",
+"T c #978BE4",
+"U c #7169AB",
+"V c #8884AC",
+"W c #C7C6F2",
+"X c #AFAAF4",
+"Y c #AEA8F5",
+"Z c #C3BFF5",
+"` c #C5BED8",
+" . c #A89ECE",
+".. c #9F97EE",
+"+. c #CCCAF6",
+"@. c #ECECFB",
+"#. c #F2F1FA",
+"$. c #BCB8DA",
+"%. c #8E88A7",
+"&. c #7C75A0",
+"*. c #8883AD",
+"=. c #B4B2D7",
+"-. c #BDBBF3",
+";. c #B5B2F3",
+">. c #AEAAF4",
+",. c #A7A1F5",
+"'. c #B2ACF7",
+"). c #D5D2F4",
+"!. c #C1BACF",
+"~. c #B3A9C0",
+"{. c #9D92DB",
+"]. c #A29BEA",
+"^. c #BDBAF1",
+"/. c #E0E0F9",
+"(. c #E3E2EC",
+"_. c #CECDE2",
+":. c #D8D7F1",
+"<. c #D3D2F6",
+"[. c #C6C5F4",
+"}. c #BCBAF3",
+"|. c #B4B1F3",
+"1. c #AEA9F4",
+"2. c #A7A0F5",
+"3. c #A097F6",
+"4. c #D1CDFB",
+"5. c #D8D3E5",
+"6. c #B4ABBE",
+"7. c #AFA5C5",
+"8. c #A196D4",
+"9. c #9D93E2",
+"0. c #B3AEEA",
+"a. c #D0CEF3",
+"b. c #EDEDFB",
+"c. c #FAFAFE",
+"d. c #F5F5FC",
+"e. c #E9E8FA",
+"f. c #DCDCF8",
+"g. c #D0D0F6",
+"h. c #C4C3F3",
+"i. c #BAB9F3",
+"j. c #B3B0F3",
+"k. c #ADA7F4",
+"l. c #A69FF5",
+"m. c #9F96F6",
+"n. c #D2CDFB",
+"o. c #D8D5E9",
+"p. c #B2A9BF",
+"q. c #B6ABBD",
+"r. c #9F96D2",
+"s. c #A49DDD",
+"t. c #DCDAF3",
+"u. c #FBFBFE",
+"v. c #F1F1FC",
+"w. c #E5E5F9",
+"x. c #D9D9F7",
+"y. c #CDCDF5",
+"z. c #C2C0F3",
+"A. c #B9B7F3",
+"B. c #B2AEF3",
+"C. c #ABA6F4",
+"D. c #A49DF5",
+"E. c #C3BDF9",
+"F. c #EFEDFB",
+"G. c #BFB9D9",
+"H. c #B2A8BE",
+"I. c #BBB3C7",
+"J. c #DAD6E9",
+"K. c #D5D5F7",
+"L. c #CAC9F4",
+"M. c #BFBDF3",
+"N. c #B7B4F3",
+"O. c #B0ACF4",
+"P. c #AAA4F4",
+"Q. c #F2F1FD",
+"R. c #CECBE2",
+"S. c #A39DC3",
+"T. c #B4ABBC",
+"U. c #C0B8C8",
+"V. c #E1DEE7",
+"W. c #F2F2FC",
+"X. c #E7E7FA",
+"Y. c #C5C5F4",
+"Z. c #C9C6F8",
+"`. c #F3F2FD",
+" + c #D5D2E4",
+".+ c #A09AC1",
+"++ c #ACA3BC",
+"@+ c #C7C0CC",
+"#+ c #E8E5EB",
+"$+ c #F6F6FC",
+"%+ c #ECEBFB",
+"&+ c #D7D6F7",
+"*+ c #CCCBF5",
+"=+ c #C1C0F3",
+"-+ c #B3AFF3",
+";+ c #D0CEF8",
+">+ c #F4F4FD",
+",+ c #CECCDF",
+"'+ c #9F99BE",
+")+ c #A8A0BA",
+"!+ c #C3BBC9",
+"~+ c #EBE8EC",
+"{+ c #EFEEFB",
+"]+ c #DBDBF8",
+"^+ c #BEBBF4",
+"/+ c #DBD9F9",
+"(+ c #F6F6FA",
+"_+ c #C3C0D7",
+":+ c #918AB4",
+"<+ c #A69EB8",
+"[+ c #B8AFBF",
+"}+ c #E1DEE5",
+"|+ c #FCFCFE",
+"1+ c #EFEFFB",
+"2+ c #DEDDF8",
+"3+ c #CBCAF5",
+"4+ c #CDCBF6",
+"5+ c #E7E6FB",
+"6+ c #E7E6EE",
+"7+ c #B2AECA",
+"8+ c #8B84AC",
+"9+ c #A39BB5",
+"0+ c #C8C2D1",
+"a+ c #FCFCFD",
+"b+ c #FAFAFD",
+"c+ c #EEEEFB",
+"d+ c #D6D6F7",
+"e+ c #DCDBF8",
+"f+ c #CFCDDD",
+"g+ c #9A95B7",
+"h+ c #8D86AA",
+"i+ c #A79EB4",
+"j+ c #CBC7D8",
+"k+ c #FCFBFE",
+"l+ c #F8F8FD",
+"m+ c #F1F0FC",
+"n+ c #DEDEF8",
+"o+ c #D0CFF6",
+"p+ c #DADAF8",
+"q+ c #E3E2EB",
+"r+ c #B0ADC6",
+"s+ c #7D77A2",
+"t+ c #918AAA",
+"u+ c #ACA2B7",
+"v+ c #BCB7CE",
+"w+ c #F9F9FD",
+"x+ c #EAEAFA",
+"y+ c #E6E6FA",
+"z+ c #E2E1F9",
+"A+ c #D8D8F7",
+"B+ c #E9E9F0",
+"C+ c #BBB8CD",
+"D+ c #8984A9",
+"E+ c #7D779F",
+"F+ c #9990AC",
+"G+ c #B4ABBA",
+"H+ c #9F99B6",
+"I+ c #DFDDE8",
+"J+ c #E6E5FA",
+"K+ c #F0F0FA",
+"L+ c #E1E0EA",
+"M+ c #B7B5CA",
+"N+ c #8A85A8",
+"O+ c #6F6993",
+"P+ c #8981A2",
+"Q+ c #A69DB2",
+"R+ c #9C94AE",
+"S+ c #9995B5",
+"T+ c #CDCBDA",
+"U+ c #E5E4ED",
+"V+ c #E4E3EB",
+"W+ c #D6D5E1",
+"X+ c #BDBACD",
+"Y+ c #9D99B5",
+"Z+ c #7A749B",
+"`+ c #6A648E",
+" @ c #7E789B",
+".@ c #9B92AB",
+"+@ c #B3AABA",
+"@@ c #928AA6",
+"#@ c #746F96",
+"$@ c #767198",
+"%@ c #6D6790",
+"&@ c #645E8A",
+"*@ c #6B648D",
+"=@ c #7F7799",
+"-@ c #988FA9",
+";@ c #B1A7B8",
+">@ c #A298AF",
+",@ c #8D85A2",
+"'@ c #847B9C",
+")@ c #867F9D",
+"!@ c #938BA5",
+"~@ c #A59CB0",
+"{@ c #B3AAB9",
+". . . . . . . . . + @ # $ % & * . . . . . . . . . . . . ",
+". . . . . . . = - ; > , ' ) ! ~ { ] . . . . . . . . . . ",
+". . . . . . ^ / ( _ _ _ : < [ } | 1 2 . . . . . . . . . ",
+". . . . . 3 4 : _ _ _ _ 5 6 7 8 9 0 a b . . . . . . . . ",
+". . . . c d _ _ _ _ _ _ : e f g h i j k l . . . . . . . ",
+". . . m n o _ _ _ _ _ _ p q r s t u v w x y z . . . . . ",
+". . . A B _ _ _ _ _ : C D E F G H u I w J K L M . . . . ",
+". . . N O P _ _ _ _ : Q R S T U V W v w X Y Z ` . . . . ",
+". . . ...+.@.5 _ _ _ #.$.%.&.*.=.i -.;.>.,.'.).!.. . . ",
+". . . ~.{.].^./.e 5 _ _ 5 (._.:.<.[.}.|.1.2.3.4.5.6.. . ",
+". . . . 7.8.9.0.a.b.c._ : d.e.f.g.h.i.j.k.l.m.n.o.p.. . ",
+". . . . . q.^ r.s.t.c._ u.v.w.x.y.z.A.B.C.D.E.F.G.H.. . ",
+". . . . . . . I.J.: _ 5 6 @.f K.L.M.N.O.P.B Q.R.S.T.. . ",
+". . . . . . U.V._ _ _ u.W.X.f.9 Y.}.;.>.Z.`. +.+++. . . ",
+". . . . . @+#+_ _ _ : $+%+f &+*+=+A.-+;+>+,+'+)+. . . . ",
+". . . . !+~+_ _ _ : 6 {+w.]+9 [.v ^+/+(+_+:+<+. . . . . ",
+". . . [+}+_ _ 5 |+6 1+X.2+h 3+=+4+5+6+7+8+9+. . . . . . ",
+". . . 0+a+5 : b+d.c+X.8 d+y.u e+e f+g+h+i+. . . . . . . ",
+". . . j+k+l+d.m+7 w.n+&+o+p+@.q+r+s+t+u+. . . . . . . . ",
+". . . v+w+b.x+y+z+e+A+8 7 B+C+D+E+F+G+. . . . . . . . . ",
+". . . H+I+e x+J+y+7 K+L+M+N+O+P+Q+. . . . . . . . . . . ",
+". . . R+S+T+U+V+W+X+Y+Z+`+ @.@+@. . . . . . . . . . . . ",
+". . . . @@#@$@#@%@&@*@=@-@;@. . . . . . . . . . . . . . ",
+". . . . . >@,@'@)@!@~@{@. . . . . . . . . . . . . . . . "};
diff --git a/pixmaps/icon.xpm b/pixmaps/icon.xpm
new file mode 100644
index 0000000..19222c7
--- /dev/null
+++ b/pixmaps/icon.xpm
@@ -0,0 +1,85 @@
+/* XPM */
+static char * icon_xpm[] = {
+"64 64 18 1",
+" c None",
+". c #000000",
+"+ c #004888",
+"@ c #0070B0",
+"# c #303860",
+"$ c #40B0E8",
+"% c #503050",
+"& c #FFFFFF",
+"* c #604060",
+"= c #68B0E8",
+"- c #88A070",
+"; c #A8C8E0",
+"> c #D8B050",
+", c #D8B858",
+"' c #F0F0D8",
+") c #F0F8F8",
+"! c #F8F890",
+"~ c #F8F8F8",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" =;== ",
+" =$@@@@@==;@@@@@@@@@@@$= ",
+" $@@@@@@@@@@@=);)))))===$$$@$@@@@ ",
+" @$$@$$=);$$$=);)))));)@$=$$=@$$$@@@ ",
+" @@$$$$=);$$$=);)~';;;;*=@$$$@$$$$$=;;@ ",
+" @@$$@$);$$$=);))'''!',,**=;$$$$$$$;)))@@ ",
+" =@;$@@)=@$$=);))'''!',,,,**@*$$$$$$))));@@ ",
+" =@=$=)=@@@@);)~~''!',,,,,,,@,*$*$$=))~)=$@ ",
+" @@$=)=@@@$)=))~''!',,,,,,,,@-,*,*$;));;@$@ ",
+" @$=);@@@@);))~;'!',,,,,,,,,@-*,,*$~;))=$$$@ ",
+" @=);$$@$)=))~!'!',,,,,,,,,,@-,,,,-~)))$$$$$@ ",
+" @==$$$=)=)));'!',,,,,,,,,,,@-,,,,';));$$$$$@ ",
+" @@@$$=);)));'!',,,,,,,,,,,,@-,,,,~-))$$$$$$@ ",
+" @$@@=)))))=;!',,,,,,,,....,@-,,,!~~))$$$$$$@ ",
+" @$$@)))))=;;',....,,,.&&&&.@-,,,'!')=$$$$$$@ ",
+" @$=);)));)=;,.&&&&.,.&&&&&.@-,,,~!);$$$$$$$@ ",
+" @=);;)););;@*.&&&&.,.&&&&&&##..!;~;$$$$$$$$@ ",
+" @);))););)@@@.&&&&&..&&&&&&#='*)-'=@$$$$$$$@ ",
+" @;;))=);)$$**.&&&&&..&&&&&&#=~*)=)$+@$$$$$$@ ",
+" ;;));;;)$$$**.&&&&&.~.&&&&&#**;;~;*$+@$$$$$@ ",
+" ;)););;$$$$*~..&&&.~'.&&&&.=@*~*~~*@$+@$$$$@ ",
+" =);;;)@$$$$*'~'...~'~'....~#@*~~~**+$$+@$$$@ ",
+" $=;;)$@@$$$****%%*'*'~'~'~*;@)'~'*+++$$+@$$@ ",
+" $;=)@$$@$$$$$*%%%*~'*'~'~*%;@)~~~*++++$$+@$@ ",
+" @;;@@@$@@$$$$$*%%%*~'~'~*%%;@;;;**+++++$$+$$ ",
+" =)@@@@$$@@$$$$*%%%%*~'~**%%;@'~-*$++++++@$;= ",
+" @@@@@@@$@@$$$$@*%%*%***%%%~)='~*$$$++++++@)$ ",
+" @@@@@@@$$@$$$$@@*%*%*%%*%~~~=~*$$$$$$++++==@ ",
+" @@@@@@@$$@@$$$$@*%*%*%*%~~~';'=@$$$$$$+++)+= ",
+" @$@@@@@@$$@$$$$$*%%**%%'~~'~))++@$$$$$$+@;@; ",
+" @@$@@@@@@$@@$$$$*%%**%'~~'~~~-+++@$$$$$$;@== ",
+" @$$@@@@@@$$@$$$$*%%%*~~~'~~'$#++++@$$$$=)+;= ",
+" @$$$@@@@@@$@@$$$*%%~~~~'~~''+#+++++@$$$;;; ",
+" @@$$@@@@@@@$@@$$*%~'~~'~~~'%+%++++++@$$); = ",
+" @@$$$@@@@@@$@@$$=';));;~~-**++@+++++++;;; + ",
+" @@$$$$@@@@@@$@$=);)~'~~~%%%*+#$+++++++)= + ",
+" @@$$$$@@@@@@$@$';))'~~)%%%**+#%$++++++;@ ;+$ ",
+" @@$$$$$@@@@@@$';))'~~~%%%*%*+#%$$@+++;@==;$@; ",
+" =@$$$$$@@@@@=);));'''%%%*%***%%$$$@++)+);$=@ ",
+" ;@$$$$$$@@@@))))~~'~*%******#+$$@@++==+;;$@$ ",
+" ;;$=$$$@@@;;))~~~~*********@++@@@@@)$;;;$+; ",
+" $@$$$@@@@;=)))))=@***@****@@$@+@$$=;$);@+@$$$$ ",
+" $+@@@@@);)))));$$$$$@+@@@@@@$@+@@;@+=@$$@$$$$; ",
+" $@@$@++++;;))));;@@@@@@++@$$@@@@@@@+=@@$$$$$@$$=; ",
+" $$$$$$@@@@+@@++++++++++@@@@++++++@@@@$$$$$$$$@$=; ",
+" =@$@$$$$$$$$$$$$@@@@@$$@@@@@@@$$@$$$$$$$$$$@$= ",
+" $@@$$$$$$$$$$$$$$$$$$$@@$$$$$$$@$$$$$$$$= ",
+" =$$$==$==$$$$$$@@$$$$$$$ ",
+" ==@$$= ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/pixmaps/initfail.xpm b/pixmaps/initfail.xpm
new file mode 100644
index 0000000..fcda707
--- /dev/null
+++ b/pixmaps/initfail.xpm
@@ -0,0 +1,87 @@
+/* XPM */
+static char * wingdows_xpm[] = {
+"28 24 60 1",
+" c None",
+". c #000000",
+"+ c #1E1E1E",
+"@ c #262626",
+"# c #181818",
+"$ c #363636",
+"% c #303030",
+"& c #3E3E3E",
+"* c #656565",
+"= c #7D7D7D",
+"- c #616161",
+"; c #878787",
+"> c #818181",
+", c #3F3F3F",
+"' c #7E7E7E",
+") c #585858",
+"! c #494949",
+"~ c #313131",
+"{ c #717171",
+"] c #2C2C2C",
+"^ c #7C7C7C",
+"/ c #272727",
+"( c #161616",
+"_ c #7F7F7F",
+": c #0C0C0C",
+"< c #838383",
+"[ c #808080",
+"} c #9C9C9C",
+"| c #595959",
+"1 c #3A3A3A",
+"2 c #AAAAAA",
+"3 c #969696",
+"4 c #4E4E4E",
+"5 c #A6A6A6",
+"6 c #939393",
+"7 c #8C8C8C",
+"8 c #8F8F8F",
+"9 c #888888",
+"0 c #3C3C3C",
+"a c #6B6B6B",
+"b c #5F5F5F",
+"c c #6A6A6A",
+"d c #060606",
+"e c #171717",
+"f c #515151",
+"g c #676767",
+"h c #414141",
+"i c #191919",
+"j c #1B1B1B",
+"k c #141414",
+"l c #898989",
+"m c #373737",
+"n c #1F1F1F",
+"o c #A1A1A1",
+"p c #8B8B8B",
+"q c #393939",
+"r c #949494",
+"s c #2B2B2B",
+"t c #434343",
+"u c #919191",
+"............................",
+"............................",
+".+@#$@$$#%@$#&$.............",
+"............................",
+".@#+&#+%*=-;>,;')!'~-{].....",
+"........^/(_:<_:<_.[_:<.....",
+".@+&#$#@}|123456*7@[890.....",
+"........'a!_.<_.<bc-_.<.....",
+"..................d.........",
+".@+]+@#.....................",
+"............................",
+".@&#e.......................",
+"............................",
+".&#&#e......................",
+"............................",
+"............................",
+"........fgh-{]-{]~{~-{].....",
+".ijkijkilm]7nopqr8s[_:<.....",
+"........=t@890890[.[890.....",
+".#&@@@@@ua!_.<_.<bc-_.<.....",
+"..................d.........",
+"............................",
+"............................",
+"............................"};
diff --git a/pixmaps/logo.xcf b/pixmaps/logo.xcf
new file mode 100644
index 0000000..eaa03ee
--- /dev/null
+++ b/pixmaps/logo.xcf
Binary files differ
diff --git a/pixmaps/logo.xpm b/pixmaps/logo.xpm
new file mode 100644
index 0000000..467fc05
--- /dev/null
+++ b/pixmaps/logo.xpm
@@ -0,0 +1,332 @@
+/* XPM */
+static char * logo_xpm[] = {
+"260 65 264 2",
+" c None",
+". c #182931",
+"+ c #000000",
+"@ c #294A84",
+"# c #5AA5D6",
+"$ c #000808",
+"% c #4A8CBD",
+"& c #6B9CC6",
+"* c #1E1E1E",
+"= c #262626",
+"- c #181818",
+"; c #363636",
+"> c #303030",
+", c #3E3E3E",
+"' c #656565",
+") c #7D7D7D",
+"! c #616161",
+"~ c #878787",
+"{ c #818181",
+"] c #3F3F3F",
+"^ c #7E7E7E",
+"/ c #585858",
+"( c #494949",
+"_ c #313131",
+": c #717171",
+"< c #2C2C2C",
+"[ c #7C7C7C",
+"} c #272727",
+"| c #161616",
+"1 c #7F7F7F",
+"2 c #0C0C0C",
+"3 c #838383",
+"4 c #808080",
+"5 c #9C9C9C",
+"6 c #595959",
+"7 c #3A3A3A",
+"8 c #AAAAAA",
+"9 c #969696",
+"0 c #4E4E4E",
+"a c #A6A6A6",
+"b c #939393",
+"c c #8C8C8C",
+"d c #8F8F8F",
+"e c #888888",
+"f c #3C3C3C",
+"g c #6B6B6B",
+"h c #5F5F5F",
+"i c #6A6A6A",
+"j c #060606",
+"k c #180B5C",
+"l c #18085A",
+"m c #170859",
+"n c #699AC4",
+"o c #5A395A",
+"p c #3F518E",
+"q c #27246E",
+"r c #17085A",
+"s c #1A0C5D",
+"t c #2D2E76",
+"u c #49619A",
+"v c #597CAE",
+"w c #292770",
+"x c #5679AD",
+"y c #4C304C",
+"z c #D0D081",
+"A c #CECE84",
+"B c #506EA4",
+"C c #6898C3",
+"D c #2D2F76",
+"E c #587BAE",
+"F c #171717",
+"G c #573757",
+"H c #1A0D5D",
+"I c #6999C3",
+"J c #4A2E4A",
+"K c #323232",
+"L c #170759",
+"M c #25226D",
+"N c #628DBA",
+"O c #634A63",
+"P c #6896C2",
+"Q c #435692",
+"R c #32387D",
+"S c #251F6A",
+"T c #5677AA",
+"U c #5D84B4",
+"V c #618BB8",
+"W c #363E81",
+"X c #846B84",
+"Y c #3E4D8C",
+"Z c #180859",
+"` c #6A9AC5",
+" . c #6A9BC5",
+".. c #6491BD",
+"+. c #6896C1",
+"@. c #638EBB",
+"#. c #1C0E5E",
+"$. c #4E69A0",
+"%. c #9C9CCE",
+"&. c #2A2A73",
+"*. c #1C0E5F",
+"=. c #455A97",
+"-. c #231D69",
+";. c #18085B",
+">. c #1D1260",
+",. c #415490",
+"'. c #6998C2",
+"). c #6897C2",
+"!. c #6592BF",
+"~. c #363F81",
+"{. c #1B0E5F",
+"]. c #17075A",
+"^. c #26236C",
+"/. c #5C82B3",
+"(. c #4A639B",
+"_. c #30367A",
+":. c #191919",
+"<. c #1B1B1B",
+"[. c #1D1461",
+"}. c #25226C",
+"|. c #6794C0",
+"1. c #303379",
+"2. c #180B5B",
+"3. c #5575A9",
+"4. c #496099",
+"5. c #30347A",
+"6. c #1D1361",
+"7. c #5474A8",
+"8. c #28256E",
+"9. c #18095A",
+"0. c #2A2972",
+"a. c #5B7EAF",
+"b. c #190A5B",
+"c. c #41528F",
+"d. c #1F1664",
+"e. c #1A0D5C",
+"f. c #2E3177",
+"g. c #587BAD",
+"h. c #1C105F",
+"i. c #5E86B6",
+"j. c #4F6DA3",
+"k. c #415290",
+"l. c #313579",
+"m. c #1F1665",
+"n. c #33397D",
+"o. c #29266F",
+"p. c #6492BE",
+"q. c #374183",
+"r. c #435792",
+"s. c #5576AB",
+"t. c #4B649E",
+"u. c #1D1463",
+"v. c #190C5C",
+"w. c #6089B7",
+"x. c #3E4C8B",
+"y. c #3C4989",
+"z. c #455894",
+"A. c #28256F",
+"B. c #628CBA",
+"C. c #394284",
+"D. c #3B4889",
+"E. c #495F99",
+"F. c #394385",
+"G. c #FFFFFF",
+"H. c #638FBC",
+"I. c #4F6AA1",
+"J. c #2D2D75",
+"K. c #6795C1",
+"L. c #221B67",
+"M. c #221B69",
+"N. c #190A5A",
+"O. c #5D83B4",
+"P. c #1E1361",
+"Q. c #190B5C",
+"R. c #303378",
+"S. c #465B96",
+"T. c #221967",
+"U. c #1E1362",
+"V. c #4A639D",
+"W. c #5F88B7",
+"X. c #3B4687",
+"Y. c #1A0C5C",
+"Z. c #3B4788",
+"`. c #25216B",
+" + c #353D7F",
+".+ c #4D67A0",
+"++ c #221966",
+"@+ c #5678AB",
+"#+ c #618BBA",
+"$+ c #190C5B",
+"%+ c #231B67",
+"&+ c #5373A7",
+"*+ c #353D80",
+"=+ c #1E1563",
+"-+ c #231C69",
+";+ c #445893",
+">+ c #2C2A72",
+",+ c #6490BD",
+"'+ c #6593BF",
+")+ c #5270A4",
+"!+ c #1B0D5D",
+"~+ c #DEDEBD",
+"{+ c #1E1462",
+"]+ c #404F8D",
+"^+ c #1F1563",
+"/+ c #211865",
+"(+ c #353E81",
+"_+ c #5F87B6",
+":+ c #2C2B73",
+"<+ c #221A68",
+"[+ c #506CA2",
+"}+ c #221A66",
+"|+ c #343A7E",
+"1+ c #1C0F5F",
+"2+ c #1C1060",
+"3+ c #31377B",
+"4+ c #2E3077",
+"5+ c #201764",
+"6+ c #26236D",
+"7+ c #343C7F",
+"8+ c #597DAF",
+"9+ c #3D4A8A",
+"0+ c #5372A7",
+"a+ c #455995",
+"b+ c #475B97",
+"c+ c #5F89B7",
+"d+ c #1D1160",
+"e+ c #292929",
+"f+ c #516FA5",
+"g+ c #3A4485",
+"h+ c #201663",
+"i+ c #1B0F60",
+"j+ c #6694C0",
+"k+ c #3F4E8C",
+"l+ c #25206A",
+"m+ c #292872",
+"n+ c #485E98",
+"o+ c #5272A6",
+"p+ c #475D97",
+"q+ c #201866",
+"r+ c #3A4787",
+"s+ c #5B80B2",
+"t+ c #1D1261",
+"u+ c #2A2970",
+"v+ c #4F6BA2",
+"w+ c #6390BC",
+"x+ c #2C2C74",
+"y+ c #6A9BC4",
+"z+ c #5D83B3",
+"A+ c #1D1362",
+"B+ c #455A95",
+"C+ c #384283",
+"D+ c #1B0F5F",
+"E+ c #4E6AA2",
+"F+ c #3F4F8E",
+"G+ c #3E4F8D",
+"H+ c #455994",
+"I+ c #445794",
+"J+ c #3A4586",
+"K+ c #364083",
+"L+ c #4E69A1",
+"M+ c #1A0D5E",
+"N+ c #5B80B1",
+"O+ c #25216C",
+" ",
+" ",
+" ",
+" ",
+" . + + + + + + + + + + + + @ # $ + + @ ",
+" # . + + + + + + + + + + + + % # @ + + @ ",
+" # $ + + + + + + + + + + + + # @ + + $ # ",
+" & + + + + + + + + + + + + . # % + + $ # ",
+" @ + + + + + + + + + + + + @ # $ + + % ",
+" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ + + + + + + + + + + + + % # $ + + @ ",
+" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # . + + + + + + + + + + + + # @ + + @ # ",
+" + * = - ; = ; ; - > = ; - , , ; + + + + + + + + + + + + + & + + + + + + + + + + + + . @ + + $ # ",
+" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + % + + + + + + + + + + + + . # % + + $ & ",
+" + = - * , - * > ' ) ! ~ { ] ] ~ ^ / ( ^ _ ! : < + + + + + @ + + + + + + + + + + + + % & + + + & ",
+" + + + + + + + + [ } | 1 2 3 3 1 2 3 1 + 4 1 2 3 + + + + + # . + + + + + + + + + + + + & # . + + @ ",
+" + = * , - ; - = 5 6 7 8 9 0 0 a b ' c = 4 d e f + + + + + & + + + + + + + + + + + + . # # . + + @ ",
+" + + + + + + + + ^ g ( 1 + 3 3 1 + 3 h i ! 1 + 3 + + + + + % + + + + + + + + + + + + @ % + + . # & & & & & & & & & & & & & ",
+" + + + + + + + + + + + + + + + + + + + j + + + + + + + + + @ + + + + + + + + + + + + % @ + + $ # & k l l l l l l l l l m n & & & ",
+" + = * < * = - + + + . o o o o o + + + + + + + + + + + + + # . + + + + + + + + + + + + % & + + + & & p q r l l l l l s t u & & v w x ",
+" + + + + + + + + + y z z z A z z . + + + + + + + + + + + + # $ + + + + + + + + + + + + # & + + + @ & & B l l l l l C & & & D l E ",
+" + = , - F + o o o z z z z z z z z o o G + + + + + + + + + & + + + + + + + + + + + + . # # . + + @ & l l l l l & & H r I ",
+" + + + + + o z z z z z z z z z z z z z z z + + J K + + + + @ + + + + + + + + + + + + @ @ + + . # & L l l l M N l H & ",
+" + , - , - o z z z z z z z z z z z z z z z z O z o + + + + @ + + + + + + + + + + + + % % + + . # P l l l l Q & R l S & ",
+" + + + + + o o z z z z z z z z z z z z z z o z z o + + + + # . + + + + + + + + + + + $ # & + + + & T l l l l U & V L l W & ",
+" + + + + O z z z z z z z z z z z z z z z z z z z z X + + + & + + + + + + + + + + + + . # $ + + & & Y l l l Z ` & & & ...+.& & & & & & & & & @.#.l l $. ",
+" + + + o o z z z z z z z z z z z z z z z z z z z z z %.+ + % + + + + + + + + + + + + . # # . + + @ & &.l l l *.& & +.=.-.k m l l ;.>.,.n & & & & & & & & ` @.'.& & & & & & & & & & & ` @.'.& & & & & & ).N n & & & & & & & & & & & & & & & !.~.{.].^.).& I /.(._.l l l l ..& & & & & & ",
+" + :.<.o z z z z z z z z z z z z z z z z z z z z z z O + + @ + + + + + + + + + + + + % @ + + @ # & [.l l l }.& & |.1.Z l l l l l l l l l 2.3.& & ).4.5.6.Z l 7. & .(.8.l l Z 9.0.V & & ).a.4.5.6.Z l 7. & .(.8.b.l l Z 9.0.V & & |.c.d.l l l l e.f.N & g.l l l h. & i.j.k.l.m.r l M & $.;.l l l l n.& o.l l l l l l l l l l l l l p. ",
+" + + + o z z z z z z z z z z + + + + z z z z z z z z O + + # . + + + + + + + + + + + $ O + + $ # & ;.l l l q.& & & r.l l l 9.5.s.p.N t.u.l l l l U & W l l l l l l |. .r.v.l l l l l l l l w.& W l l l l l l l |. .r.v.l l l l l l l l l w.& & .x.].l l l l l l l l Z y.z.l l l A. B.l l l l l l l C.D.Z l l l l l m.& E.F.F.q l l l s F.F.F.F.F.x.& ",
+" + - , o z z + + + + z z z + G.G.G.G.+ z z z z z z z o + + & + + + + + + + + + + + % & + + . # H.l l l l I. & n J.l l l &.K.& & .L.l l l M.& k.*.l l l l N.O.P.l Q.R.7...S.9.l l l T.& k.*.Z l l l l N.O.P.l Q.R.7.H...S.9.l l l T.& & p.U.l l l l L.V.W.P U X.b.l Y.l l l Z. K.=.`.l l l l l 8.l l r l l l l J.& & +l l l t & ",
+" + + + O z + G.G.G.G.+ z + G.G.G.G.G.+ z z z z z o z X + + % + + + + + + + + + . & + + + % .+l l l l .. & ` ++l l l x.& & & E l l l ].& & & L l l l L m r y.n & & .+l l l l & & & @+L l l l L m r y.n & & .+l l l l & & #+v.l l l $+a.& & & +.%+l l l l &+ & & *+l l l l l =+#+& x %+L `.K.& & -+l l l ;+& ",
+" + + + + %.. G.G.G.G.+ z + G.G.G.G.G.G.+ + + + z o z + + + @ + + + + + + + @ # # . + + % & ~.l l l r & & >+l l l W & #+l l l Z & %+l l l l -.,+& K.l l l ].& & %+l l l l -.,+& K.l l l ].& & '.#.l l l h.'+& & ` ].l l Z +. )+l l l l !+K.& & & & & & & e.l l l /. ",
+" + + + + + . G.G.G.G.G.+ + G.G.G.G.G.G.+ G.~+o o O %.+ + + @ + + + + + $ # @ + + $ # & `.l l l {+& & ]+l l l ^+ . & ]+l l l 6.& /+l l l (+& & _+l l l !+& & /+l l l (+& & _+l l l !+& & w l l l 9.@.& W.l l l Q.& E.l l l l g.& '.Z l l l . ",
+" + + + X O . G.G.G.G.G.+ + G.G.G.G.G.G.+ ~+G.o O + + + + + # $ + + + + & @ + + + + # & #.l l l :+& & p.Z l l L N & & W.Z l l Z x & Y.l l l /. u l l l <+& & Y.l l l /. u l l l <+& & @+l l l l [+& & p l l l }+& & |+l l l 1+& T l l l 2+& ",
+" o o + G.G.G.G.G.+ G.+ G.G.G.~+~+. O O O O o o o % + + + % % + + + + + . # ` Z l l l ]+& & &.l l l w & & & 4.9.l l m V.& l l l Z ` & 3+l l l 4+& ).l l l Z ` & 3+l l l 4+& & 5+l l l m.& & 6+l l l 3+& & M.l l l 7+& & x.l l l w & ",
+" o G.+ + G.G.G.+ G.~++ G.G.G.G.+ G.o o ~+o ~+G.o # . + + @ & + + + + + + + @ /.l l l l x +.l l l l 8+& & & & ..9+P.l l l T._+& l l l 1+& & <+l l l Q & T l l l 1+& & <+l l l Q & i.l l l l [+& & s l l l E. & s l l l 0+ & o.l l l x.& ",
+" o ~+G.~++ + + G.~+G.~++ + + + G.o o o G.~+G.o o @ + + $ # # $ + + + + + + + + % a+l l l l '. & ;+l l l h.'+U 0+b+n.<+k l l l r w &+& & & l l l 6+& & Y.l l l a. & x.l l l 6+& & Y.l l l a. & C.l l l N. . H.l l l l c+ '.Z l l m C & d+l l l s. ",
+" o o o o e+e+o ~+o ~+G.~+G.~+G.o e+e+o ~+G.~+o % + + . & # @ + + + + + + + + + + & & 1.l l l Y.& & & & L.l l l l l l l l l Z e.-.(+f+` & & & l l l g+& '.l l l r n & w l l l g+& '.l l l r n & h+l l l A.& & a+l l l ]. . @+l l l i+& .L l l r '. ",
+" o e+e+e+o G.~+o ~+G.~+G.o e+e+e+o G.~+G.o & + + + & @ + + + + + + + + + + + . # & Q.l l l 3+& & g.Z ].j+l l l l c+& & .l l l '+ & k+l l l l+& .].l l l '+ & k+l l l l+& & L l l l 8+ & H.r l l l m+& & 0.l l l g+& =.l l l S & ",
+" o e+e+e+o G.~+G.~+G.o e+e+e+e+o o o o o & $ + + % % + + + + + + + + + + + + . # +.Z l l l n+ & #+9.l D & r l l l p. W.l l b.& & :+l l l W & W.l l l b.& & :+l l l W & & l l l l .. & J.l l l l x.& & 6.l l l j. & R.l l l (+& ",
+" o e+e+e+e+o G.~+G.o o e+e+e+e+e+e+o o # . + + @ @ + + + + + + + + + + + + % 3.l l l l _+ & /.2.l r #+& r l l l o+ p+l l q+& & /+l l l V. p+l l l q+& & /+l l l V. & Z l l l K. & U r l l l l )+ & l l l l p. & %+l l l p+ ",
+" o e+e+o e+o o o e+e+e+e+e+e+e+o o . + + @ # . + + + + + + + + + + + + & & r+l l l m . & )+].l l `.& & /+l l l r+& & & & & _.l l 1.& & H l l l s+ & _.l l l 1.& & H l l l s+ & t+l l l x & P !+l l l l l #+ B.l l l b.& & *.l l l a. ",
+" o e+o e+o e+e+o e+e+e+e+e+e+o @ + + $ # # $ + + + + + + + + + + + $ & & ++l l l 2.& & '.1.Z l l l 8+& & E.l l l v.I & & & N u+v+& & T.l l =. & ].l l l +. & T.l l l =. & ].l l l +. & |+l l l |+& & ).T.l w r l l l .. & K.& V.l l l h+& & l l l l K. & & & ",
+" o e+o e+o e+o e+e+e+e+e+e+o & + + + & & + + + + + + + + + + + + . & w+l l l l s & & ` =.Y.l l l l d.& .^+l l l -+P & & & _+x+Z l M.y+ & 2.l l U & l l l l x & & .k+C & 2.l l l U & l l l l x & & .k+C ..Z l l L w.& & & i.{.l 5+n Y.l l l _.& & 7+l /.& 7+l l l t & & Z l l l f+& & z+A+B+ ",
+" o e+e+o o e+o e+e+e+e+e+e+o & $ + + & @ + + + + + + + + + + + + @ & & '.%+l l l l Z c.` & & ` T R 2.l l l l l l I.& & ..H l l l k (+$._+'.H.T C+=+Z l Q.u & & K.Z l l . & >.l l l D+i.8+++l E+ K.Z l l l . & >.l l l D+i.8+++l E+& F+l l l Z ]+W.H.I.`.r l }++.& 0.l l l l 6.l+l -+` & -+l l l ,.& & d+l l l $+)+!.B 5.Z Z G+ ",
+" o e+e+o o o e+e+e+e+e+e+e+o # . + + @ @ + + + + + + + + + + + + % & b+t Q.l l l l l l l l 1+2+l l l l l l l l l H . & |.M l l l l l l l l l l l 6.H+I & o+l l D+& & 0+l l l l l l l I+& o+l l l D+& & 0+l l l l l l l I+& & J+l l l l l l l l m K+ .& & N L l l l l l 5.I & & v.l l l 8+ & 0+r l l l l l l l k L+& ",
+" o e+e+e+o o e+e+e+e+e+e+e+o . + + @ # $ + + + + + + + + + + + + # ).l l l l l l l l l l l l l l l l l l l l l l ,.& & & a.m+Y.Z l l r 9.++g+U & & X.l l 8.& & [+M+Z l l w c+& X.l l l 8.& & [+M+Z l l w c+& & N+O+l l l Z e.R H.& & s+t+r l ;.o.& C r l l r I & x L.L l l r d+J+'.& ",
+" o e+e+e+o e+e+e+e+e+e+e+e+o @ + + . # & + + + + + + + + + + + + . & & & & & & & & & & & & & & & & & & & & & & & & & & & & n @... .& & & & & & & & & & +.!.& & & & & & & & & & & +.!.& & & & & & |.H. .& & & & '.'+& & & & & & & & & & & K.H. .& & ",
+" o e+e+e+o e+e+e+e+e+e+e+o o % + + + # % + + + + + + + + + + + + @ ",
+" o o o o o o o o o o o o & + + + % @ + + + + + + + + + + + + @ ",
+" o e+e+e+e+e+e+e+e+e+e+o # . + + % # . + + + + + + + + + + + + & ",
+" o o o e+e+o o e+e+e+e+e+o o o . + + . & + + + + + + + + + + + + . # ",
+" o o o o e+e+e+e+o o o o e+o o o o @ + + . # % + + + + + + + + + + + + . # ",
+" o o o o o o e+e+o o o o o o o % + + $ & @ + + + + + + + + + + + + % @ @ @ @ @ @ @ ",
+" o o o o o o o o o o o o o o & + + + & @ + + + + + + + + + + + + % @ @ @ @ @ @ @ @ @ ",
+" o o o o o o o o o o o o o & $ + + % # $ + + + + + + + + + + + $ & @ @ @ @ @ @ ",
+" o o o o o o o . + + @ & + + + + + + + + + + + + . @ @ @ @ @ @ @ @ @ @ ",
+" # @ + + . # @ + + + + + + + + + + + + @ @ @ @ @ @ @ @ @ ",
+" @ + + $ & @ + + + + + + + + + + + + % @ @ @ @ @ @ @ @ @ @ ",
+" % + + + % # $ + + + + + + + + + + + + # @ @ @ @ @ @ @ @ @ @ ",
+" & + + + % & $ + + + + + + + + + + + . & @ @ @ @ @ @ @ @ ",
+" # @ $ $ @ % + + + . $ $ $ $ $ $ . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+" @ @ @ @ @ @ @ @ @ ",
+" ",
+" ",
+" "};
diff --git a/pixmaps/maccpu.xpm b/pixmaps/maccpu.xpm
new file mode 100644
index 0000000..12cc6d4
--- /dev/null
+++ b/pixmaps/maccpu.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * maccpu_xpm[] = {
+"55 45 10 1",
+" c None",
+". c #888888",
+"X c #bbbbbb",
+"o c #cccccc",
+"O c #000000",
+"+ c #eeeeee",
+"@ c #999999",
+"# c #666666",
+"$ c #669933",
+"% c #cc0033",
+" .............................. ",
+" .XooooooooooooooooooooooooooooX. ",
+" .XooooooooooooooooooooooooooooooX. ",
+" .oX............................Xo. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. ................ ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .o+++oooX@Xoo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. ..............X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .o++.#####+oo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. ..............X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .o+++oooX@Xoo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .o+++oooX@Xoo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .o+++oooX@Xoo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .o+++oooX@Xoo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .o+++oooX@Xoo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .oo+ +oooXXXo.X. ",
+" .o.OOOOOOOOOOOOOOOOOOOOOOOOOOOO.o. .o+++oooX@Xoo.X. ",
+" .oX............................Xo. .oo+ +oooXXXo.X. ",
+" .oooooooooooooooooooooooooooooooo. .o+++oooX@Xoo.X. ",
+" .Xoooooooooooooo$%ooooooooooooooX. .oo+ +$%oXXXo.X. ",
+" .XooooooooooooooooooooooooooooX. .o+++oooX@Xoo.X. ",
+" ......XXXXXXXXXXXXXXXXXX...... .oo+ +oooXXXo.X. ",
+" ###..@@@@@@@@@@@@..### .o+++oooX@Xoo.X. ",
+" ###################### ................ ",
+".................................... ",
+".o+++++++++++++++++++++++ooooo++++o.. ... ",
+".o+++++++++++++++++++++++oo+oo++++o. .. . . ",
+".o+++++++++++++++++++++++o+++o++++o. ... .... ",
+".o@@@@@@@@@@@@@@@@@@@@@@@o@@@o@@@@o. .+X. ",
+".oooooooooooooooooooooooooooooooooo. .X+XX. ",
+".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .+ooX. ",
+".................................... .+ooX. ",
+" .o+oX. ",
+" .... "};
diff --git a/pixmaps/mandriva.xpm b/pixmaps/mandriva.xpm
new file mode 100644
index 0000000..8210bfd
--- /dev/null
+++ b/pixmaps/mandriva.xpm
@@ -0,0 +1,268 @@
+/* XPM */
+static char * mandriva_xpm[] = {
+"28 24 241 2",
+" c None",
+". c #B8B8B8",
+"+ c #BBB7AD",
+"@ c #C5B697",
+"# c #D4B574",
+"$ c #B8B6B2",
+"% c #BAB7B3",
+"& c #DFB662",
+"* c #E9B242",
+"= c #B9B3A7",
+"- c #D1B67E",
+"; c #F6B42E",
+"> c #EFB132",
+", c #BDB19B",
+"' c #AFB1B7",
+") c #B4B5B7",
+"! c #C3B79C",
+"~ c #E9B445",
+"{ c #F8B226",
+"] c #F3B025",
+"^ c #C3B08A",
+"/ c #AFB2B8",
+"( c #9EA4B3",
+"_ c #B2B3B4",
+": c #BCB7AE",
+"< c #C9B897",
+"[ c #C4B8A0",
+"} c #BEB7AA",
+"| c #BAB7B1",
+"1 c #B8B7B6",
+"2 c #B9B8B5",
+"3 c #DCB463",
+"4 c #F7B226",
+"5 c #F8B021",
+"6 c #F5AE1C",
+"7 c #CAAF74",
+"8 c #B7B7B7",
+"9 c #8E9AB4",
+"0 c #99A0AF",
+"a c #B6B6B6",
+"b c #BEB6A6",
+"c c #E1B866",
+"d c #F3BC4F",
+"e c #EEB952",
+"f c #E6B85B",
+"g c #DEB868",
+"h c #D6B674",
+"i c #F5B226",
+"j c #F8B020",
+"k c #F7AF1B",
+"l c #F7AD15",
+"m c #D4AD5B",
+"n c #B6B6B5",
+"o c #9CA4B6",
+"p c #7B8AAE",
+"q c #AEAFB0",
+"r c #C6B592",
+"s c #EAB850",
+"t c #F9BA3D",
+"u c #F9B837",
+"v c #F8B632",
+"w c #F6B42B",
+"x c #F6B226",
+"y c #F7AB0F",
+"z c #E3AA33",
+"A c #C3B393",
+"B c #B9B6B2",
+"C c #BDB39F",
+"D c #BEB29B",
+"E c #B7B6B5",
+"F c #B5B6B7",
+"G c #7B8DB3",
+"H c #8692AB",
+"I c #CCB382",
+"J c #F2B63C",
+"K c #F8B631",
+"L c #F8B42C",
+"M c #F7AE1A",
+"N c #F6A90A",
+"O c #F4A709",
+"P c #E9A721",
+"Q c #DDA940",
+"R c #D0AD65",
+"S c #C5B28A",
+"T c #BDB5A6",
+"U c #C3AA79",
+"V c #C6A86C",
+"W c #BCA36F",
+"X c #B3B1AE",
+"Y c #A9ADB6",
+"Z c #617BAF",
+"` c #99A0AC",
+" . c #B4B4B4",
+".. c #D2B270",
+"+. c #F1A509",
+"@. c #EFA309",
+"#. c #ECA109",
+"$. c #E79F09",
+"%. c #E49F11",
+"&. c #DCA027",
+"*. c #D1A142",
+"=. c #C1A058",
+"-. c #BB9B5A",
+";. c #BCA679",
+">. c #B8B4AA",
+",. c #98A1B4",
+"'. c #5772AB",
+"). c #A1A5AE",
+"!. c #B7B4AD",
+"~. c #DCB158",
+"{. c #E99F09",
+"]. c #E69D09",
+"^. c #E39C09",
+"/. c #D09928",
+"(. c #C49945",
+"_. c #BA9B5A",
+":. c #BD9B57",
+"<. c #AFA695",
+"[. c #8A96B2",
+"}. c #526EA9",
+"|. c #A3A7B0",
+"1. c #D0B274",
+"2. c #F7AC14",
+"3. c #E59E09",
+"4. c #D39A27",
+"5. c #BD9D5D",
+"6. c #AEA696",
+"7. c #B3A486",
+"8. c #B2A384",
+"9. c #B9A478",
+"0. c #B7AF9F",
+"a. c #8090AE",
+"b. c #4C6AA6",
+"c. c #A1A5AF",
+"d. c #DEB156",
+"e. c #EEA309",
+"f. c #DA9C1C",
+"g. c #BE9E5B",
+"h. c #B0B0B1",
+"i. c #B5B3AF",
+"j. c #B3B3B4",
+"k. c #B3B2B1",
+"l. c #8190AD",
+"m. c #4364A2",
+"n. c #979FAD",
+"o. c #C9B489",
+"p. c #F2AC1F",
+"q. c #F7AA0E",
+"r. c #E59D0A",
+"s. c #C2A25D",
+"t. c #AFAFB0",
+"u. c #8995AD",
+"v. c #3B5D9F",
+"w. c #828FAA",
+"x. c #B9B7B3",
+"y. c #DFB050",
+"z. c #EDA309",
+"A. c #E19B0A",
+"B. c #C1A670",
+"C. c #97A1B0",
+"D. c #3B5D9C",
+"E. c #6178A3",
+"F. c #B4B4B5",
+"G. c #CBB485",
+"H. c #F2AB18",
+"I. c #F1A60B",
+"J. c #E1A121",
+"K. c #CBA048",
+"L. c #C19B4C",
+"M. c #DF9E1B",
+"N. c #E39B09",
+"O. c #E09A09",
+"P. c #C3A567",
+"Q. c #B6B6B7",
+"R. c #ACAFB4",
+"S. c #4E6C9D",
+"T. c #3B5D99",
+"U. c #8A96AB",
+"V. c #BAB7B2",
+"W. c #E0AF4A",
+"X. c #EDA716",
+"Y. c #D4A139",
+"Z. c #BFA267",
+"`. c #A69F93",
+" + c #858FA2",
+".+ c #8E96A4",
+"++ c #BFA570",
+"@+ c #DA9C1E",
+"#+ c #E19A09",
+"$+ c #DD9809",
+"%+ c #C4A35F",
+"&+ c #7889A6",
+"*+ c #2E5395",
+"=+ c #49679B",
+"-+ c #8895AB",
+";+ c #B3B4B6",
+">+ c #BBB5A9",
+",+ c #C5A76B",
+"'+ c #B5A380",
+")+ c #9A9DA2",
+"!+ c #7D8CA5",
+"~+ c #7988A1",
+"{+ c #8891A3",
+"]+ c #AFB0B0",
+"^+ c #B5B5B5",
+"/+ c #C2A873",
+"(+ c #D69A1D",
+"_+ c #DA9609",
+":+ c #C6A156",
+"<+ c #ABADB1",
+"[+ c #5C739B",
+"}+ c #295091",
+"|+ c #315693",
+"1+ c #536E9C",
+"2+ c #677DA1",
+"3+ c #63799D",
+"4+ c #58719C",
+"5+ c #5C7198",
+"6+ c #73829C",
+"7+ c #A2A5A9",
+"8+ c #B5B5B6",
+"9+ c #C0A772",
+"0+ c #D2961C",
+"a+ c #C59E4D",
+"b+ c #A6A8AD",
+"c+ c #6C7E9C",
+"d+ c #476291",
+"e+ c #3A5B90",
+"f+ c #415F8F",
+"g+ c #586F93",
+"h+ c #78859B",
+"i+ c #9EA1A7",
+"j+ c #B1B1B1",
+"k+ c #BFA672",
+"l+ c #BC9F65",
+"m+ c #B5B4B3",
+"n+ c #A6A9AD",
+"o+ c #A0A3A9",
+"p+ c #A4A7AB",
+"q+ c #ADAEAF",
+"r+ c #B4B0A8",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . + . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . @ # $ . . . . . . . . . . ",
+". . . . . . . . . . . . . . % & * = . . . . . . . . . . ",
+". . . . . . . . . . . . . . - ; > , . . . . . . . . . . ",
+". . . ' ) . . . . . . . . ! ~ { ] ^ . . . . . . . . . . ",
+". . / ( _ : < [ } | 1 . 2 3 4 5 6 7 8 . . . . . . . . . ",
+". . 9 0 a b c d e f g h 3 i j k l m n . . . . . . . . . ",
+". o p q . . r s t u v w x j k l y z A B . . . C 8 D E . ",
+"F G H a . . 8 I J K L { j M l y N O P Q R S T U V W X . ",
+"Y Z ` . . . . ...w { j M l y N O +.@.#.$.%.&.*.=.-.;.>.",
+",.'.).. . . . . !.~.j M l y N O +.@.#.{.].^./.(._.:.<. .",
+"[.}.|.. . . . . . 1.6 2.y N O +.@.#.{.3.4.5.6.7.8.9.0.. ",
+"a.b.c.. . . . . 2 d.2.y N O +.e.#.{.f.g.<.h.8 i.j.k. .. ",
+"l.m.n.. . . . . o.p.q.N O +.e.#.{.r.s.t.8 . . . . . . . ",
+"u.v.w.8 . . . x.y.q.N O +.z.#.{.].A.B.8 . . . . . . . . ",
+"C.D.E.F.. . . G.H.N I.J.K.L.M.].N.O.P.Q.. . . . . . . . ",
+"R.S.T.U.. . V.W.X.Y.Z.`. +.+++@+#+$+%+a . . . . . . . . ",
+"8 &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+n . . . . . . . . ",
+". <+[+}+|+1+2+3+4+5+6+7+ .. . 8+9+0+a+^+. . . . . . . . ",
+". . b+c+d+e+f+g+h+i+j+8 . . . . a k+l+m+. . . . . . . . ",
+". . . F.n+o+p+q+ .8 . . . . . . . ^+r+a . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/pixmaps/nextcpu.xpm b/pixmaps/nextcpu.xpm
new file mode 100644
index 0000000..7348515
--- /dev/null
+++ b/pixmaps/nextcpu.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char * nextcpu_xpm[] = {
+"55 45 6 1",
+" c None",
+". c #333333",
+"X c #000000",
+"o c #669933",
+"O c #cc0033",
+"+ c #555555",
+" ................................ ",
+" ..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .X..............................X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. ...................",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXXXXXXXXXXXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXX.......XXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXXXXXXXXXXXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXX.......XXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXXXXXXXXXXXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXX.......XXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXXXXXXXXXXXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXX.......XXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXXXXXXXXXXXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXX.......XXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXXXXXXXXXXXXXX.",
+" .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.X. .XXXXX.......XXXXX.",
+" .X..............................X. .XXXXXXXXXXXXXXXXX.",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXXXX.......XXXXX.",
+" .XXXXXXXXXXXXXXXoOXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXX.",
+" ..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.. .XXXXX.......XXXXX.",
+" ................................ .XXXXXXXXXXXXXXXXX.",
+" XXXXXXXXXXXX .XXXXX.......XXXXX.",
+" ......XXXXXXXXXXXX...... ...................",
+" XXXXXXXXXXXXXXXXXXXXXXXX ",
+" .................................... ... ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .. . . ",
+" .X.....................XXXXX....X. ... ..... ",
+" .X.....................XX.XX....X. .X.X. ",
+" .X.....................X...X....X. ..... ",
+" .X+++++++++++++++++++++X+++X++++X. .XXX. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXX. ",
+" .................................. .XXX. ",
+" ..... "};
diff --git a/pixmaps/os2cpu.xpm b/pixmaps/os2cpu.xpm
new file mode 100644
index 0000000..3bf1455
--- /dev/null
+++ b/pixmaps/os2cpu.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char * os2cpu_xpm[] = {
+"55 45 9 1",
+" c #888888",
+". c None",
+"X c #cccccc",
+"o c #bbbbbb",
+"O c #000000",
+"+ c #eeeeee",
+"@ c #666666",
+"# c #555555",
+"$ c #999999",
+" ...................",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...................",
+" XooooooooooooooooooooooooooooooooX ...................",
+" Xo oX ...................",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ...................",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX ...................",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +++++++++++++ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +ooooooooooo+ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +ooo ooo+ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +oooo o+oo+ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +oo+oooooooo+ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +o + o+ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +oo+o oooo+ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +ooooooooooo+ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +++++++++++++ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. ++++++++++ + ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. ++++++++++oo+ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +++++++++++++ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +++++++++++++ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. + + ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. + o o o + ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. + + ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. +++++++++++++ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. + + + +++++++ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. + + + +++++++ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. + + + +++++++ ..",
+" Xo OOOOOOOOOOOOOOOOOOOOOOOOOOOO oX .. + + + ++++ + ..",
+" Xo oX .. + + + ++++ + ..",
+" XooooooooooooooooooooooooooooooooX .. + + + +++++++ ..",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .. ..",
+" .. X X X XXXXXoX ..",
+"... @ @ @ @ @ @ @ @ @ @ @ @ @ @ @..... X X X XXXXXXX ..",
+"... @ @ @ @ @ @ @ @ @ @ @ @ @ @ @..... ..",
+"......##@@@@@@@@@@@@@@@@@@@@##......... ...",
+"......#####@@@@@@@@@@@@@@#####.........................",
+" ...... .........",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX . ... ... ........",
+" Xo+++++++++++++++++++oooXXXXXooooX ... .. .....",
+" Xoo+++++++++++++++++++ooXXoXX+++oX ........ oo o .....",
+" Xoooo+++++++++++++++ooooXoooX+++oX ........ .....",
+" X$$$$$$$$$$$$$$$$$$$$$$$X$$$X$$$$X ........ oooo .....",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........ oooo .....",
+" oooooooooooooooooooooooooooooooooo ........ oooo .....",
+" ........ ....."};
diff --git a/pixmaps/sgicpu.xpm b/pixmaps/sgicpu.xpm
new file mode 100644
index 0000000..9cf0cdb
--- /dev/null
+++ b/pixmaps/sgicpu.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * sgicpu_xpm[] = {
+"55 45 10 1",
+" c None",
+". c #666666",
+"X c #888888",
+"o c #000000",
+"O c #444444",
+"+ c #00ff00",
+"@ c #666699",
+"# c #996699",
+"$ c #bbbbbb",
+"% c #999999",
+" ................................ ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .XX............................XX. ",
+" .X.oooooooooooooooooooooooooooo.X. OOOOOOOOOOOOOOOOO ",
+" .X.oooooooooooooooooooooooooooo.X. O+@ @@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@@@OOOOOOOOO ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@@@@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@@@OOOOOOOOO ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@@@@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@@@OOOOOOOOO ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@@@@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. OOOOOOOOOOOOOOOOO ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@#O@@@@@@@@O ",
+" .X.oooooooooooooooooooooooooooo.X. OOOOOOOOOOOOOOOOO ",
+" .X.oooooooooooooooooooooooooooo.X. O@@@@@@@@@@@@@@@O ",
+" .XX............................XX. OOOOOOOOOOOOOOOOO ",
+" .XOXOOOOXXXXXXXXXXXXXXXXXXXXXXXXX. O@@@@@@@@@@@@@@@O ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. OOOOOOOOOOOOOOOOO ",
+" ................................ O@@@@@@@@@@@@@@@O ",
+" .XXXXXXXXXXXXXXXXX$$X. OOOOOOOOOOOOOOOOO ",
+" .XXXXXXXXXXXXXXXXXXXX. O@@@@@@@@@@@@@@@O ",
+" O....................O OOOOOOOOOOOOOOOOO ",
+" OOOOOOOOOOOOOOOOOOOOOO ",
+"....................................O OOO ",
+".XOOXOOOOXXXXXXXXXXXXXXXXXXXXXXXXXX. OO O O ",
+".X%%%%%%%%%%%%%%%%%%%%%%X...X%%%%.X. OOO OOOO ",
+".X%%%%%%%%%%%%%%%%%%%%%%XOOOX%%%%.X. OOX.OO ",
+".X...%%%%%%%%%%%%%%%%%%%XX.XX%%%%.X. O.X..O ",
+".X..O..%%%%%%%%%%%%..O..X...X.....X. OXX..O ",
+".XOOXOOOOOOOOOOOOOOOOXOOXOOOXOOOOOX. OXX..O ",
+".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. O.XX.O ",
+".................................... OOOO "};
diff --git a/pixmaps/slackware.xpm b/pixmaps/slackware.xpm
new file mode 100644
index 0000000..dfb7213
--- /dev/null
+++ b/pixmaps/slackware.xpm
@@ -0,0 +1,314 @@
+/* XPM */
+static char * slackware_xpm[] = {
+"28 24 287 2",
+" c None",
+". c #B8B8B8",
+"+ c #B7B7B8",
+"@ c #A4A7B4",
+"# c #8B94B1",
+"$ c #7683AF",
+"% c #6879AE",
+"& c #6173AE",
+"* c #6274AF",
+"= c #6878AE",
+"- c #7684AF",
+"; c #8C95B2",
+"> c #A5A8B5",
+", c #B5B6B8",
+"' c #9DA2B3",
+") c #7986B1",
+"! c #596DAD",
+"~ c #4E65AF",
+"{ c #4E65B1",
+"] c #4F66B2",
+"^ c #4E65B2",
+"/ c #4E64AF",
+"( c #5A6FAD",
+"_ c #7885AF",
+": c #A0A6B4",
+"< c #B3B4B8",
+"[ c #8892B1",
+"} c #5A6EAE",
+"| c #4F65B0",
+"1 c #4D64AF",
+"2 c #5D6FAE",
+"3 c #8891B0",
+"4 c #AEB0B5",
+"5 c #AEB1B7",
+"6 c #7A87B1",
+"7 c #5065AD",
+"8 c #576BAF",
+"9 c #7F89AD",
+"0 c #ABADB4",
+"a c #7E8AB0",
+"b c #4F66AE",
+"c c #5169B3",
+"d c #5469B0",
+"e c #5367A9",
+"f c #5365A3",
+"g c #5466A5",
+"h c #5468AA",
+"i c #596DB1",
+"j c #5669AA",
+"k c #566AAA",
+"l c #5268B0",
+"m c #4F66B3",
+"n c #566CAE",
+"o c #808BAF",
+"p c #ADAFB5",
+"q c #8D95B1",
+"r c #5167AD",
+"s c #566BB2",
+"t c #4F63A2",
+"u c #455892",
+"v c #455790",
+"w c #465792",
+"x c #465791",
+"y c #42538C",
+"z c #43548D",
+"A c #3D4E89",
+"B c #4A5C97",
+"C c #5267AD",
+"D c #4F67B3",
+"E c #4F65B1",
+"F c #5A6DAD",
+"G c #9098B2",
+"H c #AAADB6",
+"I c #6576AE",
+"J c #5066B2",
+"K c #546AB3",
+"L c #4E609D",
+"M c #44548A",
+"N c #4D5F9B",
+"O c #566AAD",
+"P c #546AB1",
+"Q c #556AB0",
+"R c #5367A8",
+"S c #4C5D99",
+"T c #475893",
+"U c #5166AB",
+"V c #5067B3",
+"W c #6777AC",
+"X c #A3A7B3",
+"Y c #8892B0",
+"Z c #4E65AE",
+"` c #5468AD",
+" . c #3F4F87",
+".. c #4B5C95",
+"+. c #5066AE",
+"@. c #5267AC",
+"#. c #4B5C94",
+"$. c #4A5B92",
+"%. c #5065A9",
+"&. c #566AAF",
+"*. c #8992B1",
+"=. c #B2B3B7",
+"-. c #6B7AAE",
+";. c #4F66B1",
+">. c #5266A9",
+",. c #39497B",
+"'. c #49598F",
+"). c #4F65AE",
+"!. c #5267AE",
+"~. c #5569AD",
+"{. c #5167B1",
+"]. c #4D63AE",
+"^. c #6F7DAD",
+"/. c #ABADB5",
+"(. c #A6AAB5",
+"_. c #586BAC",
+":. c #5368B0",
+"<. c #404F82",
+"[. c #3B4773",
+"}. c #455489",
+"|. c #4F619D",
+"1. c #5165A6",
+"2. c #5266AA",
+"3. c #5368AE",
+"4. c #5268B1",
+"5. c #5067B2",
+"6. c #6272AD",
+"7. c #9DA2B2",
+"8. c #999FB2",
+"9. c #5066AD",
+"0. c #4C5F9F",
+"a. c #3F4D7C",
+"b. c #2F3A61",
+"c. c #2C375E",
+"d. c #2E3A61",
+"e. c #323E65",
+"f. c #37436C",
+"g. c #3F4D79",
+"h. c #48598F",
+"i. c #5267AB",
+"j. c #5169B4",
+"k. c #5A6EAD",
+"l. c #9299B1",
+"m. c #939BB2",
+"n. c #4F65AF",
+"o. c #5367AE",
+"p. c #4F62A0",
+"q. c #4B5B93",
+"r. c #475689",
+"s. c #43507F",
+"t. c #3B4871",
+"u. c #2E395C",
+"v. c #27304F",
+"w. c #39456F",
+"x. c #4E61A3",
+"y. c #5168B5",
+"z. c #8C94AF",
+"A. c #5063A6",
+"B. c #4F63A4",
+"C. c #4F66B0",
+"D. c #5269B2",
+"E. c #4F63A0",
+"F. c #374267",
+"G. c #272E47",
+"H. c #415081",
+"I. c #5167B0",
+"J. c #8B93AE",
+"K. c #989FB3",
+"L. c #5168B1",
+"M. c #384368",
+"N. c #2F3856",
+"O. c #4D5F9E",
+"P. c #536AB7",
+"Q. c #3C4B7A",
+"R. c #1F253B",
+"S. c #394672",
+"T. c #5166AD",
+"U. c #596DAC",
+"V. c #9098AF",
+"W. c #5669AB",
+"X. c #5168B3",
+"Y. c #2B3452",
+"Z. c #141927",
+"`. c #38436A",
+" + c #4F64AA",
+".+ c #4F67B4",
+"++ c #5164A7",
+"@+ c #303A5C",
+"#+ c #23283A",
+"$+ c #425182",
+"%+ c #5268B2",
+"&+ c #4E65B0",
+"*+ c #6173AD",
+"=+ c #9BA0B1",
+"-+ c #B1B3B8",
+";+ c #6777AD",
+">+ c #5F70AA",
+",+ c #6071AB",
+"'+ c #28304A",
+")+ c #0B0E19",
+"!+ c #13151E",
+"~+ c #2C3450",
+"{+ c #424F7E",
+"]+ c #4C5E97",
+"^+ c #435180",
+"/+ c #2E3651",
+"(+ c #1D202A",
+"_+ c #333B59",
+":+ c #4B5FA1",
+"<+ c #5067B5",
+"[+ c #6C7BAD",
+"}+ c #A9ABB4",
+"|+ c #838DAE",
+"1+ c #4F65AD",
+"2+ c #5D6DA2",
+"3+ c #5E6EA3",
+"4+ c #5269B0",
+"5+ c #303A5B",
+"6+ c #1E222F",
+"7+ c #2A324A",
+"8+ c #242A3E",
+"9+ c #1A1D28",
+"0+ c #191B24",
+"a+ c #181A22",
+"b+ c #14171E",
+"c+ c #202536",
+"d+ c #394469",
+"e+ c #4C60A2",
+"f+ c #5368AD",
+"g+ c #848EAF",
+"h+ c #B7B7B7",
+"i+ c #A4A8B4",
+"j+ c #5D6FAC",
+"k+ c #4E66B3",
+"l+ c #5067B1",
+"m+ c #4E62A6",
+"n+ c #4B5E9C",
+"o+ c #4D609F",
+"p+ c #4A5B94",
+"q+ c #4A5A90",
+"r+ c #4C5D97",
+"s+ c #5165A8",
+"t+ c #4D64B0",
+"u+ c #6373AC",
+"v+ c #9EA3B3",
+"w+ c #8791B0",
+"x+ c #5C6DA3",
+"y+ c #5C6993",
+"z+ c #596AA3",
+"A+ c #596AA5",
+"B+ c #5A6CA7",
+"C+ c #566CAF",
+"D+ c #8992B0",
+"E+ c #B5B5B8",
+"F+ c #B2B4B7",
+"G+ c #7784AF",
+"H+ c #596DAB",
+"I+ c #5E6C9E",
+"J+ c #5F6E9E",
+"K+ c #5F6E9D",
+"L+ c #6271A4",
+"M+ c #5C6EAC",
+"N+ c #A8ABB3",
+"O+ c #A9ADB6",
+"P+ c #7482AD",
+"Q+ c #5167AE",
+"R+ c #7481AD",
+"S+ c #A7A9B4",
+"T+ c #ACAEB6",
+"U+ c #7D88B0",
+"V+ c #5367AC",
+"W+ c #576BAD",
+"X+ c #7C87AD",
+"Y+ c #A8ABB4",
+"Z+ c #6C7BAE",
+"`+ c #5268AD",
+" @ c #4E66B2",
+".@ c #959BB1",
+"+@ c #B1B2B7",
+"@@ c #979DB2",
+"#@ c #5C6EAD",
+"$@ c #586BAD",
+"%@ c #566AAC",
+"&@ c #6878AD",
+"*@ c #7D88AF",
+"=@ c #989EB2",
+"-@ c #B1B3B7",
+". . . . . . . . + @ # $ % & * = - ; > , . . . . . . . . ",
+". . . . . . . ' ) ! ~ { ] ] ] ^ { / ( _ : + . . . . . . ",
+". . . . . < [ } | ] ] ] ] ] ] ] ] ] ] 1 2 3 4 . . . . . ",
+". . . . 5 6 7 ] ] ] ] ] ] ] ] ] ] ] ] ] ] 8 9 0 . . . . ",
+". . . . a b ] ] ] ] c d e f g h i j k l ] m n o p . . . ",
+". . . q r ] ] ] ] s t u v w x y z A B C D ] E F G . . . ",
+". . H I J ] ] ] K L M N O P Q R S A T U V ] m 1 W X . . ",
+". . Y Z ] ] ] ] ` ...+.m ] ] m @.#.$.%.V ] ] m &.*.. . ",
+". =.-.;.] ] ] m >.,.'.).m ] ] ] ] !.~.{.] ] ] V ].^./.. ",
+". (._.] ] ] ] ] :.<.[.}.|.1.2.3.4.5.] ] ] ] ] ] { 6.7.. ",
+". 8.9.] ] ] ] ] D 0.a.b.c.d.e.f.g.h.i.j.] ] ] ] ] k.l.. ",
+". m.n.] ] ] ] ] ] ] o.p.q.r.s.t.u.v.w.x.y.] ] ] m O z.. ",
+". m.n.] ] ] ] m A.B.C.] ] ] 5.D.E.F.G.H.I.m ] ] m ` J.. ",
+". K.r m ] ] ] L.M.N.O.5.] ] ] ] P.Q.R.S.T.m ] ] ] U.V.. ",
+". @ W.] ] X.5.4.Y.Z.`. +V ] ] .+++@+#+$+%+m ] ] &+*+=+. ",
+". -+;+] ] >+,+:.'+)+!+~+{+#.]+^+/+(+_+:+<+] ] D 1 [+}+. ",
+". . |+1+m 2+3+4+5+6+7+8+9+0+a+b+c+d+e+<+] ] ] D f+g+h+. ",
+". . i+j+k+2+3+l+m+n+n.9.o+p+q+r+s+l+] ] ] ] ] t+u+v+. . ",
+". . . w+1+x+y+z+A+A+A+A+A+A+A+A+A+A+A+A+A+B+Q C+D+E+. . ",
+". . . F+G+H+I+J+J+J+J+J+J+J+J+J+J+J+J+J+K+L+M+G+N+. . . ",
+". . . . O+P+1+] ] ] ] ] ] ] ] ] ] ] ] ] m Q+R+S+. . . . ",
+". . . . . T+U+V+] ] ] ] ] ] ] ] ] ] ] &+W+X+Y+. . . . . ",
+". . . . . . + l.Z+`+&+] ] ] ] ] @1 C [+.@=.. . . . . . ",
+". . . . . . . . +@@@U+;+#@$@%@#@&@*@=@-@. . . . . . . . "};
diff --git a/pixmaps/spark_0.xpm b/pixmaps/spark_0.xpm
new file mode 100644
index 0000000..45cc5f5
--- /dev/null
+++ b/pixmaps/spark_0.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static char * spark_0_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"20 20 4 1",
+/* colors */
+" c None",
+". c #DB6503",
+"X c #DC5D02",
+"o c #FBFE0F",
+/* pixels */
+" .. ",
+" .. ",
+" .. . .. ",
+" X .. Xo. ",
+" .X XoX ",
+" XoX XoX ",
+" XooXooX ",
+" ... XoXoooX .. ",
+" ....XXXoooX XX ",
+" XoooooooX ",
+" XXoooooXX ",
+" XooooooX ",
+" XoooXXXo.. ",
+" XX XooX .... ",
+" .X .oX ",
+" .o. ",
+" .. ",
+" .. X ",
+" . X ",
+" . "};
diff --git a/pixmaps/spark_1.xpm b/pixmaps/spark_1.xpm
new file mode 100644
index 0000000..d61cb94
--- /dev/null
+++ b/pixmaps/spark_1.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static char * spark_1_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"20 20 4 1",
+/* colors */
+" c None",
+". c #DB6503",
+"X c #DC5D02",
+"o c #FBFE0F",
+/* pixels */
+" . ",
+" X ",
+" . . . ",
+" X .. . .",
+" .X .. ",
+" XoX XoX ",
+" .ooX X.oX ",
+" XoooXXooX ",
+" .ooooooX ",
+" ....XX.XoooooX ",
+" X.XooooooooX ",
+" .XXoooo. ",
+" XoooX XX ",
+" .X Xoo. .. ",
+" . Xo. ",
+" .oX ",
+" X XoX ",
+" . X. ",
+" . .. ",
+" . "};
diff --git a/pixmaps/suncpu.xpm b/pixmaps/suncpu.xpm
new file mode 100644
index 0000000..62718b5
--- /dev/null
+++ b/pixmaps/suncpu.xpm
@@ -0,0 +1,55 @@
+/* XPM */
+static char * suncpu_xpm[] = {
+"55 45 7 1",
+" c #bbbbbb",
+". c None",
+", c #ffffff",
+"X c #eeeeee",
+"o c #000000",
+"O c #336699",
+"+ c #666666",
+" ...................",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...................",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...................",
+" XX XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...................",
+" XX oooooooooooooooooooooooooooo XX ...... ...",
+" XX oooooooooooooooooooooooooooo XX ...... XXXXX XX ...",
+" XX oooooooooooooooooooooooooooo XX ...... XXOXX XX ...",
+" XX oooooooooooooooooooooooooooo XX ...... XOXOX XX ...",
+" XX oooooooooooooooooooooooooooo XX ...... XXOXX XX ...",
+" XX oooooooooooooooooooooooooooo XX ...... XXXXX XX ...",
+" XX oooooooooooooooooooooooooooo XX ...... XXXXX XX ...",
+" XX oooooooooooooooooooooooooooo XX ...... XXXXX XX ...",
+" XX oooooooooooooooooooooooooooo XX .....O XXXXX +X ...",
+" XX oooooooooooooooooooooooooooo XX .....O XXXXX +X ...",
+" XX oooooooooooooooooooooooooooo XX .....O XXXXX +X ...",
+" XX XX .....O XXXXX +X ...",
+" XXXOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....OO XXXXX +X O..",
+" XXOXOXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....OO XXXXX XX O..",
+" XXXOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....OO XXXXX XX O..",
+" ....OO O..",
+"........................................OOOOOOOOOOOOO..",
+".......................................................",
+" ...................",
+" X,,X,,,,,,,,,,,,,,,,,,,X,,,X,,,,,X ..OXOX OXOXO...",
+" X,,X,,,,,,,,,,,,,,,,,,,X,,,X,,,,,X . XOX X XO..",
+" X,,X,,,,,,,,,,,,,,,,,,,X X,,,,,X ..X XO XXXXX OX..",
+" X,,X,,,,,,,,,,,,,,,,,,,XX,XX,,,,,X ..OXOXOX X X X XO..",
+" X,,X,,,,,,,,,,,,,,,,,,,X,,,X,,,,,X ..XOXOXO X X X OX..",
+" X X X X X ..OXOXOX XXXXX XO..",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..XOXOXO XXXXX OX..",
+" ..OXOXOX XXXXX XO..",
+"OOOO...........................OOOOO...OXOXO O..."};
diff --git a/pixmaps/suse.xpm b/pixmaps/suse.xpm
new file mode 100644
index 0000000..9ae8b79
--- /dev/null
+++ b/pixmaps/suse.xpm
@@ -0,0 +1,166 @@
+/* XPM */
+static char * suse_xpm[] = {
+"28 24 139 2",
+" c None",
+". c #FFFFFF",
+"+ c #F0F7E7",
+"@ c #D8EBC3",
+"# c #C3E1A2",
+"$ c #B4DA8C",
+"% c #AFD783",
+"& c #B5DA8D",
+"* c #D4E9BD",
+"= c #E8F3DB",
+"- c #F7FBF3",
+"; c #F1F8E9",
+"> c #DAECC6",
+", c #EBF5E1",
+"' c #F8FBF4",
+") c #FDFFFD",
+"! c #D9ECC5",
+"~ c #8AC549",
+"{ c #77BB2C",
+"] c #73BA25",
+"^ c #75BA29",
+"/ c #81C03B",
+"( c #96CB5D",
+"_ c #98CC5F",
+": c #7ABD30",
+"< c #83C23F",
+"[ c #97CB5E",
+"} c #BCDD97",
+"| c #DCEDC9",
+"1 c #E0EFCF",
+"2 c #ACD67E",
+"3 c #7DBF35",
+"4 c #9ECE68",
+"5 c #A7D377",
+"6 c #ADD680",
+"7 c #C3E1A3",
+"8 c #C4E2A5",
+"9 c #8BC54B",
+"0 c #78BC2E",
+"a c #ACD67F",
+"b c #BBDD96",
+"c c #A2D16F",
+"d c #E7F3DA",
+"e c #B8DB91",
+"f c #76BB2A",
+"g c #73B925",
+"h c #85C241",
+"i c #86C343",
+"j c #A9D479",
+"k c #9FCF6A",
+"l c #A4D272",
+"m c #8FC751",
+"n c #C9E4AB",
+"o c #74BA28",
+"p c #92C955",
+"q c #B1D887",
+"r c #B5DA8C",
+"s c #A0D06C",
+"t c #9ECF69",
+"u c #D7EBC1",
+"v c #E5F3D8",
+"w c #8CC64C",
+"x c #A5D273",
+"y c #93C957",
+"z c #74BA27",
+"A c #78BB2D",
+"B c #98CB5F",
+"C c #ABD57B",
+"D c #ABD57C",
+"E c #DAECC5",
+"F c #BBDD95",
+"G c #DDEDCB",
+"H c #CFE7B6",
+"I c #CAE4AE",
+"J c #DBEDC8",
+"K c #7DBF36",
+"L c #84C241",
+"M c #93C958",
+"N c #8FC74F",
+"O c #88C346",
+"P c #89C548",
+"Q c #96CB5C",
+"R c #D8EBC2",
+"S c #FAFCF8",
+"T c #9DCE66",
+"U c #7FBF38",
+"V c #D7EBC2",
+"W c #A9D47A",
+"X c #85C342",
+"Y c #88C447",
+"Z c #89C447",
+"` c #CBE5AF",
+" . c #C2E0A0",
+".. c #73B926",
+"+. c #A4D171",
+"@. c #E4F1D5",
+"#. c #C4E3A4",
+"$. c #90C853",
+"%. c #77BC2B",
+"&. c #CBE5AE",
+"*. c #F5FAF0",
+"=. c #F1F8EA",
+"-. c #F1F7EA",
+";. c #95CA5A",
+">. c #88C446",
+",. c #C1E09F",
+"'. c #E2F1D3",
+"). c #94CA59",
+"!. c #7BBD32",
+"~. c #DAECC7",
+"{. c #FDFEFC",
+"]. c #AAD47B",
+"^. c #7DBE35",
+"/. c #CEE6B4",
+"(. c #8AC54A",
+"_. c #B3D988",
+":. c #C7E3A9",
+"<. c #81C13B",
+"[. c #E4F1D6",
+"}. c #C6E2A7",
+"|. c #B2D988",
+"1. c #D4E9BC",
+"2. c #7ABD31",
+"3. c #A1D06D",
+"4. c #CDE6B1",
+"5. c #CAE4AD",
+"6. c #D5EBBE",
+"7. c #B1D886",
+"8. c #ECF5E2",
+"9. c #E9F4DE",
+"0. c #F9FCF7",
+"a. c #F0F7E8",
+"b. c #F3F8ED",
+"c. c #BADD94",
+"d. c #84C240",
+"e. c #96CA5C",
+"f. c #91C854",
+"g. c #A8D479",
+"h. c #FCFDFA",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . + @ # $ % % & # * = - ; > , ' . . . . ",
+". . . . . . ) ! % ~ { ] ] ] ] ] ] ^ / ( _ : < [ } | . . ",
+". . . . . 1 2 3 ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] 4 5 6 7 . ",
+". . . . 8 9 ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] 0 a _ b c d ",
+". . . e f ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] g h i j k l m n ",
+". . # o ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] p q r % s t u ",
+". v 9 ] w x 5 y z ] ] ] ] ] ] ] ] ] ] ] ] ] A B C D a E ",
+". F ] x G H I J # < ] ] ] : K z ] ] ] L M N O P Q q R . ",
+"S T U V W X Y Z ` ...] +.@ @.#.$.] %.&.' *.=.-.' . . . ",
+"' ;.>.J i ,.'.C y = ).!.~.. . . J ;.{ * . . . . . . . . ",
+"{.].^./.k (._.:.<.[.}.[ d . . . . E _ |.. . . . . . . . ",
+". 1.2.3.4.5.6.7.>.8.. 9.0.. . . . . a.1.b.. . . . . . . ",
+". . c.^.d.e.f.^ } . . . . . . . . . . . . . . . . . . . ",
+". . . @ |.k g.&.. . . . . . . . . . . . . . . . . . . . ",
+". . . . . h.{.. . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/pixmaps/toaster.xpm b/pixmaps/toaster.xpm
new file mode 100644
index 0000000..72e77dc
--- /dev/null
+++ b/pixmaps/toaster.xpm
@@ -0,0 +1,64 @@
+/* XPM */
+static char* toaster_xpm[] = {
+"55 45 16 1",
+"_ c #ffffff",
+"` c #efefef",
+"a c #dedede",
+"b c #cecece",
+"c c #bdbdbd",
+"d c #8c8c8c",
+"e c #737373",
+"f c #292929",
+"g c #e7a59c",
+"h c #ce3100",
+"i c #de9c73",
+"j c #9c4a18",
+"k c #de7329",
+"l c #a57318",
+"m c #d62131",
+"n c #000000",
+"_______________________________________________________",
+"_______________________________________________________",
+"_______________________________________________________",
+"_______________________________________________________",
+"_______________________________________________________",
+"________________``_____________________________________",
+"_____________`aecdfg`fdgcceec__________________________",
+"____________`eg_`ejjd___`afjjjcedc`____________________",
+"___________ce_ajjhhk`a`ggjhhhjdccged`__________________",
+"_________`de`ijjhkbbabgmhhhkb`a`_`_ce__________________",
+"_________ebamjjlkgbbajhhhhdaaa```````e_________________",
+"________e`agjhkiaabbmhhhhcaba``debcaaae________________",
+"_______fcajjjigaaacjhhhfaaaa`adcccbabbde_______________",
+"______f``ijhjgaaabghhhjaa`daccca`_`__`bf_______________",
+"_____fb`bjhjg`a`bgmhhj```fdbb``````````ad`_____________",
+"_____d`ajjhi```acmhhk`_`edbb`````_`_```ada_____________",
+"____ee`ajhkl```aimhhc`_aebb````__`___``adc_____________",
+"____f``jjhi````amhhl`_`dec```________`a`ec_____________",
+"___ec``mhlg____gmhhe`_adca``________```beedc___________",
+"___fa_ajlkd___`imhj`__aeca_________``bccddffe__________",
+"___f`_gjhi`___amhhj`_`dbb`________`acccbcdfng__________",
+"___e``gjkb____bhhhe`_abca________abbbbbbcdnf___`cgenf__",
+"__c``gjhlc____ihhl`__acb________abaccbabbefa__fdefnffff",
+"__d``acgg`___`mhkl`_`dc`______`ababa```a`da_`ddfn__fdee",
+"__e`_________`bnne`_aeb`_____`acaba___``ae_dddf______ae",
+"__e`_____________`__bc`_____abcaaa____``dfnfn________ed",
+"__d`_______________`cc`____accba``____`cfnn__`cbb`__`de",
+"__d`_______________aeaa`_`ccca```____`cdf``_edfeffn`cfn",
+"__c_______________`bf````bcba```____`gdnnaaedfnnnnnnfn_",
+"__ba_aaa``_______`abe``abbbb```____adcnnfaadfn____n_nn_",
+"_g`b`abbbcbaaa``a`adc``cbbaa``____adennnn`cen_``_______",
+"_daba``````aabbbbbaec`bcc`a```___bden`fn__be_fdffnc____",
+"_ebbaaaaaaa````bcbcecbbcaaa``__`cdeeaaa___fe_efnnnnd___",
+"_fefnfe``ba`aaa`bcaeccccaa``__`cdfeaaa`____fffna__fnd__",
+"`fnnnnnnnnffb`aabcbecacaaa``_agdfdaaa_______nnn____ng__",
+"ffnnnnnnnnnnnnnneacegacaa``_adcfcaaa_______fnnnnd_eng__",
+"eeffffnnnnnnnnnffebfdbcab_`bdef`aa`_______enffnnnnnc___",
+"fnnffffffffffnnnneafcccb``cdefaaa`_______dnfffnnn`a____",
+"ennnnnnnnnnfffnnnfafcaab`cdffaaa`________nnfffnnnn_____",
+"_fdeeeefnnnnnnnnnfacc`aacgfeaaa`_________nffffnnnn_____",
+"_`beedddddddefnnnfacc`adcf`aaa___________nffffnnnn_____",
+"___`nnnnfeeddddddeccbaden`aaa____________nncdcgcfn_____",
+"__aafnnn_a``nnfegdddcden`aa`_____________eccjgjccd_____",
+"__`aaeff``aaaa`nnnnfnn_`aa`_______________fcjgjcf______",
+"___`aaaaaaaaaaaannnnn_`a``________________gnlflfd______"};
diff --git a/pixmaps/ubuntu.xpm b/pixmaps/ubuntu.xpm
new file mode 100644
index 0000000..69588ed
--- /dev/null
+++ b/pixmaps/ubuntu.xpm
@@ -0,0 +1,235 @@
+/* XPM */
+static char * ubuntu_xpm[] = {
+"28 24 208 2",
+" c None",
+". c #FFFFFF",
+"+ c #FEFCFC",
+"@ c #F7D9CF",
+"# c #EEAA93",
+"$ c #E88562",
+"% c #E36C43",
+"& c #E16236",
+"* c #E16134",
+"= c #E2673D",
+"- c #E57954",
+"; c #EB997C",
+"> c #F3C5B5",
+", c #FDF4F1",
+"' c #F7DBD1",
+") c #EB997D",
+"! c #E15F32",
+"~ c #DC4814",
+"{ c #DD4814",
+"] c #DC4713",
+"^ c #DD501F",
+"/ c #E6805D",
+"( c #F2BFAE",
+"_ c #FEFBFA",
+": c #FEFEFE",
+"< c #F3BDAB",
+"[ c #E36E45",
+"} c #DD4B18",
+"| c #DE5323",
+"1 c #EC9C80",
+"2 c #FAEBE6",
+"3 c #F0B39D",
+"4 c #DF592A",
+"5 c #DD4C19",
+"6 c #EB9577",
+"7 c #EFAF98",
+"8 c #E67A55",
+"9 c #E98D6D",
+"0 c #FAE9E3",
+"a c #F3C1B0",
+"b c #E05D30",
+"c c #DE4F1D",
+"d c #E05A2B",
+"e c #E05B2D",
+"f c #DF5423",
+"g c #E57751",
+"h c #FCF2EE",
+"i c #F4C9BA",
+"j c #EB9779",
+"k c #FCF7F6",
+"l c #F9E2DA",
+"m c #E4744C",
+"n c #DD4D1A",
+"o c #E98C6B",
+"p c #F3C5B4",
+"q c #F8DDD4",
+"r c #F9E0D7",
+"s c #F4CABB",
+"t c #EC9E82",
+"u c #FEFEFD",
+"v c #F3C0AF",
+"w c #DE5120",
+"x c #DD4E1C",
+"y c #F1B59F",
+"z c #FFFDFD",
+"A c #ECA186",
+"B c #E67C58",
+"C c #ED9F85",
+"D c #FEFDFD",
+"E c #FEFBFB",
+"F c #F2BBA9",
+"G c #EDA288",
+"H c #EDA187",
+"I c #E36F47",
+"J c #E57149",
+"K c #F9E7E1",
+"L c #F9E4DD",
+"M c #E2673C",
+"N c #E67D58",
+"O c #FAE7E1",
+"P c #E88967",
+"Q c #EC9F84",
+"R c #EA9475",
+"S c #E98E6F",
+"T c #EEA991",
+"U c #F7D7CC",
+"V c #F9E4DC",
+"W c #F7D6CB",
+"X c #DD4A17",
+"Y c #F1B29D",
+"Z c #F1BCA9",
+"` c #DF5829",
+" . c #F4C8B9",
+".. c #F8DBD0",
+"+. c #E47048",
+"@. c #DD4915",
+"#. c #E26438",
+"$. c #F1B6A2",
+"%. c #FCF0EC",
+"&. c #E78360",
+"*. c #FDF7F6",
+"=. c #FFFEFE",
+"-. c #EB987B",
+";. c #E88664",
+">. c #FDF9F7",
+",. c #FCF3EF",
+"'. c #E88765",
+"). c #E16033",
+"!. c #F5CCBD",
+"~. c #F2BFAD",
+"{. c #DE4E1C",
+"]. c #E16235",
+"^. c #FAE6DF",
+"/. c #FCF6F4",
+"(. c #E0592A",
+"_. c #EC9B7E",
+":. c #EA9476",
+"<. c #FDF6F4",
+"[. c #EA9173",
+"}. c #FAE7E0",
+"|. c #E16337",
+"1. c #DF5424",
+"2. c #F7D6CA",
+"3. c #FDF2EF",
+"4. c #EC9B80",
+"5. c #F6D5C9",
+"6. c #EFAC95",
+"7. c #DD4815",
+"8. c #EEA88F",
+"9. c #EEA78D",
+"0. c #E15F31",
+"a. c #F4CCBE",
+"b. c #FCF2EF",
+"c. c #EC9B7F",
+"d. c #F6D5CA",
+"e. c #EEA68C",
+"f. c #EDA48A",
+"g. c #DD4F1D",
+"h. c #F4C9BB",
+"i. c #DE511F",
+"j. c #FEFBF9",
+"k. c #EC997C",
+"l. c #E16032",
+"m. c #F2BEAD",
+"n. c #F9E6DF",
+"o. c #F7D9CE",
+"p. c #E36E46",
+"q. c #DD4B17",
+"r. c #E26539",
+"s. c #FCF1ED",
+"t. c #E78361",
+"u. c #F9E5DF",
+"v. c #E2683D",
+"w. c #F8DFD6",
+"x. c #FAE6E0",
+"y. c #E88867",
+"z. c #EC9E83",
+"A. c #EA9374",
+"B. c #E98C6C",
+"C. c #EEA78E",
+"D. c #F6D6CA",
+"E. c #EDA48B",
+"F. c #F0B39E",
+"G. c #ECA288",
+"H. c #E67E5A",
+"I. c #E88B6A",
+"J. c #F2BDAA",
+"K. c #EDA58C",
+"L. c #EEA68E",
+"M. c #E36F46",
+"N. c #E4724A",
+"O. c #FAE9E2",
+"P. c #F9E3DC",
+"Q. c #E5754E",
+"R. c #E88A69",
+"S. c #F3C4B4",
+"T. c #EC9D82",
+"U. c #F3BFAE",
+"V. c #F0B5A0",
+"W. c #F3C2B1",
+"X. c #E05E30",
+"Y. c #E05C2D",
+"Z. c #DE5322",
+"`. c #FCF8F7",
+" + c #F1B5A1",
+".+ c #E15C2E",
+"++ c #EB9679",
+"@+ c #EFB09A",
+"#+ c #E57A54",
+"$+ c #E99071",
+"%+ c #FAECE7",
+"&+ c #F2BEAC",
+"*+ c #E46F46",
+"=+ c #DE5424",
+"-+ c #FBEFEB",
+";+ c #F7DCD2",
+">+ c #DC4915",
+",+ c #DD501E",
+"'+ c #E7815D",
+")+ c #FDFDFD",
+"!+ c #F8DACF",
+"~+ c #EFAD96",
+"{+ c #E78461",
+"]+ c #E36B41",
+"^+ c #E05F32",
+"/+ c #E05E31",
+"(+ c #E16539",
+"_+ c #E57953",
+". . . . . . . . + @ # $ % & * = - ; > , . . . . . . . . ",
+". . . . . . . ' ) ! ~ { { { { { { ] ^ / ( _ . . . . . . ",
+". . . . . : < [ ] { { { { { { { { { } { | 1 2 . . . . . ",
+". . . . . 3 4 { { { { { { { { { 5 6 7 8 { ~ 9 0 . . . . ",
+". . . . a b { { { { { { c d e f g h . i f { { j k . . . ",
+". . . l m { { { { { n o p q r s t 0 u v w { { x y . . . ",
+". . z A ~ { { { { B o C D E _ : F G H I { { { { J K . . ",
+". . L M { { { { N q O P Q R S T U V W G } { { { X Y . . ",
+". . Z 5 { { { ` .: ..+.} { { @.#.$.: %.&.{ { { ] &.*.. ",
+". =.-.] { @.@.;.>.,.'.{ { { { { { ).!.: ~.{.{ { { ].^.. ",
+". /.N { (._._.:.<.i w { { { { { { { [._ }.|.{ { { 1.2.. ",
+". 3.J @.4.D D T 5.6.7.{ { { { { { { ].8.9.0.{ { { c a.. ",
+". b.J @.c.u u T d.6.7.{ { { { { { { ].e.f.b { { { g.a.. ",
+". /.N { (._.c.:.<.h.i.{ { { { { { { [.j.}.|.{ { { 1.2.. ",
+". =.k.] { @.@.;.>.,.'.{ { { { { { l.!.=.m.{.{ { { ].n.. ",
+". . < 5 { { { 4 .. o.p.q.{ { @.r.$.: s.&.{ { { { t.*.. ",
+". . u.v.{ { { { N w.x.y.z.A.B.C.D.L ' E.5 { { { X F.. . ",
+". . z G.~ { { { { H.I.z.+ + _ u J.K.L.M.{ { { { N.O.. . ",
+". . . P.Q.{ { { { { n R.S.q r .T.O.: U.w { { g.V.. . . ",
+". . . . W.X.{ { { { { { c d Y.Z.g b.: .1.{ ~ ; `.. . . ",
+". . . . . +.+{ { { { { { { { { } ++@+#+{ @.$+%+. . . . ",
+". . . . . =.&+*+] { { { { { { { { @.} { =+z.-+. . . . . ",
+". . . . . . . ;+c.b >+{ { { { { { ] ,+'+W._ . . . . . . ",
+". . . . . . . . )+!+~+{+]+^+/+(+_+1 > b.. . . . . . . . "};
diff --git a/scores b/scores
new file mode 100644
index 0000000..11b748a
--- /dev/null
+++ b/scores
@@ -0,0 +1,10 @@
+brian 10 2000
+matias 9 1800
+Gethyn 8 1600
+me 7 1400
+me 6 1200
+me 5 1000
+me 4 800
+me 3 600
+me 2 400
+me 1 200
diff --git a/strings.h b/strings.h
new file mode 100644
index 0000000..a07d138
--- /dev/null
+++ b/strings.h
@@ -0,0 +1,82 @@
+#ifndef STRINGS_H
+#define STRINGS_H
+
+/*
+ * Dialog boxes
+ */
+
+#define newgame_dialog_str "New Game?"
+#define pause_dialog_str "Game paused. Press Continue to continue."
+#define warp_dialog_str "Warp to level?"
+#define quit_dialog_str "Quit Game?"
+
+#define story_dialog_str \
+"The Story:\n\
+\n\
+Yet again, the fate of the world rests\n\
+in your hands! An evil computer hacker,\n\
+known only by his handle 'Lennart', has\n\
+created the ultimate computer virus. A\n\
+virus so powerful that it has the power\n\
+to transmute an ordinary computer into\n\
+a toaster oven. (oooh!) 'Lennart' has\n\
+cloned himself into a billion-jillion\n\
+micro-Lenns. Their sole purpose is to\n\
+deliver the nefarious virus, which has\n\
+been cleverly diguised as a popular\n\
+init system.\n\
+\n\
+As System Administrator/Exterminator,\n\
+your job is to keep Lennart from succeeding\n\
+at his task."
+
+#define rules_dialog_str \
+"The Rules:\n\
+\n\
+xBill was painstakingly designed and\n\
+researched in order to make it as easy to use\n\
+for the whole family as it is for little Sally.\n\
+Years - nay - days of beta testing and \n\
+consulting with the cheapest of human interface\n\
+designers have resulted in a game that is easy\n\
+to use, yet nothing at all like a Macintosh.\n\
+This is exactly like xBill so you get the idea.\n\
+\n\
+I. Whack the Lenns (click)\n\
+II. Restart the computer (click)\n\
+III. Pick up stolen Distros & return (drag)\n\
+ them to their respective computers\n\
+IV. Drag the bucket to extinguish sparks\n\
+V. Scoring is based on total uptime,\n\
+ with bonuses for killing Lenns.\n\
+\n\
+As for the rest, you can probably figure\n\
+it out. We did, so it can't be too hard."
+
+#define endgame_dialog_str \
+"Module XLennart has caused a segmentation fault\n\
+at memory address 097E:F1A0. Core dumped.\n\
+\n\
+We apologize for the inconvenience."
+
+#define entername_dialog_str "You earned a high score.\nEnter your name:"
+
+
+/*
+ * Menus
+ */
+#define newgame_menu_str "New Game"
+#define pause_menu_str "Pause Game"
+#define warp_menu_str "Warp to level..."
+#define highscore_menu_str "View High Scores"
+#define quit_menu_str "Quit Game"
+
+#define story_menu_str "Story of XLennart"
+#define rules_menu_str "Rules"
+#define about_menu_str "About XLennart"
+
+#define score_menu_str "Score"
+#define endgame_menu_str "End Game"
+#define entername_menu_str "Enter Name"
+
+#endif
diff --git a/types.h b/types.h
new file mode 100644
index 0000000..1b154bf
--- /dev/null
+++ b/types.h
@@ -0,0 +1,11 @@
+#ifndef TYPES_H
+#define TYPES_H
+
+typedef struct Scorelist Scorelist;
+typedef struct Picture Picture;
+typedef struct MCursor MCursor;
+typedef struct Cable Cable;
+typedef struct Bill Bill;
+typedef struct Computer Computer;
+
+#endif
diff --git a/util.c b/util.c
new file mode 100644
index 0000000..71c6531
--- /dev/null
+++ b/util.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void
+fatal(const char *format, ...) {
+ va_list args;
+
+ va_start(args, format);
+ vfprintf(stderr, format, args);
+ va_end(args);
+ fprintf(stderr, "\n");
+ exit(1);
+}
+
+void *
+xalloc(int size) {
+ void *p = malloc(size);
+ if (p == NULL)
+ fatal("out of memory");
+ return p;
+}
diff --git a/util.h b/util.h
new file mode 100644
index 0000000..a4e9d53
--- /dev/null
+++ b/util.h
@@ -0,0 +1,29 @@
+#ifndef UTIL_H
+#define UTIL_H
+
+#include <stdlib.h>
+
+#ifdef RAND
+#undef RAND
+#endif
+#define RAND(lb, ub) (rand() % ((ub) - (lb) + 1) + (lb))
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
+
+#ifdef MIN
+#undef MIN
+#endif
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
+
+#ifdef UNUSED
+#undef UNUSED
+#endif
+#define UNUSED(x) (void)(x)
+
+void *xalloc(int size);
+void fatal(const char *format, ...);
+
+#endif
diff --git a/x11-athena.c b/x11-athena.c
new file mode 100644
index 0000000..49453b9
--- /dev/null
+++ b/x11-athena.c
@@ -0,0 +1,296 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "x11.h"
+#include "x11-athena.h"
+
+#include <X11/Xaw/XawInit.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/Box.h>
+#include <X11/Xaw/MenuButton.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/SmeLine.h>
+#include <X11/Xaw/AsciiText.h>
+
+#include "util.h"
+
+#include "Game.h"
+#include "UI.h"
+
+static Widget base, menubar, field;
+static Widget dialogs[DIALOG_MAX + 1];
+static Widget pausebutton;
+
+static void
+x11_athena_popup_dialog(int index) {
+ x11_popup(dialogs[index]);
+}
+
+static void
+popup(Widget w, XtPointer client_data, XtPointer call_data) {
+ UNUSED(w);
+ UNUSED(call_data);
+ x11_athena_popup_dialog((int)client_data);
+}
+
+static Widget
+new_menu_item(Widget pshell, int dialog) {
+ Widget menu_item = XtCreateManagedWidget(UI_menu_string(dialog),
+ smeBSBObjectClass,
+ pshell, NULL, 0);
+ XtAddCallback(menu_item, XtNcallback, popup, (void *) dialog);
+ return menu_item;
+}
+
+static Widget
+CreateMenuBar(const char *name, Widget parent) {
+ Widget menubar, pshell;
+ Widget game_menu, info_menu;
+
+ menubar = XtVaCreateManagedWidget(name, boxWidgetClass, parent,
+ XtNborderWidth, 0,
+ XtNorientation, XtEhorizontal, NULL);
+
+ game_menu = XtCreateManagedWidget("Game", menuButtonWidgetClass,
+ menubar, NULL, 0);
+ pshell = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ game_menu, NULL, 0);
+
+ new_menu_item(pshell, DIALOG_NEWGAME);
+ pausebutton = new_menu_item(pshell, DIALOG_PAUSEGAME);
+ new_menu_item(pshell, DIALOG_WARPLEVEL);
+ new_menu_item(pshell, DIALOG_HIGHSCORE);
+ new_menu_item(pshell, DIALOG_QUITGAME);
+
+ info_menu = XtCreateManagedWidget("Info", menuButtonWidgetClass,
+ menubar, NULL, 0);
+ pshell = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ info_menu, NULL, 0);
+
+ new_menu_item(pshell, DIALOG_STORY);
+ new_menu_item(pshell, DIALOG_RULES);
+ new_menu_item(pshell, DIALOG_ABOUT);
+
+ return menubar;
+}
+
+static void
+close_window (Widget w, XtPointer client_data, XtPointer call_data) {
+ UNUSED(client_data);
+ UNUSED(call_data);
+ XtPopdown(XtParent(XtParent(w)));
+}
+
+static Widget
+CreateRowCol(const char *name, Widget parent) {
+ return XtCreateManagedWidget(name, boxWidgetClass, parent, NULL, 0);
+}
+
+static void
+CreatePixmapBox(int index, Widget parent, Pixmap logo, Pixmap pixmap) {
+ Widget base, pshell, button;
+ const char *text = UI_dialog_string(index);
+
+ pshell = XtCreatePopupShell(UI_menu_string(index),
+ transientShellWidgetClass, parent, NULL, 0);
+
+ base = CreateRowCol("", pshell);
+
+ XtVaCreateManagedWidget("", labelWidgetClass, base,
+ XtNbitmap, logo, XtNborderWidth, 0, NULL);
+
+ if (pixmap)
+ XtVaCreateManagedWidget("", labelWidgetClass, base,
+ XtNbitmap, pixmap, XtNborderWidth,
+ 0, NULL);
+ if (text != NULL)
+ XtVaCreateManagedWidget("", labelWidgetClass, base,
+ XtNlabel, text, XtNborderWidth, 0, NULL);
+
+ button = XtVaCreateManagedWidget("OK", commandWidgetClass, base, NULL);
+ XtAddCallback(button, XtNcallback, close_window, NULL);
+ dialogs[index] = base;
+}
+
+static void
+CreateEnterText(int index, Widget parent, XtCallbackProc callback) {
+ Widget base, pshell, button, textfield;
+ pshell = XtCreatePopupShell(UI_menu_string(index),
+ transientShellWidgetClass, parent, NULL, 0);
+ base = CreateRowCol("", pshell);
+ XtVaCreateManagedWidget("", labelWidgetClass, base,
+ XtNlabel, UI_dialog_string(index), XtNborderWidth, 0, NULL);
+
+ textfield = XtVaCreateManagedWidget("", asciiTextWidgetClass, base,
+ XtNeditType, XawtextEdit, XtNstring, "", XtNwidth, 200, NULL);
+
+ button = XtVaCreateManagedWidget("OK", commandWidgetClass, base, NULL);
+ XtAddCallback(button, XtNcallback, callback, textfield);
+ XtAddCallback(button, XtNcallback, close_window, NULL);
+ button = XtVaCreateManagedWidget("Cancel", commandWidgetClass, base,
+ NULL);
+ XtAddCallback(button, XtNcallback, close_window, NULL);
+ dialogs[index] = base;
+}
+
+static void
+CreateDialog(int index, Widget parent, int hascancel, Pixmap icon,
+ const char *buttonlabel, XtCallbackProc callback)
+{
+ Widget base, pshell, button;
+ const char *text = UI_dialog_string(index);
+ char ttext[16];
+
+ pshell = XtCreatePopupShell(UI_menu_string(index),
+ transientShellWidgetClass, parent, NULL, 0);
+ base = CreateRowCol("base", pshell);
+ if (icon)
+ XtVaCreateManagedWidget("", labelWidgetClass, base,
+ XtNbitmap, icon,
+ XtNborderWidth, 0, NULL);
+ if (text != NULL && strlen(text) < sizeof(ttext)) {
+ sprintf(ttext, "%-*s", (int)sizeof(ttext) - 1, text);
+ text = ttext;
+ }
+ XtVaCreateManagedWidget("label", labelWidgetClass, base,
+ XtNlabel, text, XtNborderWidth, 0, NULL);
+
+ if (!buttonlabel)
+ buttonlabel="OK";
+ button = XtVaCreateManagedWidget(buttonlabel, commandWidgetClass,
+ base, NULL);
+ if (callback)
+ XtAddCallback(button, XtNcallback, callback, NULL);
+ XtAddCallback(button, XtNcallback, close_window, NULL);
+
+ if (hascancel) {
+ button = XtVaCreateManagedWidget("Cancel", commandWidgetClass,
+ base, NULL);
+ XtAddCallback(button, XtNcallback, close_window, NULL);
+ }
+ dialogs[index] = base;
+}
+
+static Widget
+CreateDrawingArea(const char *name, Widget parent, int width, int height) {
+ return XtVaCreateManagedWidget(name, coreWidgetClass, parent, XtNwidth,
+ width, XtNheight, height, NULL);
+}
+
+static void
+x11_athena_update_dialog(int index, const char *str) {
+ WidgetList t;
+ XtVaGetValues(dialogs[index], XtNchildren, &t, NULL);
+ XtVaSetValues(t[0], XtNlabel, str, NULL);
+}
+
+static void
+x11_athena_make_main_window(int size) {
+ x11_setup_resources();
+ base = XtVaCreateManagedWidget("base", boxWidgetClass, x11_toplevel(),
+ XtNhSpace, 0, XtNvSpace, 0, NULL);
+ menubar = CreateMenuBar("menubar", base);
+ field = CreateDrawingArea("field", base, size, size);
+ x11_setup();
+ x11_set_drawingarea(field, size);
+ x11_add_event_handlers(field);
+}
+
+static void
+new_game(Widget w, XtPointer client_data, XtPointer call_data) {
+ UNUSED(w);
+ UNUSED(client_data);
+ UNUSED(call_data);
+ Game_start(1);
+}
+
+static void
+quit_game(Widget w, XtPointer client_data, XtPointer call_data) {
+ UNUSED(w);
+ UNUSED(client_data);
+ UNUSED(call_data);
+ Game_quit();
+}
+
+static void
+warp_apply(Widget w, XtPointer client_data, XtPointer call_data) {
+ char *str;
+ char *endp;
+ int newlevel;
+ Widget text = (Widget) client_data;
+
+ UNUSED(w);
+ UNUSED(call_data);
+
+ XtVaGetValues(text, XtNstring, &str, NULL);
+ newlevel = strtol(str, &endp, 10);
+ if (*endp != '\0')
+ return;
+ Game_warp_to_level(newlevel);
+}
+
+static void
+enter_name(Widget w, XtPointer client_data, XtPointer call_data) {
+ char *str;
+ Widget text = (Widget) client_data;
+
+ UNUSED(w);
+ UNUSED(call_data);
+
+ XtVaGetValues(text, XtNstring, &str, NULL);
+ Game_add_high_score(str);
+}
+
+static void
+x11_athena_create_dialogs(Picture *logo, Picture *icon, Picture *about) {
+ CreateDialog(DIALOG_NEWGAME, base, 1, (Pixmap)NULL, NULL, new_game);
+ CreateDialog(DIALOG_PAUSEGAME, base, 0, icon->pix, "Continue", NULL);
+ CreateEnterText(DIALOG_WARPLEVEL, base, warp_apply);
+ CreateDialog(DIALOG_HIGHSCORE, base, 0, (Pixmap)NULL, NULL, NULL);
+ CreateDialog(DIALOG_QUITGAME, base, 1, (Pixmap)NULL, NULL, quit_game);
+
+ CreatePixmapBox(DIALOG_STORY, base, logo->pix, (Pixmap)NULL);
+ CreatePixmapBox(DIALOG_RULES, base, logo->pix, (Pixmap)NULL);
+ CreatePixmapBox(DIALOG_ABOUT, base, logo->pix, about->pix);
+
+ CreateDialog(DIALOG_SCORE, base, 0, (Pixmap)NULL, NULL, NULL);
+ CreateDialog(DIALOG_ENDGAME, base, 0, (Pixmap)NULL, "Nuts!", NULL);
+ CreateEnterText(DIALOG_ENTERNAME, base, enter_name);
+}
+
+static void
+x11_athena_set_pausebutton(int active) {
+ if (pausebutton != NULL)
+ XtSetSensitive(pausebutton, active);
+}
+
+static struct UI_methods x11_athena_methods = {
+ x11_set_cursor,
+ x11_load_cursor,
+ x11_load_picture,
+ x11_set_icon,
+ x11_picture_width,
+ x11_picture_height,
+ x11_graphics_init,
+ x11_clear_window,
+ x11_refresh_window,
+ x11_draw_image,
+ x11_draw_line,
+ x11_draw_string,
+ x11_start_timer,
+ x11_stop_timer,
+ x11_timer_active,
+ x11_athena_popup_dialog,
+ x11_main_loop,
+ x11_initialize,
+ x11_athena_make_main_window,
+ x11_athena_create_dialogs,
+ x11_athena_set_pausebutton,
+ x11_athena_update_dialog,
+};
+
+void
+x11_athena_setmethods(UI_methods **methodsp) {
+ *methodsp = &x11_athena_methods;
+}
diff --git a/x11-athena.h b/x11-athena.h
new file mode 100644
index 0000000..5ae419b
--- /dev/null
+++ b/x11-athena.h
@@ -0,0 +1,9 @@
+#ifndef X11_ATHENA_H
+#define X11_ATHENA_H
+
+#include "UI.h"
+
+void
+x11_athena_setmethods(UI_methods **methodsp);
+
+#endif
diff --git a/x11-motif.c b/x11-motif.c
new file mode 100644
index 0000000..b1af1b0
--- /dev/null
+++ b/x11-motif.c
@@ -0,0 +1,296 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "x11.h"
+#include "x11-motif.h"
+
+#include <Xm/Xm.h>
+#include <Xm/Label.h>
+#include <Xm/RowColumn.h>
+#include <Xm/DrawingA.h>
+#include <Xm/PushB.h>
+#include <Xm/CascadeB.h>
+#include <Xm/MessageB.h>
+#include <Xm/SelectioB.h>
+#include <Xm/Text.h>
+
+#include "util.h"
+
+#include "Game.h"
+#include "UI.h"
+
+static Widget base, menubar, field;
+static Widget dialogs[DIALOG_MAX + 1];
+static Widget pausebutton;
+
+static void
+x11_motif_popup_dialog(int index) {
+ x11_popup(dialogs[index]);
+}
+
+static void
+popup(Widget w, XtPointer client_data, XtPointer call_data) {
+ UNUSED(w);
+ UNUSED(call_data);
+ x11_motif_popup_dialog((int)client_data);
+}
+
+static Widget
+new_menu_item(Widget pulldown, int dialog) {
+ Widget menu_item = XtCreateManagedWidget(UI_menu_string(dialog),
+ xmPushButtonWidgetClass,
+ pulldown, NULL, 0);
+ XtAddCallback(menu_item, XmNactivateCallback, popup, (void *) dialog);
+ return menu_item;
+}
+
+static Widget
+CreateMenuBar(const char *name, Widget parent) {
+ Widget menubar, pulldown;
+ Widget game_menu, info_menu;
+
+ menubar = XmCreateMenuBar(parent, (char *)name, NULL, 0);
+ XtManageChild(menubar);
+
+ pulldown = XmCreatePulldownMenu(menubar, "menu", NULL, 0);
+ game_menu = XtVaCreateManagedWidget("Game",
+ xmCascadeButtonWidgetClass,
+ menubar, XmNsubMenuId,
+ pulldown, NULL);
+
+ new_menu_item(pulldown, DIALOG_NEWGAME);
+ pausebutton = new_menu_item(pulldown, DIALOG_PAUSEGAME);
+ new_menu_item(pulldown, DIALOG_WARPLEVEL);
+ new_menu_item(pulldown, DIALOG_HIGHSCORE);
+ new_menu_item(pulldown, DIALOG_QUITGAME);
+
+ pulldown = XmCreatePulldownMenu(menubar, "menu", NULL, 0);
+ info_menu = XtVaCreateManagedWidget("Info",
+ xmCascadeButtonWidgetClass,
+ menubar, XmNsubMenuId,
+ pulldown, NULL);
+
+ new_menu_item(pulldown, DIALOG_STORY);
+ new_menu_item(pulldown, DIALOG_RULES);
+ new_menu_item(pulldown, DIALOG_ABOUT);
+
+ return menubar;
+}
+
+static Widget
+CreateRowCol(const char *name, Widget parent) {
+ return XtVaCreateManagedWidget(name, xmRowColumnWidgetClass, parent,
+ XmNorientation, XmVERTICAL, NULL);
+}
+
+static void
+CreatePixmapBox(int index, Widget parent, Pixmap logo, Pixmap pixmap) {
+ Arg wargs[2];
+ XmString mstr;
+ Widget dialog, base;
+ const char *text = UI_dialog_string(index);
+
+ mstr = XmStringCreateLtoR("", XmSTRING_DEFAULT_CHARSET);
+ XtSetArg(wargs[0], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL);
+ XtSetArg(wargs[1], XmNmessageString, mstr);
+ dialog = XmCreateMessageDialog(parent, (char *)UI_menu_string(index),
+ wargs, 2);
+
+ base = CreateRowCol("", dialog);
+
+ XtVaCreateManagedWidget("", xmLabelWidgetClass, base, XmNlabelType,
+ XmPIXMAP, XmNlabelPixmap, logo, NULL);
+
+ if (pixmap)
+ XtVaCreateManagedWidget("", xmLabelWidgetClass, base,
+ XmNlabelType, XmPIXMAP,
+ XmNlabelPixmap, pixmap, NULL);
+
+ if (text) {
+ mstr = XmStringCreateLtoR((char *)text,
+ XmSTRING_DEFAULT_CHARSET);
+ XtVaCreateManagedWidget(text, xmLabelWidgetClass, base,
+ XmNlabelString, mstr, NULL);
+ XmStringFree(mstr);
+ }
+
+ XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON));
+ XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_HELP_BUTTON));
+ dialogs[index] = dialog;
+}
+
+static void
+CreateEnterText(int index, Widget parent, XtCallbackProc callback) {
+ Widget dialog;
+ Arg wargs[2];
+ XmString mstr = XmStringCreateLtoR((char *) UI_dialog_string(index),
+ XmSTRING_DEFAULT_CHARSET);
+ XtSetArg(wargs[0], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL);
+ XtSetArg(wargs[1], XmNselectionLabelString, mstr);
+ dialog = XmCreatePromptDialog(parent, (char *) UI_menu_string(index),
+ wargs, 2);
+ XtUnmanageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_HELP_BUTTON));
+ XtUnmanageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_APPLY_BUTTON));
+ XtAddCallback(dialog, XmNokCallback, callback,
+ XmSelectionBoxGetChild(dialog, XmDIALOG_TEXT));
+ dialogs[index] = dialog;
+}
+
+static void
+CreateDialog(int index, Widget parent, int hascancel, Pixmap icon,
+ const char *buttonlabel, XtCallbackProc callback)
+{
+ Widget dialog;
+ Arg wargs[2];
+ XmString mstr = XmStringCreateLtoR((char *) UI_dialog_string(index),
+ XmSTRING_DEFAULT_CHARSET);
+ XtSetArg(wargs[0], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL);
+ XtSetArg(wargs[1], XmNmessageString, mstr);
+ dialog = XmCreateMessageDialog(parent, (char *) UI_menu_string(index),
+ wargs, 2);
+ if (icon != (Pixmap) NULL)
+ XtVaSetValues(dialog, XmNsymbolPixmap, icon, NULL);
+ XmStringFree(mstr);
+ if (!hascancel)
+ XtUnmanageChild(XmMessageBoxGetChild(dialog,
+ XmDIALOG_CANCEL_BUTTON));
+ XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_HELP_BUTTON));
+ if (buttonlabel != NULL) {
+ mstr = XmStringCreateLtoR((char *) buttonlabel,
+ XmSTRING_DEFAULT_CHARSET);
+ XtVaSetValues(XmMessageBoxGetChild(dialog, XmDIALOG_OK_BUTTON),
+ XmNlabelString, mstr, NULL);
+ XmStringFree(mstr);
+ }
+ if (callback != NULL)
+ XtAddCallback(dialog, XmNokCallback, callback, NULL);
+ dialogs[index] = dialog;
+}
+
+static Widget
+CreateDrawingArea(const char *name, Widget parent, int width, int height) {
+ return XtVaCreateManagedWidget(name, xmDrawingAreaWidgetClass, parent,
+ XtNwidth, width, XtNheight, height,
+ XmNresizePolicy, FALSE, NULL);
+}
+
+static void
+x11_motif_update_dialog(int index, const char *str) {
+ XmString mstr = XmStringCreateLtoR((char *) str,
+ XmSTRING_DEFAULT_CHARSET);
+ XtVaSetValues(
+ XmMessageBoxGetChild(dialogs[index], XmDIALOG_MESSAGE_LABEL),
+ XmNlabelString, mstr, NULL);
+ XmStringFree(mstr);
+}
+
+static void
+x11_motif_make_main_window(int size) {
+ x11_setup_resources();
+ base = CreateRowCol("base", x11_toplevel());
+ menubar = CreateMenuBar("menubar", base);
+ field = CreateDrawingArea("field", base, size, size);
+ x11_setup();
+ x11_set_drawingarea(field, size);
+ x11_add_event_handlers(field);
+}
+
+static void
+new_game(Widget w, XtPointer client_data, XtPointer call_data) {
+ UNUSED(w);
+ UNUSED(client_data);
+ UNUSED(call_data);
+ Game_start(1);
+}
+
+static void
+quit_game(Widget w, XtPointer client_data, XtPointer call_data) {
+ UNUSED(w);
+ UNUSED(client_data);
+ UNUSED(call_data);
+ Game_quit();
+}
+
+static void
+warp_apply(Widget w, XtPointer client_data, XtPointer call_data) {
+ char *str;
+ char *endp;
+ int newlevel;
+ Widget text = (Widget) client_data;
+
+ UNUSED(w);
+ UNUSED(call_data);
+
+ str = XmTextGetString(text);
+ newlevel = strtol(str, &endp, 10);
+ if (*endp != '\0')
+ return;
+ XtFree(str);
+ Game_warp_to_level(newlevel);
+}
+
+static void
+enter_name(Widget w, XtPointer client_data, XtPointer call_data) {
+ char *str;
+ Widget text = (Widget) client_data;
+
+ UNUSED(w);
+ UNUSED(call_data);
+
+ str = XmTextGetString(text);
+ Game_add_high_score(str);
+ XtFree(str);
+}
+
+static void
+x11_motif_create_dialogs(Picture *logo, Picture *icon, Picture *about) {
+ CreateDialog(DIALOG_NEWGAME, base, 1, (Pixmap)NULL, NULL, new_game);
+ CreateDialog(DIALOG_PAUSEGAME, base, 0, icon->pix, "Continue", NULL);
+ CreateEnterText(DIALOG_WARPLEVEL, base, warp_apply);
+ CreateDialog(DIALOG_HIGHSCORE, base, 0, (Pixmap)NULL, NULL, NULL);
+ CreateDialog(DIALOG_QUITGAME, base, 1, (Pixmap)NULL, NULL, quit_game);
+
+ CreatePixmapBox(DIALOG_STORY, base, logo->pix, (Pixmap)NULL);
+ CreatePixmapBox(DIALOG_RULES, base, logo->pix, (Pixmap)NULL);
+ CreatePixmapBox(DIALOG_ABOUT, base, logo->pix, about->pix);
+
+ CreateDialog(DIALOG_SCORE, base, 0, (Pixmap)NULL, NULL, NULL);
+ CreateDialog(DIALOG_ENDGAME, base, 0, (Pixmap)NULL, "Nuts!", NULL);
+ CreateEnterText(DIALOG_ENTERNAME, base, enter_name);
+}
+
+static void
+x11_motif_set_pausebutton(int active) {
+ if (pausebutton != NULL)
+ XtSetSensitive(pausebutton, active);
+}
+
+static struct UI_methods x11_motif_methods = {
+ x11_set_cursor,
+ x11_load_cursor,
+ x11_load_picture,
+ x11_set_icon,
+ x11_picture_width,
+ x11_picture_height,
+ x11_graphics_init,
+ x11_clear_window,
+ x11_refresh_window,
+ x11_draw_image,
+ x11_draw_line,
+ x11_draw_string,
+ x11_start_timer,
+ x11_stop_timer,
+ x11_timer_active,
+ x11_motif_popup_dialog,
+ x11_main_loop,
+ x11_initialize,
+ x11_motif_make_main_window,
+ x11_motif_create_dialogs,
+ x11_motif_set_pausebutton,
+ x11_motif_update_dialog,
+};
+
+void
+x11_motif_setmethods(UI_methods **methodsp) {
+ *methodsp = &x11_motif_methods;
+}
diff --git a/x11-motif.h b/x11-motif.h
new file mode 100644
index 0000000..cae0b4e
--- /dev/null
+++ b/x11-motif.h
@@ -0,0 +1,9 @@
+#ifndef X11_MOTIF_H
+#define X11_MOTIF_H
+
+#include "UI.h"
+
+void
+x11_motif_setmethods(UI_methods **methodsp);
+
+#endif
diff --git a/x11.c b/x11.c
new file mode 100644
index 0000000..51b0ffd
--- /dev/null
+++ b/x11.c
@@ -0,0 +1,388 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "x11.h"
+#include "util.h"
+
+#include "Game.h"
+#include "UI.h"
+
+static int in_popup;
+
+static const char *pictdir;
+
+static Display *display;
+static XtAppContext app;
+static Drawable window, rootwindow;
+static Colormap colormap;
+static int depth;
+static XColor white, black;
+static Pixmap offscreen;
+static XtIntervalId timer;
+static GC stdgc, whitegc;
+static int screensize;
+
+static Widget toplevel, field;
+
+/*
+ * Callback functions
+ */
+
+static void
+popdown(Widget w, XtPointer client_data, XtPointer call_data) {
+ UNUSED(w);
+ UNUSED(client_data);
+ UNUSED(call_data);
+ in_popup = 0;
+}
+
+void
+x11_popup(Widget dialog) {
+ Window temp;
+ int tx, ty;
+ XWindowAttributes tattr, pattr;
+ int px, py;
+
+ XtRealizeWidget(XtParent(dialog));
+ XtSetMappedWhenManaged(XtParent(dialog), FALSE);
+ XtManageChild(dialog);
+ in_popup = 1;
+
+ XTranslateCoordinates(display, XtWindow(toplevel), rootwindow,
+ 0, 0, &tx, &ty, &temp);
+ XGetWindowAttributes(display, XtWindow(toplevel), &tattr);
+ XGetWindowAttributes(display, XtWindow(dialog), &pattr);
+ px = tx + (tattr.width - pattr.width) / 2;
+ py = ty + (tattr.height - pattr.height) / 2;
+ XtVaSetValues(XtParent(dialog), XtNx, px, XtNy, py, NULL);
+
+ XtAddCallback(XtParent(dialog), XtNpopdownCallback,
+ (XtCallbackProc) popdown, NULL);
+ XtPopup(XtParent(dialog), XtGrabExclusive);
+ while (in_popup || XtAppPending(app))
+ XtAppProcessEvent(app, XtIMXEvent);
+}
+
+/*
+ * Event handlers
+ */
+
+static void
+leave_window(Widget w, XtPointer client_data, XEvent *event, Boolean *b) {
+ UNUSED(w);
+ UNUSED(client_data);
+ UNUSED(event);
+ UNUSED(b);
+
+ UI_pause_game();
+}
+
+static void
+enter_window(Widget w, XtPointer client_data, XEvent *event, Boolean *b) {
+ UNUSED(w);
+ UNUSED(client_data);
+ UNUSED(event);
+ UNUSED(b);
+
+ UI_resume_game();
+}
+
+static void
+redraw_window(Widget w, XtPointer client_data, XEvent *event, Boolean *b) {
+ UNUSED(w);
+ UNUSED(client_data);
+ UNUSED(event);
+ UNUSED(b);
+
+ UI_refresh();
+}
+
+static void
+button_press(Widget w, XtPointer data, XEvent *event, Boolean *b) {
+ XButtonEvent *buttonevent = (XButtonEvent *) event;
+
+ UNUSED(w);
+ UNUSED(data);
+ UNUSED(b);
+
+ Game_button_press(buttonevent->x, buttonevent->y);
+}
+
+static void
+button_release(Widget w, XtPointer data, XEvent *event, Boolean *b) {
+ XButtonEvent *buttonevent = (XButtonEvent *) event;
+
+ UNUSED(w);
+ UNUSED(data);
+ UNUSED(b);
+
+ Game_button_release(buttonevent->x, buttonevent->y);
+}
+
+static void
+timer_tick(XtPointer client_data, XtIntervalId *timer_id) {
+ UNUSED(client_data);
+ UNUSED(timer_id);
+
+ UI_restart_timer();
+ Game_update();
+}
+
+/*
+ * Cursor handling
+ */
+
+void
+x11_set_cursor(MCursor *cursor) {
+ XDefineCursor(display, window, cursor->cursor);
+}
+
+void
+x11_load_cursor(const char *name, int masked, MCursor **cursorp) {
+ MCursor *cursor;
+ Pixmap bitmap, mask;
+ int i, xh, yh;
+ unsigned width, height;
+ char file[255];
+
+ cursor = xalloc(sizeof *cursor);
+
+ sprintf(file, "%s/bitmaps/%s.xbm", pictdir, name);
+ i = XReadBitmapFile(display, rootwindow, file,
+ &width, &height, &bitmap, &xh, &yh);
+ if (i == BitmapOpenFailed)
+ fatal("cannot open %s", file);
+ if (masked == CURSOR_SEP_MASK) {
+ sprintf(file, "%s/bitmaps/%s_mask.xbm", pictdir, name);
+ i = XReadBitmapFile(display, rootwindow,
+ file, &width, &height, &mask, &xh, &yh);
+ if (i == BitmapOpenFailed)
+ fatal("cannot open %s", file);
+ }
+ else
+ mask = bitmap;
+ cursor->cursor = XCreatePixmapCursor(display, bitmap, mask,
+ &black, &white,
+ width/2, height/2);
+ *cursorp = cursor;
+}
+
+/*
+ * Pixmap handling
+ */
+
+void
+x11_load_picture(const char *name, int trans, Picture **pictp) {
+ Picture *pict;
+ int i;
+ char file[255];
+ XpmColorSymbol symbol;
+ Pixmap mask;
+ XpmAttributes attr;
+ unsigned long gcmask;
+ XGCValues gcval;
+
+ pict = xalloc(sizeof *pict);
+
+ gcmask = GCForeground | GCBackground | GCGraphicsExposures;
+ gcval.graphics_exposures = False;
+ attr.valuemask = XpmCloseness | XpmReturnPixels | XpmColormap |
+ XpmDepth;
+ attr.closeness = 65535;
+ attr.colormap = colormap;
+ attr.depth = depth;
+ if (!trans) {
+ symbol.name = NULL;
+ symbol.value = "none";
+ XtVaGetValues(field, XtNbackground, &symbol.pixel, NULL);
+ attr.colorsymbols = &symbol;
+ attr.numsymbols = 1;
+ attr.valuemask |= XpmColorSymbols;
+ }
+ sprintf(file, "%s/pixmaps/%s.xpm", pictdir, name);
+ i = XpmReadFileToPixmap(display, rootwindow, file, &pict->pix,
+ &mask, &attr);
+ if (i < 0)
+ fatal("cannot open %s", file);
+ pict->mask = mask;
+ pict->gc = XCreateGC(display, offscreen, gcmask, &gcval);
+ if (trans)
+ XSetClipMask(display, pict->gc, mask);
+ pict->width = attr.width;
+ pict->height = attr.height;
+
+ *pictp = pict;
+}
+
+void
+x11_set_icon(Picture *icon) {
+ XtVaSetValues(toplevel, XtNiconPixmap, icon->pix,
+ XtNiconMask, icon->mask, NULL);
+}
+
+int
+x11_picture_width(Picture *pict) {
+ return (pict->width);
+}
+
+int
+x11_picture_height(Picture *pict) {
+ return (pict->height);
+}
+
+/*
+ * Graphics operations
+ */
+
+void
+x11_graphics_init() {
+ XGCValues gcval;
+ unsigned long gcmask;
+ gcmask = GCGraphicsExposures;
+ gcval.graphics_exposures = False;
+ stdgc = XCreateGC(display, window, gcmask, &gcval);
+ XSetLineAttributes(display, stdgc, 2, LineSolid, CapRound, JoinMiter);
+ XSetBackground(display, stdgc, white.pixel);
+ XSetForeground(display, stdgc, black.pixel);
+ whitegc = XCreateGC(display, window, gcmask, &gcval);
+ XSetBackground(display, whitegc, white.pixel);
+ XSetForeground(display, whitegc, white.pixel);
+ offscreen = XCreatePixmap(display, rootwindow, screensize,
+ screensize, depth);
+}
+
+void
+x11_clear_window() {
+ XFillRectangle(display, offscreen, whitegc, 0, 0,
+ screensize, screensize);
+}
+
+void
+x11_refresh_window() {
+ XCopyArea(display, offscreen, window, stdgc, 0, 0,
+ screensize, screensize, 0, 0);
+}
+
+void
+x11_draw_image(Picture *pict, int x, int y) {
+ XSetClipOrigin(display, pict->gc, x, y);
+ XCopyArea(display, pict->pix, offscreen, pict->gc, 0, 0,
+ pict->width, pict->height, x, y);
+}
+
+void
+x11_draw_line(int x1, int y1, int x2, int y2) {
+ XDrawLine(display, offscreen, stdgc, x1, y1, x2, y2);
+}
+
+void
+x11_draw_string(const char *str, int x, int y) {
+ XDrawString(display, offscreen, stdgc, x, y, str, strlen(str));
+}
+
+/*
+ * Timer operations
+ */
+
+void
+x11_start_timer(int ms) {
+ timer = XtAppAddTimeOut(app, ms, timer_tick, NULL);
+}
+
+void
+x11_stop_timer() {
+ if (!timer)
+ return;
+ XtRemoveTimeOut(timer);
+ timer = (XtIntervalId) 0;
+}
+
+int
+x11_timer_active() {
+ return (!!timer);
+}
+
+/*
+ * Main Loop
+ */
+void
+x11_main_loop() {
+ XtAppMainLoop(app);
+}
+
+/*
+ * Initialization
+ */
+void
+x11_initialize(int *argc, char **argv) {
+ struct stat stats;
+
+ timer = (XtIntervalId) 0;
+ toplevel = XtAppInitialize(&app, "XBill", NULL, 0, argc, argv,
+ NULL, NULL, 0);
+ display = XtDisplay(toplevel);
+
+ if (stat(IMAGES, &stats) == 0)
+ pictdir = IMAGES;
+ else
+ pictdir = ".";
+}
+
+void
+x11_setup_resources() {
+ XrmDatabase database;
+
+ database = XrmGetDatabase(display);
+ XrmPutStringResource(&database, "*background", "#c4c4c4");
+ XrmPutStringResource(&database, "*foreground", "#000000");
+ XrmSetDatabase(display, database);
+}
+
+void
+x11_setup() {
+ Screen *screen;
+ XSizeHints h;
+ Dimension winwidth, winheight;
+
+ XtRealizeWidget(toplevel);
+ screen = XtScreen(toplevel);
+ depth = DefaultDepthOfScreen(screen);
+ rootwindow = RootWindowOfScreen(screen);
+
+ colormap = DefaultColormapOfScreen(screen);
+ white.pixel = WhitePixelOfScreen(screen);
+ XQueryColor(display, colormap, &white);
+ black.pixel = BlackPixelOfScreen(screen);
+ XQueryColor(display, colormap, &black);
+
+ XtVaGetValues(toplevel, XtNwidth, &winwidth, XtNheight, &winheight,
+ NULL);
+ h.width = h.base_width = h.min_width = h.max_width = winwidth;
+ h.height = h.base_height = h.min_height = h.max_height = winheight;
+ h.width_inc = h.height_inc = 0;
+ h.flags = PSize|PMaxSize|PMinSize|PBaseSize|PResizeInc;
+ XSetWMNormalHints(display, XtWindow(toplevel), &h);
+}
+
+void
+x11_add_event_handlers(Widget w) {
+ XtAddEventHandler(w, ButtonPressMask, FALSE, button_press, NULL);
+ XtAddEventHandler(w, ButtonReleaseMask, FALSE, button_release, NULL);
+ XtAddEventHandler(w, LeaveWindowMask, FALSE, leave_window, NULL);
+ XtAddEventHandler(w, EnterWindowMask, FALSE, enter_window, NULL);
+ XtAddEventHandler(w, ExposureMask, FALSE, redraw_window, NULL);
+}
+
+Widget
+x11_toplevel() {
+ return toplevel;
+}
+
+void
+x11_set_drawingarea(Widget w, int size) {
+ field = w;
+ window = XtWindow(w);
+ screensize = size;
+}
diff --git a/x11.h b/x11.h
new file mode 100644
index 0000000..04910e9
--- /dev/null
+++ b/x11.h
@@ -0,0 +1,56 @@
+#ifndef X11_WIDGETS_H
+#define X11_WIDGETS_H
+
+#include <X11/Xlib.h>
+#include <X11/Intrinsic.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#include <X11/Xresource.h>
+#include <X11/xpm.h>
+
+#ifdef VMS
+#include <signal.h>
+#include <X11VMS/vmsutil.h>
+#endif
+
+#include "types.h"
+
+struct MCursor {
+ Pixmap cursor;
+};
+
+struct Picture {
+ Dimension width, height;
+ Pixmap pix;
+ Pixmap mask;
+ GC gc;
+};
+
+void x11_set_cursor(MCursor *cursor);
+void x11_load_cursor(const char *name, int masked, MCursor **cursorp);
+void x11_load_picture(const char *name, int trans, Picture **pictp);
+void x11_set_icon(Picture *icon);
+int x11_picture_width(Picture *pict);
+int x11_picture_height(Picture *pict);
+void x11_graphics_init(void);
+void x11_clear_window(void);
+void x11_refresh_window(void);
+void x11_draw_image(Picture *pict, int x, int y);
+void x11_draw_line(int x1, int y1, int x2, int y2);
+void x11_draw_string(const char *str, int x, int y);
+void x11_start_timer(int ms);
+void x11_stop_timer(void);
+int x11_timer_active(void);
+void x11_main_loop(void);
+void x11_initialize(int *argc, char **argv);
+void x11_create_dialogs(Picture *logo, Picture *icon, Picture *about);
+
+void x11_setup_resources(void);
+void x11_setup(void);
+void x11_add_event_handlers(Widget w);
+void x11_popup (Widget dialog);
+Widget x11_toplevel(void);
+void x11_set_drawingarea(Widget w, int size);
+
+#endif
diff --git a/xlennart.6 b/xlennart.6
new file mode 100644
index 0000000..017389c
--- /dev/null
+++ b/xlennart.6
@@ -0,0 +1,85 @@
+.\" This man page was originally written by pema@niksula.hut.fi for XBill
+.\" It's currently maintained by xylem2020@gmail.com
+.TH "xlennart" "6" "October 2014" "Version 1.0"
+.SH NAME
+xlennart \- save your computers from SystenD [TM] virus
+.SH SYNOPSIS
+.sp
+.B xlennart [-l\fI level\fP] [--gui \fIgui\fP] [--size\fIsize\fP] [-v] [-h]
+.SH DESCRIPTION
+.PP
+Ever get the feeling that nothing is going right? You're a sysadmin, and
+someone's trying to destroy your computers. The little people running
+around the screen are trying to infect your computers with SystenD [TM],
+a virus cleverly designed to resemble a popular init system. Your
+objective is to click the mouse on them, ending their potential threat.
+If one of the people reaches a computer, it will attempt to replace your
+operating system with the virus it carries. It will then attempt to run off
+the screen with your vital software. The game ends when only 1 (or 0) of
+your computers are being productive. Additionally, some computers are
+connected with network cables. When one computer on a network becomes
+infected, a spark will be sent down the cable, and will infect the computer
+on the other end when it reaches there.
+.PP
+Clicking the button on one of the little people will cause it to cry out in
+pain and melt (id software eat your heart out!), dropping the stolen os if it
+is carrying one. If a computer is running SystenD or is temporarily off, the
+os can be dragged back to the computer (or another computer compatible with
+that os). To extinguish a spark, drag the bucket of water from the upper
+left corner onto it.
+.PP
+The status bar at the bottom tells the following:
+.br
+ Number of Lenns on/off the screen
+.br
+ Number of Computers running their init/off/SystenD
+.br
+ Level
+.br
+ Score
+.SH OPTIONS
+.TP
+.B \-l\fI n\fP
+Start at level \fIn\fP.
+.TP
+.B \--gui\fI gui
+Use a specific front end. The possible values are \fIgtk\fP, \fImotif\fP,
+and \fIathena\fP. Note that some of these may not be compiled into the
+binary.
+.TP
+.B \--size\fI size\fP
+Play on a field of \fIsize\fP x \fIsize\fP, instead of the normal 400x400.
+\fIsize\fP must be larger than 400.
+.TP
+.B \-v
+Print version number and exit.
+.TP
+.B \-h
+Print help and exit.
+.PP
+When using the GTK gui, all standard GTK options are supported. When using
+the Athena or Motif GUI, all standard X Intrinsics options are supported.
+.SH AUTHORS
+Main Programmer:
+.br
+ Brian Wellington <bwelling@xbill.org> for XBill 2.1
+
+ Gethyn ThomasQuail <xylem2020@gmail.com> for XLennart
+.br
+Programming & graphics:
+.br
+ Matias Duarte <matias@hyperimage.com> for XBill 2.0
+
+ Gethyn ThomasQuail <xylem2020@gmail.com> for XLennart
+.br
+
+.SH COPYING
+Copyright (c) 1994-2001 Psychosoft
+Copyright (c) 2014 Bloodbath Softworks
+.PP
+It's FREE! If you want to express your undying gratitude to us for
+bringing a small bit of meaning into your otherwise pointless
+existence, you could always send us e-mail.
+xlennart is distributed under the GNU General Public License.
+.PP
+Go play the game now!
diff --git a/xlennart.desktop b/xlennart.desktop
new file mode 100644
index 0000000..636f79a
--- /dev/null
+++ b/xlennart.desktop
@@ -0,0 +1,10 @@
+#!/usr/bin/env xdg-open
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=XLennart
+Comment=Save the Unix world.
+Exec=xlennart
+Icon=xlennart
+Terminal=false
+Categories=Game;ActionGame;
diff --git a/xlennart.spec b/xlennart.spec
new file mode 100644
index 0000000..1acc3ba
--- /dev/null
+++ b/xlennart.spec
@@ -0,0 +1,56 @@
+Summary: Stop Lennart from loading his init system into all the computers.
+Name: xlennart
+Version: 1.0
+Release: 1
+Copyright: GPL
+Group: Amusements/Games
+Source: http://www.bloobathsoftworks.com/xylemon/uploads/xlennart/%{name}-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-root
+
+%description
+The XLennart game tests your reflexes as you seek out and destroy all
+forms of Lennart, establish a new init system throughout the
+universe, and boldly go where no geek has gone before. XLennart may
+become an increasingly attractive option as the Unix Age progresses,
+and it is NOT very popular at Red Hat.
+
+%prep
+%setup -q
+
+%build
+./configure --prefix=/usr --localstatedir=/var/lib/games --disable-motif
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+make DESTDIR=$RPM_BUILD_ROOT install
+
+( cd $RPM_BUILD_ROOT
+ mkdir -p ./etc/X11/applnk/Games
+ cat > ./etc/X11/applnk/Games/xlennart.desktop <<EOF
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=XLennart
+Comment=Save the Unix world.
+Exec=xlennart
+Icon=xlennart
+Terminal=false
+Categories=Game;ActionGame;
+EOF
+)
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+/usr/bin/xlennart
+%config(noreplace) /var/lib/games/xlennart/scores
+/usr/share/xlennart
+%config /etc/X11/applnk/Games/xlennart.desktop
+
+%changelog
+* Sun Oct 29 2014 Gethyn ThomasQuail <xylem2020@gmail.com>
+- First release!
diff --git a/xlennart.xpm b/xlennart.xpm
new file mode 100644
index 0000000..19222c7
--- /dev/null
+++ b/xlennart.xpm
@@ -0,0 +1,85 @@
+/* XPM */
+static char * icon_xpm[] = {
+"64 64 18 1",
+" c None",
+". c #000000",
+"+ c #004888",
+"@ c #0070B0",
+"# c #303860",
+"$ c #40B0E8",
+"% c #503050",
+"& c #FFFFFF",
+"* c #604060",
+"= c #68B0E8",
+"- c #88A070",
+"; c #A8C8E0",
+"> c #D8B050",
+", c #D8B858",
+"' c #F0F0D8",
+") c #F0F8F8",
+"! c #F8F890",
+"~ c #F8F8F8",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" =;== ",
+" =$@@@@@==;@@@@@@@@@@@$= ",
+" $@@@@@@@@@@@=);)))))===$$$@$@@@@ ",
+" @$$@$$=);$$$=);)))));)@$=$$=@$$$@@@ ",
+" @@$$$$=);$$$=);)~';;;;*=@$$$@$$$$$=;;@ ",
+" @@$$@$);$$$=);))'''!',,**=;$$$$$$$;)))@@ ",
+" =@;$@@)=@$$=);))'''!',,,,**@*$$$$$$))));@@ ",
+" =@=$=)=@@@@);)~~''!',,,,,,,@,*$*$$=))~)=$@ ",
+" @@$=)=@@@$)=))~''!',,,,,,,,@-,*,*$;));;@$@ ",
+" @$=);@@@@);))~;'!',,,,,,,,,@-*,,*$~;))=$$$@ ",
+" @=);$$@$)=))~!'!',,,,,,,,,,@-,,,,-~)))$$$$$@ ",
+" @==$$$=)=)));'!',,,,,,,,,,,@-,,,,';));$$$$$@ ",
+" @@@$$=);)));'!',,,,,,,,,,,,@-,,,,~-))$$$$$$@ ",
+" @$@@=)))))=;!',,,,,,,,....,@-,,,!~~))$$$$$$@ ",
+" @$$@)))))=;;',....,,,.&&&&.@-,,,'!')=$$$$$$@ ",
+" @$=);)));)=;,.&&&&.,.&&&&&.@-,,,~!);$$$$$$$@ ",
+" @=);;)););;@*.&&&&.,.&&&&&&##..!;~;$$$$$$$$@ ",
+" @);))););)@@@.&&&&&..&&&&&&#='*)-'=@$$$$$$$@ ",
+" @;;))=);)$$**.&&&&&..&&&&&&#=~*)=)$+@$$$$$$@ ",
+" ;;));;;)$$$**.&&&&&.~.&&&&&#**;;~;*$+@$$$$$@ ",
+" ;)););;$$$$*~..&&&.~'.&&&&.=@*~*~~*@$+@$$$$@ ",
+" =);;;)@$$$$*'~'...~'~'....~#@*~~~**+$$+@$$$@ ",
+" $=;;)$@@$$$****%%*'*'~'~'~*;@)'~'*+++$$+@$$@ ",
+" $;=)@$$@$$$$$*%%%*~'*'~'~*%;@)~~~*++++$$+@$@ ",
+" @;;@@@$@@$$$$$*%%%*~'~'~*%%;@;;;**+++++$$+$$ ",
+" =)@@@@$$@@$$$$*%%%%*~'~**%%;@'~-*$++++++@$;= ",
+" @@@@@@@$@@$$$$@*%%*%***%%%~)='~*$$$++++++@)$ ",
+" @@@@@@@$$@$$$$@@*%*%*%%*%~~~=~*$$$$$$++++==@ ",
+" @@@@@@@$$@@$$$$@*%*%*%*%~~~';'=@$$$$$$+++)+= ",
+" @$@@@@@@$$@$$$$$*%%**%%'~~'~))++@$$$$$$+@;@; ",
+" @@$@@@@@@$@@$$$$*%%**%'~~'~~~-+++@$$$$$$;@== ",
+" @$$@@@@@@$$@$$$$*%%%*~~~'~~'$#++++@$$$$=)+;= ",
+" @$$$@@@@@@$@@$$$*%%~~~~'~~''+#+++++@$$$;;; ",
+" @@$$@@@@@@@$@@$$*%~'~~'~~~'%+%++++++@$$); = ",
+" @@$$$@@@@@@$@@$$=';));;~~-**++@+++++++;;; + ",
+" @@$$$$@@@@@@$@$=);)~'~~~%%%*+#$+++++++)= + ",
+" @@$$$$@@@@@@$@$';))'~~)%%%**+#%$++++++;@ ;+$ ",
+" @@$$$$$@@@@@@$';))'~~~%%%*%*+#%$$@+++;@==;$@; ",
+" =@$$$$$@@@@@=);));'''%%%*%***%%$$$@++)+);$=@ ",
+" ;@$$$$$$@@@@))))~~'~*%******#+$$@@++==+;;$@$ ",
+" ;;$=$$$@@@;;))~~~~*********@++@@@@@)$;;;$+; ",
+" $@$$$@@@@;=)))))=@***@****@@$@+@$$=;$);@+@$$$$ ",
+" $+@@@@@);)))));$$$$$@+@@@@@@$@+@@;@+=@$$@$$$$; ",
+" $@@$@++++;;))));;@@@@@@++@$$@@@@@@@+=@@$$$$$@$$=; ",
+" $$$$$$@@@@+@@++++++++++@@@@++++++@@@@$$$$$$$$@$=; ",
+" =@$@$$$$$$$$$$$$@@@@@$$@@@@@@@$$@$$$$$$$$$$@$= ",
+" $@@$$$$$$$$$$$$$$$$$$$@@$$$$$$$@$$$$$$$$= ",
+" =$$$==$==$$$$$$@@$$$$$$$ ",
+" ==@$$= ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};