________  ________  ________
   2018-10-31                                   /        \/        \/    /   \
                                               /       __/         /_       _/
   A  little over a week ago I  was bored at  /        _/         /         /
work and dinking around on  SDF's  com and a  \_______/_\___/____/\___/____/_
new user  came in and couldn't quit, this is    /        \/        \/    /   \
not that uncommon  so  I chimed  in with the   /        _/         /_       _/
usual  "q to quit, h for help" and  off they  /-        /        _/         /
went. It got me  looking at  the help screen  \________/\________/\___/____/
though  and  while  it is  helpful (heh)  it
doesn't give you much  detail on what  does. It got me curious  about  all the
stuff  in com  that I've never really thought about so I set  out to explore a
bit  and see what  I could find out. Between the manpage,  the COM is not  IRC
tutorial and my own exploration I ended up with a pretty good set of notes and
felt  like  it'd be a  waste  not to share them  somewhere so  here,  for your
reading pleasure, is Cat's guide to commode.

   First a little background for people not familiar with it, commode or "com"
is one of those curious SDF programs that you can only access from  inside the
shell,  it's  a multi-user,  multi-room  real  time  chat  program  originally
developed in  1993 by SDF co-founder and  long-time  system administrator smj.
I'll let the manpage sum it up:

         "com is a TOPS-20ish TALK  (aka LINK) for UNIX. It basically links
      multiple TTYs together, though differently than in ITS or TOPS-20. It
      supports multiple  public/private rooms,  chat  logging and automated
      cleanup."

   Unlike IRC, com is  command driven, including  requiring a command to  talk
and  that can take a little getting  used  to.  By  default you're in "command
mode" and can issue commands with keypresses, the most common ones you'll need
are g to goto a room and space to enter talk mode and q to quit. When you type
com  at your  shell you're dropped  into the  lobby  and should see a  list of
rooms. You'd pick a room  you're interested in, hit g to send  a goto command,
type in the room name then hit enter. Once you're  in the room  press space to
send  a talk command type hello and hit  enter  to say  hello. If you want  to
quit, q to send a quit command.

   Let's go over  the process together, step by step,  after  entering com and
being put into the lobby you should see a screen similar to the following:


      COMMODE (c)1993 smj@sdf.lonestar.org - Version 25

      Type 'h' for Commands
      room-name   #    created      time  topic
      ------------------------------------------------------------------
      anonradio  13  25-Oct-18  23:05:53  DJ KUMATA
      lobby       0  26-Oct-18  15:24:43  SDF's Welcoming Room
      ------------------------------------------------------------------

      TIP: Use 's' to send a private message.
      TIP:  Press [RETURN] to Speak.

      [you are in 'lobby' among 1]


      you@sdf


      remote:


   You'll see version info at the top and then a room list. This should mostly
be pretty self-explanatory, the room-name is the room name, # is the number of
people in  the  room, created  and time  are the date and time  the  room  was
created  and topic is the  room topic. Below that you'll see a couple tips and
then a summary what room you're in, the  number of users  and a list of who is
in  the room.  Users appear in the list as user@host, in our example above you
are connected via SSH to sdf.org so appear as you@sdf.

   We're here to party with the aNONradio guys so let's join their room. Press
g to issue a  goto command,  once you press g you should see a prompt like the
below:


      :goto>


   All the commands follow this format except the talk command but we'll cover
that a little further down. Type in the room name then hit enter. If you enter
the name of a room that doesn't exist, you'll create and join a new room. When
you join  the  room you'll  see a similar screen as when we joined the  lobby,
showing  the number  of users and user names but  you might  also  see another
section for Topography. Topography is the room description.

   Now you're  here you can say hello! Press space to send a talk  command (or
"enter talk mode"), as noted above the prompt for this  command looks a little
different than the other commands, you'll see your username in square brackets
(ie.  [you]). Type your message  and  hit enter  to send  it  to the  room. By
default when you are in any command mode you won't see any updates to the room
until the  command is  sent, this can  be  changed using overstrike mode which
I'll go over a little later.

   When you send your message  it  should  appear prefixed with  your  name in
square brackets, like  the command was. Other  common formats you'll see in  a
room are:


      <user a message here>     This is an emote,  basically just a message
                                in the third person,  the equivalent of /me
                                on IRC.

      *user@domain* a message   This  is  a private message, a message sent
                                just to you that only you can see.


   You'll also see user joins/parts/quits listed as:


      [00:00:00] user@host has joined/left (room details)


   Pretty self-explanatory, it indicates a user has joined the room, left  the
room  for another room or quit com. These  are  time  stamped  with  the hour,
minutes, seconds in UTC.

   And every 15 minutes or so you'll see a UTC time stamp in the format:


      [dd-MMM-yy HH:mm:ss]


   In the anonradio room exclusively you'll also  see regular timestamped now-
playing messages from the aNONradio stream, timestamped and prefixed with the
current number of listeners and peak listeners for the current show.

   When  you've  had enough of  the chat,  press q to send a quit  command and
you'll drop back to your shell prompt.

   That's the basics! Dead simple, right?

   There's one other essential command you'll need; h for help. This brings up
a list  of most of the  commode  key commands  but the  descriptions are a bit
brief  and not all keys are listed so I've  dutifully gone through and pressed
every key to see what it does. I've broken it up into lowercase, uppercase and
punctuation but this is still going to be a pretty long  list so bear with me.
Unless I've genuinely missed it by accident you can assume any key not in  the
list is a talk command but if I have made any mistakes please let me know!


   Lowercase Commands

   Key   Action               Description
   ------------------------------------------------------------------------
   a     Answer a send        Replies to the most  recent private  message,
                              if there's no message  to reply to you'll see
                              "% no one to answer".

   b     Boss mode            Changes  the  screen  to  what  looks like  a
                              prompt  so  it looks like  you're  not up  to
                              anything nefarious. You can type anything you
                              like but it does  nothing AFAICT, enter  puts
                              you  back  in  command mode  with  a  cleared
                              screen.

   c     Clear                Clears the screen.

   d     Dump out of com      Sends you  an email  with the full  buffer of
                              the room, excluding any direct messages.

   e     Emote                Sends a message  to  the room  in  the  third
                              person.

   f     Finger               Returns Finger data for a user.

   g     Goto a room          Go to/join a commode room.

   h     Help                 Displays most of the commands for commode.

   i     Ignore a user        Ignores a user  by name, their messages won't
                              appear when they send them but you will still
                              seem them if you r/R a room  history. Returns
                              a list of ignored users if  you have any then
                              prompts for a user to ignore,  enter a user's
                              name  to ignore them or enter the name of  an
                              ignored user to unignore them.

   k     Kick a user          Kick  a  user  from  a  room.  This  requires
                              approval from  another ARPA or  higher  level
                              user.  From  the  prompt enter "user@host" to
                              kick a user or "approve"  to  approve a  kick
                              request,  you  can't approve a  kick yourself
                              even if you are on different hosts.

   l     List rooms           Returns a list of rooms, the number of users,
                              the date and time created and the room topic.

   m     Mute user toggle     Mutes  a  user  in a  room. Requires approval
                              from a second  party, in the same  way  kicks
                              are approved and in-line with kicks you can't
                              approve  your  own  mute  requests,  even  if
                              you're on multiple hosts.

   n     Play Netris          Starts a game of Netris, enter "user@host" to
                              play against  another  player, "practice"  to
                              play single player. This isn't  made for com,
                              it's  just running  Netris from  inside  com.
                              More  info on Netris  itself can be found  by
                              entering  man netris or netris -h  from  your
                              shell.  After a game it'll drop you back into
                              com  in command mode.  It'll announce  in the
                              current room  when you leave  to play  Netris
                              and return from playing.

   o     Toggle overstrike    Allows messages to be  received  while you're
                              in talk or emote mode,  the screen  can get a
                              bit  messy  when  you're  typing a message in
                              this mode.

   p     Peek into room       Prints the buffer of another room, like the r
                              command it  shows the 18 most recent lines by
                              default but you can enter the number of lines
                              if you want to see more or less.

   q     Quit commode         Does  what it  says  on the  tin;  quits.  If
                              EXITMODE is  true  in  your .comrc you'll  be
                              prompted for a  quit message. I'll cover  the
                              .comrc stuff later in this document.

   r     Room history         Prints  the  most recent 18  lines  from  the
                              buffer of the room you're in.

   s     Send private         Sends a private message to  a user. Asks  for
                              to which is "user@domain", if you press enter
                              eithout entering a user it'll give you a list
                              of  users  in  the  room  and  exit.  Enter a
                              message  and enter  and it  sends  a  private
                              message to  the  user.  If  the  user  you're
                              trying  to  message is  in  a  different room
                              you'll need to provide a room name and if the
                              user isn't  in that room it'll  just return a
                              list of the users that are and then exit back
                              to command  mode. If PRIVHIST is true in your
                              .comrc  you can see a log of private messages
                              by entering "history"  as the recipient after
                              pressing s.

   t     Set topic            Sets the room  topic, topic can be cleared by
                              entering an empty topic.

   u     Lookup user URL      Displays  user URL,  I'm pretty sure this  is
                              grabbing the  URL  from  a  users profile  in
                              profiles but could be wrong.

   w     Who is in the room   Prints a list  of users  in the room and  the
                              room's topography.

   x     Play Dopewars        Starts dopewars, when  you quit it drops  you
                              back  to command mode. I won't go into detail
                              on how to play dopewars because I don't know!
                              You can find more by entering man dopewars in
                              your  SDF   shell.  Like  Netris,  this  will
                              announce in the room when  you leave  to play
                              the game and when you return.

   z     Toggle color mode    Turns colors on or off! Simple.


   Uppercase Commands

   Key   Action               Description
   ------------------------------------------------------------------------
   A     Toggle AFK           Marks  you  as AFK or returns  from  AFK, AFK
                              users  show as "afk" when checking  user idle
                              query.  Sending a  message  to  a  room  also
                              returns you from AFK.

   B     Hunt the Barnacle    Lets  you hunt another user or a bot,  I need
                              to   spend   more  time   with  this.   "hunt
                              <user@host>"  at the  prompt  to hunt another
                              user in the Caves of Dankness, "play" to play
                              a  single  user game, "scores" to  view  high
                              score  list (scores apparently does  nothing,
                              at  least  when  launched  from  com?).  Like
                              Netris this  is  just  launching a game  from
                              com, it's  not in com  itself, although  this
                              one was made  by smj! Like the other games it
                              anounces in the room  when you leave  to play
                              and when  you return. Prints scores  when you
                              win, lose or  quit then dumps you back to com
                              in command mode.

   C     Play comchess        Literally  play  chess  against  another user
                              using  standard algebraic notation,  I didn't
                              have  time  to  explore it much  but it looks
                              like it's  still  a  work  in progress with a
                              number  of  commands  not  yet   implemented.
                              There's quite  a  few commands so  I won't go
                              into them here  but comchess  from your shell
                              will give you a rundown.

   D     Dump into com        Lets you dump  multi-line text into a commode
                              room. Enter your text and press CTRL-D to end
                              input and dump into the room. Users  will see
                              that you've dumped  into the room  but  won't
                              see what you've  dumped unless  they view the
                              buffer with r/R or p.

   E     Toggle echo          When echo mode is enabled and you enter  talk
                              mode you see your name and the message echoed
                              locally  as you type it,  with echo  disabled
                              you  won't see anything when you  enter  talk
                              mode  until  you  hit  enter  to   send  your
                              message.  Looks  like  it only  effects  talk
                              mode, emote mode still appears even with echo
                              disabled.

   F     Flush commode        Flushes  the  buffer   of  a   commode  room,
                              requires approval from another ARPA or higher
                              level user to do so. From the prompt  "flush"
                              to request a flush or "approve" to  approve a
                              requested flush. You can't  approve your  own
                              flush, even if you're logged  in on  multiple
                              domains.

   G     Character Stats      Prints or generates RPG  stats. For what I do
                              not know, hahaha.

   H     Play Hunt            Starts a game of Hunt, a  multi-player multi-
                              terminal game.  Once you quit  it  dumps  you
                              back  into  com  in command  mode. "man hunt"
                              from your terminal should give you  more info
                              on the game itself.

   I     User idle query      Returns a list  of all commode  users, sorted
                              by  idle time, showing the  room  they're in,
                              what  host  they're  on,  their idle time and
                              their AFK status.

   L     Post a link          Post a link  to  the  room and to  SDF's  URL
                              Russian  Roulette. "Link" is the URL to link,
                              including  http:// or whatever,  "title" is a
                              name/description for  the  link. Will need to
                              dive deeper into the URL Roulette  sometime I
                              think, I don't know too much about it.

   M     Play Mazewar         Presumably plays a  maze game, when I try and
                              use it from  com  I get a maze on  screen and
                              then the error:  "MAZE_DAEMON_PIPE  cannot be
                              opened". That could be my issue though  and I
                              haven't tried  it from the shell. Even though
                              it crashes it still announces  when you leave
                              to play and when you return.

   N     Netris statistics    Retrieve statistics on Netris games. "record"
                              returns  the current  record match,  "scores"
                              returns  the  top  20  user  scores  for  the
                              quarter, "scores all" returns  all scores for
                              the  quarter, "scores  qtr-year" returns  the
                              scores for a specific  quarter  and  entering
                              "stats <user@host>"  will  return  a specific
                              user's statistics.

   O     ???                  Appears to do nothing but doesn't enter  talk
                              mode like the other unused keys do?

   P     Set room password    Locks the room  with a  password. Entering  a
                              blank password will clear it.

   Q     Call a quorum        This   has  been   disabled   or  was   never
                              implemented, it's a mystery what it  used  to
                              do. I guess it  was  part of  some  community
                              voting processes.

   R     Extended history     Prints  the  x  most  recent  lines from  the
                              buffer of the room you're in.

   S     Summon a user        Summons a  user to a  room, if the user isn't
                              on  com  to  be  summoned it sends  an  email
                              informing them their presence is requested.

   T     Set room topography  Add  a  multi-line  description  of  a  room,
                              CTRL-D  to  end,  topography  can be up to 10
                              lines,  I'm  not sure how to remove a  room's
                              topography.

   U     Lookup user info     Shows a user's  created,  validated, ARPA and
                              MetaARPA dates.

   W     Who is in a room     Shows you a list of who's in another room

   X     Show your status     Shows  your  current  status/settings:   your
                              name, host and the room you're in, as well as
                              AFK  mode,  biff   mode,  backspace  setting,
                              classic setting, echo mode, joined time, lame
                              mode,  overstrike mode, quiet mode, ROTM mode
                              and timezone. I'm not sure what ROTM mode is,
                              likewise lame mode  and biff mode but they'll
                              come up again later.

   Y     Yank into room       "Nah, you don't really feel like it."

   Z     Zap out of room      "Nah, you don't really feel like it."


   Punctuation Commands

   Key   Action               Description
   ------------------------------------------------------------------------
   -     Toggle backspace     Toggles backspace  between ^H  and ^?,  ^? is
                              the default I think.

   <     Surf rooms backward  Goto the next room in the list

   >     Surf rooms forward   Goto the previous room in the list

   !     Lame mode            Toggles biffster on and off. Interestingly in
                              the docs for .comrc  biffster  mode and  lame
                              mode  are  different  things,  lame  mode  is
                              described as "figlet mode", also showing your
                              status has a seperate  line for  lame mode. I
                              don't know what a biffster is.

   =     Show playlist        No  idea  what this  is  suppoesd to  do  and
                              doesn't give  you  any  feedback on  what  it
                              should be doing.

   spc   Begin talk mode      Lets you type a message to the room.

   :     (nothing)            Returns "Type '?' for commands"

   /     (nothing)            Returns same help output as h

   ?     (nothing)            Returns same help output as h


   Phew! Ok, one  last thing to cover is  your .comrc config file. This can be
manually created and configured by  a user to set  modes and a default room to
join  on  launch,  but it  isn't  required. The syntax  is  a  straightforward
VARIABLE=VALUE. Now in the interest of full  disclosure I haven't tested these
extensively so there might be some holes but here's the settings:


   .comrc Settings

   Setting                Description
   ---------------------------------------------------------------------
   CLASSIC=TRUE/FALSE     Original  "blind" commode, disables  echo  and
                          enables overstrike modes by default.

   AFK=TRUE/FALSE         AFK enabled by default.

   AFKBEEP=TRUE/FALSE     Sets AFK mode for COMBEEP mode below.

   BKSP=TRUE/FALSE        Sets default backspace char.

   COMBEEP=TRUE/FALSE     Enables/disables   "beep"   feature   for  all
                          output.

   ROOMNAME=string        Join  a  room when  starting  com (default  is
                          lobby).

   EMPTYROOM=TRUE/FALSE   Includes empty  rooms  when you use l  to list
                          rooms.

   QUIETMODE=TRUE/FALSE   No version or room list when starting commode.

   BIFFMODE=TRUE/FALSE    Enable/disable biffster mode  by default. What
                          is biffster mode? I do not know.

   EXITMODE=TRUE/FALSE    When this is enabled you'll be prompted for  a
                          message when leaving a room or quitting com.

   LAMEMODE=TRUE/FALSE    Enables or disables lame mode by default but I
                          don't  know  what  lame mode  is,  the manpage
                          describes  it  as  "Figlet  mode".  I've tried
                          joining com with this enabled and it seemed to
                          do nothing.

   PRIVHIST=TRUE/FALSE    Enable logging  of private  messages,  you can
                          view  them  by  viewed  by  sending  a private
                          message  to  history   (ie.  "s  history")  as
                          mentioned in the commands above.

   TYPING=TRUE/FALSE      IM  style  "is  now  typing" messages  display
                          whenever  you  enter a message  command,  they
                          appear in  the chat just like any other  emote
                          message.

   NETRISTAUNT=string     A taunt to display after a Netris match, up to
                          60 characters.


   And there  we go, now you know as much as I do, which is to say not a whole
lot.  If you've  made it all  the way through  this  document; thank  you  for
reading and please reach out if you can school me on anything I missed or just
got wrong, the more gaps filled the better!

   Finally, let me present  this piece of SDF lore  dumped  into  com by smj a
little while back.  The  SDF COMMODE  song,  written  in September  1991 using
iczer's speech synthesizer, AKA GORDON NODROG:

      I'M A DAMGUD CYBER CHATTER
      AND I LIKE TO GO ONLINE
      I'M A DAMGUD CYBER CHATTER
      I'M ONLINE ALL THE TIME

      WHEN I GO INTO THE ROOM
      EVERYBODY LEAVES
      COS I'M A DAMGUD CYBER CHATTER
      AND I NEVER AIM TO PLEASE

      WHEN I ASK FOR THE WAREZ
      I SAY IT LIKE JUAREZ
      COS I'M A DAMGUD CYBER CHATTER
      AND I'LL KEEP ASK FOR YOUR WAREZ

      I'M A DAMGUD CYBER CHATTER
      AND I LIKE TO GO ONLINE
      I'M A DAMGUD CYBER CHATTER
      AND I HOPE YOU LIKE MY RHYME


   I'll see y'all on com!



EOF