[28561] in Source-Commits

home help back first fref pref prev next nref lref last post

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. */

home help back first fref pref prev next nref lref last post