[PENNMUSH-ANNOUNCE] 1.7.4-patch16
dunemush@pennmush.org
dunemush at pennmush.org
Tue, 19 Mar 2002 08:17:37 -0600
This is patch16 to PennMUSH 1.7.4. After applying this patch, you will
have version 1.7.4p16
To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
patch -p1 < 1.7.4-patch16
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.
Then @shutdown and restart your MUSH.
- Alan/Javelin
In this patch:
Minor changes:
* After using 'register' at the connect screen, the player is
no longer disconnected. Suggested by Philip Mak.
* 'help mail functions'. Suggested by Trispis@M*U*S*H.
* Messages associated with drop, give, and get are now more
verbose and provide more information about who did what to whom.
Suggested by Philip Mak.
* Attrib locks did case-sensitive comparison of values, which is not
what you probably want. No longer. Reported by Philip Mak. [SW]
* QUEUE and sempahore attributes are now removed (not just emptied)
when drained or notified to 0. [TAP]
Fixes:
* Improvements in handling ansi in string functions. [SW]
* @clone/preserve didn't preserve when cloning exits. Reported by
Bellemore@M*U*S*H. [SW]
* A significant bug in the manual notification of timed semaphores has
been corrected. [SW]
* Revian@M*U*S*H pointed out that user-defined commands starting with
"@" that match the names of standard attributes don't behave as
you might expect. This is now documented in help user-defined commands.
* Security checks for attribute setting used the owner of the setting
object, not the setting object itself. Report by Howie@New Frontier.
* help set() improved based on report by Tareldin@M*U*S*H.
* folderstats() did not behave as promised in the help. Now it
does. Report by Trispis@M*U*S*H.
* Typo in src/log.c fixed by Nathan Schuette.
* Improved help for DEBUG. [SW]
* Aliased 'help ^' to 'help listening2'. Suggested by Philip Mak.
* MacOS portability fixes. [DW]
* The sigusr1 handler would reinstall itself as the sighup handler
on systems that don't provide persistent signals.
Fixed by Bellemore@M*U*S*H.
* &a=b me now properly clears the attribute A=B. Reported by
Trispis@M*U*S*H. In addition, now @tel #1234= produces an error,
as it should. [SW]
* mail functions can now be called by an object on anything it controls
(typically, its owner). Suggested by Trispis@M*U*S*H.
* The givee is now correctly passed in %1 to @give/@ogive/@agive,
and documented. Reported by Philip Mak.
* Added hints for Irix 6.x by Vexon@M*U*S*H.
* i18n fix for function invocation limit message.
* Clarification in help @alias by Philip Mak.
* @set obj=!puppet repeatedly no longer repeats the "not listening"
message. Reported by Philip Mak.
Prereq: 1.7.4p15
*** 1_7_4.210/Patchlevel Sun, 10 Feb 2002 09:30:30 -0600 dunemush (pennmush/5_Patchlevel 1.33 600)
--- 1_7_4.243(w)/Patchlevel Mon, 11 Mar 2002 18:21:47 -0600 dunemush (pennmush/5_Patchlevel 1.34 600)
***************
*** 1,2 ****
Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.4p15
--- 1,2 ----
Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.4p16
*** 1_7_4.210/CHANGES Sun, 10 Feb 2002 09:30:30 -0600 dunemush (pennmush/8_CHANGES 1.219.1.72.1.1 600)
--- 1_7_4.243(w)/CHANGES Sat, 16 Mar 2002 09:31:48 -0600 dunemush (pennmush/8_CHANGES 1.219.1.72.1.21 600)
***************
*** 18,23 ****
--- 18,71 ----
==========================================================================
+ Version 1.7.4 patchlevel 16 March 11, 2002
+
+ Minor changes:
+ * After using 'register' at the connect screen, the player is
+ no longer disconnected. Suggested by Philip Mak.
+ * 'help mail functions'. Suggested by Trispis@M*U*S*H.
+ * Messages associated with drop, give, and get are now more
+ verbose and provide more information about who did what to whom.
+ Suggested by Philip Mak.
+ * Attrib locks did case-sensitive comparison of values, which is not
+ what you probably want. No longer. Reported by Philip Mak. [SW]
+ * QUEUE and sempahore attributes are now removed (not just emptied)
+ when drained or notified to 0. [TAP]
+ Fixes:
+ * Improvements in handling ansi in string functions. [SW]
+ * @clone/preserve didn't preserve when cloning exits. Reported by
+ Bellemore@M*U*S*H. [SW]
+ * A significant bug in the manual notification of timed semaphores has
+ been corrected. [SW]
+ * Revian@M*U*S*H pointed out that user-defined commands starting with
+ "@" that match the names of standard attributes don't behave as
+ you might expect. This is now documented in help user-defined commands.
+ * Security checks for attribute setting used the owner of the setting
+ object, not the setting object itself. Report by Howie@New Frontier.
+ * help set() improved based on report by Tareldin@M*U*S*H.
+ * folderstats() did not behave as promised in the help. Now it
+ does. Report by Trispis@M*U*S*H.
+ * Typo in src/log.c fixed by Nathan Schuette.
+ * Improved help for DEBUG. [SW]
+ * Aliased 'help ^' to 'help listening2'. Suggested by Philip Mak.
+ * MacOS portability fixes. [DW]
+ * The sigusr1 handler would reinstall itself as the sighup handler
+ on systems that don't provide persistent signals.
+ Fixed by Bellemore@M*U*S*H.
+ * &a=b me now properly clears the attribute A=B. Reported by
+ Trispis@M*U*S*H. In addition, now @tel #1234= produces an error,
+ as it should. [SW]
+ * mail functions can now be called by an object on anything it controls
+ (typically, its owner). Suggested by Trispis@M*U*S*H.
+ * The givee is now correctly passed in %1 to @give/@ogive/@agive,
+ and documented. Reported by Philip Mak.
+ * Added hints for Irix 6.x by Vexon@M*U*S*H.
+ * i18n fix for function invocation limit message.
+ * Clarification in help @alias by Philip Mak.
+ * @set obj=!puppet repeatedly no longer repeats the "not listening"
+ message. Reported by Philip Mak.
+
+
Version 1.7.4 patchlevel 15 February 8, 2002
Minor Changes:
***************
*** 177,186 ****
* Improved failure message for @password. Suggested by Mike Wesson. [SW]
* alphamin()/alphamax() were stripping markup from what they returned. [SW]
* PARANOID flag is now only visible to owners. Reported by
! Bellemore@BelleMUSH.
* Improved error message when trying to rejoin a channel. [SW]
* In Win32 NT_TCP mode, ident lookups are now done and the LASTIP
! attribute doesn't get corrupted. Patch by Bellemore@BelleMUSH.
* @chan/describe now works along with @chan/desc. Suggested by
Trispis@M*U*S*H
* 'teach'ing a motion to a follower didn't work right. Reported by
--- 225,234 ----
* Improved failure message for @password. Suggested by Mike Wesson. [SW]
* alphamin()/alphamax() were stripping markup from what they returned. [SW]
* PARANOID flag is now only visible to owners. Reported by
! Bellemore@M*U*S*H.
* Improved error message when trying to rejoin a channel. [SW]
* In Win32 NT_TCP mode, ident lookups are now done and the LASTIP
! attribute doesn't get corrupted. Patch by Bellemore@M*U*S*H.
* @chan/describe now works along with @chan/desc. Suggested by
Trispis@M*U*S*H
* 'teach'ing a motion to a follower didn't work right. Reported by
*** 1_7_4.210/game/txt/hlp/pennvers.hlp Sun, 10 Feb 2002 09:30:30 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.1 600)
--- 1_7_4.243(w)/game/txt/hlp/pennvers.hlp Sun, 17 Mar 2002 13:17:19 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1 600)
***************
*** 1,5 ****
& changes
! & 1.7.4p15
This is a list of changes in this patchlevel which are probably of
interest to players. More information about new commands and functions
can probably be gotten via 'help <name of whatever>'. 'help credits'
--- 1,5 ----
& changes
! & 1.7.4p16
This is a list of changes in this patchlevel which are probably of
interest to players. More information about new commands and functions
can probably be gotten via 'help <name of whatever>'. 'help credits'
***************
*** 11,16 ****
--- 11,65 ----
A list of the patchlevels associated with each release can
be read in 'help patchlevels'.
+ Version 1.7.4 patchlevel 16 March 11, 2002
+
+ Minor changes:
+ * After using 'register' at the connect screen, the player is
+ no longer disconnected. Suggested by Philip Mak.
+ * 'help mail functions'. Suggested by Trispis@M*U*S*H.
+ * Messages associated with drop, give, and get are now more
+ verbose and provide more information about who did what to whom.
+ Suggested by Philip Mak.
+ * Attrib locks did case-sensitive comparison of values, which is not
+ what you probably want. No longer. Reported by Philip Mak. [SW]
+ * QUEUE and sempahore attributes are now removed (not just emptied)
+ when drained or notified to 0. [TAP]
+ Fixes:
+ * Improvements in handling ansi in string functions. [SW]
+ * @clone/preserve didn't preserve when cloning exits. Reported by
+ Bellemore@M*U*S*H. [SW]
+ * A significant bug in the manual notification of timed semaphores has
+ been corrected. [SW]
+ * Revian@M*U*S*H pointed out that user-defined commands starting with
+ "@" that match the names of standard attributes don't behave as
+ you might expect. This is now documented in help user-defined commands.
+ * Security checks for attribute setting used the owner of the setting
+ object, not the setting object itself. Report by Howie@New Frontier.
+ * help set() improved based on report by Tareldin@M*U*S*H.
+ * folderstats() did not behave as promised in the help. Now it
+ does. Report by Trispis@M*U*S*H.
+ * Typo in src/log.c fixed by Nathan Schuette.
+ * Improved help for DEBUG. [SW]
+ * Aliased 'help ^' to 'help listening2'. Suggested by Philip Mak.
+ * MacOS portability fixes. [DW]
+ * The sigusr1 handler would reinstall itself as the sighup handler
+ on systems that don't provide persistent signals.
+ Fixed by Bellemore@M*U*S*H.
+ * &a=b me now properly clears the attribute A=B. Reported by
+ Trispis@M*U*S*H. In addition, now @tel #1234= produces an error,
+ as it should. [SW]
+ * mail functions can now be called by an object on anything it controls
+ (typically, its owner). Suggested by Trispis@M*U*S*H.
+ * The givee is now correctly passed in %1 to @give/@ogive/@agive,
+ and documented. Reported by Philip Mak.
+ * Added hints for Irix 6.x by Vexon@M*U*S*H.
+ * i18n fix for function invocation limit message.
+ * Clarification in help @alias by Philip Mak.
+ * @set obj=!puppet repeatedly no longer repeats the "not listening"
+ message. Reported by Philip Mak.
+
+
+ & 1.7.4p15
Version 1.7.4 patchlevel 15 February 8, 2002
Minor Changes:
***************
*** 176,185 ****
* Improved failure message for @password. Suggested by Mike Wesson. [SW]
* alphamin()/alphamax() were stripping markup from what they returned. [SW]
* PARANOID flag is now only visible to owners. Reported by
! Bellemore@BelleMUSH.
* Improved error message when trying to rejoin a channel. [SW]
* In Win32 NT_TCP mode, ident lookups are now done and the LASTIP
! attribute doesn't get corrupted. Patch by Bellemore@BelleMUSH.
* @chan/describe now works along with @chan/desc. Suggested by
Trispis@M*U*S*H
* 'teach'ing a motion to a follower didn't work right. Reported by
--- 225,234 ----
* Improved failure message for @password. Suggested by Mike Wesson. [SW]
* alphamin()/alphamax() were stripping markup from what they returned. [SW]
* PARANOID flag is now only visible to owners. Reported by
! Bellemore@M*U*S*H.
* Improved error message when trying to rejoin a channel. [SW]
* In Win32 NT_TCP mode, ident lookups are now done and the LASTIP
! attribute doesn't get corrupted. Patch by Bellemore@M*U*S*H.
* @chan/describe now works along with @chan/desc. Suggested by
Trispis@M*U*S*H
* 'teach'ing a motion to a follower didn't work right. Reported by
***************
*** 4978,4984 ****
For information on a specific patchlevel of one of the versions listed,
type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
! 1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35
--- 5027,5033 ----
For information on a specific patchlevel of one of the versions listed,
type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
! 1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35
*** 1_7_4.210/game/txt/hlp/penntop.hlp Mon, 05 Nov 2001 10:50:45 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1 600)
--- 1_7_4.243(w)/game/txt/hlp/penntop.hlp Mon, 04 Mar 2002 15:13:34 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1 600)
***************
*** 673,678 ****
--- 673,679 ----
Welcome Mat says, "Welcome, Breaker!"
(continued in help listening2)
+ & ^
& LISTENING2
If you need an object to "listen" for more than one pattern, you can
also use ^-patterns. These work similar to user-defined commands,
***************
*** 1567,1573 ****
& $-COMMANDS
& MACROS
& USER-DEFINED COMMANDS
-
User-defined commands can be created by setting $-commands on players,
things, and rooms. Exits cannot have $-commands. To set a $-command:
--- 1568,1573 ----
***************
*** 1581,1586 ****
--- 1581,1591 ----
Such attributes can also be @triggered as if the $<command name>:
did not exist.
+
+ It is recommended that <command name> not begin with "@", as the
+ command parser treats @ specially and may cause your command to fail
+ if the name might also match an attribute name. Conventionally,
+ global commands are often named with the "+" prefix.
(continued in help user-defined2)
& $-COMMANDS2
*** 1_7_4.210/game/txt/hlp/pennfunc.hlp Mon, 28 Jan 2002 09:38:46 -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 600)
--- 1_7_4.243(w)/game/txt/hlp/pennfunc.hlp Mon, 11 Mar 2002 18:20:43 -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.2 600)
***************
*** 47,52 ****
--- 47,53 ----
Global functions: local MUSH-specific functions defined with @function
Information functions: find out something about objects (FLAGS, MONEY)
List functions: manipulate lists (REVWORDS, FIRST)
+ Mail functions: manipulate @mail (MAIL, FOLDERSTATS)
Math functions: number manipulation, generic or integers only (ADD, DIV)
Regular expression functions: Regular expressions (REGMATCH, REGEDIT)
String functions: string manipulation (ESCAPE, FLIP)
***************
*** 102,120 ****
See also: DBREF
& Information functions
! Information functions return values related to objects, channels,
! or mail.
andflags() cflags() channels() clock() config()
conn() controls() ctime() ctitle() cwho()
! doing() elock() findable() flags() folderstats()
! fullname() hasattr() hasattrp() hasflag() haspower()
! hastype() hidden() idle() lock() lstats()
! lwho() mail() mailfrom() mailsubject() mailstats()
! mailstatus() mailtime() money() mtime() mwho()
! name() nattr() nearby() objmem() orflags()
! playermem() poll() ports() powers() quota()
! type() visible()
& Floating point functions
Floating point functions operate on floating point numbers. Most of
--- 103,124 ----
See also: DBREF
& Information functions
! Information functions return values related to objects or channels.
andflags() cflags() channels() clock() config()
conn() controls() ctime() ctitle() cwho()
! doing() elock() findable() flags() fullname()
! hasattr() hasattrp() hasflag() haspower() hastype()
! hidden() idle() lock() lstats() lwho()
! money() mtime() mwho() name() nattr()
! nearby() objmem() orflags() playermem() poll()
! ports() powers() quota() type() visible()
!
! & Mail functions
! Mail functions work with @mail.
!
! folderstats() mail() maildstats() mailfrom() mailfstats()
! mailstats() mailstatus() mailsubject() mailtime()
& Floating point functions
Floating point functions operate on floating point numbers. Most of
***************
*** 2524,2535 ****
See also: ESCAPE()
& SET()
! set(<name>, <string>)
This function is equivalent to @set, and can be used to switch
! flags, set attributes, and many other things. The <name> and
! <string> fields correspond to the stuff before and after the '='
! in @set. This function returns nothing.
Note that you can't clear an attribute with set(), though
you can make it an empty attribute. Use wipe() to clear attributes.
--- 2528,2541 ----
See also: ESCAPE()
& SET()
! set(<object>, <flag>)
! set(<object>/<attribute>, <attribute flag>)
! set(<object>, <attribute>:<value>)
This function is equivalent to @set, and can be used to switch
! flags, set attributes, and many other things. The two arguments
! to the function are the same as the arguments that would appear
! on either side of the '=' in @set. This function returns nothing.
Note that you can't clear an attribute with set(), though
you can make it an empty attribute. Use wipe() to clear attributes.
*** 1_7_4.210/game/txt/hlp/pennflag.hlp Fri, 03 Aug 2001 11:00:30 -0500 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 600)
--- 1_7_4.243(w)/game/txt/hlp/pennflag.hlp Mon, 04 Mar 2002 15:09:00 -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 600)
***************
*** 197,203 ****
The DEBUG flag is used for debugging MUSHcode. It is meant to be used
in conjunction with the VERBOSE flag. If an object is set DEBUG, all
parser evaluation results will be shown to the object's owner, in the
! format: #<object dbref>! <string to evaluate> => <evaluated string>
Note that verbose output is "#obj]" - debug output is "#obj!".
Because the parser does recursive evaluations, you will see successive
--- 197,208 ----
The DEBUG flag is used for debugging MUSHcode. It is meant to be used
in conjunction with the VERBOSE flag. If an object is set DEBUG, all
parser evaluation results will be shown to the object's owner, in the
! format:
!
! #dbref! <string to evaluate> :
! #dbref! recursive evaluation of functions in string
! #dbref! <string to evaluate> => <evaluated string>
!
Note that verbose output is "#obj]" - debug output is "#obj!".
Because the parser does recursive evaluations, you will see successive
***************
*** 205,216 ****
to pinpoint exactly which evaluation is going wrong.
Objects run under this flag are computationally expensive.
! Avoid leaving it set on objects.
!
! During a DEBUG evaluation, the flag is temporarily reset; therefore,
! a test for HASFLAG(), FLAGS(), etc. in the debug execution will show
! that the DEBUG flag is not set (although the actual output will be
! correct.)
See "help DEBUG2" for more.
& DEBUG2
--- 210,217 ----
to pinpoint exactly which evaluation is going wrong.
Objects run under this flag are computationally expensive.
! Avoid leaving it set on objects. It can also generate huge amounts of
! spam from the output.
See "help DEBUG2" for more.
& DEBUG2
***************
*** 219,230 ****
> @va test=$wc *:"String %0 has [strlen(%0)] letters and [words(%0)] words.
> wc This is my test string
! #14! String %0 has [strlen(%0)] letters and [words(%0)] words. => String
! This is my test string has 22 letters and 5 words.
! #14! strlen(%0) => 22
! #14! %0 => This is my test string
! #14! words(%0) => 5
! #14! %0 => This is my test string
Test says, "String This is my test string has 22 letters and 5 words."
& DESTROY_OK
Flag: DESTROY_OK (things)
--- 220,234 ----
> @va test=$wc *:"String %0 has [strlen(%0)] letters and [words(%0)] words.
> wc This is my test string
! #14! String %0 has [strlen(%0)] letters and [words(%0)] words. :
! #14! strlen(%0) :
! #14! %0 => This is my test string
! #14! strlen(%0) => 22
! #14! words(%0) :
! #14! %0 => This is my test string
! #14! words(%0) => 5
! #14! String %0 has [strlen(%0)] letters and [words(%0)] words. =>
! String This is my test string has 22 letters and 5 words.
Test says, "String This is my test string has 22 letters and 5 words."
& DESTROY_OK
Flag: DESTROY_OK (things)
*** 1_7_4.210/game/txt/hlp/penncmd.hlp Wed, 07 Nov 2001 19:38:52 -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 600)
--- 1_7_4.243(w)/game/txt/hlp/penncmd.hlp Sat, 16 Mar 2002 09:22:59 -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 600)
***************
*** 261,266 ****
--- 261,268 ----
Aliases cannot be longer than the limit allowed for player names,
cannot contain spaces, and must be unique -- no other player may
have the same alias or name as any other player's alias or name.
+
+ @alias has no effect on non-players.
& @allhalt
@allhalt
***************
*** 851,863 ****
Example: @dolist [lcon(here)] = "[name(##)]
would cause you to say the name of all objects in the room.
& @drain
! @drain <object>[/<attribute>]
!
! This command discards all commands waiting on the semaphore <object>
! and resets the semaphore to its initial state (clearing the SEMAPHORE
! attribute, or the one specified). The pending commands are removed
! from the queue without being executed.
See also the help for: SEMAPHORES, @notify, @wait
& @drop
@drop <object> [=<message>]. <object> can be a thing, player, exit,
--- 853,876 ----
Example: @dolist [lcon(here)] = "[name(##)]
would cause you to say the name of all objects in the room.
& @drain
! @drain[/any][/all] <object>[/<attribute>][=<number>]
+ This command discards commands waiting on a semaphore without
+ executing them.
+
+ If the /any switch is given, then all semaphores associated with
+ <object> are @drained. Otherwise, the only the specified semaphore
+ attribute (or SEMAPHORE if no attribute is specified) is @drained.
+
+ If the /all switch is given, then all queue entries associated
+ with the selected semaphore(s) are discarded, and the semaphore
+ attribute(s) are cleared. Otherwise, only the indicated <number>
+ of queue entries are discarded. If no <number> is given, then
+ the /all switch is assumed.
+
+ You may not specify both the /any switch and a specific attribute.
+ Similarly, you may not specify both the /all switch and a number.
+
See also the help for: SEMAPHORES, @notify, @wait
& @drop
@drop <object> [=<message>]. <object> can be a thing, player, exit,
***************
*** 1833,1850 ****
See also: @password
& @notify
! @notify[/all] <object>[/<attribute>][=<count>]
! This command notifies the semaphore <object>, running the first
! command that waited on <object> using the semaphore version of
! @wait. If <count> is specified, it notifies the semaphore that
! many times. If there are no commands, or less than <count>
! commands, pending for <object>, then subsequent @waits will not
! block until the semaphore count reaches zero again.
!
! The "/all" switch to this command notifies the semaphore until
! the semaphore count is exactly zero; all commands pending on that
! semaphore are executed immediately. <count> is ignored.
See also: SEMAPHORES, @drain, @wait
& @odeath
--- 1846,1872 ----
See also: @password
& @notify
! @notify[/any][/all] <object>[/<attribute>][=<count>]
!
! This command notifies a semaphore, allowing commands queued for
! that semaphore to be executed.
!
! If the /any switch is given, then all semaphores associated with
! <object> are @notified. Otherwise, the only the specified semaphore
! attribute (or SEMAPHORE if no attribute is specified) is @notified.
!
! If the /all switch is given, then all queue entries associated
! with the selected semaphore(s) are executed. Otherwise, only the
! first <number> of queue entries are run. If no <number> is given,
! then only one queue entry is run.
!
! If the /all switch was not used, and there were not enough queue
! entries waiting to satisfy the requested <number> (or 1, if no
! number was given), then subsequent @waits will not block until
! the requested <number> have been run.
! You may not specify both the /any switch and a specific attribute.
! Similarly, you may not specify both the /all switch and a number.
See also: SEMAPHORES, @drain, @wait
& @odeath
***************
*** 2166,2174 ****
@give sets the message that is shown to the giver when giving an object
to someone else. @ogive is a message shown to others in the giver's
location, and @agive is an action run by the giver. If not set,
! the giver gets a default message ("Given.")
%0 will be set to the dbref of the object given.
See also: give
& @pcreate
--- 2188,2197 ----
@give sets the message that is shown to the giver when giving an object
to someone else. @ogive is a message shown to others in the giver's
location, and @agive is an action run by the giver. If not set,
! the giver gets a default message.
%0 will be set to the dbref of the object given.
+ %1 will be set to the dbref of the recipient.
See also: give
& @pcreate
*** 1_7_4.210/game/mushcnf.dst Fri, 07 Sep 2001 08:13:44 -0500 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1 600)
--- 1_7_4.243(w)/game/mushcnf.dst Tue, 12 Mar 2002 11:15:36 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.1 600)
***************
*** 26,32 ****
# Should the MUSH attempt to resolve IP numbers to hostnames?
# If yes, you'll see hostnames on the wizard WHO. If no, IP numbers.
# No makes sense if you're running PennMUSH at home and don't have
! # a DNS server you can access.
use_dns yes
# Databases
--- 26,32 ----
# Should the MUSH attempt to resolve IP numbers to hostnames?
# If yes, you'll see hostnames on the wizard WHO. If no, IP numbers.
# No makes sense if you're running PennMUSH at home and don't have
! # a DNS server you can access. MacOS 7/8/9 should use 'no'
use_dns yes
# Databases
***************
*** 54,60 ****
#
# Most people can just use one of the following:
#
! # Use these 3 lines for no compression. Required on win32.
#compress_program
#uncompress_program
#compress_suffix
--- 54,60 ----
#
# Most people can just use one of the following:
#
! # Use these 3 lines for no compression. Required on win32 and MacOS 7/8/9.
#compress_program
#uncompress_program
#compress_suffix
*** 1_7_4.210/src/SWITCHES Wed, 07 Nov 2001 19:38:52 -0600 dunemush (pennmush/b/22_SWITCHES 1.13 600)
--- 1_7_4.243(w)/src/SWITCHES Mon, 25 Feb 2002 15:48:52 -0600 dunemush (pennmush/b/22_SWITCHES 1.14 600)
***************
*** 1,6 ****
--- 1,7 ----
ACCESS
ADD
ALL
+ ANY
ATTRIBS
BAN
BLIND
*** 1_7_4.210/src/timer.c Tue, 25 Sep 2001 15:42:13 -0500 dunemush (pennmush/b/29_timer.c 1.27 660)
--- 1_7_4.243(w)/src/timer.c Sun, 17 Mar 2002 13:25:53 -0600 dunemush (pennmush/b/29_timer.c 1.28 660)
***************
*** 75,81 ****
{
usr1_triggered = 1;
#ifndef SIGNALS_KEPT
! signal(SIGHUP, (void *) usr1_handler);
#endif
#ifndef VOIDSIG
return 0;
--- 75,81 ----
{
usr1_triggered = 1;
#ifndef SIGNALS_KEPT
! signal(SIGUSR1, (void *) usr1_handler);
#endif
#ifndef VOIDSIG
return 0;
*** 1_7_4.210/src/help.c Mon, 25 Jun 2001 12:31:59 -0500 dunemush (pennmush/f/32_help.c 1.4.1.2.1.1.1.3.2.2.1.1.2.1.1.2.1.2 660)
--- 1_7_4.243(w)/src/help.c Sun, 17 Mar 2002 13:25:52 -0600 dunemush (pennmush/f/32_help.c 1.4.1.2.1.1.1.3.2.2.1.1.2.1.1.2.1.2.1.2.1.1 660)
***************
*** 23,29 ****
#include "confmagic.h"
#ifdef macintosh
! extern void PMConvertPath(char *path);
#endif
HASHTAB help_files;
--- 23,29 ----
#include "confmagic.h"
#ifdef macintosh
! #include "PMInit.h"
#endif
HASHTAB help_files;
***************
*** 77,87 ****
int admin;
{
help_file *h;
if (help_init == 0)
init_help_files();
! if (!command_name || !filename || !*command_name || !*filename)
return;
/* If there's already an entry for it, complain */
--- 77,91 ----
int admin;
{
help_file *h;
+ char newfilename[256] = "\0";
+
+ /* Must use a buffer for MacOS file path conversion */
+ strncpy(newfilename, filename, 256);
if (help_init == 0)
init_help_files();
! if (!command_name || !filename || !*command_name || !*newfilename)
return;
/* If there's already an entry for it, complain */
***************
*** 91,102 ****
return;
}
#ifdef macintosh
! PMConvertPath((char *) filename);
#endif
h = mush_malloc(sizeof *h, "help_file.entry");
h->command = mush_strdup(strupper(command_name), "help_file.command");
! h->file = mush_strdup(filename, "help_file.filename");
h->entries = 0;
h->indx = NULL;
h->admin = admin;
--- 95,107 ----
return;
}
#ifdef macintosh
! /* Convert file path from a UNIX style one to a MacOS one */
! PMConvertPath((char *) newfilename, (char *) newfilename, 256);
#endif
h = mush_malloc(sizeof *h, "help_file.entry");
h->command = mush_strdup(strupper(command_name), "help_file.command");
! h->file = mush_strdup(newfilename, "help_file.filename");
h->entries = 0;
h->indx = NULL;
h->admin = admin;
***************
*** 107,114 ****
mush_free(h, "help_file.entry");
return;
}
! command_add(h->command, CMD_T_ANY | CMD_T_NOPARSE, 0, 0, 0, NULL,
! cmd_helpcmd);
hashadd(h->command, h, &help_files);
}
--- 112,119 ----
mush_free(h, "help_file.entry");
return;
}
! (void) command_add(h->command, CMD_T_ANY | CMD_T_NOPARSE, 0, 0, 0, NULL,
! cmd_helpcmd);
hashadd(h->command, h, &help_files);
}
*** 1_7_4.210/src/switchinc.c Fri, 15 Feb 2002 16:08:20 -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.3 660)
--- 1_7_4.243(w)/src/switchinc.c Sun, 17 Mar 2002 13:25:53 -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 660)
***************
*** 8,13 ****
--- 8,16 ----
"ALL", SWITCH_ALL}
, {
+ "ANY", SWITCH_ANY}
+
+ , {
"ATTRIBS", SWITCH_ATTRIBS}
, {
*** 1_7_4.210/src/strutil.c Fri, 15 Feb 2002 16:08:20 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2 660)
--- 1_7_4.243(w)/src/strutil.c Sun, 17 Mar 2002 13:25:53 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1 660)
***************
*** 39,44 ****
--- 39,67 ----
static int format_long _((long val, char *buff, char **bp, int maxlen));
+ /* Duplicate the first len characters of s */
+ char *mush_strndup _((const char *src, Size_t len, const char *check));
+ char *
+ mush_strndup(src, len, check)
+ const char *src;
+ Size_t len;
+ const char *check;
+ {
+ char *copy;
+ Size_t rlen = strlen(src);
+
+ if (rlen < len)
+ len = rlen;
+
+ copy = mush_malloc(len + 1, check);
+ if (copy) {
+ memcpy(copy, src, len);
+ copy[len] = '\0';
+ }
+
+ return copy;
+ }
+
char *
mush_strdup(s, check)
const char *s;
***************
*** 66,75 ****
char *
chopstr(str, lim)
const char *str;
! int lim;
{
static char tbuf1[BUFFER_LEN];
! if (strlen(str) <= (Size_t) lim)
return (char *) str;
strncpy(tbuf1, str, lim);
tbuf1[lim] = '\0';
--- 89,98 ----
char *
chopstr(str, lim)
const char *str;
! Size_t lim;
{
static char tbuf1[BUFFER_LEN];
! if (strlen(str) <= lim)
return (char *) str;
strncpy(tbuf1, str, lim);
tbuf1[lim] = '\0';
***************
*** 349,374 ****
int
! safe_ansi_len(src, copylen, buff, bp, maxlen)
! const char *src;
! int copylen;
char *buff;
char **bp;
- int maxlen;
{
! char tbuf[BUFFER_LEN];
! char ansibuf[BUFFER_LEN], *ap = ansibuf;
! int len;
!
! strncpy(tbuf, src, sizeof tbuf);
! len = ansi_strnlen(tbuf, copylen);
! ansi_save(tbuf + len - 1, -1, ansibuf, &ap);
! len = ansi_align(tbuf, len);
! if (len < BUFFER_LEN)
! tbuf[len] = '\0';
! if (safe_copy_str(tbuf, buff, bp, maxlen))
! return 1;
! return safe_copy_str(ansibuf, buff, bp, maxlen);
}
#undef APPEND_ARGS
--- 372,404 ----
int
! safe_fill(x, n, buff, bp)
! char x;
! Size_t n;
char *buff;
char **bp;
{
! Size_t blen;
! int ret = 0;
!
! if (n == 0)
! return 0;
! else if (n == 1)
! return safe_chr(x, buff, bp);
!
! if (n > BUFFER_LEN - 1)
! n = BUFFER_LEN - 1;
!
! blen = BUFFER_LEN - (*bp - buff);
!
! if (blen < n) {
! n = blen;
! ret = 1;
! }
! memset(*bp, x, n);
! *bp += n;
!
! return ret;
}
#undef APPEND_ARGS
***************
*** 893,957 ****
return 0;
}
- int
- ansi_save(string, length, buff, bp)
- const char *string;
- int length;
- char *buff, **bp;
- {
- const char *p;
- int i = 0;
- p = string;
- if (!p)
- return 0;
- while (*p && (length != 0)) {
- if (*p == ESC_CHAR) {
- while ((*p) && (*p != 'm')) {
- safe_chr(*p, buff, bp);
- p++;
- i++;
- }
- safe_chr(*p, buff, bp);
- i++;
- } else if (*p == TAG_START) {
- while ((*p) && (*p != TAG_END)) {
- safe_chr(*p, buff, bp);
- p++;
- i++;
- }
- safe_chr(*p, buff, bp);
- i++;
- } else if (length != -1)
- length--;
- i++;
- p++;
- }
- safe_chr('\0', buff, bp);
- return 1;
- }
-
- int
- ansi_align(string, length)
- const char *string;
- int length;
- {
- if (!string)
- return length;
- if ((Size_t) length > strlen(string))
- return strlen(string);
- string += length;
- for (; *string;)
- if (*string == ESC_CHAR)
- while ((*string) && (*string != 'm'))
- ++string, ++length;
- else if (*string == TAG_START)
- while ((*string) && (*string != TAG_END))
- ++string, ++length;
- else
- break;
- return length;
- }
-
char *
skip_leading_ansi(s)
const char *s;
--- 923,928 ----
***************
*** 980,991 ****
{
ansi_string *data;
char *y, *current = NULL;
! int p = 0;
if (!src)
return NULL;
-
data = mush_malloc(sizeof *data, "ansi_string");
if (!data)
return NULL;
--- 951,961 ----
{
ansi_string *data;
char *y, *current = NULL;
! Size_t p = 0;
if (!src)
return NULL;
data = mush_malloc(sizeof *data, "ansi_string");
if (!data)
return NULL;
***************
*** 995,1010 ****
while (*src) {
y = skip_leading_ansi(src);
if (y != src) {
- char t = *y;
- *y = '\0';
if (current)
! free(current);
! current = strdup(src);
! *y = t;
src = y;
}
if (current)
! data->codes[p] = strdup(current);
else
data->codes[p] = NULL;
data->text[p] = *src;
--- 965,977 ----
while (*src) {
y = skip_leading_ansi(src);
if (y != src) {
if (current)
! mush_free(current, "markup_codes");
! current = mush_strndup(src, y - src, "markup_codes");
src = y;
}
if (current)
! data->codes[p] = mush_strdup(current, "markup_codes");
else
data->codes[p] = NULL;
data->text[p] = *src;
***************
*** 1019,1026 ****
}
if (current)
! free(current);
! current = NULL;
return data;
}
--- 986,992 ----
}
if (current)
! mush_free(current, "markup_codes");
return data;
}
***************
*** 1029,1035 ****
void
populate_codes(ansi_string * as)
{
! int p;
char *current = NULL;
if (!as)
--- 995,1001 ----
void
populate_codes(ansi_string * as)
{
! size_t p;
char *current = NULL;
if (!as)
***************
*** 1038,1066 ****
for (p = 0; p < as->len; p++)
if (as->codes[p]) {
if (current)
! free(current);
! current = strdup(as->codes[p]);
} else {
if (!current)
! current = strdup(ANSI_NORMAL);
! as->codes[p] = strdup(current);
}
}
void
depopulate_codes(ansi_string * as)
{
! int p;
if (!as)
return;
for (p = 0; p <= as->len; p++) {
if (as->codes[p]) {
! int m = p;
for (p++; p < as->len; p++) {
if (as->codes[p] && strcmp(as->codes[p], as->codes[m]) == 0) {
! free(as->codes[p]);
as->codes[p] = NULL;
} else {
p--;
--- 1004,1043 ----
for (p = 0; p < as->len; p++)
if (as->codes[p]) {
if (current)
! mush_free(current, "markup_codes");
! current = mush_strdup(as->codes[p], "markup_codes");
} else {
if (!current)
! current = mush_strdup(ANSI_NORMAL, "markup_codes");
! as->codes[p] = mush_strdup(current, "markup_codes");
}
}
void
depopulate_codes(ansi_string * as)
{
! size_t p, m;
! int normal = 1;
if (!as)
return;
for (p = 0; p <= as->len; p++) {
if (as->codes[p]) {
! if (normal) {
! if (strcmp(as->codes[p], ANSI_NORMAL) == 0) {
! mush_free(as->codes[p], "markup_codes");
! as->codes[p] = NULL;
! continue;
! } else {
! normal = 0;
! }
! }
!
! m = p;
for (p++; p < as->len; p++) {
if (as->codes[p] && strcmp(as->codes[p], as->codes[m]) == 0) {
! mush_free(as->codes[p], "markup_codes");
as->codes[p] = NULL;
} else {
p--;
***************
*** 1102,1114 ****
return;
for (p = as->len; p >= 0; p--) {
if (as->codes[p])
! free(as->codes[p]);
}
mush_free(as, "ansi_string");
}
int
! safe_ansi_string(ansi_string * as, int start, int len, char *buff, char **bp)
{
int p;
int in_ansi = 0;
--- 1079,1096 ----
return;
for (p = as->len; p >= 0; p--) {
if (as->codes[p])
! mush_free(as->codes[p], "markup_codes");
}
mush_free(as, "ansi_string");
}
int
! safe_ansi_string(as, start, len, buff, bp)
! ansi_string *as;
! Size_t start;
! Size_t len;
! char *buff;
! char **bp;
{
int p;
int in_ansi = 0;
***************
*** 1118,1124 ****
depopulate_codes(as);
! if (start > as->len || start < 0 || as->len < 0)
return safe_str("", buff, bp);
/* Find the starting codes */
--- 1100,1106 ----
depopulate_codes(as);
! if (start > as->len || len == 0 || as->len == 0)
return safe_str("", buff, bp);
/* Find the starting codes */
***************
*** 1126,1134 ****
for (p = start - 1; p >= 0; p--) {
if (as->codes[p]) {
if (!is_end_html_code(as->codes[p])) {
! if (safe_str(as->codes[p], buff, bp))
! return 1;
! in_ansi = 1;
}
break;
}
--- 1108,1118 ----
for (p = start - 1; p >= 0; p--) {
if (as->codes[p]) {
if (!is_end_html_code(as->codes[p])) {
! if (strcmp(as->codes[p], ANSI_NORMAL) != 0) {
! if (safe_str(as->codes[p], buff, bp))
! return 1;
! in_ansi = 1;
! }
}
break;
}
***************
*** 1136,1142 ****
}
/* Copy the text */
! for (p = start; p < (start + len) && p < as->len; p++) {
if (as->codes[p]) {
if (safe_str(as->codes[p], buff, bp))
return 1;
--- 1120,1126 ----
}
/* Copy the text */
! for (p = (int) start; p < (int) (start + len) && p < (int) as->len; p++) {
if (as->codes[p]) {
if (safe_str(as->codes[p], buff, bp))
return 1;
***************
*** 1151,1157 ****
/* Ooutput closing codes if needed. */
if (in_ansi) {
! for (; p <= as->len; p++) {
if (as->codes[p]) {
if ((is_ansi_code(as->codes[p])
&& strcmp(ANSI_NORMAL, as->codes[p]) == 0)
--- 1135,1141 ----
/* Ooutput closing codes if needed. */
if (in_ansi) {
! for (; p <= (int) as->len; p++) {
if (as->codes[p]) {
if ((is_ansi_code(as->codes[p])
&& strcmp(ANSI_NORMAL, as->codes[p]) == 0)
*** 1_7_4.210/src/rob.c Mon, 18 Jun 2001 10:36:58 -0500 dunemush (pennmush/b/42_rob.c 1.18.1.2.1.3 660)
--- 1_7_4.243(w)/src/rob.c Sun, 17 Mar 2002 13:25:52 -0600 dunemush (pennmush/b/42_rob.c 1.18.1.2.1.3.1.3 660)
***************
*** 188,197 ****
myenv[0] = (char *) mush_malloc(BUFFER_LEN, "dbref");
myenv[1] = (char *) mush_malloc(BUFFER_LEN, "dbref");
sprintf(myenv[0], "#%d", thing);
! sprintf(myenv[1], "#%d", player);
for (i = 2; i < 10; i++)
myenv[i] = NULL;
! real_did_it(player, player, "GIVE", "Given.", "OGIVE", NULL,
"AGIVE", NOTHING, myenv);
/* Notify the object that it's been given */
--- 188,201 ----
myenv[0] = (char *) mush_malloc(BUFFER_LEN, "dbref");
myenv[1] = (char *) mush_malloc(BUFFER_LEN, "dbref");
sprintf(myenv[0], "#%d", thing);
! sprintf(myenv[1], "#%d", who);
for (i = 2; i < 10; i++)
myenv[i] = NULL;
! bp = tbuf1;
! safe_format(tbuf1, &bp, T("You gave %s to %s."), Name(thing),
! Name(who));
! *bp = '\0';
! real_did_it(player, player, "GIVE", tbuf1, "OGIVE", NULL,
"AGIVE", NOTHING, myenv);
/* Notify the object that it's been given */
*** 1_7_4.210/src/parse.c Mon, 04 Feb 2002 09:22:43 -0600 dunemush (pennmush/b/48_parse.c 1.23.1.10.1.2.1.1.1.1 660)
--- 1_7_4.243(w)/src/parse.c Sun, 17 Mar 2002 13:25:52 -0600 dunemush (pennmush/b/48_parse.c 1.23.1.10.1.2.1.1.1.1.1.2.1.1 660)
***************
*** 793,801 ****
/* Check for the invocation limit */
if ((pe_info->fun_invocations >= FUNCTION_LIMIT) ||
(global_fun_invocations >= FUNCTION_LIMIT * 5)) {
! int e_len = strlen(e_invoke);
! if ((buff + e_len > *bp) || strcmp(e_invoke, *bp - e_len))
! safe_str(T(e_invoke), buff, bp);
process_expression(name, &tp, str,
executor, caller, enactor,
PE_NOTHING, PT_PAREN, pe_info);
--- 793,802 ----
/* Check for the invocation limit */
if ((pe_info->fun_invocations >= FUNCTION_LIMIT) ||
(global_fun_invocations >= FUNCTION_LIMIT * 5)) {
! const char *e_msg = T(e_invoke);
! int e_len = strlen(e_msg);
! if ((buff + e_len > *bp) || strcmp(e_msg, *bp - e_len))
! safe_str(e_msg, buff, bp);
process_expression(name, &tp, str,
executor, caller, enactor,
PE_NOTHING, PT_PAREN, pe_info);
*** 1_7_4.210/src/move.c Tue, 25 Sep 2001 15:42:13 -0500 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3.1.9.1.1.1.1 660)
--- 1_7_4.243(w)/src/move.c Sun, 17 Mar 2002 13:25:52 -0600 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3.1.9.1.1.1.1.1.2 660)
***************
*** 490,496 ****
{
dbref loc = Location(player);
dbref thing;
! char tbuf1[BUFFER_LEN];
long match_flags =
MAT_NEIGHBOR | MAT_ABSOLUTE | MAT_CHECK_KEYS | MAT_NEAR | MAT_ENGLISH;
char *myenv[10];
--- 490,496 ----
{
dbref loc = Location(player);
dbref thing;
! char tbuf1[BUFFER_LEN], tbuf2[BUFFER_LEN];
long match_flags =
MAT_NEIGHBOR | MAT_ABSOLUTE | MAT_CHECK_KEYS | MAT_NEAR | MAT_ENGLISH;
char *myenv[10];
***************
*** 521,533 ****
(controls(player, thing) ||
(EnterOk(Location(thing)) &&
eval_lock(player, Location(thing), Enter_Lock)))) {
notify(Location(thing),
tprintf(T("%s was taken from you."), Name(thing)));
! moveto(thing, player);
! notify(thing, T("Taken."));
! sprintf(tbuf1, T("takes %s."), Name(thing));
! did_it(player, thing, "SUCCESS", T("Taken."), "OSUCCESS", tbuf1,
! "ASUCCESS", NOTHING);
myenv[0] = (char *) mush_malloc(BUFFER_LEN, "dbref");
sprintf(myenv[0], "#%d", thing);
for (i = 1; i < 10; i++)
--- 521,536 ----
(controls(player, thing) ||
(EnterOk(Location(thing)) &&
eval_lock(player, Location(thing), Enter_Lock)))) {
+ moveto(thing, player);
notify(Location(thing),
tprintf(T("%s was taken from you."), Name(thing)));
! notify_format(thing, T("%s took you."), Name(player));
! sprintf(tbuf1, T("You take %s from %s."), Name(thing),
! Name(Location(thing)));
! sprintf(tbuf2, T("takes %s from %s."), Name(thing),
! Name(Location(thing)));
! did_it(player, thing, "SUCCESS", tbuf1, "OSUCCESS", tbuf2, "ASUCCESS",
! NOTHING);
myenv[0] = (char *) mush_malloc(BUFFER_LEN, "dbref");
sprintf(myenv[0], "#%d", thing);
for (i = 1; i < 10; i++)
***************
*** 566,574 ****
}
if (could_doit(player, thing)) {
moveto(thing, player);
! notify(thing, T("Taken."));
! sprintf(tbuf1, T("takes %s."), Name(thing));
! did_it(player, thing, "SUCCESS", T("Taken."), "OSUCCESS", tbuf1,
"ASUCCESS", NOTHING);
myenv[0] = (char *) mush_malloc(BUFFER_LEN, "dbref");
sprintf(myenv[0], "#%d", thing);
--- 569,578 ----
}
if (could_doit(player, thing)) {
moveto(thing, player);
! notify_format(thing, T("%s took you."), Name(player));
! sprintf(tbuf1, T("You take %s."), Name(thing));
! sprintf(tbuf2, T("takes %s."), Name(thing));
! did_it(player, thing, "SUCCESS", tbuf1, "OSUCCESS", tbuf2,
"ASUCCESS", NOTHING);
myenv[0] = (char *) mush_malloc(BUFFER_LEN, "dbref");
sprintf(myenv[0], "#%d", thing);
***************
*** 600,606 ****
{
dbref loc;
dbref thing;
! char tbuf1[BUFFER_LEN];
if ((loc = Location(player)) == NOTHING)
return;
--- 604,610 ----
{
dbref loc;
dbref thing;
! char tbuf1[BUFFER_LEN], tbuf2[BUFFER_LEN];
if ((loc = Location(player)) == NOTHING)
return;
***************
*** 634,650 ****
safe_tel(thing, HOME, 0);
} else if ((Location(loc) != NOTHING) && IsRoom(loc) && !Sticky(loc)) {
/* location has immediate dropto */
! notify(thing, T("Dropped."));
moveto(thing, Location(loc));
} else {
! notify(thing, T("Dropped."));
moveto(thing, loc);
}
break;
}
! sprintf(tbuf1, T("drops %s."), Name(thing));
! did_it(player, thing, "DROP", T("Dropped."), "ODROP", tbuf1, "ADROP",
! NOTHING);
}
--- 638,654 ----
safe_tel(thing, HOME, 0);
} else if ((Location(loc) != NOTHING) && IsRoom(loc) && !Sticky(loc)) {
/* location has immediate dropto */
! notify_format(thing, T("%s drops you."), Name(player));
moveto(thing, Location(loc));
} else {
! notify_format(thing, T("%s drops you."), Name(player));
moveto(thing, loc);
}
break;
}
! sprintf(tbuf1, T("You drop %s."), Name(thing));
! sprintf(tbuf2, T("drops %s."), Name(thing));
! did_it(player, thing, "DROP", tbuf1, "ODROP", tbuf2, "ADROP", NOTHING);
}
*** 1_7_4.210/src/log.c Thu, 31 May 2001 11:20:12 -0500 dunemush (pennmush/c/5_log.c 1.10.1.2 660)
--- 1_7_4.243(w)/src/log.c Sun, 17 Mar 2002 13:25:52 -0600 dunemush (pennmush/c/5_log.c 1.10.1.2.2.3 660)
***************
*** 38,44 ****
void end_log _((FILE * fp));
#ifdef macintosh
! extern void PMConvertPath(char *path);
#endif
/* log file pointers */
--- 38,44 ----
void end_log _((FILE * fp));
#ifdef macintosh
! #include "PMInit.h"
#endif
/* log file pointers */
***************
*** 78,91 ****
FILE **fp;
const char *filename;
{
#ifdef macintosh
! PMConvertPath((char *) filename);
! *fp = fopen(filename, "ab");
#else
! *fp = fopen(filename, "a");
#endif
if (*fp == NULL) {
! fprintf(stderr, T("WARNING: cannot open log %s\n"), filename);
*fp = stderr;
}
fprintf(*fp, "START OF LOG.\n");
--- 78,97 ----
FILE **fp;
const char *filename;
{
+ char newfilename[256] = "\0";
+
+ /* Must use a buffer for MacOS file path conversion */
+ strncpy(newfilename, filename, 256);
+
#ifdef macintosh
! /* Convert file path from a UNIX style one to a MacOS one */
! PMConvertPath((char *) newfilename, (char *) newfilename, 256);
! *fp = fopen(newfilename, "ab");
#else
! *fp = fopen(newfilename, "a");
#endif
if (*fp == NULL) {
! fprintf(stderr, T("WARNING: cannot open log %s\n"), newfilename);
*fp = stderr;
}
fprintf(*fp, "START OF LOG.\n");
***************
*** 234,240 ****
#else
va_start(args, fmt);
#endif
! #ifdef hAS_VSNPRINTF
(void) vsnprintf(tbuf1, sizeof tbuf1, fmt, args);
#else
(void) vsprintf(tbuf1, fmt, args);
--- 240,246 ----
#else
va_start(args, fmt);
#endif
! #ifdef HAS_VSNPRINTF
(void) vsnprintf(tbuf1, sizeof tbuf1, fmt, args);
#else
(void) vsprintf(tbuf1, fmt, args);
*** 1_7_4.210/src/game.c Fri, 15 Feb 2002 16:08:20 -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 660)
--- 1_7_4.243(w)/src/game.c Sun, 17 Mar 2002 13:25:52 -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 660)
***************
*** 40,46 ****
#endif
#ifdef macintosh
! extern void PMSMushSetup(void);
#endif
#include "conf.h"
--- 40,46 ----
#endif
#ifdef macintosh
! extern void PMSSetupDatabases(void);
#endif
#include "conf.h"
***************
*** 673,679 ****
Win32MUSH_setup(); /* create index files, copy databases etc. */
#endif
#ifdef macintosh
! PMSMushSetup();
#endif
infile = restarting ? options.output_db : options.input_db;
--- 673,679 ----
Win32MUSH_setup(); /* create index files, copy databases etc. */
#endif
#ifdef macintosh
! PMSSetupDatabases();
#endif
infile = restarting ? options.output_db : options.input_db;
***************
*** 1471,1477 ****
}
if (flags & DOL_NOTIFY) {
/* Execute a '@notify me' so the object knows we're done
! * with the list execution. We don't execute nfy_que()
* directly, since we want the command to be queued
* _after_ the list has executed.
*/
--- 1471,1477 ----
}
if (flags & DOL_NOTIFY) {
/* Execute a '@notify me' so the object knows we're done
! * with the list execution. We don't execute dequeue_semaphores()
* directly, since we want the command to be queued
* _after_ the list has executed.
*/
*** 1_7_4.210/src/funstr.c Fri, 07 Dec 2001 23:26:07 -0600 dunemush (pennmush/c/13_funstr.c 1.28.1.1.1.2.1.4.1.6.1.1.1.1.1.2.1.1.1.1.1.1 660)
--- 1_7_4.243(w)/src/funstr.c Sun, 17 Mar 2002 13:25:52 -0600 dunemush (pennmush/c/13_funstr.c 1.28.1.1.1.2.1.4.1.6.1.1.1.1.1.2.1.1.1.1.1.1.1.1 660)
***************
*** 252,257 ****
--- 252,258 ----
FUNCTION(fun_left)
{
int len;
+ ansi_string *as;
if (!is_integer(args[1])) {
safe_str(T(e_int), buff, bp);
***************
*** 264,270 ****
return;
}
! safe_ansi(args[0], len, buff, bp);
}
/* ARGSUSED */
--- 265,273 ----
return;
}
! as = parse_ansi_string(args[0]);
! safe_ansi_string(as, 0, len, buff, bp);
! free_ansi_string(as);
}
/* ARGSUSED */
***************
*** 285,291 ****
}
as = parse_ansi_string(args[0]);
! if (len > as->len)
safe_str(args[0], buff, bp);
else
safe_ansi_string(as, as->len - len, as->len, buff, bp);
--- 288,294 ----
}
as = parse_ansi_string(args[0]);
! if ((Size_t) len > as->len)
safe_str(args[0], buff, bp);
else
safe_ansi_string(as, as->len - len, as->len, buff, bp);
***************
*** 312,318 ****
as = parse_ansi_string(args[0]);
! if (pos > as->len) {
/* Fast special case - concatenate args[2] to args[0] */
safe_str(args[0], buff, bp);
safe_str(args[2], buff, bp);
--- 315,321 ----
as = parse_ansi_string(args[0]);
! if ((size_t) pos > as->len) {
/* Fast special case - concatenate args[2] to args[0] */
safe_str(args[0], buff, bp);
safe_str(args[2], buff, bp);
***************
*** 349,355 ****
as = parse_ansi_string(args[0]);
! if (pos > as->len || num <= 0) {
safe_str(args[0], buff, bp);
free_ansi_string(as);
return;
--- 352,358 ----
as = parse_ansi_string(args[0]);
! if ((Size_t) pos > as->len || num <= 0) {
safe_str(args[0], buff, bp);
free_ansi_string(as);
return;
***************
*** 423,428 ****
--- 426,432 ----
int p, n;
as = parse_ansi_string(args[0]);
+ populate_codes(as);
for (p = 0, n = as->len - 1; p < n; p++, n--) {
char *tcode;
***************
*** 535,540 ****
--- 539,550 ----
if (!*args[0])
return;
+ /* Special-case repeating one character */
+ if (!args[0][1]) {
+ safe_fill(args[0][0], times, buff, bp);
+ return;
+ }
+
/* Do the repeat in O(lg n) time. */
/* This takes advantage of the fact that we're given a BUFFER_LEN
* buffer for args[0] that we are free to trash. Huzzah! */
***************
*** 555,566 ****
{
int n, i, j;
ansi_string *as;
- int ansi_present = 0;
if (!*args[0])
return;
as = parse_ansi_string(args[0]);
n = as->len;
for (i = 0; i < n; i++) {
char t, *tcode;
--- 565,576 ----
{
int n, i, j;
ansi_string *as;
if (!*args[0])
return;
as = parse_ansi_string(args[0]);
+ populate_codes(as);
n = as->len;
for (i = 0; i < n; i++) {
char t, *tcode;
***************
*** 568,577 ****
t = as->text[j];
as->text[j] = as->text[i];
as->text[i] = t;
- if (!as->codes[i])
- as->codes[i] = strdup(ANSI_NORMAL);
- if (!as->codes[j])
- as->codes[j] = strdup(ANSI_NORMAL);
tcode = as->codes[j];
as->codes[j] = as->codes[i];
as->codes[i] = tcode;
--- 578,583 ----
***************
*** 585,607 ****
{
/* pads a string with trailing blanks (or other fill character) */
! int spaces;
char sep;
! if (!is_integer(args[1])) {
! safe_str(T(e_int), buff, bp);
return;
}
! spaces = parse_integer(args[1]) - ansi_strlen(args[0]);
if (spaces >= BUFFER_LEN)
spaces = BUFFER_LEN - 1;
if (!delim_check(buff, bp, nargs, args, 3, &sep))
return;
safe_str(args[0], buff, bp);
! for (; spaces > 0; spaces--)
! safe_chr(sep, buff, bp);
}
/* ARGSUSED */
--- 591,619 ----
{
/* pads a string with trailing blanks (or other fill character) */
! size_t spaces, len;
char sep;
! if (!is_uinteger(args[1])) {
! safe_str(T(e_uint), buff, bp);
return;
}
! len = ansi_strlen(args[0]);
! spaces = parse_uinteger(args[1]);
if (spaces >= BUFFER_LEN)
spaces = BUFFER_LEN - 1;
+ if (len >= spaces) {
+ safe_str(args[0], buff, bp);
+ return;
+ }
+ spaces -= len;
+
if (!delim_check(buff, bp, nargs, args, 3, &sep))
return;
safe_str(args[0], buff, bp);
! safe_fill(sep, spaces, buff, bp);
}
/* ARGSUSED */
***************
*** 609,630 ****
{
/* pads a string with leading blanks (or other fill character) */
! int spaces;
char sep;
! if (!is_integer(args[1])) {
! safe_str(T(e_int), buff, bp);
return;
}
! spaces = parse_integer(args[1]) - ansi_strlen(args[0]);
if (spaces >= BUFFER_LEN)
spaces = BUFFER_LEN - 1;
if (!delim_check(buff, bp, nargs, args, 3, &sep))
return;
! for (; spaces > 0; spaces--)
! safe_chr(sep, buff, bp);
safe_str(args[0], buff, bp);
}
--- 621,648 ----
{
/* pads a string with leading blanks (or other fill character) */
! size_t spaces, len;
char sep;
! if (!is_uinteger(args[1])) {
! safe_str(T(e_uint), buff, bp);
return;
}
! len = ansi_strlen(args[0]);
! spaces = parse_uinteger(args[1]);
if (spaces >= BUFFER_LEN)
spaces = BUFFER_LEN - 1;
+ if (len >= spaces) {
+ safe_str(args[0], buff, bp);
+ return;
+ }
+ spaces -= len;
+
if (!delim_check(buff, bp, nargs, args, 3, &sep))
return;
! safe_fill(sep, spaces, buff, bp);
safe_str(args[0], buff, bp);
}
***************
*** 633,646 ****
{
/* pads a string with leading blanks (or other fill character) */
! int lsp, rsp;
char sep;
! if (!is_integer(args[1])) {
! safe_str(T(e_int), buff, bp);
return;
}
! rsp = parse_integer(args[1]) - ansi_strlen(args[0]);
lsp = rsp / 2;
rsp -= lsp;
if (lsp >= BUFFER_LEN)
--- 651,670 ----
{
/* pads a string with leading blanks (or other fill character) */
! size_t width, len, lsp, rsp;
char sep;
! if (!is_uinteger(args[1])) {
! safe_str(T(e_uint), buff, bp);
! return;
! }
! width = parse_uinteger(args[1]);
! len = ansi_strlen(args[0]);
! if (len >= width) {
! safe_str(args[0], buff, bp);
return;
}
! rsp = width - len;
lsp = rsp / 2;
rsp -= lsp;
if (lsp >= BUFFER_LEN)
***************
*** 651,661 ****
if (!delim_check(buff, bp, nargs, args, 3, &sep))
return;
! for (; lsp > 0; lsp--)
! safe_chr(sep, buff, bp);
safe_str(args[0], buff, bp);
! for (; rsp > 0; rsp--)
! safe_chr(sep, buff, bp);
}
/* ARGSUSED */
--- 675,683 ----
if (!delim_check(buff, bp, nargs, args, 3, &sep))
return;
! safe_fill(sep, lsp, buff, bp);
safe_str(args[0], buff, bp);
! safe_fill(sep, rsp, buff, bp);
}
/* ARGSUSED */
***************
*** 928,938 ****
}
s = parse_integer(args[0]);
! if (s >= BUFFER_LEN)
! s = BUFFER_LEN - 1;
!
! for (; s > 0; s--)
! safe_chr(' ', buff, bp);
}
/* ARGSUSED */
--- 950,956 ----
}
s = parse_integer(args[0]);
! safe_fill(' ', s, buff, bp);
}
/* ARGSUSED */
***************
*** 959,966 ****
safe_str(T(e_perm), buff, bp);
return;
}
! for (; k; k--)
! safe_chr(BEEP_CHAR, buff, bp);
}
/* All the safe tags from HTML 4.0 */
--- 977,983 ----
safe_str(T(e_perm), buff, bp);
return;
}
! safe_fill(BEEP_CHAR, k, buff, bp);
}
/* All the safe tags from HTML 4.0 */
*** 1_7_4.210/src/funlist.c Fri, 15 Feb 2002 16:08:20 -0600 dunemush (pennmush/c/16_funlist.c 1.3.1.1.1.5.1.2.1.1.1.1.1.4.1.2.1.2.1.19.1.2.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.1.2.1.1.2 660)
--- 1_7_4.243(w)/src/funlist.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/16_funlist.c 1.3.1.1.1.5.1.2.1.1.1.1.1.4.1.2.1.2.1.19.1.2.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.1.2.1.1.3.1.2 660)
***************
*** 2288,2298 ****
* Optional parameters: field width, line length, delimiter, output sep
* Number of columns = line length / (field width+1)
*/
! int line_length = 78;
! int field_width = 10;
! int col = 0;
! int spaces;
char sep, osep, *cp, *t;
if (!delim_check(buff, bp, nargs, args, 5, &osep))
return;
--- 2288,2299 ----
* Optional parameters: field width, line length, delimiter, output sep
* Number of columns = line length / (field width+1)
*/
! Size_t line_length = 78;
! Size_t field_width = 10;
! Size_t col = 0;
! Size_t offset, col_len;
char sep, osep, *cp, *t;
+ ansi_string *as;
if (!delim_check(buff, bp, nargs, args, 5, &osep))
return;
***************
*** 2330,2355 ****
* send a return
*/
! cp = trim_space_sep(args[0], sep);
! if (!*cp)
return;
- col = field_width + !!osep;
t = split_token(&cp, sep);
! /*
! tp = tbuf1;
! len = ansi_strnlen(t, field_width);
! ansi_save(t + field_width - 1, -1, tbuf1, &tp);
! len = ansi_align(t, len);
! if (len < BUFFER_LEN)
! t[len] = '\0';
! safe_str(t, buff, bp);
! safe_str(tbuf1, buff, bp);
! */
! safe_ansi(t, field_width, buff, bp);
! for (spaces = field_width - ansi_strlen(t); spaces > 0; spaces--)
! if (safe_chr(' ', buff, bp))
! return;
while (cp) {
col += field_width + !!osep;
if (col > line_length) {
--- 2331,2355 ----
* send a return
*/
! as = parse_ansi_string(args[0]);
!
! cp = trim_space_sep(as->text, sep);
! if (!*cp) {
! free_ansi_string(as);
return;
+ }
t = split_token(&cp, sep);
! offset = t - &as->text[0];
! col_len = strlen(t);
! if (col_len > field_width)
! col_len = field_width;
! safe_ansi_string(as, offset, col_len, buff, bp);
! if (safe_fill(' ', field_width - col_len, buff, bp)) {
! free_ansi_string(as);
! return;
! }
! col = field_width + !!osep;
while (cp) {
col += field_width + !!osep;
if (col > line_length) {
***************
*** 2360,2380 ****
safe_chr(osep, buff, bp);
}
t = split_token(&cp, sep);
! /*
! tp = tbuf1;
! len = ansi_strnlen(t, field_width);
! ansi_save(t + field_width - 1, -1, tbuf1, &tp);
! len = ansi_align(t, len);
! if (len < BUFFER_LEN)
! t[len] = '\0';
! safe_str(t, buff, bp);
! safe_str(tbuf1, buff, bp);
! */
! safe_ansi(t, field_width, buff, bp);
! for (spaces = field_width - ansi_strlen(t); spaces > 0; spaces--)
! if (safe_chr(' ', buff, bp))
! return;
}
}
/* In the following regexp functions, we use pcre_study to potentially
--- 2360,2374 ----
safe_chr(osep, buff, bp);
}
t = split_token(&cp, sep);
! offset = t - &as->text[0];
! col_len = strlen(t);
! if (col_len > field_width)
! col_len = field_width;
! safe_ansi_string(as, offset, col_len, buff, bp);
! if (safe_fill(' ', field_width - col_len, buff, bp))
! break;
}
+ free_ansi_string(as);
}
/* In the following regexp functions, we use pcre_study to potentially
*** 1_7_4.210/src/flags.c Wed, 24 Oct 2001 10:41:46 -0500 dunemush (pennmush/c/20_flags.c 1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.2.1.1.1.1.1.2.2.2.2.1.2.1.1.3.1.2 660)
--- 1_7_4.243(w)/src/flags.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/20_flags.c 1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.2.1.1.1.1.1.2.2.2.2.1.2.1.1.3.1.2.1.1 660)
***************
*** 1061,1071 ****
/* those who unDARK return to the WHO */
if ((f->flag == DARK) && (f->type == NOTYPE) && (IsPlayer(thing)))
hide_player(thing, 0);
! /* notify the area if something stops listening */
if (IsThing(thing) && (f->type == TYPE_THING) &&
! GoodObject(Location(thing)) &&
! (((f->flag == THING_PUPPET) && !listener && !Hearer(thing)) ||
! ((f->flag == THING_LISTEN) && !hear && !Listener(thing)))) {
sprintf(tbuf1, T("%s is no longer listening."), Name(thing));
notify_except(Contents(Location(thing)), NOTHING, tbuf1);
notify_except(Contents(thing), NOTHING, tbuf1);
--- 1061,1071 ----
/* those who unDARK return to the WHO */
if ((f->flag == DARK) && (f->type == NOTYPE) && (IsPlayer(thing)))
hide_player(thing, 0);
! /* notify the area if something stops listening, but only if it
! wasn't listening before */
if (IsThing(thing) && (f->type == TYPE_THING) &&
! GoodObject(Location(thing)) && (hear || listener) &&
! !Hearer(thing) && !Listener(thing)) {
sprintf(tbuf1, T("%s is no longer listening."), Name(thing));
notify_except(Contents(Location(thing)), NOTHING, tbuf1);
notify_except(Contents(thing), NOTHING, tbuf1);
*** 1_7_4.210/src/extmail.c Wed, 23 Jan 2002 10:11:06 -0600 dunemush (pennmush/c/22_extmail.c 1.44.1.7.1.1 660)
--- 1_7_4.243(w)/src/extmail.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/22_extmail.c 1.44.1.7.1.5 660)
***************
*** 1445,1456 ****
dbref player;
int rc, uc, cc;
! if (nargs == 0) {
count_mail(executor, player_folder(executor), &rc, &uc, &cc);
! safe_integer(rc + uc, buff, bp);
! return;
! }
! if (nargs == 1) {
if (!is_integer(args[0])) {
/* handle the case of wanting to count the number of messages */
if ((player =
--- 1445,1455 ----
dbref player;
int rc, uc, cc;
! switch (nargs) {
! case 0:
count_mail(executor, player_folder(executor), &rc, &uc, &cc);
! break;
! case 1:
if (!is_integer(args[0])) {
/* handle the case of wanting to count the number of messages */
if ((player =
***************
*** 1458,1485 ****
MAT_OBJECTS)) == NOTHING) {
safe_str(T("#-1 NO SUCH PLAYER"), buff, bp);
return;
! } else if ((executor != player) && !Wizard(executor)) {
safe_str(T(e_perm), buff, bp);
return;
} else {
count_mail(player, player_folder(player), &rc, &uc, &cc);
- safe_integer(rc, buff, bp);
- safe_chr(' ', buff, bp);
- safe_integer(uc, buff, bp);
- safe_chr(' ', buff, bp);
- safe_integer(cc, buff, bp);
- return;
}
} else {
count_mail(executor, parse_integer(args[0]), &rc, &uc, &cc);
- safe_integer(rc + uc, buff, bp);
- return;
}
! } else {
! if ((player = lookup_player(args[0])) == NOTHING) {
safe_str(T("#-1 NO SUCH PLAYER"), buff, bp);
return;
! } else if ((executor != player) && !Wizard(executor)) {
safe_str(T(e_perm), buff, bp);
return;
}
--- 1457,1479 ----
MAT_OBJECTS)) == NOTHING) {
safe_str(T("#-1 NO SUCH PLAYER"), buff, bp);
return;
! } else if (!controls(executor, player)) {
safe_str(T(e_perm), buff, bp);
return;
} else {
count_mail(player, player_folder(player), &rc, &uc, &cc);
}
} else {
count_mail(executor, parse_integer(args[0]), &rc, &uc, &cc);
}
! break;
! case 2:
! if ((player =
! noisy_match_result(executor, args[0], TYPE_PLAYER,
! MAT_OBJECTS)) == NOTHING) {
safe_str(T("#-1 NO SUCH PLAYER"), buff, bp);
return;
! } else if (!controls(executor, player)) {
safe_str(T(e_perm), buff, bp);
return;
}
***************
*** 1488,1500 ****
return;
}
count_mail(player, parse_integer(args[1]), &rc, &uc, &cc);
! safe_integer(rc, buff, bp);
! safe_chr(' ', buff, bp);
! safe_integer(uc, buff, bp);
! safe_chr(' ', buff, bp);
! safe_integer(cc, buff, bp);
return;
}
}
/* ARGSUSED */
--- 1482,1499 ----
return;
}
count_mail(player, parse_integer(args[1]), &rc, &uc, &cc);
! break;
! default:
! /* This should never happen */
return;
}
+
+ safe_integer(rc, buff, bp);
+ safe_chr(' ', buff, bp);
+ safe_integer(uc, buff, bp);
+ safe_chr(' ', buff, bp);
+ safe_integer(cc, buff, bp);
+ return;
}
/* ARGSUSED */
***************
*** 1518,1524 ****
if (nargs == 1) {
player = match_result(executor, args[0], TYPE_PLAYER, MAT_OBJECTS);
if (GoodObject(player)) {
! if ((executor != player) && (!Wizard(executor) || God(player))) {
safe_str(T(e_perm), buff, bp);
} else {
count_mail(player, -1, &rc, &uc, &cc);
--- 1517,1523 ----
if (nargs == 1) {
player = match_result(executor, args[0], TYPE_PLAYER, MAT_OBJECTS);
if (GoodObject(player)) {
! if (!controls(executor, player)) {
safe_str(T(e_perm), buff, bp);
} else {
count_mail(player, -1, &rc, &uc, &cc);
***************
*** 1570,1576 ****
noisy_match_result(player, arg1, TYPE_PLAYER,
MAT_OBJECTS)) == NOTHING) {
return NULL;
! } else if ((player != target) && (!Wizard(player) || God(target))) {
notify(player, T("Permission denied"));
return NULL;
}
--- 1569,1575 ----
noisy_match_result(player, arg1, TYPE_PLAYER,
MAT_OBJECTS)) == NOTHING) {
return NULL;
! } else if (!controls(player, target)) {
notify(player, T("Permission denied"));
return NULL;
}
***************
*** 1654,1664 ****
if (!GoodObject(target)) {
target = match_result(executor, args[0], NOTYPE, MAT_ABSOLUTE);
}
! if (!GoodObject(target)) {
notify_format(executor, T("%s: No such player."), args[0]);
return;
}
! if (!Wizard(executor) && (target != executor)) {
notify(executor, T("The post office protects privacy!"));
return;
}
--- 1653,1663 ----
if (!GoodObject(target)) {
target = match_result(executor, args[0], NOTYPE, MAT_ABSOLUTE);
}
! if (!GoodObject(target) || !IsPlayer(target)) {
notify_format(executor, T("%s: No such player."), args[0]);
return;
}
! if (!controls(executor, target)) {
notify(executor, T("The post office protects privacy!"));
return;
}
*** 1_7_4.210/src/destroy.c Sat, 02 Feb 2002 21:09:46 -0600 dunemush (pennmush/c/24_destroy.c 1.24.2.2.1.3.1.1 660)
--- 1_7_4.243(w)/src/destroy.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/24_destroy.c 1.24.2.2.1.3.1.1.1.1 660)
***************
*** 3,8 ****
--- 3,9 ----
#include <ctype.h>
#include <assert.h>
+ #include <limits.h>
#include <stdlib.h>
#ifdef I_STRING
#include <string.h>
***************
*** 599,605 ****
change_quota(Owner(thing), QUOTA_COST);
#endif /* QUOTA */
do_halt(thing, "", thing);
! nfy_que(thing, 2, 0, NULL); /* The equivalent of an @drain. */
/* if something is zoned or parented or linked or chained or located
* to/in destroyed object, undo */
--- 600,607 ----
change_quota(Owner(thing), QUOTA_COST);
#endif /* QUOTA */
do_halt(thing, "", thing);
! /* The equivalent of an @drain/any/all: */
! dequeue_semaphores(thing, NULL, INT_MAX, 1, 1);
/* if something is zoned or parented or linked or chained or located
* to/in destroyed object, undo */
*** 1_7_4.210/src/create.c Wed, 24 Oct 2001 16:09:02 -0500 dunemush (pennmush/c/27_create.c 1.27.1.3.1.1.1.1.1.1 660)
--- 1_7_4.243(w)/src/create.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/27_create.c 1.27.1.3.1.1.1.1.1.1.1.2 660)
***************
*** 30,35 ****
--- 30,37 ----
static dbref parse_linkable_room _((dbref player, const char *room_name));
static dbref check_var_link _((const char *dest_name));
+ static dbref clone_object _((dbref player, dbref thing, const char *newname,
+ int preserve));
struct db_stat_info current_state;
***************
*** 478,483 ****
--- 480,549 ----
return NOTHING;
}
+
+ static dbref
+ clone_object(player, thing, newname, preserve)
+ dbref player, thing;
+ const char *newname;
+ int preserve;
+ {
+ dbref clone;
+
+ clone = new_object();
+
+ memcpy(REFDB(clone), REFDB(thing), sizeof(struct object));
+ #ifdef CHAT_SYSTEM
+ Chanlist(clone) = NULL;
+ #endif
+ Name(clone) = NULL;
+ if (newname && *newname)
+ set_name(clone, newname);
+ else
+ set_name(clone, Name(thing));
+ s_Pennies(clone, Pennies(thing));
+ atr_cpy(clone, thing);
+ {
+ struct lock_list *ll;
+ Locks(clone) = NULL;
+ for (ll = Locks(thing); ll; ll = ll->next) {
+ add_lock(clone, ll->type, dup_bool(ll->key));
+ }
+ }
+ Zone(clone) = Zone(thing);
+ Parent(clone) = Parent(thing);
+ if (!preserve) {
+ Flags(clone) &= ~WIZARD;
+ #ifdef ROYALTY_FLAG
+ Flags(clone) &= ~ROYALTY;
+ #endif
+ #ifdef USE_WARNINGS
+ Warnings(clone) = 0; /* zap warnings */
+ #endif
+ Powers(clone) = 0; /* zap powers */
+ } else if (Wizard(clone) ||
+ #ifdef ROYALTY_FLAG
+ Royalty(clone) ||
+ #endif
+ #ifdef USE_WARNINGS
+ Warnings(clone) ||
+ #endif
+ Powers(clone)) {
+ notify(player,
+ T
+ ("Warning: @CLONE/PRESERVE on an object with WIZ, ROY, @powers, or @warnings."));
+ }
+ #ifdef CREATION_TIMES
+ /* We give the clone the same modification time that its
+ * other clone has, but update the creation time */
+ CreTime(clone) = mudtime;
+ #endif
+
+ Contents(clone) = Location(clone) = Next(clone) = NOTHING;
+
+ return clone;
+
+ }
+
dbref
do_clone(player, name, newname, preserve)
dbref player;
***************
*** 522,576 ****
return NOTHING;
}
if (can_pay_fees(player, Pennies(thing))) {
! clone = new_object();
! memcpy(REFDB(clone), REFDB(thing), sizeof(struct object));
! #ifdef CHAT_SYSTEM
! Chanlist(clone) = NULL;
! #endif
! Name(clone) = NULL;
! if (newname && *newname)
! set_name(clone, newname);
! else
! set_name(clone, Name(thing));
! s_Pennies(clone, Pennies(thing));
! atr_cpy(clone, thing);
! {
! struct lock_list *ll;
! Locks(clone) = NULL;
! for (ll = Locks(thing); ll; ll = ll->next) {
! add_lock(clone, ll->type, dup_bool(ll->key));
! }
! }
! Zone(clone) = Zone(thing);
! Parent(clone) = Parent(thing);
! if (!preserve) {
! Flags(clone) &= ~WIZARD;
! #ifdef ROYALTY_FLAG
! Flags(clone) &= ~ROYALTY;
! #endif
! #ifdef USE_WARNINGS
! Warnings(clone) = 0; /* zap warnings */
! #endif
! Powers(clone) = 0; /* zap powers */
! } else if (Wizard(clone) ||
! #ifdef ROYALTY_FLAG
! Royalty(clone) ||
! #endif
! #ifdef USE_WARNINGS
! Warnings(clone) ||
! #endif
! Powers(clone)) {
! notify(player,
! T
! ("Warning: @CLONE/PRESERVE on an object with WIZ, ROY, @powers, or @warnings."));
! }
! #ifdef CREATION_TIMES
! /* We give the clone the same modification time that its
! * other clone has, but update the creation time */
! CreTime(clone) = mudtime;
! #endif
!
! Contents(clone) = Location(clone) = Next(clone) = NOTHING;
notify_format(player, T("Cloned: Object %s."), unparse_dbref(clone));
if (IsRoom(player))
moveto(clone, player);
--- 588,594 ----
return NOTHING;
}
if (can_pay_fees(player, Pennies(thing))) {
! clone = clone_object(player, thing, newname, preserve);
notify_format(player, T("Cloned: Object %s."), unparse_dbref(clone));
if (IsRoom(player))
moveto(clone, player);
***************
*** 593,643 ****
return NOTHING;
}
if (can_pay_fees(player, ROOM_COST)) {
! clone = new_object();
! memcpy(REFDB(clone), REFDB(thing), sizeof(struct object));
! Name(clone) = NULL;
! if (newname && *newname)
! set_name(clone, newname);
! else
! set_name(clone, Name(thing));
! atr_cpy(clone, thing);
! {
! struct lock_list *ll;
! Locks(clone) = NULL;
! for (ll = Locks(thing); ll; ll = ll->next) {
! add_lock(clone, ll->type, dup_bool(ll->key));
! }
! }
! Zone(clone) = Zone(thing);
! Parent(clone) = Parent(thing);
! if (!preserve) {
! Flags(clone) &= ~WIZARD;
! #ifdef ROYALTY_FLAG
! Flags(clone) &= ~ROYALTY;
! #endif
! #ifdef USE_WARNINGS
! Warnings(clone) = 0; /* zap warnings */
! #endif
! Powers(clone) = 0; /* zap powers */
! } else if (Wizard(clone) ||
! #ifdef ROYALTY_FLAG
! Royalty(clone) ||
! #endif
! #ifdef USE_WARNINGS
! Warnings(clone) ||
! #endif
! Powers(clone)) {
! notify(player,
! T
! ("Warning: @CLONE/PRESERVE on an room with WIZ, ROY, @powers, or @warnings."));
! }
! #ifdef CREATION_TIMES
! /* We give the clone the same modification time that its
! * other clone has, but update the creation time */
! CreTime(clone) = mudtime;
! #endif
! Exits(clone) = Contents(clone) = Location(clone) = Next(clone) = NOTHING;
notify_format(player, T("Cloned: Room #%d."), clone);
current_state.rooms++;
#ifdef LOCAL_DATA
--- 611,619 ----
return NOTHING;
}
if (can_pay_fees(player, ROOM_COST)) {
! clone = clone_object(player, thing, newname, preserve);
! Exits(clone) = NOTHING;
notify_format(player, T("Cloned: Room #%d."), clone);
current_state.rooms++;
#ifdef LOCAL_DATA
***************
*** 651,661 ****
return NOTHING;
break;
case TYPE_EXIT:
if (!Builder(player)) {
notify(player, T("Command is for builders only."));
return NOTHING;
}
! strcpy(dbnum, unparse_dbref(Location(thing)));
if (newname && *newname)
clone = do_real_open(player, newname, dbnum, NOTHING);
else
--- 627,652 ----
return NOTHING;
break;
case TYPE_EXIT:
+ /* For exits, we don't want people to be able to link it to
+ a location they can't with @open. So, all this stuff.
+ */
if (!Builder(player)) {
notify(player, T("Command is for builders only."));
return NOTHING;
}
! switch (Location(thing)) {
! case NOTHING:
! strcpy(dbnum, "#-1");
! break;
! case HOME:
! strcpy(dbnum, "home");
! break;
! case AMBIGUOUS:
! strcpy(dbnum, "variable");
! break;
! default:
! strcpy(dbnum, unparse_dbref(Location(thing)));
! }
if (newname && *newname)
clone = do_real_open(player, newname, dbnum, NOTHING);
else
***************
*** 673,678 ****
--- 664,670 ----
Zone(clone) = Zone(thing);
Parent(clone) = Parent(thing);
Flags(clone) = Flags(thing);
+ Toggles(clone) = Toggles(thing);
if (!preserve) {
Flags(clone) &= ~WIZARD;
#ifdef ROYALTY_FLAG
***************
*** 682,687 ****
--- 674,684 ----
Warnings(clone) = 0; /* zap warnings */
#endif
Powers(clone) = 0; /* zap powers */
+ } else {
+ #ifdef USE_WARNINGS
+ Warnings(clone) = Warnings(thing);
+ #endif
+ Powers(clone) = Powers(thing);
}
if (Wizard(clone) ||
#ifdef ROYALTY_FLAG
***************
*** 695,701 ****
T
("Warning: @CLONE/PRESERVE on an exit with WIZ, ROY, @Powers, or Warnings."));
notify_format(player, T("Cloned: Exit #%d."), clone);
- current_state.exits++;
#ifdef LOCAL_DATA
LocData(clone) = NULL;
local_data_clone(clone, thing);
--- 692,697 ----
*** 1_7_4.210/src/cque.c Sat, 07 Jul 2001 21:08:39 -0500 dunemush (pennmush/c/28_cque.c 1.36.1.4 660)
--- 1_7_4.243(w)/src/cque.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/28_cque.c 1.36.1.5.1.1.1.1.1.1.1.2 660)
***************
*** 5,10 ****
--- 5,11 ----
#include <ctype.h>
#include <fcntl.h>
+ #include <limits.h>
#ifdef I_STRING
#include <string.h>
#else
***************
*** 17,22 ****
--- 18,24 ----
#endif
#include "conf.h"
+ #include "command.h"
#include "mushdb.h"
#include "match.h"
#include "externs.h"
***************
*** 122,132 ****
if (a)
num = parse_integer(uncompress(AL_STR(a)));
num += am;
! if (num)
sprintf(buff, "%d", num);
! else
! *buff = '\0';
! (void) atr_add(player, name, buff, GOD, flags);
return (num);
}
--- 124,135 ----
if (a)
num = parse_integer(uncompress(AL_STR(a)));
num += am;
! if (num) {
sprintf(buff, "%d", num);
! (void) atr_add(player, name, buff, GOD, flags);
! } else {
! (void) atr_clr(player, name, GOD);
! }
return (num);
}
***************
*** 306,312 ****
const char *semattr;
int until;
{
! BQUE *tmp, *point, *trail;
int a;
if (wait == 0) {
if (sem != NOTHING)
--- 309,315 ----
const char *semattr;
int until;
{
! BQUE *tmp;
int a;
if (wait == 0) {
if (sem != NOTHING)
***************
*** 322,327 ****
--- 325,331 ----
tmp->queued = QUEUE_PER_OWNER ? Owner(player) : player;
tmp->cause = cause;
tmp->semattr = NULL;
+ tmp->next = NULL;
for (a = 0; a < 10; a++) {
if (!wnxt[a])
tmp->env[a] = NULL;
***************
*** 347,358 ****
}
tmp->sem = sem;
if (sem == NOTHING) {
-
/* No semaphore, put on normal wait queue, sorted by time */
! for (point = qwait, trail = NULL;
point && (point->left <= tmp->left); point = point->next)
trail = point;
tmp->next = point;
if (trail != NULL)
trail->next = tmp;
--- 351,363 ----
}
tmp->sem = sem;
if (sem == NOTHING) {
/* No semaphore, put on normal wait queue, sorted by time */
+ BQUE *point, *trail = NULL;
! for (point = qwait;
point && (point->left <= tmp->left); point = point->next)
trail = point;
+
tmp->next = point;
if (trail != NULL)
trail->next = tmp;
***************
*** 360,388 ****
qwait = tmp;
} else {
! /* Put it on the semaphore queue, sorted by time */
tmp->semattr =
mush_strdup(semattr ? semattr : "SEMAPHORE", "bqueue_semattr");
! if (!tmp->left) { /* No timeout, just shove it on the end */
! tmp->next = NULL;
! if (qsemlast != NULL)
! qsemlast->next = tmp;
! else
! qsemfirst = tmp;
qsemlast = tmp;
} else {
! for (point = qsemfirst, trail = NULL;
! point && (point->left <= tmp->left); point = point->next)
! trail = point;
! tmp->next = point;
! if (trail != NULL) {
! trail->next = tmp;
! if (qsemlast == trail)
! qsemlast = tmp;
! } else {
! qsemfirst = tmp;
! qsemlast = tmp;
! }
}
}
}
--- 365,378 ----
qwait = tmp;
} else {
! /* Put it on the end of the semaphore queue */
tmp->semattr =
mush_strdup(semattr ? semattr : "SEMAPHORE", "bqueue_semattr");
! if (qsemlast != NULL) {
! qsemlast->next = tmp;
qsemlast = tmp;
} else {
! qsemfirst = qsemlast = tmp;
}
}
}
***************
*** 432,443 ****
/* check for semaphore timeouts */
for (point = qsemfirst, trail = NULL; point; point = next) {
! if (point->left == 0) {
next = (trail = point)->next;
! continue; /* skip non-timed waits */
}
- if (point->left > mudtime) /* Timed semaphores are in sorted order */
- break;
if (trail != NULL)
trail->next = next = point->next;
else
--- 422,431 ----
/* check for semaphore timeouts */
for (point = qsemfirst, trail = NULL; point; point = next) {
! if (point->left == 0 || point->left > mudtime) {
next = (trail = point)->next;
! continue; /* skip non-timed and those that haven't gone off yet */
}
if (trail != NULL)
trail->next = next = point->next;
else
***************
*** 550,556 ****
min = curr;
}
- /* Once again, we only care about the first timed item. */
for (point = qsemfirst; point; point = point->next) {
if (point->left == 0) /* no timeout */
continue;
--- 538,543 ----
***************
*** 560,684 ****
if (curr < min) {
min = curr;
}
- break;
}
return (min - 1);
}
! int
! nfy_que(sem, key, count, semattr)
! dbref sem;
! int key;
! int count;
! const char *semattr;
! /* 0 is normal, 1 is all, 2 is drain */
{
! BQUE *point, *trail, *next = NULL;
! int num;
! ATTR *a;
! if ((a = atr_get_noparent(sem, semattr)) != NULL)
! num = parse_integer(uncompress(a->value));
! else
! num = 0;
! if (num > 0) {
! num = 0;
! for (point = qsemfirst, trail = NULL; point; point = next) {
! if (point->sem == sem) {
! if (key != 2 && strcmp(semattr, point->semattr) != 0)
! continue;
! num++;
! if (trail)
! trail->next = next = point->next;
! else
! qsemfirst = next = point->next;
! if (point == qsemlast)
! qsemlast = trail;
! /* run or discard the command */
! if (key != 2) {
! point->next = NULL;
! if (IsPlayer(point->cause)) {
! if (qlast) {
! qlast->next = point;
! qlast = point;
! } else
! qlast = qfirst = point;
! } else {
! if (qllast) {
! qllast->next = point;
! qllast = point;
! } else
! qllast = qlfirst = point;
! }
! } else {
! giveto(point->player, QUEUE_COST);
! add_to(point->queued, -1);
! atr_clr(sem, point->semattr, GOD);
! free_qentry(point);
! }
} else {
! next = (trail = point)->next;
}
-
- /* if we've notified enough, exit. Note that we don't have to check
- * for the case of @notify/all, since we don't break out of this
- * loop "manually" unless the key is standard @notify.
- */
- if ((key == 0) && (num >= count))
- next = NULL;
}
- } else {
- num = 0;
}
! /* update the semaphore waiter's count */
! if (key == 0)
! add_to_sem(sem, -count, semattr);
! else if (semattr)
! atr_clr(sem, semattr, GOD);
! return num;
}
! void
! do_notify(player, key, what, count)
! dbref player;
! int key; /* 0 is normal, 1 is all, 2 is drain */
! char *what;
! char *count;
! {
dbref thing;
! int i;
! char *aname;
! /* find it */
! aname = strchr(what, '/');
! if (aname) {
! *aname++ = '\0';
! upcasestr(aname);
} else {
! aname = (char *) "SEMAPHORE";
}
! if ((thing =
! noisy_match_result(player, what, NOTYPE, MAT_EVERYTHING)) == NOTHING)
return;
/* must control something or have it link_ok in order to use it as
* as a semaphore.
*/
if ((!controls(player, thing) && !LinkOk(thing))
! || !waitable_attr(thing, aname)) {
notify(player, T("Permission denied."));
return;
}
! /* find how many times to notify */
! if (count && *count)
! i = parse_integer(count);
! else
! i = 1;
! if (i > 0)
! nfy_que(thing, key, i, aname);
! if (key != 2) {
! quiet_notify(player, "Notified.");
} else {
! quiet_notify(player, "Drained.");
}
}
--- 547,717 ----
if (curr < min) {
min = curr;
}
}
return (min - 1);
}
! static int
! drain_helper(dbref player, dbref thing, char const *pattern, ATTR *atr,
! void *args __attribute__ ((__unused__)))
{
! if (waitable_attr(thing, AL_NAME(atr)))
! (void) atr_clr(thing, AL_NAME(atr), GOD);
! return 0;
! }
!
! void
! dequeue_semaphores(dbref thing, char const *aname, int count, int all,
! int drain)
! {
! BQUE **point;
! BQUE *entry;
!
! if (all)
! count = INT_MAX;
!
! /* Go through the semaphore queue and do it */
! point = &qsemfirst;
! while (*point && count > 0) {
! entry = *point;
! if (entry->sem != thing || (aname && strcmp(entry->semattr, aname))) {
! point = &(entry->next);
! continue;
! }
!
! /* Remove the queue entry from the semaphore list */
! *point = entry->next;
! entry->next = NULL;
! if (qsemlast == entry) {
! qsemlast = qsemfirst;
! if (qsemlast)
! while (qsemlast->next)
! qsemlast = qsemlast->next;
! }
!
! /* Update bookkeeping */
! count--;
! add_to_sem(entry->sem, -1, entry->semattr);
!
! /* Dispose of the entry as appropriate: discard if @drain, or put
! * into either the player or the object queue. */
! if (drain) {
! giveto(entry->player, QUEUE_COST);
! add_to(entry->queued, -1);
! free_qentry(entry);
! } else if (IsPlayer(entry->cause)) {
! if (qlast) {
! qlast->next = entry;
! qlast = entry;
} else {
! qlast = qfirst = entry;
! }
! } else {
! if (qllast) {
! qllast->next = entry;
! qllast = entry;
! } else {
! qllast = qlfirst = entry;
}
}
}
! /* If @drain/all, clear the relevant attribute(s) */
! if (drain && all) {
! if (aname)
! (void) atr_clr(thing, aname, GOD);
! else
! atr_iter_get(GOD, thing, "*", drain_helper, NULL);
! }
!
! /* If draining just a single
!
! /* If @notify and count was higher than the number of queue entries,
! * make the semaphore go negative. This does not apply to
! * @notify/any or @notify/all. */
! if (!drain && aname && !all && count > 0)
! add_to_sem(thing, -count, aname);
}
! COMMAND (cmd_notify_drain) {
! int drain;
! char *pos;
! char const *aname;
dbref thing;
! int count;
! int all;
!
! /* Figure out whether we're in notify or drain */
! drain = (cmd->name[1] == 'D');
!
! /* Make sure they gave an object ref */
! if (!arg_left || !*arg_left) {
! notify(player, T("You must specify an object to use for the semaphore."));
! return;
! }
!
! /* Figure out which attribute we're using */
! pos = strchr(arg_left, '/');
! if (pos) {
! if (SW_ISSET(sw, SWITCH_ANY)) {
! notify(player,
! T
! ("You may not specify a semaphore attribute with the ANY switch."));
! return;
! }
! *pos++ = '\0';
! upcasestr(pos);
! aname = pos;
} else {
! if (SW_ISSET(sw, SWITCH_ANY)) {
! aname = NULL;
! } else {
! aname = "SEMAPHORE";
! }
}
!
! /* Figure out which object we're using */
! thing = noisy_match_result(player, arg_left, NOTYPE, MAT_EVERYTHING);
! if (!GoodObject(thing))
return;
/* must control something or have it link_ok in order to use it as
* as a semaphore.
*/
if ((!controls(player, thing) && !LinkOk(thing))
! || (aname && !waitable_attr(thing, aname))) {
notify(player, T("Permission denied."));
return;
}
!
! /* Figure out how many times to notify */
! all = SW_ISSET(sw, SWITCH_ALL);
! if (arg_right && *arg_right) {
! if (all) {
! notify(player,
! T("You may not specify a semaphore count with the ALL switch."));
! return;
! }
! if (!is_uinteger(arg_right)) {
! notify(player, T("The semaphore count must be an integer."));
! return;
! }
! count = parse_integer(arg_right);
! } else {
! if (drain)
! all = 1;
! if (all)
! count = INT_MAX;
! else
! count = 1;
! }
!
! dequeue_semaphores(thing, aname, count, all, drain);
!
! if (drain) {
! quiet_notify(player, T("Drained."));
} else {
! quiet_notify(player, T("Notified."));
}
}
*** 1_7_4.210/src/conf.c Tue, 31 Jul 2001 16:27:51 -0500 dunemush (pennmush/c/31_conf.c 1.41.2.3.1.3 660)
--- 1_7_4.243(w)/src/conf.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/31_conf.c 1.41.2.3.1.3.1.2 660)
***************
*** 38,44 ****
#include "confmagic.h"
#ifdef macintosh
! extern void PMConvertPath(char *path);
#endif
time_t mudtime; /* game time, in seconds */
--- 38,44 ----
#include "confmagic.h"
#ifdef macintosh
! #include "PMInit.h"
#endif
time_t mudtime; /* game time, in seconds */
***************
*** 914,937 ****
*options.compresssuff = 0;
/* Now convert the UNIX paths specified to MacOS ones */
! PMConvertPath(options.input_db);
! PMConvertPath(options.output_db);
! PMConvertPath(options.crash_db);
#ifdef CHAT_SYSTEM
! PMConvertPath(options.chatdb);
#endif
! PMConvertPath(options.mail_db);
! PMConvertPath(options.connect_file[0]);
! PMConvertPath(options.motd_file[0]);
! PMConvertPath(options.wizmotd_file[0]);
! PMConvertPath(options.newuser_file[0]);
! PMConvertPath(options.register_file[0]);
! PMConvertPath(options.quit_file[0]);
! PMConvertPath(options.down_file[0]);
! PMConvertPath(options.full_file[0]);
! PMConvertPath(options.guest_file[0]);
! PMConvertPath(options.access_file);
! PMConvertPath(options.names_file);
#endif
}
--- 914,937 ----
*options.compresssuff = 0;
/* Now convert the UNIX paths specified to MacOS ones */
! PMConvertPath(options.input_db, options.input_db, 255);
! PMConvertPath(options.output_db, options.output_db, 255);
! PMConvertPath(options.crash_db, options.crash_db, 255);
#ifdef CHAT_SYSTEM
! PMConvertPath(options.chatdb, options.chatdb, 255);
#endif
! PMConvertPath(options.mail_db, options.mail_db, 255);
! PMConvertPath(options.connect_file[0], options.connect_file[0], 255);
! PMConvertPath(options.motd_file[0], options.motd_file[0], 255);
! PMConvertPath(options.wizmotd_file[0], options.wizmotd_file[0], 255);
! PMConvertPath(options.newuser_file[0], options.newuser_file[0], 255);
! PMConvertPath(options.register_file[0], options.register_file[0], 255);
! PMConvertPath(options.quit_file[0], options.quit_file[0], 255);
! PMConvertPath(options.down_file[0], options.down_file[0], 255);
! PMConvertPath(options.full_file[0], options.full_file[0], 255);
! PMConvertPath(options.guest_file[0], options.guest_file[0], 255);
! PMConvertPath(options.access_file, options.access_file, 255);
! PMConvertPath(options.names_file, options.names_file, 255);
#endif
}
*** 1_7_4.210/src/command.c Mon, 04 Feb 2002 09:22:43 -0600 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5.1.2.1.1 660)
--- 1_7_4.243(w)/src/command.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5.1.2.1.1.1.1.1.1 660)
***************
*** 110,116 ****
CMD_T_ANY | CMD_T_NOPARSE | CMD_T_NOGAGGED, 0, 0, 0},
{"@DOLIST", "NOTIFY DELIMIT", cmd_dolist,
CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_NOPARSE, 0, 0, 0},
! {"@DRAIN", NULL, cmd_drain, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0, 0},
{"@DUMP", "PARANOID DEBUG", cmd_dump, CMD_T_ANY, WIZARD, 0, 0},
{"@EDIT", NULL, cmd_edit,
--- 110,116 ----
CMD_T_ANY | CMD_T_NOPARSE | CMD_T_NOGAGGED, 0, 0, 0},
{"@DOLIST", "NOTIFY DELIMIT", cmd_dolist,
CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_NOPARSE, 0, 0, 0},
! {"@DRAIN", "ALL ANY", cmd_notify_drain, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0, 0},
{"@DUMP", "PARANOID DEBUG", cmd_dump, CMD_T_ANY, WIZARD, 0, 0},
{"@EDIT", NULL, cmd_edit,
***************
*** 176,182 ****
0, 0},
{"@NEWPASSWORD", NULL, cmd_newpassword, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0,
0},
! {"@NOTIFY", "ALL", cmd_notify, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0, 0},
{"@NUKE", NULL, cmd_nuke, CMD_T_ANY | CMD_T_NOGAGGED, 0, 0, 0},
{"@OEMIT", "NOEVAL", cmd_oemit, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED,
--- 176,182 ----
0, 0},
{"@NEWPASSWORD", NULL, cmd_newpassword, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0,
0},
! {"@NOTIFY", "ALL ANY", cmd_notify_drain, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0, 0},
{"@NUKE", NULL, cmd_nuke, CMD_T_ANY | CMD_T_NOGAGGED, 0, 0, 0},
{"@OEMIT", "NOEVAL", cmd_oemit, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED,
***************
*** 661,666 ****
--- 661,672 ----
}
+ /* This is set to true for EQ_SPLIT commands that actually have a rhs.
+ Used in @teleport, ATTRSET and possibly other checks. It's ugly.
+ Blame Talek for it. ;)
+ */
+ int rhs_present;
+
/* Real work. Parse the command arguments into arrays */
void
command_argparse(player, cause, from, to, argv, cmd, right_side, forcenoparse)
***************
*** 731,736 ****
--- 737,743 ----
t++;
}
if (split && (*f == '=')) {
+ rhs_present = 1;
f++;
*from = f;
done = 1;
***************
*** 803,808 ****
--- 810,817 ----
int switchnum;
switch_mask sw;
int noeval;
+
+ rhs_present = 0;
command = (char *) mush_malloc(BUFFER_LEN, "string");
swtch = (char *) mush_malloc(BUFFER_LEN, "string");
*** 1_7_4.210/src/cmds.c Thu, 08 Nov 2001 14:56:16 -0600 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2.1.2.2.3.1.1.1.2 660)
--- 1_7_4.243(w)/src/cmds.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2.1.2.2.3.1.1.1.2.1.1.1.2 660)
***************
*** 52,57 ****
--- 52,60 ----
void do_uptime _((dbref player, int mortal));
extern int config_set _((const char *opt, char *val, int source));
+ /* From command.c */
+ extern int rhs_present;
+
COMMAND (cmd_allhalt) {
do_allhalt(player);
}
***************
*** 292,301 ****
do_dolist(player, arg_left, arg_right, cause, flags);
}
- COMMAND (cmd_drain) {
- do_notify(player, 2, arg_left, arg_right);
- }
-
COMMAND (cmd_dump) {
if (SW_ISSET(sw, SWITCH_PARANOID))
do_dump(player, arg_left, 1);
--- 295,300 ----
***************
*** 583,592 ****
do_newpassword(player, arg_left, arg_right);
}
- COMMAND (cmd_notify) {
- do_notify(player, (SW_ISSET(sw, SWITCH_ALL)), arg_left, arg_right);
- }
-
COMMAND (cmd_nuke) {
do_destroy(player, arg_left, 1);
}
--- 582,587 ----
***************
*** 791,797 ****
#endif
COMMAND (cmd_teleport) {
! do_teleport(player, arg_left, arg_right, (SW_ISSET(sw, SWITCH_SILENT)));
}
COMMAND (cmd_trigger) {
--- 786,795 ----
#endif
COMMAND (cmd_teleport) {
! if (rhs_present && !*arg_right)
! notify(player, T("You can't teleport to nothing!"));
! else
! do_teleport(player, arg_left, arg_right, (SW_ISSET(sw, SWITCH_SILENT)));
}
COMMAND (cmd_trigger) {
***************
*** 1026,1032 ****
return;
/* If it's &attr obj, we must pass a NULL. If &attr obj=, pass "" */
! if (strchr(raw, '=')) {
do_set_atr(thing, switches, arg_right, player,
0x1 | (SW_ISSET(sw, SWITCH_NOEVAL) ? 0 : 0x02));
} else {
--- 1024,1030 ----
return;
/* If it's &attr obj, we must pass a NULL. If &attr obj=, pass "" */
! if (rhs_present) {
do_set_atr(thing, switches, arg_right, player,
0x1 | (SW_ISSET(sw, SWITCH_NOEVAL) ? 0 : 0x02));
} else {
*** 1_7_4.210/src/bsd.c Sat, 05 Jan 2002 08:36:48 -0600 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12.1.1.1.1.1.2.1.1.1.13.1.1.1.1.1.1.1.1.1.1 660)
--- 1_7_4.243(w)/src/bsd.c Sun, 17 Mar 2002 13:25:51 -0600 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12.1.1.1.1.1.2.1.1.1.13.1.1.1.1.1.1.1.1.1.1.1.3 660)
***************
*** 1104,1110 ****
--- 1104,1114 ----
return messages[type].message;
messages[type].made = 1;
+ #ifdef macintosh
+ p = (unsigned char *) message;
+ #else
p = message;
+ #endif
o = tbuf;
t = o;
***************
*** 3819,3826 ****
do_log(LT_CONN, 0, 0, "[%d/%s/%s] Registered %s(#%d) to %s",
d->descriptor, d->addr, d->ip, Name(player), player, password);
}
! /* Even when registration succeeds, they don't connect, so return 0 */
! return 0;
} else {
/* invalid command, just repeat login screen */
--- 3823,3829 ----
do_log(LT_CONN, 0, 0, "[%d/%s/%s] Registered %s(#%d) to %s",
d->descriptor, d->addr, d->ip, Name(player), player, password);
}
! /* Whether it succeeds or fails, leave them connected */
} else {
/* invalid command, just repeat login screen */
*** 1_7_4.210/src/boolexp.c Wed, 23 Jan 2002 10:11:06 -0600 dunemush (pennmush/c/39_boolexp.c 1.1.1.17.1.1 660)
--- 1_7_4.243(w)/src/boolexp.c Sun, 17 Mar 2002 13:25:50 -0600 dunemush (pennmush/c/39_boolexp.c 1.1.1.17.1.1.1.1 660)
***************
*** 704,708 ****
restore_global_regs("check_attrib_lock_save", preserve);
free((Malloc_t) asave);
! return !strcmp(buff, str);
}
--- 704,708 ----
restore_global_regs("check_attrib_lock_save", preserve);
free((Malloc_t) asave);
! return !strcasecmp(buff, str);
}
*** 1_7_4.210/src/attrib.c Wed, 23 Jan 2002 10:11:06 -0600 dunemush (pennmush/c/40_attrib.c 1.15.1.2.1.5.1.1.1.3.1.3.1.2.1.2.1.2.2.1.1.2.1.2.1.2.1.1 660)
--- 1_7_4.243(w)/src/attrib.c Sun, 17 Mar 2002 13:25:50 -0600 dunemush (pennmush/c/40_attrib.c 1.15.1.2.1.5.1.1.1.3.1.3.1.2.1.2.1.2.2.1.1.2.1.2.1.2.1.1.1.1 660)
***************
*** 237,243 ****
/* check for permission to modify existing atr */
if (ptr && (AL_FLAGS(ptr) & AF_SAFE))
return AE_SAFE;
! if (ptr && !Can_Write_Attr(Owner(player), thing, ptr))
return AE_ERROR;
/* make a new atr, if needed */
--- 237,243 ----
/* check for permission to modify existing atr */
if (ptr && (AL_FLAGS(ptr) & AF_SAFE))
return AE_SAFE;
! if (ptr && !Can_Write_Attr(player, thing, ptr))
return AE_ERROR;
/* make a new atr, if needed */
***************
*** 278,284 ****
AL_STR(ptr) = NULL;
/* check for permission to create atr */
! if (!Can_Write_Attr(Owner(player), thing, ptr) ||
(AttrCount(thing) >= MAX_ATTRCOUNT)) {
st_delete(AL_NAME(ptr), &atr_names);
AL_NEXT(ptr) = atr_free_list;
--- 278,284 ----
AL_STR(ptr) = NULL;
/* check for permission to create atr */
! if (!Can_Write_Attr(player, thing, ptr) ||
(AttrCount(thing) >= MAX_ATTRCOUNT)) {
st_delete(AL_NAME(ptr), &atr_names);
AL_NEXT(ptr) = atr_free_list;
***************
*** 359,365 ****
if (!ptr)
return 0;
! if (!Can_Write_Attr(Owner(player), thing, ptr))
return -1;
#ifdef CREATION_TIMES
--- 359,365 ----
if (!ptr)
return 0;
! if (!Can_Write_Attr(player, thing, ptr))
return -1;
#ifdef CREATION_TIMES
*** 1_7_4.210/hdrs/version.h Sun, 10 Feb 2002 09:30:30 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9.1.1.1.1.1.4 660)
--- 1_7_4.243(w)/hdrs/version.h Sun, 17 Mar 2002 13:25:54 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9.1.1.1.1.1.5 660)
***************
*** 1,2 ****
! #define VERSION "PennMUSH version 1.7.4 patchlevel 15 [02/08/2002]"
! #define SHORTVN "PennMUSH 1.7.4p15"
--- 1,2 ----
! #define VERSION "PennMUSH version 1.7.4 patchlevel 16 [03/11/2002]"
! #define SHORTVN "PennMUSH 1.7.4p16"
*** 1_7_4.210/hdrs/game.h Tue, 18 Dec 2001 14:22:10 -0600 dunemush (pennmush/d/12_game.h 1.28.1.2.1.1.1.1.1.1 660)
--- 1_7_4.243(w)/hdrs/game.h Sun, 17 Mar 2002 13:25:53 -0600 dunemush (pennmush/d/12_game.h 1.28.1.2.1.1.1.1.1.1.1.1 660)
***************
*** 26,32 ****
extern void do_motd _((dbref player, int key, const char *message));
extern void do_poll _((dbref player, const char *message));
/* From cque.c */
- extern void do_notify _((dbref player, int key, char *what, char *count));
extern void do_wait
_((dbref player, dbref cause, char *arg1, char *cmd, int until));
extern void do_queue _((dbref player, const char *what, int flag));
--- 26,31 ----
*** 1_7_4.210/hdrs/externs.h Fri, 15 Feb 2002 16:08:20 -0600 dunemush (pennmush/d/16_externs.h 1.1.1.53.1.2.1.8.2.1.1.2 660)
--- 1_7_4.243(w)/hdrs/externs.h Sun, 17 Mar 2002 13:25:53 -0600 dunemush (pennmush/d/16_externs.h 1.1.1.53.1.2.1.8.2.1.1.2.1.1.1.1 660)
***************
*** 150,156 ****
_((dbref executor, char *atrname, dbref enactor, int noparent));
#define queue_attribute(a,b,c) queue_attribute_base(a,(char *)b,c,0)
#define queue_attribute_noparent(a,b,c) queue_attribute_base(a,(char *)b,c,1)
! extern int nfy_que _((dbref sem, int key, int count, const char *semattr));
/* From create.c */
--- 150,157 ----
_((dbref executor, char *atrname, dbref enactor, int noparent));
#define queue_attribute(a,b,c) queue_attribute_base(a,(char *)b,c,0)
#define queue_attribute_noparent(a,b,c) queue_attribute_base(a,(char *)b,c,1)
! extern void dequeue_semaphores(dbref thing, char const *aname, int count,
! int all, int drain);
/* From create.c */
***************
*** 268,274 ****
/* From strutil.c */
extern char *split_token _((char **sp, char sep));
! extern char *chopstr _((const char *str, int lim));
extern int string_prefix _((const char *string, const char *prefix));
extern const char *string_match _((const char *src, const char *sub));
extern char *strupper _((const char *s));
--- 269,275 ----
/* From strutil.c */
extern char *split_token _((char **sp, char sep));
! extern char *chopstr _((const char *str, Size_t lim));
extern int string_prefix _((const char *string, const char *prefix));
extern const char *string_match _((const char *src, const char *sub));
extern char *strupper _((const char *s));
***************
*** 295,312 ****
typedef struct {
char text[BUFFER_LEN];
char *codes[BUFFER_LEN];
! int len;
} ansi_string;
extern ansi_string *parse_ansi_string _((const char *src));
extern void free_ansi_string _((ansi_string * as));
- extern int safe_ansi_string _((ansi_string * as, int start, int len, char *buff,
- char **bp));
extern void populate_codes _((ansi_string * as));
extern void depopulate_codes _((ansi_string * as));
- extern int ansi_save _((const char *string, int length, char *buff, char **bp));
- extern int ansi_align _((const char *string, int length));
/* Append a character to the end of a BUFFER_LEN long string.
* Two versions here - one an inline macro, the other a function.
--- 296,309 ----
typedef struct {
char text[BUFFER_LEN];
char *codes[BUFFER_LEN];
! Size_t len;
} ansi_string;
extern ansi_string *parse_ansi_string _((const char *src));
extern void free_ansi_string _((ansi_string * as));
extern void populate_codes _((ansi_string * as));
extern void depopulate_codes _((ansi_string * as));
/* Append a character to the end of a BUFFER_LEN long string.
* Two versions here - one an inline macro, the other a function.
***************
*** 342,351 ****
safe_chr((x) ? '1' : '0', (buf), (bufp))
/* Append X characters to the end of a string, taking ansi and html codes into
account. */
! extern int safe_ansi_len
! _((const char *src, int copylen, char *buff, char **bp, int maxlen));
! #define safe_ansi(src, copylen, buff, bp) \
! safe_ansi_len((src), (copylen), (buff), (bp), BUFFER_LEN)
extern char *replace_string
(const char *old, const char *newbit, const char *string);
extern char *replace_string2
--- 339,349 ----
safe_chr((x) ? '1' : '0', (buf), (bufp))
/* Append X characters to the end of a string, taking ansi and html codes into
account. */
! extern int safe_ansi_string
! _((ansi_string * as, Size_t start, Size_t len, char *buff, char **bp));
! /* Append N copies of the character X to the end of a string */
! extern int safe_fill _((char x, size_t n, char *buff, char **bp));
!
extern char *replace_string
(const char *old, const char *newbit, const char *string);
extern char *replace_string2
*** 1_7_4.210/hdrs/switches.h Wed, 07 Nov 2001 19:38:52 -0600 dunemush (pennmush/d/21_switches.h 1.2.1.6.2.3 660)
--- 1_7_4.243(w)/hdrs/switches.h Sun, 17 Mar 2002 13:25:54 -0600 dunemush (pennmush/d/21_switches.h 1.2.1.6.2.4 660)
***************
*** 1,129 ****
#define SWITCH_ACCESS 1
#define SWITCH_ADD 2
#define SWITCH_ALL 3
! #define SWITCH_ATTRIBS 4
! #define SWITCH_BAN 5
! #define SWITCH_BLIND 6
! #define SWITCH_BRIEF 7
! #define SWITCH_CHECK 8
! #define SWITCH_CHOWN 9
! #define SWITCH_CLEAR 10
! #define SWITCH_CMD 11
! #define SWITCH_COMMANDS 12
! #define SWITCH_CONN 13
! #define SWITCH_CONNECT 14
! #define SWITCH_CONNECTED 15
! #define SWITCH_CONTENTS 16
! #define SWITCH_COSTS 17
! #define SWITCH_COUNT 18
! #define SWITCH_CREATE 19
! #define SWITCH_DATABASE 20
! #define SWITCH_DB 21
! #define SWITCH_DEBUG 22
! #define SWITCH_DECOMPILE 23
! #define SWITCH_DEFAULTS 24
! #define SWITCH_DELETE 25
! #define SWITCH_DELIMIT 26
! #define SWITCH_DESCRIBE 27
! #define SWITCH_DESTROY 28
! #define SWITCH_DISABLE 29
! #define SWITCH_DOWN 30
! #define SWITCH_DSTATS 31
! #define SWITCH_EMIT 32
! #define SWITCH_ENABLE 33
! #define SWITCH_ERR 34
! #define SWITCH_EXITS 35
! #define SWITCH_FILE 36
! #define SWITCH_FIRST 37
! #define SWITCH_FLAGS 38
! #define SWITCH_FOLDERS 39
! #define SWITCH_FORWARD 40
! #define SWITCH_FSTATS 41
! #define SWITCH_FULL 42
! #define SWITCH_FUNCTIONS 43
! #define SWITCH_FWD 44
! #define SWITCH_GAG 45
! #define SWITCH_GLOBALS 46
! #define SWITCH_HEADER 47
! #define SWITCH_HERE 48
! #define SWITCH_HIDE 49
! #define SWITCH_ILIST 50
! #define SWITCH_INVENTORY 51
! #define SWITCH_IPRINT 52
! #define SWITCH_JOIN 53
! #define SWITCH_LIST 54
! #define SWITCH_LOWERCASE 55
! #define SWITCH_ME 56
! #define SWITCH_MEMBERS 57
! #define SWITCH_MOD 58
! #define SWITCH_MORTAL 59
! #define SWITCH_MOTD 60
! #define SWITCH_MUTE 61
! #define SWITCH_NAME 62
! #define SWITCH_NO 63
! #define SWITCH_NOEVAL 64
! #define SWITCH_NOFLAGCOPY 65
! #define SWITCH_NOISY 66
! #define SWITCH_NOSIG 67
! #define SWITCH_NOSPACE 68
! #define SWITCH_NOTIFY 69
! #define SWITCH_NUKE 70
! #define SWITCH_OFF 71
! #define SWITCH_ON 72
! #define SWITCH_OUTSIDE 73
! #define SWITCH_OVERRIDE 74
! #define SWITCH_PANIC 75
! #define SWITCH_PARANOID 76
! #define SWITCH_PLAYERS 77
! #define SWITCH_PORT 78
! #define SWITCH_POSE 79
! #define SWITCH_PRESERVE 80
! #define SWITCH_PRINT 81
! #define SWITCH_PRIVS 82
! #define SWITCH_PURGE 83
! #define SWITCH_QUICK 84
! #define SWITCH_QUIET 85
! #define SWITCH_READ 86
! #define SWITCH_REBOOT 87
! #define SWITCH_REGISTER 88
! #define SWITCH_REMOVE 89
! #define SWITCH_RENAME 90
! #define SWITCH_RESTORE 91
! #define SWITCH_RESTRICT 92
! #define SWITCH_RETROACTIVE 93
! #define SWITCH_ROOM 94
! #define SWITCH_ROOMS 95
! #define SWITCH_ROYALTY 96
! #define SWITCH_SEE 97
! #define SWITCH_SEEFLAG 98
! #define SWITCH_SELF 99
! #define SWITCH_SEND 100
! #define SWITCH_SET 101
! #define SWITCH_SILENT 102
! #define SWITCH_SKIPDEFAULTS 103
! #define SWITCH_SPEAK 104
! #define SWITCH_STATS 105
! #define SWITCH_SUMMARY 106
! #define SWITCH_TABLES 107
! #define SWITCH_TAG 108
! #define SWITCH_TELEPORT 109
! #define SWITCH_TF 110
! #define SWITCH_THINGS 111
! #define SWITCH_TITLE 112
! #define SWITCH_TRACE 113
! #define SWITCH_UNCLEAR 114
! #define SWITCH_UNFOLDER 115
! #define SWITCH_UNGAG 116
! #define SWITCH_UNHIDE 117
! #define SWITCH_UNMUTE 118
! #define SWITCH_UNTAG 119
! #define SWITCH_UNTIL 120
! #define SWITCH_URGENT 121
! #define SWITCH_USEFLAG 122
! #define SWITCH_WHAT 123
! #define SWITCH_WHO 124
! #define SWITCH_WIPE 125
! #define SWITCH_WIZ 126
! #define SWITCH_WIZARD 127
! #define SWITCH_YES 128
! #define SWITCH_ZONE 129
--- 1,130 ----
#define SWITCH_ACCESS 1
#define SWITCH_ADD 2
#define SWITCH_ALL 3
! #define SWITCH_ANY 4
! #define SWITCH_ATTRIBS 5
! #define SWITCH_BAN 6
! #define SWITCH_BLIND 7
! #define SWITCH_BRIEF 8
! #define SWITCH_CHECK 9
! #define SWITCH_CHOWN 10
! #define SWITCH_CLEAR 11
! #define SWITCH_CMD 12
! #define SWITCH_COMMANDS 13
! #define SWITCH_CONN 14
! #define SWITCH_CONNECT 15
! #define SWITCH_CONNECTED 16
! #define SWITCH_CONTENTS 17
! #define SWITCH_COSTS 18
! #define SWITCH_COUNT 19
! #define SWITCH_CREATE 20
! #define SWITCH_DATABASE 21
! #define SWITCH_DB 22
! #define SWITCH_DEBUG 23
! #define SWITCH_DECOMPILE 24
! #define SWITCH_DEFAULTS 25
! #define SWITCH_DELETE 26
! #define SWITCH_DELIMIT 27
! #define SWITCH_DESCRIBE 28
! #define SWITCH_DESTROY 29
! #define SWITCH_DISABLE 30
! #define SWITCH_DOWN 31
! #define SWITCH_DSTATS 32
! #define SWITCH_EMIT 33
! #define SWITCH_ENABLE 34
! #define SWITCH_ERR 35
! #define SWITCH_EXITS 36
! #define SWITCH_FILE 37
! #define SWITCH_FIRST 38
! #define SWITCH_FLAGS 39
! #define SWITCH_FOLDERS 40
! #define SWITCH_FORWARD 41
! #define SWITCH_FSTATS 42
! #define SWITCH_FULL 43
! #define SWITCH_FUNCTIONS 44
! #define SWITCH_FWD 45
! #define SWITCH_GAG 46
! #define SWITCH_GLOBALS 47
! #define SWITCH_HEADER 48
! #define SWITCH_HERE 49
! #define SWITCH_HIDE 50
! #define SWITCH_ILIST 51
! #define SWITCH_INVENTORY 52
! #define SWITCH_IPRINT 53
! #define SWITCH_JOIN 54
! #define SWITCH_LIST 55
! #define SWITCH_LOWERCASE 56
! #define SWITCH_ME 57
! #define SWITCH_MEMBERS 58
! #define SWITCH_MOD 59
! #define SWITCH_MORTAL 60
! #define SWITCH_MOTD 61
! #define SWITCH_MUTE 62
! #define SWITCH_NAME 63
! #define SWITCH_NO 64
! #define SWITCH_NOEVAL 65
! #define SWITCH_NOFLAGCOPY 66
! #define SWITCH_NOISY 67
! #define SWITCH_NOSIG 68
! #define SWITCH_NOSPACE 69
! #define SWITCH_NOTIFY 70
! #define SWITCH_NUKE 71
! #define SWITCH_OFF 72
! #define SWITCH_ON 73
! #define SWITCH_OUTSIDE 74
! #define SWITCH_OVERRIDE 75
! #define SWITCH_PANIC 76
! #define SWITCH_PARANOID 77
! #define SWITCH_PLAYERS 78
! #define SWITCH_PORT 79
! #define SWITCH_POSE 80
! #define SWITCH_PRESERVE 81
! #define SWITCH_PRINT 82
! #define SWITCH_PRIVS 83
! #define SWITCH_PURGE 84
! #define SWITCH_QUICK 85
! #define SWITCH_QUIET 86
! #define SWITCH_READ 87
! #define SWITCH_REBOOT 88
! #define SWITCH_REGISTER 89
! #define SWITCH_REMOVE 90
! #define SWITCH_RENAME 91
! #define SWITCH_RESTORE 92
! #define SWITCH_RESTRICT 93
! #define SWITCH_RETROACTIVE 94
! #define SWITCH_ROOM 95
! #define SWITCH_ROOMS 96
! #define SWITCH_ROYALTY 97
! #define SWITCH_SEE 98
! #define SWITCH_SEEFLAG 99
! #define SWITCH_SELF 100
! #define SWITCH_SEND 101
! #define SWITCH_SET 102
! #define SWITCH_SILENT 103
! #define SWITCH_SKIPDEFAULTS 104
! #define SWITCH_SPEAK 105
! #define SWITCH_STATS 106
! #define SWITCH_SUMMARY 107
! #define SWITCH_TABLES 108
! #define SWITCH_TAG 109
! #define SWITCH_TELEPORT 110
! #define SWITCH_TF 111
! #define SWITCH_THINGS 112
! #define SWITCH_TITLE 113
! #define SWITCH_TRACE 114
! #define SWITCH_UNCLEAR 115
! #define SWITCH_UNFOLDER 116
! #define SWITCH_UNGAG 117
! #define SWITCH_UNHIDE 118
! #define SWITCH_UNMUTE 119
! #define SWITCH_UNTAG 120
! #define SWITCH_UNTIL 121
! #define SWITCH_URGENT 122
! #define SWITCH_USEFLAG 123
! #define SWITCH_WHAT 124
! #define SWITCH_WHO 125
! #define SWITCH_WIPE 126
! #define SWITCH_WIZ 127
! #define SWITCH_WIZARD 128
! #define SWITCH_YES 129
! #define SWITCH_ZONE 130
*** 1_7_4.210/COPYRITE Thu, 31 May 2001 11:19:20 -0500 dunemush (pennmush/d/29_COPYRITE 1.3 600)
--- 1_7_4.243(w)/COPYRITE Tue, 05 Mar 2002 09:12:43 -0600 dunemush (pennmush/d/29_COPYRITE 1.4 600)
***************
*** 83,89 ****
* T. Alexander Popiel, Ralph Melton, Thorvald Natvig, Luuk de Waard,
* Shawn Wagner
* Past and present PennMUSH porters:
! * Nick Gammon, Sylvia, Dan Williams
* TinyMUSH 2.2 developers (listed above)
* TinyMUX developer David Passmore
* All PennMUSH users who've sent in bug reports
--- 83,89 ----
* T. Alexander Popiel, Ralph Melton, Thorvald Natvig, Luuk de Waard,
* Shawn Wagner
* Past and present PennMUSH porters:
! * Nick Gammon, Sylvia, Dan Williams, Ervin Hearn III
* TinyMUSH 2.2 developers (listed above)
* TinyMUX developer David Passmore
* All PennMUSH users who've sent in bug reports
*** 1_7_4.210/Configure Sat, 30 Jun 2001 08:59:12 -0500 dunemush (pennmush/d/32_Configure 1.21.1.4.1.1 710)
--- 1_7_4.243(w)/Configure Mon, 11 Mar 2002 18:08:14 -0600 dunemush (pennmush/d/32_Configure 1.21.1.4.1.1.1.1 710)
***************
*** 1650,1655 ****
--- 1650,1656 ----
case "$3" in
4*) osvers=4 ;;
5*) osvers=5 ;;
+ 6*) osvers=6 ;;
*) osvers="$3" ;;
esac
;;
*** 1_7_4.210/MANIFEST Thu, 26 Apr 2001 11:19:38 -0500 dunemush (pennmush/d/34_MANIFEST 1.21.1.2 600)
--- 1_7_4.243(w)/MANIFEST Mon, 11 Mar 2002 18:06:03 -0600 dunemush (pennmush/d/34_MANIFEST 1.21.1.2.1.1 600)
***************
*** 133,138 ****
--- 133,139 ----
hints/hpux.sh
hints/hpux-gcc.sh
hints/irix.sh
+ hints/irix_6.sh
hints/linux_2.sh
hints/next.sh
hints/openbsd.sh
*** 1_7_4.210/game/txt/hlp/penncode.hlp Thu, 31 May 2001 11:19:20 -0500 dunemush (pennmush/d/40_penncode.h 1.5 600)
--- 1_7_4.243(w)/game/txt/hlp/penncode.hlp Tue, 05 Mar 2002 09:12:35 -0600 dunemush (pennmush/d/40_penncode.h 1.5.1.1 600)
***************
*** 132,138 ****
Shawn Wagner
Past and present PennMUSH porters:
! Nick Gammon, Sylvia, Dan Williams
TinyMUSH 2.2 developers (listed above)
TinyMUX developer David Passmore
All PennMUSH users who've sent in bug reports
--- 132,138 ----
Shawn Wagner
Past and present PennMUSH porters:
! Nick Gammon, Sylvia, Dan Williams, Ervin Hearn III
TinyMUSH 2.2 developers (listed above)
TinyMUX developer David Passmore
All PennMUSH users who've sent in bug reports
*** 1_7_4.210/win32/cmds.h Wed, 23 Jan 2002 10:11:06 -0600 dunemush (pennmush/f/15_cmds.h 1.9.1.4.1.1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1.1.1 660)
--- 1_7_4.243(w)/win32/cmds.h Sun, 17 Mar 2002 13:17:15 -0600 dunemush (pennmush/f/15_cmds.h 1.9.1.4.1.1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1.1.1.1.1 660)
***************
*** 28,34 ****
COMMAND_PROTO(cmd_dismiss);
COMMAND_PROTO(cmd_doing);
COMMAND_PROTO(cmd_dolist);
- COMMAND_PROTO(cmd_drain);
COMMAND_PROTO(cmd_drop);
COMMAND_PROTO(cmd_dump);
COMMAND_PROTO(cmd_edit);
--- 28,33 ----
***************
*** 72,78 ****
COMMAND_PROTO(cmd_mvattr);
COMMAND_PROTO(cmd_name);
COMMAND_PROTO(cmd_newpassword);
! COMMAND_PROTO(cmd_notify);
COMMAND_PROTO(cmd_nuke);
COMMAND_PROTO(cmd_null);
COMMAND_PROTO(cmd_oemit);
--- 71,77 ----
COMMAND_PROTO(cmd_mvattr);
COMMAND_PROTO(cmd_name);
COMMAND_PROTO(cmd_newpassword);
! COMMAND_PROTO(cmd_notify_drain);
COMMAND_PROTO(cmd_nuke);
COMMAND_PROTO(cmd_null);
COMMAND_PROTO(cmd_oemit);
*** 1_7_4.210/hints/irix_6.sh Sun, 17 Mar 2002 13:25:58 -0600 dunemush ()
--- 1_7_4.243(w)/hints/irix_6.sh Mon, 11 Mar 2002 18:05:49 -0600 dunemush (pennmush/g/10_irix_6.sh 1.1 600)
***************
*** 0 ****
--- 1,6 ----
+ ccflags="-mabi=n32"
+ loclibpth="/usr/local/lib /usr/gnu/lib /usr/lib32 /usr/lib /lib"
+ libs="-lc -lm"
+ has_sigchld='define'
+ has_sigcld='define'
+ nm_opt="-B"