home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games Extra 1996 May / Amiga_Games_Extra_CD_5-96.bin / spiele / publicdomain / amsrv / doc / mudagent.txt < prev    next >
Text File  |  1996-02-19  |  23KB  |  492 lines

  1. AmigaMUD, Copyright 1996 by Chris Gray
  2.  
  3.  
  4.             The MUDAgent Program
  5.  
  6. The MUDAgent program is only needed on a host machine (one running
  7. MUDServ, the AmigaMUD server program) which wants to allow serial port
  8. connections to remote players. One running copy of MUDAgent is needed
  9. for each serial port connection. MUDAgent serves as a "protocol
  10. converter" in that it uses the AmigaMUD reliable protocol over the
  11. serial port and uses simple Amiga OS messages to and from MUDServ.
  12.  
  13. MUDAgent can be used in a number of ways:
  14.  
  15.     - by default, MUDAgent will open a serial port and wait for
  16.     connections on that port. Each connection is treated as a
  17.     request to play one AmigaMUD session. When the session is
  18.     over, MUDAgent will go back to waiting for a connection. If
  19.     MUDAgent is started from a shell in this mode, then it can
  20.     be shut down by sending a BREAK signal to its CLI number. If
  21.     it is started from the Workbench, then the AgentKill program
  22.     can be used to shut it down.
  23.  
  24.     - MUDAgent can be started up by another program which has already
  25.     established a connection and setup the serial port. In this
  26.     mode, MUDAgent will open the serial port for shared use, and
  27.     will exit after a single AmigaMUD session completes.
  28.  
  29.     - MUDAgent communicates with a remote copy of "MUD" using a
  30.     special protocol. This allows reliable handling of graphics
  31.     output, mouse input, function editing, etc. MUDAgent can work
  32.     with a simple remote terminal (or terminal emulator), however,
  33.     by operating in a text-only mode. This mode is detectable by
  34.     the scenario, so it can change its behaviour accordingly.
  35.  
  36. MUDAgent can be run from either the Workbench or from a shell command
  37. line. When started by another program (such as "Getty" or a BBS), it
  38. expects to be started as if from a shell command line.
  39.  
  40. MUDAgent requires a stack of at least 10000 bytes. It will exit right
  41. away if it detects an insufficient stack. The large stack is needed
  42. because of the possibility that, when running in text-only mode, a
  43. remote wizard may cause functions to be parsed using the recursive
  44. descent parser in "mud.library". See file "Programming.txt" for more
  45. information on this and other wizard-mode features.
  46.  
  47. MUDAgent supports Christopher Wichura's OwnDevUnit library. When not
  48. started with the '-Getty' flag, it will attempt to open that library
  49. and lock the serial port. It will wait indefinitely for that lock.
  50. Once it has the port locked, MUDAgent will accept a release request
  51. from OwnDevUnit.library, and will close and release the port. It will
  52. then request the port again, ready for when the other user releases
  53. it. If your system does not use OwnDevUnit.library, then this
  54. paragraph does not apply and can be ignored. Note that MUDAgent will
  55. not release the port if a MUD session is currently underway.
  56.  
  57.  
  58. Workbench ToolTypes Understood by MUDAgent
  59.  
  60. 'bool' values are those which can have one of two different values.
  61. The accepted values for a positive value are 'YES', 'Y', 'ON', 'TRUE',
  62. 'Y' and 'T'. Any other value is interpreted as a negative value. If
  63. no value is given it is interpreted as a positive value. Note that
  64. early versions of the AmigaOS will not accept empty values.
  65.  
  66.     DEVICE (string) - specifies the name of the serial device to open.
  67.     The default name is "serial.device", which refers to the
  68.     standard built-in serial port. Other names are used with
  69.     expansion serial ports. (Do not include the quotation marks.)
  70.  
  71.     UNIT (number) - specifies the number of the port within a given
  72.     serial device of the particular port to use. This defaults to
  73.     0, indicating the "first" port.
  74.  
  75.     BAUD (number) - specifies the connection speed to use. The default
  76.     value is whatever speed the serial port was last used at,
  77.     which is normally the preferences speed. A later section gives
  78.     more details on connection speed selection.
  79.  
  80.     SHARED (boolean) - under the Amiga OS, a serial port can be opened
  81.     in "shared" mode. This means that more than one program can
  82.     have the port open at the same time. This can lead to great
  83.     confusion unless the programs cooperate. MUDAgent assumes that
  84.     if SHARED is specified, the calling program will not try to
  85.     use the port until MUDAgent has exited. If SHARED is not
  86.     specified, MUDAgent cannot open the port if some other program
  87.     already has it open. The other program must also have the port
  88.     opened for shared use.
  89.  
  90.     XONXOFF (boolean) - this tooltype causes MUDAgent to open the
  91.     serial port with Xon/Xoff software flow control enabled. This
  92.     is only relevant for a text-only connection, since in a full
  93.     binary connection the flow control characters can be part of
  94.     messages and hence cannot be treated specially. By default,
  95.     MUDAgent will not enable this feature.
  96.  
  97.     IGNORECD (boolean) - this tooltype causes MUDAgent to setup the
  98.     serial port to ignore the CD (Carrier Detect) signal. By
  99.     default, MUDAgent will assume that if the signal is not
  100.     present there is no connection, and will terminate the
  101.     session. You will need to supply this flag if your modem is
  102.     not configured to supply the signal, or if your serial cable
  103.     does not properly transmit the signal. Also, when connecting
  104.     directly to another computer or to a terminal, without a modem
  105.     in between, no CD signal will be present, so this flag should
  106.     be given. By default, MUDAgent will respect the CD signal.
  107.  
  108.     7WIRE (boolean) - this tooltype tells MUDAgent to setup the serial
  109.     port using a 7-wire hardware flow-control system. Such a
  110.     system is recommended when using a high-speed connection,
  111.     since it allows either end of the serial cable to tell the
  112.     other end to temporarily stop transmitting. Compression and
  113.     error-recovery protocols on newer modems may require this type
  114.     of signalling. You should NOT specify this mode if your modem
  115.     is not configured to pay attention to it, or if your serial
  116.     cable does not transmit all of the required signals. By
  117.     default, MUDAgent will not enable 7-wire flow control.
  118.  
  119.     AT (boolean) - by default, MUDAgent will assume that there is a
  120.     "Hayes-compatible" modem on the serial port, and will send an
  121.     "AT\r" sequence to get it in synchronization. This can be
  122.     disabled using the AT tooltype.
  123.  
  124.     BINARY (boolean) - this tooltype forces MUDAgent to look for a
  125.     full binary connection (as opposed to a text-only connection)
  126.     on the serial port. It will not recognize a text-only
  127.     connection. Forcing the type of connection must be done when
  128.     MUDAgent is started up from another program, and can also be
  129.     done under other types of startup.
  130.  
  131.     TEXT (boolean) - this tooltype forces MUDAgent to only look for a
  132.     text-only connection on the serial port. It will not attempt
  133.     to make a full binary connection.
  134.  
  135.     PARITY={NONE|EVEN|ODD} - this tooltype can be used to specify the
  136.     parity of the serial connection. Parity other than 'NONE'
  137.     cannot be used for a binary connection. By default, MUDAgent
  138.     will use 'NONE' parity.
  139.  
  140.     RETRY (number) - this tooltype allows you to specify the number of
  141.     seconds that MUDAgent is to delay between its attempts to open
  142.     the serial port. This facility allows MUDAgent to be started
  143.     when the serial port is already in use, without using a
  144.     locking mechanism. The default value is 60 seconds.
  145.  
  146.     PROBE (number) - this tooltype specifies in seconds the delay
  147.     between probes of the opened serial device, looking for a
  148.     carrier detect signal (if IGNORECD is specified, the first
  149.     such probe will report a connection). The default value is 3
  150.     seconds.
  151.  
  152.     DISCONNECT (number) - this tooltype specifies in seconds the delay
  153.     between the ending of a session and when MUDAgent will close
  154.     the serial port (thus dropping the connection in most cases).
  155.     This delay allows characters to be flushed out, and prevents
  156.     possible disconnection noise for the given interval. The
  157.     default value is 3 seconds.
  158.  
  159.     TIMEOUT (number) - this tooltype specifies in seconds the
  160.     inactivity timeout value. If no characters are received on the
  161.     serial port for this period, MUDAgent will assume that the
  162.     other end has gone away, and will terminate the connection.
  163.     The default value is 15 * 60 seconds, or 15 minutes.
  164.  
  165.     RETRYLIMIT (number) - when operating in binary mode, line noise or
  166.     other errors can cause a message to be incorrectly received.
  167.     When this happens, the AmigaMUD protocol will try again to
  168.     send the same message, and will keep doing so until the
  169.     message is properly acknowledged by the receiving end, or
  170.     until this number of attempts have been made. In the latter
  171.     case, MUDAgent will assume that the other end has gone away,
  172.     and will terminate the session. The default value is 10.
  173.  
  174.     REQUESTLIMIT (number) - the number of AmigaMUD messages that go
  175.     back and forth between the server and the remote client is not
  176.     possible to predict, and the counts can vary widely between
  177.     the two directions. Because of this, MUDAgent may build up an
  178.     accumulation of unused messages. This accumulation should be
  179.     limited, to prevent unreasonably large amounts of memory from
  180.     being tied up. This tooltype specifies the number of such
  181.     messages that MUDAgent can keep around. The default is 10.
  182.  
  183.     TEST - by default, MUDAgent will look for an Amiga OS message port
  184.     called "MUD port" by which to contact MUDServ. If this
  185.     tooltype is given, then MUDAgent will use name "MUD test port"
  186.     instead. This is a handy way of having more than one AmigaMUD
  187.     running on a given Amiga.
  188.  
  189.     PORTNAME (string) - this tooltype is a more general form of the
  190.     TEST tooltype. It allows a specific Amiga OS message port name
  191.     to be given for the connection to MUDServ.
  192.  
  193.     FLAGS (number) - this flags value is passed through to the code in
  194.     "mud.library" when a text-only connection is made. In binary
  195.     connections, the flags are passed to the copy of the library
  196.     running on the remote machine by the "MUD" program. The flags
  197.     only affect wizards, and relate to some caching that can be
  198.     done by the library code. The value, which defaults to 0, is
  199.     the sum of the following two values:
  200.  
  201.         1 - cache procs
  202.         2 - cache symbols
  203.  
  204.     Both are of benefit only when a wizard will be doing a lot of
  205.     parsing of AmigaMUD code. They cut down on the number of
  206.     messages between MUDAgent and MUDServ when parsing code, at
  207.     the expense of increased memory usage.
  208.  
  209.     IGNORECTRLE (boolean) - MUDAgent normally responds to a ^E signal
  210.     by immediately terminating the connection. This is useful if
  211.     something hangs. Setting this tooltype will cause MUDAgent to
  212.     ignore the ^E signal. This should not be needed, but I am
  213.     leaving it in because of the problems encountered when I was
  214.     using ^F for this signal, instead of ^E.
  215.  
  216.  
  217. Command Line Arguments
  218.  
  219. If a command line argument does not have a leading '-', then it is
  220. parsed as a tooltype value, as described in the previous section. The
  221. first six command line flags described here are for use by the "Getty"
  222. program and for callouts by BBS's, etc. Most of the other flags are
  223. equivalent to a tooltype value. See those descriptions for more
  224. details.
  225.  
  226.     -Getty - this flag tells MUDAgent that the serial port is already
  227.     opened and set up. MUDAgent will open it in shared mode and
  228.     will not do any initialization on it. Also, it will not send
  229.     any "AT\r" sequence, and it will exit after one AmigaMUD
  230.     session.
  231.  
  232.     -DEVICE <name> - <name> is the name of the serial device to use.
  233.     The default name is "serial.device". Other names are used to
  234.     specify ports on expansion boards.
  235.  
  236.     -UNIT <unit> - <unit> is the number of the particular port on a
  237.     serial port device to use. The default is 0.
  238.  
  239.     -HLINK - this flag is equivalent to the IGNORECD=TRUE tooltype.
  240.  
  241.     -BAUD <speed> - <speed> is the speed of the connection. The
  242.     default is the preferences set speed, although this value is
  243.     not actually used when the "-Getty" flag is given.
  244.  
  245.     -USER <name> - this flag, given by newer versions of "Getty", is
  246.     ignored by MUDAgent.
  247.  
  248.     -d<name> - this is the normal flag for specifying the name of the
  249.     device to use for the serial connection. The default name is
  250.     "serial.device".
  251.  
  252.     -u<unit> - this is the normal flag for specifying the unit number
  253.     within a device of the port to use. The default is port 0.
  254.  
  255.     -b<speed> - this is the normal flag to use to specify the speed of
  256.     the connection.
  257.  
  258.     -s - this flag specifies that the port should be opened in shared
  259.     mode.
  260.  
  261.     -x - enable XON/XOFF flow control (only in text-only mode)
  262.  
  263.     -i - ignore CD (Carrier Detect)
  264.  
  265.     -7 - use 7-wire hardware flow control
  266.  
  267.     -a - do not send 'AT' sequence to force rate on modem
  268.  
  269.     -p{n|e|o} - set parity. Must be 'n' for binary connection. The
  270.     default is -pn (no parity).
  271.  
  272.     -t{r|p|d|t}<value> - set a timeout value:
  273.     -tr - retry delay between attempts to open serial port. (default
  274.         60 seconds)
  275.     -tp - probe delay between probes for a carrier after the port
  276.         is open (default 3 seconds)
  277.     -td - disconnect delay before device close. (default 3 secs)
  278.     -tt - inactivity timeout before disconnect. (default 15 * 60
  279.         or 15 minutes)
  280.  
  281.     -h - (hardwired) - this is an abbreviation for "-a -td1"
  282.  
  283.     -T - use "MUD test port" as the Amiga OS port name
  284.  
  285.     -P<name> - use <name> as the Amiga OS port name. The default name
  286.     is "MUD port".
  287.  
  288.     -f<value> - set flags value. The flags value, (default 0) is the
  289.     sum of:
  290.         1 - cache procs
  291.         2 - cache symbols
  292.     Non-zero values are only of use when a text-only connection is
  293.     made, and the remote user is a wizard who will be doing a lot
  294.     of parsing of AmigaMUD code. In that case, enabling these
  295.     caches can greatly reduce the message traffic between MUDAgent
  296.     and MUDServ, at the expense of increased memory usage by the
  297.     remote MUD program.
  298.  
  299.     -r<value> - the given value is the number of times MUDAgent will
  300.     attempt to send a given message over the serial port. Retries
  301.     are needed when line noise or lost data prevent a message from
  302.     reaching the receiver intact. If a given message cannot be
  303.     sent after this number of attempts, then MUDAgent will give up
  304.     on the connection and close it down. The default value is 10.
  305.     This is only relevant for binary connections.
  306.  
  307.     -R<value> - set free request limit (default 10)
  308.  
  309.     -N<name> - use <name> as the name of the character for the first
  310.     playing session, rather than prompting for a name. Note that
  311.     this option only makes sense for a text-only connection. On a
  312.     full binary connection, the corresponding flags can be given
  313.     on the remote MUD run.
  314.  
  315.     -W<word> - use <word> as the password for the first playing
  316.     session. If it is incorrect, it counts as the first attempt,
  317.     and only two attempts remain. This is normally used in
  318.     conjunction with -N, but can be used without it. This flag
  319.     also is only relevant for a text-only connection.
  320.  
  321.     -l<path> - do a bit of logging to <path>. Note that there is no
  322.     support for having multiple MUDAgent's logging to the same
  323.     file at the same time. This can be useful during initial
  324.     setup, if you are having trouble getting connections made, or
  325.     if they are going away for some reason.
  326.  
  327.     -E - ignore ^E
  328.  
  329. Line Speed and Mode Selection
  330.  
  331. When MUDAgent is started by another program which already has the
  332. serial port set up (the "-Getty" flag is given), then MUDAgent will
  333. not do any serial port initialization, and will not try to change the
  334. connection speed. Thus, the presence of "-Getty" makes BAUD, IGNORECD,
  335. 7WIRE, PARITY, RETRY, PROBE, DISCONNECT and XONXOFF meaningless. It
  336. also forces SHARED and AT=FALSE. TEXT, BINARY, RETRYLIMIT,
  337. REQUESTLIMIT and FLAGS are still meaningful. With this type of
  338. startup, the type of connection (TEXT or BINARY) must be specified.
  339.  
  340. The following paragraphs discuss speed and mode selection when
  341. MUDAgent is not started by another program.
  342.  
  343. In most cases, MUDAgent will be used with a high-speed modem, and the
  344. connection between the modem and MUDAgent will be at a fixed rate,
  345. such as 38400 bps, regardless of the actual modem connection speed.
  346. The modem converts between the fixed serial port speed and the varying
  347. data speed as required. The type of connection can either be forced
  348. using TEXT or BINARY, or can be chosen dynamically, based on the first
  349. valid characters received. If the first two characters are ASCII SYN
  350. characters, then a binary connection is assumed. If the character
  351. received is a carriage return, in either no parity or even parity,
  352. then a text-only connection with that parity is assumed.
  353.  
  354. Older, slower modems do not do this speed conversion, so the correct
  355. speed must be given explicitly, and must match the actual connection
  356. speed. If, however, a speed of 0 is specified, then MUDAgent will
  357. cycle through the 2400, 1200 and 300 bps speeds, looking for an ASCII
  358. SYN character or a carriage return.
  359.  
  360. If possible, an explicit TEXT or BINARY should be given, so that
  361. MUDAgent does not have to do the possibly unreliable autodetection of
  362. the mode.
  363.  
  364.  
  365. Text-Only Line Editing
  366.  
  367. When a text-only connection is in effect, MUDAgent keeps user input
  368. and asynchronous output on separate lines. It does this by holding
  369. back output lines if the user has typed a partial input line. If the
  370. number of held-back lines reaches 10, then MUDAgent will erase the
  371. partial input line and prompt, display all held-back output lines,
  372. then redisplay the prompt and partial input line. If any lines are
  373. held back when the line is ended or is fully erased, then the prompt
  374. is erased, the held-back lines are printed, and the prompt is
  375. redisplayed. The normal situation is that there is no partial input
  376. line, and just the prompt is displayed. In this case, when output
  377. lines arrive, the prompt is cleared, the output lines are immediately
  378. displayed, and then the prompt is redisplayed.
  379.  
  380. MUDAgent supports a small set of input-editing features when a text-
  381. only connection is in effect. The special characters handled are:
  382.  
  383.     - carriage return (\r) or newline (\n) - these characters signal
  384.     the end of the input line. The current input line is sent to
  385.     the server (or parsed if in wizard mode). If any output lines
  386.     are held back, they are then displayed. Finally, a new prompt
  387.     is displayed. Input lines are entered into an input history
  388.     buffer, from which they can be retrieved.
  389.  
  390.     - backspace (\b) - if there are any characters in the current
  391.     input line, then the rightmost one is erased (using a
  392.     backspace-space-backspace sequence). If this results in the
  393.     input line being empty, then any held-back lines are flushed.
  394.  
  395.     - control-W - this character causes MUDAgent to erase the previous
  396.     "word" of input, in the same way that the standard Amiga shell
  397.     does, or the MUD client does.
  398.  
  399.     - control-X, control-C or control-U - any of these characters will
  400.     empty the current input line, and, if needed, allow any held-
  401.     back output lines to be flushed.
  402.  
  403.     - control-R - this character causes MUDAgent to redraw the current
  404.     input line. This is useful if line noise has garbled the
  405.     display. A '^R' is displayed at the end of the input line, and
  406.     it is redrawn on the next line.
  407.  
  408.     - control-\ or control-D - these characters (the AmigaDOS and more
  409.     standard end-of-file characters) indicate an end-of-input to
  410.     MUDAgent. It will output a carriage-return/linefeed sequence
  411.     and then initiate termination of the current session.
  412.  
  413.     - control-P - this character retrieves the previous line of input
  414.     history. Any current input line is erased, and the previous
  415.     input line is redisplayed. Multiple control-P's can go back
  416.     further in the input history. Input lines retrieved from
  417.     history can be edited just like input lines typed by the user.
  418.     Lines retrieved and used unchanged from history are not re-
  419.     entered into the input history.
  420.  
  421.     - control-N - this character retrieves the next line of input
  422.     history, undoing the effect of a control-P. Sequences of
  423.     control-P's and control-N's can be used to view the entire
  424.     input history (limited to 1024 characters).
  425.  
  426. Other non-printable characters are simply discarded. When operating in
  427. 8N1 mode the full international character set is allowed through.
  428.  
  429.  
  430. Examples
  431.  
  432. If MUDAgent is run with all default settings, it will open the built-
  433. in serial port at whatever speed it is currently at, and wait for
  434. text-only or binary connections. It will only exit when a BREAK signal
  435. is sent to it (CLI startup) or the AgentKill program is run (Workbench
  436. startup).
  437.  
  438. If a BBS or Getty is running, and will be used to startup MUDAgent,
  439. then there will normally be BBS commands or Getty logins which will
  440. start it in the text-only and the full binary modes. I use Getty
  441. logins 'mudt' and 'mudb' for those purposes. Appropriate entries in
  442. the "Passwd" file are something like this:
  443.  
  444.     mudt,,207,1,(MUD-TEXT),AmigaMUD:,AmigaMUD:C/MUDAgent -7 text
  445.     mudb,,207,2,(MUD-BINARY),AmigaMUD:,AmigaMUD:C/MUDAgent -7 binary
  446.  
  447. This assumes that the system has a volume or assign named "AmigaMUD"
  448. and that a "C" directory in that location contains the various
  449. AmigaMUD programs. Equivalent commands for a BBS callout might be:
  450.  
  451.     AmigaMUD:C/MUDAgent -Getty -DEVICE $device -UNIT $unit text
  452.     AmigaMUD:C/MUDAgent -Getty -DEVICE $device -UNIT $unit binary
  453.  
  454. where '$device' is replaced by the name of the serial device the
  455. caller is on, and '$unit' is replaced by it's unit number. For the
  456. built-in port, a binary connection would then be:
  457.  
  458.     AmigaMUD:C/MUDAgent -Getty -DEVICE serial.device -UNIT 0 binary
  459.  
  460. If no BBS is being run, and Getty is not being used, then MUDAgent can
  461. be told to answer incoming calls at the current speed with:
  462.  
  463.     run AmigaMUD:C/MUDAgent
  464.  
  465. from a shell or by double-clicking on its icon with no tooltypes
  466. specified.
  467.  
  468. If an older, low-speed modem is used on device siosbx.device, unit 1,
  469. and auto-detection of line speed is desired, then the shell command:
  470.  
  471.     run AmigaMUD:C/MUDAgent -dsiosbx.device -u1 -b0
  472.  
  473. could be used. If the modem does not understand the "AT" commands,
  474. does not generate a proper carrier detect signal, but does properly do
  475. hardware handshaking, then the following set of icon tooltypes could
  476. be used for an appropriate Workbench startup:
  477.  
  478.     DEVICE=siosbx.device
  479.     UNIT=1
  480.     BAUD=0
  481.     AT=OFF
  482.     IGNORECD=TRUE
  483.     7WIRE=TRUE
  484.  
  485. Many other possibilities exist. Most users will not need to change the
  486. values of RETRY, PROBE, DISCONNECT, TIMEOUT, RETRYLIMIT, REQUESTLIMIT
  487. or PORT. Increasing RETRYLIMIT can help compensate for noisy binary
  488. connections, but the user will have to do the same with the MUD client
  489. program. If you have trouble with connections being dropped for no
  490. apparent reason, try using the -E flag or the IGNORECTRLE tooltype, or
  491. use the -l CLI flag and examine the logfile generated.
  492.