[PENNMUSH-ANNOUNCE] 1.7.7-patch09
dunemush at tala.mede.uic.edu
dunemush at tala.mede.uic.edu
Sat Feb 22 11:10:30 CST 2003
This is patch09 to PennMUSH 1.7.7. After applying this patch, you will
have version 1.7.7p9
To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
patch -p1 < 1.7.7-patch09
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:
Functions:
* New function scan() works like @scan. Suggested by Viila at M*U*S*H.
Flags:
* New flag, MISTRUST, prevents an object from controlling anything
but itself.
Configuration:
* mush.cnf directives ansi_justify, globals, and global_connects have
been removed (they are now always on).
* New unconnected_idle_timeout directive in mush.cnf controls
timeouts for connections idle at the connect screen.
* New max_guests directive in mush.cnf can limit the number of
guests allowed to connect at once. Suggested by Sholevi at M*U*SH.
Minor Changes:
* New lflags search class takes a list of flag names.
* Improved connection failure messages.
* Somewhat more informative message when you @chan/gag,hide,mute
all channels at once. Suggested by Tanaku and Kevin at M*U*S*H.
* Began commenting files using doxygen.
* Internal code cleanup. Mostly converting some magic numbers to
#define'd symbols, and some #define'd symbols to enums for better
debugging and improved readability. Also some conversion of old
K&R style functions. [SW]
* sort() and the set functions understand all the same comparison
types as comp(). [SW]
* Case-sensitive comparison currently isn't always possible, depending
on the locale the mush is running on. Help files reflect this. [SW]
* @uptime shows the time of the last successful database save, and
the time of future events like saves, not just the time until them.
Suggested by Cheetah at M*U*S*H. [SW]
* Improvements to reporting of failed saves. [SW]
* Code cleanup. [SW]
* tel() now takes a third argument that makes it function like
@tel/silent. Suggested by Cheetah at M*U*S*H. [SW]
* @idescformat operates like @descformat for internal descriptions.
Suggested by Tanya at M*U*S*H.
Fixes:
* local_startup() was getting run earlier than in the past due to
changes in the startup sequence. This has been rectified, so
local_startup() again runs after all other initialization (and
just before all object startups are triggered). Report by
BladedThoth and grapenut at M*U*S*H.
* Improved testing for openssl libraries in Configure. The old
approach used to cause problems on systems with runtime-only
openssl installations without development libraries.
* help opaque mentions that opaque blocks look/outside. Suggested
by Cheetah at M*U*S*H.
* itext() and inum() now generate an error on a null argument,
regardless of tiny_math and null_eq_zero settings. Reported by
Intrevis at M*U*S*H.
* Another fix to the new matcher. Bug report by Kyieren at M*U*S*H.
* @flag/alias was broken. Fixed. Reported by Kevin at M*U*S*H.
Prereq: 1.7.7p8
*** 1_7_7.154/Patchlevel Mon, 27 Jan 2003 09:40:07 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.10 600)
--- 1_7_7.222(w)/Patchlevel Thu, 20 Feb 2003 09:32:38 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.10 600)
***************
*** 1,2 ****
Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p8
--- 1,2 ----
Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p9
*** 1_7_7.154/CHANGES.OLD Wed, 14 Nov 2001 14:49:26 -0600 dunemush (pennmush/7_CHANGES.OL 1.6.1.4 600)
--- 1_7_7.222(w)/CHANGES.OLD Wed, 19 Feb 2003 13:19:14 -0600 dunemush (pennmush/7_CHANGES.OL 1.6.1.4.1.1 600)
***************
*** 1719,1731 ****
* @tel me=home or @tel home now works in all cases where 'home'
works. Report by Vedui.
-
- Version 1.6.10 patchlevel 6 May 11, 1997
-
- Fixes:
- * inc() and dec() didn't work right with NULL_EQ_ZERO.
- Fixed. Report by Dennis DeMarco
-
Version 1.7.1 patchlevel 3 January 12, 1998
Minor Changes:
--- 1719,1724 ----
***************
*** 1814,1824 ****
* help @list fixed to show the correct @config switches.
Reported by Leo at ATS TrekMUSH
* @chan/gag now works correctly. Report by Vedui.
-
-
- Version 1.7.0 patchlevel 11 November 18, 1997
-
- Fixes:
* Help for remove() updated. Reported by Vedui at Robotech.
* hasattr() didn't check if the invoker had permission to read
the attribute. Reported by Vedui at Robotech.
--- 1807,1812 ----
*** 1_7_7.154/CHANGES Mon, 27 Jan 2003 09:40:07 -0600 dunemush (pennmush/g/23_CHANGES 1.47 600)
--- 1_7_7.222(w)/CHANGES Thu, 20 Feb 2003 09:32:58 -0600 dunemush (pennmush/g/23_CHANGES 1.48.1.17 600)
***************
*** 18,23 ****
--- 18,78 ----
==========================================================================
+ Version 1.7.7 patchlevel 9 February 20, 2003
+
+ Functions:
+ * New function scan() works like @scan. Suggested by Viila at M*U*S*H.
+ Flags:
+ * New flag, MISTRUST, prevents an object from controlling anything
+ but itself.
+ Configuration:
+ * mush.cnf directives ansi_justify, globals, and global_connects have
+ been removed (they are now always on).
+ * New unconnected_idle_timeout directive in mush.cnf controls
+ timeouts for connections idle at the connect screen.
+ * New max_guests directive in mush.cnf can limit the number of
+ guests allowed to connect at once. Suggested by Sholevi at M*U*SH.
+ Minor Changes:
+ * New lflags search class takes a list of flag names.
+ * Improved connection failure messages.
+ * Somewhat more informative message when you @chan/gag,hide,mute
+ all channels at once. Suggested by Tanaku and Kevin at M*U*S*H.
+ * Began commenting files using doxygen.
+ * Internal code cleanup. Mostly converting some magic numbers to
+ #define'd symbols, and some #define'd symbols to enums for better
+ debugging and improved readability. Also some conversion of old
+ K&R style functions. [SW]
+ * sort() and the set functions understand all the same comparison
+ types as comp(). [SW]
+ * Case-sensitive comparison currently isn't always possible, depending
+ on the locale the mush is running on. Help files reflect this. [SW]
+ * @uptime shows the time of the last successful database save, and
+ the time of future events like saves, not just the time until them.
+ Suggested by Cheetah at M*U*S*H. [SW]
+ * Improvements to reporting of failed saves. [SW]
+ * Code cleanup. [SW]
+ * tel() now takes a third argument that makes it function like
+ @tel/silent. Suggested by Cheetah at M*U*S*H. [SW]
+ * @idescformat operates like @descformat for internal descriptions.
+ Suggested by Tanya at M*U*S*H.
+ Fixes:
+ * local_startup() was getting run earlier than in the past due to
+ changes in the startup sequence. This has been rectified, so
+ local_startup() again runs after all other initialization (and
+ just before all object startups are triggered). Report by
+ BladedThoth and grapenut at M*U*S*H.
+ * Improved testing for openssl libraries in Configure. The old
+ approach used to cause problems on systems with runtime-only
+ openssl installations without development libraries.
+ * help opaque mentions that opaque blocks look/outside. Suggested
+ by Cheetah at M*U*S*H.
+ * itext() and inum() now generate an error on a null argument,
+ regardless of tiny_math and null_eq_zero settings. Reported by
+ Intrevis at M*U*S*H.
+ * Another fix to the new matcher. Bug report by Kyieren at M*U*S*H.
+ * @flag/alias was broken. Fixed. Reported by Kevin at M*U*S*H.
+
+
Version 1.7.7 patchlevel 8 January 27, 2003
Minor Changes:
*** 1_7_7.154/game/txt/hlp/pennvers.hlp Mon, 27 Jan 2003 09:40:07 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1.1.5.1.4.1.1.1.1.1.1.1.1.1.5.1.1.1.3.1.1.1.3.1.1.1.54.1.10.1.2.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.7.1.1.1.1.1.2.1.1.1.4.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.8 600)
--- 1_7_7.222(w)/game/txt/hlp/pennvers.hlp Wed, 19 Feb 2003 13:20:09 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1.1.5.1.4.1.1.1.1.1.1.1.1.1.5.1.1.1.3.1.1.1.3.1.1.1.54.1.10.1.2.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.7.1.1.1.1.1.2.1.1.1.4.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2 600)
***************
*** 1,5 ****
& changes
! & 1.7.7p8
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.7p9
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,72 ----
A list of the patchlevels associated with each release can
be read in 'help patchlevels'.
+ Version 1.7.7 patchlevel 9 January 27, 2003
+
+ Functions:
+ * New function scan() works like @scan. Suggested by Viila at M*U*S*H.
+ Flags:
+ * New flag, MISTRUST, prevents an object from controlling anything
+ but itself.
+ Configuration:
+ * mush.cnf directives ansi_justify, globals, and global_connects have
+ been removed (they are now always on).
+ * New unconnected_idle_timeout directive in mush.cnf controls
+ timeouts for connections idle at the connect screen.
+ * New max_guests directive in mush.cnf can limit the number of
+ guests allowed to connect at once. Suggested by Sholevi at M*U*SH.
+ Minor Changes:
+ * New lflags search class takes a list of flag names.
+ * Improved connection failure messages.
+ * Somewhat more informative message when you @chan/gag,hide,mute
+ all channels at once. Suggested by Tanaku and Kevin at M*U*S*H.
+ * Began commenting files using doxygen.
+ * Internal code cleanup. Mostly converting some magic numbers to
+ #define'd symbols, and some #define'd symbols to enums for better
+ debugging and improved readability. Also some conversion of old
+ K&R style functions. [SW]
+ * sort() and the set functions understand all the same comparison
+ types as comp(). [SW]
+ * Case-sensitive comparison currently isn't always possible, depending
+ on the locale the mush is running on. Help files reflect this. [SW]
+ * @uptime shows the time of the last successful database save, and
+ the time of future events like saves, not just the time until them.
+ Suggested by Cheetah at M*U*S*H. [SW]
+ * Improvements to reporting of failed saves. [SW]
+ * Code cleanup. [SW]
+ * tel() now takes a third argument that makes it function like
+ @tel/silent. Suggested by Cheetah at M*U*S*H. [SW]
+ * @idescformat operates like @descformat for internal descriptions.
+ Suggested by Tanya at M*U*S*H.
+ Fixes:
+ * local_startup() was getting run earlier than in the past due to
+ changes in the startup sequence. This has been rectified, so
+ local_startup() again runs after all other initialization (and
+ just before all object startups are triggered). Report by
+ BladedThoth and grapenut at M*U*S*H.
+ * Improved testing for openssl libraries in Configure. The old
+ approach used to cause problems on systems with runtime-only
+ openssl installations without development libraries.
+ * help opaque mentions that opaque blocks look/outside. Suggested
+ by Cheetah at M*U*S*H.
+ * itext() and inum() now generate an error on a null argument,
+ regardless of tiny_math and null_eq_zero settings. Reported by
+ Intrevis at M*U*S*H.
+ * Another fix to the new matcher. Bug report by Kyieren at M*U*S*H.
+ * @flag/alias was broken. Fixed. Reported by Kevin at M*U*S*H.
+
+
+ & 1.7.7p8
Version 1.7.7 patchlevel 8 January 27, 2003
Minor Changes:
***************
*** 1397,1402 ****
--- 1453,1471 ----
* Indentation fixes [SW]
* Fixes up to 1.7.4p12 merged in.
+ & 1.7.6p7
+ Version 1.7.6 patchlevel 7 January 23, 2003
+
+ Fixes:
+ * Some sloppy coding in src/access.c could generate runtime
+ debugging exceptions. Reported by BladedThoth at M*U*S*H.
+ * wrap() could behave incorrectly when a line was exactly the length
+ of the wrap width and the total input size was larger than
+ any previously wrapped input. Reported by Liam at Firdeloth.
+ * Extra NUL characters were sent after telnet codes, which
+ confused Mudnet and maybe some clients. Patch by Alierak.
+
+
& 1.7.6p6
Version 1.7.6 patchlevel 6 January 23, 2003
***************
*** 3368,3381 ****
* @tel me=home or @tel home now works in all cases where 'home'
works. Report by Vedui.
-
- & 1.6.10p6
- Version 1.6.10 patchlevel 6 May 11, 1997
-
- Fixes:
- * inc() and dec() didn't work right with NULL_EQ_ZERO.
- Fixed. Report by Dennis DeMarco
-
& 1.7.1p3
Version 1.7.1 patchlevel 3 January 12, 1998
--- 3437,3442 ----
***************
*** 3468,3479 ****
* help @list fixed to show the correct @config switches.
Reported by Leo at ATS TrekMUSH
* @chan/gag now works correctly. Report by Vedui.
-
-
- & 1.7.0p11
- Version 1.7.0 patchlevel 11 November 18, 1997
-
- Fixes:
* Help for remove() updated. Reported by Vedui at Robotech.
* hasattr() didn't check if the invoker had permission to read
the attribute. Reported by Vedui at Robotech.
--- 3529,3534 ----
***************
*** 6045,6052 ****
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.7: 0, 1, 2, 3, 4, 5, 6, 7, 8
! 1.7.6: 0, 1, 2, 3, 4, 5, 6
1.7.5: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20
--- 6100,6107 ----
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.7: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
! 1.7.6: 0, 1, 2, 3, 4, 5, 6, 7
1.7.5: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20
***************
*** 6054,6061 ****
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.1: 0, 1, 2, 3
! 1.7.0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11
! 1.6.10: 0, 1, 2, 3, 4, 5, 6, 6
1.6.9: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
1.6.8: 0, 1
1.6.7: 0, 1, 2, 3, 4, 5, 6
--- 6109,6116 ----
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.1: 0, 1, 2, 3
! 1.7.0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
! 1.6.10: 0, 1, 2, 3, 4, 5, 6
1.6.9: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
1.6.8: 0, 1
1.6.7: 0, 1, 2, 3, 4, 5, 6
*** 1_7_7.154/game/txt/hlp/penntop.hlp Thu, 23 Jan 2003 10:16:40 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.12.1.4 600)
--- 1_7_7.222(w)/game/txt/hlp/penntop.hlp Tue, 04 Feb 2003 22:08:13 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.12.1.5 600)
***************
*** 320,338 ****
2. If V is Wizard, O must be Wizard or God
3. If O is a Wizard, O controls V
4. If V is Royalty, O must be Royalty, Wizard or God
! 5. If V and O are owned by the same player:
! 5a. If V is not TRUST, O controls V
! 5b. If V is TRUST, O must be TRUST or the player must be TRUST
! 6. If V is on a zone, and isn't a player and isn't TRUST,
O controls V if O passes the zone-lock of the zone.
! 7. If V is owned by a SHARED player, and V isn't a player and isn't set
TRUST, O controls V if O passes the zone-lock of the SHARED player.
! Step 6 is skipped if config(zone_control_zmp_only) is on.
There's also one special case: anyone can @link an unlinked exit
(at which point the exit is @chowned to the linker).
! See also: controls(), TRUST, ZONES, SHARED PLAYERS
& COSTS
These are usually:
--- 320,339 ----
2. If V is Wizard, O must be Wizard or God
3. If O is a Wizard, O controls V
4. If V is Royalty, O must be Royalty, Wizard or God
! 5. If O is MISTRUST, O must be V to control V
! 6. If V and O are owned by the same player:
! 6a. If V is not TRUST, O controls V
! 6b. If V is TRUST, O must be TRUST or the player must be TRUST
! 7. If V is on a zone, and isn't a player and isn't TRUST,
O controls V if O passes the zone-lock of the zone.
! 8. If V is owned by a SHARED player, and V isn't a player and isn't set
TRUST, O controls V if O passes the zone-lock of the SHARED player.
! Step 7 is skipped if config(zone_control_zmp_only) is on.
There's also one special case: anyone can @link an unlinked exit
(at which point the exit is @chowned to the linker).
! See also: controls(), TRUST, MISTRUST, ZONES, SHARED PLAYERS
& COSTS
These are usually:
*** 1_7_7.154/game/txt/hlp/pennfunc.hlp Thu, 09 Jan 2003 21:37:52 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.1.1.3.1.1.1.1.1.1.1.5 600)
--- 1_7_7.222(w)/game/txt/hlp/pennfunc.hlp Wed, 12 Feb 2003 15:05:21 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.1.1.3.1.1.1.1.1.1.1.8 600)
***************
*** 214,222 ****
isint() isnum() isword() localize() link()
list() lnum() mudname() null() objeval()
open() pcreate() r-function rand() restarts()
! s-function set() setq() setr() soundex()
! soundslike() tel() textfile() valid() version()
! wipe() @@()
& @@()
& NULL()
--- 214,222 ----
isint() isnum() isword() localize() link()
list() lnum() mudname() null() objeval()
open() pcreate() r-function rand() restarts()
! s-function scan() set() setq() setr()
! soundex() soundslike() tel() textfile() valid()
! version() wipe() @@()
& @@()
& NULL()
***************
*** 624,634 ****
comparison. By giving the optional <type>, the comparison can
be specified:
<type> Comparison
! A Case-sensitive lexicographic (default)
! I Case-insensitive lexicographic
D Dbrefs of valid objects
N Integers
F Floating point numbers
& CON()
con(<object>)
--- 624,637 ----
comparison. By giving the optional <type>, the comparison can
be specified:
<type> Comparison
! A Maybe case-sensitive lexicographic (default)
! I Always case-insensitive lexicographic
D Dbrefs of valid objects
N Integers
F Floating point numbers
+
+ Whether or not the a sort type is case-sensitive or not depends
+ on the particular mush and its environment.
& CON()
con(<object>)
***************
*** 2781,2810 ****
type @trigger <object>/ve, it would return "This is <myname>", but
if vf were @trigger me/ve, then triggering the vf makes the ve
return "This is <object>"
!
& SCRAMBLE()
scramble(<string>)
!
! This function scrambles a string, returning a random permutation of its
characters. For example, "[scramble(abcdef)]" might return "cfaedb".
Note that this function does not pay any attention to spaces or other
special characters; it will scramble these characters just like normal
characters.
!
& SECS()
secs()
!
This function takes no arguments, and returns the number of elapsed
seconds since midnight, January 1, 1970 UTC. UTC is the base time zone,
formerly GMT. This is a good way of synchronizing things that must
run at a certain time.
& SECURE()
secure(<string>)
!
This function returns <string> with all "dangerous" characters replaced
! by spaces. Dangerous characters are ( ) [ ] { } $ % , ^ and ;
! This can make output slightly ugly, but it's a good way of preventing
! other people from doing nasty things with your objects.
See also: ESCAPE()
--- 2784,2821 ----
type @trigger <object>/ve, it would return "This is <myname>", but
if vf were @trigger me/ve, then triggering the vf makes the ve
return "This is <object>"
!
! & SCAN()
! scan(<object>, <command>)
!
! This function works like @scan, and returns a space-separated list of
! dbref/attribute pairs containing $commands that would be triggered if
! <command> were run by <object>. You must control <object> or be
! See_All to use this function.
!
& SCRAMBLE()
scramble(<string>)
!
! This function scrambles a string, returning a random permutation of its
characters. For example, "[scramble(abcdef)]" might return "cfaedb".
Note that this function does not pay any attention to spaces or other
special characters; it will scramble these characters just like normal
characters.
!
& SECS()
secs()
!
This function takes no arguments, and returns the number of elapsed
seconds since midnight, January 1, 1970 UTC. UTC is the base time zone,
formerly GMT. This is a good way of synchronizing things that must
run at a certain time.
& SECURE()
secure(<string>)
!
This function returns <string> with all "dangerous" characters replaced
! by spaces. Dangerous characters are ( ) [ ] { } $ % , ^ and ; This
! can make output slightly ugly, but it's a good way of preventing other
! people from doing nasty things with your objects.
See also: ESCAPE()
***************
*** 2969,2978 ****
The following letters as a second argument specify a certain sort:
! 'a': Sort lexicographically.
! 'd': Sort dbrefs.
! 'n': Sort integer numbers.
! 'f': Sort decimal numbers.
The optional third argument gives the list's delimiter character.
If not present, <delimiter> defaults to a space.
--- 2980,2993 ----
The following letters as a second argument specify a certain sort:
! a: Sort lexicographically (Maybe case-sensitive).
! i: Sort lexicographically (Always case-insensitive).
! d: Sort dbrefs.
! n: Sort integer numbers.
! f: Sort decimal numbers.
!
! Whether or not the a sort type is case-sensitive or not depends
! on the particular mush and its environment.
The optional third argument gives the list's delimiter character.
If not present, <delimiter> defaults to a space.
***************
*** 3286,3295 ****
See HELP CTU() for more on the angle type.
& TEL()
! tel(<object>,<destination>)
This function will teleport <object> to <destination>, exactly as
! @tel <object>=<destination>.
See also: @tel
& TEXTFILE()
--- 3301,3311 ----
See HELP CTU() for more on the angle type.
& TEL()
! tel(<object>,<destination>[,<silent>])
This function will teleport <object> to <destination>, exactly as
! @tel <object>=<destination>. <silent> is an optional boolean that,
! if true, makes the function act like @tel/silent.
See also: @tel
& TEXTFILE()
*** 1_7_7.154/game/txt/hlp/pennflag.hlp Wed, 08 Jan 2003 16:41:25 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1.2.1.1.1.1.2.1.4.1.2.1.1 600)
--- 1_7_7.222(w)/game/txt/hlp/pennflag.hlp Tue, 04 Feb 2003 22:25:23 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1.2.1.1.1.1.2.1.4.1.2.1.4 600)
***************
*** 50,56 ****
a - Audible b - Debug c - Connected, Cloudy
d - Destroy_Ok e - Enter_Ok g - Gagged
h - Halt j - Jury_Ok l - Light
! m - Myopic n - No_Command o - On-Vacation
p - Puppet, Paranoid r - Royalty s - Suspect
t - Transparent u - Uninspected v - Verbose
w - No_Warn x - Terse ? - Unregistered
--- 50,56 ----
a - Audible b - Debug c - Connected, Cloudy
d - Destroy_Ok e - Enter_Ok g - Gagged
h - Halt j - Jury_Ok l - Light
! m - Myopic, Mistrust n - No_Command o - On-Vacation
p - Puppet, Paranoid r - Royalty s - Suspect
t - Transparent u - Uninspected v - Verbose
w - No_Warn x - Terse ? - Unregistered
***************
*** 405,410 ****
--- 405,429 ----
players are automatically considered to be MYOPIC.
See also: DBREF
+ & MISTRUST
+ Flag: MISTRUST (things, rooms, exits)
+
+ Mistrust prevents an object from controlling anything but
+ itself. This will also usually prevent it from examining anything else
+ non-VISUAL owned by the same player. It also prevents the object
+ from benefitting from its owner's no_pay, no_kill, and no_quota
+ powers, if any.
+
+ This flag can be used when you wish a single player to retain ownership
+ of objects that other players will use to run arbitrary commands,
+ and don't want those objects to be able to affect your objects.
+
+ (Note, however, that a Wizard object will ignore this flag, a see_all
+ object will still be able to examine anything, a no_pay object will
+ still have unlimited money, etc. This flag works best when no other
+ privileges are granted to the object.)
+
+ See also: control
& NOACCENTS
Flag: NOACCENTS (players)
***************
*** 494,503 ****
& OPAQUE
Flag: OPAQUE (all types)
! When set on yourself, it prevents other players from
! seeing what you are carrying in your inventory. This applies to
! everyone and everything, even wizards and royalty, or to stuff
! that you own. It works the same way on objects.
When set on an exit in a TRANSPARENT room, the exit is displayed
as if the room weren't TRANSPARENT.
--- 513,523 ----
& OPAQUE
Flag: OPAQUE (all types)
! When set on yourself, it prevents other players from seeing what you are
! carrying in your inventory. This applies to everyone and everything,
! even wizards and royalty, or to stuff that you own. It works the same
! way on objects. This flag also prevents people inside an object
! from using look/outside.
When set on an exit in a TRANSPARENT room, the exit is displayed
as if the room weren't TRANSPARENT.
*** 1_7_7.154/game/txt/hlp/penncmd.hlp Thu, 23 Jan 2003 10:17:00 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1.1.4.1.3 600)
--- 1_7_7.222(w)/game/txt/hlp/penncmd.hlp Sun, 09 Feb 2003 21:33:58 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1.1.4.1.5 600)
***************
*** 33,41 ****
@aahear @aclone @aconnect @adisconnect @amhear
@away @charges @cost @conformat @descformat
@ealias @exitformat @filter @forwardlist @haven
! @idle @infilter @inprefix @lalias @listen
! @nameformat @oxenter @oxleave @oxmove @oxtport
! @prefix @runout @sex @startup
See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES
& @-BUILDING
--- 33,41 ----
@aahear @aclone @aconnect @adisconnect @amhear
@away @charges @cost @conformat @descformat
@ealias @exitformat @filter @forwardlist @haven
! @idescformat @idle @infilter @inprefix @lalias
! @listen @nameformat @oxenter @oxleave @oxmove
! @oxtport @prefix @runout @sex @startup
See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES
& @-BUILDING
***************
*** 600,606 ****
This is useful for things like room parents that enforce a consistent
"look" for each room's @desc.
! See also: @exitformat, @nameformat, @conformat
& @nameaccent
@nameaccent <object> [=<accent template>]
--- 600,618 ----
This is useful for things like room parents that enforce a consistent
"look" for each room's @desc.
! See also: @exitformat, @nameformat, @conformat, @idescformat
! & @idescformat
! @idescformat <object> [=<text>]
!
! Replaces the usual description of the object when it is looked at from
! within by player-specified text. The evaluated IDESCRIBE attribute
! is passed as %0; the unevaluated IDESCRIBE can be acquired through
! v(IDESCRIBE).
!
! This is useful for things like object parents that enforce a consistent
! "look" for each object's @idesc.
!
! See also: @exitformat, @nameformat, @conformat, @descformat
& @nameaccent
@nameaccent <object> [=<accent template>]
***************
*** 1490,1496 ****
If [=<description>] or [=<message>] omitted, the attribute will be
reset.
! See also: enter, @enter, ENTER_OK, @describe, look
& @hook
@hook/<switch> <command>[=<object>, <attribute>]
--- 1502,1508 ----
If [=<description>] or [=<message>] omitted, the attribute will be
reset.
! See also: enter, @enter, ENTER_OK, @describe, look, @idescformat
& @hook
@hook/<switch> <command>[=<object>, <attribute>]
***************
*** 2596,2603 ****
If a <player> argument is supplied, only objects owned by that player
will be listed. If a <class> argument is supplied only objects of a
certain class will be listed. Possible <class>es include TYPE, NAME,
! ZONE, PARENT, EXITS, OBJECTS (Or THINGS), ROOMS, PLAYERS, FLAGS, POWERS,
! EVAL, EPLAYER, EROOM, EEXIT, and EOBJECT (Or ETHING).
If <class>=TYPE, possible <restriction>s include OBJECT (Or THING), ROOM,
EXIT, PLAYER. This shows all objects of the specified type.
--- 2608,2615 ----
If a <player> argument is supplied, only objects owned by that player
will be listed. If a <class> argument is supplied only objects of a
certain class will be listed. Possible <class>es include TYPE, NAME,
! ZONE, PARENT, EXITS, OBJECTS (Or THINGS), ROOMS, PLAYERS, FLAGS, LFLAGS,
! POWERS, EVAL, EPLAYER, EROOM, EEXIT, and EOBJECT (Or ETHING).
If <class>=TYPE, possible <restriction>s include OBJECT (Or THING), ROOM,
EXIT, PLAYER. This shows all objects of the specified type.
***************
*** 2611,2620 ****
'help @search2' for more.
& @search2
If <class>=EXITS, OBJECTS, ROOMS, or PLAYERS, only objects of that type
! If <class>=FLAGS, only objects with the list of flags specified by
! <restriction> will be listed. Flag names should be specified by single
! letters. Flag names are case-sensitive.
If <class>=POWERS, only objects with the given power are listed. Only
one power may be specified.
--- 2623,2657 ----
'help @search2' for more.
& @search2
If <class>=EXITS, OBJECTS, ROOMS, or PLAYERS, only objects of that type
+
+ If <class>=FLAGS or LFLAGS, only objects with the list of flags
+ specified by <restriction> will be listed. For FLAGS, flags to match
+ should be given as a string of single flag letters, with appropriate
+ case. For LFLAGS, flags to match should be given as a space-separated
+ list of flag names.
+
+ If <class>=POWERS, only objects with the given power are listed. Only
+ one power may be specified.
! If <class>=EVAL, only objects for which <restriction> evaluates to a
! true boolean value will be listed. The token '##' in <restriction>, which
! is a function, is replaced by each dbref sequentially. Classes EPLAYER,
! EROOM, EEXIT, and EOBJECT work like EVAL but are restricted to a single type.
!
! See "help @search3" for more.
! & @search3
! For the class TYPE=PLAYER, and for PLAYER=<player-name>, anyone may
! obtain information on any player. In all other cases, only wizards may
! obtain information about other players. This is computationally
! expensive, costing 100 pennies. It is generally faster than @find.
!
! Examples:
! @search flags=Wc <-- search for connected wizards.
! @search type=room <-- list all rooms owned by me.
! @search zone=#50 <-- list all objects belong to zone #50.
! @search Joe eval=1,100,200 <-- list objects from #100-#200 owned by Joe.
! @search eval=gt(money(##),10) <-- list all objects owned by me
! worth more than 10 coins.
If <class>=POWERS, only objects with the given power are listed. Only
one power may be specified.
*** 1_7_7.154/game/mushcnf.dst Thu, 23 Jan 2003 10:47:45 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1.1.1.1.6 600)
--- 1_7_7.222(w)/game/mushcnf.dst Sun, 16 Feb 2003 21:22:43 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1.1.1.1.9 600)
***************
*** 117,122 ****
--- 117,129 ----
# If you don't want a timeout, set it to 0.
idle_timeout 0
+ # Should there be a limit on how long connections at the connect screen
+ # (without an associated player) can be idle?
+ # If you want one, set unconnected_idle_timeout to the # number of MINUTES
+ # a connection may idle before getting disconnected.
+ # If you don't want a timeout, set it to 0.
+ unconnected_idle_timeout 5
+
# Should there be a limit on the number of logins the MUSH
# can accept? If your operating system has a limited number of
# file descriptors per process, you should set this to
***************
*** 124,129 ****
--- 131,146 ----
# set this to 0.
max_logins 120
+ # Should there be a limit on the number of concurrent guest logins the MUSH
+ # will allow? This option can take 3 values:
+ # 0 = no limit, any number of guests. Logins beyond the number of established
+ # guest characters will result in multiple players being logged into the
+ # same guest character.
+ # -1 = limited to the number of guests in the database. To allow more guests
+ # to log in, create more guest characters.
+ # Any other number = the number of guest connections allowed at once.
+ max_guests 0
+
# How much MUSH money do players get when they're created?
starting_money 150
***************
*** 404,419 ****
# passwords don't work, try changing this setting.
reverse_shs yes
- ###
- ### Master Room and @aconnect/disconnect
- ###
-
- # enable global exits and commands?
- globals yes
-
- # check zones and the master room for aconnect/adisconnect?
- global_connects yes
-
# trigger @aconnect/@adisconnect in a connecting player's location
# if the location is a room or thing?
room_connects no
--- 421,426 ----
***************
*** 534,543 ****
# show room/object/player names in bold for ansi players?
ansi_names yes
- # should ljust(), rjust(), center(), and table() ignore ansi when
- # figuring out how to justify a string?
- ansi_justify yes
-
# show exit lists with commas (a, b, and c)?
comma_exit_list no
--- 541,546 ----
*** 1_7_7.154/config_h.SH Fri, 06 Dec 2002 22:51:58 -0600 dunemush (pennmush/b/17_config_h.S 1.17.1.2.1.1.1.6 660)
--- 1_7_7.222(w)/config_h.SH Sun, 02 Feb 2003 10:39:04 -0600 dunemush (pennmush/b/17_config_h.S 1.17.1.2.1.1.1.7 660)
***************
*** 599,609 ****
*/
#$d_newstyle CAN_NEWSTYLE /**/
- /* HAS_OPENSSL:
- * Defined if openssl 0.9.6+ is available.
- */
- #$d_openssl HAS_OPENSSL /**/
-
/* HAS_RANDOM:
* Have we got random(), our first choice for number generation?
*/
--- 599,604 ----
***************
*** 818,822 ****
--- 813,822 ----
*/
#$i_stdarg I_STDARG /**/
+ /* HAS_OPENSSL:
+ * Defined if openssl 0.9.6+ is available.
+ */
+ #$d_openssl HAS_OPENSSL /**/
+
#endif
!GROK!THIS!
*** 1_7_7.154/src/wiz.c Tue, 14 Jan 2003 22:56:21 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1.1.2.1.1.1.2.2.2 660)
--- 1_7_7.222(w)/src/wiz.c Thu, 20 Feb 2003 09:33:05 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1.1.2.1.1.1.2.2.3 660)
***************
*** 1236,1242 ****
}
enum search_class { S_OWNER, S_TYPE, S_PARENT, S_ZONE, S_FLAG,
! S_POWER, S_EVAL, S_NAME
};
/* Does the actual searching */
--- 1236,1242 ----
}
enum search_class { S_OWNER, S_TYPE, S_PARENT, S_ZONE, S_FLAG,
! S_POWER, S_EVAL, S_NAME, S_LFLAG
};
/* Does the actual searching */
***************
*** 1369,1375 ****
/* Handle the checking later. */
sclass = S_FLAG;
if (!restriction || !*restriction) {
! notify(player, T("You must give a flag list."));
return -1;
}
} else {
--- 1369,1382 ----
/* Handle the checking later. */
sclass = S_FLAG;
if (!restriction || !*restriction) {
! notify(player, T("You must give a string of flag characters."));
! return -1;
! }
! } else if (string_prefix("lflags", class)) {
! /* Handle the checking later. */
! sclass = S_LFLAG;
! if (!restriction || !*restriction) {
! notify(player, T("You must give a list of flag names."));
return -1;
}
} else {
***************
*** 1529,1538 ****
}
break;
case S_FLAG:
for (n = low; n <= high; n++) {
if ((restrict_owner == ANY_OWNER || Owner(n) == restrict_owner)
&& (restrict_type == NOTYPE || Typeof(n) == restrict_type)
! && flaglist_check(player, n, restriction, 1)) {
if (nresults >= result_size) {
dbref *newresults;
result_size *= 2;
--- 1536,1547 ----
}
break;
case S_FLAG:
+ case S_LFLAG:
for (n = low; n <= high; n++) {
if ((restrict_owner == ANY_OWNER || Owner(n) == restrict_owner)
&& (restrict_type == NOTYPE || Typeof(n) == restrict_type)
! && ((sclass == S_FLAG) ? flaglist_check(player, n, restriction, 1)
! : flaglist_check_long(player, n, restriction, 1))) {
if (nresults >= result_size) {
dbref *newresults;
result_size *= 2;
*** 1_7_7.154/src/strutil.c Tue, 17 Dec 2002 00:18:29 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1.1.1.1.1.1.21.1.3 660)
--- 1_7_7.222(w)/src/strutil.c Thu, 20 Feb 2003 09:33:05 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1.1.1.1.1.1.21.1.4 660)
***************
*** 906,914 ****
if (!p)
return 0;
- if (!ANSI_JUSTIFY)
- return strlen(p);
-
while (*p) {
if (*p == ESC_CHAR) {
while ((*p) && (*p != 'm'))
--- 906,911 ----
*** 1_7_7.154/src/speech.c Tue, 14 Jan 2003 22:56:21 -0600 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.8.1.1.1.1.1.1.1.10.1.2.1.13.2.4.1.1.2.2 660)
--- 1_7_7.222(w)/src/speech.c Thu, 20 Feb 2003 09:33:05 -0600 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.8.1.1.1.1.1.1.1.10.1.2.1.13.2.4.1.1.2.3 660)
***************
*** 34,40 ****
const char *msg);
void do_one_remit(dbref player, const char *target, const char *msg, int noisy);
dbref na_zemit(dbref current, void *data);
! extern int WIN32_CDECL i_comp(const void *s1, const void *s2);
static const char *spname(dbref thing);
static const char *
--- 34,40 ----
const char *msg);
void do_one_remit(dbref player, const char *target, const char *msg, int noisy);
dbref na_zemit(dbref current, void *data);
! extern int i_comp(const void *s1, const void *s2);
static const char *spname(dbref thing);
static const char *
***************
*** 1194,1207 ****
void
do_remit(dbref player, char *arg1, const char *arg2, int flags)
{
! if (flags & 0x2) {
/* @remit/list */
char *current;
arg1 = trim_space_sep(arg1, ' ');
while ((current = split_token(&arg1, ' ')) != NULL)
! do_one_remit(player, current, arg2, flags & 0x1);
} else {
! do_one_remit(player, arg1, arg2, flags & 0x1);
}
}
--- 1194,1207 ----
void
do_remit(dbref player, char *arg1, const char *arg2, int flags)
{
! if (flags & PEMIT_LIST) {
/* @remit/list */
char *current;
arg1 = trim_space_sep(arg1, ' ');
while ((current = split_token(&arg1, ' ')) != NULL)
! do_one_remit(player, current, arg2, !(flags & PEMIT_SILENT));
} else {
! do_one_remit(player, arg1, arg2, !(flags & PEMIT_SILENT));
}
}
*** 1_7_7.154/src/predicat.c Fri, 17 Jan 2003 17:42:29 -0600 dunemush (pennmush/b/44_predicat.c 1.1.1.34.1.1.1.3.1.4.2.12 660)
--- 1_7_7.222(w)/src/predicat.c Thu, 20 Feb 2003 09:33:04 -0600 dunemush (pennmush/b/44_predicat.c 1.1.1.34.1.1.1.3.1.4.2.13 660)
***************
*** 333,338 ****
--- 333,339 ----
controls(dbref who, dbref what)
{
/* Wizard controls everything
+ * Untrusted objects control only themselves.
* owners control their stuff
* something which is in the enterlock of a ZMO controls non-INHERIT
* and non-player objects.
***************
*** 355,360 ****
--- 356,364 ----
if (Wizard(what) || (Hasprivs(what) && !Hasprivs(who)))
return 0;
+ if (Mistrust(who) && (who != what))
+ return 0;
+
if (Owns(who, what) && (!Inheritable(what) || Inheritable(who)))
return 1;
*** 1_7_7.154/src/player.c Wed, 22 Jan 2003 21:45:40 -0600 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4.1.6.1.5 660)
--- 1_7_7.222(w)/src/player.c Thu, 20 Feb 2003 09:33:04 -0600 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4.1.6.1.8 660)
***************
*** 104,117 ****
}
dbref
! connect_player(name, password, host, ip)
! const char *name;
! const char *password;
! const char *host;
! const char *ip;
{
dbref player;
! dbref i;
if (!name || !*name)
return NOTHING;
--- 104,117 ----
}
dbref
! connect_player(const char *name, const char *password, const char *host,
! const char *ip, char *errbuf)
{
dbref player;
!
! /* Default error */
! strcpy(errbuf,
! T("Either that player does not exist, or has a different password."));
if (!name || !*name)
return NOTHING;
***************
*** 132,137 ****
--- 132,138 ----
do_log(LT_CONN, 0, 0,
T("Connection to %s (GUEST) not allowed from %s (%s)"), name,
host, ip);
+ strcpy(errbuf, T("Guest connections not allowed."));
}
return NOTHING;
} else if (!Guest(player)
***************
*** 141,146 ****
--- 142,148 ----
do_log(LT_CONN, 0, 0,
T("Connection to %s (Non-GUEST) not allowed from %s (%s)"), name,
host, ip);
+ strcpy(errbuf, T("Player connections not allowed."));
}
return NOTHING;
}
***************
*** 154,170 ****
}
/* If it's a Guest player, and already connected, search the
* db for another Guest player to connect them to. */
! if (Guest(player) && Connected(player)) {
! /* Search db for an unconnected Guest */
! for (i = 0; i < db_top; i++) {
! if (IsPlayer(i) && !Hasprivs(i) && Guest(i) && !Connected(i)) {
! player = i;
! break;
! }
! }
! if (i == db_top) {
! /* We failed to find an unconnected Guest */
! do_log(LT_CONN, 0, 0, T("Multiple connection to Guest #%d"), player);
}
}
if (Suspect_Site(host, player) || Suspect_Site(ip, player)) {
--- 156,168 ----
}
/* If it's a Guest player, and already connected, search the
* db for another Guest player to connect them to. */
! if (Guest(player)) {
! /* Enforce guest limit */
! player = guest_to_connect(player);
! if (!GoodObject(player)) {
! do_log(LT_CONN, 0, 0, T("Can't connect to a guest (too many connected)"));
! strcpy(errbuf, T("Too many guests are connected now."));
! return NOTHING;
}
}
if (Suspect_Site(host, player) || Suspect_Site(ip, player)) {
*** 1_7_7.154/src/move.c Fri, 03 Jan 2003 00:35:08 -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.1.1.1.1.1.10 660)
--- 1_7_7.222(w)/src/move.c Thu, 20 Feb 2003 09:33:04 -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.1.1.1.1.1.12 660)
***************
*** 337,346 ****
void
! do_move(player, direction, type)
! dbref player;
! const char *direction;
! int type; /* type 0 is normal, type 1 is global, type 2 is zone */
{
dbref exit_m, loc, var_dest;
if (!strcasecmp(direction, "home")) {
--- 337,343 ----
void
! do_move(dbref player, const char *direction, enum move_type type)
{
dbref exit_m, loc, var_dest;
if (!strcasecmp(direction, "home")) {
***************
*** 364,374 ****
safe_tel(player, HOME, 0);
} else {
/* find the exit */
! if (DO_GLOBALS && (type == 1))
exit_m =
match_result(player, direction, TYPE_EXIT,
MAT_ENGLISH | MAT_EXIT | MAT_GLOBAL | MAT_CHECK_KEYS);
! else if (DO_GLOBALS && (type == 2))
exit_m =
match_result(player, direction, TYPE_EXIT,
MAT_ENGLISH | MAT_EXIT | MAT_REMOTES | MAT_CHECK_KEYS);
--- 361,371 ----
safe_tel(player, HOME, 0);
} else {
/* find the exit */
! if (type == MOVE_GLOBAL)
exit_m =
match_result(player, direction, TYPE_EXIT,
MAT_ENGLISH | MAT_EXIT | MAT_GLOBAL | MAT_CHECK_KEYS);
! else if (type == MOVE_ZONE)
exit_m =
match_result(player, direction, TYPE_EXIT,
MAT_ENGLISH | MAT_EXIT | MAT_REMOTES | MAT_CHECK_KEYS);
***************
*** 754,773 ****
notify(player, T("You can't do that IC!"));
return;
}
! if (DO_GLOBALS) {
! if (can_move(player, command))
! do_move(player, command, 0);
! else
! if ((Zone(Location(player)) != NOTHING) && remote_exit(player, command))
! do_move(player, command, 2);
! else if ((Location(player) != MASTER_ROOM)
! && global_exit(player, command))
! do_move(player, command, 1);
! else
! do_move(player, command, 0);
! } else {
do_move(player, command, 0);
- }
}
/* Routines for dealing with the follow commands */
--- 751,765 ----
notify(player, T("You can't do that IC!"));
return;
}
! if (can_move(player, command))
! do_move(player, command, 0);
! else if ((Zone(Location(player)) != NOTHING) && remote_exit(player, command))
! do_move(player, command, 2);
! else if ((Location(player) != MASTER_ROOM)
! && global_exit(player, command))
! do_move(player, command, 1);
! else
do_move(player, command, 0);
}
/* Routines for dealing with the follow commands */
*** 1_7_7.154/src/match.c Thu, 23 Jan 2003 09:34:35 -0600 dunemush (pennmush/c/2_match.c 1.24.1.1.1.4.1.1.1.1.1.1.1.1.1.1.1.14 660)
--- 1_7_7.222(w)/src/match.c Thu, 20 Feb 2003 09:33:04 -0600 dunemush (pennmush/c/2_match.c 1.24.1.1.1.4.1.1.1.1.1.1.1.1.1.1.1.16 660)
***************
*** 218,224 ****
RUN_MATCH_FUNC(match_possession, NOTHING);
if (flags & MAT_NEIGHBOR)
RUN_MATCH_FUNC(match_neighbor, NOTHING);
! if (DO_GLOBALS && (flags & MAT_REMOTE_CONTENTS))
RUN_MATCH_FUNC(match_possession, NOTHING);
if (flags & MAT_EXIT)
RUN_MATCH_FUNC(match_exit, NOTHING);
--- 218,224 ----
RUN_MATCH_FUNC(match_possession, NOTHING);
if (flags & MAT_NEIGHBOR)
RUN_MATCH_FUNC(match_neighbor, NOTHING);
! if (flags & MAT_REMOTE_CONTENTS)
RUN_MATCH_FUNC(match_possession, NOTHING);
if (flags & MAT_EXIT)
RUN_MATCH_FUNC(match_exit, NOTHING);
***************
*** 233,240 ****
/* nth exact match? */
if (!exact_matches_to_go)
match = exact_match;
! else
match = last_match; /* nth exact-or-partial match, or nothing? */
} else if (GoodObject(exact_match)) {
/* How many exact matches? */
if (exact_matches_to_go == -1)
--- 233,244 ----
/* nth exact match? */
if (!exact_matches_to_go)
match = exact_match;
! else if (GoodObject(last_match))
match = last_match; /* nth exact-or-partial match, or nothing? */
+ /* This shouldn't happen, but just in case we have a valid match,
+ * and an invalid last_match in the matchnum case, fall through and
+ * use the match.
+ */
} else if (GoodObject(exact_match)) {
/* How many exact matches? */
if (exact_matches_to_go == -1)
***************
*** 503,508 ****
--- 507,515 ----
match_type = MATCH_PARTIAL;
}
}
+ /* If we've made the nth partial match in this round, there's none to go */
+ if (nth_match && *matches_to_go < 0)
+ *matches_to_go = 0;
return match_type;
}
***************
*** 510,526 ****
{
dbref loc;
loc = (IsRoom(who)) ? who : Location(who);
! if (DO_GLOBALS) {
! if (flags & MAT_REMOTES) {
! if (GoodObject(loc))
! return match_exit_internal(who, name, type, flags, Zone(loc),
! match, exact_matches_to_go, matches_to_go);
! else
! return NOTHING;
! } else if (flags & MAT_GLOBAL)
! return match_exit_internal(who, name, type, flags, MASTER_ROOM,
match, exact_matches_to_go, matches_to_go);
! }
return match_exit_internal(who, name, type, flags, loc,
match, exact_matches_to_go, matches_to_go);
}
--- 517,531 ----
{
dbref loc;
loc = (IsRoom(who)) ? who : Location(who);
! if (flags & MAT_REMOTES) {
! if (GoodObject(loc))
! return match_exit_internal(who, name, type, flags, Zone(loc),
match, exact_matches_to_go, matches_to_go);
! else
! return NOTHING;
! } else if (flags & MAT_GLOBAL)
! return match_exit_internal(who, name, type, flags, MASTER_ROOM,
! match, exact_matches_to_go, matches_to_go);
return match_exit_internal(who, name, type, flags, loc,
match, exact_matches_to_go, matches_to_go);
}
***************
*** 562,567 ****
--- 567,575 ----
}
}
}
+ /* If we've made the nth partial match in this round, there's none to go */
+ if (nth_match && *matches_to_go < 0)
+ *matches_to_go = 0;
return match_type;
}
*** 1_7_7.154/src/look.c Thu, 26 Dec 2002 14:28:58 -0600 dunemush (pennmush/c/4_look.c 1.21.1.2.1.9.1.1.1.3 660)
--- 1_7_7.222(w)/src/look.c Thu, 20 Feb 2003 09:33:04 -0600 dunemush (pennmush/c/4_look.c 1.21.1.2.1.9.1.1.1.5 660)
***************
*** 34,40 ****
static void look_contents(dbref player, dbref loc, const char *contents_name);
static void look_atrs(dbref player, dbref thing, const char *mstr, int all);
static void look_simple(dbref player, dbref thing);
! static void look_description(dbref player, dbref thing, char *def);
static int decompile_helper
(dbref player, dbref thing, char const *pattern, ATTR *atr, void *args);
static int look_helper
--- 34,41 ----
static void look_contents(dbref player, dbref loc, const char *contents_name);
static void look_atrs(dbref player, dbref thing, const char *mstr, int all);
static void look_simple(dbref player, dbref thing);
! static void look_description(dbref player, dbref thing, char *def,
! const char *descname, const char *descformatname);
static int decompile_helper
(dbref player, dbref thing, char const *pattern, ATTR *atr, void *args);
static int look_helper
***************
*** 49,58 ****
void decompile_locks(dbref player, dbref thing, const char *name, int skipdef);
static void
! look_exits(player, loc, exit_name)
! dbref player;
! dbref loc;
! const char *exit_name;
{
dbref thing;
char *tbuf1, *tbuf2, *nbuf;
--- 50,56 ----
void decompile_locks(dbref player, dbref thing, const char *name, int skipdef);
static void
! look_exits(dbref player, dbref loc, const char *exit_name)
{
dbref thing;
char *tbuf1, *tbuf2, *nbuf;
***************
*** 230,239 ****
static void
! look_contents(player, loc, contents_name)
! dbref player;
! dbref loc;
! const char *contents_name;
{
dbref thing;
dbref can_see_loc;
--- 228,234 ----
static void
! look_contents(dbref player, dbref loc, const char *contents_name)
{
dbref thing;
dbref can_see_loc;
***************
*** 389,397 ****
}
static void
! look_simple(player, thing)
! dbref player;
! dbref thing;
{
int flag = 0;
PUEBLOBUFF;
--- 384,390 ----
}
static void
! look_simple(dbref player, dbref thing)
{
int flag = 0;
PUEBLOBUFF;
***************
*** 400,406 ****
tag_wrap("FONT", "SIZE=+2", unparse_object_myopic(player, thing));
PEND;
notify(player, pbuff);
! look_description(player, thing, T("You see nothing special."));
did_it(player, thing, NULL, NULL, "ODESCRIBE", NULL, "ADESCRIBE", NOTHING);
if (IsExit(thing) && Transparented(thing)) {
if (Cloudy(thing))
--- 393,400 ----
tag_wrap("FONT", "SIZE=+2", unparse_object_myopic(player, thing));
PEND;
notify(player, pbuff);
! look_description(player, thing, T("You see nothing special."), "DESCRIBE",
! "DESCFORMAT");
did_it(player, thing, NULL, NULL, "ODESCRIBE", NULL, "ADESCRIBE", NOTHING);
if (IsExit(thing) && Transparented(thing)) {
if (Cloudy(thing))
***************
*** 418,427 ****
}
void
! look_room(player, loc, flag)
! dbref player;
! dbref loc;
! int flag;
{
/* look at a room. Flag value of this function:
* 0 -- normal look, caused by "look" command.
--- 412,418 ----
}
void
! look_room(dbref player, dbref loc, enum look_type style)
{
/* look at a room. Flag value of this function:
* 0 -- normal look, caused by "look" command.
***************
*** 438,447 ****
return;
/* don't give the unparse if looking through Transparent exit */
! if ((flag == 0) || (flag == 2)) {
PUSE;
tag("XCH_PAGE CLEAR=\"LINKS IMAGES PLUGINS\"");
! if (SUPPORT_PUEBLO && flag == 2) {
a = atr_get(loc, "VRML_URL");
if (a) {
tag(tprintf("IMG XCH_GRAPH=LOAD HREF=\"%s\"", uncompress(a->value)));
--- 429,438 ----
return;
/* don't give the unparse if looking through Transparent exit */
! if (style == LOOK_NORMAL || style == LOOK_AUTO) {
PUSE;
tag("XCH_PAGE CLEAR=\"LINKS IMAGES PLUGINS\"");
! if (SUPPORT_PUEBLO && style == LOOK_AUTO) {
a = atr_get(loc, "VRML_URL");
if (a) {
tag(tprintf("IMG XCH_GRAPH=LOAD HREF=\"%s\"", uncompress(a->value)));
***************
*** 455,489 ****
notify_by(loc, player, pbuff);
}
if (!IsRoom(loc)) {
! if ((flag != 2) || !Terse(player)) {
! if (atr_get(loc, "IDESCRIBE"))
! did_it(player, loc, "IDESCRIBE", NULL, "OIDESCRIBE", NULL,
"AIDESCRIBE", NOTHING);
! else
! look_description(player, loc, NULL);
}
}
/* tell him the description */
else {
! if ((flag == 0) || (flag == 2)) {
! if ((flag == 0) || !Terse(player)) {
! look_description(player, loc, NULL);
did_it(player, loc, NULL, NULL, "ODESCRIBE", NULL,
"ADESCRIBE", NOTHING);
} else
did_it(player, loc, NULL, NULL, "ODESCRIBE", NULL, "ADESCRIBE",
NOTHING);
! } else if (flag != 4)
! look_description(player, loc, NULL);
}
/* tell him the appropriate messages if he has the key */
! if (IsRoom(loc) && ((flag == 0) || (flag == 2))) {
! if ((flag == 2) && Terse(player)) {
if (could_doit(player, loc))
did_it(player, loc, NULL, NULL, "OSUCCESS", NULL, "ASUCCESS", NOTHING);
else
did_it(player, loc, NULL, NULL, "OFAILURE", NULL, "AFAILURE", NOTHING);
! } else if ((flag != 4) && could_doit(player, loc))
did_it(player, loc, "SUCCESS", NULL, "OSUCCESS", NULL, "ASUCCESS",
NOTHING);
else
--- 446,481 ----
notify_by(loc, player, pbuff);
}
if (!IsRoom(loc)) {
! if (style != LOOK_AUTO || !Terse(player)) {
! if (atr_get(loc, "IDESCRIBE")) {
! look_description(player, loc, NULL, "IDESCRIBE", "IDESCFORMAT");
! did_it(player, loc, NULL, NULL, "OIDESCRIBE", NULL,
"AIDESCRIBE", NOTHING);
! } else
! look_description(player, loc, NULL, "DESCRIBE", "DESCFORMAT");
}
}
/* tell him the description */
else {
! if (style == LOOK_NORMAL || style == LOOK_AUTO) {
! if (style == LOOK_NORMAL || !Terse(player)) {
! look_description(player, loc, NULL, "DESCRIBE", "DESCFORMAT");
did_it(player, loc, NULL, NULL, "ODESCRIBE", NULL,
"ADESCRIBE", NOTHING);
} else
did_it(player, loc, NULL, NULL, "ODESCRIBE", NULL, "ADESCRIBE",
NOTHING);
! } else if (style != LOOK_CLOUDY)
! look_description(player, loc, NULL, "DESCRIBE", "DESCFORMAT");
}
/* tell him the appropriate messages if he has the key */
! if (IsRoom(loc) && (style == LOOK_NORMAL || style == LOOK_AUTO)) {
! if (style == LOOK_AUTO && Terse(player)) {
if (could_doit(player, loc))
did_it(player, loc, NULL, NULL, "OSUCCESS", NULL, "ASUCCESS", NOTHING);
else
did_it(player, loc, NULL, NULL, "OFAILURE", NULL, "AFAILURE", NOTHING);
! } else if (could_doit(player, loc))
did_it(player, loc, "SUCCESS", NULL, "OSUCCESS", NULL, "ASUCCESS",
NOTHING);
else
***************
*** 491,505 ****
NOTHING);
}
/* tell him the contents */
! if (flag != 3)
look_contents(player, loc, T("Contents:"));
! if ((flag == 0) || (flag == 2)) {
look_exits(player, loc, T("Obvious exits:"));
}
}
static void
! look_description(dbref player, dbref thing, char *def)
{
/* Show thing's description to player, obeying DESCFORMAT if set */
ATTR *a, *f;
--- 483,498 ----
NOTHING);
}
/* tell him the contents */
! if (style != LOOK_CLOUDYTRANS)
look_contents(player, loc, T("Contents:"));
! if (style == LOOK_NORMAL || style == LOOK_AUTO) {
look_exits(player, loc, T("Obvious exits:"));
}
}
static void
! look_description(dbref player, dbref thing, char *def, const char *descname,
! const char *descformatname)
{
/* Show thing's description to player, obeying DESCFORMAT if set */
ATTR *a, *f;
***************
*** 513,519 ****
return;
save_global_regs("look_desc_save", preserveq);
save_global_env("look_desc_save", preserves);
! a = atr_get(thing, "DESCRIBE");
if (a) {
/* We have a DESCRIBE, evaluate it into buff */
asave = safe_uncompress(a->value);
--- 506,512 ----
return;
save_global_regs("look_desc_save", preserveq);
save_global_env("look_desc_save", preserves);
! a = atr_get(thing, descname);
if (a) {
/* We have a DESCRIBE, evaluate it into buff */
asave = safe_uncompress(a->value);
***************
*** 524,530 ****
*bp = '\0';
free((Malloc_t) asave);
}
! f = atr_get(thing, "DESCFORMAT");
if (f) {
/* We have a DESCFORMAT, evaluate it into fbuff and use it */
/* If we have a DESCRIBE, pass the evaluated version as %0 */
--- 517,523 ----
*bp = '\0';
free((Malloc_t) asave);
}
! f = atr_get(thing, descformatname);
if (f) {
/* We have a DESCFORMAT, evaluate it into fbuff and use it */
/* If we have a DESCRIBE, pass the evaluated version as %0 */
***************
*** 549,568 ****
}
void
! do_look_around(player)
! dbref player;
{
dbref loc;
if ((loc = Location(player)) == NOTHING)
return;
! look_room(player, loc, 2); /* auto-look. Obey TERSE. */
}
void
! do_look_at(player, name, key)
! dbref player;
! const char *name;
! int key; /* 0 is normal, 1 is "outside" */
{
dbref thing;
dbref loc;
--- 542,558 ----
}
void
! do_look_around(dbref player)
{
dbref loc;
if ((loc = Location(player)) == NOTHING)
return;
! look_room(player, loc, LOOK_AUTO); /* auto-look. Obey TERSE. */
}
void
! do_look_at(dbref player, const char *name, int key)
! /* 0 is normal, 1 is "outside" */
{
dbref thing;
dbref loc;
***************
*** 583,589 ****
/* look at location of location */
if (*name == '\0') {
! look_room(player, loc, 0);
return;
}
thing =
--- 573,579 ----
/* look at location of location */
if (*name == '\0') {
! look_room(player, loc, LOOK_NORMAL);
return;
}
thing =
***************
*** 598,604 ****
}
} else { /* regular look */
if (*name == '\0') {
! look_room(player, Location(player), 0);
return;
}
/* look at a thing in location */
--- 588,594 ----
}
} else { /* regular look */
if (*name == '\0') {
! look_room(player, Location(player), LOOK_NORMAL);
return;
}
/* look at a thing in location */
***************
*** 628,639 ****
* while inside an object.
*/
if (Location(player) == thing) {
! look_room(player, thing, 0);
return;
}
switch (Typeof(thing)) {
case TYPE_ROOM:
! look_room(player, thing, 0);
break;
case TYPE_THING:
case TYPE_PLAYER:
--- 618,629 ----
* while inside an object.
*/
if (Location(player) == thing) {
! look_room(player, thing, LOOK_NORMAL);
return;
}
switch (Typeof(thing)) {
case TYPE_ROOM:
! look_room(player, thing, LOOK_NORMAL);
break;
case TYPE_THING:
case TYPE_PLAYER:
***************
*** 650,657 ****
#ifdef CHAT_SYSTEM
static const char *
! channel_description(player)
! dbref player;
{
static char buf[BUFFER_LEN];
char *bp;
--- 640,646 ----
#ifdef CHAT_SYSTEM
static const char *
! channel_description(dbref player)
{
static char buf[BUFFER_LEN];
char *bp;
***************
*** 672,682 ****
#endif
void
! do_examine(player, name, brief, all)
! dbref player;
! const char *name;
! int brief;
! int all;
{
dbref thing;
ATTR *a;
--- 661,667 ----
#endif
void
! do_examine(dbref player, const char *name, int brief, int all)
{
dbref thing;
ATTR *a;
***************
*** 889,896 ****
}
void
! do_score(player)
! dbref player;
{
notify_format(player,
--- 874,880 ----
}
void
! do_score(dbref player)
{
notify_format(player,
***************
*** 899,906 ****
}
void
! do_inventory(player)
! dbref player;
{
dbref thing;
if ((thing = Contents(player)) == NOTHING) {
--- 883,889 ----
}
void
! do_inventory(dbref player)
{
dbref thing;
if ((thing = Contents(player)) == NOTHING) {
***************
*** 916,925 ****
}
void
! do_find(player, name, argv)
! dbref player;
! const char *name;
! char *argv[];
{
dbref i;
int count = 0;
--- 899,905 ----
}
void
! do_find(dbref player, const char *name, char *argv[])
{
dbref i;
int count = 0;
***************
*** 965,973 ****
/* check the current location for bugs */
void
! do_sweep(player, arg1)
! dbref player;
! const char *arg1;
{
char tbuf1[BUFFER_LEN];
char *p;
--- 945,951 ----
/* check the current location for bugs */
void
! do_sweep(dbref player, const char *arg1)
{
char tbuf1[BUFFER_LEN];
char *p;
***************
*** 1087,1095 ****
}
void
! do_whereis(player, name)
! dbref player;
! const char *name;
{
dbref thing;
if (*name == '\0') {
--- 1065,1071 ----
}
void
! do_whereis(dbref player, const char *name)
{
dbref thing;
if (*name == '\0') {
***************
*** 1115,1125 ****
}
void
! do_entrances(player, where, argv, val)
! dbref player;
! const char *where;
! char *argv[];
! int val; /* 0 all, 1 exits, 2 things, 3 players, 4 rooms */
{
dbref place;
dbref counter;
--- 1091,1097 ----
}
void
! do_entrances(dbref player, const char *where, char *argv[], enum ent_type val)
{
dbref place;
dbref counter;
***************
*** 1128,1133 ****
--- 1100,1107 ----
int bot = 0;
int top = db_top;
+ exc = tc = pc = rc = exd = td = pd = rd = 0;
+
if (!where || !*where) {
if ((place = Location(player)) == NOTHING)
return;
***************
*** 1148,1175 ****
}
/* figure out what we're looking for */
switch (val) {
! case 1:
exd = 1;
td = pd = rd = 0;
break;
! case 2:
td = 1;
exd = pd = rd = 0;
break;
! case 3:
pd = 1;
exd = td = rd = 0;
break;
! case 4:
rd = 1;
exd = td = pd = 0;
break;
! default:
exd = td = pd = rd = 1;
}
- exc = tc = pc = rc = 0;
-
/* determine range */
if (argv[1] && *argv[1])
bot = atoi(argv[1]);
--- 1122,1147 ----
}
/* figure out what we're looking for */
switch (val) {
! case ENT_EXITS:
exd = 1;
td = pd = rd = 0;
break;
! case ENT_THINGS:
td = 1;
exd = pd = rd = 0;
break;
! case ENT_PLAYERS:
pd = 1;
exd = td = rd = 0;
break;
! case ENT_ROOMS:
rd = 1;
exd = td = pd = 0;
break;
! case ENT_ALL:
exd = td = pd = rd = 1;
}
/* determine range */
if (argv[1] && *argv[1])
bot = atoi(argv[1]);
***************
*** 1240,1251 ****
};
static int
! decompile_helper(player, thing, pattern, atr, args)
! dbref player;
! dbref thing __attribute__ ((__unused__));
! char const *pattern __attribute__ ((__unused__));
! ATTR *atr;
! void *args;
{
struct dh_args *dh = args;
ATTR *ptr;
--- 1212,1220 ----
};
static int
! decompile_helper(dbref player, dbref thing
! __attribute__ ((__unused__)), const char *pattern
! __attribute__ ((__unused__)), ATTR *atr, void *args)
{
struct dh_args *dh = args;
ATTR *ptr;
***************
*** 1291,1303 ****
}
void
! decompile_atrs(player, thing, name, pattern, prefix, skipdef)
! dbref player;
! dbref thing;
! const char *name;
! const char *pattern;
! const char *prefix;
! int skipdef;
{
struct dh_args dh;
dh.prefix = prefix;
--- 1260,1267 ----
}
void
! decompile_atrs(dbref player, dbref thing, const char *name, const char *pattern,
! const char *prefix, int skipdef)
{
struct dh_args dh;
dh.prefix = prefix;
***************
*** 1338,1348 ****
}
void
! do_decompile(player, name, dbflag, skipdef)
! dbref player;
! const char *name;
! int dbflag; /* 0 = normal, 1 = db, 2 = tf, 3=flag,4=attr */
! int skipdef;
{
dbref thing;
const char *object = NULL;
--- 1302,1308 ----
}
void
! do_decompile(dbref player, const char *name, enum dec_type dbflag, int skipdef)
{
dbref thing;
const char *object = NULL;
***************
*** 1373,1382 ****
/* if we have an attribute arg specified, wild match on it */
if (attrib && *attrib) {
switch (dbflag) {
! case 1:
decompile_atrs(player, thing, dbnum, attrib, "", skipdef);
break;
! case 2:
if (((a = atr_get_noparent(player, "TFPREFIX")) != NULL) &&
AL_STR(a) && *AL_STR(a)) {
decompile_atrs(player, thing, dbnum, attrib, uncompress(AL_STR(a)),
--- 1333,1342 ----
/* if we have an attribute arg specified, wild match on it */
if (attrib && *attrib) {
switch (dbflag) {
! case DEC_DB:
decompile_atrs(player, thing, dbnum, attrib, "", skipdef);
break;
! case DEC_TF:
if (((a = atr_get_noparent(player, "TFPREFIX")) != NULL) &&
AL_STR(a) && *AL_STR(a)) {
decompile_atrs(player, thing, dbnum, attrib, uncompress(AL_STR(a)),
***************
*** 1403,1443 ****
case TYPE_PLAYER:
if (!strcasecmp(name, "me"))
object = "me";
! else if (dbflag == 1)
object = dbnum;
else
object = Name(thing);
break;
case TYPE_THING:
! if (dbflag == 1) {
object = dbnum;
break;
} else
object = Name(thing);
! if (dbflag != 4)
notify_format(player, "@create %s", object);
break;
case TYPE_ROOM:
! if (dbflag == 1) {
object = dbnum;
break;
} else
object = "here";
! if (dbflag != 4)
notify_format(player, "@dig/teleport %s", Name(thing));
break;
case TYPE_EXIT:
! if (dbflag == 1) {
object = dbnum;
} else {
object = shortname(thing);
! if (dbflag != 4)
notify_format(player, "@open %s", Name(thing));
}
break;
}
! if (dbflag != 4) {
if (Mobile(thing)) {
if (GoodObject(Home(thing)))
notify_format(player, "@link %s = #%d", object, Home(thing));
--- 1363,1403 ----
case TYPE_PLAYER:
if (!strcasecmp(name, "me"))
object = "me";
! else if (dbflag == DEC_DB)
object = dbnum;
else
object = Name(thing);
break;
case TYPE_THING:
! if (dbflag == DEC_DB) {
object = dbnum;
break;
} else
object = Name(thing);
! if (dbflag != DEC_ATTR)
notify_format(player, "@create %s", object);
break;
case TYPE_ROOM:
! if (dbflag == DEC_DB) {
object = dbnum;
break;
} else
object = "here";
! if (dbflag != DEC_ATTR)
notify_format(player, "@dig/teleport %s", Name(thing));
break;
case TYPE_EXIT:
! if (dbflag == DEC_DB) {
object = dbnum;
} else {
object = shortname(thing);
! if (dbflag != DEC_ATTR)
notify_format(player, "@open %s", Name(thing));
}
break;
}
! if (dbflag != DEC_ATTR) {
if (Mobile(thing)) {
if (GoodObject(Home(thing)))
notify_format(player, "@link %s = #%d", object, Home(thing));
***************
*** 1461,1467 ****
decompile_flags(player, thing, object);
decompile_powers(player, thing, object);
}
! if (dbflag != 3) {
decompile_atrs(player, thing, object, "*", "", skipdef);
}
}
--- 1421,1427 ----
decompile_flags(player, thing, object);
decompile_powers(player, thing, object);
}
! if (dbflag != DEC_FLAG) {
decompile_atrs(player, thing, object, "*", "", skipdef);
}
}
*** 1_7_7.154/src/info_slave.c Sun, 08 Dec 2002 22:36:08 -0600 dunemush (pennmush/c/7_info_slave 1.9.1.4.1.2 660)
--- 1_7_7.222(w)/src/info_slave.c Thu, 20 Feb 2003 09:33:04 -0600 dunemush (pennmush/c/7_info_slave 1.9.1.4.1.3 660)
***************
*** 100,106 ****
if (argc < 2) {
fprintf(stderr, "info_slave needs a port number!\n");
! exit(1);
}
port = atoi(argv[1]);
use_ident = 1;
--- 100,106 ----
if (argc < 2) {
fprintf(stderr, "info_slave needs a port number!\n");
! return EXIT_FAILURE;
}
port = atoi(argv[1]);
use_ident = 1;
***************
*** 124,130 ****
mush = make_socket_conn("127.0.0.1", NULL, 0, port, NULL);
if (mush == -1) { /* Couldn't connect */
fprintf(stderr, "Couldn't connect to mush!\n");
! exit(1);
}
#endif
/* yes, we are _blocking_ */
--- 124,130 ----
mush = make_socket_conn("127.0.0.1", NULL, 0, port, NULL);
if (mush == -1) { /* Couldn't connect */
fprintf(stderr, "Couldn't connect to mush!\n");
! return EXIT_FAILURE;
}
#endif
/* yes, we are _blocking_ */
***************
*** 136,142 ****
len = read(mush, &rlen, sizeof rlen);
if (len < (int) sizeof rlen) {
perror("info_slave reading remote size");
! exit(1);
}
/* Now the first address and len of the second. */
dat[0].iov_base = (char *) &remote.data;
--- 136,142 ----
len = read(mush, &rlen, sizeof rlen);
if (len < (int) sizeof rlen) {
perror("info_slave reading remote size");
! return EXIT_FAILURE;
}
/* Now the first address and len of the second. */
dat[0].iov_base = (char *) &remote.data;
***************
*** 147,153 ****
len = readv(mush, dat, 2);
if (len < size) {
perror("info_slave reading remote sockaddr and local size");
! exit(1);
}
/* Now the second address and fd. */
--- 147,153 ----
len = readv(mush, dat, 2);
if (len < size) {
perror("info_slave reading remote sockaddr and local size");
! return EXIT_FAILURE;
}
/* Now the second address and fd. */
***************
*** 159,165 ****
len = readv(mush, dat, 2);
if (len < size) {
perror("info_slave reading local sockaddr and fd");
! exit(1);
}
if (!fd)
--- 159,165 ----
len = readv(mush, dat, 2);
if (len < size) {
perror("info_slave reading local sockaddr and fd");
! return EXIT_FAILURE;
}
if (!fd)
***************
*** 207,213 ****
size = dat[0].iov_len + dat[1].iov_len + dat[2].iov_len;
if (len < size) {
perror("info_slave write packet");
! exit(1);
}
}
}
--- 207,214 ----
size = dat[0].iov_len + dat[1].iov_len + dat[2].iov_len;
if (len < size) {
perror("info_slave write packet");
! return EXIT_FAILURE;
}
}
+ return EXIT_SUCCESS;
}
*** 1_7_7.154/src/game.c Sat, 25 Jan 2003 23:35:07 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1.2.1.1.1.2.1.1.4.1.1.1.1.1.1.1.1.1.1.2.1.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.5.1.3.1.2.1.2.1.1.1.2.1.2 660)
--- 1_7_7.222(w)/src/game.c Thu, 20 Feb 2003 09:33:04 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1.2.1.1.1.2.1.1.4.1.1.1.1.1.1.1.1.1.1.2.1.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.5.1.3.1.2.1.2.1.1.1.2.1.16 660)
***************
*** 88,93 ****
--- 88,94 ----
char dumpfile[200];
time_t start_time; /* MUSH start time (since process exec'd) */
time_t first_start_time = 0; /* MUSH start time (since last shutdown) */
+ time_t last_dump_time = 0; /* Time of last successful db save */
int reboot_count = 0;
static int epoch = 0;
int reserved;
***************
*** 102,108 ****
int paranoid_checkpt = 0; /* write out an okay message every x objs */
extern long indb_flags;
extern void conf_default_set(void);
! static void dump_database_internal(void);
static FILE *db_open(const char *filename);
static FILE *db_open_write(const char *filename);
static void db_close(FILE * f);
--- 103,109 ----
int paranoid_checkpt = 0; /* write out an okay message every x objs */
extern long indb_flags;
extern void conf_default_set(void);
! static int dump_database_internal(void);
static FILE *db_open(const char *filename);
static FILE *db_open_write(const char *filename);
static void db_close(FILE * f);
***************
*** 137,173 ****
dbref orator = NOTHING;
- #ifdef WIN32
- void Win32stats(dbref player);
- #endif
-
#ifdef COMP_STATS
extern void compress_stats(long *entries,
long *mem_used,
long *total_uncompressed, long *total_compressed);
#endif
- #ifdef WIN32
- void
- Win32stats(dbref player)
- { /* written by NJG */
- MEMORYSTATUS memstat;
- double mem;
- memstat.dwLength = sizeof(memstat);
- GlobalMemoryStatus(&memstat);
- notify(player, "---------- Windows memory usage ------------");
- notify_format(player, "%10ld %% memory in use", memstat.dwMemoryLoad);
- mem = memstat.dwAvailPhys / 1024.0 / 1024.0;
- notify_format(player, "%10.3f Mb free physical memory", mem);
- mem = memstat.dwTotalPhys / 1024.0 / 1024.0;
- notify_format(player, "%10.3f Mb total physical memory", mem);
- mem = memstat.dwAvailPageFile / 1024.0 / 1024.0;
- notify_format(player, "%10.3f Mb available in the paging file ", mem);
- mem = memstat.dwTotalPageFile / 1024.0 / 1024.0;
- notify_format(player, "%10.3f Mb total paging file size", mem);
- } /* end of calc_memory_used */
- #endif
Pid_t forked_dump_pid = -1;
--- 138,150 ----
***************
*** 177,196 ****
*/
void
! do_dump(player, num, flag)
! dbref player;
! char *num;
! int flag;
{
- /* flag: 0 = normal, 1 = paranoid, 2 = debug */
if (Wizard(player)) {
#ifdef ALWAYS_PARANOID
if (1) {
#else
! if (flag) {
#endif
/* want to do a scan before dumping each object */
! paranoid_dump = flag;
if (num && *num) {
/* checkpoint interval given */
paranoid_checkpt = atoi(num);
--- 154,169 ----
*/
void
! do_dump(dbref player, char *num, enum dump_type flag)
{
if (Wizard(player)) {
#ifdef ALWAYS_PARANOID
if (1) {
#else
! if (flag != DUMP_NORMAL) {
#endif
/* want to do a scan before dumping each object */
! paranoid_dump = 1;
if (num && *num) {
/* checkpoint interval given */
paranoid_checkpt = atoi(num);
***************
*** 205,211 ****
if (paranoid_checkpt < 1)
paranoid_checkpt = 1;
}
! if (flag == 1) {
notify_format(player, T("Paranoid dumping, checkpoint interval %d."),
paranoid_checkpt);
do_rawlog(LT_CHECK,
--- 178,184 ----
if (paranoid_checkpt < 1)
paranoid_checkpt = 1;
}
! if (flag == DUMP_PARANOID) {
notify_format(player, T("Paranoid dumping, checkpoint interval %d."),
paranoid_checkpt);
do_rawlog(LT_CHECK,
***************
*** 280,290 ****
#endif /* HAS_GETRUSAGE */
void
! do_shutdown(player, flag)
! dbref player;
! int flag; /* -1 = panic shutdown, 0 = normal, 1 = paranoid */
{
! if (flag == -1 && !God(player)) {
notify(player, T("It takes a God to make me panic."));
return;
}
--- 253,261 ----
#endif /* HAS_GETRUSAGE */
void
! do_shutdown(dbref player, enum shutdown_type flag)
{
! if (flag == SHUT_PANIC && !God(player)) {
notify(player, T("It takes a God to make me panic."));
return;
}
***************
*** 298,307 ****
system("touch NORESTART");
#endif
! if (flag == -1) {
panic("@shutdown/panic");
} else {
! if (flag == 1) {
paranoid_checkpt = db_top / 5;
if (paranoid_checkpt < 1)
paranoid_checkpt = 1;
--- 269,278 ----
system("touch NORESTART");
#endif
! if (flag == SHUT_PANIC) {
panic("@shutdown/panic");
} else {
! if (flag == SHUT_PARANOID) {
paranoid_checkpt = db_top / 5;
if (paranoid_checkpt < 1)
paranoid_checkpt = 1;
***************
*** 316,322 ****
jmp_buf db_err;
! static void
dump_database_internal()
{
char realdumpfile[2048];
--- 287,293 ----
jmp_buf db_err;
! static int
dump_database_internal()
{
char realdumpfile[2048];
***************
*** 337,342 ****
--- 308,314 ----
#ifdef HAS_ITIMER
install_sig_handler(SIGPROF, signal_cpu_limit);
#endif
+ return 1;
} else {
local_dump_database();
***************
*** 371,380 ****
/* Win32 systems can't rename over an existing file, so unlink first */
unlink(realdumpfile);
#endif
! if (rename(realtmpfl, realdumpfile) < 0)
perror(realtmpfl);
! } else
perror(realtmpfl);
#ifdef USE_MAILER
sprintf(realdumpfile, "%s%s", options.mail_db, options.compresssuff);
strcpy(tmpfl, make_new_epoch_file(options.mail_db, epoch));
--- 343,356 ----
/* Win32 systems can't rename over an existing file, so unlink first */
unlink(realdumpfile);
#endif
! if (rename(realtmpfl, realdumpfile) < 0) {
perror(realtmpfl);
! longjmp(db_err, 1);
! }
! } else {
perror(realtmpfl);
+ longjmp(db_err, 1);
+ }
#ifdef USE_MAILER
sprintf(realdumpfile, "%s%s", options.mail_db, options.compresssuff);
strcpy(tmpfl, make_new_epoch_file(options.mail_db, epoch));
***************
*** 386,395 ****
#ifdef WIN32
unlink(realdumpfile);
#endif
! if (rename(realtmpfl, realdumpfile) < 0)
perror(realtmpfl);
! } else
perror(realtmpfl);
}
#endif /* USE_MAILER */
#ifdef CHAT_SYSTEM
--- 362,375 ----
#ifdef WIN32
unlink(realdumpfile);
#endif
! if (rename(realtmpfl, realdumpfile) < 0) {
perror(realtmpfl);
! longjmp(db_err, 1);
! }
! } else {
perror(realtmpfl);
+ longjmp(db_err, 1);
+ }
}
#endif /* USE_MAILER */
#ifdef CHAT_SYSTEM
***************
*** 402,423 ****
#ifdef WIN32
unlink(realdumpfile);
#endif
! if (rename(realtmpfl, realdumpfile) < 0)
perror(realtmpfl);
! } else
perror(realtmpfl);
#endif /* CHAT_SYSTEM */
}
#endif
#ifdef HAS_ITIMER
install_sig_handler(SIGPROF, signal_cpu_limit);
#endif
}
void
! panic(message)
! const char *message;
{
const char *panicfile = options.crash_db;
FILE *f = NULL;
--- 382,409 ----
#ifdef WIN32
unlink(realdumpfile);
#endif
! if (rename(realtmpfl, realdumpfile) < 0) {
perror(realtmpfl);
! longjmp(db_err, 1);
! }
! } else {
perror(realtmpfl);
+ longjmp(db_err, 1);
+ }
#endif /* CHAT_SYSTEM */
+ time(&last_dump_time);
}
#endif
#ifdef HAS_ITIMER
install_sig_handler(SIGPROF, signal_cpu_limit);
#endif
+
+ return 0;
}
void
! panic(const char *message)
{
const char *panicfile = options.crash_db;
FILE *f = NULL;
***************
*** 472,481 ****
}
void
! fork_and_dump(forking)
! int forking;
{
! int child, nofork;
epoch++;
do_rawlog(LT_CHECK, "CHECKPOINTING: %s.#%d#\n", dumpfile, epoch);
--- 458,466 ----
}
void
! fork_and_dump(int forking)
{
! int child, nofork, status;
epoch++;
do_rawlog(LT_CHECK, "CHECKPOINTING: %s.#%d#\n", dumpfile, epoch);
***************
*** 526,534 ****
#ifndef WIN32
close(reserved); /* get that file descriptor back */
#endif
! dump_database_internal();
if (!nofork) {
! _exit(0); /* !!! */
} else {
#ifndef WIN32
reserved = open("/dev/null", O_RDWR);
--- 511,519 ----
#ifndef WIN32
close(reserved); /* get that file descriptor back */
#endif
! status = dump_database_internal();
if (!nofork) {
! _exit(status); /* !!! */
} else {
#ifndef WIN32
reserved = open("/dev/null", O_RDWR);
***************
*** 589,596 ****
extern struct db_stat_info current_state;
void
! init_game_config(conf)
! const char *conf;
{
int a;
--- 574,580 ----
extern struct db_stat_info current_state;
void
! init_game_config(const char *conf)
{
int a;
***************
*** 632,638 ****
}
/* Code that should be run after dbs are loaded (usually because we
! * need to have the flag table loaded
*/
void
init_game_postdb(const char *conf)
--- 616,622 ----
}
/* Code that should be run after dbs are loaded (usually because we
! * need to have the flag table loaded, or because they run last.
*/
void
init_game_postdb(const char *conf)
***************
*** 643,648 ****
--- 627,636 ----
function_init_postconfig();
/* Load further restrictions from config file */
config_file_startup(conf, 1);
+ /* Call Local Startup */
+ local_startup();
+ /* everything else ok. Restart all objects. */
+ do_restart();
}
***************
*** 715,721 ****
if (!GoodObject(PLAYER_START) || (!IsRoom(PLAYER_START)))
do_rawlog(LT_ERR, T("WARNING: Player_start (#%d) is NOT a room."),
PLAYER_START);
! if (DO_GLOBALS && (!GoodObject(MASTER_ROOM) || (!IsRoom(MASTER_ROOM))))
do_rawlog(LT_ERR, T("WARNING: Master room (#%d) is NOT a room."),
MASTER_ROOM);
if (!GoodObject(GOD) || (!IsPlayer(GOD)))
--- 703,709 ----
if (!GoodObject(PLAYER_START) || (!IsRoom(PLAYER_START)))
do_rawlog(LT_ERR, T("WARNING: Player_start (#%d) is NOT a room."),
PLAYER_START);
! if (!GoodObject(MASTER_ROOM) || (!IsRoom(MASTER_ROOM)))
do_rawlog(LT_ERR, T("WARNING: Master room (#%d) is NOT a room."),
MASTER_ROOM);
if (!GoodObject(GOD) || (!IsPlayer(GOD)))
***************
*** 786,802 ****
strcpy(dumpfile, outfile);
init_timer();
- /* Call Local Startup */
- local_startup();
-
- /* everything else ok. Restart all objects. */
- do_restart();
return 0;
}
void
! do_readcache(player)
! dbref player;
{
if (!Wizard(player)) {
notify(player, T("Permission denied."));
--- 774,784 ----
strcpy(dumpfile, outfile);
init_timer();
return 0;
}
void
! do_readcache(dbref player)
{
if (!Wizard(player)) {
notify(player, T("Permission denied."));
***************
*** 810,823 ****
#define cmd_match(x) atr_comm_match(x, player, '$', ':', cptr, 0, NULL, NULL);
void
! process_command(player, command, cause, from_port)
! dbref player;
! char *command;
! dbref cause;
! int from_port; /* 1 if this is direct input from a port
! * (i.e. typed directly by a player).
! * attrib sets don't get parsed then.
! */
{
int a;
char *p; /* utility */
--- 792,802 ----
#define cmd_match(x) atr_comm_match(x, player, '$', ':', cptr, 0, NULL, NULL);
void
! process_command(dbref player, char *command, dbref cause, int from_port)
! /* from_port = 1 if this is direct input from a port (i.e. typed
! * directly by a player). attrib sets
! * don't get parsed then.
! */
{
int a;
char *p; /* utility */
***************
*** 936,942 ****
/* now do check on zones */
if ((!a) && (Zone(Location(player)) != NOTHING)) {
! if (DO_GLOBALS && IsRoom(Zone(Location(player)))) {
/* zone of player's location is a zone master room */
--- 915,921 ----
/* now do check on zones */
if ((!a) && (Zone(Location(player)) != NOTHING)) {
! if (IsRoom(Zone(Location(player)))) {
/* zone of player's location is a zone master room */
***************
*** 972,995 ****
a += cmd_match(Zone(player));
}
/* end of zone stuff */
! if (DO_GLOBALS) {
! /* check global exits only if no other commands are matched */
! if ((!a) && (Location(player) != MASTER_ROOM)) {
! if (global_exit(player, cptr)) {
! if (!Mobile(player))
! goto done;
! else {
! do_move(player, cptr, 1);
! goto done;
! }
! } else
! /* global user-defined commands checked if all else fails.
! * May match more than one command in the master room.
! */
! a += list_match(Contents(MASTER_ROOM));
! }
! /* end of master room check */
}
} /* end of special checks */
if (!a) {
notify(player, T("Huh? (Type \"help\" for help.)"));
--- 951,972 ----
a += cmd_match(Zone(player));
}
/* end of zone stuff */
! /* check global exits only if no other commands are matched */
! if ((!a) && (Location(player) != MASTER_ROOM)) {
! if (global_exit(player, cptr)) {
! if (!Mobile(player))
! goto done;
! else {
! do_move(player, cptr, 1);
! goto done;
! }
! } else
! /* global user-defined commands checked if all else fails.
! * May match more than one command in the master room.
! */
! a += list_match(Contents(MASTER_ROOM));
}
+ /* end of master room check */
} /* end of special checks */
if (!a) {
notify(player, T("Huh? (Type \"help\" for help.)"));
***************
*** 1047,1056 ****
}
int
! alias_list_check(thing, command, type)
! dbref thing;
! const char *command;
! const char *type;
{
ATTR *a;
char alias[BUFFER_LEN];
--- 1024,1030 ----
}
int
! alias_list_check(dbref thing, const char *command, const char *type)
{
ATTR *a;
char alias[BUFFER_LEN];
***************
*** 1068,1077 ****
}
int
! loc_alias_check(loc, command, type)
! dbref loc;
! const char *command;
! const char *type;
{
ATTR *a;
char alias[BUFFER_LEN];
--- 1042,1048 ----
}
int
! loc_alias_check(dbref loc, const char *command, const char *type)
{
ATTR *a;
char alias[BUFFER_LEN];
***************
*** 1084,1091 ****
}
int
! Hearer(thing)
! dbref thing;
{
ALIST *ptr;
int cmp;
--- 1055,1061 ----
}
int
! Hearer(dbref thing)
{
ALIST *ptr;
int cmp;
***************
*** 1109,1116 ****
}
int
! Commer(thing)
! dbref thing;
{
ALIST *ptr;
--- 1079,1085 ----
}
int
! Commer(dbref thing)
{
ALIST *ptr;
***************
*** 1126,1133 ****
}
int
! Listener(thing)
! dbref thing;
{
/* If a monitor flag is set on a room or thing, it's a listener.
* Otherwise not (even if ^patterns are present)
--- 1095,1101 ----
}
int
! Listener(dbref thing)
{
/* If a monitor flag is set on a room or thing, it's a listener.
* Otherwise not (even if ^patterns are present)
***************
*** 1136,1144 ****
}
void
! do_poor(player, arg1)
! dbref player;
! char *arg1;
{
int amt = atoi(arg1);
dbref a;
--- 1104,1110 ----
}
void
! do_poor(dbref player, char *arg1)
{
int amt = atoi(arg1);
dbref a;
***************
*** 1158,1167 ****
void
! do_writelog(player, str, ltype)
! dbref player;
! char *str;
! int ltype;
{
if (!Wizard(player)) {
notify(player, T("Permission denied."));
--- 1124,1130 ----
void
! do_writelog(dbref player, char *str, int ltype)
{
if (!Wizard(player)) {
notify(player, T("Permission denied."));
***************
*** 1196,1216 ****
mush_free(command, "strip_braces.buff");
}
- void
- do_scan(player, command, flag)
- dbref player;
- char *command;
- int flag;
- {
- /* scan for possible matches of user-def'ed commands */
- char atrname[BUFFER_LEN];
- char *ptr;
-
#define ScanFind(p,x) \
(Can_Examine(p,x) && \
((num = atr_comm_match(x, p, '$', ':', command, 1, atrname, &ptr)) != 0))
dbref thing;
int num;
--- 1159,1267 ----
mush_free(command, "strip_braces.buff");
}
#define ScanFind(p,x) \
(Can_Examine(p,x) && \
((num = atr_comm_match(x, p, '$', ':', command, 1, atrname, &ptr)) != 0))
+ char *
+ scan_list(dbref player, char *command)
+ {
+ /* scan for possible matches of user-def'd commands from the
+ * viewpoint of player, and return as a string.
+ * Assumes that atr_comm_match returns atrname with a leading space.
+ */
+ static char tbuf[BUFFER_LEN];
+ char *tp;
+ dbref thing;
+ char atrname[BUFFER_LEN];
+ char *ptr;
+ int num;
+ if (!GoodObject(Location(player))) {
+ strcpy(tbuf, T("#-1 INVALID LOCATION"));
+ return tbuf;
+ }
+ if (!command || !*command) {
+ strcpy(tbuf, T("#-1 NO COMMAND"));
+ return tbuf;
+ }
+ tp = tbuf;
+ ptr = atrname;
+ DOLIST(thing, Contents(Location(player))) {
+ if (ScanFind(player, thing)) {
+ *ptr = '\0';
+ safe_str(atrname, tbuf, &tp);
+ ptr = atrname;
+ }
+ }
+ ptr = atrname;
+ if (ScanFind(player, Location(player))) {
+ *ptr = '\0';
+ safe_str(atrname, tbuf, &tp);
+ }
+ ptr = atrname;
+ DOLIST(thing, Contents(player)) {
+ if (ScanFind(player, thing)) {
+ *ptr = '\0';
+ safe_str(atrname, tbuf, &tp);
+ ptr = atrname;
+ }
+ }
+ /* zone checks */
+ ptr = atrname;
+ if (Zone(Location(player)) != NOTHING) {
+ if (IsRoom(Zone(Location(player)))) {
+ /* zone of player's location is a zone master room */
+ if (Location(player) != Zone(player)) {
+ DOLIST(thing, Contents(Zone(Location(player)))) {
+ if (ScanFind(player, thing)) {
+ *ptr = '\0';
+ safe_str(atrname, tbuf, &tp);
+ ptr = atrname;
+ }
+ }
+ }
+ } else {
+ /* regular zone object */
+ if (ScanFind(player, Zone(Location(player)))) {
+ *ptr = '\0';
+ safe_str(atrname, tbuf, &tp);
+ }
+ }
+ ptr = atrname;
+ if ((Zone(player) != NOTHING) && (Zone(player) != Zone(Location(player)))) {
+ /* check the player's personal zone */
+ if (ScanFind(player, Zone(player))) {
+ *ptr = '\0';
+ safe_str(atrname, tbuf, &tp);
+ }
+ }
+ }
+ ptr = atrname;
+ if ((Location(player) != MASTER_ROOM)
+ && (Zone(Location(player)) != MASTER_ROOM)
+ && (Zone(player) != MASTER_ROOM)) {
+ /* try Master Room stuff */
+ DOLIST(thing, Contents(MASTER_ROOM)) {
+ if (ScanFind(player, thing)) {
+ *ptr = '\0';
+ safe_str(atrname, tbuf, &tp);
+ ptr = atrname;
+ }
+ }
+ }
+ *tp = '\0';
+ if (*tbuf && *tbuf == ' ')
+ return tbuf + 1; /* atrname comes with leading spaces */
+ return tbuf;
+ }
+
+ void
+ do_scan(dbref player, char *command, int flag)
+ {
+ /* scan for possible matches of user-def'ed commands */
+ char atrname[BUFFER_LEN];
+ char *ptr;
dbref thing;
int num;
***************
*** 1291,1297 ****
}
}
ptr = atrname;
! if ((Zone(player) != NOTHING) && (Zone(player) != Zone(Location(player)))) {
/* check the player's personal zone */
if (ScanFind(player, Zone(player))) {
*ptr = '\0';
--- 1342,1349 ----
}
}
ptr = atrname;
! if ((Zone(player) != NOTHING)
! && (Zone(player) != Zone(Location(player)))) {
/* check the player's personal zone */
if (ScanFind(player, Zone(player))) {
*ptr = '\0';
***************
*** 1302,1308 ****
}
}
ptr = atrname;
! if (DO_GLOBALS && (flag & CHECK_GLOBAL)
&& (Location(player) != MASTER_ROOM)
&& (Zone(Location(player)) != MASTER_ROOM)
&& (Zone(player) != MASTER_ROOM)) {
--- 1354,1360 ----
}
}
ptr = atrname;
! if ((flag & CHECK_GLOBAL)
&& (Location(player) != MASTER_ROOM)
&& (Zone(Location(player)) != MASTER_ROOM)
&& (Zone(player) != MASTER_ROOM)) {
***************
*** 1415,1485 ****
}
}
! void
! do_uptime(dbref player, int mortal)
{
char tbuf1[BUFFER_LEN];
- char *p;
-
- #if defined(HAS_UPTIME) && !defined(linux)
FILE *fp;
! char c;
! int i;
! #endif
! int pid;
int psize;
#ifdef HAS_GETRUSAGE
struct rusage usage;
- #endif /* HAS_GETRUSAGE */
- #ifdef linux
- FILE *fp;
- char line[128]; /* Overkill */
- char *nl;
#endif
- sprintf(tbuf1, T(" Up since: %s"), ctime(&first_start_time));
- if ((p = strchr(tbuf1, '\n')))
- *p = '\0';
- notify(player, tbuf1);
-
- sprintf(tbuf1, T(" Last reboot: %s"), ctime(&start_time));
- if ((p = strchr(tbuf1, '\n')))
- *p = '\0';
- notify(player, tbuf1);
-
- sprintf(tbuf1, T("Total reboots: %d"), reboot_count);
- notify(player, tbuf1);
-
- sprintf(tbuf1, T(" Time now: %s"), ctime(&mudtime));
- if ((p = strchr(tbuf1, '\n')))
- *p = '\0';
- notify(player, tbuf1);
-
- /* calculate times until various events */
- notify_format(player,
- T("Time until next database save: %ld minutes %ld seconds."),
- (options.dump_counter - mudtime) / 60,
- (options.dump_counter - mudtime) % 60);
- notify_format(player,
- T(" Time until next dbck check: %ld minutes %ld seconds."),
- (options.dbck_counter - mudtime) / 60,
- (options.dbck_counter - mudtime) % 60);
- notify_format(player,
- T(" Time until next purge: %ld minutes %ld seconds."),
- (options.purge_counter - mudtime) / 60,
- (options.purge_counter - mudtime) % 60);
- if (options.warn_interval)
- notify_format(player,
- T(" Time until next @warnings: %ld minutes %ld seconds."),
- (options.warn_counter - mudtime) / 60,
- (options.warn_counter - mudtime) % 60);
-
- /* Mortals, go no further! */
- if (!Wizard(player) || mortal)
- return;
- #ifdef linux
- /* Use /proc files instead of calling the external uptime program on linux */
-
/* Current time */
{
struct tm *t;
--- 1467,1491 ----
}
}
! static void linux_uptime(dbref player) __attribute__ ((__unused__));
! static void unix_uptime(dbref player) __attribute__ ((__unused__));
! static void win32_uptime(dbref player) __attribute__ ((__unused__));
!
! static void
! linux_uptime(dbref player __attribute__ ((__unused__)))
{
+ #ifdef linux
+ /* Use /proc files instead of calling the external uptime program on linux */
char tbuf1[BUFFER_LEN];
FILE *fp;
! char line[128]; /* Overkill */
! char *nl;
! Pid_t pid;
int psize;
#ifdef HAS_GETRUSAGE
struct rusage usage;
#endif
/* Current time */
{
struct tm *t;
***************
*** 1535,1564 ****
*nl = '\0';
notify(player, tbuf1);
- #else /* linux */
- #ifdef HAS_UPTIME
- fp =
- #ifdef __LCC__
- (FILE *)
- #endif
- popen(UPTIME_PATH, "r");
-
- /* just in case the system is screwy */
- if (fp == NULL) {
- notify(player, T("Error -- cannot execute uptime."));
- do_rawlog(LT_ERR, T("** ERROR ** popen for @uptime returned NULL."));
- return;
- }
- /* print system uptime */
- for (i = 0; (c = getc(fp)) != '\n'; i++)
- tbuf1[i] = c;
- tbuf1[i] = '\0';
- pclose(fp);
-
- notify(player, tbuf1);
- #endif /* HAS_UPTIME */
- #endif /* !linux */
-
/* do process stats */
pid = getpid();
--- 1541,1546 ----
***************
*** 1566,1572 ****
notify_format(player, T("\nProcess ID: %10u %10d bytes per page"),
pid, psize);
- #ifdef linux
/* Linux's getrusage() is mostly unimplemented. Just has times, page faults
and swapouts. We use /proc/self/status */
--- 1548,1553 ----
***************
*** 1603,1609 ****
fclose(fp);
! #else /* LINUX */
#ifdef HAS_GETRUSAGE
getrusage(RUSAGE_SELF, &usage);
notify_format(player, T("Time used: %10ld user %10ld sys"),
--- 1584,1637 ----
fclose(fp);
! #endif
! }
!
! static void
! unix_uptime(dbref player __attribute__ ((__unused__)))
! {
! #ifdef HAS_UPTIME
! FILE *fp;
! char c;
! int i;
! #endif
! #ifdef HAS_GETRUSAGE
! struct rusage usage;
! #endif
! char tbuf1[BUFFER_LEN];
! Pid_t pid;
! int psize;
!
! #ifdef HAS_UPTIME
! fp =
! #ifdef __LCC__
! (FILE *)
! #endif
! popen(UPTIME_PATH, "r");
!
! /* just in case the system is screwy */
! if (fp == NULL) {
! notify(player, T("Error -- cannot execute uptime."));
! do_rawlog(LT_ERR, T("** ERROR ** popen for @uptime returned NULL."));
! return;
! }
! /* print system uptime */
! for (i = 0; (c = getc(fp)) != '\n'; i++)
! tbuf1[i] = c;
! tbuf1[i] = '\0';
! pclose(fp);
!
! notify(player, tbuf1);
! #endif /* HAS_UPTIME */
!
! /* do process stats */
!
! pid = getpid();
! psize = getpagesize();
! notify_format(player, T("\nProcess ID: %10u %10d bytes per page"),
! pid, psize);
!
!
#ifdef HAS_GETRUSAGE
getrusage(RUSAGE_SELF, &usage);
notify_format(player, T("Time used: %10ld user %10ld sys"),
***************
*** 1627,1644 ****
usage.ru_nivcsw);
notify_format(player, "Signals: %10ld", usage.ru_nsignals);
#endif /* HAS_GETRUSAGE */
- #endif /* LINUX */
#ifdef WIN32
! Win32stats(player);
#endif
}
/* Open a db file, which may be compressed, and return a file pointer */
static FILE *
! db_open(filename)
! const char *filename;
{
FILE *f;
#ifndef macintosh
--- 1655,1763 ----
usage.ru_nivcsw);
notify_format(player, "Signals: %10ld", usage.ru_nsignals);
#endif /* HAS_GETRUSAGE */
+ }
+
+ static void
+ win32_uptime(dbref player __attribute__ ((__unused__)))
+ { /* written by NJG */
#ifdef WIN32
! MEMORYSTATUS memstat;
! double mem;
! memstat.dwLength = sizeof(memstat);
! GlobalMemoryStatus(&memstat);
! notify(player, "---------- Windows memory usage ------------");
! notify_format(player, "%10ld %% memory in use", memstat.dwMemoryLoad);
! mem = memstat.dwAvailPhys / 1024.0 / 1024.0;
! notify_format(player, "%10.3f Mb free physical memory", mem);
! mem = memstat.dwTotalPhys / 1024.0 / 1024.0;
! notify_format(player, "%10.3f Mb total physical memory", mem);
! mem = memstat.dwAvailPageFile / 1024.0 / 1024.0;
! notify_format(player, "%10.3f Mb available in the paging file ", mem);
! mem = memstat.dwTotalPageFile / 1024.0 / 1024.0;
! notify_format(player, "%10.3f Mb total paging file size", mem);
! #endif
! }
!
!
! void
! do_uptime(dbref player, int mortal)
! {
! char tbuf1[BUFFER_LEN];
! struct tm *when;
!
! when = localtime(&first_start_time);
! strftime(tbuf1, sizeof tbuf1, T(" Up since %a %b %d %X %Z %Y"), when);
! notify(player, tbuf1);
!
! when = localtime(&start_time);
! strftime(tbuf1, sizeof tbuf1, T(" Last reboot: %a %b %d %X %Z %Y"), when);
! notify(player, tbuf1);
!
! notify_format(player, T("Total reboots: %d"), reboot_count);
!
! when = localtime(&mudtime);
! strftime(tbuf1, sizeof tbuf1, T(" Time now: %a %b %d %X %Z %Y"), when);
! notify(player, tbuf1);
!
! if (last_dump_time > 0) {
! when = localtime(&last_dump_time);
! strftime(tbuf1, sizeof tbuf1,
! T(" Time of last database save: %a %b %d %X %Z %Y"), when);
! notify(player, tbuf1);
! }
!
! /* calculate times until various events */
! when = localtime(&options.dump_counter);
! strftime(tbuf1, sizeof tbuf1, "%X", when);
! notify_format(player,
! T
! ("Time until next database save: %ld minutes %ld seconds, at %s"),
! (options.dump_counter - mudtime) / 60,
! (options.dump_counter - mudtime) % 60, tbuf1);
!
! when = localtime(&options.dbck_counter);
! strftime(tbuf1, sizeof tbuf1, "%X", when);
! notify_format(player,
! T
! (" Time until next dbck check: %ld minutes %ld seconds, at %s."),
! (options.dbck_counter - mudtime) / 60,
! (options.dbck_counter - mudtime) % 60, tbuf1);
!
! when = localtime(&options.purge_counter);
! strftime(tbuf1, sizeof tbuf1, "%X", when);
! notify_format(player,
! T
! (" Time until next purge: %ld minutes %ld seconds, at %s."),
! (options.purge_counter - mudtime) / 60,
! (options.purge_counter - mudtime) % 60, tbuf1);
!
! if (options.warn_interval) {
! when = localtime(&options.warn_counter);
! strftime(tbuf1, sizeof tbuf1, "%X", when);
! notify_format(player,
! T
! (" Time until next @warnings: %ld minutes %ld seconds, at %s."),
! (options.warn_counter - mudtime) / 60,
! (options.warn_counter - mudtime) % 60, tbuf1);
! }
!
! /* Mortals, go no further! */
! if (!Wizard(player) || mortal)
! return;
! #if defined(linux)
! linux_uptime(player);
! #elif defined(WIN32)
! win32_uptime(player);
! #else
! unix_uptime(player);
#endif
}
/* Open a db file, which may be compressed, and return a file pointer */
static FILE *
! db_open(const char *filename)
{
FILE *f;
#ifndef macintosh
***************
*** 1676,1683 ****
/* Open a file or pipe (if compressing) for writing */
static FILE *
! db_open_write(filename)
! const char *filename;
{
FILE *f;
#ifndef macintosh
--- 1795,1801 ----
/* Open a file or pipe (if compressing) for writing */
static FILE *
! db_open_write(const char *filename)
{
FILE *f;
#ifndef macintosh
***************
*** 1711,1718 ****
/* Close a db file, which may really be a pipe */
static void
! db_close(f)
! FILE *f;
{
#ifndef macintosh
#ifndef WIN32
--- 1829,1835 ----
/* Close a db file, which may really be a pipe */
static void
! db_close(FILE * f)
{
#ifndef macintosh
#ifndef WIN32
***************
*** 1727,1736 ****
}
void
! do_list(player, arg, lc)
! dbref player;
! char *arg;
! int lc;
{
if (!arg || !*arg)
notify(player, T("I don't understand what you want to @list."));
--- 1844,1850 ----
}
void
! do_list(dbref player, char *arg, int lc)
{
if (!arg || !*arg)
notify(player, T("I don't understand what you want to @list."));
***************
*** 1829,1837 ****
}
char *
! make_new_epoch_file(basename, the_epoch)
! const char *basename;
! int the_epoch;
{
static char result[BUFFER_LEN]; /* STATIC! */
/* Unlink the last the_epoch and create a new one */
--- 1943,1949 ----
}
char *
! make_new_epoch_file(const char *basename, int the_epoch)
{
static char result[BUFFER_LEN]; /* STATIC! */
/* Unlink the last the_epoch and create a new one */
*** 1_7_7.154/src/funstr.c Tue, 24 Dec 2002 15:20:25 -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.1.1.1.1.1.1.1.1.1.2.1.3.1.5.1.3.1.9 660)
--- 1_7_7.222(w)/src/funstr.c Thu, 20 Feb 2003 09:33:03 -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.1.1.1.1.1.1.1.1.1.2.1.3.1.5.1.3.1.2.1.2 660)
***************
*** 1548,1554 ****
* so %r will not mess with any alignment
* functions.
*/
! while (i <= length + 1) {
if ((str[i] == '\n') || (str[i] == '\r'))
return i;
i++;
--- 1548,1554 ----
* so %r will not mess with any alignment
* functions.
*/
! while (i < length) {
if ((str[i] == '\n') || (str[i] == '\r'))
return i;
i++;
*** 1_7_7.154/src/funmisc.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/c/14_funmisc.c 1.30.1.1.1.12 660)
--- 1_7_7.222(w)/src/funmisc.c Thu, 20 Feb 2003 09:33:03 -0600 dunemush (pennmush/c/14_funmisc.c 1.30.1.1.1.16 660)
***************
*** 11,16 ****
--- 11,18 ----
#include "extchat.h"
#include "htab.h"
#include "flags.h"
+ #include "match.h"
+ #include "mushdb.h"
#include "dbdefs.h"
#include "parse.h"
#include "function.h"
***************
*** 58,64 ****
return;
}
orator = executor;
! do_pemit_list(executor, args[0], args[1], 1);
}
/* ARGSUSED */
--- 60,66 ----
return;
}
orator = executor;
! do_pemit_list(executor, args[0], args[1], PEMIT_LIST);
}
/* ARGSUSED */
***************
*** 509,511 ****
--- 511,531 ----
safe_str("#-1", buff, bp);
return;
}
+
+ /* ARGSUSED */
+ FUNCTION(fun_scan)
+ {
+ dbref thing;
+
+ thing = match_thing(executor, args[0]);
+ if (!GoodObject(thing)) {
+ safe_str(T(e_notvis), buff, bp);
+ return;
+ }
+ if (!See_All(executor) && !controls(executor, thing)) {
+ notify(executor, T("Permission denied."));
+ safe_str("#-1", buff, bp);
+ return;
+ }
+ safe_str(scan_list(thing, args[1]), buff, bp);
+ }
*** 1_7_7.154/src/funlist.c Fri, 03 Jan 2003 18:45:37 -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.1.1.1.1.1.1.1.1.1.1.1.12.1.2 660)
--- 1_7_7.222(w)/src/funlist.c Thu, 20 Feb 2003 09:33:03 -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.1.1.1.1.1.1.1.1.1.1.1.12.1.4 660)
***************
*** 19,43 ****
#include "lock.h"
#include "confmagic.h"
-
- #define LISTTYPE_ERROR -1
-
#define MAX_SORTSIZE (BUFFER_LEN / 2)
static char *next_token(char *str, char sep);
! static int autodetect_list(char **ptrs, int nptrs);
! static int get_list_type(char **args, int nargs,
! int type_pos, char **ptrs, int nptrs);
! static int get_list_type_noauto(char **args, int nargs, int type_pos);
! static int WIN32_CDECL a_comp(const void *s1, const void *s2);
! int WIN32_CDECL i_comp(const void *s1, const void *s2);
! static int WIN32_CDECL f_comp(const void *s1, const void *s2);
! static int WIN32_CDECL u_comp(const void *s1, const void *s2);
static int regrep_helper(dbref who, dbref what,
char const *name, ATTR *atr, void *args);
! static void sane_qsort(void **array, int left, int right,
! int (WIN32_CDECL * compare) (const void *,
! const void *));
static void do_itemfuns(char *buff, char **bp, char *str, char *num,
char *word, char *sep, int flag);
--- 19,40 ----
#include "lock.h"
#include "confmagic.h"
#define MAX_SORTSIZE (BUFFER_LEN / 2)
static char *next_token(char *str, char sep);
! static list_type autodetect_list(char **ptrs, int nptrs);
! static list_type get_list_type(char **args, int nargs,
! int type_pos, char **ptrs, int nptrs);
! static list_type get_list_type_noauto(char **args, int nargs, int type_pos);
! static int a_comp(const void *s1, const void *s2);
! static int ai_comp(const void *s1, const void *s2);
! int i_comp(const void *s1, const void *s2);
! static int f_comp(const void *s1, const void *s2);
! static int u_comp(const void *s1, const void *s2);
static int regrep_helper(dbref who, dbref what,
char const *name, ATTR *atr, void *args);
! typedef int (*comp_func) (const void *, const void *);
! static void sane_qsort(void **array, int left, int right, comp_func compare);
static void do_itemfuns(char *buff, char **bp, char *str, char *num,
char *word, char *sep, int flag);
***************
*** 586,597 ****
arr2list(words, n, buff, bp, osep);
}
! static int
! autodetect_list(ptrs, nptrs)
! char *ptrs[];
! int nptrs;
{
! int sort_type, i;
sort_type = NUMERIC_LIST;
--- 583,593 ----
arr2list(words, n, buff, bp, osep);
}
! static list_type
! autodetect_list(char *ptrs[], int nptrs)
{
! list_type sort_type;
! int i;
sort_type = NUMERIC_LIST;
***************
*** 630,636 ****
return sort_type;
}
! static int
get_list_type(char *args[], int nargs, int type_pos, char *ptrs[], int nptrs)
{
if (nargs >= type_pos) {
--- 626,632 ----
return sort_type;
}
! static list_type
get_list_type(char *args[], int nargs, int type_pos, char *ptrs[], int nptrs)
{
if (nargs >= type_pos) {
***************
*** 656,662 ****
return autodetect_list(ptrs, nptrs);
}
! static int
get_list_type_noauto(char *args[], int nargs, int type_pos)
{
if (nargs >= type_pos) {
--- 652,658 ----
return autodetect_list(ptrs, nptrs);
}
! static list_type
get_list_type_noauto(char *args[], int nargs, int type_pos)
{
if (nargs >= type_pos) {
***************
*** 674,698 ****
case 'f':
return FLOAT_LIST;
default:
! return LISTTYPE_ERROR;
}
}
! return LISTTYPE_ERROR;
}
! static int WIN32_CDECL
a_comp(const void *s1, const void *s2)
{
return strcoll(*(char *const *) s1, *(char *const *) s2);
}
typedef struct i_record i_rec;
struct i_record {
char *str;
int num;
};
! int WIN32_CDECL
i_comp(const void *s1, const void *s2)
{
if (((const i_rec *) s1)->num > ((const i_rec *) s2)->num)
--- 670,700 ----
case 'f':
return FLOAT_LIST;
default:
! return UNKNOWN_LIST;
}
}
! return UNKNOWN_LIST;
}
! static int
a_comp(const void *s1, const void *s2)
{
return strcoll(*(char *const *) s1, *(char *const *) s2);
}
+ static int
+ ai_comp(const void *s1, const void *s2)
+ {
+ return strcasecoll(*(char *const *) s1, *(char *const *) s2);
+ }
+
typedef struct i_record i_rec;
struct i_record {
char *str;
int num;
};
! int
i_comp(const void *s1, const void *s2)
{
if (((const i_rec *) s1)->num > ((const i_rec *) s2)->num)
***************
*** 708,714 ****
NVAL num;
};
! static int WIN32_CDECL
f_comp(const void *s1, const void *s2)
{
if (((const f_rec *) s1)->num > ((const f_rec *) s2)->num)
--- 710,716 ----
NVAL num;
};
! static int
f_comp(const void *s1, const void *s2)
{
if (((const f_rec *) s1)->num > ((const f_rec *) s2)->num)
***************
*** 722,728 ****
static char ucomp_buff[BUFFER_LEN];
static PE_Info *ucomp_pe_info;
! static int WIN32_CDECL
u_comp(const void *s1, const void *s2)
{
char result[BUFFER_LEN], *rp;
--- 724,730 ----
static char ucomp_buff[BUFFER_LEN];
static PE_Info *ucomp_pe_info;
! static int
u_comp(const void *s1, const void *s2)
{
char result[BUFFER_LEN], *rp;
***************
*** 751,761 ****
}
/* Compare two values based on sort_type */
! int WIN32_CDECL
! gencomp(a, b, sort_type)
! char *a;
! char *b;
! int sort_type;
{
switch (sort_type) {
case NUMERIC_LIST:
--- 753,760 ----
}
/* Compare two values based on sort_type */
! int
! gencomp(char *a, char *b, list_type sort_type)
{
switch (sort_type) {
case NUMERIC_LIST:
***************
*** 817,824 ****
int qparse_dbref(const char *s);
int
! qparse_dbref(s)
! const char *s;
{
/* Version of parse_dbref() that doesn't do GoodObject checks */
if (!s || (*s != NUMBER_TOKEN) || !*(s + 1))
--- 816,822 ----
int qparse_dbref(const char *s);
int
! qparse_dbref(const char *s)
{
/* Version of parse_dbref() that doesn't do GoodObject checks */
if (!s || (*s != NUMBER_TOKEN) || !*(s + 1))
***************
*** 827,833 ****
}
void
! do_gensort(char *s[], int n, int sort_type)
{
int i;
f_rec *fp;
--- 825,831 ----
}
void
! do_gensort(char *s[], int n, list_type sort_type)
{
int i;
f_rec *fp;
***************
*** 835,842 ****
--- 833,844 ----
switch (sort_type) {
case ALPHANUM_LIST:
+ case UNKNOWN_LIST:
qsort(s, n, sizeof(char *), a_comp);
break;
+ case INSENS_ALPHANUM_LIST:
+ qsort(s, n, sizeof(char *), ai_comp);
+ break;
case NUMERIC_LIST:
ip = (i_rec *) mush_malloc(n * sizeof(i_rec), "do_gensort.int_list");
for (i = 0; i < n; i++) {
***************
*** 877,883 ****
FUNCTION(fun_sort)
{
char *ptrs[MAX_SORTSIZE];
! int nptrs, sort_type;
char sep;
char outsep[BUFFER_LEN];
--- 879,886 ----
FUNCTION(fun_sort)
{
char *ptrs[MAX_SORTSIZE];
! int nptrs;
! list_type sort_type;
char sep;
char outsep[BUFFER_LEN];
***************
*** 900,909 ****
}
static void
! sane_qsort(array, left, right, compare)
! void *array[];
! int left, right;
! int (WIN32_CDECL * compare) (const void *, const void *);
{
/* Andrew Molitor's qsort, which doesn't require transitivity between
* comparisons (essential for preventing crashes due to boneheads
--- 903,909 ----
}
static void
! sane_qsort(void *array[], int left, int right, comp_func compare)
{
/* Andrew Molitor's qsort, which doesn't require transitivity between
* comparisons (essential for preventing crashes due to boneheads
***************
*** 934,940 ****
/* Walk the array, looking for stuff that's less than our */
/* pivot. If it is, swap it with the next thing along */
! if ((*compare) (array[i], array[left]) < 0) {
last++;
if (last == i)
continue;
--- 934,940 ----
/* Walk the array, looking for stuff that's less than our */
/* pivot. If it is, swap it with the next thing along */
! if (compare(array[i], array[left]) < 0) {
last++;
if (last == i)
continue;
***************
*** 1024,1030 ****
char **a1, **a2;
char *tempbuff;
int n1, i, a;
! int sort_type = ALPHANUM_LIST;
char *osep = NULL, osepd[2] = { '\0', '\0' };
/* if no lists, then no work */
--- 1024,1030 ----
char **a1, **a2;
char *tempbuff;
int n1, i, a;
! list_type sort_type = ALPHANUM_LIST;
char *osep = NULL, osepd[2] = { '\0', '\0' };
/* if no lists, then no work */
***************
*** 1053,1059 ****
osep = osepd;
} else if (nargs == 4) {
sort_type = get_list_type_noauto(args, nargs, 4);
! if (sort_type == LISTTYPE_ERROR) {
sort_type = ALPHANUM_LIST;
osep = args[3];
} else {
--- 1053,1059 ----
osep = osepd;
} else if (nargs == 4) {
sort_type = get_list_type_noauto(args, nargs, 4);
! if (sort_type == UNKNOWN_LIST) {
sort_type = ALPHANUM_LIST;
osep = args[3];
} else {
***************
*** 1089,1095 ****
char sep;
char **a1, **a2;
int n1, n2, x1, x2, val;
! int sort_type = ALPHANUM_LIST;
int osepl = 0;
char *osep = NULL, osepd[2] = { '\0', '\0' };
--- 1089,1095 ----
char sep;
char **a1, **a2;
int n1, n2, x1, x2, val;
! list_type sort_type = ALPHANUM_LIST;
int osepl = 0;
char *osep = NULL, osepd[2] = { '\0', '\0' };
***************
*** 1116,1122 ****
osepl = 1;
} else if (nargs == 4) {
sort_type = get_list_type_noauto(args, nargs, 4);
! if (sort_type == LISTTYPE_ERROR) {
sort_type = ALPHANUM_LIST;
osep = args[3];
osepl = arglens[3];
--- 1116,1122 ----
osepl = 1;
} else if (nargs == 4) {
sort_type = get_list_type_noauto(args, nargs, 4);
! if (sort_type == UNKNOWN_LIST) {
sort_type = ALPHANUM_LIST;
osep = args[3];
osepl = arglens[3];
***************
*** 1204,1210 ****
char sep;
char **a1, **a2;
int n1, n2, x1, x2, val;
! int sort_type = ALPHANUM_LIST;
int osepl = 0;
char *osep = NULL, osepd[2] = { '\0', '\0' };
--- 1204,1210 ----
char sep;
char **a1, **a2;
int n1, n2, x1, x2, val;
! list_type sort_type = ALPHANUM_LIST;
int osepl = 0;
char *osep = NULL, osepd[2] = { '\0', '\0' };
***************
*** 1231,1237 ****
osepl = 1;
} else if (nargs == 4) {
sort_type = get_list_type_noauto(args, nargs, 4);
! if (sort_type == LISTTYPE_ERROR) {
sort_type = ALPHANUM_LIST;
osep = args[3];
osepl = arglens[3];
--- 1231,1237 ----
osepl = 1;
} else if (nargs == 4) {
sort_type = get_list_type_noauto(args, nargs, 4);
! if (sort_type == UNKNOWN_LIST) {
sort_type = ALPHANUM_LIST;
osep = args[3];
osepl = arglens[3];
***************
*** 2124,2130 ****
{
int i;
! if (!is_integer(args[0])) {
safe_str(T(e_int), buff, bp);
return;
}
--- 2124,2130 ----
{
int i;
! if (!is_strict_integer(args[0])) {
safe_str(T(e_int), buff, bp);
return;
}
***************
*** 2143,2149 ****
{
int i;
! if (!is_integer(args[0])) {
safe_str(T(e_int), buff, bp);
return;
}
--- 2143,2149 ----
{
int i;
! if (!is_strict_integer(args[0])) {
safe_str(T(e_int), buff, bp);
return;
}
*** 1_7_7.154/src/fundb.c Fri, 17 Jan 2003 17:42:29 -0600 dunemush (pennmush/c/17_fundb.c 1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.7.1.3.1.3.1.3.1.2.1.2.1.3.2.1.2.1.2.1.1.1.1.4.1.1.1.1.1.1.1.1.1.1.1.3.1.1.2.2.2.1.1.1.1.1.1.3 660)
--- 1_7_7.222(w)/src/fundb.c Thu, 20 Feb 2003 09:33:03 -0600 dunemush (pennmush/c/17_fundb.c 1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.7.1.3.1.3.1.3.1.2.1.2.1.3.2.1.2.1.2.1.1.1.1.4.1.1.1.1.1.1.1.1.1.1.1.3.1.1.2.2.2.1.1.1.1.1.1.4 660)
***************
*** 1689,1699 ****
/* ARGSUSED */
FUNCTION(fun_tel)
{
if (!command_check_byname(executor, "@tel") || fun->flags & FN_NOSIDEFX) {
safe_str(T(e_perm), buff, bp);
return;
}
! do_teleport(executor, args[0], args[1], 0);
}
--- 1689,1702 ----
/* ARGSUSED */
FUNCTION(fun_tel)
{
+ int silent = 0;
if (!command_check_byname(executor, "@tel") || fun->flags & FN_NOSIDEFX) {
safe_str(T(e_perm), buff, bp);
return;
}
! if (nargs == 3)
! silent = parse_boolean(args[2]);
! do_teleport(executor, args[0], args[1], silent);
}
*** 1_7_7.154/src/function.c Thu, 09 Jan 2003 21:37:52 -0600 dunemush (pennmush/c/18_function.c 1.29.1.14.1.3.1.6.1.1.1.1.1.14.1.2.1.1.1.7 660)
--- 1_7_7.222(w)/src/function.c Thu, 20 Feb 2003 09:33:03 -0600 dunemush (pennmush/c/18_function.c 1.29.1.14.1.3.1.6.1.1.1.1.1.14.1.2.1.1.1.7.1.2 660)
***************
*** 404,409 ****
--- 404,410 ----
{"RNUM", fun_rnum, 2, 2, FN_REG},
{"ROOM", fun_room, 1, 1, FN_REG},
{"S", fun_s, 1, -1, FN_REG},
+ {"SCAN", fun_scan, 2, -2, FN_REG},
{"SCRAMBLE", fun_scramble, 1, -1, FN_REG},
{"SECS", fun_secs, 0, 0, FN_REG},
{"SECURE", fun_secure, 1, -1, FN_REG},
***************
*** 440,446 ****
{"SWITCHALL", fun_switch, 3, INT_MAX, FN_NOPARSE},
{"T", fun_t, 1, 1, FN_REG},
{"TABLE", fun_table, 1, 5, FN_REG},
! {"TEL", fun_tel, 2, 2, FN_REG},
{"TEXTFILE", fun_textfile, 2, 2, FN_REG},
{"TIME", fun_time, 0, 1, FN_REG},
{"TIMEFMT", fun_timefmt, 1, 2, FN_REG},
--- 441,447 ----
{"SWITCHALL", fun_switch, 3, INT_MAX, FN_NOPARSE},
{"T", fun_t, 1, 1, FN_REG},
{"TABLE", fun_table, 1, 5, FN_REG},
! {"TEL", fun_tel, 2, 3, FN_REG},
{"TEXTFILE", fun_textfile, 2, 2, FN_REG},
{"TIME", fun_time, 0, 1, FN_REG},
{"TIMEFMT", fun_timefmt, 1, 2, FN_REG},
*** 1_7_7.154/src/flags.c Sat, 25 Jan 2003 22:43:25 -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.1.1.1.1.1.1.1.3.1.9.1.2.2.1.1.2.1.27 660)
--- 1_7_7.222(w)/src/flags.c Thu, 20 Feb 2003 09:33:03 -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.1.1.1.1.1.1.1.3.1.9.1.2.2.1.1.2.1.32 660)
***************
*** 1,16 ****
! /* flags.c */
!
! /* Functions to cope with flags and powers (and also object types,
! * in some cases)
! */
!
! /* Flag functions actually involve with several related entities:
* Flag definitions (FLAG objects)
* Bitmasks representing sets of flags (object_flag_type's). The
* bits involved may differ between dbs.
* Strings of