This is patch13 to PennMUSH 1.7.7. After applying this patch, you will have version 1.7.7p13 To apply this patch, save it to a file in your top-level MUSH directory, and do the following: patch -p1 < 1.7.7-patch13 *** Fix your local.c. If you haven't hacked in there, just *** cp local.dst local.c *** If you have hacked, move your hacks into local.dst and *** do the cp bit. ./Configure -d make install If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1', not just 'patch -p1'. Unix (or cygwin) users need not worry about failed hunks in src/switchinc.c, hdrs/switches.h, hdrs/cmds.h, or hdrs/funs.h. These files are automatically rebuilt on compile. On the off chance they appear not to be, simply rm them and re-run make. Then @shutdown and restart your MUSH. - Alan/Javelin In this patch: Major changes: * Interactions (something like "realms" in mux2). Two functions in local.c can now be used to control conditions under which objects can see, hear, or match each other. Possibly useful for implementing umbral worlds, etc. Patch by Vadiv@M*U*S*H. Functions: * children(), syntactic sugar for lsearch(all,parent,). Suggested by Kyieren@M*U*S*H. Patch by BlaZe@M*U*S*H. * powers() can now take a second argument to set an @power. Suggested by Rob@BtFMUSH. Minor changes: * @config/set can now set null strings. Suggested by Cheetah@M*U*S*H. * In restart, set LC_ALL as well as LANG from the given LANG value, in case the user's got an LC_ALL in their shell. * The channel buffer shifting code has gotten much more efficient. Suggested by [TAP]. * @function/restrict can accept arguments of the form '!' to clear a restriction. Suggested by Saturn@M3. * Most of the asterisk lines between different login message files have been removed. Suggested by Vadiv@M*U*S*H most recently. Fixes: * Fixes from 1.7.6p9. * Win32 portability fixes. [EEH] * deny_silent in access.cnf was ignored in several cases, and no longer is. Patch by Cloud@Sci-Fi Chat * Help fixes by Cheetah@M*U*S*H and LeeLaLimaLLama@M*U*S*H. Prereq: 1.7.7p12 rm -rf CHANGES*~ CHANGES*bak utils/mkvershlp.pl game/txt/hlp CHANGES* *** 1_7_7.309/Patchlevel Mon, 24 Mar 2003 12:05:49 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.14 600) --- 1_7_7.365(w)/Patchlevel Wed, 09 Apr 2003 14:16:43 -0500 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.14 600) *************** *** 1,2 **** Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.7.7p12 --- 1,2 ---- Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.7.7p13 *** 1_7_7.309/CHANGES.176 Mon, 24 Mar 2003 12:05:49 -0600 dunemush (pennmush/g/17_CHANGES 1.10.1.6.1.2.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.9.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2 600) --- 1_7_7.365(w)/CHANGES.176 Wed, 09 Apr 2003 13:49:56 -0500 dunemush (pennmush/g/17_CHANGES 1.10.1.6.1.2.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.9.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1 600) *************** *** 13,18 **** --- 13,31 ---- ========================================================================== + Version 1.7.6 patchlevel 9 April 9, 2003 + + Fixes: + * index-files.pl now produces a sensible warning for duplicate + help topics, rather than a perl warning. Suggested by Cheetah@M*U*S*H. + * Spellnum cosmetic bug with 'seventeen' fixed. Report by Jules@M*U*S*H. + * Another wrap() buglet tracked down and fixed. Probably the one + reported by Nymeria@M*U*S*H. + * Memory leak in flip() and scramble() fixed. + * Configure test for /dev/urandom from 1.7.5 got left out by mistake. + * Critical overflow bug in command argument parsing fixed. + + Version 1.7.6 patchlevel 8 March 21, 2003 Minor changes: *** 1_7_7.309/CHANGES.177 Tue, 25 Mar 2003 16:50:17 -0600 dunemush (pennmush/g/23_CHANGES 1.48.1.42 600) --- 1_7_7.365(w)/CHANGES.177 Wed, 09 Apr 2003 14:16:57 -0500 dunemush (pennmush/g/23_CHANGES 1.48.1.57 600) *************** *** 18,23 **** --- 18,53 ---- ========================================================================== + Version 1.7.7 patchlevel 13 April 9, 2003 + + Major changes: + * Interactions (something like "realms" in mux2). Two functions + in local.c can now be used to control conditions under which + objects can see, hear, or match each other. Possibly useful for + implementing umbral worlds, etc. Patch by Vadiv@M*U*S*H. + Functions: + * children(), syntactic sugar for lsearch(all,parent,). + Suggested by Kyieren@M*U*S*H. Patch by BlaZe@M*U*S*H. + * powers() can now take a second argument to set an @power. + Suggested by Rob@BtFMUSH. + Minor changes: + * @config/set can now set null strings. Suggested by Cheetah@M*U*S*H. + * In restart, set LC_ALL as well as LANG from the given LANG value, + in case the user's got an LC_ALL in their shell. + * The channel buffer shifting code has gotten much more efficient. + Suggested by [TAP]. + * @function/restrict can accept arguments of the form '!' + to clear a restriction. Suggested by Saturn@M3. + * Most of the asterisk lines between different login message files + have been removed. Suggested by Vadiv@M*U*S*H most recently. + Fixes: + * Fixes from 1.7.6p9. + * Win32 portability fixes. [EEH] + * deny_silent in access.cnf was ignored in several cases, and no + longer is. Patch by Cloud@Sci-Fi Chat + * Help fixes by Cheetah@M*U*S*H and LeeLaLimaLLama@M*U*S*H. + + Version 1.7.7 patchlevel 12 March 21, 2003 Commands: *** 1_7_7.309/game/txt/hlp/pennfunc.hlp Tue, 18 Mar 2003 15:58:51 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.2 600) --- 1_7_7.365(w)/game/txt/hlp/pennfunc.hlp Tue, 08 Apr 2003 17:02:39 -0500 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.5 600) *************** *** 108,119 **** Dbref functions return a dbref or list of dbrefs related to some value on an object. ! con() entrances() exit() followers() following() ! home() lcon() lexits() loc() locate() ! lparent() lplayers() lsearch() lvcon() lvexits() ! lvplayers() next() num() owner() parent() ! pmatch() rloc() rnum() room() where() ! zone() See also: DBREF & Information functions --- 108,119 ---- Dbref functions return a dbref or list of dbrefs related to some value on an object. ! children() con() entrances() exit() followers() ! following() home() lcon() lexits() loc() ! locate() lparent() lplayers() lsearch() lvcon() ! lvexits() lvplayers() next() num() owner() ! parent() pmatch() rloc() rnum() room() ! where() zone() See also: DBREF & Information functions *************** *** 1931,1937 **** lpos(, ) This function returns a list of the positions where occupies ! in , with te first character of the string being 0. Note that this differs from the pos() function, but is consistent with other string functions like mid() and delete(). --- 1931,1937 ---- lpos(, ) This function returns a list of the positions where occupies ! in , with the first character of the string being 0. Note that this differs from the pos() function, but is consistent with other string functions like mid() and delete(). *************** *** 1947,1954 **** --- 1947,1956 ---- & LSEARCH() & SEARCH() & LSEARCHR() + & CHILDREN() lsearch([, [, [, [, ]]]]) lsearchr([, [, [, [, ]]]]) + children() This function is similar to the @search command, except it returns just a list of dbref numbers. It is computationally expensive, and *************** *** 1961,1966 **** --- 1963,1971 ---- The possible es and s are the same as those accepted by @search. See 'help @search' for information about them. + + children() is exactly the same as lsearch(,parent,), + using "all" for See_All/Search_All players and "me" for others. See 'help lsearch2' for more details. & LSEARCH2 *************** *** 2572,2580 **** Returns to the power of . & POWERS() powers() - Returns a space-separate list of powers possessed by the object. - If the object does not exist, #-1 will be returned. & QUOTA() quota() --- 2577,2589 ---- Returns to the power of . & POWERS() powers() + powers(,) + + The first form returns a space-separate list of powers possessed by + the object. If the object does not exist, #-1 will be returned. + + The second form attempts to set on , as per @power. & QUOTA() quota() *** 1_7_7.309/game/txt/hlp/penncmd.hlp Wed, 12 Mar 2003 12:31:02 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1.1.1.1.4 600) --- 1_7_7.365(w)/game/txt/hlp/penncmd.hlp Sun, 30 Mar 2003 22:07:40 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1.1.1.1.6 600) *************** *** 2665,2686 **** true boolean value will be listed. The token '##' in , which is a function, is replaced by each dbref sequentially. Classes EPLAYER, EROOM, EEXIT, and EOBJECT work like EVAL but are restricted to a single type. - - See "help @search3" for more. - & @search3 - For the class TYPE=PLAYER, and for PLAYER=, anyone may - obtain information on any player. In all other cases, only wizards may - obtain information about other players. This is computationally - expensive, costing 100 pennies. It is generally faster than @find. - - Examples: - @search flags=Wc <-- search for connected wizards. - @search type=room <-- list all rooms owned by me. - @search zone=#50 <-- list all objects belong to zone #50. - @search Joe eval=1,100,200 <-- list objects from #100-#200 owned by Joe. - @search eval=gt(money(##),10) <-- list all objects owned by me - worth more than 10 coins. - & @select @select[/notify] =,[,,]...[,] This is similar to @switch, except it only executes the action --- 2665,2670 ---- *************** *** 3655,3667 **** square brackets, in front of the message, in a fashion similar to the way NOSPOOF flags emits. ! Page takes four switches: /list, /blind, /noeval and /port. The /list and /blind switches provide two different ways of handling pages to lists of players. With /list, each paged player sees the list of who was paged, and the paging player is notified only once. With /blind, it's as if each player was individually paged. The default list behavior is set by the blind_page @config option. The /noeval switch prevents the MUSH from evaluating the message. The /port switch is admin-only, and will page a port descriptor directly, including connections that have not yet logged into a player. --- 3639,3652 ---- square brackets, in front of the message, in a fashion similar to the way NOSPOOF flags emits. ! Page takes five switches: /list, /blind, /noeval, /override, and /port. The /list and /blind switches provide two different ways of handling pages to lists of players. With /list, each paged player sees the list of who was paged, and the paging player is notified only once. With /blind, it's as if each player was individually paged. The default list behavior is set by the blind_page @config option. The /noeval switch prevents the MUSH from evaluating the message. + The /override switch is admin-only, and overrides pagelocks and HAVEN. The /port switch is admin-only, and will page a port descriptor directly, including connections that have not yet logged into a player. *** 1_7_7.309/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) --- 1_7_7.365(w)/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:28 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.2 660) *************** *** 11,69 **** 1.6.0p4 1.6.0p5 1.6.1p0 1.6.1p1 1.6.10p0 1.6.10p1 1.6.10p2 1.6.10p3 1.6.10p4 ! 1.6.10p5 1.6.10p6 1.6.10p6 ! 1.6.2p0 1.6.2p1 1.6.3p0 ! 1.6.3p1 1.6.3p2 1.6.3p3 ! 1.6.3p4 1.6.3p5 1.6.3p6 ! 1.6.3p7 1.6.4p0 1.6.4p1 ! 1.6.4p2 1.6.5p0 1.6.5p1 For more, see Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.6.5p2 1.6.5p3 1.6.5p4 ! 1.6.6p0 1.6.7p0 1.6.7p1 ! 1.6.7p2 1.6.7p3 1.6.7p4 ! 1.6.7p5 1.6.7p6 1.6.8p0 ! 1.6.8p1 1.6.9p0 1.6.9p1 ! 1.6.9p2 1.6.9p3 1.6.9p4 ! 1.6.9p5 1.6.9p6 1.6.9p7 ! 1.6.9p8 1.6.9p9 1.7.0p0 ! 1.7.0p1 1.7.0p2 1.7.0p3 ! 1.7.0p4 1.7.0p5 1.7.0p6 ! 1.7.0p7 1.7.0p8 1.7.0p9 ! 1.7.0p10 1.7.0p11 1.7.0p11 ! 1.7.1p0 1.7.1p1 1.7.1p2 ! 1.7.1p3 1.7.2p0 1.7.2p1 ! 1.7.2p2 1.7.2p3 1.7.2p4 ! 1.7.2p5 1.7.2p6 1.7.2p7 For more, see Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.7.2p8 1.7.2p9 1.7.2p10 ! 1.7.2p11 1.7.2p12 1.7.2p13 ! 1.7.2p14 1.7.2p15 1.7.2p16 ! 1.7.2p17 1.7.2p18 1.7.2p19 ! 1.7.2p20 1.7.2p21 1.7.2p22 ! 1.7.2p23 1.7.2p24 1.7.2p25 ! 1.7.2p26 1.7.2p27 1.7.2p28 ! 1.7.2p29 1.7.2p30 1.7.2p31 ! 1.7.2p32 1.7.2p33 1.7.2p34 ! 1.7.2p35 1.7.3p0 1.7.3p1 ! 1.7.3p2 1.7.3p3 1.7.3p4 ! 1.7.3p5 1.7.3p6 1.7.3p7 ! 1.7.3p8 1.7.3p9 1.7.3p10 ! 1.7.3p11 1.7.3p12 1.7.3p13 ! 1.7.3p14 1.7.4p0 1.7.4p1 ! 1.7.4p2 1.7.4p3 1.7.4p4 For more, see Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 1.7.4p5 1.7.4p6 1.7.4p7 1.7.4p8 1.7.4p9 1.7.4p10 1.7.4p11 1.7.4p12 1.7.4p13 --- 11,70 ---- 1.6.0p4 1.6.0p5 1.6.1p0 1.6.1p1 1.6.10p0 1.6.10p1 1.6.10p2 1.6.10p3 1.6.10p4 ! 1.6.10p5 1.6.10p6 1.6.2p0 ! 1.6.2p1 1.6.3p0 1.6.3p1 ! 1.6.3p2 1.6.3p3 1.6.3p4 ! 1.6.3p5 1.6.3p6 1.6.3p7 ! 1.6.4p0 1.6.4p1 1.6.4p2 ! 1.6.5p0 1.6.5p1 1.6.5p2 For more, see Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.6.5p3 1.6.5p4 1.6.6p0 ! 1.6.7p0 1.6.7p1 1.6.7p2 ! 1.6.7p3 1.6.7p4 1.6.7p5 ! 1.6.7p6 1.6.8p0 1.6.8p1 ! 1.6.9p0 1.6.9p1 1.6.9p2 ! 1.6.9p3 1.6.9p4 1.6.9p5 ! 1.6.9p6 1.6.9p7 1.6.9p8 ! 1.6.9p9 1.7.0p0 1.7.0p1 ! 1.7.0p2 1.7.0p3 1.7.0p4 ! 1.7.0p5 1.7.0p6 1.7.0p7 ! 1.7.0p8 1.7.0p9 1.7.0p10 ! 1.7.0p11 1.7.1p0 1.7.1p1 ! 1.7.1p2 1.7.1p3 1.7.2p0 ! 1.7.2p1 1.7.2p2 1.7.2p3 ! 1.7.2p4 1.7.2p5 1.7.2p6 ! 1.7.2p7 1.7.2p8 1.7.2p9 For more, see Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.7.2p10 1.7.2p11 1.7.2p12 ! 1.7.2p13 1.7.2p14 1.7.2p15 ! 1.7.2p16 1.7.2p17 1.7.2p18 ! 1.7.2p19 1.7.2p20 1.7.2p21 ! 1.7.2p22 1.7.2p23 1.7.2p24 ! 1.7.2p25 1.7.2p26 1.7.2p27 ! 1.7.2p28 1.7.2p29 1.7.2p30 ! 1.7.2p31 1.7.2p32 1.7.2p33 ! 1.7.2p34 1.7.2p35 1.7.3p0 ! 1.7.3p1 1.7.3p2 1.7.3p3 ! 1.7.3p4 1.7.3p5 1.7.3p6 ! 1.7.3p7 1.7.3p8 1.7.3p9 ! 1.7.3p10 1.7.3p11 1.7.3p12 ! 1.7.3p13 1.7.3p14 1.7.4p0 ! 1.7.4p1 1.7.4p2 1.7.4p3 ! 1.7.4p4 1.7.4p5 1.7.4p6 For more, see Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) 1.7.4p5 1.7.4p6 1.7.4p7 1.7.4p8 1.7.4p9 1.7.4p10 1.7.4p11 1.7.4p12 1.7.4p13 *************** *** 80,90 **** --- 81,110 ---- 1.7.7p3 1.7.7p4 1.7.7p5 1.7.7p6 : ; @-attributes @-building @-general + ======= + 1.7.4p7 1.7.4p8 1.7.4p9 + 1.7.4p10 1.7.4p11 1.7.4p12 + 1.7.4p13 1.7.4p14 1.7.4p15 + 1.7.4p16 1.7.4p17 1.7.4p18 + 1.7.4p19 1.7.4p20 1.7.5p0 + 1.7.5p1 1.7.5p2 1.7.5p3 + 1.7.5p4 1.7.5p5 1.7.5p6 + 1.7.5p7 1.7.5p8 1.7.5p9 + 1.7.5p10 1.7.5p11 1.7.5p12 + 1.7.6p0 1.7.6p1 1.7.6p2 + 1.7.6p3 1.7.6p4 1.7.6p5 + 1.7.6p6 1.7.6p7 1.7.6p8 + : ; @-attributes + @-building @-general @-wizard + @@ @@() @aahear + @aclone @aconnect @adeath + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) @-wizard @@ @@() @aahear @aclone @aconnect @adeath @adescribe @adestroy *************** *** 101,111 **** --- 121,150 ---- @break @cemit @channel @channel2 @channel3 @channel4 @channel5 @charges @chat + ======= + @adescribe @adestroy @adisconnect + @adrop @aefail @aenter + @afailure @afollow @agive + @ahear @aidescribe @aleave + @alfail @alias @allhalt + @allquota @amhear @amove + @apayment @areceive @asuccess + @atport @atrchown @atrlock + @attribute @aufail @aunfollow + @ause @away @azenter + @azleave @boot @break + @cemit @channel @channel2 + @channel3 @channel4 @channel5 + @charges @chat @chown + @chownall @chzone @chzone2 + @chzoneall @clock @clock2 + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) @chown @chownall @chzone @chzone2 @chzoneall @clock @clock2 @clone @command *************** *** 122,132 **** --- 161,190 ---- @dig @dig2 @disable @doing @dolist @drain @drop @dump @ealias + ======= + @clone @command @comment + @config @config attribs @config chat + @config cmds @config cosmetic @config cosmetic2 + @config costs @config db @config dump + @config funcs @config limits @config limits2 + @config log @config net @config parameters + @config tiny @conformat @cost + @cpattr @create @dbck + @death @decompile @decompile2 + @decompile3 @describe @destroy + @destroy2 @dig @dig2 + @disable @doing @dolist + @drain @drop @dump + @ealias @edit @efail + @elock @emit @enable + @enter @entrances @eunlock + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-7 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-7 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) @edit @efail @elock @emit @enable @enter @entrances @eunlock @exitformat *************** *** 143,153 **** --- 201,230 ---- @leave @lemit @lfail @link @list @listen @listen2 @listmotd @lock + ======= + @exitformat @failure @filter + @filter2 @find @firstexit + @follow @force @force2 + @forwardlist @function @function2 + @function3 @function4 @gedit + @give @grep2 @grep + @halt @haven @hide + @hook @hook2 @idescribe + @idle @infilter @inprefix + @kick @lalias @leave + @lemit @lfail @link + @list @listen @listen2 + @listmotd @lock @lock2 + @lock3 @lock4 @lock5 + @lock6 @lock7 @lock8 + @lock9 @log @logwipe + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-8 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-8 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) @lock2 @lock3 @lock4 @lock5 @lock6 @lock7 @lock8 @lock9 @log *************** *** 164,174 **** --- 241,270 ---- @oleave @olfail @omove @opayment @open @oreceive @osuccess @otport @oufail + ======= + @lset @map2 @mail + @malias @malias2 @malias3 + @malias4 @malias5 @map + @motd @move @mvattr + @name @nameaccent @nameformat + @newpassword @notify @nspemit + @nuke @odeath @odescribe + @odrop @oefail @oemit + @oenter @ofailure @ofollow + @ogive @oidescribe @oleave + @olfail @omove @opayment + @open @oreceive @osuccess + @otport @oufail @ounfollow + @ouse @oxenter @oxleave + @oxmove @oxtport @ozenter + @ozleave @parent @password + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-9 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-9 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) @ounfollow @ouse @oxenter @oxleave @oxmove @oxtport @ozenter @ozleave @parent *************** *** 185,195 **** --- 281,310 ---- @sitelock3 @squota @startup @stats @success @sweep @switch @switch2 @teleport + ======= + @payment @pcreate @pemit + @pemit2 @poll @poor + @power @prefix @ps + @purge @quota @readcache + @receive @recycle @rejectmotd + @remit @restart @runout + @rwall @rwallemit @rwallpose + @scan @search @search2 + @search3 @select @set + @sex @shutdown @sitelock + @sitelock2 @sitelock3 @squota + @startup @stats @success + @sweep @switch @switch2 + @teleport @tport @trigger + @trigger2 @ufail @ulock + @undestroy @unfollow @unlink + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-10 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-10 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) @tport @trigger @trigger2 @ufail @ulock @undestroy @unfollow @unlink @unlock *************** *** 198,204 **** --- 313,328 ---- @verb2 @verb3 @verb4 @version @vrml_url @wait @wait2 @wall @warnings + ======= + @unlock @unrecycle @uptime + @uptime2 @use @uunlock + @verb @verb2 @verb3 + @verb4 @version @vrml_url + @wait @wait2 @wall + @wallemit @wallpose @warnings + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) @warnings2 @warnings3 @wcheck + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) @whereis @wipe @wizmotd @wizwall @zemit @zenter @zleave \ ^ *************** *** 206,216 **** --- 330,352 ---- accent2 accent3 accent4 acos() action lists action2 add() after() ahelp + ======= + @whereis @wipe @wizemit + @wizmotd @wizpose @wizwall + @zemit @zenter @zleave + \ ^ abode + abs() accent() accent2 + accent3 accent4 acos() + action lists action2 add() + after() ahelp alphamax() + alphamin() and() andflags() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) alphamax() alphamin() and() andflags() andlflags() anews ansi ansi() aposs() *************** *** 227,237 **** --- 363,392 ---- brackets() brief builder bxor() cand() capstr() case() caseall() cat() + ======= + anews ansi ansi() + aposs() art() asin() + atan() atan2() atrlock() + attrcnt() attrib-ownership attribute flags + attribute functions attribute list attributes + attributes list attributes2 attributes3 + attributes4 audible audible2 + band() beep() before() + being killed bitwise functions bnand() + bnot() boolean functions boolean values + boolean2 boolean3 bor() + bound() brackets() brief + builder bxor() cand() + capstr() case() caseall() + cat() cd ceil() + cemit() center() cflags() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) cd ceil() cemit() center() cflags() ch changes channel functions channel-list *************** *** 248,258 **** --- 403,432 ---- credits ctime() ctitle() ctu() cv cwho() dark dark2 database + ======= + ch changes channel functions + channel-list channels() chat + checkpass() chown_ok chr() + clients clock() clone() + cloudy code color + commands communication functions comp() + comsys con() config() + conn() connected control + controls() convsecs() convtime() + convutcsecs() copyright copyrite + cor() cos() costs + create() credits ctime() + ctitle() ctu() cv + cwho() dark dark2 + database dbref # dbref functions + dbref number dbref2 dbrefs + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-13 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-13 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) dbref # dbref functions dbref number dbref2 dbrefs debug debug2 dec() decrypt() *************** *** 269,279 **** --- 443,472 ---- escape() etimefmt() etimefmt2 eval() evaluation order evaluation2 events examine executor + ======= + debug debug2 dec() + decrypt() default() delete() + desert destroy_ok die() + dig() dismiss dist2d() + dist3d() div() doing + doing() drop drop-tos + dynhelp() e() edefault() + edit() element() elements() + elist() elock() emit() + enactor encrypt() endtag() + enter enter_ok entrances() + eq() escape() etimefmt() + etimefmt2 eval() evaluation order + evaluation2 events examine + executor exit() exits + exits2 exp() extract() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) exit() exits exits2 exp() extract() failure fdiv() filter() filterbool() *************** *** 281,286 **** --- 474,486 ---- flag list flag permissions flags flags list flags() flags2 flip() floating floor() + ======= + failure fdiv() filter() + filterbool() findable() first() + fixed flag list flags + flags list flags() flags2 + flip() floating floor() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) floordiv() fmod() fold() fold2 folderstats() follow followers() following() foreach() *************** *** 290,305 **** --- 490,516 ---- get() get_eval() give global commands globals go going goto grab() + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) + ======= + graball() grep() grepi() + gt() gte() halt + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) graball() grep() grepi() gt() gte() halt hasattr() hasattrp() hasattrpval() hasattrval() hasflag() haspower() hastype() haven height() + ======= + hasattr() hasattrp() hasattrpval() + hasattrval() hasflag() haspower() + hastype() haven help + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) here hidden() home home() homes html html functions html() i18n *************** *** 311,328 **** --- 522,550 ---- interiors2 internationalization inum() inventory isdaylight() isdbref() isint() isnum() isword() + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) + ======= + itemize() items() iter() + iter2 itext() judge + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) itemize() items() iter() iter2 itext() judge jump_ok jury_ok kill last & lastlogout last() lastip + ======= + jump_ok jury_ok kill + last & lastlogout last() lastip + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) lastsite lattr() lcon() lcstr() ldelete() leave left() lemit() lexits() + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) lflags() license light link() link_ok linking list functions list() listen_parent *************** *** 332,342 **** --- 554,578 ---- loc() locale localize() locate() locate2 lock list lock types lock types2 lock() + ======= + license light link() + link_ok linking list functions + list() listen_parent listening + listening2 listening3 lists + lit() ljust() lmath() + ln() lnum() loc() + locale localize() locate() + locate2 lock list lock types + lock types2 lock() locking + locklist locks locktypes + locktypes2 log() logout + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) locking locklist locks locktypes locktypes2 log() logout look look2 *************** *** 353,363 **** --- 589,618 ---- mailtime() map() master room match() matchall() matching math functions max() me + ======= + look look2 looping + lparent() lplayers() lsearch() + lsearch2 lsearchr() lstats() + lt() lte() lvcon() + lvexits() lvplayers() lwho() + macros macros2 mail + mail functions mail() mail-admin + mail-folders mail-other mail-reading + mail-sending maildstats() mailfrom() + mailfstats() mailstats() mailstatus() + mailsubject() mailtime() map() + master room match() matchall() + matching math functions max() + me mean() median() + member() merge() mid() + min() mix() mix2 + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) mean() median() member() merge() mid() min() mix() mix2 mod() *************** *** 374,389 **** --- 629,667 ---- no_tel no_warn noaccents noleave non-standard attributes nor() nospoof not() nowarn + ======= + mod() modulo() modulus() + money money() monitor + mortal move mtime() + mudname() mul() munge() + munge2 munge3 mushcode + mushcode2 mwho() myopic + name() nand() nattr() + nearby() neq() new locks + newbie newbie2 newbie3 + news next() no_command + no_leave no_tel no_warn + noaccents noleave non-standard attributes + nor() nospoof not() + nowarn nspemit() null() + num() obj() object parents + objeval() objmem() oemit() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) nspemit() null() num() obj() object parents objeval() objmem() oemit() on-vacation opaque open() or() ord() orflags() orlflags() + ======= + on-vacation opaque open() + or() ord() orflags() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) owner() page page2 paranoid parent parent() parents parents2 parents3 *************** *** 395,410 **** --- 673,699 ---- poss() power() powers list powers list2 powers() powers2 pueblo pueblo features pueblo() + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) + ======= + puppet puppets puppets2 + queue quiet quit + quota() r() r-function + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) puppet puppets puppets2 queue quiet quit quota() r() r-function rand() read regedit() regeditall() regeditalli() regediti() + ======= + rand() read regedit() + regeditall() regeditalli() regediti() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) regexp regexp classes regexp classes2 regexp examples regexp syntax regexp syntax2 regexp syntax3 regexp syntax4 regexp syntax5 *************** *** 416,432 **** --- 705,733 ---- remainder() remit() remove() repeat() replace() rest() restarts() restarttime() restrict + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) + ======= + restrict2 restrict3 reverse() + revwords() right() rjust() + rloc() rnum() room + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) restrict2 restrict3 reverse() revwords() right() rjust() rloc() rnum() room room() round() royalty rquota rules s() + ======= + room() round() royalty + rquota rules s() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) s-function safe say + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) score scramble() screenheight screenwidth search() search2 secs() secure() semaphores *************** *** 437,447 **** --- 738,764 ---- setq3 setr() setting-attributes setunion() sex sha1() shared shared players shared players2 + ======= + score scramble() search() + search2 secs() secure() + semaphores semaphores2 semaphores3 + semaphores4 semaphores5 semaphores6 + semipose session set() + setdiff() setinter() setq() + setq2 setq3 setr() + setting-attributes setunion() sex + sha1() shared shared players + shared players2 shl() shr() + shuffle() sign() sin() + slay softcode sort() + sortby() soundex() soundex2 + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) shl() shr() shuffle() sign() sin() slay softcode sort() sortby() *************** *** 458,468 **** --- 775,804 ---- substitutions4 success suspect switch wildcards switch() switch2 switchall() switches t() + ======= + soundlike() soundslike() space() + spellnum() splice() spoofing + sqrt() squish() stack + starttime() stats() stddev() + step2 step() sticky + strcat() string functions strings + strinsert() stripaccents() stripansi() + strlen() strmatch() sub() + subj() substitutions substitutions2 + substitutions3 substitutions4 success + suspect switch wildcards switch() + switch2 switchall() switches + t() table() tag() + tagwrap() take tan() + teach tel() tel_ok + temple terse textfile() + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-23 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-23 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) table() tag() tagwrap() take tan() teach tel() tel_ok temple *************** *** 479,489 **** --- 815,844 ---- unfollow uninspected unregistered use user-defined commands user-defined2 utctime() utility functions v() + ======= + think time functions time() + timefmt() timefmt2 timestring() + topics topics2 translation + transparent transparent2 trim() + trunc() trust trust2 + type() types of objects types2 + u() u2 ucstr() + udefault() ufun() ufun2 + uldefault() ulocal() ulocal2 + unfindable unfollow uninspected + unregistered use user-defined commands + user-defined2 utctime() utility functions + v() v-function vadd() + val() valid() vdim() + vdot() verbose verbs + version() visible() visual + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) For more, see Entries-24 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-24 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660) v-function vadd() val() valid() vdim() vdot() verbose verbs version() *************** *** 506,511 **** --- 861,881 ---- & Entries-25 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- zones2 + ======= + vmag() vmax() vmin() + vmul() vrml vsub() + vunit() warnings warnings list + warnings list2 where() whisper + whisper2 who wildcards + wipe() with wizard + wordpos() words() wrap() + xget() xor() z_tel + zemit() zfun() zmo + zmp zmr zone + zone master objects zone master rooms zone masters + zone objects zone() zones + zones2 + >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.2.1 660) & &Entries -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- *** 1_7_7.309/game/txt/index-files.pl Tue, 08 Oct 2002 10:34:26 -0500 dunemush (pennmush/28_index-file 1.7 600) --- 1_7_7.365(w)/game/txt/index-files.pl Wed, 26 Mar 2003 09:19:00 -0600 dunemush (pennmush/28_index-file 1.8 600) *************** *** 127,132 **** my($lasta, $lastb); ($firsta, $lasta) = ($1,$2) if $a =~ /(.+)p(\d+)/o; ($firstb, $lastb) = ($1,$2) if $b =~ /(.+)p(\d+)/o; ! $firsta cmp $firstb || $lasta <=> $lastb; } --- 127,138 ---- my($lasta, $lastb); ($firsta, $lasta) = ($1,$2) if $a =~ /(.+)p(\d+)/o; ($firstb, $lastb) = ($1,$2) if $b =~ /(.+)p(\d+)/o; ! my $res = $firsta cmp $firstb; ! return $res if $res; ! if (!defined($lasta)) { ! warn "Possible duplicate help topic: $a\n"; ! return $res; ! } ! return $lasta <=> $lastb; } *** 1_7_7.309/game/restart Sat, 25 Jan 2003 20:41:21 -0600 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.2.3 700) --- 1_7_7.365(w)/game/restart Thu, 27 Mar 2003 11:44:51 -0600 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.2.4 700) *************** *** 127,130 **** DATEMSK="${GAMEDIR}/getdate.template" export DATEMSK ! LANG=$LANG ./netmush $CONF_FILE $LOG & --- 127,130 ---- DATEMSK="${GAMEDIR}/getdate.template" export DATEMSK ! LC_ALL=$LANG LANG=$LANG ./netmush $CONF_FILE $LOG & *** 1_7_7.309/config_h.SH Sun, 02 Feb 2003 10:43:44 -0600 dunemush (pennmush/b/17_config_h.S 1.17.1.2.1.1.1.7 660) --- 1_7_7.365(w)/config_h.SH Tue, 08 Apr 2003 22:03:04 -0500 dunemush (pennmush/b/17_config_h.S 1.17.1.2.1.1.1.8 660) *************** *** 730,735 **** --- 730,740 ---- #$d_uptime HAS_UPTIME /**/ #define UPTIME_PATH "$uptime" + /* HAS_DEV_URANDOM: + * This symbol is defined if /dev/urandom is available. + */ + #$d_urandom HAS_DEV_URANDOM /**/ + /* UNION_WAIT: * This symbol if defined indicates to the C program that the argument * for the wait() system call should be declared as 'union wait status' *** 1_7_7.309/src/shs.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/18_shs.c 1.7 660) --- 1_7_7.365(w)/src/shs.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/18_shs.c 1.8 660) *************** *** 1,32 **** ! /* ------------------------ SHS.C ----------------------------- */ ! ! /* Secure Hash Algorithm */ ! ! /* ! ! Written 2 September 1992. Peter C. Gutmann. ! This implementation placed in the public domain. ! ! Comments to pgutl@cs.aukuni.ac.nz ! ! Keyed in from: "Applied Cryptography by Bruce Schneier" ! ! by Nick Gammon. ! ! ! Note: include files below are slightly different from the original source ! in order to confirm to the MUSH include files standards. ! */ - #include "copyrite.h" #include "config.h" - #include - #include "shs.h" - #include "confmagic.h" /* The SHS f() functions */ --- 1,25 ---- ! /** ! * \file shs.c ! * ! * \brief The secure hash algorithm. ! * ! * Written 2 September 1992. Peter C. Gutmann. ! * This implementation placed in the public domain. ! * ! * Comments to pgutl@cs.aukuni.ac.nz ! * ! * Keyed in from: "Applied Cryptography by Bruce Schneier" ! * ! * by Nick Gammon. ! * ! * Note: include files below are slightly different from the original source ! * in order to confirm to the MUSH include files standards. */ #include "copyrite.h" #include "config.h" #include #include "shs.h" #include "confmagic.h" /* The SHS f() functions */ *************** *** 112,123 **** /* Initialise the SHS values */ void ! shsInit(shsInfo) ! SHS_INFO *shsInfo; { /* Set the h-vars to their initial values */ - shsInfo->digest[0] = h0init; shsInfo->digest[1] = h1init; shsInfo->digest[2] = h2init; --- 105,117 ---- /* Initialise the SHS values */ + /** Initialize SHS values. + * \param shsInfo pointer to shs data structure. + */ void ! shsInit(SHS_INFO *shsInfo) { /* Set the h-vars to their initial values */ shsInfo->digest[0] = h0init; shsInfo->digest[1] = h1init; shsInfo->digest[2] = h2init; *************** *** 125,143 **** shsInfo->digest[4] = h4init; /* Initialise bit count */ - shsInfo->countLo = shsInfo->countHi = 0; ! } /* end of shsInit */ - /* Perform the SHS transformation. Note that this code, like MD5, seems to break */ - /* some optimizing compilers - it may be necessary to split it into sections, e.g. */ - /* based on the four subrounds */ ! static void shsTransform(SHS_INFO * shsInfo); static void ! shsTransform(SHS_INFO * shsInfo) { LONG W[80], temp; int i; --- 119,137 ---- shsInfo->digest[4] = h4init; /* Initialise bit count */ shsInfo->countLo = shsInfo->countHi = 0; ! } ! static void shsTransform(SHS_INFO *shsInfo); + /* Perform the SHS transformation. Note that this code, like MD5, seems to + * break some optimizing compilers - it may be necessary to split it into + * sections, e.g. based on the four subrounds. + */ static void ! shsTransform(SHS_INFO *shsInfo) { LONG W[80], temp; int i; *************** *** 331,342 **** } /* end of byteReverse */ ! /* Update SHS for a block of data. This code assumes that the buffer size is a multiple */ ! /* of SHS_BLOCKSIZE bytes long, which makes the code a lot more efficient since it does */ ! /* away with the need to handle partial blocks between calls to shsUpdate () */ ! void ! shsUpdate(SHS_INFO * shsInfo, const BYTE * buffer, int count) { /* Update bitcount */ --- 325,340 ---- } /* end of byteReverse */ ! /** Update SHS for a block of data. This code assumes that the buffer ! * size is a multiple of SHS_BLOCKSIZE bytes long, which makes the ! * code a lot more efficient since it does away with the need to ! * handle partial blocks between calls to shsUpdate() ! * \param shsInfo pointer to shs data. ! * \param buffer block of data to update the hash with. ! * \param count size of buffer in bytes. ! */ void ! shsUpdate(SHS_INFO *shsInfo, const BYTE * buffer, int count) { /* Update bitcount */ *************** *** 361,370 **** memcpy(shsInfo->data, buffer, count); ! } /* end of shsUpdate */ void ! shsFinal(SHS_INFO * shsInfo) { int count; LONG lowBitcount = shsInfo->countLo, highBitcount = shsInfo->countHi; --- 359,371 ---- memcpy(shsInfo->data, buffer, count); ! } + /** Finalize the SHS hash. + * \param shsInfo pointer to shs data. + */ void ! shsFinal(SHS_INFO *shsInfo) { int count; LONG lowBitcount = shsInfo->countLo, highBitcount = shsInfo->countHi; *************** *** 411,414 **** if (shsInfo->reverse_wanted) byteReverse(shsInfo->data, SHS_DIGESTSIZE); ! } /* end of shsFinal */ --- 412,415 ---- if (shsInfo->reverse_wanted) byteReverse(shsInfo->data, SHS_DIGESTSIZE); ! } *** 1_7_7.309/src/local.dst Sun, 22 Dec 2002 01:26:12 -0600 dunemush (pennmush/b/19_local.dst 1.11 660) --- 1_7_7.365(w)/src/local.dst Wed, 09 Apr 2003 14:19:24 -0500 dunemush (pennmush/b/19_local.dst 1.15 660) *************** *** 25,31 **** /* Called after all MUSH init is done. */ void ! local_startup() { } --- 25,31 ---- /* Called after all MUSH init is done. */ void ! local_startup(void) { } *************** *** 47,53 **** * back to disk */ void ! local_dump_database() { } --- 47,53 ---- * back to disk */ void ! local_dump_database(void) { } *************** *** 56,62 **** * The log files are still open though. */ void ! local_shutdown() { } --- 56,62 ---- * The log files are still open though. */ void ! local_shutdown(void) { } *************** *** 65,71 **** * consistency checking you require. */ void ! local_dbck() { } --- 65,71 ---- * consistency checking you require. */ void ! local_dbck(void) { } *************** *** 73,79 **** * After the MUSH has done all it's stuff */ void ! local_timer() { } --- 73,79 ---- * After the MUSH has done all it's stuff */ void ! local_timer(void) { } *************** *** 151,153 **** --- 151,225 ---- /* Initiation of objects after a reload or dumping to disk should * be handled in local_dump_database() and local_startup(). */ + + + /* This function is called *before* most standard interaction checks, + * and can override them. You probably want to do as little as possible + * here and do most of the work in local_can_interact_last instead. + * If this returns NOTHING, it means 'go on to more checks' + */ + int + local_can_interact_first(dbref from __attribute__ ((__unused__)), + dbref to __attribute__ ((__unused__)), int type + __attribute__ ((__unused__))) + { + + return NOTHING; + } + + /* This one is called *after* most standard interaction checks. */ + int + local_can_interact_last(dbref from __attribute__ ((__unused__)), + dbref to __attribute__ ((__unused__)), int type + __attribute__ ((__unused__))) + { + /* from is where the message is coming from, in theory. It makes sense + * for sound, but think of it as light rays for visiblity or matching. + * The rays come *from* someone standing in a room, and go *to* the person + * looking around. + */ + + #ifdef NEVER + /* Various examples follow */ + + switch (type) { + case INTERACT_SEE: + /* Someone standing in a room, or walking into a room, or doing + * @verb type stuff that's @bar, @obar, and @abar + + /* Probably a good idea */ + if (See_All(to)) + return 1; + + break; + + case INTERACT_HEAR: + /* People talking */ + + /* Telepathy example. Players who can hear telepathy get @set + * HEAR_TELEPATHY, players currently using telepathy should be + * @set USE_TELEPATHY. */ + + if (has_flag_by_name(from, "USE_TELEPATHY", NOTYPE)) + return has_flag_by_name(to, "HEAR_TELEPATHY", NOTYPE); + + break; + + case INTERACT_MATCH: + /* Matching object names so you can pick them up, go through exits, + etc. */ + + break; + } + + /* Splits the universe in half, half FOO and half not. */ + return (has_flag_by_name(to, "FOO", NOTYPE) == + has_flag_by_name(from, "FOO", NOTYPE)); + + + #endif /* NEVER */ + + /* You want to return NOTHING if you haven't made up your mind */ + return NOTHING; + + } *** 1_7_7.309/src/wiz.c Wed, 12 Mar 2003 12:31:02 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1.1.2.1.1.1.2.2.4 660) --- 1_7_7.365(w)/src/wiz.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1.1.2.1.1.1.2.2.6 660) *************** *** 1201,1208 **** return; } ! nresults = raw_search(executor, args[0], args[1], args[2], args[3], args[4], ! &results, pe_info); if (nresults < 0) { safe_str("#-1", buff, bp); --- 1201,1212 ---- return; } ! if (!strcmp(called_as, "CHILDREN")) ! nresults = raw_search(executor, NULL, "PARENT", args[0], NULL, ! NULL, &results, pe_info); ! else ! nresults = raw_search(executor, args[0], args[1], args[2], args[3], args[4], ! &results, pe_info); if (nresults < 0) { safe_str("#-1", buff, bp); *************** *** 1235,1240 **** --- 1239,1245 ---- mush_free(results, "search_results"); } + enum search_class { S_OWNER, S_TYPE, S_PARENT, S_ZONE, S_FLAG, S_POWER, S_EVAL, S_NAME, S_LFLAG }; *** 1_7_7.309/src/wild.c Mon, 06 Jan 2003 10:30:50 -0600 dunemush (pennmush/b/24_wild.c 1.11.1.1.1.8.1.1.1.4.1.2 660) --- 1_7_7.365(w)/src/wild.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/24_wild.c 1.11.1.1.1.8.1.1.1.4.1.2.1.1 660) *************** *** 1,7 **** ! /* wild.c - wildcard routines * * Written by T. Alexander Popiel, 24 June 1993 ! * Last modified by T. Alexander Popiel, 28 July 2000 * * Thanks go to Andrew Molitor for debugging * Thanks also go to Rich $alz for code to benchmark against --- 1,10 ---- ! /** ! * \file wild.c ! * ! * \brief Wildcard matching routings for PennMUSH * * Written by T. Alexander Popiel, 24 June 1993 ! * Last modified by Javelin, 2002-2003 * * Thanks go to Andrew Molitor for debugging * Thanks also go to Rich $alz for code to benchmark against *************** *** 17,22 **** --- 20,26 ---- * then please feel free to contact the author at * popiel@wolfskeep.com to work out agreeable terms. */ + #include "config.h" #include #include *************** *** 50,59 **** int cs); static char *strip_backslashes(const char *str); ! /* --------------------------------------------------------------------------- ! * quick_wild: do a wildcard match, without remembering the wild data. * * This routine will cause crashes if fed NULLs instead of strings. */ int quick_wild(const char *RESTRICT tstr, const char *RESTRICT dstr) --- 54,67 ---- int cs); static char *strip_backslashes(const char *str); ! /** Do a wildcard match, without remembering the wild data. * * This routine will cause crashes if fed NULLs instead of strings. + * + * \param tstr pattern to match against. + * \param dstr string to check. + * \retval 1 dstr matches the tstr pattern. + * \retval 0 dstr does not match the tstr pattern. */ int quick_wild(const char *RESTRICT tstr, const char *RESTRICT dstr) *************** *** 66,72 **** return quick_wild_new(tstr, dstr, 0); } ! int quick_wild_new(const char *RESTRICT tstr, const char *RESTRICT dstr, int cs) { --- 74,89 ---- return quick_wild_new(tstr, dstr, 0); } ! /** Do a wildcard match, possibly case-sensitive, without memory. ! * ! * This probably crashes if fed NULLs instead of strings, too. ! * ! * \param tstr pattern to match against. ! * \param dstr string to check. ! * \param cs if 1, case-sensitive; if 0, case-insensitive. ! * \retval 1 dstr matches the tstr pattern. ! * \retval 0 dstr does not match the tstr pattern. ! */ int quick_wild_new(const char *RESTRICT tstr, const char *RESTRICT dstr, int cs) { *************** *** 316,326 **** return wild1(s, d, p, wspace, cs); } ! /* --------------------------------------------------------------------------- ! * wild_match: do a wildcard ! * match, remembering the wild data, if wildcard match is done. * * This routine will cause crashes if fed NULLs instead of strings. */ int wild_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs) --- 333,347 ---- return wild1(s, d, p, wspace, cs); } ! /** Wildcard match, possibly case-sensitive, and remember the wild data. * * This routine will cause crashes if fed NULLs instead of strings. + * + * \param s pattern to match against. + * \param d string to check. + * \param cs if 1, case-sensitive; if 0, case-insensitive. + * \retval 1 d matches s. + * \retval 0 d doesn't match s. */ int wild_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs) *************** *** 334,341 **** return wild(s, d, 0, cs); } ! /* --------------------------------------------------------------------------- ! * regexp_match: do a regexp match, remembering the matched subexpressions */ int regexp_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs) --- 355,369 ---- return wild(s, d, 0, cs); } ! /** Regexp match, possibly case-sensitive, and remember matched subexpressions. ! * ! * This routine will cause crashes if fed NULLs instead of strings. ! * ! * \param s regexp to match against. ! * \param d string to check. ! * \param cs if 1, case-sensitive; if 0, case-insensitive. ! * \retval 1 d matches s. ! * \retval 0 d doesn't match s. */ int regexp_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs) *************** *** 406,414 **** } ! /* --------------------------------------------------------------------------- ! * quick_regexp_match: do a regexp match, not caring about saving matched ! * subexpressions. */ int quick_regexp_match(const char *RESTRICT s, const char *RESTRICT d, int cs) --- 434,448 ---- } ! /** Regexp match, possibly case-sensitive, and with no memory. ! * ! * This routine will cause crashes if fed NULLs instead of strings. ! * ! * \param s regexp to match against. ! * \param d string to check. ! * \param cs if 1, case-sensitive; if 0, case-insensitive. ! * \retval 1 d matches s. ! * \retval 0 d doesn't match s. */ int quick_regexp_match(const char *RESTRICT s, const char *RESTRICT d, int cs) *************** *** 448,458 **** } ! /* --------------------------------------------------------------------------- ! * local_wild_match: do either an order comparison or a wildcard match. ! * Ignore match correspondences. * * This routine will cause crashes if fed NULLs instead of strings. */ int local_wild_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs) --- 482,496 ---- } ! /** Either an order comparison or a wildcard match with no memory. * * This routine will cause crashes if fed NULLs instead of strings. + * + * \param s pattern to match against. + * \param d string to check. + * \param cs if 1, case-sensitive; if 0, case-insensitive. + * \retval 1 d matches s. + * \retval 0 d doesn't match s. */ int local_wild_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs) *************** *** 475,484 **** return quick_wild_new(s, d, cs); } ! /* --------------------------------------------------------------------------- ! * wildcard - return 1 if the string has a wildcard character (* or ?) ! * in it, and 0 otherwise. Not used by the wild matching routines, but ! * suitable for outside use. */ int wildcard(const char *s) --- 513,523 ---- return quick_wild_new(s, d, cs); } ! /** Does a string contain a wildcard character (* or ?)? ! * Not used by the wild matching routines, but suitable for outside use. ! * \param s string to check. ! * \retval 1 s contains a * or ? ! * \retval 0 s does not contain a * or ? */ int wildcard(const char *s) *** 1_7_7.309/src/warnings.c Sun, 22 Dec 2002 01:19:31 -0600 dunemush (pennmush/b/25_warnings.c 1.21.1.2 660) --- 1_7_7.365(w)/src/warnings.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/25_warnings.c 1.21.1.3 660) *************** *** 1,6 **** ! ! /* warnings.c - check to make sure rooms and exits are the way they ! * should be. */ #include "config.h" --- 1,10 ---- ! /** ! * \file warnings.c ! * ! * \brief Check topology and messages on PennMUSH objects and give warnings ! * ! * ! */ #include "config.h" *************** *** 47,56 **** typedef long int warn_type; typedef struct a_tcheck tcheck; struct a_tcheck { ! const char *name; ! warn_type flag; }; --- 51,61 ---- typedef long int warn_type; + /** A structure representing a topology warning check. */ typedef struct a_tcheck tcheck; struct a_tcheck { ! const char *name; /**< Name of warning. */ ! warn_type flag; /**< Bitmask of warning. */ }; *************** *** 307,312 **** --- 312,320 ---- } } + /** Set up the default warnings on an object. + * \param player object to set warnings on. + */ void set_initial_warnings(dbref player) { *************** *** 314,319 **** --- 322,335 ---- return; } + /** Set warnings on an object. + * \verbatim + * This implements @warnings obj=warning list + * \endverbatim + * \param player the enactor. + * \param name name of object to set warnings on. + * \param warns list of warnings to set, space-separated. + */ void do_warnings(dbref player, const char *name, const char *warns) { *************** *** 386,392 **** } ! /* Given an object, return a string of warnings on it */ const char * unparse_warnings(dbref thing) { --- 402,411 ---- } ! /** Given an object, return a string of warnings on it. ! * \param thing dbref of object. ! * \return pointer to statically allocated string listing warnings. ! */ const char * unparse_warnings(dbref thing) { *************** *** 463,471 **** } ! /* Loop through all objects and check their topology */ void ! run_topology() { int ndone; for (ndone = 0; ndone < db_top; ndone++) { --- 482,490 ---- } ! /** Loop through all objects and check their topology. */ void ! run_topology(void) { int ndone; for (ndone = 0; ndone < db_top; ndone++) { *************** *** 475,480 **** --- 494,505 ---- } } + /** Wizard command to check all objects. + * \verbatim + * This implements @wcheck/all. + * \endverbatim + * \param player the enactor. + */ void do_wcheck_all(dbref player) { *************** *** 487,493 **** notify(player, T("Warning checks complete.")); } ! /* wcheck on a specific player, by that player */ void do_wcheck_me(dbref player) { --- 512,520 ---- notify(player, T("Warning checks complete.")); } ! /** Check warnings on a specific player by themselves. ! * \param player player checking warnings on their objects. ! */ void do_wcheck_me(dbref player) { *************** *** 503,510 **** } ! /* Called when a player wants to do a check on something. We check for ! * ownership or hasprivs before allowing it */ void do_wcheck(dbref player, const char *name) --- 530,539 ---- } ! /** Check warnings on a specific object. ! * We check for ownership or hasprivs before allowing this. ! * \param player the enactor. ! * \param name name of object to check. */ void do_wcheck(dbref player, const char *name) *** 1_7_7.309/src/version.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/26_version.c 1.8 660) --- 1_7_7.365(w)/src/version.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/26_version.c 1.9 660) *************** *** 1,6 **** ! /* This file defines the @version command. It's all by itself because * we want to rebuild this file at every compilation, so that the * BUILDDATE is correct */ #include "config.h" #include "copyrite.h" --- 1,13 ---- ! /** ! * \file version.c ! * ! * \brief Version. ! * ! * \verbatim ! * This file defines the @version command. It's all by itself because * we want to rebuild this file at every compilation, so that the * BUILDDATE is correct + * \endverbatim */ #include "config.h" #include "copyrite.h" *************** *** 20,28 **** extern time_t start_time; /* from bsd.c */ void do_version(dbref player); void ! do_version(player) ! dbref player; { char buff[BUFFER_LEN]; --- 27,37 ---- extern time_t start_time; /* from bsd.c */ void do_version(dbref player); + /** The version command. + * \param player the enactor. + */ void ! do_version(dbref player) { char buff[BUFFER_LEN]; *** 1_7_7.309/src/utils.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/27_utils.c 1.30.1.1.1.5 660) --- 1_7_7.365(w)/src/utils.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/27_utils.c 1.30.1.1.1.9 660) *************** *** 1,4 **** ! /* utils.c */ #include "copyrite.h" #include "config.h" --- 1,10 ---- ! /** ! * \file utils.c ! * ! * \brief Utility functions for PennMUSH. ! * ! * ! */ #include "copyrite.h" #include "config.h" *************** *** 46,56 **** dbref find_entrance(dbref door); void initialize_mt(void); ! unsigned long genrand_int32(void); ! long genrand_int31(void); ! void init_genrand(unsigned long); ! void init_by_array(unsigned long *, int); ! Malloc_t mush_malloc(size_t size, const char *check) { --- 52,71 ---- dbref find_entrance(dbref door); void initialize_mt(void); ! static unsigned long genrand_int32(void); ! static long genrand_int31(void); ! static void init_genrand(unsigned long); ! static void init_by_array(unsigned long *, int); ! extern int local_can_interact_first(dbref from, dbref to, int type); ! extern int local_can_interact_last(dbref from, dbref to, int type); ! ! /** A malloc wrapper that tracks type of allocation. ! * This should be used in preference to malloc() when possible, ! * to enable memory leak tracing with MEM_CHECK. ! * \param size bytes to allocate. ! * \param check string to label allocation with. ! * \return allocated block of memory or NULL. ! */ Malloc_t mush_malloc(size_t size, const char *check) { *************** *** 65,70 **** --- 80,91 ---- return ptr; } + /** A free wrapper that tracks type of allocation. + * If mush_malloc() gets the memory, mush_free() should free it + * to enable memory leak tracing with MEM_CHECK. + * \param ptr pointer to block of member to free. + * \param check string to label allocation with. + */ void mush_free(Malloc_t RESTRICT ptr, const char *RESTRICT check __attribute__ ((__unused__))) *************** *** 77,91 **** } void parse_attrib(dbref player, char *str, dbref *thing, ATTR **attrib) { - /* takes a string which is of the format / or , - * and returns the dbref of the object, and a pointer to the attribute. - * If no object is specified, then the dbref returned is the player's. - * str is destructively modified. - */ - char *name; /* find the object */ --- 98,116 ---- } + /** Parse object/attribute strings into components. + * This function takes a string which is of the format obj/attr or attr, + * and returns the dbref of the object, and a pointer to the attribute. + * If no object is specified, then the dbref returned is the player's. + * str is destructively modified. This function is probably underused. + * \param player the default object. + * \param str the string to parse. + * \param thing pointer to dbref of object parsed out of string. + * \param attrib pointer to pointer to attribute structure retrieved. + */ void parse_attrib(dbref player, char *str, dbref *thing, ATTR **attrib) { char *name; /* find the object */ *************** *** 103,108 **** --- 128,139 ---- } + /** Given an exit, find the room that is its source through brute force. + * This is used in pathological cases where the exit's own source + * element is invalid. + * \param door dbref of exit to find source of. + * \return dbref of exit's source room, or NOTHING. + */ dbref find_entrance(dbref door) { *************** *** 120,126 **** return NOTHING; } ! /* remove the first occurence of what in list headed by first */ dbref remove_first(dbref first, dbref what) { --- 151,162 ---- return NOTHING; } ! /** Remove the first occurence of what in chain headed by first. ! * This works for contents and exit chains. ! * \param first dbref of first object in chain. ! * \param what dbref of object to remove from chain. ! * \return new head of chain. ! */ dbref remove_first(dbref first, dbref what) { *************** *** 140,145 **** --- 176,187 ---- } } + /** Is an object on a chain? + * \param thing object to look for. + * \param list head of chain to search. + * \retval 1 found thing on list. + * \retval 0 did not find thing on list. + */ int member(dbref thing, dbref list) { *************** *** 152,160 **** } ! /* Return 1 if disallow is inside of from, i.e., if loc(disallow) = from, ! * or loc(loc(disallow)) = from, etc. ! * Actually, it's not recursive any more. */ int recursive_member(dbref disallow, dbref from, int count) --- 194,209 ---- } ! /** Is an object inside another, at any level of depth? ! * That is, we check if disallow is inside of from, i.e., if ! * loc(disallow) = from, or loc(loc(disallow)) = from, etc., with a ! * depth limit of 50. ! * Despite the name of this function, it's not recursive any more. ! * \param disallow interior object to check. ! * \param from check if disallow is inside of this object. ! * \param count depths of nesting checked so far. ! * \retval 1 disallow is inside of from. ! * \retval 0 disallow is not inside of from. */ int recursive_member(dbref disallow, dbref from, int count) *************** *** 174,180 **** return 1; } ! /* Return one if the dbref, or its location, etc. is set unfindable */ int unfindable(dbref thing) { --- 223,233 ---- return 1; } ! /** Is an object or its location unfindable? ! * \param thing object to check. ! * \retval 1 object or location is unfindable. ! * \retval 0 neither object nor location is unfindable. ! */ int unfindable(dbref thing) { *************** *** 193,198 **** --- 246,255 ---- } + /** Reverse the order of a dbref chain. + * \param list dbref at the head of the chain. + * \return dbref at the head of the reversed chain. + */ dbref reverse(dbref list) { *************** *** 224,230 **** */ ! /* Initializing the array with a seed */ void initialize_mt(void) { --- 281,287 ---- */ ! /** Wrapper to choose a seed and initialize the Mersenne Twister PRNG. */ void initialize_mt(void) { *************** *** 283,290 **** static unsigned long mt[N]; /* the array for the state vector */ static int mti = N + 1; /* mti==N+1 means mt[N] is not initialized */ ! /* initializes mt[N] with a seed */ ! void init_genrand(unsigned long s) { mt[0] = s & 0xffffffffUL; --- 340,349 ---- static unsigned long mt[N]; /* the array for the state vector */ static int mti = N + 1; /* mti==N+1 means mt[N] is not initialized */ ! /** initializes mt[N] with a seed. ! * \param a seed value. ! */ ! static void init_genrand(unsigned long s) { mt[0] = s & 0xffffffffUL; *************** *** 299,308 **** } } ! /* initialize by an array with array-length */ ! /* init_key is the array for initializing keys */ ! /* key_length is its length */ ! void init_by_array(unsigned long init_key[], int key_length) { int i, j, k; --- 358,368 ---- } } ! /** initialize by an array with array-length ! * \param init_key the array for initializing keys ! * \param key_length the array's length ! */ ! static void init_by_array(unsigned long init_key[], int key_length) { int i, j, k; *************** *** 338,344 **** } /* generates a random number on [0,0xffffffff]-interval */ ! unsigned long genrand_int32(void) { unsigned long y; --- 398,404 ---- } /* generates a random number on [0,0xffffffff]-interval */ ! static unsigned long genrand_int32(void) { unsigned long y; *************** *** 377,389 **** } /* generates a random number on [0,0x7fffffff]-interval */ ! long genrand_int31(void) { return (long) (genrand_int32() >> 1); } ! /* Based on MUX's RandomINT32() */ long get_random_long(long low, long high) { --- 437,454 ---- } /* generates a random number on [0,0x7fffffff]-interval */ ! static long genrand_int31(void) { return (long) (genrand_int32() >> 1); } ! /** Get a uniform random long between low and high values, inclusive. ! * Based on MUX's RandomINT32() ! * \param low lower bound for random number. ! * \param high upper bound for random number. ! * \return random number between low and high, or 0 or -1 for error. ! */ long get_random_long(long low, long high) { *************** *** 430,435 **** --- 495,502 ---- /* Return an object's name, but for exits, return just the first * component. We expect a valid object. + * \param it dbref of object. + * \return object's short name. */ char * shortname(dbref it) *************** *** 446,454 **** return n; } ! /* Return the absolute room (outermost container) of an object ! * or NOTHING if it's in an invalid object or in an invalid ! * location or AMBIGUOUS if there are too many containers */ dbref absolute_room(dbref it) --- 513,523 ---- return n; } ! /** Return the absolute room (outermost container) of an object. ! * Return NOTHING if it's in an invalid object or in an invalid ! * location or AMBIGUOUS if there are too many containers. ! * \param it dbref of object. ! * \return absolute room of object, NOTHING, or AMBIGUOUS. */ dbref absolute_room(dbref it) *************** *** 468,470 **** --- 537,588 ---- } return room; } + + + /** Can one object interact with/perceive another in a given way? + * This funtion checks to see if 'to' can perceive something from + * 'from'. The types of interactions currently supported include: + * INTERACT_SEE (will light rays from from reach to?), INTERACT_HEAR + * (will sound from from reach to?), and INTERACT_MATCH (can 'to' + * match the name of 'from'). + * \param from object of interaction. + * \param to subject of interaction, attempting to interact with from. + * \param type type of interaction. + * \retval 1 to can interact with from in this way. + * \retval 0 to can not interact with from in this way. + */ + int + can_interact(dbref from, dbref to, int type) + { + int lci; + + /* This shouldn't even be checked for rooms and garbage, but we're + * paranoid. Trying to stop interaction with yourself will not work 99% + * of the time, so we don't allow it anyway. */ + if (IsGarbage(from) || IsGarbage(to)) + return 0; + + if ((from == to) || IsRoom(from) || IsRoom(to)) + return 1; + + /* This function can override standard checks! */ + lci = local_can_interact_first(from, to, type); + if (lci != NOTHING) + return lci; + + /* Standard checks */ + + /* You can interact with the object you are in or any objects + * you're holding. + * You can interact with objects you control, but not + * specifically the other way around + */ + if ((from == Location(to)) || (to == Location(from)) || controls(to, from)) + return 1; + + lci = local_can_interact_last(from, to, type); + if (lci != NOTHING) + return lci; + + return 1; + } *** 1_7_7.309/src/timer.c Sat, 25 Jan 2003 23:35:07 -0600 dunemush (pennmush/b/29_timer.c 1.29.1.7.1.4 660) --- 1_7_7.365(w)/src/timer.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/29_timer.c 1.29.1.7.1.5 660) *************** *** 1,6 **** ! /* timer.c */ ! ! /* Subroutines for timed events */ #include "copyrite.h" #include "config.h" --- 1,10 ---- ! /** ! * \file timer.c ! * ! * \brief Timed events in PennMUSH. ! * ! * ! */ #include "copyrite.h" #include "config.h" *************** *** 59,64 **** --- 63,72 ---- #ifndef WIN32 + /** Handler for HUP signal. + * Do the minimal work here - set a global variable and reload the handler. + * \param x unused. + */ void hup_handler(int x __attribute__ ((__unused__))) { *************** *** 66,71 **** --- 74,83 ---- reload_sig_handler(SIGHUP, hup_handler); } + /** Handler for USR1 signal. + * Do the minimal work here - set a global variable and reload the handler. + * \param x unused. + */ void usr1_handler(int x __attribute__ ((__unused__))) { *************** *** 75,82 **** #endif /* WIN32 */ void ! init_timer() { #ifndef WIN32 install_sig_handler(SIGHUP, hup_handler); --- 87,96 ---- #endif /* WIN32 */ + /** Set up signal handlers. + */ void ! init_timer(void) { #ifndef WIN32 install_sig_handler(SIGHUP, hup_handler); *************** *** 88,99 **** } void ! dispatch() { static int idle_counter = 0; ! /* this routine can be used to poll from intrface.c */ if (hup_triggered) { do_rawlog(LT_ERR, T("SIGHUP received: reloading .txt and .cnf files")); config_file_startup(NULL, 0); --- 102,120 ---- } + /** Handle events that may need handling. + * This routine is polled from bsd.c. At any call, it can handle + * the HUP and USR1 signals. At calls that are 'on the second', + * it goes on to perform regular every-second processing and to + * check whether it's time to do other periodic processes like + * purge, dump, or inactivity checks. + */ void ! dispatch(void) { static int idle_counter = 0; ! /* A HUP reloads configuration and reopens logs */ if (hup_triggered) { do_rawlog(LT_ERR, T("SIGHUP received: reloading .txt and .cnf files")); config_file_startup(NULL, 0); *************** *** 104,109 **** --- 125,131 ---- reopen_logs(); hup_triggered = 0; } + /* A USR1 does a shutdown/reboot */ if (usr1_triggered) { do_reboot(NOTHING, 0); /* We don't return from this */ usr1_triggered = 0; /* But just in case */ *************** *** 173,178 **** --- 195,204 ---- int cpu_limit_warning_sent = 0; #if defined(HAS_ITIMER) + /** Handler for PROF signal. + * Do the minimal work here - set a global variable and reload the handler. + * \param signo unused. + */ void signal_cpu_limit(int signo __attribute__ ((__unused__))) { *************** *** 189,194 **** --- 215,222 ---- #endif int timer_set = 0; + /** Start the cpu timer (before running a command). + */ void start_cpu_timer(void) { *************** *** 222,227 **** --- 250,257 ---- #endif } + /** Reset the cpu timer (after running a command). + */ void reset_cpu_timer(void) { *** 1_7_7.309/src/privtab.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/31_privtab.c 1.6 660) --- 1_7_7.365(w)/src/privtab.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/31_privtab.c 1.7 660) *************** *** 1,5 **** ! /* privtab.c */ ! /* Functions to work with privilege tables */ #include "copyrite.h" #include "config.h" --- 1,12 ---- ! /** ! * \file privtab.c ! * ! * \brief Privilege tables for PennMUSH. ! * ! * A privilege table is a respresentation of different privilege ! * flags with associated names, characters, and bitmasks. ! * ! */ #include "copyrite.h" #include "config.h" *************** *** 12,26 **** #include "confmagic.h" ! /* Given a privs table, a string, and an original set of privileges, * return a modified set of privileges by applying the privs in the ! * string to the original set of privileges */ int ! string_to_privs(table, str, origprivs) ! PRIV *table; ! const char *str; ! long int origprivs; { PRIV *c; long int yes = 0; --- 19,35 ---- #include "confmagic.h" ! /** Convert a string to a set of privilege bits, masked by an original set. ! * Given a privs table, a string, and an original set of privileges, * return a modified set of privileges by applying the privs in the ! * string to the original set of privileges. ! * \param table pointer to a privtab. ! * \param str a space-separated string of privilege names to apply. ! * \param origprivs the original privileges. ! * \return a privilege bitmask. */ int ! string_to_privs(PRIV *table, const char *str, long int origprivs) { PRIV *c; long int yes = 0; *************** *** 59,73 **** return ((origprivs | yes) & ~no); } ! /* Given a privs table, a string of letters, and an original set of privileges, * return a modified set of privileges by applying the privs in the ! * letters to the original set of privileges */ int ! letter_to_privs(table, str, origprivs) ! PRIV *table; ! const char *str; ! long int origprivs; { PRIV *c; long int yes = 0, no = 0; --- 68,84 ---- return ((origprivs | yes) & ~no); } ! /** Convert a letter string to a set of privilege bits, masked by an original set. ! * Given a privs table, a letter string, and an original set of privileges, * return a modified set of privileges by applying the privs in the ! * string to the original set of privileges. ! * \param table pointer to a privtab. ! * \param str a string of privilege letters to apply. ! * \param origprivs the original privileges. ! * \return a privilege bitmask. */ int ! letter_to_privs(PRIV *table, const char *str, long int origprivs) { PRIV *c; long int yes = 0, no = 0; *************** *** 97,107 **** return ((origprivs | yes) & ~no); } ! /* Given a table and a bitmask, return a privs string (static allocation) */ const char * ! privs_to_string(table, privs) ! PRIV *table; ! int privs; { PRIV *c; static char buf[BUFFER_LEN]; --- 108,120 ---- return ((origprivs | yes) & ~no); } ! /** Given a table and a bitmask, return a privs string (static allocation). ! * \param table pointer to a privtab. ! * \param privs bitmask of privileges. ! * \return statically allocated space-separated string of priv names. ! */ const char * ! privs_to_string(PRIV *table, int privs) { PRIV *c; static char buf[BUFFER_LEN]; *************** *** 121,132 **** } ! /* Given a table and a bitmask, return a privs letter string ! * (static allocation) */ const char * ! privs_to_letters(table, privs) ! PRIV *table; ! int privs; { PRIV *c; static char buf[BUFFER_LEN]; --- 134,146 ---- } ! /** Given a table and a bitmask, return a privs letter string (static allocation). ! * \param table pointer to a privtab. ! * \param privs bitmask of privileges. ! * \return statically allocated string of priv letters. ! */ const char * ! privs_to_letters(PRIV *table, int privs) { PRIV *c; static char buf[BUFFER_LEN]; *** 1_7_7.309/src/strutil.c Wed, 12 Feb 2003 17:02:38 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1.1.1.1.1.1.21.1.4 660) --- 1_7_7.365(w)/src/strutil.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1.1.1.1.1.1.21.1.2.1.2.1.2 660) *************** *** 1,7 **** - /* strutil.c */ - - /* String utilities */ #include "config.h" #include --- 1,11 ---- + /** + * \file strutil.c + * + * \brief String utilities for PennMUSH. + * + * + */ #include "config.h" #include *************** *** 20,37 **** #include "memcheck.h" #endif #include "mymalloc.h" - #include "confmagic.h" - #include "log.h" char *next_token(char *str, char sep); static int format_long(long val, char *buff, char **bp, int maxlen); ! char * mush_strndup(const char *src, size_t len, const char *check) __attribute_malloc__; /* Duplicate the first len characters of s */ ! char *mush_strndup(const char *src, size_t len, const char *check) { char *copy; size_t rlen = strlen(src); --- 24,40 ---- #include "memcheck.h" #endif #include "mymalloc.h" #include "log.h" + #include "confmagic.h" char *next_token(char *str, char sep); static int format_long(long val, char *buff, char **bp, int maxlen); ! static char * mush_strndup(const char *src, size_t len, const char *check) __attribute_malloc__; /* Duplicate the first len characters of s */ ! static char *mush_strndup(const char *src, size_t len, const char *check) { char *copy; size_t rlen = strlen(src); *************** *** 48,53 **** --- 51,63 ---- return copy; } + /** Our version of strdup, with memory leak checking. + * This should be used in preference to strdup, and in assocation + * with mush_free(). + * \param s string to duplicate. + * \param check label for memory checking. + * \return newly allocated copy of s. + */ char * mush_strdup(const char *s, const char *check __attribute__ ((__unused__))) { *************** *** 69,75 **** return x; } ! /* Return the string chopped at lim characters */ char * chopstr(const char *str, size_t lim) { --- 79,89 ---- return x; } ! /** Return the string chopped at lim characters. ! * \param str string to chop. ! * \param lim character at which to chop the string. ! * \return statically allocated buffer with chopped string. ! */ char * chopstr(const char *str, size_t lim) { *************** *** 84,89 **** --- 98,110 ---- #ifndef HAS_STRCASECMP #ifndef WIN32 + /** strcasecmp for systems without it. + * \param s1 one string to compare. + * \param s2 another string to compare. + * \retval -1 s1 is less than s2. + * \retval 0 s1 equals s2 + * \retval 1 s1 is greater than s2. + */ int strcasecmp(const char *s1, const char *s2) { *************** *** 93,98 **** --- 114,127 ---- return (DOWNCASE(*s1) - DOWNCASE(*s2)); } + /** strncasecmp for systems without it. + * \param s1 one string to compare. + * \param s2 another string to compare. + * \param n number of characters to compare. + * \retval -1 s1 is less than s2. + * \retval 0 s1 equals s2 + * \retval 1 s1 is greater than s2. + */ int strncasecmp(const char *s1, const char *s2, size_t n) { *************** *** 107,112 **** --- 136,148 ---- #endif /* !WIN32 */ #endif /* !HAS_STRCASECMP */ + /** Does string begin with prefix? + * This comparison is case-insensitive. + * \param string to check. + * \param prefix to check against. + * \retval 1 string begins with prefix. + * \retval 0 string does not begin with prefix. + */ int string_prefix(const char *RESTRICT string, const char *RESTRICT prefix) { *************** *** 117,123 **** return *prefix == '\0'; } ! /* accepts only nonempty matches starting at the beginning of a word */ const char * string_match(const char *src, const char *sub) { --- 153,163 ---- return *prefix == '\0'; } ! /** Match a substring at the start of a word in a string, case-insensitively. ! * \param src a string of words to match against. ! * \param sub a prefix to match against the start of a word in string. ! * \return pointer into src at the matched word, or NULL. ! */ const char * string_match(const char *src, const char *sub) { *************** *** 137,145 **** src++; } } ! return 0; } char * strupper(const char *s) { --- 177,189 ---- src++; } } ! return NULL; } + /** Return an uppercased version of a string in a static buffer. + * \param s string to uppercase. + * \return pointer to a static buffer containing the uppercased version. + */ char * strupper(const char *s) { *************** *** 156,161 **** --- 200,209 ---- return buf1; } + /** Return a lowercased version of a string in a static buffer. + * \param s string to lowercase. + * \return pointer to a static buffer containing the lowercased version. + */ char * strlower(const char *s) { *************** *** 172,187 **** return buf1; } char * upcasestr(char *s) { - /* modifies a string in-place to be upper-case */ char *p; for (p = s; p && *p; p++) *p = UPCASE(*p); return s; } int safe_accent(const char *RESTRICT base, const char *RESTRICT tmplate, size_t len, char *buff, char **bp) --- 220,247 ---- return buf1; } + /** Modify a string in-place to uppercase. + * \param s string to uppercase. + * \return s, now modified to be all uppercase. + */ char * upcasestr(char *s) { char *p; for (p = s; p && *p; p++) *p = UPCASE(*p); return s; } + /** Safely add an accented string to a buffer. + * \param base base string to which accents are applied. + * \param tmplate accent template string. + * \param len length of base (and tmplate). + * \param buff pointer to buffer to store accented string. + * \param bp pointer to pointer to insertion point in buff. + * \retval 1 failed to store entire string. + * \retval 0 success. + */ int safe_accent(const char *RESTRICT base, const char *RESTRICT tmplate, size_t len, char *buff, char **bp) *************** *** 518,523 **** --- 578,590 ---- return len - clen + /** Safely store a formatted string into a buffer. + * This is a better way to do safe_str(tprintf(fmt,...),buff,bp) + * \param buff buffer to store formatted string. + * \param bp pointer to pointer to insertion point in buff. + * \param fmt format string. + * \return number of characters left over, or 0 for success. + */ int safe_format(char *buff, char **bp, const char *RESTRICT fmt, ...) { *************** *** 542,573 **** APPEND_TO_BUF; } int safe_integer(int i, char *buff, char **bp) { - /* Adds a int to a string, being careful not to overflow buffer */ return format_long(i, buff, bp, BUFFER_LEN); } int safe_uinteger(unsigned int i, char *buff, char **bp) { - /* Adds an unsigned int to a string */ return safe_str(unparse_uinteger(i), buff, bp); } int safe_integer_sbuf(int i, char *buff, char **bp) { - /* Adds a int to a string, being careful not to overflow buffer */ return format_long(i, buff, bp, SBUF_LEN); } int safe_dbref(dbref d, char *buff, char **bp) { - /* Adds a dbref to a string, being careful not to overflow buffer and - avoiding writing partial dbrefs */ char *saved = *bp; if (safe_chr('#', buff, bp)) { *bp = saved; --- 609,661 ---- APPEND_TO_BUF; } + /** Safely store an integer into a buffer. + * \param i integer to store. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \return 0 on success, non-zero on failure. + */ int safe_integer(int i, char *buff, char **bp) { return format_long(i, buff, bp, BUFFER_LEN); } + /** Safely store an unsigned integer into a buffer. + * \param i integer to store. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \return 0 on success, non-zero on failure. + */ int safe_uinteger(unsigned int i, char *buff, char **bp) { return safe_str(unparse_uinteger(i), buff, bp); } + /** Safely store an unsigned integer into a short buffer. + * \param i integer to store. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \return 0 on success, non-zero on failure. + */ int safe_integer_sbuf(int i, char *buff, char **bp) { return format_long(i, buff, bp, SBUF_LEN); } + /** Safely store a dbref into a buffer. + * Don't store partial dbrefs. + * \param d dbref to store. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \retval 0 success. + * \retval 1 failure. + */ int safe_dbref(dbref d, char *buff, char **bp) { char *saved = *bp; if (safe_chr('#', buff, bp)) { *bp = saved; *************** *** 581,615 **** } int safe_number(NVAL n, char *buff, char **bp) { - /* Adds a number to a string, being careful not to overflow buffer */ const char *c; APPEND_ARGS; - c = unparse_number(n); APPEND_TO_BUF; } int safe_str(const char *c, char *buff, char **bp) { - /* copies a string into a buffer, making sure there's no overflow. */ APPEND_ARGS; - if (!c || !*c) return 0; - APPEND_TO_BUF; - } int safe_str_space(const char *c, char *buff, char **bp) { - /* copies a string into a buffer, making sure there's no overflow. - * puts it in quotes if there's space in it. */ APPEND_ARGS; char *saved = *bp; --- 669,716 ---- } + /** Safely store a number into a buffer. + * \param n number to store. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \retval 0 success. + * \retval 1 failure. + */ int safe_number(NVAL n, char *buff, char **bp) { const char *c; APPEND_ARGS; c = unparse_number(n); APPEND_TO_BUF; } + /** Safely store a string into a buffer. + * \param c string to store. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \retval 0 success. + * \retval 1 failure. + */ int safe_str(const char *c, char *buff, char **bp) { APPEND_ARGS; if (!c || !*c) return 0; APPEND_TO_BUF; } + /** Safely store a string into a buffer, quoting it if it contains a space. + * \param c string to store. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \retval 0 success. + * \retval 1 failure. + */ int safe_str_space(const char *c, char *buff, char **bp) { APPEND_ARGS; char *saved = *bp; *************** *** 629,634 **** --- 730,744 ---- } + /** Safely store a string of known length into a buffer + * This is an optimization of safe_str for when we know the string's length. + * \param s string to store. + * \param len length of s. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \retval 0 success. + * \retval 1 failure. + */ int safe_strl(const char *s, int len, char *buff, char **bp) { *************** *** 651,656 **** --- 761,774 ---- return len - clen; } + /** Safely fill a string with a given character a given number of times. + * \param x character to fill with. + * \param n number of copies of character to fill in. + * \param buff buffer to store into. + * \param bp pointer to pointer to insertion point in buff. + * \retval 0 success. + * \retval 1 failure (filled to end of buffer, but more was requested). + */ int safe_fill(char x, size_t n, char *buff, char **bp) { *************** *** 682,725 **** /* skip_space and seek_char are essentially right out of the 2.0 code */ char * skip_space(const char *s) { - /* returns pointer to the next non-space char in s, or NULL if s == NULL - * or *s == NULL or s has only spaces. - */ - char *c = (char *) s; while (c && *c && isspace((unsigned char) *c)) c++; return c; } char * seek_char(const char *s, char c) { - /* similar to strchr(). returns a pointer to the next char in s which - * matches c, or a pointer to the terminating null at the end of s. - */ - char *p = (char *) s; while (p && *p && (*p != c)) p++; return p; } int u_strlen(const unsigned char *s) { return strlen((const char *) s); } unsigned char * u_strcpy(unsigned char *target, const unsigned char *source) { return (unsigned char *) strcpy((char *) target, (const char *) source); } char * replace_string(const char *RESTRICT old, const char *RESTRICT newbit, const char *RESTRICT string) --- 800,862 ---- /* skip_space and seek_char are essentially right out of the 2.0 code */ + /** Return a pointer to the next non-space character in a string, or NULL. + * We return NULL if given a null string or a string with only spaces. + * \param s string to search for non-spaces. + * \return pointer to next non-space character in s. + */ char * skip_space(const char *s) { char *c = (char *) s; while (c && *c && isspace((unsigned char) *c)) c++; return c; } + /** Return a pointer to next char in s which matches c, or to the terminating + * null at the end of s. + * \param s string to search. + * \param c character to search for. + * \return pointer to next occurence of c or to the end of s. + */ char * seek_char(const char *s, char c) { char *p = (char *) s; while (p && *p && (*p != c)) p++; return p; } + /** Unsigned char version of strlen. + * \param s string. + * \return length of s. + */ int u_strlen(const unsigned char *s) { return strlen((const char *) s); } + /** Unsigned char version of strcpy. Equally dangerous. + * \param target destination for copy. + * \param source string to copy. + * \return pointer to copy. + */ unsigned char * u_strcpy(unsigned char *target, const unsigned char *source) { return (unsigned char *) strcpy((char *) target, (const char *) source); } + /** Search for all copies of old in string, and replace each with newbit. + * The replaced string is returned, newly allocated. + * \param old string to find. + * \param newbit string to replace old with. + * \param string string to search for old in. + * \return allocated string with replacements performed. + */ char * replace_string(const char *RESTRICT old, const char *RESTRICT newbit, const char *RESTRICT string) *************** *** 754,759 **** --- 891,904 ---- /* Replace two tokens in a string at once. All-around better than calling * replace_string() twice */ + /** Search for all copies of two old strings, and replace each with a + * corresponding newbit. + * The replaced string is returned, newly allocated. + * \param old array of two strings to find. + * \param newbits array of two strings to replace old with. + * \param string string to search for old. + * \return allocated string with replacements performed. + */ char * replace_string2(const char *old[2], const char *newbits[2], const char *RESTRICT string) *************** *** 800,805 **** --- 945,956 ---- } + /** Given a string and a separator, trim leading and trailing spaces + * if the separator is a space. This destructively modifies the string. + * \param str string to trim. + * \param sep separator character. + * \return pointer to (trimmed) string. + */ char * trim_space_sep(char *str, char sep) { *************** *** 819,824 **** --- 970,981 ---- return str; } + /** Find the start of the next token in a string. + * If the separator is a space, we magically skip multiple spaces. + * \param str the string. + * \param sep the token separator character. + * \return pointer to start of next token in string. + */ char * next_token(char *str, char sep) { *************** *** 836,849 **** return str; } char * split_token(char **sp, char sep) { - /* Get next token from string as a null-terminated string, depending - * on the separator character. This destructively modifies the string. - * Code from 2.0. - */ - char *str, *save; save = str = *sp; --- 993,1009 ---- return str; } + /** Split out the next token from a string, destructively modifying it.