[28561] in Source-Commits
xcluster commit: Remove old xcluster in favor of web UI
daemon@ATHENA.MIT.EDU (Victor Vasiliev)
Wed Dec 2 00:59:27 2015
Date: Wed, 2 Dec 2015 00:59:24 -0500
From: Victor Vasiliev <vasilvv@mit.edu>
Message-Id: <201512020559.tB25xOt5005943@drugstore.mit.edu>
To: source-commits@mit.edu
https://github.com/mit-athena/xcluster/commit/93f08fe5070ff6846ffbdf0bdc4e016dcd08af07
commit 93f08fe5070ff6846ffbdf0bdc4e016dcd08af07
Author: Victor Vasiliev <vasilvv@mit.edu>
Date: Sat Nov 28 00:02:15 2015 -0500
Remove old xcluster in favor of web UI
This replaces cview with a thin wrapper around netcat (which it has
always been in spirit), and makes xcluster open a browser page pointing
to xcluster.mit.edu, a new web interface we have.
Makefile.in | 63 ----
Xcluster | 122 --------
check.c | 425 ---------------------------
configure.in | 11 -
cview | 5 +
cview.c | 41 ---
mit-copyright.h | 17 --
net.c | 101 -------
net.h | 1 -
points.h | 803 ---------------------------------------------------
read.c | 99 -------
xcluster | 3 +
xcluster.c | 861 -------------------------------------------------------
xcluster.h | 56 ----
14 files changed, 8 insertions(+), 2600 deletions(-)
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index ad583c9..0000000
--- a/Makefile.in
+++ /dev/null
@@ -1,63 +0,0 @@
-# $Id: Makefile.in,v 1.2 2000-04-10 02:02:22 ghudson Exp $
-
-SHELL=/bin/sh
-VPATH=@srcdir@
-INSTALL=@INSTALL@
-INSTALL_PROGRAM=@INSTALL_PROGRAM@
-MKDIR_P=@MKDIR_P@
-srcdir=@srcdir@
-top_srcdir=@top_srcdir@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-bindir=@bindir@
-libdir=@libdir@
-mandir=@mandir@
-datadir=@datadir@
-sysconfdir=@sysconfdir@
-appdefsdir=${sysconfdir}/X11/app-defaults
-
-CC=@CC@
-DEFS=@DEFS@
-CPPFLAGS=@CPPFLAGS@
-CFLAGS=@CFLAGS@
-X_CFLAGS=@X_CFLAGS@
-LDFLAGS=@LDFLAGS@
-X_LIBS=@X_LIBS@
-X_PRE_LIBS=@X_PRE_LIBS@
-X_EXTRA_LIBS=@X_EXTRA_LIBS@
-LIBS=@LIBS@
-ALL_LDFLAGS=${LDFLAGS} ${X_LIBS}
-ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${X_CFLAGS} ${DEFS}
-ALL_LIBS=-lhesiod -lXj ${X_PRE_LIBS} -lX11 ${X_EXTRA_LIBS} ${LIBS}
-
-XOBJS=xcluster.o read.o net.o check.o
-COBJS=cview.o net.o
-
-all: xcluster cview
-
-xcluster: ${XOBJS}
- ${CC} ${ALL_LDFLAGS} -o $@ ${XOBJS} ${ALL_LIBS}
-
-cview: ${COBJS}
- ${CC} ${ALL_LDFLAGS} -o $@ ${COBJS} ${ALL_LIBS}
-
-.c.o:
- ${CC} -c ${ALL_CFLAGS} $<
-
-check:
-
-install:
- ${MKDIR_P} ${DESTDIR}${bindir}
- ${MKDIR_P} ${DESTDIR}${mandir}/man1
- ${MKDIR_P} ${DESTDIR}${appdefsdir}
- ${INSTALL_PROGRAM} xcluster ${DESTDIR}${bindir}
- ${INSTALL_PROGRAM} cview ${DESTDIR}${bindir}
- ${INSTALL} -m 444 ${srcdir}/xcluster.1 ${DESTDIR}${mandir}/man1
- ${INSTALL} -m 444 ${srcdir}/cview.1 ${DESTDIR}${mandir}/man1
- ${INSTALL} -m 444 Xcluster ${DESTDIR}${appdefsdir}
-
-clean:
- rm -f ${XOBJS} ${COBJS} xcluster cview
-
-distclean: clean
- rm -f config.cache config.log config.status Makefile
diff --git a/Xcluster b/Xcluster
deleted file mode 100644
index b2907ca..0000000
--- a/Xcluster
+++ /dev/null
@@ -1,122 +0,0 @@
-!
-! Xcluster resources
-!
-*font: *-helvetica-medium-r-*--12-*
-*Label.Center: True
-*borderWidth: 1
-*Button.borderWidth: 0
-*Button.borderThickness: 2
-*Button.padding: 1
-*Button.toggle: True
-*Button*deactivateProc: unset()
-*Form.padding: 2
-
-
-*xclusterWindow.borderWidth: 3
-*xclusterWindow.title: Xcluster
-*xclusterWindow.minWidth: 865
-*xclusterWindow.minHeight: 400
-*xclusterWindow.geometry: 1000x755
-*xclusterWindow.defGeometry: 1000x755
-*xclusterWindow.deleteProc: quit()
-
-*label1.label: XCLUSTER Cluster Monitor
-*label1.font: *-helvetica-bold-r-*--18-*
-*mapwin.borderWidth: 0
-*twin.borderWidth: 0
-
-*text.width: 815
-*text.height: 340
-
-*quit*quitLabel.label: Quit
-*help*helpLabel.label: Help
-*quit*Button.toggle: False
-*help*Button.toggle: False
-
-*buttonQuit.activateProc: quit()
-*buttonHelp.activateProc: createTree("helpDialog"),mapTree("helpDialog")
-
-*map.resizeProc: resize()
-*map.exposeProc: expose()
-*map.eventProc: map_hit()
-
-*text.resizeProc: text_resize()
-*text.exposeProc: check_cluster()
-*text.eventProc: text_hit()
-
-*button0*activateProc: button(0)
-*button1*activateProc: button(1)
-*button2*activateProc: button(2)
-*button3*activateProc: button(3)
-*button4*activateProc: button(4)
-*button5*activateProc: button(5)
-*button6*activateProc: button(6)
-*button7*activateProc: button(7)
-*button8*activateProc: button(8)
-*button9*activateProc: button(9)
-*button10*activateProc: button(10)
-*button11*activateProc: button(11)
-*button12*activateProc: button(12)
-*button13*activateProc: button(13)
-*button14*activateProc: button(14)
-*button15*activateProc: button(15)
-*button16*activateProc: button(16)
-*button17*activateProc: button(17)
-*button18*activateProc: button(18)
-*button19*activateProc: button(19)
-
-
-
-
-!
-! Help dialog
-!
-*helpDialog.tree: \
-{ \
- Window window; \
- { \
- Form form; \
- { \
- Label line1; \
- Label line2; \
- Label line3; \
- Label line4; \
- Label line5; \
- Label line6; \
- Window close; { Button close; { Label close; } } \
- } \
- } \
-}
-
-*helpDialog.window.mapped: False
-*helpDialog*form.form: close: - - 95 95 \
- line1: 0 5 100 - \
- line2: 10 line1 - - \
- line3: 5 line2 - - \
- line4: 5 line3 - - \
- line5: 10 line4 - - \
- line6: 5 line5 - -
-
-
-*helpDialog*window.geometry: 445x180
-*helpDialog*window.minWidth: 445
-*helpDialog*window.minHeight: 180
-*helpDialog*window.title: XCLUSTER Help
-
-*helpDialog*line1.label: Directions:
-*helpDialog*line1.font: *-helvetica-bold-r-*--18-*
-*helpDialog*line1.Center: True
-*helpDialog*line2.label: \
- For information on the number of machines available in a particular
-*helpDialog*line3.label: \
- cluster, click any button on the mouse somewhere near the cluster
-*helpDialog*line4.label: \
- you are interested in. Or, click on one of the buttons below the map.
-*helpDialog*line5.label: \
- Information on the status of printers in that cluster will be
-*helpDialog*line6.label: \
- displayed, as well as phone number(s), if available.
-
-*helpDialog*close.activateProc: unmapTree("helpDialog")
-*helpDialog*close.label: Close Help Window
-*helpDialog*close.toggle: False
diff --git a/check.c b/check.c
deleted file mode 100644
index bc50ff5..0000000
--- a/check.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * Campus Cluster Monitering Program
- * John Welch and Chris Vanharen
- * MIT's Project Athena
- * Summer 1990
- */
-
-/*
- * check.c contacts the cview daemon to retreive cluster info and
- * then displays it in the main window.
- */
-
-#include <sys/types.h>
-#include <sys/socket.h> /* socket definitions */
-#include <netinet/in.h> /* random network-type defines */
-#include <netdb.h> /* random network-type defines */
-#include <hesiod.h> /* hesiod lookup functions */
-
-#include "xcluster.h" /* global include file. */
-#include "net.h"
-
-#include <Jets/Jets.h>
-#include <Jets/Drawing.h>
-
-
-/*
- * DEFINES
- */
-#define ERRMSG "Unable to find any info on any machines."
-#ifndef MAX
-#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
-#endif
-#ifndef MIN
-#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
-#endif
-
-static char *intsonly[] = {"intsonlyplease3"};
-extern char machtypes[][25];
-extern int num_machtypes;
-static char *headers[] = {"Cluster", "free / total"};
-static char *totals = "Totals";
-static char *printers = "Printers";
-static char *status = "Status";
-static char *jobs = "Jobs";
-static char *cluster_hdr = "Cluster";
-static char *phone_hdr = "Phone";
-
-int xspace = 0;
-int height = 0;
-
-struct cluster *find_text(a, b)
- int a, b;
-{
- int y_init, y;
- int x = 20;
- int i;
- struct cluster *c;
-
- y_init = 20 + height+4;
- y = 20 + 2*height+4;
-
- for (c = cluster_list; c != NULL; c = c->next)
- {
- for(i = 0; strcmp(c->cluster_names[i], "XXXXX"); i++)
- {
- if (b < y && b > y_init &&
- a > x && a < x + (num_machtypes+2)*xspace)
- return c;
- y += height;
- }
- }
- return c;
-}
-
-
-/*
- * check_cluster prints out the information for the specified cluster.
- */
-int check_cluster(me, foo, data)
- DrawingJet me;
- int foo;
- caddr_t data;
-{
- char buf[BUF_SIZE]; /* temporary storage buffer. */
- char *ptr; /* pointer to string. */
- int x = 20, y = 20; /* location to begin printing. */
- int ht; /* height of area used for phone numbers */
- int len, len2; /* Lengths of buffers (pixels). */
- int i, j; /* Counters */
- static long time_cached = 0; /* time info was cached. */
- int s; /* Socket to connect to cview daemon. */
- FILE *f; /* stream for reading data from cviewd. */
- struct cluster *c;
- static struct cluster *old_c = NULL;
- char name[15], stat[15], number[5];
- static int init = 0, plen = 0, slen = 0, jlen =0;
- static struct cluster total;
- static int err = 0;
-
- if (!init)
- {
- init = 1;
-
- strcpy(total.cluster_names[0], totals);
-
- height = me->drawing.font->max_bounds.ascent
- + me->drawing.font->max_bounds.descent;
-
- plen = XTextWidth(me->drawing.font, printers, strlen(printers));
- slen = XTextWidth(me->drawing.font, status, strlen(status)) + 10;
- jlen = XTextWidth(me->drawing.font, jobs, strlen(jobs));
-
-
- for (j = 0; j <= num_machtypes + 1; j++)
- {
- len = MAX(XTextWidth(me->drawing.font, headers[j ? 1 : 0],
- strlen(headers[j ? 1 : 0])),
- XTextWidth(me->drawing.font, machtypes[j],
- strlen(machtypes[j])));
- if (len > xspace)
- xspace = len;
- }
-
-
- for (c = cluster_list; c != NULL; c = c->next)
- {
- for(i = 0; ptr=c->cluster_names[i], strcmp(ptr, "XXXXX"); i++)
- {
- len = XTextWidth(me->drawing.font, ptr, strlen(ptr));
- if (len > xspace)
- xspace = len;
- }
- for(i=0; ptr=c->prntr_name[i], strcmp(ptr, "XXXXX"); i++)
- {
- len = XTextWidth(me->drawing.font, ptr, strlen(ptr));
- if (len > plen)
- plen = len;
- }
- }
-
- xspace += 5;
- plen += 5;
- }
-
-
- if (time_cached + 60 < time(0)) /* cache info for 60 seconds */
- {
- time_cached = time(0);
- s = net(progname, 1, intsonly);
-
- if (s < 1)
- {
- XClearArea(XjDisplay(me), XjWindow(me), x, y, 0, 0, 0);
- ptr = "Error while contacting server.";
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x, y, ptr, strlen(ptr));
- XFlush(XjDisplay(me));
- err = 1;
- return 0;
- }
-
- f = fdopen(s, "r");
-
- for (j=0; j < (num_machtypes+1)*2; j++)
- total.cluster_info[0][j] = 0;
-
- while(fscanf(f, "%s", buf) != EOF)
- {
- if (!strcmp(buf, "cluster"))
- {
- (void) fscanf(f, "%s", buf);
- for (c = cluster_list; c != NULL; c = c->next)
- {
- for(i = 0; strcmp(c->cluster_names[i], "XXXXX"); i++)
- if (!strcmp(buf, c->cluster_names[i]))
- {
- int free, inuse;
- int tot_free=0, tot_inuse=0;
-
- for (j=0; j < num_machtypes; j++)
- {
- fscanf(f, "%d %d", &free, &inuse);
- c->cluster_info[i][j*2] = free;
- c->cluster_info[i][j*2+1] = inuse;
- total.cluster_info[0][j*2] += free;
- total.cluster_info[0][j*2+1] += inuse;
- tot_free += free;
- tot_inuse += inuse;
- }
- c->cluster_info[i][j*2] = tot_free;
- c->cluster_info[i][j*2+1] = tot_inuse;
- total.cluster_info[0][j*2] += tot_free;
- total.cluster_info[0][j*2+1] += tot_inuse;
- }
- }
- }
-
- if (!strcmp(buf, "printer"))
- {
- (void) fscanf(f, "%s %s %s", name, stat, number);
- for (c = cluster_list; c != NULL; c = c->next)
- {
- for(i=0;
- ptr=c->prntr_name[i], strcmp(ptr, "XXXXX");
- i++)
- {
- if (!strcmp(name, ptr))
- {
- strcpy(c->prntr_current_status[i], stat);
- strcpy(c->prntr_num_jobs[i], number);
- }
- }
- }
- }
- }
-
- (void) fclose(f);
- XClearArea(XjDisplay(me), XjWindow(me), x+xspace, y+height+3, 0, 0, 0);
- }
-
-
- /*
- * display the data
- */
-
- if (err)
- {
- XClearArea(XjDisplay(me), XjWindow(me), x, y, 0, 0, 0);
- err = 0;
- }
-
- for (j = 0; j <= num_machtypes + 1; j++)
- {
- len = XTextWidth(me->drawing.font, headers[j ? 1 : 0],
- strlen(headers[j ? 1 : 0]))
- - XTextWidth(me->drawing.font, machtypes[j], strlen(machtypes[j]));
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x + xspace*j + len/2, y, machtypes[j],
- strlen(machtypes[j]));
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x + xspace*j, y + height, headers[j ? 1 : 0],
- strlen(headers[j ? 1 : 0]));
- }
-
- XDrawLine(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x, y+height+2, x + (num_machtypes+2)*xspace, y+height+2);
- y += 2*height + 2;
-
- /*
- * Check for multiple clusters in the same area
- */
-
- len = XTextWidth(me->drawing.font, "free ", 5);
-
- for (c = cluster_list; c != NULL; c = c->next)
- {
- for(i = 0; strcmp(c->cluster_names[i], "XXXXX"); i++)
- {
- GC gc;
-
- if (c == Current)
- {
- XFillRectangle(XjDisplay(me), XjWindow(me),
- me->drawing.foreground_gc,
- x, y+2-height, (num_machtypes+2)*xspace, height);
- gc = me->drawing.background_gc;
- }
- else
- gc = me->drawing.foreground_gc;
-
- if (old_c != Current && c == old_c)
- {
- XFillRectangle(XjDisplay(me), XjWindow(me),
- me->drawing.background_gc,
- x, y+2-height, (num_machtypes+2)*xspace, height);
- }
-
- strcpy(buf, c->cluster_names[i]);
- XDrawString(XjDisplay(me), XjWindow(me), gc,
- x, y, buf, strlen(buf));
-
- for (j = 0; j < num_machtypes+1; j++)
- {
- if (c->cluster_info[i][2*j] == 0
- && c->cluster_info[i][2*j+1] == 0)
- {
- XDrawString(XjDisplay(me), XjWindow(me), gc,
- x+xspace*(j+1) + len, y, "-", 1);
- }
- else
- {
- sprintf(buf, "%d ",
- c->cluster_info[i][2*j]);
- len2 = XTextWidth(me->drawing.font, buf, strlen(buf));
- sprintf(buf, "%d / %d",
- c->cluster_info[i][2*j],
- c->cluster_info[i][2*j] + c->cluster_info[i][2*j+1]);
- XDrawString(XjDisplay(me), XjWindow(me), gc,
- x+xspace*(j+1) + len - len2,
- y, buf, strlen(buf));
- }
- }
-
- y += height;
- XFlush(XjDisplay(me));
- }
- }
-
- /*
- * print out totals...
- */
-
- strcpy(buf, total.cluster_names[0]);
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x, y, buf, strlen(buf));
-
- for (j = 0; j < num_machtypes+1; j++)
- {
- if (total.cluster_info[0][2*j] == 0
- && total.cluster_info[0][2*j+1] == 0)
- {
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x+xspace*(j+1) + len, y, "-", 1);
- }
- else
- {
- sprintf(buf, "%d ",
- total.cluster_info[0][2*j]);
- len2 = XTextWidth(me->drawing.font, buf, strlen(buf));
- sprintf(buf, "%d / %d",
- total.cluster_info[0][2*j],
- total.cluster_info[0][2*j] + total.cluster_info[0][2*j+1]);
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x+xspace*(j+1) + len - len2,
- y, buf, strlen(buf));
- }
- }
-
- /*
- * print out phone number(s) for the specified cluster.
- */
-
- x = me->core.width - plen - slen - jlen - 20;
- y -= (2 + 3*height);
- ht = y - height;
-
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x, y, cluster_hdr, strlen(cluster_hdr));
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x+MAX(xspace,plen), y, phone_hdr, strlen(phone_hdr));
- y += 2;
- XDrawLine(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x, y, x+plen+slen+jlen, y);
-
- if (old_c != Current)
- XClearArea(XjDisplay(me), XjWindow(me), x, y+1, 0, 0, 0);
-
- for (c = cluster_list; c != NULL; c = c->next)
- {
- for(i = 0; strcmp(c->cluster_names[i], "XXXXX"); i++)
- {
- if (c == Current)
- {
- y += height;
- strcpy(buf, c->cluster_names[i]);
- XDrawString(XjDisplay(me), XjWindow(me),
- me->drawing.foreground_gc,
- x, y, buf, strlen(buf));
- strcpy(buf, c->phone_num[i]);
- XDrawString(XjDisplay(me), XjWindow(me),
- me->drawing.foreground_gc,
- x+MAX(xspace,plen), y, buf, strlen(buf));
- }
- }
- }
-
- /*
- * print out printer information for the specified cluster.
- */
-
- x = me->core.width - plen - slen - jlen - 20;
- y = 20 + height;
-
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x, y, printers, strlen(printers));
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x+plen, y, status, strlen(status));
- XDrawString(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x+plen+slen, y, jobs, strlen(jobs));
- y += 2;
- XDrawLine(XjDisplay(me), XjWindow(me), me->drawing.foreground_gc,
- x, y, x+plen+slen+jlen, y);
-
- if (old_c != Current)
- XClearArea(XjDisplay(me), XjWindow(me), x, y+1, 0, ht - (y+1), 0);
-
- if (Current != NULL && strcmp(Current->prntr_name[0], "XXXXX"))
- {
- for(i=0;
- ptr=Current->prntr_name[i], strcmp(ptr, "XXXXX");
- i++)
- {
- /* display printer info */
-
- y += height;
- XDrawString(XjDisplay(me), XjWindow(me),
- me->drawing.foreground_gc,
- x, y, ptr, strlen(ptr));
- ptr = Current->prntr_current_status[i];
- XDrawString(XjDisplay(me), XjWindow(me),
- me->drawing.foreground_gc,
- x+plen+5, y, ptr, strlen(ptr));
- ptr = Current->prntr_num_jobs[i];
- XDrawString(XjDisplay(me), XjWindow(me),
- me->drawing.foreground_gc,
- x+plen+slen+5, y, ptr, strlen(ptr));
- }
- }
-
-
-
- old_c = Current;
-
- return 0;
-}
diff --git a/configure.in b/configure.in
deleted file mode 100644
index fb4d12b..0000000
--- a/configure.in
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(xcluster.c)
-
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_MKDIR_P
-
-AC_PATH_XTRA
-ATHENA_HESIOD
-
-AC_OUTPUT(Makefile)
diff --git a/cview b/cview
new file mode 100755
index 0000000..6237727
--- /dev/null
+++ b/cview
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+CVIEW_SERVER="$(hesinfo cview sloc)"
+
+echo "$@" | nc "$CVIEW_SERVER" 3704
diff --git a/cview.c b/cview.c
deleted file mode 100644
index 74ad215..0000000
--- a/cview.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include "net.h"
-
-/*
- * MAIN PROGRAM
- */
-
-void main(argc, argv)
- int argc;
- char **argv;
-{
- FILE *f; /* stream for reading data from cviewd. */
- int s; /* socket returned from "net". */
- char buf[1024]; /* Temporary buffer. */
- char *progname; /* Name of program from command-line. */
-
- progname = strrchr(argv[0], '/');
- if(progname == (char *) NULL)
- progname = argv[0]; /* Find out what our name is today. */
- if(*progname == '/') /* Useful for being able to print error */
- ++progname; /* messages and the like. */
-
- argc--; /* decrement number of args to pass */
- argv++; /* and increment counter into command-line */
-
- s = net(progname, argc, argv);
-
- if (s > 0)
- {
- f = fdopen(s, "r");
-
- while(fgets(buf, 1024, f) != NULL)
- printf("%s", buf);
-
- (void) fclose(f);
- }
-
- exit(0);
-}
diff --git a/mit-copyright.h b/mit-copyright.h
deleted file mode 100644
index 80f5e4b..0000000
--- a/mit-copyright.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- *
- * Copyright 1991 by the Massachusetts Institute of Technology.
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- *
- */
diff --git a/net.c b/net.c
deleted file mode 100644
index 7050c43..0000000
--- a/net.c
+++ /dev/null
@@ -1,101 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <hesiod.h>
-
-#define CVIEW_FALLBACK_PORT 3704
-
-int net(progname, num, names)
- char *progname;
- int num;
- char **names;
-{
- static char *host; /* name of host running cview daemon. */
- static char **serv; /* cview service hesiod info. */
- static struct hostent *hp; /* hostent struct for cview server. */
- static struct servent *sp; /* servent struct for cview service. */
- static struct sockaddr_in sin; /* Socket address. */
- static int init = 0; /* Have we been here before? */
- int s; /* Socket to connect to cview daemon. */
- int j; /* Counter. */
- char buf[BUFSIZ]; /* Temporary buffer. */
-
- if (!init)
- {
-#ifdef TEST
- host = "fries.mit.edu";
-#else
- serv = hes_resolve("cview","sloc");
-
- if (serv == NULL)
- host = "doghouse.mit.edu"; /* fall back if hesiod is broken... */
- else
- host = *serv;
-#endif
-
- hp = gethostbyname(host);
-
- if (hp == NULL)
- {
- fprintf(stderr, "%s: Unable to resolve hostname '%s'.\n",
- progname, host);
- return(-1);
- }
-
- if (hp->h_length != sizeof(sin.sin_addr))
- {
- fprintf(stderr, "%s: Unexpected h_length value for '%s'.\n",
- progname, host);
- return(-1);
- }
-
- sp = getservbyname("cview", "tcp");
-
- memset(&sin, 0, sizeof (sin));
- memcpy(&sin.sin_addr, hp->h_addr, hp->h_length);
- sin.sin_family = hp->h_addrtype;
- sin.sin_port = (sp) ? sp->s_port : htons(CVIEW_FALLBACK_PORT);
-
- init = 1;
- }
-
- s = socket(hp->h_addrtype, SOCK_STREAM, 0);
- if (s < 0)
- {
- perror("socket");
- return(-1);
- }
-
- if (connect(s, (struct sockaddr *)&sin, sizeof (sin)) < 0)
- {
- perror("connect");
- close(s);
- return(-1);
- }
-
- for (j=0; j<num; j++)
- {
- strncpy(buf, *names, sizeof(buf) - 2);
- buf[sizeof(buf) - 2] = '\0';
- strcat(buf, " ");
- if (write(s, buf, strlen(buf)) == -1)
- {
- perror("write");
- close(s);
- return(-1);
- }
- names++;
- }
-
- if (write(s, "\n", 1) == -1)
- {
- perror("write");
- close(s);
- return(-1);
- }
-
- return(s);
-}
diff --git a/net.h b/net.h
deleted file mode 100644
index 5be8ab7..0000000
--- a/net.h
+++ /dev/null
@@ -1 +0,0 @@
-extern int net();
diff --git a/points.h b/points.h
deleted file mode 100644
index 49c4100..0000000
--- a/points.h
+++ /dev/null
@@ -1,803 +0,0 @@
-typedef struct {
- unsigned int x, y;
-} Point;
-
-Point points[] = {
-{48838, 16706}, {49732, 17167},
-
-{49141, 16115}, {49642, 16374},
-
-{49670, 14102}, {48742, 15913}, {49141, 16115}, {49018, 16357}, {48613, 16149},
-{48433, 16498}, {48838, 16706}, {48719, 16937}, {48314, 16729}, {48050, 17252},
-{49349, 17915}, {50036, 16577}, {49642, 16374}, {49912, 15845}, {49766, 15772},
-{50424, 14490}, {49670, 14102},
-
-{29566, 20520}, {29533, 20341}, {29469, 20174}, {29387, 20011}, {29263, 19876},
-{29073, 19741}, {28884, 19659}, {28640, 19632}, {28424, 19670}, {28180, 19778},
-{28029, 19914}, {27893, 20092}, {27785, 20363}, {27774, 20580}, {27817, 20818},
-{27904, 21002}, {28029, 21159}, {28180, 21289}, {28370, 21386}, {28586, 21435},
-{28808, 21435}, {29003, 21386}, {29165, 21305}, {29306, 21175}, {29425, 21024},
-{29506, 20867}, {29550, 20699}, {29566, 20520},
-
-{42017, 4399}, {41638, 5070}, {43132, 5926}, {43511, 5244}, {42017, 4399},
-
-{42645, 7431}, {42287, 8058}, {42926, 8427}, {43284, 7788}, {42645, 7431},
-
-{29111, 16666}, {29382, 16666},
-
-{28770, 17218}, {28770, 17505},
-
-{11074, 13948}, {15751, 13050}, {13770, 10592},
-
-{16947, 13494}, {17619, 14490}, {17857, 14706}, {18182, 14901}, {18615, 15009},
-{19199, 15053}, {30069, 12844}, {29160, 11198}, {16947, 13494},
-
-{14804, 14122}, {15670, 15518}, {17034, 15248}, {16070, 13862}, {14804, 14122},
-
-{10700, 17218}, {43830, 10505}, {44567, 10246}, {45043, 9856}, {45519, 9379},
-{46039, 8297}, {46905, 6824},
-
-{34774, 12005}, {34638, 11334}, {35586, 11144}, {35721, 11815},
-
-{31953, 11036}, {32164, 12162}, {32955, 11999}, {32733, 10868}, {31953, 11036},
-
-{30730, 11279}, {30908, 12162}, {31775, 11999}, {31542, 10792}, {31109, 10884},
-{31163, 11187}, {30730, 11279},
-
-{35878, 13467}, {35797, 13077}, {35986, 13039}, {35943, 12866}, {37231, 12595},
-{37177, 12313},
-
-{34303, 13190}, {35050, 13028}, {35180, 13618},
-
-{31477, 13526}, {31775, 14159}, {31829, 14219}, {31899, 14262}, {31997, 14279},
-{44962, 11583}, {45032, 11496}, {45032, 11366}, {44139, 10825}, {31477, 13526},
-
-{40171, 11761}, {40312, 12454}, {41827, 12151}, {41687, 11442}, {40171, 11761},
-
-{48161, 9450}, {47317, 10933}, {48242, 11464}, {49087, 9964}, {48161, 9450},
-
- /* End of line 1 in the num_segs array below. */
-
-{37870, 14457}, {37513, 14457}, {37513, 14408}, {36652, 14408}, {36652, 15323},
-{37507, 15323}, {37507, 14809}, {37870, 14809},
-
-{52389, 10527}, {50408, 12579}, {50337, 12719}, {50326, 12822}, {50348, 12947},
-{50402, 13006}, {53715, 14668}, {54143, 14024}, {54381, 13743}, {54684, 13461},
-{55020, 13218}, {52389, 10527},
-
-{52800, 18176}, {52513, 18744}, {53228, 19118}, {53141, 19291}, {53369, 19410},
-{53748, 18658}, {52800, 18176},
-
-{52291, 19199}, {52004, 19768}, {52719, 20141}, {52632, 20314}, {52860, 20433},
-{53239, 19681}, {52291, 19199},
-
-{53953, 16206}, {53520, 17115}, {54397, 17537}, {54852, 16628}, {53953, 16206},
-
-{55469, 13694}, {55177, 13878}, {54917, 14084}, {54668, 14376}, {54484, 14679},
-{54354, 14906}, {58685, 17104}, {55469, 13694},
-
-{57391, 21668}, {57391, 21018}, {58095, 21018}, {58095, 21668}, {57391, 21668},
-
-{34335, 15394}, {35050, 15394}, {35050, 15816}, {34335, 15816},
-
-{36652, 14565}, {35115, 14565}, {35115, 14706}, {34687, 14706}, {34655, 14614},
-{32879, 14950}, {32955, 15377}, {33859, 15220}, {33859, 16601}, {34335, 16601},
-{34335, 15139}, {34736, 15074}, {34736, 14988}, {35109, 14988}, {35109, 15166},
-{36652, 15166},
-
-{45287, 14284}, {45270, 14349}, {45276, 14414}, {45314, 14506}, {45379, 14560},
-{45503, 14603}, {45638, 14603}, {45730, 14571}, {45774, 14528}, {45287, 14284},
-
-{44545, 21695}, {44545, 19048}, {44902, 19048}, {44902, 21695}, {44545, 21695},
-
-{45931, 21695}, {45931, 19042}, {46288, 19042}, {46288, 21695}, {45931, 21695},
-
-{39256, 19665}, {39424, 19665}, {39424, 19686},
-
-{35640, 19557}, {38704, 19557}, {38704, 22339}, {39970, 22339}, {39970, 23671},
-{38715, 23671}, {38715, 24039}, {40523, 24039}, {40523, 22350}, {41324, 22350},
-{41324, 23562}, {43219, 23562}, {43219, 21960}, {42915, 21960}, {42915, 21863},
-{41205, 21863}, {41205, 22047}, {40523, 22047}, {40523, 21960}, {40436, 21960},
-{40436, 21819}, {40533, 21819}, {40533, 19622}, {40436, 19622}, {40436, 19481},
-{40523, 19481}, {40523, 18571}, {40479, 18571}, {40479, 18290}, {41833, 18290},
-{41833, 18117}, {41995, 18117}, {41995, 17900}, {41833, 17900}, {41833, 17759},
-
-{37740, 18030}, {37740, 18950}, {38823, 18950}, {38823, 18571}, {38303, 18571},
-{38303, 16904}, {38985, 16904}, {38985, 16493}, {37480, 16493}, {37480, 15594},
-{38758, 15594}, {38758, 15215}, {39256, 15215}, {39256, 16482}, {39191, 16482},
-{39191, 16893}, {39267, 16893}, {39267, 18560}, {39050, 18560}, {39050, 18961},
-{39992, 18961}, {39992, 18571}, {40198, 18571}, {40198, 18409}, {40274, 18409},
-{40274, 17759}, {40306, 17759}, {40306, 17597}, {40046, 17597}, {40046, 17521},
-{39970, 17521}, {39970, 17272}, {40003, 17272}, {40003, 15648},
-
-{39375, 18420}, {39375, 18008}, {39797, 18008}, {39797, 18420}, {39375, 18420},
-
-{43121, 19730}, {43121, 19156}, {43998, 19156}, {43998, 19730}, {43121, 19730},
-
-{33642, 27104}, {33642, 26291}, {58982, 26291},
-
-{34698, 24981}, {33626, 24981}, {33626, 25652}, {34687, 25652},
-
- /* EOL 2 */
-
-{34346, 19724}, {34346, 21814}, {35104, 21814}, {35104, 19546}, {34649, 19546},
-{34649, 19724}, {34346, 19724},
-
-{31488, 19876}, {31596, 19876}, {31639, 19919}, {31639, 21966},
-
-{29160, 19806}, {29160, 19167}, {31488, 19167}, {31488, 21976},
-
-{17510, 16314}, {17657, 17126},
-
-{18393, 16135}, {18544, 16958},
-
-{19080, 15989}, {19226, 16823},
-
-{22631, 15269}, {22810, 16124},
-
-{26383, 14500}, {26627, 15367},
-
-{101, 20563}, {31022, 14511}, {30589, 13645}, {10625, 17705},
-
-{133, 24623}, {1162, 24780}, {5401, 25116}, {8871, 25333}, {12920, 25333},
-{15302, 26285}, {32798, 26285}, {32798, 27108},
-
-{7647, 19876}, {7647, 22599}, {7658, 22691}, {7685, 22740}, {7745, 22767},
-{18008, 22761}, {18409, 22989}, {27184, 22989}, {27184, 21971}, {32668, 21971},
-{32744, 21944}, {32782, 21895}, {32798, 21819}, {32798, 19892}, {32603, 18625},
-{32495, 18106}, {32327, 17516}, {32083, 16655}, {31883, 16189}, {31455, 15356},
-{31390, 15285}, {31271, 15231}, {31147, 15199}, {31038, 15204}, {7745, 19724},
-{7696, 19768}, {7663, 19811}, {7647, 19876},
-
-{12523, 23299}, {12871, 23299}, {12871, 23507}, {12978, 23507}, {12978, 24047},
-{13614, 24047}, {13614, 23709}, {13282, 23709}, {13282, 23192}, {13788, 23192},
-{13788, 23535}, {13873, 23535}, {13873, 23608}, {13963, 23608}, {13963, 24339},
-{12523, 24339}, {12523, 23299},
-
-{106, 21397}, {106, 23736}, {117, 23784}, {139, 23822}, {177, 23844},
-{1736, 24028}, {1779, 24023}, {1812, 23990}, {1828, 23947}, {1828, 21002},
-{1812, 20953}, {1779, 20921}, {1730, 20899}, {204, 21175}, {155, 21218},
-{123, 21267}, {106, 21397},
-
-{27422, 16173}, {27660, 17413}, {29198, 17126}, {29079, 16525}, {29133, 16525},
-{29133, 15951}, {28965, 15951}, {28949, 15859}, {27422, 16173},
-
-{29030, 17505}, {29360, 17505}, {29360, 17413}, {31244, 17413}, {31244, 16742},
-
-{29382, 15789}, {29382, 16704}, {30822, 16704}, {30822, 16742}, {31250, 16742},
-{31250, 16698}, {31499, 16698}, {31499, 15789}, {31250, 15789}, {31250, 15664},
-{30827, 15664}, {30827, 15789}, {29382, 15789},
-
-{28770, 17505}, {28770, 17770}, {28002, 17770}, {28002, 18003}, {28343, 18003},
-{28343, 18555}, {28770, 18555}, {28770, 18804}, {29025, 18804}, {29025, 17505},
-{28770, 17505},
-
-{29382, 18804}, {29382, 17646}, {31477, 17646}, {31477, 18804}, {29382, 18804},
-
-{31878, 21316}, {31878, 21884}, {32251, 21884}, {32251, 21792}, {32516, 21792},
-{32516, 21316}, {31878, 21316},
-
-{28148, 23790}, {28148, 22999}, {29523, 22999}, {29523, 23790}, {28148, 23790},
-
- /* EOL 3 */
-
-{29063, 23005}, {29063, 23790},
-
-{28592, 23303}, {29209, 23303}, {29209, 23005},
-
-{28592, 23005}, {28592, 23790},
-
-{30022, 23709}, {30472, 23709}, {30472, 24187}, {30461, 24232}, {30427, 24261},
-{30371, 24283}, {30326, 24266}, {30292, 24244}, {30286, 24199}, {30213, 24199},
-{30208, 24232}, {30179, 24261}, {30123, 24277}, {30067, 24261}, {30039, 24238},
-{30022, 24187}, {30022, 23709},
-
-{22226, 22134}, {26208, 22134}, {26208, 22888}, {22226, 22888}, {22226, 22134},
-
-{23829, 23782}, {23879, 23895}, {23981, 23844}, {24211, 24249}, {24622, 24030},
-
-{18305, 22146}, {21601, 22146}, {21601, 22899}, {18541, 22899}, {18541, 22686},
-{18305, 22686}, {18305, 22146},
-
-{17163, 23394}, {17163, 23535}, {17304, 23535},
-
-{17034, 23034}, {17984, 23034}, {18097, 23079}, {18097, 23265}, {17984, 23265},
-{17984, 23400}, {18406, 23400}, {18406, 23535}, {18592, 23535}, {18592, 23715},
-{18496, 23715}, {18496, 23951}, {18581, 23951}, {18581, 24131}, {18209, 24131},
-{18209, 23946}, {18283, 23946}, {18283, 23692}, {17990, 23692}, {17990, 23951},
-{18058, 23951}, {18058, 24131}, {17619, 24131}, {17619, 23951}, {17692, 23951},
-{17692, 23704}, {17366, 23704}, {17366, 23951}, {17439, 23951}, {17439, 24126},
-{16955, 24126}, {16955, 23946}, {17023, 23946}, {17023, 23704}, {16573, 23704},
-{16573, 23951}, {16640, 23951}, {16640, 24126}, {16151, 24126}, {16151, 23946},
-{16218, 23946}, {16218, 23704}, {15971, 23704}, {15971, 23951}, {16049, 23951},
-{16049, 24126}, {15706, 24126}, {15706, 23512}, {15898, 23512}, {15898, 23400},
-{17163, 23400}, {17163, 23220}, {17034, 23220}, {17034, 23113}, {17034, 23034},
-
-{10081, 23220}, {10363, 23220}, {10363, 23344}, {10627, 23344}, {10627, 23220},
-{10908, 23220}, {10908, 23349}, {11161, 23349}, {11161, 23220}, {11437, 23220},
-{11437, 23355}, {11729, 23355}, {11887, 23197}, {12202, 23197}, {12202, 23366},
-{12523, 23366}, {12523, 24052}, {12337, 24052}, {12337, 23659}, {11729, 23659},
-{11729, 24255}, {11443, 24255}, {11443, 23574}, {11173, 23574}, {11173, 24255},
-{10903, 24255}, {10903, 23569}, {10633, 23569}, {10633, 24261}, {10368, 24261},
-{10368, 23563}, {10081, 23563}, {10081, 23220},
-
-{7854, 23169}, {8146, 23169}, {8146, 23293}, {8574, 23293}, {8574, 23164},
-{8849, 23164}, {8849, 23293}, {9311, 23293}, {9311, 23164}, {9620, 23164},
-{9620, 23529}, {10081, 24193}, {10081, 24339}, {9800, 24339}, {9316, 23653},
-{8889, 23653}, {8647, 24328}, {8180, 24328}, {7854, 23304}, {7854, 23169},
-
-{811, 22016}, {1453, 22016}, {1453, 23096}, {1756, 23096}, {1756, 23406},
-{463, 23406}, {463, 23096}, {811, 23096}, {811, 22016},
-
-{4906, 20430}, {6223, 20430}, {6223, 20812}, {4906, 20812}, {4906, 20430},
-
-{6571, 23524}, {7303, 23524}, {7303, 24216}, {6571, 24216}, {6571, 23524},
-
-{6453, 20931}, {6875, 20931}, {6875, 22050}, {6453, 22050}, {6453, 20931},
-
-{5531, 21864}, {6183, 21864}, {6183, 22472}, {5531, 22472}, {5531, 21864},
-
-{3438, 20852}, {4754, 20852}, {4754, 21240}, {3438, 21240}, {3438, 20852},
-
-{2668, 21246}, {3050, 21246}, {3050, 22472}, {2668, 22472}, {2668, 21246},
-
-{3629, 23141}, {3978, 23141}, {3978, 23473}, {3629, 23473}, {3629, 23141},
-
-{18862, 26556}, {19492, 26556}, {19492, 27225}, {18862, 27225}, {18862, 26556},
-
- /* EOL 4 */
-
-{39260, 20077}, {39422, 20077},
-
-{40438, 14666}, {40438, 14458},
-
-{39228, 15013}, {39228, 15211},
-
-{38966, 15007}, {38966, 15211},
-
-{21558, 23742}, {21558, 24226}, {22191, 24226}, {22191, 23578}, {22093, 23408},
-{21994, 23572}, {21994, 23657}, {21755, 23657}, {21755, 23572}, {21650, 23415},
-{21558, 23572}, {21558, 23742},
-
-{44156, 26517}, {45112, 26517},
-
-{55615, 23853}, {56418, 23853},
-
-{55614, 23980}, {56418, 23980},
-
-{3404, 23074}, {3404, 23501}, {3618, 23715}, {4040, 23715}, {4237, 23518},
-{4237, 23085}, {4006, 22854}, {3618, 22854}, {3404, 23074},
-
-{18277, 26556}, {18862, 26556}, {18862, 27225}, {18277, 27225}, {18277, 27090},
-{18536, 27090}, {18536, 26961}, {18283, 26961}, {18283, 26814}, {18541, 26814},
-{18541, 26719}, {18277, 26719}, {18277, 26556},
-
-{17984, 23406}, {17984, 23546}, {17844, 23546},
-
-{26439, 23901}, {26720, 23901}, {26748, 23878}, {26771, 23850}, {26771, 23811},
-{26759, 23782}, {26731, 23766}, {26703, 23760}, {26703, 23321}, {26996, 23321},
-{26996, 24187}, {26439, 24187}, {26439, 23901},
-
-{18328, 21466}, {20263, 21466}, {20263, 22056}, {18328, 22056}, {18328, 21466},
-
-{28142, 23086}, {27958, 23086}, {27958, 24169}, {29707, 24169}, {29707, 23081},
-{29523, 23081},
-
-{30643, 22642}, {30643, 22999}, {30773, 22999}, {30773, 24142}, {31260, 24142},
-{31260, 23449}, {32007, 23449}, {32007, 24147}, {32516, 24147}, {32516, 22999},
-{32614, 22999}, {32614, 22642}, {31970, 22642}, {31970, 22994}, {32072, 22994},
-{32072, 23081}, {31298, 23081}, {31298, 22642}, {30643, 22642},
-
-{31845, 20195}, {31845, 21256}, {32262, 21256}, {32262, 21316}, {32516, 21316},
-{32516, 20877}, {32267, 20877}, {32267, 20932}, {32083, 20932}, {32083, 20488},
-{32262, 20488}, {32262, 20547}, {32516, 20547}, {32516, 20195}, {31845, 20195},
-
-{25122, 16725}, {25122, 18869}, {26610, 18869}, {26610, 16725}, {26491, 16725},
-{26491, 16525}, {26529, 16493}, {26551, 16460}, {26556, 16406}, {26540, 16341},
-{26507, 16292}, {26448, 16265}, {26388, 16265}, {26334, 16287}, {26291, 16319},
-{26269, 16379}, {26275, 16438}, {26302, 16493}, {26340, 16520}, {26340, 16725},
-{25122, 16725},
-
-{20493, 17570}, {20493, 17391}, {21944, 17391}, {21944, 17570}, {20493, 17570},
-
-{2331, 20888}, {2331, 23963}, {2375, 24028}, {2440, 24071}, {2569, 24071},
-{7680, 24439}, {14013, 24439}, {14078, 24412}, {14111, 24358}, {14122, 24293},
-{14122, 23205}, {14111, 23146}, {14078, 23113}, {14024, 23097}, {7355, 23097},
-{7279, 23070}, {7241, 22994}, {7225, 22924}, {7225, 19935}, {7209, 19903},
-{7155, 19871}, {7052, 19871}, {2477, 20731}, {2402, 20769}, {2358, 20823},
-{2331, 20888},
-
-{17034, 23221}, {14630, 23221}, {14630, 24358}, {14641, 24407}, {14695, 24445},
-{14782, 24456}, {20742, 24456}, {20785, 24434}, {20818, 24407}, {20834, 24342},
-{20834, 23232}, {18420, 23232}, {18095, 23081},
-
- /* EOL 5 */
-
-{21489, 23248}, {21489, 24374}, {21500, 24429}, {21527, 24450}, {21565, 24461},
-{27097, 24461}, {27146, 24439}, {27179, 24402}, {27184, 24331}, {27184, 23248},
-{21489, 23248},
-
-{13310, 24981}, {14944, 25636}, {15004, 25657}, {15064, 25663}, {20764, 25663},
-{20802, 25636}, {20823, 25592}, {20834, 25544}, {20834, 25057}, {20818, 25024},
-{20785, 24992}, {20720, 24981}, {13310, 24981},
-
-{31910, 24975}, {32830, 24975}, {32830, 25652}, {31910, 25652},
-
-{32581, 25327}, {31477, 25327}, {30524, 24959}, {21560, 24959}, {21511, 24970},
-{21478, 25002}, {21473, 25046}, {21473, 25565}, {21489, 25603}, {21522, 25641},
-{21570, 25663}, {30530, 25663}, {31472, 25333},
-
-{27763, 22604}, {27763, 24337}, {27780, 24396}, {27812, 24434}, {27872, 24461},
-{32700, 24461}, {32744, 24429}, {32776, 24385}, {32792, 24337}, {32792, 22556},
-{32765, 22512}, {32717, 22491}, {32657, 22480}, {27866, 22480}, {27817, 22507},
-{27780, 22556}, {27763, 22604},
-
-{19340, 18122}, {19151, 18192}, {18939, 18322}, {18810, 18447}, {18701, 18647},
-{18669, 18847}, {18701, 19075}, {18810, 19270}, {18950, 19432}, {19151, 19540},
-{19340, 19611}, {22902, 19611}, {23097, 19551}, {23259, 19470}, {23433, 19335},
-{23552, 19178}, {23600, 18939}, {23600, 18750}, {23552, 18506}, {23427, 18339},
-{23259, 18219}, {23092, 18144}, {22897, 18122}, {19340, 18122},
-
-{22983, 17770}, {23216, 17808}, {23460, 17949}, {23725, 18133}, {23936, 18344},
-{24055, 18588}, {24104, 18864}, {24109, 18929}, {24071, 19151}, {23931, 19443},
-{23736, 19681}, {23503, 19816}, {23243, 19930}, {23037, 19968}, {19324, 19968},
-{19004, 19892}, {18755, 19773}, {18550, 19622}, {18371, 19448}, {18252, 19237},
-{18198, 19037}, {18182, 18880}, {18192, 18750}, {18252, 18566}, {18360, 18339},
-{18550, 18127}, {18783, 17943}, {19048, 17808}, {19324, 17770}, {22983, 17770},
-
-{27812, 20791}, {27184, 20872}, {27184, 21971}, {27092, 21944}, {27016, 21879},
-{26973, 21809}, {26962, 21722}, {27184, 21722},
-
-{33112, 24207}, {33112, 26150}, {33150, 26193}, {33307, 26193}, {33339, 26161},
-{33339, 24201}, {33301, 24153}, {33139, 24153}, {33112, 24207},
-
-{29106, 19968}, {28689, 20044}, {28456, 20130}, {28261, 20266}, {27942, 20563},
-{28294, 20910}, {28478, 21018}, {28673, 21083}, {29100, 21159}, {29214, 20720},
-{29230, 20536}, {29220, 20358}, {29106, 19968},
-
-{44150, 26296}, {44150, 26524}, {43949, 26724}, {43949, 26875}, {45314, 26875},
-{45314, 26713}, {45119, 26518}, {45119, 26291},
-
-{46970, 25084}, {46970, 25555}, {46981, 25598}, {47008, 25630}, {47046, 25641},
-{55696, 25641}, {55734, 25620}, {55756, 25592}, {55772, 25533}, {55772, 25057},
-{55756, 25019}, {55713, 24986}, {55659, 24970}, {47100, 24970}, {47030, 24975},
-{46986, 25019}, {46970, 25084},
-
-{58993, 24981}, {56422, 24981}, {56373, 24986}, {56341, 25019}, {56335, 25084},
-{56335, 25582}, {56341, 25614}, {56373, 25641}, {56411, 25647}, {58993, 25647},
-
-{33886, 25333}, {35093, 25333}, {36095, 24970}, {46402, 24970}, {46450, 24975},
-{46488, 25002}, {46510, 25057}, {46510, 25490}, {46499, 25582}, {46472, 25620},
-{46412, 25652}, {36084, 25652}, {35088, 25338},
-
-{40003, 15659}, {39667, 15659}, {39667, 15042}, {39992, 15042}, {39992, 14674},
-{40577, 14674}, {40577, 16893}, {41367, 16893}, {41367, 17489}, {40631, 17489},
-{40631, 17608}, {40501, 17608}, {40501, 17748}, {44171, 17748}, {44171, 17922},
-{44529, 17922}, {44529, 17315}, {46347, 18506}, {44561, 18506}, {44561, 18441},
-{44615, 18441}, {44615, 18095}, {44529, 18095}, {44529, 18019}, {44171, 18019},
-{44171, 18290}, {42222, 18290},
-
-{41833, 18290}, {42001, 18290}, {42001, 18506}, {41719, 18506}, {41719, 21451},
-{42639, 21451}, {42639, 18512}, {42217, 18512}, {42217, 18290}, {42001, 18290},
-
-{39256, 19551}, {39256, 21814}, {40079, 21814}, {40079, 21608}, {39998, 21608},
-{39998, 20769}, {39949, 20742}, {39949, 20482}, {40003, 20450}, {40003, 20076},
-{39906, 20076}, {39906, 20325}, {39424, 20325}, {39424, 19692}, {39906, 19692},
-{39906, 19806}, {39998, 19806}, {39998, 19551}, {39256, 19551},
-
-{44198, 22648}, {44198, 23005}, {44285, 23005}, {44285, 23676}, {44198, 23676},
-{44198, 24033}, {44913, 24033}, {44913, 23676}, {44832, 23676}, {44832, 23005},
-{44908, 23005}, {44908, 22648}, {44198, 22648},
-
-{45243, 24028}, {45243, 22783}, {46277, 22783}, {46277, 24028}, {45243, 24028},
-
-{36928, 14414}, {36928, 14197}, {36917, 14105}, {36885, 14073}, {36820, 14067},
-{32381, 14955}, {32316, 14988}, {32267, 15063}, {32262, 15139}, {32294, 15237},
-{32939, 16498}, {33171, 17364}, {33366, 18328}, {33529, 19243}, {33594, 19892},
-{33594, 24331}, {33621, 24385}, {33680, 24423}, {33751, 24439}, {46407, 24439},
-{46483, 24412}, {46526, 24358}, {46542, 24293}, {46542, 18885}, {46586, 18701},
-{49119, 13699}, {49146, 13607}, {49130, 13526}, {49076, 13467}, {46120, 11983},
-{45985, 11967}, {45909, 11989}, {45849, 12054}, {45801, 12146}, {45801, 12265},
-{45849, 12357}, {45893, 12400}, {45990, 12449},
-
- /* EOL 6 */
-
- /* East Garage (minus some of the ramp) */
-{45974, 14641}, {45866, 14576}, {45812, 14620}, {45736, 14663}, {45622, 14690},
-{45487, 14690}, {45314, 14793}, {45270, 14717}, {45379, 14652}, {45303, 14620},
-{45238, 14555}, {45194, 14457}, {45184, 14371}, {45211, 14246}, {45108, 14197},
-{46050, 12346}, {46916, 12779}, {45974, 14641},
-
-{42130, 15475}, {42130, 15892}, {42228, 15892}, {42228, 16043}, {43868, 16043},
-{43868, 15892}, {43966, 15892}, {43966, 15475}, {42130, 15475},
-
-
-{42160, 22384}, {42160, 22864}, {42768, 22864}, {42768, 22384}, {42160, 22384},
-
-{37280, 14414}, {37280, 14132}, {37291, 14057}, {37345, 13997}, {37464, 13948},
-{44956, 12400}, {45065, 12400}, {45146, 12443}, {45243, 12530}, {45308, 12627},
-{45330, 12725}, {45341, 12855}, {45319, 13023}, {45265, 13125}, {45194, 13174},
-{45102, 13196},
-
-{33994, 16606}, {33994, 16904}, {33864, 16904}, {33864, 16709}, {33420, 16709},
-{33420, 17045}, {33626, 17045}, {33626, 17619}, {33951, 17619}, {33951, 17976},
-{33821, 17976}, {33821, 18885}, {33734, 18885}, {33734, 19535}, {33821, 19535},
-{33821, 21798}, {33918, 21895}, {33918, 22101}, {33821, 22198}, {33821, 24039},
-{35640, 24039}, {35640, 23649}, {34341, 23649}, {34341, 22350}, {35640, 22350},
-{35640, 19557},
-
-{34211, 16606}, {34211, 16904}, {34525, 16904}, {34525, 17348}, {37892, 17348},
-{37892, 18019}, {34676, 18019}, {34676, 17619}, {34222, 17619}, {34222, 17976},
-{34341, 17976}, {34341, 18690}, {34655, 18690}, {34655, 18961}, {35098, 18961},
-{35098, 18290}, {35629, 18290}, {35629, 18961}, {36603, 18961}, {36603, 18030},
-
-{34406, 15816}, {34406, 16601}, {35039, 16601}, {35039, 16016}, {34736, 16016},
-{34736, 15870}, {34779, 15870}, {34779, 15821},
-
-{35120, 15269}, {35120, 16552}, {36484, 16552}, {36484, 16276}, {36652, 16276},
-{36652, 15269}, {35120, 15269},
-
-{38899, 14316}, {38899, 14192}, {39083, 14094}, {39261, 14197}, {39261, 14311},
-
-{38904, 14468}, {38904, 14706}, {38715, 14814}, {38964, 15009}, {39234, 15009},
-{39435, 14814}, {39256, 14695}, {39256, 14457},
-
-{40247, 14463}, {40247, 14668},
-
-{37870, 14165}, {37870, 15101}, {38547, 15101}, {38547, 14798}, {38893, 14457},
-{40658, 14457}, {40658, 14295}, {40750, 14295}, {40750, 13900}, {40658, 13900},
-{40658, 13759}, {39759, 13759}, {39759, 13791}, {39700, 13791}, {39613, 13808},
-{39575, 13824}, {39505, 13873}, {39440, 13921}, {39375, 14030}, {39343, 14127},
-{39321, 14246}, {39321, 14311}, {38839, 14311}, {38839, 14165}, {37870, 14165},
-
-{47159, 22388}, {47159, 22826}, {48664, 22826}, {48664, 23958}, {49114, 23958},
-{49114, 22826}, {48886, 22826}, {48886, 22388}, {47159, 22388},
-
-{47159, 23784}, {47159, 24125}, {48188, 24125}, {48188, 23784}, {48545, 23784},
-{48545, 23530}, {48307, 23530}, {48307, 23649}, {48031, 23649}, {48031, 23784},
-{47159, 23784},
-
-{50272, 22393}, {50067, 22902}, {51057, 23254}, {50765, 24023}, {51268, 24201},
-{51561, 23400}, {53141, 23963}, {53141, 24369}, {53639, 24369}, {53639, 23530},
-{50272, 22393},
-
- /* Tang Center, building e51 */
-{53910, 23876}, {53910, 24364}, {55610, 24364}, {55610, 22505}, {55085, 22505},
-{55085, 23876}, {53910, 23876},
-
-{46970, 22301}, {46970, 24293}, {46997, 24374}, {47062, 24439}, {47138, 24466},
-{55675, 24466}, {55734, 24439}, {55767, 24391}, {55772, 24326}, {55772, 22301},
-{46970, 22301},
-
-{59107, 18241}, {58706, 18057}, {58566, 18046}, {58430, 18095}, {58317, 18252},
-{56433, 22020}, {56384, 22160}, {56346, 22312}, {56335, 22442}, {56335, 24369},
-{56346, 24412}, {56389, 24445}, {56454, 24466}, {58977, 24466},
-
-{56454, 23173}, {56454, 23492}, {56416, 23492}, {56416, 24163}, {57066, 24163},
-{57066, 24299}, {57310, 24299}, {57310, 24153}, {57959, 24153}, {57959, 23508},
-{57786, 23508}, {57786, 23443}, {57629, 23443}, {57629, 23519}, {57342, 23519},
-{57342, 23194}, {57071, 23194}, {57071, 23276}, {56963, 23276}, {56963, 23173},
-{56454, 23173},
-
-{57223, 23194}, {57223, 22404}, {58317, 22404}, {58317, 23194}, {57223, 23194},
-
- /* EOL 7 */
-
-{54197, 21208}, {54029, 21446}, {53986, 21684}, {55778, 21684}, {56010, 21240},
-{55604, 21067}, {55529, 21202}, {55225, 21202}, {55225, 21072}, {54679, 21072},
-{54679, 21208}, {54197, 21208},
-
-{56130, 16942}, {53845, 21511}, {53802, 21722}, {53807, 21781}, {53834, 21825},
-{53888, 21846}, {55783, 21846}, {55826, 21819}, {55956, 21689}, {56140, 21381},
-{57916, 17797}, {57932, 17732}, {57927, 17678}, {57878, 17629}, {56335, 16855},
-{56249, 16844}, {56189, 16877}, {56130, 16942},
-
-{55296, 18625}, {55864, 18858}, {55393, 19730}, {54738, 19730},
-
-{53769, 15848}, {50943, 21424}, {50868, 21668}, {50873, 21781}, {50927, 21873},
-{51041, 21922}, {53001, 21922}, {53093, 21895}, {53179, 21809}, {53287, 21646},
-{55729, 16769}, {55740, 16698}, {55718, 16650}, {55664, 16585}, {53975, 15762},
-{53888, 15762}, {53823, 15794}, {53769, 15848},
-
- /* Boundary around medical/e19/etc. */
-{49633, 13813}, {47057, 18793}, {47008, 18880}, {46975, 18966}, {46959, 19064},
-{46959, 21933}, {49958, 21933}, {50072, 21911}, {50191, 21803}, {50413, 21424},
-{53282, 15653}, {53298, 15556}, {53271, 15507}, {53233, 15464}, {49817, 13748},
-{49742, 13737}, {49693, 13753}, {49633, 13813},
-
-{47230, 20109}, {47230, 19026}, {48594, 19026}, {48594, 20109}, {47230, 20109},
-
-{49964, 16715}, {50137, 16801}, {50223, 16650}, {52129, 17624}, {50527, 20764},
-{49909, 20775}, {51447, 17765}, {50018, 17029}, {50083, 16909}, {49909, 16823},
-
-{48762, 7144}, {46651, 11171}, {49217, 12460}, {49401, 12470}, {49568, 12422},
-{49834, 12232}, {51793, 9839}, {48762, 7144},
-
-{43024, 11983}, {42894, 11366}, {44215, 11095}, {44247, 11242}, {44442, 11198},
-{44556, 11669},
-
-{38276, 12162}, {38417, 12855}, {39933, 12552}, {39792, 11842}, {38276, 12162},
-
-{34411, 13770}, {34249, 12936},
-
-{33696, 13921}, {33534, 13093},
-
-{32922, 14089}, {32749, 13261},
-
-{36365, 13374}, {36257, 12882}, {36620, 12812}, {36636, 12876}, {37145, 12768},
-{37221, 13190},
-
-{30129, 11025}, {31076, 12736}, {42910, 10402}, {43029, 10267}, {40496, 8816},
-{30129, 11025},
-
-{36934, 9899}, {37210, 11285}, {39218, 10890}, {39196, 10776}, {39343, 10722},
-{39478, 10624}, {39597, 10467}, {39657, 10289}, {39646, 10083}, {39586, 9894},
-{39435, 9731}, {39278, 9645}, {39115, 9612}, {38964, 9628}, {38931, 9482},
-{36934, 9899},
-
-{38991, 9780}, {39164, 10630}, {39278, 10592}, {39386, 10505}, {39467, 10359},
-{39489, 10229}, {39478, 10078}, {39424, 9959}, {39343, 9883}, {39240, 9807},
-{39110, 9769}, {38991, 9780},
-
-{11025, 16709}, {17510, 15410}, {16200, 13613}, {11003, 14674},
-
- /* EOL 8 */
-
-{17315, 13580}, {17749, 14230}, {18095, 14555}, {18593, 14793}, {19264, 14879},
-{21018, 14555}, {20499, 12995}, {17315, 13580},
-
-{21067, 13466}, {21251, 14170}, {21792, 14051}, {21598, 13342}, {21067, 13466},
-
-{23319, 12297}, {23357, 12465}, {22745, 12584}, {22837, 12958}, {23422, 12849},
-{23498, 13174}, {22675, 13347}, {22902, 14306},
-
-{24634, 12054}, {25013, 13872},
-
-{25647, 11870}, {25842, 12774}, {25928, 12752}, {25972, 12952}, {26069, 12925},
-
-{25815, 11832}, {26242, 13618},
-
-{27390, 11529}, {27850, 13299},
-
-{27606, 12341}, {27904, 12373}, {28002, 12265}, {28083, 12216}, {28207, 12178},
-{28343, 12189}, {28451, 12216}, {28472, 12178}, {28554, 12243}, {28532, 12276},
-{28597, 12346}, {28635, 12427}, {28657, 12519}, {28657, 12633}, {28624, 12752},
-{28570, 12855}, {28500, 12914}, {28527, 12952}, {28451, 13001}, {28424, 12963},
-{28332, 12996}, {28234, 13001}, {28121, 12974}, {28034, 12941}, {27953, 12871},
-{27893, 12784}, {27866, 12703}, {27850, 12617}, {27855, 12508}, {27644, 12492},
-
-{19340, 12384}, {18122, 9921}, {19378, 9704}, {20623, 12156},
-
-{21478, 11999}, {20201, 9574}, {21630, 9336}, {22918, 11745},
-
-{24039, 11550}, {22891, 9639}, {24109, 9471}, {24943, 10722}, {24185, 10873},
-{24515, 11474},
-
-{14333, 10267}, {16368, 12909}, {26026, 11220}, {24597, 8838}, {21998, 9271},
-{23427, 11653},
-
-{24380, 7582}, {26589, 11128}, {28803, 10673}, {26848, 7192}, {24380, 7582},
-
-{40349, 7604}, {40306, 7658}, {40317, 7788}, {41053, 8232}, {41183, 8210},
-{41226, 8145}, {41216, 8015}, {40458, 7571}, {40349, 7604},
-
-{44280, 6564}, {43446, 8048}, {44106, 8416}, {44940, 6943}, {44280, 6564},
-
-{40766, 4827}, {39933, 6310}, {40593, 6678}, {41427, 5206}, {40766, 4827},
-
-{44615, 5547}, {44713, 5828}, {45449, 6250}, {45839, 6121}, {46055, 6218},
-{46347, 6077}, {46835, 5211}, {46759, 4670}, {46618, 4572}, {46542, 4258},
-{45979, 3923}, {45893, 3641}, {45741, 3533}, {45438, 3576}, {45243, 3825},
-{45341, 4226}, {46034, 4594}, {46088, 4854}, {46239, 4930}, {46261, 5081},
-{45958, 5655}, {45763, 5558}, {45600, 5633}, {45211, 5384}, {45200, 5265},
-{44940, 5124}, {44810, 5179}, {44615, 5547},
-
-{35878, 9185}, {37123, 6976}, {39743, 8416}, {35878, 9185},
-
-{33648, 9683}, {35499, 6023}, {36593, 6694}, {35575, 8730}, {35315, 9055},
-{34882, 9358}, {33648, 9683},
-
-{29772, 10462}, {29122, 9206}, {30898, 5525}, {32803, 6629}, {31158, 10159},
-{29772, 10462},
-
- /* EOL 9 */
-
-{29653, 6987}, {28689, 6478}, {28126, 7647}, {28819, 8751}, {30486, 5309},
-{29501, 4756}, {28689, 6489},
-
-{31677, 10072}, {33994, 5125}, {35142, 5817}, {33193, 9769}, {31677, 10072},
-
-{28039, 599}, {30302, 1985}, {31331, 101},
-
-{31937, 296}, {30779, 2288}, {37134, 6045}, {41237, 1584},
-
-{41973, 1898}, {37719, 6391}, {39884, 7582}, {40479, 7355}, {41432, 7929},
-{41400, 8448}, {43933, 9780}, {44399, 9498}, {44875, 9109}, {45157, 8719},
-{47333, 4800},
-
-{47766, 6348}, {45990, 9737}, {45665, 10181}, {45525, 10310}, {45232, 10473},
-{45979, 10917}, {48253, 6943}, {47766, 6348},
-
-{23806, 6456}, {24153, 7106}, {26556, 6716}, {23481, 978},
-
-{24586, 1768}, {25793, 3782}, {26567, 2629}, {25322, 1801},
-
-{25403, 4616}, {24472, 5070}, {23725, 3695}, {23817, 3652}, {23671, 3365},
-{23974, 3219}, {23931, 3138}, {24494, 2872},
-
-{26231, 3787}, {26453, 3939}, {27081, 3013},
-
-{26859, 5655}, {28223, 6445}, {27877, 7257}, {26859, 5655},
-
-{27119, 1032}, {30026, 2840}, {29317, 4166}, {25376, 1530},
-
-{30400, 3057}, {29707, 4377}, {32987, 6240}, {33637, 4919}, {30400, 3057},
-
-{26756, 5308}, {27168, 4491}, {27260, 4556}, {26865, 5357},
-
-{27888, 5893}, {28278, 5070}, {28094, 4962}, {28294, 4616}, {28927, 5005},
-
-{29176, 4491}, {28375, 6153}, {26719, 5287}, {26015, 4096}, {26859, 2840},
-{29176, 4491},
-
-{27747, 3473}, {27623, 3701}, {27698, 3755}, {27828, 3533},
-
-{28364, 4199}, {28278, 4345}, {28586, 4540}, {28673, 4394}, {28364, 4199},
-
-{27238, 4345}, {27325, 4410}, {27623, 3901}, {27541, 3847}, {27238, 4345},
-
-{10803, 17045}, {10868, 17348},
-
- /* EOL 10 */
-
-{11718, 16844}, {11783, 17148},
-
-{12736, 16671}, {12801, 16974},
-
-{13651, 16471}, {13716, 16774},
-
-{14603, 16254}, {14668, 16557},
-
-{15518, 16054}, {15583, 16357},
-
-{16536, 15881}, {16601, 16184},
-
-{17451, 15680}, {17516, 15984},
-
-{18339, 15551}, {18404, 15854},
-
-{19254, 15350}, {19319, 15653},
-
-{29474, 13272}, {29539, 13575},
-
-{30389, 13071}, {30454, 13374},
-
-{31407, 12898}, {31472, 13201},
-
-{32321, 12698}, {32386, 13001},
-
-{33274, 12481}, {33339, 12784},
-
-{34189, 12281}, {34254, 12584},
-
-{35207, 12108}, {35272, 12411},
-
-{36122, 11907}, {36187, 12210},
-
-{37010, 11777}, {37074, 12081},
-
-{37924, 11577}, {37989, 11880},
-
-{38747, 11404}, {38812, 11707},
-
- /* EOL 11 */
-
-{39662, 11204}, {39727, 11507},
-
-{40680, 11030}, {40745, 11334},
-
-{41595, 10830}, {41660, 11133},
-
-{42547, 10614}, {42612, 10917},
-
-{43462, 10413}, {43527, 10716},
-
-{20152, 15166}, {20217, 15469},
-
-{21067, 14966}, {21132, 15269},
-
-{22085, 14793}, {22150, 15096},
-
-{23000, 14592}, {23065, 14895},
-
-{23952, 14376}, {24017, 14679},
-
-{24867, 14176}, {24932, 14479},
-
-{25885, 14002}, {25950, 14305},
-
-{26800, 13802}, {26865, 14105},
-
-{27688, 13672}, {27753, 13975},
-
-{28603, 13472}, {28668, 13775},
-
-{44258, 10224}, {44409, 10462},
-
-{44821, 9791}, {45037, 10051},
-
-{45362, 9358}, {45600, 9531},
-
-{45714, 8703}, {45952, 8876},
-
-{46044, 8048}, {46283, 8221},
-
- /* EOL 12 */
-
-{46375, 7414}, {46613, 7588},
-
-{31488, 20720}, {31125, 20720}, {31098, 20639}, {31065, 20574}, {31017, 20520},
-{30941, 20466}, {30865, 20434}, {30768, 20423}, {30681, 20439}, {30584, 20482},
-{30524, 20536}, {30470, 20607}, {30427, 20715}, {30421, 20802}, {30438, 20904},
-{30470, 20969}, {30513, 21034}, {30578, 21089}, {30654, 21132}, {30746, 21153},
-{30833, 21159}, {30908, 21132}, {30984, 21094}, {31038, 21045}, {31087, 20975},
-{31114, 20915}, {31125, 20872}, {31488, 20872},
-
-{22334, 23324}, {24986, 23324}, {25057, 23427}, {25257, 23313}, {25392, 23313},
-{25446, 23416}, {25641, 23313}, {25955, 23313}, {26437, 23898}, {26437, 24169},
-{26340, 24250}, {25874, 23752}, {24889, 24250}, {24829, 24272}, {24775, 24261},
-{24726, 24217}, {24326, 23541}, {22577, 24337}, {22512, 24180}, {22615, 24136},
-{22567, 24033}, {22648, 23990}, {22604, 23898}, {22680, 23855}, {22615, 23741},
-{22334, 23741}, {22334, 23324},
-
-{27184, 19167}, {27184, 20260}, {27785, 20358},
-
-{29160, 21310}, {29160, 21965},
-
-{28938, 21403}, {28938, 21965},
-
-{28938, 19686}, {28938, 19167}, {25815, 19167}, {25815, 21716}, {26572, 21716},
-{26599, 21814}, {26637, 21890}, {26702, 21987}, {26767, 22058}, {26827, 22117},
-{26908, 22182}, {27016, 22236}, {27097, 22263}, {27184, 22263},
-
-{22822, 12566}, {22664, 11812},
-
-{22878, 11773}, {23041, 12527},
-
- /* building 68 */
-{45675, 17430}, {47150, 14500}, {48100, 15000}, {46600 ,18040}, {45675, 17430},
-
- /* 66 - 68 bridge (two pieces) */
-{46200, 17800}, {45980, 18188},
-
-{46410, 17950}, {46190, 18400},
-
- /* e51 - e40 bridge */
-{55100, 22505}, {55100, 21683}, {55250, 21683}, {55250, 22505}, {55100, 22505},
-
-};
-
-#define num_points (sizeof(points) / sizeof(Point))
-
-#define min_x 100
-#define max_x 59106
-#define min_y 100
-#define max_y 27224
-
-int num_segs[] = {
-2, 2, 17, 28, 5, 5, 2, 2, 3, 9, 5, 7, 4, 5, 7, 6, 3, 10, 5, 5,
-8, 12, 7, 7, 5, 8, 5, 4, 16, 10, 5, 5, 3, 35, 34, 5, 5, 3, 4,
-7, 4, 4, 2, 2, 2, 2, 2, 4, 8, 28, 17, 17, 9, 5, 13, 11, 5, 7, 5,
-2, 3, 2, 17, 5, 5, 7, 3, 55, 33, 20, 9, 5, 5, 5, 5, 5, 5, 5, 5,
-2, 2, 2, 2, 12, 2, 2, 2, 9, 13, 3, 13, 5, 6, 19, 15, 21, 5, 26, 13,
-11, 13, 4, 13, 17, 24, 30, 8, 9, 13, 8, 17, 10, 13, 27, 10, 19, 13, 5, 38,
-18, 9, 5, 16, 26, 20, 8, 7, 5, 8, 2, 25, 9, 11, 11, 7, 11, 14, 21, 5,
-12, 18, 4, 18, 18, 5, 10, 8, 6, 5, 2, 2, 2, 6, 6, 16, 12, 4,
-8, 5, 8, 2, 5, 2, 2, 30, 4, 4, 6, 6, 5, 9, 5, 5, 28, 4, 7, 6,
-7, 5, 3, 4, 11, 8, 4, 4, 8, 3, 4, 4, 5, 4, 5, 6, 4, 5, 5, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 28, 27, 3, 2, 2, 14, 2, 2, 5, 2, 2, 5
-};
-
-#define num_groups (sizeof(num_segs) / sizeof(int))
diff --git a/read.c b/read.c
deleted file mode 100644
index b0ccd17..0000000
--- a/read.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Campus Cluster Monitering Program
- * John Welch and Chris Vanharen
- * MIT's Project Athena
- * Summer 1990
- */
-
-#include "xcluster.h" /* global include file. */
-#include "net.h"
-#include <ctype.h>
-
-/*
- * GLOBAL VARIABLES
- */
-struct cluster *cluster_list; /* Pointer to list of clusters */
-static char *config[] = {"configplease3"};
-char machtypes[10][25];
-int num_machtypes;
-
-/*
- * read_clusters reads the cluster names and locations in from a file and
- * puts them into a linked list called cluster_list.
- */
-void read_clusters()
-{
- int num, trip=0, i;
- struct cluster *new, *current = NULL;
- FILE *f;
- int s;
- char buf[25];
- char *ptr;
-
- s = net(progname, 1, config);
- if (s < 1)
- {
- fprintf(stderr,
- "Error while contacting server, trying to get configuration information.\n");
- exit(-1);
- }
-
-/* read data from socket */
-
- f = fdopen(s, "r");
-
- fscanf(f, "%d", &num_machtypes);
- for (i=1; i <= num_machtypes; i++)
- {
- fscanf(f, "%s", machtypes[i]);
- }
- strcpy(machtypes[i], "Totals");
-
- cluster_list = (struct cluster *)malloc ((unsigned)sizeof(struct cluster));
- while(fscanf(f, "%d", &num) != EOF)
- {
- if (trip == 1)
- new = (struct cluster *) malloc ((unsigned) sizeof (struct cluster));
- else
- new = cluster_list;
- if (new == NULL)
- {
- fprintf (stderr, "%s: Out of memory.\n", progname);
- exit (-1);
- }
- new->cluster_number = num;
-
- fgets(buf, 25, f);
- ptr = buf;
-
- while (isspace(*ptr))
- ptr++;
- ptr[strlen(ptr) - 1] = '\0';
- strcpy(new->button_name, ptr);
-
- for (i=0; TRUE; i++)
- {
- fscanf(f, "%s", new->cluster_names[i]);
- if(!strcmp(new->cluster_names[i], "XXXXX"))
- break;
- fscanf(f, "%s", new->phone_num[i]);
- }
-
- fscanf(f, "%d%d", &new->x_coord, &new->y_coord);
-
- for (i=0; TRUE; i++)
- {
- fscanf(f, "%s", new->prntr_name[i]);
- strcpy(new->prntr_current_status[i], "?");
- strcpy(new->prntr_num_jobs[i], "0");
- if(!strcmp(new->prntr_name[i], "XXXXX"))
- break;
- }
- new->next = NULL;
- if (trip == 1)
- current->next = new;
- current = new;
- trip = 1;
- }
- (void)fclose(f);
-}
diff --git a/xcluster b/xcluster
new file mode 100755
index 0000000..3e9b1e6
--- /dev/null
+++ b/xcluster
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+xdg-open "https://xcluster.mit.edu"
diff --git a/xcluster.c b/xcluster.c
deleted file mode 100644
index 509b249..0000000
--- a/xcluster.c
+++ /dev/null
@@ -1,861 +0,0 @@
-/*
- * $Id: xcluster.c,v 1.4 1999-03-01 18:30:05 ghudson Exp $
- *
- * Copyright 1990, 1991 by the Massachusetts Institute of Technology.
- *
- * For copying and distribution information, please see the file
- * <mit-copyright.h>.
- *
- */
-
-#ifndef lint
-static char rcsid[] =
-"$Id: xcluster.c,v 1.4 1999-03-01 18:30:05 ghudson Exp $";
-#endif /* lint */
-
-#include "mit-copyright.h"
-#include <stdio.h>
-#include <ctype.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/param.h>
-#include <fcntl.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xatom.h>
-#include <X11/Xmu/WinUtil.h>
-#include <Jets/Jets.h>
-#include <Jets/Window.h>
-#include <Jets/Button.h>
-#include <Jets/Label.h>
-#include <Jets/Form.h>
-#include <Jets/Tree.h>
-#include <Jets/Drawing.h>
-
-#include "xcluster.h"
-#include "points.h"
-
-
-int check_cluster();
-struct cluster *find_text();
-
-extern int DEBUG;
-
-Jet root, text, map;
-GC map_gc = NULL;
-int lx = 32767, ly = 32767, hx = 0, hy = 0;
-XPoint *points2 = NULL;
-char *progname;
-char form[BUFSIZ];
-struct cluster *Current;
-
-int set_auto();
-
-
-
-/*
- * These definitions are needed by the tree jet
- */
-JetClass *jetClasses[] =
-{ &treeJetClass, &windowJetClass, &buttonJetClass, &labelJetClass,
- &formJetClass, &drawingJetClass};
-
-int numJetClasses = XjNumber(jetClasses);
-
-static XrmOptionDescRec opTable[] = {
-{"+rv", "*reverseVideo", XrmoptionNoArg, (caddr_t) "off"},
-{"-background", "*background", XrmoptionSepArg, (caddr_t) NULL},
-{"-bd", "*borderColor", XrmoptionSepArg, (caddr_t) NULL},
-{"-bg", "*background", XrmoptionSepArg, (caddr_t) NULL},
-{"-bordercolor","*borderColor", XrmoptionSepArg, (caddr_t) NULL},
-{"-borderwidth","*xclusterWindow.borderWidth", XrmoptionSepArg,
- (caddr_t) NULL},
-{"-bw", "*xclusterWindow.borderWidth", XrmoptionSepArg,
- (caddr_t) NULL},
-{"-display", ".display", XrmoptionSepArg, (caddr_t) NULL},
-{"-fg", "*foreground", XrmoptionSepArg, (caddr_t) NULL},
-{"-fn", "*font", XrmoptionSepArg, (caddr_t) NULL},
-{"-font", "*font", XrmoptionSepArg, (caddr_t) NULL},
-{"-foreground", "*foreground", XrmoptionSepArg, (caddr_t) NULL},
-{"-geometry", "*xclusterWindow.geometry",XrmoptionSepArg, (caddr_t) NULL},
-{"-reverse", "*reverseVideo", XrmoptionNoArg, (caddr_t) "on"},
-{"-rv", "*reverseVideo", XrmoptionNoArg, (caddr_t) "on"},
-{"-xrm", NULL, XrmoptionResArg, (caddr_t) NULL},
-{"-name", ".name", XrmoptionSepArg, (caddr_t) NULL},
-{"-appdefs", ".appDefs", XrmoptionSepArg, (caddr_t) NULL},
-{"-f", ".appDefs", XrmoptionSepArg, (caddr_t) NULL},
-{"-userdefs", ".userDefs", XrmoptionSepArg, (caddr_t) NULL},
-{"-inactive", ".inactive", XrmoptionSepArg, (caddr_t) 60},
-{"-auto", ".auto", XrmoptionSepArg, (caddr_t) 60},
-{"-circlecolor",".circlecolor", XrmoptionSepArg, (caddr_t) NULL},
-{"-zoom", ".zoom", XrmoptionNoArg, (caddr_t) "on"},
-{"-color0", ".color0", XrmoptionSepArg, (caddr_t) NULL},
-{"-color1", ".color1", XrmoptionSepArg, (caddr_t) NULL},
-{"-color2", ".color2", XrmoptionSepArg, (caddr_t) NULL},
-{"-changetime", ".changetime", XrmoptionSepArg, (caddr_t) NULL}, /* s*/
-{"-steps", ".steps", XrmoptionSepArg, (caddr_t) NULL},
-{"-steptime", ".steptime", XrmoptionSepArg, (caddr_t) NULL}, /*ms*/
-{"-warp", ".warp", XrmoptionNoArg, (caddr_t) "on"},
-};
-
-typedef struct _MyResources
-{
- int inactive;
- int automatic;
- int ccolor;
- Boolean zoom;
- char *colors[3];
- int changetime;
- int steps, steptime;
- Boolean warp;
-} MyResources;
-
-typedef struct _MyResources *MyResourcesPtr;
-
-MyResources parms;
-
-#define offset(field) XjOffset(MyResourcesPtr,field)
-
-static XjResource appResources[] =
-{
- { "inactive", "Inactive", XjRInt, sizeof(int),
- offset(inactive), XjRInt, (caddr_t) 0 },
- { "auto", "Auto", XjRInt, sizeof(int),
- offset(automatic), XjRInt, (caddr_t) 0 },
- { "circlecolor", XjCForeground, XjRColor, sizeof(int),
- offset(ccolor), XjRString, XjDefaultForeground },
- { "zoom", "Zoom", XjRBoolean, sizeof(Boolean),
- offset(zoom), XjRBoolean, (caddr_t) 0 },
- { "color0", "Color", XjRString, sizeof(char *),
- offset(colors[0]), XjRString, (caddr_t) "red green blue" },
- { "color1", "Color", XjRString, sizeof(char *),
- offset(colors[1]), XjRString, (caddr_t) "green blue red" },
- { "color2", "Color", XjRString, sizeof(char *),
- offset(colors[2]), XjRString, (caddr_t) "blue red green" },
- { "changetime", "Changetime", XjRInt, sizeof(int),
- offset(changetime), XjRInt, (caddr_t) 3600 },
- { "steps", "Steps", XjRInt, sizeof(int),
- offset(steps), XjRInt, (caddr_t) 256 },
- { "steptime", "Steptime", XjRInt, sizeof(int),
- offset(steptime), XjRInt, (caddr_t) 50 },
- { "warp", "Warp", XjRBoolean, sizeof(Boolean),
- offset(warp), XjRBoolean, (caddr_t) 0 },
-};
-
-#undef offset
-
-int divis;
-int xleft = 0, yleft = 0;
-struct cluster *circled = NULL;
-Pixmap pixmap_on = (Pixmap) NULL, pixmap_off = (Pixmap) NULL;
-
-int resize(draw, foo, data)
- DrawingJet draw;
- int foo;
- caddr_t data;
-{
- int div_x, div_y;
- int i;
- int width, height;
-
- if (parms.zoom)
- {
- width = hx - lx + 5000;
- height = hy - ly + 5000;
- }
- else
- {
- width = max_x;
- height = max_y;
- }
-
- div_x = (width / draw->core.width) + 1;
- div_y = (height / draw->core.height) + 1;
-
- divis = (div_x > div_y) ? div_x : div_y;
-
- if (parms.zoom)
- {
- if (divis == div_y)
- {
- yleft = (2500-ly)/divis;
- xleft = -lx/divis + ((draw->core.width - (hx - lx)/divis) / 2);
- }
- else
- {
- xleft = (2500-lx)/divis;
- yleft = -ly/divis + ((draw->core.height - (hy - ly)/divis) / 2);
- }
- }
- else
- {
- yleft = (draw->core.height - (max_y/divis)) / 2;
- xleft = (draw->core.width - (max_x/divis)) / 2;
- }
-
- if (points2 == NULL)
- points2 = (XPoint *) malloc(num_points * sizeof(XPoint));
-
- for (i=0; i < num_points; i++)
- {
- points2[i].x = points[i].x / divis + xleft;
- points2[i].y = points[i].y / divis + yleft;
- }
- XClearWindow(XjDisplay(draw), XjWindow(draw));
-
- if (pixmap_on != (Pixmap) NULL)
- XFreePixmap(XjDisplay(map), pixmap_on);
- if (pixmap_off != (Pixmap) NULL)
- XFreePixmap(XjDisplay(map), pixmap_off);
- pixmap_on = XCreatePixmap(XjDisplay(map),
- XjWindow(map),
- 800/divis+2, 800/divis+2,
- DefaultDepth(XjDisplay(map),
- DefaultScreen(XjDisplay(map))));
- pixmap_off = XCreatePixmap(XjDisplay(map),
- XjWindow(map),
- 800/divis+2, 800/divis+2,
- DefaultDepth(XjDisplay(map),
- DefaultScreen(XjDisplay(map))));
- circled = NULL;
-
- return 0;
-}
-
-
-
-/*
- * draw_circle draws a circle around a cluster.
- */
-void draw_circle(c)
- struct cluster *c;
-{
- if (circled != NULL && circled != c && map_gc != NULL)
- {
- XCopyArea(XjDisplay(map), pixmap_off, XjWindow(map),
- ((DrawingJet) map)->drawing.foreground_gc,
- 0, 0, 800/divis+2, 800/divis+2,
- (circled->x_coord-400)/divis+xleft-1,
- (circled->y_coord-400)/divis+yleft-1);
- }
-
- if (c != NULL && circled != c && map_gc != NULL)
- {
- XCopyArea(XjDisplay(map), XjWindow(map), pixmap_off,
- ((DrawingJet) map)->drawing.foreground_gc,
- (c->x_coord-400)/divis + xleft - 1,
- (c->y_coord-400)/divis + yleft - 1,
- 800/divis+2, 800/divis+2,
- 0, 0);
- XDrawArc(XjDisplay(map), XjWindow(map), map_gc,
- (c->x_coord-400)/divis + xleft,
- (c->y_coord-400)/divis + yleft,
- 800/divis, 800/divis,
- 0, 64 * 365);
- XCopyArea(XjDisplay(map), XjWindow(map), pixmap_on,
- ((DrawingJet) map)->drawing.foreground_gc,
- (c->x_coord-400)/divis + xleft - 1,
- (c->y_coord-400)/divis + yleft - 1,
- 800/divis+2, 800/divis+2,
- 0, 0);
- /* There's only 360 degrees in a circle, I know, but for the */
- /* xterminal, we have to go a bit extra. Sigh. */
-
- XFlush(XjDisplay(map));
- }
-
- if (map_gc != NULL)
- circled = c;
-}
-
-
-
-int expos(draw, foo, data)
- DrawingJet draw;
- int foo;
- caddr_t data;
-{
- int i,k;
- struct cluster *c;
-
- k=0;
- for (i=0; i < num_groups; i++)
- {
- XDrawLines(XjDisplay(draw), XjWindow(draw),
- draw->drawing.foreground_gc,
- points2+k,
- num_segs[i], CoordModeOrigin);
- k += num_segs[i];
- }
-
-/*
- * Draw the cluster locations on the map pixmap.
- */
-
- if (map_gc == NULL)
- {
- unsigned long valuemask;
- XGCValues values;
-
- values.line_width = 2;
- values.cap_style = CapProjecting;
- values.foreground = parms.ccolor;
- valuemask = GCForeground | GCLineWidth | GCCapStyle;
-
- map_gc = XCreateGC(XjDisplay(draw), XjWindow(draw), valuemask, &values);
-
- valuemask = GCBackground | GCFunction | GCFont;
- XCopyGC(XjDisplay(draw), draw->drawing.foreground_gc,
- valuemask, map_gc);
- }
-
-
- for (c = cluster_list; c != NULL; c = c->next)
- {
- XDrawLine(XjDisplay(draw), XjWindow(draw), map_gc,
- (c->x_coord-100)/divis +xleft, (c->y_coord-100)/divis +yleft,
- (c->x_coord+100)/divis +xleft, (c->y_coord+100)/divis +yleft);
- XDrawLine(XjDisplay(draw), XjWindow(draw), map_gc,
- (c->x_coord-100)/divis +xleft, (c->y_coord+100)/divis +yleft,
- (c->x_coord+100)/divis +xleft, (c->y_coord-100)/divis +yleft);
- if (c == Current)
- {
- draw_circle(c);
- }
- }
- return 0;
-}
-
-
-
-
-int createTree(fromJet, what, data)
- Jet fromJet;
- char *what;
- caddr_t data;
-{
- if (NULL == XjFindJet(what, root))
- XjRealizeJet(XjVaCreateJet(what, treeJetClass, root, NULL, NULL));
- return 0;
-}
-
-
-int mapTree(fromJet, what, data)
- Jet fromJet;
- char *what;
- caddr_t data;
-{
- Jet w;
-
- w = XjFindJet(what, root);
-
- if (w != NULL)
- {
- w = w->core.child;
- while (w)
- {
- MapWindow(w, True);
- w = w->core.sibling;
- }
- return 0;
- }
- else
- {
- char errtext[100];
-
- sprintf(errtext, "couldn't find %s to map it", what);
- XjWarning(errtext);
- return 1;
- }
-}
-
-
-int unmapTree(fromJet, what, data)
- Jet fromJet;
- char *what;
- caddr_t data;
-{
- Jet w;
-
- w = XjFindJet(what, root);
-
- if (w != NULL)
- {
- w = w->core.child;
- while (w)
- {
- UnmapWindow(w);
- w = w->core.sibling;
- }
- return 0;
- }
- else
- {
- char errtext[100];
-
- sprintf(errtext, "couldn't find %s to unmap it", what);
- XjWarning(errtext);
- return 1;
- }
-}
-
-
-int quit(fromJet, what, data)
- caddr_t fromJet;
- int what;
- caddr_t data;
-{
- exit(what);
- return 0; /* For linting... */
-}
-
-
-fatal(display)
- Display *display;
-{
- exit(-1);
-}
-
-
-int timeout(data, id)
- int data, id;
-{
- exit(0);
-}
-
-void reset_timer()
-{
- static int timerid = -1;
-
- if (parms.inactive != 0)
- {
- if (timerid != -1)
- (void) XjRemoveWakeup(timerid);
- timerid = XjAddWakeup(timeout, 0, 1000 * parms.inactive);
- }
-}
-
-
-void set_curr(c, id)
- struct cluster *c;
- int id;
-{
- static int timerid = -1;
- Current = c;
-
- for(c=cluster_list; c != NULL; c=c->next)
- if (c != Current)
- SetToggleState(c->btn, False, False);
- else
- SetToggleState(c->btn, True, False);
-
- XjCallCallbacks(text, ((DrawingJet) text)->drawing.exposeProc, NULL);
- draw_circle(Current);
- reset_timer();
- if (parms.automatic != 0)
- {
- if (timerid != -1 && timerid != id)
- (void) XjRemoveWakeup(timerid);
- timerid = XjAddWakeup(set_auto, 0, 1000 * parms.automatic);
- }
-}
-
-
-int set_auto(data, id)
- int data, id;
-{
- static struct cluster *automatic = NULL;
-
- if (automatic == NULL)
- automatic = cluster_list;
-
- set_curr(automatic, id);
- automatic = Current->next;
- return 0;
-}
-
-
-int btn(me, curr, data)
- DrawingJet me;
- int curr;
- caddr_t data;
-{
- int n;
- struct cluster *c;
-
- for(c=cluster_list, n=0; c != NULL && n < curr; c=c->next, n++);
- set_curr(c, -1);
- return 0;
-}
-
-int unset(me, curr, data)
- DrawingJet me;
- int curr;
- caddr_t data;
-{
- SetToggleState(me, True, True);
- return(0);
-}
-
-
-
-
-#define SQUARE(a) (a) * (a) /* obvious... */
-
-
-/*
- * find_cluster finds the closest cluster to point (a,b) and returns it.
- */
-struct cluster *find_cluster(a, b)
- int a, b;
-{
- double closest_distance, distance;
- struct cluster *closest_cluster, *curr;
-
- closest_cluster = curr = cluster_list;
- closest_distance = SQUARE(curr->x_coord/divis + xleft - a)
- + SQUARE(curr->y_coord/divis + yleft - b);
-
- for(; curr != NULL; curr=curr->next)
- {
- distance = SQUARE(curr->x_coord/divis + xleft - a)
- + SQUARE(curr->y_coord/divis + yleft - b);
- if (distance < closest_distance)
- {
- closest_distance = distance;
- closest_cluster = curr;
- }
- }
- return(closest_cluster);
-}
-
-
-int map_hit(me, curr, event)
- DrawingJet me;
- int curr;
- XEvent *event;
-{
- struct cluster *c;
-
- if (event->type == ButtonPress)
- {
- c = find_cluster(event->xbutton.x, event->xbutton.y);
- set_curr(c, -1);
- }
- return 0;
-}
-
-
-int text_resize(draw, foo, data)
- DrawingJet draw;
- int foo;
- caddr_t data;
-{
- XClearWindow(XjDisplay(draw), XjWindow(draw));
-}
-
-
-int text_hit(me, curr, event)
- DrawingJet me;
- int curr;
- XEvent *event;
-{
- struct cluster *c;
- extern struct cluster *find_text();
-
- if (event->type == ButtonPress)
- {
- c = find_text(event->xbutton.x, event->xbutton.y);
- set_curr(c, -1);
- }
- return 0;
-}
-
-
-int state = 0;
-
-int flash(data, id)
- int data, id;
-{
- if (circled != NULL)
- {
- if (state)
- XCopyArea(XjDisplay(map), pixmap_on, XjWindow(map),
- ((DrawingJet) map)->drawing.foreground_gc,
- 0, 0, 800/divis+2, 800/divis+2,
- (circled->x_coord-400)/divis+xleft-1,
- (circled->y_coord-400)/divis+yleft-1);
- else
- XCopyArea(XjDisplay(map), pixmap_off, XjWindow(map),
- ((DrawingJet) map)->drawing.foreground_gc,
- 0, 0, 800/divis+2, 800/divis+2,
- (circled->x_coord-400)/divis+xleft-1,
- (circled->y_coord-400)/divis+yleft-1);
- }
- state = !state;
- (void) XjAddWakeup(flash, 0, 1000);
- return 0;
-}
-
-
-
-XjCallbackRec callbacks[] =
-{
- { "createTree", createTree },
- { "mapTree", mapTree },
- { "unmapTree", unmapTree },
- { "quit", quit },
- { "resize", resize },
- { "expose", expos },
- { "check_cluster", check_cluster },
- { "button", btn },
- { "unset", unset },
- { "map_hit", map_hit },
- { "text_hit", text_hit },
- { "text_resize", text_resize },
-};
-
-
-void make_btns(Form)
- Jet Form;
-{
- struct cluster *c;
- int n;
- Jet w, l;
- int first = 1;
- char prev[10];
- char buf[BUFSIZ];
- char buf1[10];
-
- for(c=cluster_list, n=0; c != NULL; c=c->next, n++)
- {
- sprintf(buf1, "button%d", n);
- w = XjVaCreateJet(buf1, windowJetClass, Form, NULL, NULL);
- c->btn = (ButtonJet) XjVaCreateJet("foo", buttonJetClass, w, NULL, NULL);
- l = XjVaCreateJet("bar", labelJetClass, c->btn,
- XjNlabel, c->button_name, NULL, NULL);
-
- if (first)
- {
- first = 0;
- sprintf(buf, " %s: 1 - - twin ", buf1);
- }
- else
- sprintf(buf, " %s: %s - - twin ", buf1, prev);
-
- strcpy(prev, buf1);
- strcat(form, buf);
- }
-}
-
-compute_zoom()
-{
- struct cluster *c;
-
- for(c=cluster_list; c != NULL; c=c->next)
- {
- lx = MIN(c->x_coord, lx);
- ly = MIN(c->y_coord, ly);
- hx = MAX(c->x_coord, hx);
- hy = MAX(c->y_coord, hy);
- }
-}
-
-#define MAXCOLORS 3
-#define MAXCYCLES 15
-XColor cycles[MAXCOLORS][MAXCYCLES];
-int cycle, subcycle, numCycles;
-
-void nextcycle()
-{
- int i;
- XColor col;
-
- subcycle++;
- if (subcycle >= parms.steps)
- {
- subcycle = 0;
- cycle++;
- if (cycle == numCycles)
- cycle = 0;
- }
-
- if (parms.changetime != 0 && subcycle == 0)
- (void)XjAddWakeup(nextcycle, 0, parms.changetime * 1000);
- else
- (void)XjAddWakeup(nextcycle, 0, parms.steptime);
-
- for (i = 0; i < MAXCOLORS; i++)
- if (cycles[i][0].pixel != XjNoColor)
- {
- col.pixel = cycles[i][0].pixel;
- col.red = cycles[i][cycle].red +
- (subcycle * (int)( cycles[i][(cycle + 1)%numCycles].red -
- cycles[i][cycle].red ) / parms.steps);
- col.green = cycles[i][cycle].green +
- (subcycle * (int)( cycles[i][(cycle + 1)%numCycles].green -
- cycles[i][cycle].green ) / parms.steps);
- col.blue = cycles[i][cycle].blue +
- (subcycle * (int)( cycles[i][(cycle + 1)%numCycles].blue -
- cycles[i][cycle].blue ) / parms.steps);
- col.flags = DoRed | DoGreen | DoBlue;
-
- XStoreColors(XjDisplay(root), XjColormap(root), &col, 1);
- }
-}
-
-void init_color_cycle()
-{
- int i, j, docycles;
- char name[50], *dest, *src;
- char errtext[100];
-
- docycles = 0;
- numCycles = 0;
-
- for (i = 0; i < MAXCOLORS; i++)
- for (j = 0; j < MAXCYCLES; j++)
- cycles[i][j].pixel = XjNoColor;
-
- for (i = 0; i < MAXCOLORS; i++)
- if (XjGetColor(i) != XjNoColor) /* a used color */
- {
- docycles = 1;
- src = parms.colors[i];
-
- for (j = 0; j < MAXCYCLES; j++)
- {
- while (isspace(*src))
- src++;
-
- if (*src == '\0')
- {
- if (j == 0)
- {
- sprintf(errtext, "bad specification for color%d", i);
- XjWarning(errtext);
- src = "red";
- }
- else
- break;
- }
-
- dest = name;
- while (!isspace(*src) && *src != '\0')
- *dest++ = *src++; /* XXX no error checking for > 50 */
- *dest = '\0';
-
- if (!XParseColor(XjDisplay(root), XjColormap(root),
- name, &cycles[i][j]))
- {
- sprintf(errtext, "could not look up color \"%s\"", name);
- XjWarning(errtext);
- cycles[i][j].red = 256*255;
- cycles[i][j].green = 0;
- cycles[i][j].blue = 0;
- cycles[i][j].flags = DoRed | DoGreen | DoBlue;
- }
- cycles[i][j].pixel = XjGetColor(i);
- }
-
- numCycles = MAX(numCycles, j);
- }
-
- if (docycles == 0) /* we're not using this feature */
- return;
-
- for (i = 0; i < MAXCOLORS; i++)
- for (j = 1; j < numCycles; j++)
- if (cycles[i][j].pixel == XjNoColor)
- cycles[i][j] = cycles[i][j-1];
-
- cycle = 0;
- subcycle = 0;
-
- for (i = 0; i < MAXCOLORS; i++)
- if (cycles[i][0].pixel != XjNoColor)
- XStoreColors(XjDisplay(root), XjColormap(root), &cycles[i][cycle], 1);
-
- if (parms.changetime != 0)
- (void)XjAddWakeup(nextcycle, 0, parms.changetime * 1000);
- else
- (void)XjAddWakeup(nextcycle, 0, parms.steptime);
-}
-
-main(argc, argv)
-int argc;
-char **argv;
-{
- Jet xclusterWindow, xclusterForm, label1, mapwin;
- Jet qw, qb, ql, hw, hb, hl;
- Jet twin;
-
-
- Current = cluster_list;
-
- (void)XSetIOErrorHandler(fatal);
-
- root = XjCreateRoot(&argc, argv, "Xcluster", NULL,
- opTable, XjNumber(opTable));
-
- XjLoadFromResources(XjDisplay(root),
- XjWindow(root),
- programName,
- programClass,
- appResources,
- XjNumber(appResources),
- (caddr_t) &parms);
-
- if (parms.warp)
- XWarpPointer(XjDisplay(root), None, XjWindow(root), 0, 0, 0, 0, 0, 0);
-
- progname = programName;
-
- XjRegisterCallbacks(callbacks, XjNumber(callbacks));
-
- xclusterWindow = XjVaCreateJet("xclusterWindow",
- windowJetClass, root, NULL, NULL);
- xclusterForm = XjVaCreateJet("xclusterForm",
- formJetClass, xclusterWindow, NULL, NULL);
- label1 = XjVaCreateJet("label1", labelJetClass, xclusterForm, NULL, NULL);
- mapwin = XjVaCreateJet("mapwin", windowJetClass, xclusterForm, NULL, NULL);
- map = XjVaCreateJet("map", drawingJetClass, mapwin, NULL, NULL);
-
- qw = XjVaCreateJet("quit", windowJetClass, xclusterForm, NULL, NULL);
- qb = XjVaCreateJet("buttonQuit", buttonJetClass, qw, NULL, NULL);
- ql = XjVaCreateJet("quitLabel", labelJetClass, qb, NULL, NULL);
-
- hw = XjVaCreateJet("help", windowJetClass, xclusterForm, NULL, NULL);
- hb = XjVaCreateJet("buttonHelp", buttonJetClass, hw, NULL, NULL);
- hl = XjVaCreateJet("helpLabel", labelJetClass, hb, NULL, NULL);
-
- twin = XjVaCreateJet("twin", windowJetClass, xclusterForm, NULL, NULL);
- text = XjVaCreateJet("text", drawingJetClass, twin, NULL, NULL);
-
- strcpy(form,
- "label1: 0 1 100 - twin: 0 - 100 100 quit: - - 99 twin \
- help: - - quit twin mapwin: 1 label1 99 quit");
-
- read_clusters();
-
- if (parms.zoom == 1)
- compute_zoom();
-
- make_btns(xclusterForm);
-
- setForm(xclusterForm, form);
-
- XjRealizeJet(root);
- flash(NULL, NULL);
- reset_timer();
-
- if (parms.automatic != 0)
- set_auto(0, -1);
-
- init_color_cycle();
-
- XjEventLoop(root);
-}
diff --git a/xcluster.h b/xcluster.h
deleted file mode 100644
index 58fc178..0000000
--- a/xcluster.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Campus Cluster Monitering Program
- * John Welch and Chris Vanharen
- * MIT's Project Athena
- * Summer 1990
- */
-
-/*
- * This is the global include file.
- */
-
-#include <stdio.h> /* standard io routines */
-#include <stdlib.h>
-#include <string.h> /* strcpy, strcat, etc... */
-#include <X11/Xlib.h> /* basic X includes */
-#include <X11/Xutil.h> /* basic X includes */
-#include <Jets/Button.h>
-
-#define BUF_SIZE 1024
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-/* Cluster Structure */
-
-struct cluster
-{
- int cluster_number; /* For internal use... */
- char button_name[25]; /* Name to be shown on the button. */
- ButtonJet btn; /* Jet for the button. */
- char cluster_names[5][25]; /* Names of clusters in group, as in cmon. */
- char phone_num[5][15]; /* phone number of cluster. */
- int cluster_info[5][20]; /* Machine info for clusters in group. */
- int x_coord; /* Location on map. */
- int y_coord; /* ditto. */
- char prntr_name[10][15]; /* Names of printers in cluster group. */
- char prntr_current_status[10][15]; /* Stati of said printers. */
- char prntr_num_jobs[10][5]; /* Number of waiting jobs on said printers. */
- struct cluster *next; /* Pointer to next cluster */
-};
-
-
-/*
- * GLOBAL VARIABLES
- */
-extern char *progname; /* Slightly obvious . . . */
-extern struct cluster *cluster_list; /* Pointer to list of clusters */
-extern Display *display; /* Pointer to display structure. */
-extern int screen; /* Screen number. */
-extern Window window; /* Window we're creating. */
-extern struct cluster *Current; /* Current cluster being displayed. */