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

  1. AmigaMUD, Copyright 1996 by Chris Gray
  2.  
  3.  
  4.             The 'MUDServ' Program
  5.  
  6. MUDServ is the AmigaMUD server program. It is the largest and most
  7. complex part of the system, but it is quite easy to use. MUDServ runs
  8. all of the AmigaMUD scenario code, maintains the database files,
  9. responds to client requests, provides all of the builtin functions
  10. that can be used, provides for interaction between clients, runs the
  11. "machines", etc. A system is hosting an AmigaMUD if and only if it is
  12. running MUDServ. A system will normally only run one copy of AmigaMUD
  13. at a time, but it is possible to run more for testing purposes. This
  14. can be handy for having a production MUD as well as a development one.
  15.  
  16. MUDServ expects the MUD database files to be present in the directory
  17. which it is run from, or in a directory specified in a tooltype or
  18. command line parameter. These are:
  19.  
  20.     MUD.data - the raw data of the scenario. This includes the data
  21.     for characters, rooms, objects, monsters, etc. as well as the
  22.     AmigaMUD code that governs them. The system should be able to
  23.     support an arbitrary sized file, but so far, the standard
  24.     scenario (30,000 lines of source yielding hundreds of
  25.     locations, dozens of commands and objects, etc.) has not grown
  26.     much over 500K bytes.
  27.  
  28.     MUD.index - this is an index into MUD.data which allows mapping
  29.     from a unique constant identifier for something onto a
  30.     perhaps changing position in the MUD.data file.
  31.  
  32. MUDServ will also create and write a 'MUD.log' file. This file can be
  33. deleted at will, but most people running servers will want to scan
  34. through it before deleting it. It often contains some interesting
  35. information. Also, there are commands in the standard scenario, such
  36. as 'bug', 'gripe' and 'typo' which let players put short complaints
  37. about things into the MUD.log file.
  38.  
  39. Valid database files are either copied from another source or are
  40. produced by the 'MUDCre' program and expanded via MUDServ. The files
  41. are in a binary format, and are not intended to be read by humans.
  42. Mess around editing them at your own risk. MUDServ assumes they are
  43. valid - it may crash your system if they are not, just like an invalid
  44. program might.
  45.  
  46. MUDServ requires a stack size of 25000 bytes in order to run. It will
  47. exit right away if the stack is not at least that large. If running
  48. from a shell, you can use the 'Stack' command (perhaps from a shell-
  49. startup file) to set it. If running from the Workbench, you can use
  50. the "Icons"/"Information" menu item to set it.
  51.  
  52.  
  53. Warning
  54.  
  55. MUDServ maintains an in-memory cache of the most recently used
  56. database items. When items are changed, as a result of player actions,
  57. machine actions or timed events, the changes are NOT immediately
  58. written out to the on-disk copy of the database. This behavior is
  59. required in order to get reasonable performance from the system
  60. without having continual disk I/O even on a fast hard drive. Without
  61. this, the system would be completely unusable on a floppy-based
  62. system. Because of this behavior, you must not simply shut off or
  63. reboot the host machine when you are through playing. You must
  64. properly flush the database and shut the server down. This can be done
  65. using the MUDShut program or a BREAK to the MUDServ process, as
  66. described later. If you wish to automate backups of the AmigaMUD
  67. database, the '-w' CLI option to MUDShut is useful. With this flag
  68. set, MUDShut will send a different type of request to MUDServ, and
  69. MUDServ will not reply until it has fully shut down. Thus, the MUDShut
  70. command will not return until the database has been fully written out
  71. and the files closed.
  72.  
  73. The standard scenario included with AmigaMUD contains a SysAdmin-only
  74. command, "backup", which can be used to make automatic periodic (or
  75. one-shot) backups of the database. It will atomically flush the
  76. database and copy the database files to a "backup" directory within
  77. the directory containing the original database files. The scenario
  78. also contains code to recover from inconsistent situations created by
  79. running from such a backup, when the backup is taken while some
  80. characters, etc. are in non-normal states (such as entering a letter).
  81. This backup facility is strongly recommended.
  82.  
  83.  
  84. Workbench Tool Types
  85.  
  86. When MUDServ is started from the Workbench, it accepts several tool-
  87. types in its icon. Some of these are boolean (true/false) values. For
  88. these, any of YES/yes/TRUE/true/Y/y/T/t or an empty value, are
  89. accepted as true, and any other value is accepted as false. Note that
  90. on early versions of the AmigaOS, empty values are not valid. The
  91. following Workbench tooltypes are accepted by MUDServ when it is
  92. started from the Workbench:
  93.  
  94.     PATH=<path> - specify a path to the directory in which the
  95.     AmigaMUD database files exist. The default is the directory
  96.     from which MUDServ is run.
  97.  
  98.     PORTNAME=<name> - specify the name of the Amiga OS Exec port name
  99.     that MUDServ is to create and export. This is the port by
  100.     which all clients connect to the server. The default name is
  101.     "MUD port".
  102.  
  103.     TEST - useful for running a test AmigaMUD while a production one
  104.     is running. Sets the port name to "MUD test port".
  105.  
  106.     WIZARD - any connections by "SysAdmin" (the AmigaMUD system
  107.     administrator character) will be forced into "wizard" mode.
  108.     This is useful if SysAdmin messes up and gets into a state
  109.     where he can't otherwise get into wizard mode. This can happen
  110.     if an invalid input handler is installed, or if SysAdmin ends
  111.     up in an invalid room.
  112.  
  113.     QUIET - by default, MUDServ will open a console window and display
  114.     occasional messages in that window, to allow interested MUD
  115.     administrators to see what is happening. Specifying QUIET
  116.     prevents the use of that window. The default state is to use
  117.     the window, so that first-time users of AmigaMUD can get
  118.     positive feedback that things are working.
  119.  
  120.     NORETRY - in some situations, such as not being able to allocate
  121.     memory, the server cannot proceed normally. It will then put
  122.     up a requester indicating the problem, and asking the user if
  123.     it should try again. If the user can do something that can
  124.     possibly fix the problem (such as shutting down other programs
  125.     to free up memory), then they should do so, and answer in the
  126.     affirmative. The server will then try again. If the user
  127.     answers in the negative, then MUDServ will abort. Setting the
  128.     NORETRY tooltype tells the server to abort immediately,
  129.     without looking for help from the user.
  130.  
  131.     CACHE=<n> - specifies the size of the in-memory database cache.
  132.     This cache holds the most recently accessed or written parts
  133.     of the database in memory, so that they can be accessed more
  134.     quickly. Larger cache sizes reduce the amount of disk I/O
  135.     needed during operation. The minimum cache size is 32768
  136.     bytes. The default cache size is 50000 bytes. I find a cache
  137.     size of 500000 bytes to be quite adequate. Note that the cache
  138.     must be available as a single contiguous region. The largest
  139.     region a system has available is indicated by the 'Avail'
  140.     shell command. Other needs may prevent the use of a cache that
  141.     large, however. One disadvantage of a large cache is that it
  142.     takes a while to flush it to disk, so players would notice a
  143.     few seconds of non-responsiveness whenever it had to be
  144.     flushed out.
  145.  
  146.     MEMORY=<n> - specifies the amount of memory that the server should
  147.     try to limit itself to. This does not include the cache, cache
  148.     index data structures, the in-memory copy of the MUD.index
  149.     file, or messages allocated to send to clients. It does
  150.     include memory for AmigaMUD functions, in-memory copies of
  151.     symbol tables and grammars, client structures, machine
  152.     structures, a write-back use-count cache, etc. The value given
  153.     is not a hard limit - the server will try to keep under it,
  154.     but will often exceed it. Providing a small memory limit will
  155.     require more database accesses, putting more stress on the
  156.     database cache, and requiring more disk I/O operations. The
  157.     default limit is 1000000000 bytes, which is effectively no
  158.     limit.
  159.  
  160.     REQUEST=<n> - specifies a limit on the number of requests
  161.     (messages) that the server should observe. Requests are
  162.     AmigaMUD messages between the server and the clients. When it
  163.     needs to send a message, the server will try to get one from
  164.     its pool of free ones. If the pool is empty, then it will
  165.     allocate one from the system. When it receives a message that
  166.     does not need a reply, the server adds the message to its pool
  167.     of free messages. If that pool contains more than the given
  168.     number of messages, it will free the new one back to the
  169.     system. The expense of having a small limit is one of CPU time
  170.     and not disk I/O. The default limit is 100.
  171.  
  172.     IGNORECTRLE - Normally, MUDServ can be interrupted from an
  173.     infinite CPU loop (typically caused by running with a too-
  174.     large "RunLimit" value) by sending a 'break e' signal to it.
  175.     Specifying this tooltype tells MUDServ to ignore the signal.
  176.     This shouldn't be needed, but I am leaving it in in case of
  177.     troubles similar to those encountered when I was using the
  178.     'break f' signal for this purpose.
  179.  
  180.  
  181. Command Line Flags
  182.  
  183. When MUDServ is started from a shell, the following flags can be
  184. given (see the above section for more detailed descriptions):
  185.  
  186.     -T - use "MUD test port" as the Amiga OS message port name
  187.  
  188.     -W - force SysAdmin to enter in wizard mode
  189.  
  190.     -Q - do not open and use the message window
  191.  
  192.     -N - do not retry in abort situations
  193.  
  194.     -P<name> - use <name> as the Amiga OS message port name
  195.  
  196.     -c<n> - use <n> as the database cache size
  197.  
  198.     -m<n> - use <n> as the maximum memory usage target
  199.  
  200.     -r<n> - use <n> as the free request limit
  201.  
  202.     -E - ignore 'break e' signals
  203.  
  204.     -M - do not activate any machines on startup, and do not let
  205.     any machines operate by themselves. This is useful when
  206.     some machine or machines have gotten out of hand, for example
  207.     when running the "wanderers" on a system that just isn't
  208.     fast enough to handle them.
  209.  
  210. If a parameter without a leading '-' is given, then it is taken as a
  211. path to where the database files can be found.
  212.  
  213.  
  214. Shutting MUDServ Down
  215.  
  216. MUDServ uses write-back caching for the database. This means that
  217. changes made to the database are not immediately written to disk.
  218. Instead, the changes are kept in the in-memory cache, and only written
  219. to disk when that cache is "flushed". This flushing is done on
  220. shutdown, in response to running the 'MUDFlush' program, in response
  221. to calling the 'Flush' builtin, or whenever the database code cannot
  222. find a large enough slot for a new value. Because of this, the on-disk
  223. copy of the database is not accurate and consistent except immediately
  224. after a flush of the in-memory cache. This means that you cannot
  225. safely shut down MUDServ by simply rebooting or turning off your
  226. Amiga. Doing so will leave you with a scrambled database.
  227.  
  228. Using write-through caching, where all changes are written to disk
  229. immediately, would be hopelessly slow - almost everything done in
  230. AmigaMUD changes the database, often in several ways. For example, a
  231. character walking from one room to another changes the record of which
  232. room the character is in. This is also true for 'machines', such as
  233. the randomly generated monsters in the standard scenario.
  234.  
  235. There are three safe ways to shut down MUDServ. In all of these ways,
  236. it will not actually shut down until all clients have disconnected. It
  237. will, however, remember that it is supposed to shut down and do so as
  238. soon as it can. The program 'MUDShut' sends a special message to
  239. MUDServ, requesting that it shutdown. Running MUDShut multiple times
  240. will not speed the process up. When the special privileged character
  241. SysAdmin is connected and in "wizard" mode (working directly with the
  242. AmigaMUD programming language, rather than playing the scenario), he
  243. can enter a line reading "ShutDown(true).". This line is a call to the
  244. 'ShutDown' builtin function, and tells the server that it should shut
  245. down as soon as possible. Of course, it cannot do so until SysAdmin
  246. logs out. A line reading "ShutDown(false)." will cancel all previous
  247. requests to shut down. If MUDServ is started from a shell, it will
  248. have a CLI Process number. Sending a standard BREAK signal (using the
  249. 'Break' command) to that process will tell MUDServ to shut down. If
  250. the MUDShut program is run from a shell, it can be given the '-w'
  251. flag, which will cause it to use a special request to MUDServ, such
  252. that MUDShut will not exit until the server has written out and closed
  253. all of the database files. This can be used to allow automatic
  254. backups.
  255.  
  256. It is possible for MUDServ to get into an inconsistent state where it
  257. cannot respond to a normal shutdown request. This could be, for
  258. example, when stuck in an infinite loop in AmigaMUD code, when
  259. SysAdmin has put in an extremely large execution time limit. In this
  260. situation, sending a 'BREAK E' signal to the MUDServ process will
  261. cause it to stop its current AmigaMUD code execution and return to its
  262. top level activity loop. Two such signals will cause it to abort
  263. immediately. Do not do this unless you really need to. If you do so,
  264. you will have to restore your database from a backup copy, and you may
  265. want to reboot your Amiga to recover memory that MUDServ was not able
  266. to free when it aborted. This facility can be disabled with the '-E'
  267. command-line flag, or the "IGNORECTRLE" tooltype, in case there is
  268. something in your system generating the signal when it isn't wanted.
  269.  
  270.  
  271. Remote Connections
  272.  
  273. Also part of hosting AmigaMUD are possible copies of the MUDAgent
  274. program running on the host machine. These copies will run without the
  275. server being active if they are waiting for incoming calls, so they
  276. don't normally have to be shut down. If they are started from a shell,
  277. they can be shut down by doing a 'BREAK' on their process number. If
  278. they are started from the Workbench, they can be shut down by running
  279. the 'AgentKill' program, which will find their tasks and set the BREAK
  280. signal on them.
  281.  
  282. Often, the MUDAgent copies are started on demand by some other
  283. program, such as a BBS or 'Getty'. In that situation, they exist only
  284. for the duration of one session, so there is nothing to shut down.
  285.  
  286.  
  287. A Few Basic Wizarding Procedures
  288.  
  289. Repeated here for those who miss it in "Intro.txt", the default
  290. password for SysAdmin is "SysAdminPassword".
  291.  
  292. SysAdmin, or any other wizard, can enter wizard mode from the standard
  293. scenario by typing the "wizard" command. In wizard mode, user input is
  294. not handled by the scenario, but is either one of a very few wizard-
  295. mode commands, or is a statement in the AmigaMUD programming language.
  296. For reference, the way for a wizard to get back into playing mode from
  297. wizard mode is to type the following:
  298.  
  299.     Normal().
  300.  
  301. on an input line by itself, when the prompt is "> ". Note that this
  302. input line, as well as all of the following ones, ends in a period.
  303. This period is required, to indicate the end of the statement. If you
  304. forget it, the prompt will switch to ": ", and nothing will happen.
  305. You must then type the period to execute the statement. Note also that
  306. the capitalization of these input statements must be as shown.
  307.  
  308. The standard scenario sets the "creation password" to an empty string.
  309. This means that no special password or permission is needed to create
  310. a new character. A creation password can be installed by using the
  311. following line while in wizard mode (only SysAdmin can do this):
  312.  
  313.     NewCreationPassword().
  314.  
  315. The system will prompt for the new password. If the password begins
  316. with an asterisk ('*'), then automatic character creation is not
  317. allowed at all. In that case, SysAdmin will have to manually create
  318. all new characters. This is done in wizard mode as follows:
  319.  
  320.     CreateCharacter("characterName", "characterPassword").
  321.  
  322. The character will be created with the given name and password. As
  323. usual, it is best not to include spaces or punctuation in the name. A
  324. character can be removed from the system using:
  325.  
  326.     DestroyCharacter("characterName").
  327.  
  328. Note that the above can leave unreachable junk in the database, if the
  329. character is carrying complicated objects such as containers. A
  330. character can be booted off of the system with:
  331.  
  332.     use Characters
  333.     BootClient(characterName).
  334.  
  335. If something prevents that from working, and it is truly necessary to
  336. get rid of the character right away, the following can be used:
  337.  
  338.     use Characters
  339.     NukeClient(characterName).
  340.  
  341. This is a rather drastic method, however, so avoid it whenever
  342. possible. When the character reconnects, he/she will likely have to
  343. move around a bit and do some "looks" to get the graphics to come back
  344. properly. This is because "NukeClient" is so abrupt that it does not
  345. allow the client to execute the scenario shutdown code.
  346.  
  347. If SysAdmin wishes to make a character into a wizard or apprentice,
  348. this can be done in wizard mode as follows:
  349.  
  350.     use Characters
  351.  
  352.     MakeApprentice(CharacterName, false).
  353. or
  354.     MakeWizard(CharacterName, false).
  355.  
  356. The "use Characters" needs to be done only once per connection. Note
  357. that here the character name is not quoted - it is known directly
  358. because the "Characters" table is in-use. Note also that this method
  359. will not work if the character name has spaces or punctuation marks in
  360. it. The "false" in the above tells the system to not immediately
  361. change the mode of the player. If the player is currently connected
  362. and "true" is used instead, then the player will be immediately placed
  363. into wizard mode. A wizard or apprentice can be demoted back to a
  364. normal character using:
  365.  
  366.     MakeNormal(CharacterName).
  367.  
  368. MUDServ places an execution time limit on the AmigaMUD code run in
  369. response to any input line or mouse-click. The execution is aborted if
  370. this limit is exceeded. The standard scenario sets this limit to 10
  371. seconds. Other limits can be set as follows:
  372.  
  373.     RunLimit(new-limit).
  374.  
  375. where 'new-limit' is the new execution time limit in seconds. The old
  376. limit will be printed out. Do not make the limit too large, as this
  377. can cause MUDServ to hang if erroneous wizard code is encountered.
  378.  
  379. There is no command in the standard scenario to allow sending a
  380. message to all connected players. This can be done as follows:
  381.  
  382.     APrint("This is the message.").
  383.  
  384. This can be used to announce system shutdowns, special events, etc.
  385. The standard scenario uses it to announce when a character completes a
  386. Quest.
  387.  
  388.  
  389. Messages in MUD.log
  390.  
  391. Many different messages can appear in the MUD.log file. Some are just
  392. informational, but others can indicate problems, either with the
  393. system as a whole or with the scenario. I will attempt to explain some
  394. of them here, but there are many that are not explained, either
  395. because they are (hopefully) obvious, or because they are coming
  396. through some obscure path that I miss. Most lines in the log file will
  397. be prefixed by the date and time they are produced.
  398.  
  399. _start = 0x07ccb890 lib = 0x07cbf554
  400.  
  401.     This line is produced when the server starts up. The exact numbers
  402.     will differ, often from run to run. They are useful only to the
  403.     author of the system. If the system gets an "Enforcer" hit or
  404.     other system problem in which the CPU program counter is
  405.     available, these numbers are helpful in pinning down the location
  406.     in the code of the problem.
  407.  
  408. Player SysAdmin enters the game
  409. Player SysAdmin leaves the game
  410.  
  411.     Messages of this type are produced whenever a player enters or
  412.     leaves the game. External programs can then be run to keep track
  413.     of who is using the game and when, and perhaps to add up the
  414.     amount of time various players are spending in the game.
  415.  
  416. Setting WIZARD mode
  417. Clearing WIZARD mode
  418.  
  419.     These messages occur whenever a wizard or apprentice goes in or
  420.     out of wizard (programming) mode. They can be useful in tracking
  421.     down the causes of problems created in the scenario.
  422.  
  423. expandIndexTable
  424.  
  425.     This message indicates than it was necessary for the database code
  426.     to increase the size of its index array. A number of these will
  427.     occur when compiling the standard scenario, and occasional ones
  428.     can occur when running. They are indications of increasing memory
  429.     usage.
  430.  
  431. Server shutdown request via message - currently 0 clients
  432. Shutting down, 1 client serviced
  433. Machines: 11 created, 0 deleted
  434. Things: 785 created, 0 destroyed
  435. Messages: 27448 processed, 2174 sent
  436. Allocator:  used: 2158592  limit: 1000000000
  437. allocs: 187602    frees: 187602  reclaims: 0  panics: 0
  438. cre 5819 del 5 rd 27117 rep 2371 shr 2 exp 8047 dir 6693
  439. frd 446 fwt 1718 fsk 1976
  440. MUD server V1.0 Copyright 1995 by Chris Gray shut down
  441.  
  442.     These messages are typical of shutting down the server. This
  443.     particular set came after compiling the current version of the
  444.     standard scenario. Normally, the memory usage figure will be much
  445.     smaller. The server will not shut down when there are active
  446.     clients, so the shutdown request (which can come via a message
  447.     sent by the MUDShut program, a shell 'break' signal to the server
  448.     process, or by SysAdmin calling the 'ShutDown(true)' builtin) can
  449.     be quite a ways before the actual shutdown.
  450.  
  451.     Machines are the 'robots' or NPC's (Non-Player-Characters) in the
  452.     AmigaMUD system. During active playing in the standard scenario's
  453.     combat area, the number created and destroyed can be much higher,
  454.     perhaps in the tens or hundreds of thousands.
  455.  
  456.     Things are the basic entities in the AmigaMUD system. They
  457.     represent characters, machines, rooms, objects, etc.
  458.  
  459.     Messages are the means by which player input is sent to the server
  460.     and player output is sent from the server. Again, the numbers
  461.     would normally be quite a bit higher with active players.
  462.  
  463.     The memory used by the allocator does not include the database
  464.     cache and an in-memory copy of the MUD.index file. It also does
  465.     not include the various Exec messages that the server may have had
  466.     to allocate.
  467.  
  468.     The next line gives some statistics on the database activities:
  469.  
  470.     cre: database entries (things, characters, strings, tables,
  471.         machines, procedures, property structures, etc.) that were
  472.         created in this run
  473.     del: database entries deleted
  474.     rd: database entries read (on long, intensive runs, I've seen
  475.         this number over 20,000,000)
  476.     rep: database entries replaced
  477.     shr: database entries shrunk (e.g. when properties are removed
  478.         from a thing, or elements are deleted from a list)
  479.     exp: database entries expanded
  480.     dir: database entries dirtied (a change made which doesn't
  481.         involve changing the size of the entry)
  482.  
  483.     The next line indicates the number of actual disk I/O operations
  484.     that the database code had to make. The ratio between the above
  485.     numbers and these numbers is an indication of how effective the
  486.     database cache has been:
  487.  
  488.     frd: number of actual file reads
  489.     fwt: number of actual file writes
  490.     fsk: number of file seeks
  491.  
  492. DataSize 605678=>605678 IndexCurrent 7027=>7021
  493.  
  494.     On occasions, the database code will scan through the highest
  495.     indexed database entries, attempting to merge and free them. This
  496.     line indicates the success of doing so. 'DataSize' indicates the
  497.     total used size of the MUD.data file. 'IndexCurrent' indicates the
  498.     total used size of the MUD.index file.
  499.  
  500. Server flush request via message
  501.  
  502.     This message indicates that a request to flush the database to
  503.     disk was received. This is generated by running the 'MUDFlush'
  504.     program.
  505.  
  506. BootClient for player SysAdmin
  507.  
  508.     This indicates that a request was generated to shut down the
  509.     indicated client. The client will exit as soon as its current
  510.     activity in the server is done. In this case, it was generated by
  511.     the scenario calling the 'Quit' builtin as a result of the player
  512.     entering the 'bye' command.
  513.  
  514. Agent shutdown for player SysAdmin
  515.  
  516.     The MUDAgent program has shut down a connection for some reason.
  517.     This could be loss of carrier, activity timeout, failure to
  518.     communicate, etc.
  519.  
  520. NukeClient for player SysAdmin
  521.  
  522.     This is a record of a more severe method of shutting down a given
  523.     client. In this case, the system tries to shut the client down
  524.     right away, and does not wait for anything. This is done by
  525.     SysAdmin via the 'NukeClient' builtin.
  526.  
  527. SysAdmin has set the shutdown flag.
  528. SysAdmin has cleared the shutdown flag.
  529.  
  530.     These appear in response to SysAdmin using the ShutDown builtin.
  531.  
  532. Name1 changed name to Name2
  533.  
  534.     A system administrator will sometimes want to keep track of which
  535.     characters are played by which real people. This message helps by
  536.     logging when a character changes name. It comes from the
  537.     'ChangeName' builtin.
  538.  
  539. New player when no entry action!
  540.  
  541.     This message indicates that a person has tried to connect and
  542.     create a new character when there is not yet an 'entry-action'
  543.     routine in the scenario. This is the routine, set by the
  544.     'SetNewCharacterAction' builtin, which is called to setup a new
  545.     character.
  546.  
  547. no memory for server request
  548.  
  549.     This will be immediately followed by an abort. The server could
  550.     not allocate memory for a message, and so cannot proceed.
  551.  
  552. serverMessage: got unexpected type NN from server
  553. MUDState NNNN > 1000
  554. Can't find local offset XXXXXXXX in 'readExec'
  555. can't find ref key in 'readExec'
  556. invalid request type
  557. client not found
  558. client already editing
  559. can't find name for builtin in subPublicProc
  560. can't find Characters in public symbol table
  561. can't find Builtin in public symbol table
  562.  
  563.     These should not happen, and will cause an abort. If they happen,
  564.     something serious is wrong with your AmigaMUD system. This could
  565.     be an invalid program, a damaged database, failing hardware, etc.
  566.     You should not continue to run such a system, since it is possible
  567.     that important data on your hard disk could be damaged.
  568.  
  569. can't create MUD port
  570. can't allocate interrupt
  571. can't open timer device
  572. can't allocate timer request
  573. can't create timer port
  574.  
  575.     These messages indicate that MUDServ could not start up because it
  576.     could not do all of its initialization. They usually indicate that
  577.     they system does not have enough free memory.
  578.  
  579. MUD port already exits
  580.  
  581.     This can happen if you try to start two servers using the same
  582.     port name. If you get this message when you are sure that there is
  583.     no other copy of MUDServ running, then you will have to reboot
  584.     your system to clear the condition.
  585.  
  586. Fail to seek to end to expand
  587.  
  588.     The database code needed to expand MUD.data, but could not seek to
  589.     the current end of the file in order to write more to it. This
  590.     should not happen.
  591.  
  592. Fail to write NN bytes to expand
  593. Fail to write block to expand
  594. Fail to write NNN bytes to flush buffer
  595. can't write index to index file
  596.  
  597.     This can happen if your disk is full. In this case you will have
  598.     to go back to a backup of your database files, since the current
  599.     ones are no longer internally consistent. This kind of symptom can
  600.     also happen if the disk or partition in use becomes write
  601.     protected.
  602.  
  603. Fail to seek to NNNNNN to flush buffer
  604. Fail to seek to write direct
  605. Fail to write NNN bytes direct
  606.  
  607.     This is a similar seek failure. It should not happen. If it does,
  608.     there is something wrong with your system.
  609.  
  610. Fail to seek to NNNNNN to read direct
  611. Fail to read NNN bytes direct
  612. Fail to seek to NNNNNN to fill buffer
  613. Fail to read enough into buffer
  614.  
  615.     This can indicate a filesystem failure or a corrupt database. In
  616.     either case, you will need to restore from a backup.
  617.  
  618. can't write XXXXX to index file
  619. can't open/create new index file
  620.  
  621.     The MUD.index file has several special values at its beginning.
  622.     One of them couldn't be written when flushing the database. This
  623.     will yield a corrupt set of database files. It is also possible
  624.     that this kind of symptom could occur if the disk that AmigaMUD
  625.     is running on becomes write protected.
  626.  
  627. offset > SORT_BUCKETS XXXXXXXX
  628. CacheLRUHead ~= next in ioFlush
  629. No cache slot len NNN for item
  630. invalid type to ioCreate
  631. key XXXXXXXX not in cache for ioDirty
  632. key XXXXXXXX not in cache for ioExpand
  633. new len < oldlen on ioExpand of XXXXXXXX
  634. assumption failed in ioExpand!
  635. ioShrink, newLen 0
  636. Key XXXXXXXX not in cache for 'ioShrink'
  637. new len > old len on ioShrink of XXXXXXXX
  638. ioReplace, newLen = 0
  639. ioDelete(XXXXXXXX) - already deleted!
  640.  
  641.     I've got a bug. Let me know. If you get any of these, then the
  642.     database code will have aborted. This leaves you with an
  643.     inconsistent set of database files and you must go back to a
  644.     backup of them.
  645.  
  646. Cannot create cache slot len NNN for item
  647.  
  648.     The database code uses a non-write-through cache to hold the most
  649.     recently referenced database items. This abort indicates that it
  650.     needed to create such a cache slot for an item, and was not able
  651.     to find a hole large enough (the items must be stored in one
  652.     contiguous slot). In such cases it simply cannot continue
  653.     executing, because it has no knowledge about the state of the
  654.     upper-level code that is using it. Hence the abort. With this
  655.     abort, like those listed above, the database files are now
  656.     unusable. Run with a larger database cache to avoid this abort.
  657.  
  658. Too few cache entries to make one for len NNN
  659.  
  660.     This abort is similar to the previous one, except that in this
  661.     case, there are a small number of large entries that seem to be
  662.     using up all of the space. Again, the database will be corrupt,
  663.     and you should run with a larger database cache.
  664.  
  665. database overflow - too many entries!!!
  666.  
  667.     The system thinks you have more than 2 ** 24 entries (over 16
  668.     million). I can't believe that!
  669.  
  670. expansion failed
  671.  
  672.     An attempt was made to expand the in-memory copy of MUD.index. A
  673.     region of memory big enough could not be allocated. You will have
  674.     to restore from backup files, and attempt to make more free memory
  675.     available for running.
  676.  
  677. AmigaMUD code running in the scenario can also add lines to the log
  678. file. The content of those lines is entirely up to the scenario. In
  679. the standard scenario, they are user-generated comments about bugs or
  680. typos, or just plain complaints.
  681.