diff -uNr slforum.orig/ChangeLog slforum-0.6.0/ChangeLog
--- slforum.orig/ChangeLog	Sat May 22 18:39:38 1999
+++ slforum-0.6.0/ChangeLog	Thu May 27 01:21:01 1999
@@ -164,7 +164,7 @@
  *	buffer[0], then insert spaces. useful for pasting code
  *
  * 990417.0100 dschin:
- *	changed so that it  tab to the nearest columb mod TABWIDTH
+ *	changed so that it tabs to the nearest column mod TABWIDTH
  *	this also eliminated the tab-complete bug, i think.
  *
  * 990425.0100 dschin:
@@ -203,4 +203,9 @@
  *
  * 19990522.1800: Solaris port.  ln -s Makefile-solaris-2-6 Makefile;make
  *	to build it.
+ *
+ * 19990522.1800: Bumped version number to 1.6.0
+ *
+ * 19990527.0100 dschin: Improved the random command, looks more consistant with
+ *	the rest of the real commands. Integrated them into %help (jdmchat[user|cmd].[cc|h])
  */
diff -uNr slforum.orig/Makefile slforum-0.6.0/Makefile
--- slforum.orig/Makefile	Wed Dec 31 19:00:00 1969
+++ slforum-0.6.0/Makefile	Sat May 22 18:37:11 1999
@@ -0,0 +1,4 @@
+include Makefile-shared
+
+DEBUGLIBS += -lefence
+CPPFLAGS += -DSIGHANDLE_POSIX -DLINUX_UTMP
diff -uNr slforum.orig/jdmchatcmd.cc slforum-0.6.0/jdmchatcmd.cc
--- slforum.orig/jdmchatcmd.cc	Sat May 22 15:23:04 1999
+++ slforum-0.6.0/jdmchatcmd.cc	Thu May 27 01:22:33 1999
@@ -31,6 +31,41 @@
 
 #include "jdmchatcmd.h"
 
+// Random Command help
+// 19990527.0100 dschin
+// this array must correspond to the one in jdmchatuser
+const char *JDMChatCmd::rndCmdHelp[] = {
+  "Check if the coffee machine is empty\r\n",
+  "Appear to be speaking through a small, fuzzy creature\r\n",
+  "Look for us in your grocery section\r\n",
+  "Everything you say is Right\r\n",
+  "Everyone must speak in the form of a question\r\n",
+  "Lob grenades at other users\r\n",
+  "Challenge the logic of other users' statements\r\n",
+  "Declare other users obsolete\r\n",
+  "Exit the Forum, go outside and play, and come back\r\n",
+  "Check if you have mail, from a high treetop\r\n",
+  "List all users' reasons to be here, or null if none\r\n",
+  "Calculate the total weight of all occupants of the Forum\r\n",
+  "Check if you have a rubber mallet\r\n",
+  "Check if you've left syracuse, ny\r\n",
+  "Get really angry over something trivial\r\n",
+  "Add yet another new feature to Shadowlands Forum\r\n",
+  "Ask a random user if we're there yet or if dinner's ready\r\n",
+  "Invade Madagascar\r\n",
+  "Get farther %away\r\n",
+  "Terminate the target user (only death can use this)\r\n",
+  "Port of Java method thumbs.twiddle() into JDMChat\r\n",
+  "Type what I mean, not what I pressed\r\n",
+  "Talk like Al\r\n",
+  "Create the reality distortion field\r\n",
+  "Shower user with random grenades\r\n",
+  "Ports Shadowlands Forum to Windows\r\n"
+};
+
+
+
+
 int JDMChatCmd::c_who
   (JDMChatRoom *room, JDMChatUser *me, jdmparam *p1, jdmparam *p2) {
   room->ListUsers (me);
@@ -320,6 +355,8 @@
 }
 
 
+
+
 int JDMChatCmd::c_help
   (JDMChatRoom *room, JDMChatUser *me, jdmparam *p1, jdmparam *p2) {
   const char *parm, *desc;
@@ -337,16 +374,31 @@
     *c = '\0';
   }
   // valid command?
-  if (cmdname != NULL)
+  if (cmdname != NULL){
     me->getHelpText (cmdname, false, &parm, &desc);
-  else
+
+    // 19990527.0100 dschin
+    // If its a rndCmd, then do punchline description
+    if((parm==NULL)&&(desc==NULL)){
+      //      room->logprintf("%s\t%s\t%d\n",cmdname,me->rndCommands[me->rndCmdIndex],strlen(cmdname));
+      if (strncmp(cmdname,
+		  me->rndCommands[me->rndCmdIndex],
+		  strlen(cmdname))==0){
+	desc=rndCmdHelp[me->rndCmdIndex];
+	//	room->logprintf("Its a joke! %s\n",desc);
+	parm=NULL;
+      }
+    }
+  }
+  else 
     parm = desc = NULL;
+  
   if ((cmdname == NULL) || (desc == NULL)) {
     // print out general help message
     // 981008.1950: first, don't be rude if they type %help
     if ((cmdname != NULL) ||
 	((strlen(me->buffer) > 1)
-	&& (strncmp ((me->buffer)+1, "help", 4 ) != 0 )))
+	 && (strncmp ((me->buffer)+1, "help", 4 ) != 0 )))
       me->uWrite ("\r\nSorry, no such command.\r\n" );
     me->uWrite (me->commands);
     me->rndCommand();
@@ -515,7 +567,6 @@
 
 
 // Roll cmd by dschin@syr.edu
-// FIXME 
 /* Dice rolling- Dan Chin 19990124.0110 
  * Syntax: %roll <num-die> 
  * Comment out GUESTS_CAN_ROLL to disable guest rolling 
@@ -622,6 +673,11 @@
 #endif
   return 0;
 }
+
+
+
+
+
 
 
 
diff -uNr slforum.orig/jdmchatcmd.h slforum-0.6.0/jdmchatcmd.h
--- slforum.orig/jdmchatcmd.h	Sat May 22 01:39:35 1999
+++ slforum-0.6.0/jdmchatcmd.h	Thu May 27 01:21:46 1999
@@ -43,6 +43,8 @@
 	JDMChatCmd ();
 	~JDMChatCmd();
 
+	static const char *rndCmdHelp[];  /* 19990527.0100 dschin */
+
 	_decl_jdmcmd_(c_who);
 	_decl_jdmcmd_(c_exit);
 	_decl_jdmcmd_(c_away);
diff -uNr slforum.orig/jdmchatuser.cc slforum-0.6.0/jdmchatuser.cc
--- slforum.orig/jdmchatuser.cc	Sat May 22 18:21:48 1999
+++ slforum-0.6.0/jdmchatuser.cc	Thu May 27 01:20:30 1999
@@ -179,34 +179,41 @@
 
 
 
+/* 19990527.0100 dschin: removed the \r\n from the array, and moved the
+ * to jdmchatcmd.cc, in a similar array. Note that the items and their
+ * help message indices must be matched up.
+ * I chose to it this way so that no time is wasted searching through
+ * all the fake commands, and the real ones. Instead, the %help <joke>
+ * will jump directly to the correct element.
+ */
 const int JDMChatUser::NUM_RND_COMMANDS = 26;
 const char *JDMChatUser::rndCommands[] = {
-  "   %java   check if the coffee machine is empty\r\n",
-  "   %ewok   appear to be speaking through a small, fuzzy creature\r\n",
-  "   %asparagus  look for us in your grocery section\r\n",
-  "   %god    everything you say is Right\r\n",
-  "   %jeopardy  everyone must speak in the form of a question\r\n",
-  "   %scorch lob grenades at other users\r\n",
-  "   %spock  challenge the logic of other users' statements\r\n",
-  "   %cobol  declare other users obsolete\r\n",
-  "   %frisbee  exit the Forum, go outside and play, and come back\r\n",
-  "   %pine   check if you have mail, from a high treetop\r\n",
-  "   %why    list all users' reasons to be here, or null if none\r\n",
-  "   %weight calculate the total weight of all occupants of the Forum\r\n",
-  "   %carl   check if you have a rubber mallet\r\n",
-  "   %sunlight  check if you've left syracuse, ny\r\n",
-  "   %hissy  get really angry over something trivial\r\n",
-  "   %feature  add yet another new feature to Shadowlands Forum\r\n",
-  "   %bug    ask a random user if we're there yet or if dinner's ready\r\n",
-  "   %risk   invade Madagascar\r\n",
-  "   %remote  get farther %away\r\n",
-  "   %?      are you lost too?\r\n",
-  "   %kill   terminate the target user (only death can use this)\r\n"
-  "   %twiddlefingers    port of Java method thumbs.twiddle() into JDMChat\r\n"
-  "   %psychic  type what I mean, not what I pressed\r\n",
-  "   %thinggygahootzis  Talk like Al\r\n",
-  "   %stevejobs  Create the reality distortion field\r\n",
-  "   %wetpants  shower user with random grenades\r\n"
+  "java",
+  "ewok",
+  "asparagus",
+  "god",
+  "jeopardy",
+  "scorch",
+  "spock",
+  "cobol",
+  "frisbee",
+  "pine",
+  "why",
+  "weight",
+  "carl",
+  "sunlight",
+  "hissy",
+  "feature",
+  "bug",
+  "risk",
+  "remote",
+  "kill",
+  "twiddlefingers",
+  "psychic",
+  "thinggygahootzis",
+  "stevejobs",
+  "wetpants",
+  "crash"
 };
 
 
@@ -214,9 +221,16 @@
  *
  * jer 980701.1640
  */
+
+/* 19990527.0100 dschin: 
+ * changed r to jdmchatuser::rndCmdIndex for persistancy.
+ * Jer, change this fxn to the new one that doesn't fencepost */
 void JDMChatUser::rndCommand() {
-  int r = abs(rand() % NUM_RND_COMMANDS);
-  uWrite ( rndCommands[r] );
+  char tmp[80];
+  rndCmdIndex = abs(rand() % NUM_RND_COMMANDS);
+  sprintf(tmp,"   Fun:             %%%s\n",rndCommands[rndCmdIndex]);
+  room->logprintf("  rndCommand() index: %d \t %s\n",rndCmdIndex,rndCommands[rndCmdIndex]);  // DEBUG
+  uWrite ( tmp );
 }
 
 
diff -uNr slforum.orig/jdmchatuser.h slforum-0.6.0/jdmchatuser.h
--- slforum.orig/jdmchatuser.h	Sat May 22 15:20:35 1999
+++ slforum-0.6.0/jdmchatuser.h	Thu May 27 01:21:22 1999
@@ -272,6 +272,9 @@
 				 * ignoring public chat...
 				 * 19990215.1900 */
 
+	int rndCmdIndex;        /* Index of the random command we have.
+				 * 19990527.0100 dschin */
+	
         static const char *welcome;	
 	static const char *commands;
 	static const char *rndCommands[];  /* jer added 980701.1640 */
@@ -285,6 +288,7 @@
 	static const int HINT_AWAY = 16;  // you're marked as away...
 
 	static const jdm_cmd_desc usercmds[];
+
 };
 
 #endif	// __JDMCHATUSER_H
Binary files slforum.orig/slforum and slforum-0.6.0/slforum differ
diff -uNr slforum.orig/slforum-0.6.0-2.spec slforum-0.6.0/slforum-0.6.0-2.spec
--- slforum.orig/slforum-0.6.0-2.spec	Wed Dec 31 19:00:00 1969
+++ slforum-0.6.0/slforum-0.6.0-2.spec	Thu May 27 01:26:15 1999
@@ -0,0 +1,25 @@
+Summary: A resource-easy realtime forum
+Name: slforum
+Version: 0.6.0
+Release: 1
+Source0: slforum-0.6.0.tar.gz
+Copyright: GPL
+URL: http://www.shadowlands.org/forum
+Group: Networking/Daemons
+
+%description
+This is a daemon for a forum supporting  multiple users and guests, reachable via telnet.
+
+%prep
+%setup -n slforum
+%build
+ln -s Makefile-linux Makefile
+make
+
+%install
+install slforum /usr/local/sbin/in.slforumd
+install -d /tmp/.banners
+
+%files
+/usr/local/sbin/in.slforumd
+%doc ChangeLog INSTALL COPYING
\ No newline at end of file
