This is patch06 to PennMUSH 1.8.1. After applying this patch, you will have version 1.8.1p6 To apply this patch, save it to a file in your top-level MUSH directory, and do the following: patch -p1 < 1.8.1-patch06 make clean make install If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1', not just 'patch -p1'. *** You may get failed hunks for files with names like test/xxxx.pl *** You should be able to safely ignore these. 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: * pcre updated to 6.4. This includes such nifty features and named captures. [SW] * NT_TCP code has been removed from the server. It was deemed less useful than keeping the networking code unitary and the ability to @shutdown/reboot. Patch by Nathan Baum. Flags: * New LOUD flag (admin-settable) causes an object to bypass speech (including chat) and interaction locks. Admin and others with Pemit_All no longer pass interaction locks automatically unless they are also LOUD. Patch by Cheetah@M*U*S*H. Locks: * New DBREFLIST^ lock key checks to see if the enactor appears in a list of dbrefs/objids stored on an attribute of the object, simplifying a very common need. Suggested by NightDaemon@M*U*S*H, patch by Cheetah@M*U*S*H. Powers: * Many_Attribs power allows an object to have more attributes than the max_attrs_per_obj parameter. Suggested by Nymeria@M*U*S*H. Functions: * decompose() now decomposes ansi codes into ansi() calls. Patch by Sketch@M*U*S*H. * mapsql() efficiently feeds sql query results to an attribute. [GM] * wildgrep()/wildgrepi() are versions of grep()/grepi() that now take wildcard patterns instead of substrings. [SW] * regmatch()/regedit() now has a more flexible syntax for assigning subpatterns to %q-registers. [SW] * decompose() no longer inserts an initial backslash all the time. Suggested by Trinsec@M*U*S*H. * ordinal() returns the spelled-out ordinal form of an integer. Suggested by Malone@HavenMUSH. Minor Changes: * Font size tags (for pueblo) are not quite so huge for room names. * The /noeval switch for @command is now called /noparse. Patch by Nathan Baum. * hints/cygwin.sh has been removed, as no hints were needed to build on cygwin when tested with 1.5.19-4. win32/README.cygwin has been added to document the cygwin build process. * Added hints/darwin-fink.sh and README.OSX. [SW] Fixes: * Track_Money objects with No_Pay still reported coins lost to queue costs, even though they didn't pay them. Report by Cheetah@M*U*S*H. [GM] * Help fixes by Trinsec@M*U*S*H, Cheetah@M*U*S*H. * Various %c weirdnesses fixed by Cheetah@M*U*S*H. * Better message in restart when mush.cnf not found by Talvo@M*U*S*H. * @alias provides more specific error messages for invalid aliases of various sorts. Suggested by Intrevis@M*U*S*H. * Function restriction localize now appears in @function info output. Better error messages when attempting to use invalid function restrictions. Reported by Trinsec@M*U*S*H. * Linting of warnings. [SW] * Command and function names may now really start with punctuation characters. Reported by Talvo@M*U*S*H. * Fixes from 1.8.0p11. Prereq: 1.8.1p5 *** 1_8_1.216/Patchlevel Sun, 29 Jan 2006 11:43:57 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.49 600) --- 1_8_1.274(w)/Patchlevel Sat, 25 Feb 2006 15:01:41 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.50 600) *************** *** 1,2 **** Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.8.1p5 --- 1,2 ---- Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.8.1p6 *** 1_8_1.216/game/txt/hlp/penntop.hlp Sat, 27 Aug 2005 12:06:47 -0500 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.12.1.1.1.1.1.8.1.11.1.1.1.3.2.1.1.1.1.1.1.3 600) --- 1_8_1.274(w)/game/txt/hlp/penntop.hlp Mon, 06 Feb 2006 15:42:14 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.12.1.1.1.1.1.8.1.11.1.1.1.3.2.1.1.1.1.1.1.1.1.1.1.2 600) *************** *** 160,165 **** --- 160,168 ---- Note that the choice of which ancestor to look up is based on the type of the *child* object, as is the check of the ORPHAN flag. + Also note that ancestors are *not* checked for $-commands or + ^-commands; you should use the master room for global commands, + instead. See also: PARENTS, ORPHAN & ANONYMOUS ATTRIBUTES *************** *** 439,445 **** See also: MONEY, money(), score & CREDITS Maintainer: Javelin ! Developers: Talek [TAP], Raevnos [SW], Ervin Hearn III [EEH] Porters: Nick Gammon [NJG] (win32), Dan Williams [DW] (MacOS), Sylvia (OS/2) Former developers: Rhyanna [RLM], Trivian [TN], Halatir [LdW] --- 442,449 ---- See also: MONEY, money(), score & CREDITS Maintainer: Javelin ! Developers: Talek [TAP], Raevnos [SW], Ervin Hearn III [EEH], ! Greg Millam [GM] Porters: Nick Gammon [NJG] (win32), Dan Williams [DW] (MacOS), Sylvia (OS/2) Former developers: Rhyanna [RLM], Trivian [TN], Halatir [LdW] *************** *** 948,956 **** parent of #101, which is the parent of #102, object #102 checks itself, #101, and #100 for attributes. Attributes are checked on the object itself first, followed by its parent, followed by that parent's parent, ! and so forth. There is a (configurable) maximum number of ancestors ! an object may have; the default is 10. ! (continued in help parents2) & PARENTS2 --- 952,964 ---- parent of #101, which is the parent of #102, object #102 checks itself, #101, and #100 for attributes. Attributes are checked on the object itself first, followed by its parent, followed by that parent's parent, ! and so forth. There is a (configurable) maximum length of the parent ! chain for an object; the default is 10. ! ! After the parent chain is exhausted, the type-specific ancestor is ! also checked in similar fashion. See 'help ANCESTORS' for more about ! ancestors. ! (continued in help parents2) & PARENTS2 *************** *** 1011,1017 **** Parent-object $-command checking is at its most efficient when there are few or no attributes on the child. Also, each additional level ! of parents further reduces efficiency. If you are "mass-marketing" your objects, you can create blank copies, and @parent those copies to a template object. You can then customize --- 1019,1026 ---- Parent-object $-command checking is at its most efficient when there are few or no attributes on the child. Also, each additional level ! of parents further reduces efficiency. Finally, note that ancestors ! are *not* checked for $-commands. If you are "mass-marketing" your objects, you can create blank copies, and @parent those copies to a template object. You can then customize *************** *** 1020,1026 **** that you want to make impossible to read, it's safe to allow the purchasers of your object to @chown their copy. ! See also: @parent, $-COMMANDS, ATTRIBUTES & POWERS LIST Powers can be granted only by wizards, using the @power command. Powers cannot be granted to guest characters or players who are set --- 1029,1035 ---- that you want to make impossible to read, it's safe to allow the purchasers of your object to @chown their copy. ! See also: @parent, $-COMMANDS, ATTRIBUTES, ANCESTORS & POWERS LIST Powers can be granted only by wizards, using the @power command. Powers cannot be granted to guest characters or players who are set *************** *** 1040,1045 **** --- 1049,1055 ---- link_anywhere Can @link an exit to anyplace. login Not subject to login restrictions. long_fingers Can do things remotely, like "get". + many_attribs Can exceed max_attrs_per_obj. (continued in help powers2) & POWERS2 *************** *** 1272,1277 **** --- 1282,1295 ---- matches "sense and sensibility" and "response and responsibility", but not "sense and responsibility". + You can give names to subpatterns and refer to them that way instead of using + numbers. + + (?Psubexpr) (Note: Literal <>'s) is a named capture, and + (?P=NAME) refers back to it. The above pattern might be written: + + (?Psens|respons)e and (?P=word)ibility + (Cont'd in help regexp syntax7) & regexp syntax7 An assertion is a test on the characters following or *** 1_8_1.216/game/txt/hlp/pennfunc.hlp Fri, 13 Jan 2006 22:39:18 -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.1.1.1.1.1.1.26.1.1.1.1.1.1.1.18 600) --- 1_8_1.274(w)/game/txt/hlp/pennfunc.hlp Fri, 24 Feb 2006 20:17:28 -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.1.1.1.1.1.1.26.1.1.1.1.1.1.1.23.1.2.1.1 600) *************** *** 61,73 **** defined via the @function command. & Attribute functions ! All these functions access attributes on an object. ! aposs() default() edefault() eval() filter() ! filterbool() fold() foreach() get() grep() ! grepi() lattr() nattr() obj() poss() ! regrep() regrepi() subj() udefault() ufun() ! uldefault() ulocal() v-function xget() zfun() See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES & Bitwise functions --- 61,74 ---- defined via the @function command. & Attribute functions ! The primary purpose of these functions is to access information ! stored in attributes on objects. ! aposs() attrib_set() default() edefault() eval() ! get() grep() grepi() lattr() nattr() ! obj() poss() regrep() regrepi() subj() ! udefault() ufun() uldefault() ulocal() v-function ! wildgrep() wildgrepi() xget() zfun() See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES & Bitwise functions *************** *** 141,154 **** can take an arbitrary argument to specify what delimits list elements; if none is provided, a space is used by default. ! element() elements() extract() first() grab() ! graball() index() insert() itemize() items() ! iter() last() ldelete() map() match() ! matchall() member() mix() munge() namegrab() ! namegraball() remove() replace() rest() revwords() ! setdiff() setinter() setunion() shuffle() sort() ! sortby() sortkey() splice() step() table() ! wordpos() words() See also: LISTS & Math functions --- 142,155 ---- can take an arbitrary argument to specify what delimits list elements; if none is provided, a space is used by default. ! element() elements() extract() filter() filterbool() ! first() fold() grab() graball() index() ! insert() itemize() items() iter() last() ! ldelete() map() match() matchall() member() ! mix() munge() namegrab() namegraball() remove() ! replace() rest() revwords() setdiff() setinter() ! setunion() shuffle() sort() sortby() sortkey() ! splice() step() table() wordpos() words() See also: LISTS & Math functions *************** *** 187,193 **** database to which the MUSH is connected, if SQL support is available and enabled. ! sql() sqlescape() & String functions String functions take at least one string and return a transformed --- 188,194 ---- database to which the MUSH is connected, if SQL support is available and enabled. ! sql() sqlescape() mapsql() & String functions String functions take at least one string and return a transformed *************** *** 197,209 **** before() brackets() capstr() case() caseall() cat() center() comp() chr() decrypt() delete() digest() edit() encrypt() escape() ! if() ifelse() lcstr() left() lit() ! ljust() merge() mid() ord() pos() ! regedit() lpos() regmatch() repeat() reverse() ! right() rjust() scramble() secure() sha0() ! space() spellnum() squish() strcat() strinsert() ! stripaccents()stripansi() strlen() strmatch() strreplace() ! switch() trim() ucstr() wrap() See also: STRINGS & Time functions --- 198,211 ---- before() brackets() capstr() case() caseall() cat() center() comp() chr() decrypt() delete() digest() edit() encrypt() escape() ! if() ifelse() foreach() lcstr() left() ! lit() ljust() merge() mid() ord() ! ordinal() pos() regedit() lpos() regmatch() ! repeat() reverse() right() rjust() scramble() ! secure() sha0() space() spellnum() squish() ! strcat() strinsert() stripaccents()stripansi() strlen() ! strmatch() strreplace() switch() trim() ucstr() ! wrap() See also: STRINGS & Time functions *************** *** 216,222 **** & Utility functions These functions don't quite fit into any other category. ! allof() ansi() atrlock() attrib_set() beep() checkpass() clone() create() die() dig() firstof() functions() isdbref() isint() isnum() isword() localize() link() list() lnum() --- 218,224 ---- & Utility functions These functions don't quite fit into any other category. ! allof() ansi() atrlock() beep() checkpass() clone() create() die() dig() firstof() functions() isdbref() isint() isnum() isword() localize() link() list() lnum() *************** *** 876,884 **** parse-able characters to recreate exactly after one parsing. It takes care of multiple spaces, '%r's, and '%t's. ! Someday, perhaps, it will also escape ansi() in a nice way. ! ! See also: @decompile2 & DECRYPT() decrypt(, ) --- 878,884 ---- parse-able characters to recreate exactly after one parsing. It takes care of multiple spaces, '%r's, and '%t's. ! See also: @decompile2, escape(), secure() & DECRYPT() decrypt(, ) *************** *** 1142,1148 **** or used as an attribute for an object (like the description of a mail message object). Since the function preserves the original string, it is, in most cases, a better choice than SECURE(). ! & EVAL() & GET_EVAL() eval(, ) --- 1142,1149 ---- or used as an attribute for an object (like the description of a mail message object). Since the function preserves the original string, it is, in most cases, a better choice than SECURE(). ! ! See also: decompose(), secure() & EVAL() & GET_EVAL() eval(, ) *************** *** 1477,1499 **** See also: match(), matchall(), grab(), regmatch() & GREP() & REGREP() ! grep(,,) regrep(,,) ! grepi(,,) regrepi(,,) These functions return a list of attributes on containing ! (or matching ). is a wildcard pattern for ! attribute names to search. ! ! The list returned is similar to that returned by @grep/list ! /= Parsing _does_ occur before this function is invoked. Therefore, ! "special" characters will need to be escaped out. In grep(), ! is NOT wildcard matched. ! grep()/regrep() are case-sensitive. grepi()/regrepi() are case-insensitive. & GT() gt(,) --- 1478,1500 ---- See also: match(), matchall(), grab(), regmatch() & GREP() & REGREP() ! grep(,,) ! wildgrep(,,) regrep(,,) ! grepi(,,) regrepi(,,) + wildgrepi(,,) These functions return a list of attributes on containing ! , matching the wildcard , or matching the regular ! expression . is a wildcard pattern for attribute ! names to search. Parsing _does_ occur before this function is invoked. Therefore, ! "special" characters will need to be escaped out. ! grep()/wildgrep()/regrep() are case-sensitive. ! grepi()/wildgrepi()/regrepi() are case-insensitive. & GT() gt(,) *************** *** 3003,3016 **** The part of that matches the is replaced by the evaluated , with $ in expanded to the corresponding matching sub-expression of , with $0 the entire ! matched section. regedit() only replaces the first match. ! regeditall() replaces all matches. The versions ending in i are ! case insensitive. The argument is evaluated once for ! each match, allowing for more complex transformations than is ! possible with straight replacement. Example: ! > say regedit(this test is the best string, (.)est, $1rash) You say "this trash is the best string" > say regeditall(this test is the best string, (.)est, [capstr($1)]rash) You say "this Trash is the Brash string" --- 3004,3019 ---- The part of that matches the is replaced by the evaluated , with $ in expanded to the corresponding matching sub-expression of , with $0 the entire ! matched section. If you use named sub-expressions (?Psubexpr), they are ! referred with with $ (Note that the <>'s are literal). ! ! regedit() only replaces the first match. regeditall() replaces all matches. ! The versions ending in i are case insensitive. The ! argument is evaluated once for each match, allowing for more complex ! transformations than is possible with straight replacement. Example: ! > say regedit(this test is the best string, (?P.)est, $rash) You say "this trash is the best string" > say regeditall(this test is the best string, (.)est, [capstr($1)]rash) You say "this Trash is the Brash string" *************** *** 3028,3044 **** If is specified, there is a side-effect: any parenthesized substrings within the regular expression will be set ! into the specified local registers, in the order they were specified ! in the list. can be a list of one through nine numbers. ! If the specified register is -1, the substring is not copied into a ! register. Under regmatchi, case of the substring may be modified. ! For example, in regmatch( cookies=30 , (.+)=(\[0-9\]*) ) (note use of escaping for MUSH parser), then the 0th substring matched is 'cookies=30', the 1st substring is 'cookies', and the 2nd ! substring is '30'. If is '0 3 5', then %q0 will become "cookies=30", %q3 will become "cookies", and %q5 will become "30". ! If was '0 -1 5', then the "cookies" substring would simply be discarded. See 'help regexp syntax' for an explanation of regular expressions. --- 3031,3050 ---- If is specified, there is a side-effect: any parenthesized substrings within the regular expression will be set ! into the specified local registers. The syntax for this is X:Y, where ! X is the number (0 is the entire matched text) or name of the substring, ! and Y is the q-register to save it in. If X: isn't given, the nth substring ! based on the register's position in the list minus one is used. The first ! element will have the complete matched text, the second the first substring, ! and so on. This is to maintain compatibility with old code; it's recommended ! for new uses that the X:Y syntax be used. ! For example, in regmatch( cookies=30 , (.+)=(\[0-9\]*) ) (note use of escaping for MUSH parser), then the 0th substring matched is 'cookies=30', the 1st substring is 'cookies', and the 2nd ! substring is '30'. If is '0:0 1:3 2:5', then %q0 will become "cookies=30", %q3 will become "cookies", and %q5 will become "30". ! If was '0:0 2:5', then the "cookies" substring would simply be discarded. See 'help regexp syntax' for an explanation of regular expressions. *************** *** 3236,3243 **** can make output slightly ugly, but it's a good way of preventing other people from doing nasty things with your objects. ! See also: ESCAPE() ! & SET() set(, ) set(/, ) --- 3242,3248 ---- can make output slightly ugly, but it's a good way of preventing other people from doing nasty things with your objects. ! See also: decompose(), escape() & SET() set(, ) set(/, ) *************** *** 3439,3445 **** this limit is exceeded, the function will fail _silently_. List and function sizes should be kept reasonable. ! See also: anonymous attributes, sorting & SORTKEY() sortkey([/],[,[,[,]]]) --- 3444,3450 ---- this limit is exceeded, the function will fail _silently_. List and function sizes should be kept reasonable. ! See also: anonymous attributes, sorting, sortkey() & SORTKEY() sortkey([/],[,[,[,]]]) *************** *** 3460,3466 **** > say sortkey(key_name,#1 #2 #3) You say, "#2 #3 #1" ! See also: anonymous attributes, sorting & SORTING In functions where you can specify a sorting method, you can provide one of these sort types: --- 3465,3471 ---- > say sortkey(key_name,#1 #2 #3) You say, "#2 #3 #1" ! See also: anonymous attributes, sorting, sortby & SORTING In functions where you can specify a sorting method, you can provide one of these sort types: *************** *** 3546,3551 **** --- 3551,3567 ---- spellnum() Given a number, return its written-out representation in words. + + See also: ordinal() + & ORDINAL() + ordinal() + + Given an integer, return its written-out ordinal representation in words. + + > think ordinal(1) + first + + See also: spellnum() & SPLICE() splice(, , [, ]) *************** *** 3559,3565 **** Example: > say [splice(foo bar baz,eek moof gleep,bar)] You say, "foo moof baz" ! & SQL() sql(,[[,]) --- 3575,3618 ---- Example: > say [splice(foo bar baz,eek moof gleep,bar)] You say, "foo moof baz" ! ! & MAPSQL() ! mapsql([/],query[, [, ]) ! ! Performs an SQL query if the MUSH is configured to connect to an ! SQL database server. This function requires a WIZARD flag or ! the Sql_Ok power. ! ! is evaluated, so it's useful to either read it from ! another attribute with u() or use lit() to protect commas. If ! you will be interpolating user-provided values into the query, ! be careful to escape them with sqlescape(). ! ! Each row of the result is passed to , with columns ! as %1-%9. %0 is set to the row number, which will start with 1. ! ! If evaluates to a true boolean, then the first call ! will be with row number 0 and %1-%9 will be set to the field names. ! ! See "Help mapsql2" for examples. ! See also: sqlescape(), sql(), @sql ! & MAPSQL2 ! ! > @@ Field, Type, Null?, Key?, Default, Extra ! > &each_row me=align(<15 <15 <5 <5 <10 <14,%1,%2,%3,%4,%5,%6) ! > &tabledesc me=mapsql(each_row,describe %0,%r,1) ! > th u(tabledesc,quotes) ! Field Type Null Key Default Extra ! quoteid int(11) PRI auto_increment ! quote text ! ! > &each_bb me=(%0) - %1 (%2) ! > &q me=SELECT bbname, count(*) from bbs group by bbname order by bbname ! > th mapsql(each_bb,v(q),%r) ! (1) - Announcements (5) ! (2) - Advertisements (20) ! ... etc ! & SQL() sql(,[[,]) *************** *** 3580,3586 **** &SEL_GETID obj = SELECT id FROM mytable WHERE name = '[sqlescape(%0)]' &DOIT obj = $do *: ... [setq(0,sql(u(SEL_GETID,%0),~,|))] ... ! See also: sqlescape(), @sql & SQLESCAPE() sqlescape() --- 3633,3639 ---- &SEL_GETID obj = SELECT id FROM mytable WHERE name = '[sqlescape(%0)]' &DOIT obj = $do *: ... [setq(0,sql(u(SEL_GETID,%0),~,|))] ... ! See also: sqlescape(), mapsql(), @sql & SQLESCAPE() sqlescape() *************** *** 3598,3604 **** You must be a WIZARD or have the Sql_Ok power to use this function. ! See also: sql(), @sql & SQRT() sqrt() --- 3651,3657 ---- You must be a WIZARD or have the Sql_Ok power to use this function. ! See also: sql(), mapsql(), @sql & SQRT() sqrt() *** 1_8_1.216/game/txt/hlp/pennflag.hlp Wed, 02 Feb 2005 13:45:12 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1.2.1.1.1.1.2.1.4.1.2.2.18 600) --- 1_8_1.274(w)/game/txt/hlp/pennflag.hlp Mon, 06 Feb 2006 15:30:36 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1.2.1.1.1.1.2.1.4.1.2.2.19 600) *************** *** 340,345 **** --- 340,351 ---- This flag can only be set by royalty or wizards. See also: @tel + & LOUD + Flag: LOUD (all types) + + A LOUD object overrides speech, channel speech, and interaction + locks. This flag can only be set by royalty or wizards. + & INHERIT & TRUST Flag: TRUST (all types) *** 1_8_1.216/game/txt/hlp/penncmd.hlp Fri, 13 Jan 2006 22:26:11 -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.1.1.1.1.47.1.1.1.10 600) --- 1_8_1.274(w)/game/txt/hlp/penncmd.hlp Thu, 16 Feb 2006 11:02:35 -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.1.1.1.1.47.1.1.1.1.1.4 600) *************** *** 610,623 **** Additional switches are used in @command that only apply when used with @command/add. These switches are: ! /noeval : The command does not evaluate arguments passed to it. /eqsplit : The parser parses leftside and rightside /lsargs : Comma-separated arguments on the left side are parsed. /rsargs : In conjunction with eqsplit, the right-side arguments, comma-separated, are parsed individually and passed to the $-command in @hook/override. ! Any command added without the /noeval switch is provided with the /noeval switch itself, so if you @command/add foo, then foo's arguments are parsed by default, but you can call foo/noeval. Note: the $-command needs to make allowances for the /noeval switch in it's matching. --- 610,623 ---- Additional switches are used in @command that only apply when used with @command/add. These switches are: ! /noparse : The command does not evaluate arguments passed to it. /eqsplit : The parser parses leftside and rightside /lsargs : Comma-separated arguments on the left side are parsed. /rsargs : In conjunction with eqsplit, the right-side arguments, comma-separated, are parsed individually and passed to the $-command in @hook/override. ! Any command added without the /noparse switch is provided with a /noeval switch itself, so if you @command/add foo, then foo's arguments are parsed by default, but you can call foo/noeval. Note: the $-command needs to make allowances for the /noeval switch in it's matching. *************** *** 2084,2093 **** --- 2084,2105 ---- For example, @lock/use Admin Commands=flag^wizard|flag^royalty + (continued in help @lock10) + & @lock10 You can test for an object id, instead of a dbref, with: @lock =objid^ + You can test to see if the enactor is a member of a space-separated list + of dbrefs or objids on an atrribute on the object, with: + + @lock =dbreflist^ + + For example, + &allow Commands = #1 #7 #23 #200:841701384 + &deny commands = #200 #1020 + @lock/use commands = !dbreflist^deny & dbreflist^allow + See also: locktypes, @clock, objid() & locktypes & locklist *************** *** 3011,3016 **** --- 3023,3031 ---- You can also do this with & = Ex: @set Test Object=random:This is a random attribute. &random Test Object=This is a random attribute. + An important difference between these two forms is that @set will + evaluate the before setting it on , while the + & form will not (and is usually what you want). The fourth form sets (or unsets) an attribute flag on the specified attribute. See 'help attribute flags'. *************** *** 3167,3173 **** Example: @sql SHOW TABLES ! See also: sql(), sqlescape() & @squota @squota [= [+|-] ] --- 3182,3188 ---- Example: @sql SHOW TABLES ! See also: sql(), sqlescape(), mapsql() & @squota @squota [= [+|-] ] *** 1_8_1.216/game/txt/hlp/index.hlp Mon, 27 Dec 2004 15:32:25 -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.3.1.1.2.1 660) --- 1_8_1.274(w)/game/txt/hlp/index.hlp Fri, 17 Feb 2006 15:29:18 -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.3.1.1.2.1.1.1 660) *************** *** 3,9 **** -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- " #lambda $-commands $-commands2 % %! ! %# %: %n %~ + 1.50p6 1.50p7 1.50p8 1.50p9 1.50p10 1.50p11 1.50p12 --- 3,10 ---- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- " #lambda $-commands $-commands2 % %! ! %# %2 %3 ! %4 %: %n %~ + 1.50p6 1.50p7 1.50p8 1.50p9 1.50p10 1.50p11 1.50p12 *************** *** 16,27 **** 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 For more, see Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 1.6.5p0 1.6.5p1 1.6.5p2 1.6.5p3 1.6.5p4 1.6.6p0 1.6.7p0 1.6.7p1 1.6.7p2 --- 17,28 ---- 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 For more, see Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + 1.6.4p0 1.6.4p1 1.6.4p2 1.6.5p0 1.6.5p1 1.6.5p2 1.6.5p3 1.6.5p4 1.6.6p0 1.6.7p0 1.6.7p1 1.6.7p2 *************** *** 37,48 **** 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 For more, see Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 1.7.2p7 1.7.2p8 1.7.2p9 1.7.2p10 1.7.2p11 1.7.2p12 1.7.2p13 1.7.2p14 1.7.2p15 --- 38,49 ---- 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 For more, see Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + 1.7.2p4 1.7.2p5 1.7.2p6 1.7.2p7 1.7.2p8 1.7.2p9 1.7.2p10 1.7.2p11 1.7.2p12 1.7.2p13 1.7.2p14 1.7.2p15 *************** *** 58,69 **** 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 For more, see Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 1.7.4p4 1.7.4p5 1.7.4p6 1.7.4p7 1.7.4p8 1.7.4p9 1.7.4p10 1.7.4p11 1.7.4p12 --- 59,70 ---- 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 For more, see Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + 1.7.4p1 1.7.4p2 1.7.4p3 1.7.4p4 1.7.4p5 1.7.4p6 1.7.4p7 1.7.4p8 1.7.4p9 1.7.4p10 1.7.4p11 1.7.4p12 *************** *** 79,90 **** 1.7.6p6 1.7.6p7 1.7.6p8 1.7.6p9 1.7.6p10 1.7.6p11 1.7.6p12 1.7.6p13 1.7.6p14 - 1.7.6p15 1.7.6p16 1.7.7p0 For more, see Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 1.7.7p1 1.7.7p2 1.7.7p3 1.7.7p4 1.7.7p5 1.7.7p6 1.7.7p7 1.7.7p8 1.7.7p9 --- 80,91 ---- 1.7.6p6 1.7.6p7 1.7.6p8 1.7.6p9 1.7.6p10 1.7.6p11 1.7.6p12 1.7.6p13 1.7.6p14 For more, see Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + 1.7.6p15 1.7.6p16 1.7.7p0 1.7.7p1 1.7.7p2 1.7.7p3 1.7.7p4 1.7.7p5 1.7.7p6 1.7.7p7 1.7.7p8 1.7.7p9 *************** *** 98,111 **** 1.7.7p31 1.7.7p32 1.7.7p33 1.7.7p34 1.7.7p35 1.7.7p36 1.7.7p37 1.7.7p38 1.7.7p39 ! 1.7.7p40 1.8.0p0 : ! ; @-attributes @-building ! @-general @-wizard @@ For more, see Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@() @aahear @abuy @aclone @aconnect @adeath @adescribe @adestroy @adisconnect --- 99,118 ---- 1.7.7p31 1.7.7p32 1.7.7p33 1.7.7p34 1.7.7p35 1.7.7p36 1.7.7p37 1.7.7p38 1.7.7p39 ! 1.7.7p40 1.8.0p0 1.8.0p1 ! 1.8.0p2 1.8.0p3 1.8.0p4 For more, see Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + 1.8.0p5 1.8.0p6 1.8.0p7 + 1.8.0p8 1.8.0p9 1.8.0p10 + 1.8.0p11 1.8.1p0 1.8.1p1 + 1.8.1p2 1.8.1p3 1.8.1p4 + 1.8.1p5 1.8.1p6 : + ; @-attributes @-building + @-general @-wizard @@ @@() @aahear @abuy @aclone @aconnect @adeath @adescribe @adestroy @adisconnect *************** *** 115,120 **** --- 122,132 ---- @alfail @alias @allhalt @allquota @amhear @amove @apayment @areceive @assert + + For more, see Entries-7 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + & Entries-7 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @asuccess @atport @atrchown @atrlock @attribute @aufail @aunfollow @ause @away *************** *** 122,132 **** @break @buy @cemit @channel @channel2 @channel3 @channel4 @channel5 @charges - - For more, see Entries-7 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - & Entries-7 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @chat @chown @chownall @chzone @chzone2 @chzoneall @clock @clock2 @clone --- 134,139 ---- *************** *** 136,141 **** --- 143,153 ---- @config cosmetic2 @config costs @config db @config dump @config funcs @config limits @config limits2 @config limits3 @config log + + For more, see Entries-8 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + & Entries-8 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @config net @config parameters @config tiny @conformat @cost @cpattr @create @dbck @death *************** *** 143,153 **** @descformat @describe @destroy @destroy2 @dig @dig2 @disable @doing @dolist - - For more, see Entries-8 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - & Entries-8 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @drain @drop @dump @ealias @edit @efail @elock @emit @enable --- 155,160 ---- *************** *** 157,195 **** @flag @flag2 @follow @force @force2 @forwardlist @function @function2 @function3 @function4 @gedit @give @grep2 @grep @halt @haven @hide @hook @hook2 @idescformat @idescribe @idle @infilter @inprefix ! @kick @lalias @leave ! @lemit @lfail @link ! For more, see Entries-9 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-9 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @list @listen @listen2 ! @listmotd @lock @lock2 ! @lock3 @lock4 @lock5 ! @lock6 @lock7 @lock8 ! @lock9 @log @logwipe ! @lset @map2 @mail ! @malias @malias2 @malias3 ! @malias4 @malias5 @map ! @motd @move @mvattr ! @name @nameaccent @nameformat ! @newpassword @notify @nsemit ! @nslemit @nsoemit @nspemit @nsremit @nszemit @nuke @obuy @odeath @odescribe @odrop @oefail @oemit @oenter @ofailure @ofollow - - For more, see Entries-10 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - & Entries-10 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @ogive @oidescribe @oleave @olfail @omove @opayment @open @oreceive @osuccess --- 164,204 ---- @flag @flag2 @follow @force @force2 @forwardlist @function @function2 @function3 + + For more, see Entries-9 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + & Entries-9 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @function4 @gedit @give @grep2 @grep @halt @haven @hide @hook @hook2 @idescformat @idescribe @idle @infilter @inprefix ! @invformat @kick @lalias ! @leave @lemit @lfail ! @link @list @listen ! @listen2 @listmotd @lock ! @lock10 @lock2 @lock3 ! @lock4 @lock5 @lock6 ! @lock7 @lock8 @lock9 ! @log @logwipe @lset ! @map2 @mail @mailfilter ! @mailforwardlist @malias @malias2 ! @malias3 @malias4 @malias5 ! For more, see Entries-10 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-10 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @map @motd @move ! @mvattr @name @nameaccent ! @nameformat @newpassword @notify ! @nscemit @nsemit @nslemit ! @nsoemit @nspemit @nsprompt @nsremit @nszemit @nuke @obuy @odeath @odescribe @odrop @oefail @oemit @oenter @ofailure @ofollow @ogive @oidescribe @oleave @olfail @omove @opayment @open @oreceive @osuccess *************** *** 197,243 **** @ouse @oxenter @oxleave @oxmove @oxtport @ozenter @ozleave @parent @password - @payment @pcreate @pemit - @pemit2 @poll @poor - @power @power2 @power3 - @prefix @pricelist @ps - @purge @quota @readcache - @receive @recycle @rejectmotd - @remit @restart @runout - @rwall @scan @search - @search2 @search3 @select For more, see Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @set @sex @shutdown ! @sitelock @sitelock2 @sitelock3 ! @sql @squota @startup ! @stats @success @sweep ! @switch @switch2 @teleport ! @tport @trigger @trigger2 ! @ufail @ulock @undestroy ! @unfollow @unlink @unlock ! @unrecycle @uptime @uptime2 ! @use @uunlock @verb ! @verb2 @verb3 @verb4 ! @version @vrml_url @wait ! @wait2 @wall @warnings ! @warnings2 @warnings3 @wcheck ! @whereis @wipe @wizmotd ! @wizwall @zemit @zenter For more, see Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @zleave \ ] ! ^ abode abs() ! accent() accent2 accent3 ! accent4 accname() acos() ! action lists action2 add() ! after() ahelp align() align2 allof() alphamax() alphamin() ancestors and() andflags() andlflags() anews --- 206,259 ---- @ouse @oxenter @oxleave @oxmove @oxtport @ozenter @ozleave @parent @password For more, see Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @payment @pcreate @pemit ! @pemit2 @poll @poor ! @power @power2 @power3 ! @prefix @pricelist @prompt ! @ps @purge @quota ! @readcache @receive @recycle ! @rejectmotd @remit @restart ! @runout @rwall @scan ! @search @search2 @search3 ! @select @set @sex ! @shutdown @sitelock @sitelock2 ! @sitelock3 @sql @squota ! @startup @stats @success ! @sweep @switch @switch2 ! @teleport @tport @trigger ! @trigger2 @ufail @ulock For more, see Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @undestroy @unfollow @unlink ! @unlock @unrecycle @uptime ! @uptime2 @use @uunlock ! @verb @verb2 @verb3 ! @verb4 @version @vrml_url ! @wait @wait2 @wall ! @warnings @warnings2 @warnings3 ! @wcheck @whereis @wipe ! @wizmotd @wizwall @zemit ! @zenter @zleave \ ! ] ^ ` ! `2 `3 `4 ! abode abs() accent() ! accent2 accent3 accent4 ! accname() acos() action lists ! action2 add() after() ! ! For more, see Entries-13 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-13 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! ahelp alias() align() align2 allof() alphamax() alphamin() ancestors and() andflags() andlflags() anews *************** *** 246,343 **** aposs() art() asin() atan() atan2() atrlock() attr trees attr trees2 attr trees3 ! attr trees4 attrcnt() attrib-ownership ! attribute flags attribute flags2 attribute functions ! ! For more, see Entries-13 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-13 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! attribute list attribute trees attribute trees2 ! attribute trees3 attribute trees4 attributes ! attributes list attributes2 attributes3 ! attributes4 attrpcnt() audible ! audible2 band() baseconv() ! beep() before() being killed ! bitwise functions bnand() bnot() ! boolean functions boolean values boolean2 ! boolean3 bor() bound() ! brackets() brief builder ! buy bxor() cand() ! capstr() case() caseall() ! cat() cd ceil() ! cemit() center() cflags() ! ch chan_usefirstmatch changes ! channel functions channel-list channels() For more, see Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! chat checkpass() children() ! chown_ok chr() clients ! clock() clone() cloudy ! cmds() code color ! commands communication functions comp() ! comsys con() config() ! conn() connected connection functions ! contact control controls() ! convsecs() convtime() convutcsecs() ! copyright copyrite cor() ! cos() costs cowner() ! create() credits ctime() ! ctitle() ctu() cv ! cwho() dark dark2 ! database dbref # dbref functions ! dbref number dbref2 dbrefs For more, see Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! debug debug2 dec() ! decrypt() default() delete() ! desert destroy_ok die() ! dig() digest() dismiss ! dist2d() dist3d() div() ! doing doing() download ! drop drop-tos dynhelp() ! e() edefault() edit() ! element() elements() elist() ! elock() emit() empty ! enactor encrypt() endtag() ! enter enter_ok entrances() ! eq() escape() etimefmt() ! etimefmt2 etimefmt3 eval() ! evaluation order evaluation2 events ! examine executor exit() For more, see Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! exits exits2 exp() ! extract() failure fdiv() ! filter() filterbool() findable() ! first() firstof() fixed ! flag list flag permissions flags ! flags list flags() flags2 ! flip() floating floor() ! floordiv() fmod() fold() ! fold2 folderstats() follow ! followers() following() foreach() ! foreach2 fraction() fullname() function list functions functions() functions2 gagged gender get get() get_eval() give global commands globals go going goto ! For more, see Entries-17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - grab() graball() grep() gt() gte() halt hasattr() hasattrp() hasattrpval() hasattrval() hasflag() haspower() --- 262,363 ---- aposs() art() asin() atan() atan2() atrlock() attr trees attr trees2 attr trees3 ! attr trees4 attrcnt() attrib trees ! attrib trees2 attrib trees3 attrib trees4 ! attrib-ownership attrib_set() attribute flags ! attribute flags2 attribute functions attribute list ! attribute trees attribute trees2 attribute trees3 ! attribute trees4 attributes attributes list ! attributes2 attributes3 attributes4 For more, see Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! attrpcnt() audible audible2 ! band() baseconv() beep() ! before() being killed bitwise functions ! bnand() bnot() boolean functions ! boolean values boolean2 boolean3 ! bor() bound() brackets() ! brief builder buy ! bxor() cand() capstr() ! case() caseall() cat() ! cbuffer() cd cdesc() ! ceil() cemit() center() ! cflags() ch chan_usefirstmatch ! changes channel functions channel-list ! channels() chat checkpass() ! children() chown_ok chr() ! clients clock() clone() For more, see Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! cloudy cmds() cmsgs() ! code color commands ! communication functions comp() comsys ! con() config() conn() ! connected connection functions contact ! control controls() convsecs() ! convtime() convutcsecs() copyright ! copyrite cor() cos() ! costs cowner() create() ! credits cstatus() ctime() ! ctitle() ctu() cusers() ! cv cwho() dark ! dark2 database dbref # ! dbref functions dbref number dbref2 ! dbrefs debug debug2 ! dec() decompose() decrypt() For more, see Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! default() delete() desert ! destroy_ok die() dig() ! digest() dismiss dist2d() ! dist3d() div() doing ! doing() download drop ! drop-tos dynhelp() e() ! edefault() edit() element() ! elements() elist() elock() ! emit() empty enactor ! encrypt() endtag() enter ! enter_ok entrances() eq() ! escape() etimefmt() etimefmt2 ! etimefmt3 eval() evaluation order ! evaluation2 events examine ! executor exit() exits ! exits2 exp() extract() ! ! For more, see Entries-17 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-17 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! failure fdiv() filter() ! filterbool() findable() first() ! firstof() fixed flag list ! flag permissions flags flags list ! flags() flags2 flip() ! floating floor() floordiv() ! fmod() fold() fold2 ! folderstats() follow followers() ! following() foreach() foreach2 ! fraction() fullalias() fullname() function list functions functions() functions2 gagged gender get get() get_eval() give global commands globals go going goto + grab() graball() grep() ! For more, see Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- gt() gte() halt hasattr() hasattrp() hasattrpval() hasattrval() hasflag() haspower() *************** *** 353,364 **** information functions inherit inherit2 insert() interiors interiors2 internationalization inum() inventory ! For more, see Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - ipaddr() isdaylight() isdbref() isint() isnum() isword() itemize() items() iter() iter2 itext() judge --- 373,384 ---- information functions inherit inherit2 insert() interiors interiors2 internationalization inum() inventory + ipaddr() isdaylight() isdbref() ! For more, see Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- isint() isnum() isword() itemize() items() iter() iter2 itext() judge *************** *** 374,468 **** listening2 listening3 lists lit() ljust() llockflags() llocks() lmath() ln() ! For more, see Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - lnum() loc() locale localize() locate() locate2 lock list lock types lock types2 lock() lockflags() locking locklist locks locks() locktypes locktypes2 log() logout look look2 ! looping lparent() lplayers() ! lports() lpos() lsearch() ! lsearch2 lsearchr() lset() ! lstats() lt() lte() ! lthings() lvcon() lvexits() ! lvplayers() lvthings() lwho() ! macros macros2 mail ! mail functions mail() mail-admin ! mail-folders mail-other mail-reading ! For more, see Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! mail-sending maildstats() mailfrom() mailfstats() mailsend() mailstats() mailstatus() mailsubject() mailtime() ! malias() map() master room ! match() matchall() matching ! math functions max() me ! mean() median() member() ! merge() mid() min() ! mistrust mix() mix2 ! mod() modulo() modulus() ! money money() monitor ! mortal move mtime() ! mudname() mul() munge() ! munge2 munge3 mushcode ! mushcode2 mwho() myopic ! name() nand() nattr() ! For more, see Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! nattrp() ncon() nearby() ! neq() new locks newbie ! newbie2 newbie3 news ! nexits() next() nmwho() no_command no_leave no_tel no_warn noaccents noleave non-standard attributes noname nor() nospace nospoof not() ! nowarn nplayers() nsemit() ! nslemit() nsoemit() nspemit() ! nsremit() nszemit() nthings() ! null() num() nvcon() nvexits() nvplayers() nvthings() nwho() obj() object parents objeval() objid() objmem() oemit() on-vacation opaque ! For more, see Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! open() or() ord() ! orflags() orlflags() orphan ! outputprefix outputsuffix owner() ! page page2 paranoid ! parent parent() parents ! parents2 parents3 parents4 ! parents5 parse() patchlevels ! pcreate() pemit() pi() ! pickrand() player playermem() ! pmatch() poll() ports() ! pos() pose pose2 ! poss() power() powers list ! powers list2 powers() powers2 pueblo pueblo features pueblo() puppet puppets puppets2 queue quiet quit - - For more, see Entries-23 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - & Entries-23 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- quota() r() r-function rand() randword() read recv() regedit() regeditall() --- 394,493 ---- listening2 listening3 lists lit() ljust() llockflags() llocks() lmath() ln() + lnum() loc() locale ! For more, see Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- localize() locate() locate2 lock list lock types lock types2 lock() lockflags() locking locklist locks locks() locktypes locktypes2 log() logout look look2 ! looping loud lparent() ! lplayers() lports() lpos() ! lsearch() lsearch2 lsearchr() ! lset() lstats() lt() ! lte() lthings() lvcon() ! lvexits() lvplayers() lvthings() ! lwho() macros macros2 ! mail mail functions mail() ! mail-admin mail-folders mail-forward ! mail-other mail-reading mail-sending ! For more, see Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! maildstats() mailfilter mailfrom() mailfstats() mailsend() mailstats() mailstatus() mailsubject() mailtime() ! malias() map() mapsql() ! mapsql2 master room match() ! matchall() matching math functions ! max() me mean() ! median() member() merge() ! mid() min() mistrust ! mix() mix2 mod() ! modulo() modulus() money ! money() monitor mortal ! move mtime() mudname() ! mul() munge() munge2 ! munge3 mushcode mushcode2 ! mwho() myopic name() ! For more, see Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! namegrab() namegraball() nand() ! nattr() nattrp() nchildren() ! ncon() nearby() neq() ! new locks newbie newbie2 ! newbie3 news nexits() ! next() nlsearch() nmwho() no_command no_leave no_tel no_warn noaccents noleave non-standard attributes noname nor() nospace nospoof not() ! nowarn nplayers() nsearch() ! nsemit() nslemit() nsoemit() ! nspemit() nsprompt() nsremit() ! nszemit() nthings() null() ! num() numversion() nvcon() nvexits() nvplayers() nvthings() + + For more, see Entries-23 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + & Entries-23 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- nwho() obj() object parents objeval() objid() objmem() oemit() on-vacation opaque + open() or() ord() + ordinal() orflags() orlflags() + orphan outputprefix outputsuffix + owner() page page2 + paranoid parent parent() + parents parents2 parents3 + parents4 parents5 parse() + patchlevels pcreate() pemit() + pi() pickrand() player + playermem() pmatch() poll() + ports() pos() pose + pose2 poss() power() + powers list powers list2 powers() ! For more, see Entries-24 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-24 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! powers2 prompt() prompt_newlines pueblo pueblo features pueblo() puppet puppets puppets2 queue quiet quit quota() r() r-function rand() randword() read recv() regedit() regeditall() *************** *** 475,489 **** regmatch() regmatchi() regrab() regraball() regraballi() regrabi() regrep() regular expression functions remainder() remit() remove() repeat() replace() rest() restarts() restarttime() restrict restrict2 restrict3 reswitch() - - For more, see Entries-24 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - & Entries-24 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- reswitchall() reswitchalli() reswitchi() reverse() revwords() right() rjust() rloc() rnum() --- 500,514 ---- regmatch() regmatchi() regrab() regraball() regraballi() regrabi() regrep() regular expression functions + + For more, see Entries-25 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + & Entries-25 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- remainder() remit() remove() repeat() replace() rest() restarts() restarttime() restrict restrict2 restrict3 reswitch() reswitchall() reswitchalli() reswitchi() reverse() revwords() right() rjust() rloc() rnum() *************** *** 496,583 **** secs() secure() semaphores semaphores2 semaphores3 semaphores4 semaphores5 semaphores6 semipose sent() session set() setdiff() setinter() setq() setq2 setq3 setr() setting-attributes setunion() sex - - For more, see Entries-25 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - & Entries-25 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- sha0() shared shared players shared players2 shl() shr() shuffle() sign() sin() slay softcode sort() ! sortby() sorting soundex() ! soundex2 soundlike() soundslike() ! space() spellnum() splice() ! spoofing sql functions sql() ! sqlescape() sqrt() squish() ! ssl() stack starttime() ! stats() stddev() step2 ! step() sticky strcat() ! string functions strings strinsert() ! stripaccents() stripansi() strlen() ! strmatch() strreplace() sub() ! subj() substitutions substitutions2 ! ! For more, see Entries-26 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-26 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! substitutions3 substitutions4 success ! suspect switch wildcards switch() ! switch2 switchall() switches ! t() table() tag() ! tagwrap() take tan() ! teach tel() tel_ok ! temple terminfo() terse ! textfile() think time functions ! time() timefmt() timefmt2 ! timestring() topics topics2 ! tr() translation transparent ! transparent2 trim() trunc() ! trust trust2 type() ! types of objects types2 u() ! u2 ucstr() udefault() ! ufun() ufun2 uldefault() For more, see Entries-27 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-27 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! ulocal() ulocal2 unfindable ! unfollow uninspected unregistered ! use user-defined commands user-defined2 ! utctime() utility functions v() ! v-function vadd() val() ! valid() vcross() vdim() ! vdot() verbose verbs ! version() visible() visual ! vmag() vmax() vmin() ! vmul() vrml vsub() ! vunit() warnings warnings list ! warnings list2 where() whisper ! whisper2 who width() ! wildcards wipe() with ! wizard wordpos() words() ! wrap() xattr() xattrp() For more, see Entries-28 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-28 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! xcon() xexits() xget() ! xmwho() xor() xplayers() ! xthings() xvcon() xvexits() ! xvplayers() xvthings() xwho() ! z_tel zemit() zfun() ! zmo zmp zmr ! zmwho() zone zone master objects ! zone master rooms zone masters zone objects ! zone() zones zones2 ! zwho() & &Entries -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- --- 521,609 ---- secs() secure() semaphores semaphores2 semaphores3 semaphores4 semaphores5 semaphores6 semipose + + For more, see Entries-26 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + & Entries-26 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- sent() session set() setdiff() setinter() setq() setq2 setq3 setr() setting-attributes setunion() sex sha0() shared shared players shared players2 shl() shr() shuffle() sign() sin() slay softcode sort() ! sortby() sorting sortkey() ! soundex() soundex2 soundlike() ! soundslike() space() spellnum() ! splice() spoofing sql functions ! sql() sqlescape() sqrt() ! squish() ssl() stack ! starttime() stats() stddev() ! step2 step() sticky For more, see Entries-27 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-27 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! strcat() string functions strings ! strinsert() stripaccents() stripansi() ! strlen() strmatch() strreplace() ! 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 terminfo() ! terse textentries() textfile() ! think time functions time() ! timefmt() timefmt2 timestring() ! topics topics2 tr() ! track_money translation transparent For more, see Entries-28 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-28 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! transparent2 trim() trimpenn() ! trimtiny() 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() ! vcross() vdim() vdot() ! verbose verbs version() ! visible() visual vmag() ! vmax() vmin() vmul() ! vrml vsub() vunit() ! ! For more, see Entries-29 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! & Entries-29 ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! warnings warnings list warnings list2 ! where() whisper whisper2 ! who width() wildcards ! wipe() with wizard ! wordpos() words() wrap() ! xattr() xattrp() xcon() ! xexits() xget() xmwho() ! xor() xplayers() xthings() ! xvcon() xvexits() xvplayers() ! xvthings() xwho() z_tel ! zemit() zfun() zmo ! zmp zmr zmwho() ! zone zone master objects zone master rooms ! zone masters zone objects zone() ! zones zones2 zwho() & &Entries -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- *** 1_8_1.216/game/restart Wed, 10 Aug 2005 22:43:42 -0500 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.2.1.2.2.1.1.1.1.1.4.3.2 700) --- 1_8_1.274(w)/game/restart Mon, 06 Feb 2006 15:37:34 -0600 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.2.1.2.2.1.1.1.1.1.4.3.2.1.1 700) *************** *** 51,57 **** if [ ! -f "$CONF_FILE" ]; then echo "CONF_FILE doesn't exist. It's: $CONF_FILE" ! echo "Create $CONF_FILE from $GAMEDIR/mushcnf.dst" exit 1 fi --- 51,57 ---- if [ ! -f "$CONF_FILE" ]; then echo "CONF_FILE doesn't exist. It's: $CONF_FILE" ! echo "Create $CONF_FILE from $GAMEDIR/mushcnf.dst and run 'make update'" exit 1 fi *** 1_8_1.216/hints/freebsd.sh Sat, 24 Jan 2004 13:22:12 -0600 dunemush (pennmush/50_freebsd.sh 1.3.1.1 600) --- 1_8_1.274(w)/hints/freebsd.sh Mon, 06 Feb 2006 16:18:37 -0600 dunemush (pennmush/50_freebsd.sh 1.3.1.2 600) *************** *** 1,6 **** usenm=false i_malloc='undef' i_values='undef' ! ccflags='-D_POSIX_C_SOURCE=2 -I/usr/local/include' d_attribut=true ! --- 1,6 ---- usenm=false i_malloc='undef' i_values='undef' ! ccflags='-D_POSIX_C_SOURCE=2 -D__XSI_VISIBLE=1000 -D__BSD_VISIBLE -I/usr/local/include' d_attribut=true ! d_force_ipv4='define' *** 1_8_1.216/src/SWITCHES Fri, 13 Jan 2006 21:52:27 -0600 dunemush (pennmush/b/22_SWITCHES 1.12.1.3.1.16.1.3 600) --- 1_8_1.274(w)/src/SWITCHES Wed, 01 Mar 2006 14:33:27 -0600 dunemush (pennmush/b/22_SWITCHES 1.12.1.3.1.16.1.4 600) *************** *** 77,82 **** --- 77,83 ---- NOEVAL NOFLAGCOPY NOISY + NOPARSE NOSIG NOSPACE NOTIFY *** 1_8_1.216/src/timer.c Sat, 10 Jul 2004 09:53:09 -0500 dunemush (pennmush/b/29_timer.c 1.29.1.7.1.22 660) --- 1_8_1.274(w)/src/timer.c Wed, 01 Mar 2006 14:33:24 -0600 dunemush (pennmush/b/29_timer.c 1.29.1.7.1.23 660) *************** *** 222,227 **** --- 222,228 ---- global_eval_context.cplr = NOTHING; strcpy(global_eval_context.ccom, "purge"); purge(); + strcpy(global_eval_context.ccom, ""); } if (options.dbck_counter <= mudtime) { *************** *** 230,235 **** --- 231,237 ---- global_eval_context.cplr = NOTHING; strcpy(global_eval_context.ccom, "dbck"); dbck(); + strcpy(global_eval_context.ccom, ""); } if (idle_counter <= mudtime) { *************** *** 244,249 **** --- 246,252 ---- options.dump_counter = options.dump_interval + mudtime; strcpy(global_eval_context.ccom, "dump"); fork_and_dump(1); + strcpy(global_eval_context.ccom, ""); flag_broadcast(0, "ON-VACATION", "%s", T ("Your ON-VACATION flag is set! If you're back, clear it.")); *************** *** 260,265 **** --- 263,269 ---- options.warn_counter = options.warn_interval + mudtime; strcpy(global_eval_context.ccom, "warnings"); run_topology(); + strcpy(global_eval_context.ccom, ""); } local_timer(); *** 1_8_1.216/src/switchinc.c Fri, 13 Jan 2006 22:11:28 -0600 dunemush (pennmush/b/32_switchinc. 1.3.1.2.1.6.1.18.1.2.1.2.2.5.1.4.2.4.1.1.1.2.1.5.1.2.1.5.2.1.1.31.3.4.1.5.1.4.1.1.1.1.1.1.1.7.1.1.1.9.1.3 660) --- 1_8_1.274(w)/src/switchinc.c Wed, 01 Mar 2006 14:33:28 -0600 dunemush (pennmush/b/32_switchinc. 1.3.1.2.1.6.1.18.1.2.1.2.2.5.1.4.2.4.1.1.1.2.1.5.1.2.1.5.2.1.1.31.3.4.1.5.1.4.1.1.1.1.1.1.1.7.1.1.1.9.1.4 660) *************** *** 79,84 **** --- 79,85 ---- {"NOEVAL", SWITCH_NOEVAL}, {"NOFLAGCOPY", SWITCH_NOFLAGCOPY}, {"NOISY", SWITCH_NOISY}, + {"NOPARSE", SWITCH_NOPARSE}, {"NOSIG", SWITCH_NOSIG}, {"NOSPACE", SWITCH_NOSPACE}, {"NOTIFY", SWITCH_NOTIFY}, *** 1_8_1.216/src/speech.c Mon, 31 Oct 2005 13:36:47 -0600 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.8.1.1.1.1.1.1.1.10.1.2.1.13.2.4.1.1.3.1.1.5.1.1.1.6.1.1.1.7.1.1.3.1.1.6 660) --- 1_8_1.274(w)/src/speech.c Wed, 01 Mar 2006 14:33:24 -0600 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.8.1.1.1.1.1.1.1.10.1.2.1.13.2.4.1.1.3.1.1.5.1.1.1.6.1.1.1.7.1.1.3.1.1.6.1.1 660) *************** *** 110,116 **** if (!GoodObject(loc)) return; ! if (!eval_lock(player, loc, Speech_Lock)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } --- 110,116 ---- if (!GoodObject(loc)) return; ! if (!Loud(player) && !eval_lock(player, loc, Speech_Lock)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } *************** *** 150,156 **** if (!GoodObject(loc)) return; ! if (!eval_lock(player, loc, Speech_Lock)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } --- 150,156 ---- if (!GoodObject(loc)) return; ! if (!Loud(player) && !eval_lock(player, loc, Speech_Lock)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } *************** *** 226,232 **** return; } ! if (!eval_lock(player, pass[1], Speech_Lock)) { fail_lock(player, pass[1], Speech_Lock, T("You may not speak there!"), NOTHING); return; --- 226,232 ---- return; } ! if (!Loud(player) && !eval_lock(player, pass[1], Speech_Lock)) { fail_lock(player, pass[1], Speech_Lock, T("You may not speak there!"), NOTHING); return; *************** *** 251,257 **** * locs[0..10] are corresponding dbrefs of locations */ if (GoodObject(who) && GoodObject(Location(who)) ! && eval_lock(player, Location(who), Speech_Lock) ) { if (pass[0] < 10) { locs[pass[0]] = Location(who); --- 251,257 ---- * locs[0..10] are corresponding dbrefs of locations */ if (GoodObject(who) && GoodObject(Location(who)) ! && (Loud(player) || eval_lock(player, Location(who), Speech_Lock)) ) { if (pass[0] < 10) { locs[pass[0]] = Location(who); *************** *** 548,554 **** if (!GoodObject(loc)) return; ! if (!eval_lock(player, loc, Speech_Lock)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } --- 548,554 ---- if (!GoodObject(loc)) return; ! if (!Loud(player) && !eval_lock(player, loc, Speech_Lock)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } *************** *** 1172,1178 **** if (!GoodObject(loc)) return; ! if (!eval_lock(player, loc, Speech_Lock)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } --- 1172,1178 ---- if (!GoodObject(loc)) return; ! if (!Loud(player) && !eval_lock(player, loc, Speech_Lock)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } *************** *** 1206,1212 **** notify_format(player, T("I'm sorry, but %s wishes to be left alone now."), Name(room)); ! } else if (!eval_lock(player, room, Speech_Lock)) { fail_lock(player, room, Speech_Lock, T("You may not speak there!"), NOTHING); } else { --- 1206,1212 ---- notify_format(player, T("I'm sorry, but %s wishes to be left alone now."), Name(room)); ! } else if (!Loud(player) && !eval_lock(player, room, Speech_Lock)) { fail_lock(player, room, Speech_Lock, T("You may not speak there!"), NOTHING); } else { *************** *** 1279,1285 **** if (rec > 15) { notify(player, T("Too many containers.")); return; ! } else if (!eval_lock(player, room, Speech_Lock)) { fail_lock(player, room, Speech_Lock, T("You may not speak there!"), NOTHING); return; --- 1279,1285 ---- if (rec > 15) { notify(player, T("Too many containers.")); return; ! } else if (!Loud(player) && !eval_lock(player, room, Speech_Lock)) { fail_lock(player, room, Speech_Lock, T("You may not speak there!"), NOTHING); return; *************** *** 1308,1314 **** if (this == NOTHING) { for (room = dbrefs[1]; room < db_top; room++) { if (IsRoom(room) && (Zone(room) == dbrefs[2]) ! && eval_lock(dbrefs[3], room, Speech_Lock) ) break; } --- 1308,1314 ---- if (this == NOTHING) { for (room = dbrefs[1]; room < db_top; room++) { if (IsRoom(room) && (Zone(room) == dbrefs[2]) ! && (Loud(dbrefs[3]) || eval_lock(dbrefs[3], room, Speech_Lock)) ) break; } *** 1_8_1.216/src/predicat.c Mon, 27 Jun 2005 10:17:42 -0500 dunemush (pennmush/b/44_predicat.c 1.1.1.34.1.1.1.3.1.4.2.38.1.13.1.2.1.12 660) --- 1_8_1.274(w)/src/predicat.c Wed, 01 Mar 2006 14:33:24 -0600 dunemush (pennmush/b/44_predicat.c 1.1.1.34.1.1.1.3.1.4.2.38.1.13.1.2.1.14.1.3.1.1 660) *************** *** 783,790 **** * \param alias list to check. * \param player player for permission checks. * \param thing player who is being aliased. ! * \retval 1 alias is valid for players. ! * \retval 0 alias is not valid for players. */ int ok_player_alias(const char *alias, dbref player, dbref thing) --- 783,789 ---- * \param alias list to check. * \param player player for permission checks. * \param thing player who is being aliased. ! * \return One of the OPAE_* constants defined in hdrs/attrib.h */ int ok_player_alias(const char *alias, dbref player, dbref thing) *************** *** 793,799 **** int cnt = 0; if (!alias || !*alias) ! return 0; strncpy(tbuf1, alias, BUFFER_LEN - 1); tbuf1[BUFFER_LEN - 1] = '\0'; --- 792,798 ---- int cnt = 0; if (!alias || !*alias) ! return OPAE_NULL; strncpy(tbuf1, alias, BUFFER_LEN - 1); tbuf1[BUFFER_LEN - 1] = '\0'; *************** *** 803,814 **** while (sp && *sp && *sp == ' ') sp++; if (!sp || !*sp) ! return 0; /* No null aliases */ if (!ok_player_name(sp, player, thing)) ! return 0; cnt++; } ! return ((cnt <= MAX_ALIASES) || Wizard(player)); } --- 802,817 ---- while (sp && *sp && *sp == ' ') sp++; if (!sp || !*sp) ! return OPAE_NULL; /* No null aliases */ if (!ok_player_name(sp, player, thing)) ! return OPAE_INVALID; cnt++; } ! if (Wizard(player)) ! return OPAE_SUCCESS; ! if (cnt > MAX_ALIASES) ! return OPAE_TOOMANY; ! return OPAE_SUCCESS; } *************** *** 859,865 **** case '&': return 0; default: ! if (!isupper((unsigned char) *name) && !isdigit((unsigned char) *name)) return 0; } /* Everything else must be printable and non-space, and we need --- 862,869 ---- case '&': return 0; default: ! if (!isupper((unsigned char) *name) && !isdigit((unsigned char) *name) ! && !ispunct((unsigned char) *name)) return 0; } /* Everything else must be printable and non-space, and we need *************** *** 904,910 **** case '&': return 0; default: ! if (!isupper((unsigned char) *name)) return 0; } /* Everything else must be printable and non-space, and we need --- 908,914 ---- case '&': return 0; default: ! if (!isupper((unsigned char) *name) && !ispunct((unsigned char) *name)) return 0; } /* Everything else must be printable and non-space, and we need *************** *** 952,958 **** size_t n = q - p; /* Invalid params for non-priv'd. Turn to a hashtable if we ever get more? */ ! if (strncasecmp(p, "SEND", n) == 0 || strncasecmp(p, "XCH_CMD", n) == 0) return 0; while (*q && isspace(*q)) q++; --- 956,963 ---- size_t n = q - p; /* Invalid params for non-priv'd. Turn to a hashtable if we ever get more? */ ! if (strncasecmp((char *) p, "SEND", n) == 0 ! || strncasecmp((char *) p, "XCH_CMD", n) == 0) return 0; while (*q && isspace(*q)) q++; *************** *** 1239,1247 **** struct guh_args { char *buff; /**< Buffer for output */ char *bp; /**< Pointer to buff's current position */ ! char *lookfor; /**< String to grep for */ ! int len; /**< Length of lookfor */ ! int insensitive; /**< If 1, case-insensitive match; if 0, sensitive */ }; static int --- 1244,1251 ---- struct guh_args { char *buff; /**< Buffer for output */ char *bp; /**< Pointer to buff's current position */ ! char *lookfor; /**< Pattern to grep for */ ! int sensitive; /**< If 1, case-sensitive match; if 0, insensitive */ }; static int *************** *** 1252,1265 **** __attribute__ ((__unused__)), ATTR *atr, void *args) { struct guh_args *guh = args; ! int found; char *s; s = (char *) atr_value(atr); /* warning: static */ found = 0; while (*s && !found) { ! if ((!guh->insensitive && !strncmp(guh->lookfor, s, guh->len)) || ! (guh->insensitive && !strncasecmp(guh->lookfor, s, guh->len))) found = 1; else s++; --- 1256,1271 ---- __attribute__ ((__unused__)), ATTR *atr, void *args) { struct guh_args *guh = args; ! int found = 0; char *s; + int len; s = (char *) atr_value(atr); /* warning: static */ + len = strlen(guh->lookfor); found = 0; while (*s && !found) { ! if ((guh->sensitive && !strncmp(guh->lookfor, s, len)) || ! (!guh->sensitive && !strncasecmp(guh->lookfor, s, len))) found = 1; else s++; *************** *** 1272,1300 **** return found; } /** Utility function for grep funtions/commands. * This function returns a list of attributes on an object that * match a name pattern and contain another string. * \param player the enactor. * \param thing object to check attributes on. ! * \param pattern wildcard pattern for attributes to check. * \param lookfor string to find within each attribute. ! * \param len length of lookfor. ! * \param insensitive if 1, case-insensitive matching; if 0, case-sensitive. * \return string containing list of attribute names with matching data. */ char * grep_util(dbref player, dbref thing, char *pattern, char *lookfor, ! int len, int insensitive) { struct guh_args guh; guh.buff = (char *) mush_malloc(BUFFER_LEN + 1, "grep_util.buff"); guh.bp = guh.buff; guh.lookfor = lookfor; ! guh.len = len; ! guh.insensitive = insensitive; ! (void) atr_iter_get(player, thing, pattern, 0, grep_util_helper, &guh); *guh.bp = '\0'; return guh.buff; } --- 1278,1325 ---- return found; } + static int + wildgrep_util_helper(dbref player __attribute__ ((__unused__)), + dbref thing __attribute__ ((__unused__)), + dbref parent __attribute__ ((__unused__)), + char const *pattern + __attribute__ ((__unused__)), ATTR *atr, void *args) + { + struct guh_args *guh = args; + int found = 0; + + if (quick_wild_new(guh->lookfor, atr_value(atr), guh->sensitive)) { + if (guh->bp != guh->buff) + safe_chr(' ', guh->buff, &guh->bp); + safe_str(AL_NAME(atr), guh->buff, &guh->bp); + found = 1; + } + return found; + } + /** Utility function for grep funtions/commands. * This function returns a list of attributes on an object that * match a name pattern and contain another string. * \param player the enactor. * \param thing object to check attributes on. ! * \param pattern wildcard or substring pattern for attributes to check. * \param lookfor string to find within each attribute. ! * \param sensitive if 1, case-sensitive matching; if 0, case-insensitive. ! * \param wild if 1, wildcard matching, if 0, substring * \return string containing list of attribute names with matching data. */ char * grep_util(dbref player, dbref thing, char *pattern, char *lookfor, ! int sensitive, int wild) { struct guh_args guh; guh.buff = (char *) mush_malloc(BUFFER_LEN + 1, "grep_util.buff"); guh.bp = guh.buff; guh.lookfor = lookfor; ! guh.sensitive = sensitive; ! (void) atr_iter_get(player, thing, pattern, 0, wild ? wildgrep_util_helper ! : grep_util_helper, &guh); *guh.bp = '\0'; return guh.buff; } *************** *** 1394,1400 **** if (!atr_iter_get(player, thing, pattern, 0, grep_helper, &gh)) notify(player, T("No matching attributes.")); } else { ! tp = grep_util(player, thing, pattern, lookfor, len, insensitive); notify_format(player, T("Matches of '%s' on %s(#%d): %s"), lookfor, Name(thing), thing, tp); mush_free((Malloc_t) tp, "grep_util.buff"); --- 1419,1425 ---- if (!atr_iter_get(player, thing, pattern, 0, grep_helper, &gh)) notify(player, T("No matching attributes.")); } else { ! tp = grep_util(player, thing, pattern, lookfor, !insensitive, 0); notify_format(player, T("Matches of '%s' on %s(#%d): %s"), lookfor, Name(thing), thing, tp); mush_free((Malloc_t) tp, "grep_util.buff"); *** 1_8_1.216/src/parse.c Tue, 17 Jan 2006 14:08:38 -0600 dunemush (pennmush/b/48_parse.c 1.23.1.10.1.2.1.1.1.1.1.2.1.2.1.41.1.7 660) --- 1_8_1.274(w)/src/parse.c Wed, 01 Mar 2006 14:33:24 -0600 dunemush (pennmush/b/48_parse.c 1.23.1.10.1.2.1.1.1.1.1.2.1.2.1.41.1.8 660) *************** *** 646,652 **** --- 646,655 ---- global_eval_context.re_subpatterns >= 0) { char obuf[BUFFER_LEN]; int p = 0; + char subspace[BUFFER_LEN]; + char *named_substring = NULL; + obuf[0] = '\0'; (*str)++; /* Check the first two characters after the $ for a number */ if (isdigit((unsigned char) **str)) { *************** *** 662,685 **** safe_number(p, buff, bp); } } } else { safe_chr('$', buff, bp); break; } ! if (p >= global_eval_context.re_subpatterns || global_eval_context.re_offsets == NULL || global_eval_context.re_from == NULL) { /* It's out of bounds, return */ safe_chr('$', buff, bp); ! safe_number(p, buff, bp); break; } ! pcre_copy_substring(global_eval_context.re_from, ! global_eval_context.re_offsets, ! global_eval_context.re_subpatterns, ! p, obuf, BUFFER_LEN); safe_str(obuf, buff, bp); } else { safe_chr('$', buff, bp); --- 665,712 ---- safe_number(p, buff, bp); } } + /* Look for a named subexpression */ + } else if (**str == '<') { + char *nbuf = subspace; + (*str)++; + for (; *str && **str != '>'; (*str)++) + safe_chr(**str, subspace, &nbuf); + *nbuf = '\0'; + if (*str) + (*str)++; + if (is_strict_integer(subspace)) + p = abs(parse_integer(subspace)); + else + named_substring = subspace; } else { safe_chr('$', buff, bp); break; } ! if ((!named_substring && p >= global_eval_context.re_subpatterns) || global_eval_context.re_offsets == NULL || global_eval_context.re_from == NULL) { /* It's out of bounds, return */ safe_chr('$', buff, bp); ! if (named_substring) ! safe_format(buff, bp, "<%s>", named_substring); ! else ! safe_integer(p, buff, bp); break; } ! if (named_substring) { ! pcre_copy_named_substring(global_eval_context.re_code, ! global_eval_context.re_from, ! global_eval_context.re_offsets, ! global_eval_context.re_subpatterns, ! named_substring, obuf, BUFFER_LEN); ! } else { ! pcre_copy_substring(global_eval_context.re_from, ! global_eval_context.re_offsets, ! global_eval_context.re_subpatterns, ! p, obuf, BUFFER_LEN); ! } safe_str(obuf, buff, bp); } else { safe_chr('$', buff, bp); *** 1_8_1.216/src/mycrypt.c Sun, 25 Apr 2004 18:44:51 -0500 dunemush (pennmush/b/50_mycrypt.c 1.12 660) --- 1_8_1.274(w)/src/mycrypt.c Wed, 01 Mar 2006 14:33:24 -0600 dunemush (pennmush/b/50_mycrypt.c 1.13 660) *************** *** 31,40 **** static char crypt_buff[70]; #ifdef HAS_OPENSSL ! char hash[SHA_DIGEST_LENGTH]; unsigned int a, b; ! SHA(key, strlen(key), hash); memcpy(&a, hash, sizeof a); memcpy(&b, hash + sizeof a, sizeof b); --- 31,40 ---- static char crypt_buff[70]; #ifdef HAS_OPENSSL ! unsigned char hash[SHA_DIGEST_LENGTH]; unsigned int a, b; ! SHA((unsigned char *) key, strlen(key), hash); memcpy(&a, hash, sizeof a); memcpy(&b, hash + sizeof a, sizeof b); *** 1_8_1.216/src/look.c Mon, 27 Jun 2005 10:17:42 -0500 dunemush (pennmush/c/4_look.c 1.21.1.2.1.9.1.1.1.1.1.50 660) --- 1_8_1.274(w)/src/look.c Wed, 01 Mar 2006 14:33:24 -0600 dunemush (pennmush/c/4_look.c 1.21.1.2.1.9.1.1.1.1.1.57 660) *************** *** 497,503 **** } } tag("HR"); ! tag_wrap("FONT", "SIZE=+3", unparse_room(player, loc)); PEND; notify_by(loc, player, pbuff); } --- 497,503 ---- } } tag("HR"); ! tag_wrap("FONT", "SIZE=+2", unparse_room(player, loc)); PEND; notify_by(loc, player, pbuff); } *************** *** 788,794 **** } if (ok) { PUSE; ! tag_wrap("FONT", "SIZE=+3", object_header(player, thing)); PEND; notify(player, pbuff); if (FLAGS_ON_EXAMINE) --- 788,794 ---- } if (ok) { PUSE; ! tag_wrap("FONT", "SIZE=+2", object_header(player, thing)); PEND; notify(player, pbuff); if (FLAGS_ON_EXAMINE) *************** *** 1371,1391 **** decompose_str(char *what) { static char value[BUFFER_LEN]; ! char *ptr, *s; int len; int dospace; len = strlen(what); /* Go through the string, escaping characters and * turning every other space into %b. */ s = value; ptr = what; /* Put a \ at the beginning if it won't already be put there, * unless it's a space, which would require %b, %r, or %t anyway */ if (!escaped_chars[(unsigned int) *what] && !isspace(*what)) { safe_chr('\\', value, &s); } dospace = 1; for (; *ptr; ptr++) { switch (*ptr) { --- 1371,1399 ---- decompose_str(char *what) { static char value[BUFFER_LEN]; ! char *ptr, *s, *codestart; ! char ansi_letter; int len; int dospace; + int flag_depth, ansi_depth; + int digits; len = strlen(what); + flag_depth = 0; + ansi_depth = 0; + /* Go through the string, escaping characters and * turning every other space into %b. */ s = value; ptr = what; + #ifdef NEVER /* Put a \ at the beginning if it won't already be put there, * unless it's a space, which would require %b, %r, or %t anyway */ if (!escaped_chars[(unsigned int) *what] && !isspace(*what)) { safe_chr('\\', value, &s); } + #endif dospace = 1; for (; *ptr; ptr++) { switch (*ptr) { *************** *** 1405,1410 **** --- 1413,1567 ---- dospace = 0; safe_str("%t", value, &s); break; + case ESC_CHAR: + ptr++; + if (!*ptr) { + ptr--; + break; + } + /* Check if this is any sort of useful code. */ + if (*ptr == '[' && *(ptr + 1) && *(ptr + 2)) { + codestart = ptr; /* Save the address of the escape code. */ + ptr++; + digits = 0; /* Digit count is zero. */ + /* The following code works in this way: + * 1) If a character is a ;, we are allowed to count 2 more digits + * 2) If the digits count is 3, break out of the "ansi" code. + * 3) If the character is not a number or ;, break out. + * 4) If an 'm' is encountered, the for-loop exits. + * The only non-breaking exit occurs when the code ends with "m". + * Otherwise, we break out with the ptr pointing to the end of + * the invalid code, causing decompose() to ignore it entirely. + */ + for (; *ptr && (*ptr != 'm'); ptr++) { + if (*ptr == ';') { + if (digits == 0) { /* No double-;s are allowed. */ + digits = 3; + break; + } + digits = 0; + } else if (digits >= 2) { + digits = 3; /* If we encounter a 3-number code, break out. */ + break; + } else if (isdigit(*ptr)) { + digits++; /* Count the numbers we encounter. */ + } else { + digits = 3; + break; + } + } + + /* 3 is the break-code. 0 means there's no ANSI at all! */ + if (!*ptr || digits == 3 || digits == 0) { + break; + } + + /* It IS an ansi code! It ends in "m" anyway. + * Set ptr to point to the first digit in the code. We are + * promised at this point that ptr+1 is not NUL. + */ + ptr = codestart + 1; + + /* Check if the first part of the code is two-digit (color) */ + if (*(ptr + 1) >= '0' && *(ptr + 1) <= '7') { + if (flag_depth < ansi_depth) { + safe_str(")]", value, &s); + ansi_depth--; + } + } else { /* ansi "flag", inverse, flash, underline, hilight */ + flag_depth = ansi_depth + 1; + } + /* Check to see if this is an 'ansi-reset' code. */ + if (*ptr == '0' && *(ptr + 1) == 'm') { + for (; ansi_depth > 0; ansi_depth--) { + safe_str(")]", value, &s); + } + flag_depth = 0; + ptr++; + break; + } + + ansi_depth++; + safe_str("[ansi(", value, &s); + dospace = 1; + + /* code for decompiling ansi */ + for (; isdigit(*ptr) || *ptr == ';'; ptr++) { + if (*ptr == ';') /* Yes, it is necessary to do it this way. */ + ptr++; + /* Break if there is an 'm' here. */ + if (!*ptr || !isdigit(*ptr)) + break; + /* Check to see if the code is one character long. */ + if (*(ptr + 1) == ';' || *(ptr + 1) == 'm') { + /* ANSI flag */ + switch (*ptr) { + case '1': + safe_chr('h', value, &s); + break; + case '4': + safe_chr('u', value, &s); + break; + case '5': + safe_chr('f', value, &s); + break; + case '7': + safe_chr('i', value, &s); + break; + default: /* Not a valid code. */ + break; + } + } else { + if (!*(ptr + 1)) + break; /* Sudden string end or lack of real color code. */ + ptr++; + + /* Check if this could be a real color (starts with 3 or 4) */ + if (*(ptr - 1) == '3' || *(ptr - 1) == '4') { + switch (*ptr) { + case '0': + ansi_letter = 'x'; + break; + case '1': + ansi_letter = 'r'; + break; + case '2': + ansi_letter = 'g'; + break; + case '3': + ansi_letter = 'y'; + break; + case '4': + ansi_letter = 'b'; + break; + case '5': + ansi_letter = 'm'; + break; + case '6': + ansi_letter = 'c'; + break; + case '7': + ansi_letter = 'w'; + break; + default: + break; /* Not a valid color. */ + } + /* If background color, change the letter to a capital. */ + if (*(ptr - 1) == '4') + ansi_letter = toupper(ansi_letter); + safe_chr(ansi_letter, value, &s); + } + /* No "else" here: If a two-digit code + * doesn't start with 3 or 4, is isn't ANSI. */ + } + } + safe_chr(',', value, &s); + } else { + ptr--; + /* This shouldn't happen if we only have ansi codes + * So if more dirty things must be added later... */ + } + break; default: if (escaped_chars[(unsigned int) *ptr]) { safe_chr('\\', value, &s); *************** *** 1418,1423 **** --- 1575,1583 ---- s -= 1; safe_str("%b", value, &s); } + for (; ansi_depth > 0; ansi_depth--) { + safe_str(")]", value, &s); + } *s = '\0'; return value; } *** 1_8_1.216/src/game.c Tue, 17 Jan 2006 14:08:38 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1.2.1.1.1.2.1.1.4.1.1.1.1.1.1.1.1.1.1.2.1.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.5.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.12.1.3.1.7.1.2.2.1.1.32.1.2.2.1.1.1.1.7 660) --- 1_8_1.274(w)/src/game.c Wed, 01 Mar 2006 14:33:24 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1.2.1.1.1.2.1.1.4.1.1.1.1.1.1.1.1.1.1.2.1.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.5.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.12.1.3.1.7.1.2.2.1.1.32.1.2.2.1.1.1.1.8 660) *************** *** 661,666 **** --- 661,667 ---- global_eval_context.rnxt[j] = NULL; /* Initialize the regexp patterns to nothing */ + global_eval_context.re_code = NULL; global_eval_context.re_subpatterns = -1; global_eval_context.re_offsets = NULL; global_eval_context.re_from = NULL; *** 1_8_1.216/src/funmath.c Sat, 27 Aug 2005 13:12:37 -0500 dunemush (pennmush/c/15_funmath.c 1.39.1.1.1.1.1.1.1.10.1.16 660) --- 1_8_1.274(w)/src/funmath.c Wed, 01 Mar 2006 14:33:23 -0600 dunemush (pennmush/c/15_funmath.c 1.39.1.1.1.1.1.1.1.10.1.17 660) *************** *** 32,37 **** --- 32,38 ---- #define EQ(x,y) (fabs(x-y) < EPSILON) /**< floating point equality macro */ static void do_spellnum(char *num, unsigned int len, char **buff, char ***bp); + static void do_ordinalize(char **buff, char ***bp); static int nval_sort(const void *, const void *); static NVAL find_median(NVAL *, int); *************** *** 1398,1403 **** --- 1399,1438 ---- } } /* do_spellnum */ + /** Convert the end of a spelled number string to ordinal form. */ + static void + do_ordinalize(char **buff, char ***bp) + { + char *p; + int i, len; + static const char *singles[] = { "one", "two", "three", "four", + "five", "six", "seven", "eight", "nine" + }; + static const char *singleths[] = { "first", "second", "third", "fourth", + "fifth", "sixth", "seventh", "eighth", "ninth" + }; + /* Examine the end of the string */ + for (i = 0; i < 9; i++) { +