[PENNMUSH-ANNOUNCE] 1.7.7-patch02
dunemush at tala.mede.uic.edu
dunemush at tala.mede.uic.edu
Wed Dec 25 00:39:43 CST 2002
This is patch02 to PennMUSH 1.7.7. After applying this patch, you will
have version 1.7.7p2
To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
patch -p1 < 1.7.7-patch02
*** DEAL WITH local.dst (see below) ***
make install
If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1',
not just 'patch -p1'.
*** This patch changes the local.dst file. If you don't use local.c, you
*** should simply 'cp src/local.dst src/local.c' before compiling.
*** If you do use local.c, you may need to merge the changes in local.dst
*** into your local.c as well.
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:
Major Changes:
* The LOCAL_DATA define has been removed along with the pointer
in the object structure. The local functions called on creation,
destruction, and cloning are now always called. Objects can
now store data in a single hashtable using the set_objdata()
and get_objdata() functions. As a proof of concept, the transitory
channel lists on objects are now stored here, and the "channels"
pointer has been removed from the object structure. Design
and much of the implementation by Vadiv at MS*H.
Powers:
* can_nspemit power can be used to provide access to @nspemit
without a Wizard bit. [SW]
Functions:
* lpos from Mux, TM3. [SW]
Fixes:
* Fix to some gcc-specific macros reported by Peter Bengston and
Michael Holbrook. [SW]
* Improvements to stripaccents/noaccents conversions. [SW]
* Fixes from 1.7.6p3.
Prereq: 1.7.7p1
*** 1_7_7.66/Patchlevel Tue, 17 Dec 2002 22:45:06 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.3 600)
--- 1_7_7.81(w)/Patchlevel Tue, 24 Dec 2002 15:16:41 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.4 600)
***************
*** 1,2 ****
Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p1
--- 1,2 ----
Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p2
*** 1_7_7.66/CHANGES Tue, 17 Dec 2002 16:03:37 -0600 dunemush (pennmush/g/23_CHANGES 1.21 600)
--- 1_7_7.81(w)/CHANGES Tue, 24 Dec 2002 15:16:28 -0600 dunemush (pennmush/g/23_CHANGES 1.24 600)
***************
*** 18,23 ****
--- 18,46 ----
==========================================================================
+ Version 1.7.7 patchlevel 2 December 22, 2002
+
+ Major Changes:
+ * The LOCAL_DATA define has been removed along with the pointer
+ in the object structure. The local functions called on creation,
+ destruction, and cloning are now always called. Objects can
+ now store data in a single hashtable using the set_objdata()
+ and get_objdata() functions. As a proof of concept, the transitory
+ channel lists on objects are now stored here, and the "channels"
+ pointer has been removed from the object structure. Design
+ and much of the implementation by Vadiv at MS*H.
+ Powers:
+ * can_nspemit power can be used to provide access to @nspemit
+ without a Wizard bit. [SW]
+ Functions:
+ * lpos from Mux, TM3. [SW]
+ Fixes:
+ * Fix to some gcc-specific macros reported by Peter Bengston and
+ Michael Holbrook. [SW]
+ * Improvements to stripaccents/noaccents conversions. [SW]
+ * Fixes from 1.7.6p3.
+
+
Version 1.7.7 patchlevel 1 December 17, 2002
Minor Changes:
*** 1_7_7.66/game/txt/hlp/pennvers.hlp Tue, 17 Dec 2002 22:45:06 -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.2 600)
--- 1_7_7.81(w)/game/txt/hlp/pennvers.hlp Tue, 24 Dec 2002 15:49:32 -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.6 600)
***************
*** 1,5 ****
& changes
! & 1.7.7p1
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.7p2
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,40 ----
A list of the patchlevels associated with each release can
be read in 'help patchlevels'.
+ Version 1.7.7 patchlevel 2 December 22, 2002
+
+ Major Changes:
+ * The LOCAL_DATA define has been removed along with the pointer
+ in the object structure. The local functions called on creation,
+ destruction, and cloning are now always called. Objects can
+ now store data in a single hashtable using the set_objdata()
+ and get_objdata() functions. As a proof of concept, the transitory
+ channel lists on objects are now stored here, and the "channels"
+ pointer has been removed from the object structure. Design
+ and much of the implementation by Vadiv at MS*H.
+ Powers:
+ * can_nspemit power can be used to provide access to @nspemit
+ without a Wizard bit. [SW]
+ Functions:
+ * lpos from Mux, TM3. [SW]
+ Fixes:
+ * Fix to some gcc-specific macros reported by Peter Bengston and
+ Michael Holbrook. [SW]
+ * Improvements to stripaccents/noaccents conversions. [SW]
+ * Fixes from 1.7.6p3.
+
+
+ & 1.7.7p1
Version 1.7.7 patchlevel 1 December 17, 2002
Minor Changes:
***************
*** 1262,1267 ****
--- 1286,1316 ----
* Indentation fixes [SW]
* Fixes up to 1.7.4p12 merged in.
+ & 1.7.6p3
+ Version 1.7.6 patchlevel 3 December 22, 2002
+
+ Minor changes:
+ * call_limit now controls the maximum recursion in process_expression,
+ instead of maximum calls to p_e per command cycle. This still
+ limits stack size, but doesn't get in the way of massive code
+ nearly as much. People using a very high call_limit value should
+ probably lower it significantly. Patch by Philip Mak.
+ * Improved error messages for many database information functions.
+ Notably, several functions that require at least one argument,
+ now complain if they don't get it rather than returning silently.
+ Suggested by Intrevis at MS*H. [SW]
+ Fixes:
+ * @warnings are no longer shown on GOING objects. Suggested by
+ Philip Mak.
+ * Help fixes by Intrevis, Time, and Ambrosia at MS*H
+ * Bug in @decomp/skipdefaults reported by Philip Mak. [SW]
+ * Tweaks to utils/mkcmds.sh [SW]
+ * home() on a room acts as described in the help. Reported by
+ Intrevis at MS*H. [SW]
+ * whisper/noisy double-notified the whisperer. Reported by Philip Mak.
+ * Crash bug in @mail fixed. Reported by Titan at OtherSpace.+
+
& 1.7.6p2
Version 1.7.6 patchlevel 2 December 17, 2002
***************
*** 5826,5833 ****
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
! 1.7.6: 0, 1, 2
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
--- 5875,5882 ----
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
! 1.7.6: 0, 1, 2, 3
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
*** 1_7_7.66/game/txt/hlp/penntop.hlp Tue, 26 Nov 2002 14:28:59 -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 600)
--- 1_7_7.81(w)/game/txt/hlp/penntop.hlp Tue, 24 Dec 2002 15:14:53 -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.13 600)
***************
*** 965,970 ****
--- 965,971 ----
tport_anything Can @teleport anything.
tport_anywhere Can @teleport to anywhere.
unkillable Can not be killed
+ can_nspemit Can use @nspemit and nspemit()
See also: @power
& PUPPETS
*** 1_7_7.66/game/txt/hlp/pennfunc.hlp Tue, 17 Dec 2002 00:18:29 -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.4 600)
--- 1_7_7.81(w)/game/txt/hlp/pennfunc.hlp Tue, 24 Dec 2002 15:17:03 -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.2 600)
***************
*** 45,52 ****
Channel functions: Get information about channels (CTITLE, CWHO)
Communication functions: Send messages to objects (PEMIT, OEMIT)
Dbref functions: return dbref info related to objects (LOC, LEXITS)
- Floating point functions: floating point math (SIN, ROUND)
Global functions: local MUSH-specific functions defined with @function
Information functions: find out something about objects (FLAGS, MONEY)
List functions: manipulate lists (REVWORDS, FIRST)
Mail functions: manipulate @mail (MAIL, FOLDERSTATS)
--- 45,52 ----
Channel functions: Get information about channels (CTITLE, CWHO)
Communication functions: Send messages to objects (PEMIT, OEMIT)
Dbref functions: return dbref info related to objects (LOC, LEXITS)
Global functions: local MUSH-specific functions defined with @function
+ Html functions: output html tags for Pueblo-compatible clients
Information functions: find out something about objects (FLAGS, MONEY)
List functions: manipulate lists (REVWORDS, FIRST)
Mail functions: manipulate @mail (MAIL, FOLDERSTATS)
***************
*** 108,116 ****
Dbref functions return a dbref or list of dbrefs related to some value
on an object.
! con() entrances() followers() following() home()
! lcon() lexits() loc() locate() lparent()
! lsearch() next() num() owner() parent()
pmatch() rloc() rnum() room() where()
zone()
--- 108,117 ----
Dbref functions return a dbref or list of dbrefs related to some value
on an object.
! con() entrances() exit() followers() following()
! home() lcon() lexits() loc() locate()
! lparent() lplayers() lsearch() lvcon() lvexits()
! lvplayers() next() num() owner() parent()
pmatch() rloc() rnum() room() where()
zone()
***************
*** 134,152 ****
folderstats() mail() maildstats() mailfrom() mailfstats()
mailstats() mailstatus() mailsubject() mailtime()
- & Floating point functions
- Floating point functions operate on floating point numbers. Most of
- them return a floating-point number as a result. Floating point
- results can have at most 6 decimal places of precision.
-
- These functions only exist if floating point computation is enabled.
- Check "@config" to see if they are.
-
- acos() asin() atan() ceil() cos()
- e() exp() fdiv() floor() log()
- ln() pi() power() round() sin()
- sqrt() tan()
-
& List functions
List functions take at least one list of elements and return transformed
lists or one or more members of those lists. Most of these functions
--- 135,140 ----
***************
*** 159,165 ****
matchall() member() mix() munge() remove()
replace() rest() revwords() setdiff() setinter()
setunion() shuffle() sort() sortby() splice()
! wordpos() words()
See also: LISTS
& Math functions
--- 147,153 ----
matchall() member() mix() munge() remove()
replace() rest() revwords() setdiff() setinter()
setunion() shuffle() sort() sortby() splice()
! step() table() wordpos() words()
See also: LISTS
& Math functions
***************
*** 177,185 ****
These functions operate only with floating point numbers:
acos() asin() atan() atan2() ceil()
! cos() e() exp() fdiv() floor()
! fmod() ln() log() pi() power()
! round() sin() sqrt() tan()
These functions operate on n-dimensional vectors. A vector
is a delimiter-separated list of numbers (space-separated, by default):
--- 165,173 ----
These functions operate only with floating point numbers:
acos() asin() atan() atan2() ceil()
! cos() ctu() e() exp() fdiv()
! floor() fmod() ln() log() pi()
! power() round() sin() sqrt() tan()
These functions operate on n-dimensional vectors. A vector
is a delimiter-separated list of numbers (space-separated, by default):
***************
*** 204,214 ****
delete() edit() encrypt() escape() if()
ifelse() lcstr() left() lit() ljust()
merge() mid() ord() pos() regedit()
! regmatch() repeat() reverse() right() rjust()
! scramble() secure() sha1() space() spellnum()
! squish() strcat() strinsert() stripaccent() stripansi()
! strlen() strmatch() switch() trim() ucstr()
! wrap()
See also: STRINGS
& Time functions
--- 192,202 ----
delete() edit() encrypt() escape() if()
ifelse() lcstr() left() lit() ljust()
merge() mid() ord() pos() regedit()
! lpos() regmatch() repeat() reverse() right()
! rjust() scramble() secure() sha1() space()
! spellnum() squish() strcat() strinsert() stripaccents()
! stripansi() strlen() strmatch() switch() trim()
! ucstr() wrap()
See also: STRINGS
& Time functions
***************
*** 1670,1676 ****
or the enactor (%#). You CANNOT get the contents of anything else,
regardless of whether or not you have objects in it.
! See also: lexits(), con(), next()
& LCSTR()
lcstr(<string>)
--- 1658,1664 ----
or the enactor (%#). You CANNOT get the contents of anything else,
regardless of whether or not you have objects in it.
! See also: lexits(), lplayers(), con(), next(), lvcon()
& LCSTR()
lcstr(<string>)
***************
*** 1895,1900 ****
--- 1883,1905 ----
function.
See also: lvplayers(), lcon()
+ & LPOS()
+ lpos(<string>, <character>)
+
+ This function returns a list of the positions where <character> occupies
+ in <string>, with te first character of the string being 0. Note that
+ this differs from the pos() function, but is consistent with other string
+ functions like mid() and delete().
+
+ If <character> is a null argument, space is used.
+ If <character> is not found anywhere in <string>, an empty list is
+ returned.
+
+ Example:
+ > say lpos(a-bc-def-g, -)
+ You say, "1 4 8"
+
+ See also: pos()
& LSEARCH()
& SEARCH()
& LSEARCHR()
***************
*** 2296,2301 ****
--- 2301,2310 ----
acts just like @name <object>=<new name>. Consequently, if renaming
a player, you must use the player's password or be God.
+ name() with no arguments currently returns nothing. This should be an
+ error, but enough old code has been written that expects this behavior
+ that it will continue to do this for the time being. Don't rely on it.
+
Related functions: FULLNAME(), INAME()
& NAND()
nand(<boolean>, <boolean>,...)
***************
*** 3237,3242 ****
--- 3246,3252 ----
See also: @tel
& TEXTFILE()
+ & dynhelp()
textfile(<type>,<entry>)
textfile() returns the text of entries from cached text files (such as
*** 1_7_7.66/game/txt/hlp/pennflag.hlp Tue, 03 Dec 2002 21:42:38 -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.1 600)
--- 1_7_7.81(w)/game/txt/hlp/pennflag.hlp Sun, 22 Dec 2002 01:19:12 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1.2.1.1.1.1.2.1.4.1.2 600)
***************
*** 418,424 ****
and players. The server runs faster when fewer objects are checked for
$-commands; thus, any object which does not have $-commands on it should
be set NO_COMMAND. Many MUSHes choose to have all objects initially set
! NO_COMMAND at creation.
See also: USER-DEFINED COMMANDS
& NO_LEAVE
--- 418,424 ----
and players. The server runs faster when fewer objects are checked for
$-commands; thus, any object which does not have $-commands on it should
be set NO_COMMAND. Many MUSHes choose to have all objects initially set
! NO_COMMAND at creation. The flag has no effect on exits.
See also: USER-DEFINED COMMANDS
& NO_LEAVE
*** 1_7_7.66/game/mushcnf.dst Tue, 17 Dec 2002 00:18:29 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1.1.2 600)
--- 1_7_7.81(w)/game/mushcnf.dst Tue, 24 Dec 2002 15:44:48 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1.1.1.1.2 600)
***************
*** 162,172 ****
# for a single expression. This limits how much the stack size can increase,
# which could be useful if your host limits your stack (it will prevent
# a crash). The higher your allowed stack size limit, the larger the
! # mush process can grow, and the higher this can be set.
! # But remember that you need to recurse for every [ or { or function call
! # in your code, and those add up quickly. So this must often be set quite
! # high (e.g. 18000), alas. Setting it to '0' means unlimited.
! call_limit 10000
# The maximum number of milliseconds of CPU time that a single queue entry
# is allowed to use before aborting. Setting this to a low number will
--- 162,172 ----
# for a single expression. This limits how much the stack size can increase,
# which could be useful if your host limits your stack (it will prevent
# a crash). The higher your allowed stack size limit, the larger the
! # mush process can grow, and the higher this can be set. Generally
! # speaking, you won't ever see more than 8192 recursions, so that's
! # probably an upper limit, but most sane code shouldn't need more
! # than a couple thousand. Setting it to '0' means unlimited.
! call_limit 5000
# The maximum number of milliseconds of CPU time that a single queue entry
# is allowed to use before aborting. Setting this to a low number will
*** 1_7_7.66/utils/mkcmds.sh.SH Sat, 30 Nov 2002 22:32:58 -0600 dunemush (pennmush/g/16_mkcmds.sh. 1.2 750)
--- 1_7_7.81(w)/utils/mkcmds.sh.SH Sun, 22 Dec 2002 01:19:13 -0600 dunemush (pennmush/g/16_mkcmds.sh. 1.3 750)
***************
*** 67,77 ****
fi
rm -f ../hdrs/temp.h
! rm -f ../hdrs/temp.c
touch ../hdrs/timestamp
#rm ../hdrs/patches.h
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" >> ../hdrs/temp.h
$echo "#ifndef _PATCH_H" >> ../hdrs/temp.h
$echo "#define _PATCH_H" >> ../hdrs/temp.h
if [ "X$pat" = "X" ]; then
--- 67,77 ----
fi
rm -f ../hdrs/temp.h
! rm -f ../src/temp.c
touch ../hdrs/timestamp
#rm ../hdrs/patches.h
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" > ../hdrs/temp.h
$echo "#ifndef _PATCH_H" >> ../hdrs/temp.h
$echo "#define _PATCH_H" >> ../hdrs/temp.h
if [ "X$pat" = "X" ]; then
***************
*** 90,97 ****
$echo "Rebuilding command switch file"
snum=1
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" >> ../src/temp.c
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" >> ../hdrs/temp.h
$echo "SWITCH_VALUE switch_list[] = {" >> ../src/temp.c
for s in `cat ../src/SWITCHES | sort`; do
$echo "#define SWITCH_$s $snum" >> ../hdrs/temp.h
--- 90,97 ----
$echo "Rebuilding command switch file"
snum=1
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" > ../src/temp.c
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" > ../hdrs/temp.h
$echo "SWITCH_VALUE switch_list[] = {" >> ../src/temp.c
for s in `cat ../src/SWITCHES | sort`; do
$echo "#define SWITCH_$s $snum" >> ../hdrs/temp.h
***************
*** 113,126 ****
mv -f ../src/temp.c ../src/switchinc.c
$echo "Rebuilding command prototype file"
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" >> ../hdrs/temp.h
for c in `grep "^COMMAND *(" ../src/*.c | cut -f2 -d\( | cut -f1 -d\) | sort | uniq`; do
$echo >>../hdrs/temp.h "COMMAND_PROTO($c);"
done
mv -f ../hdrs/temp.h ../hdrs/cmds.h
$echo "Rebuilding function prototype file"
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" >> ../hdrs/temp.h
for c in `grep "^FUNCTION *(" ../src/*.c | cut -f2 -d\( | cut -f1 -d\) | sort | uniq`; do
$echo >>../hdrs/temp.h "FUNCTION_PROTO($c);"
done
--- 113,126 ----
mv -f ../src/temp.c ../src/switchinc.c
$echo "Rebuilding command prototype file"
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" > ../hdrs/temp.h
for c in `grep "^COMMAND *(" ../src/*.c | cut -f2 -d\( | cut -f1 -d\) | sort | uniq`; do
$echo >>../hdrs/temp.h "COMMAND_PROTO($c);"
done
mv -f ../hdrs/temp.h ../hdrs/cmds.h
$echo "Rebuilding function prototype file"
! $echo "/* AUTOGENERATED FILE. DO NOT EDIT */" > ../hdrs/temp.h
for c in `grep "^FUNCTION *(" ../src/*.c | cut -f2 -d\( | cut -f1 -d\) | sort | uniq`; do
$echo >>../hdrs/temp.h "FUNCTION_PROTO($c);"
done
*** 1_7_7.66/src/local.dst Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/19_local.dst 1.9 660)
--- 1_7_7.81(w)/src/local.dst Wed, 25 Dec 2002 00:34:21 -0600 dunemush (pennmush/b/19_local.dst 1.11 660)
***************
*** 98,104 ****
}
- #ifdef LOCAL_DATA
/* For serious hackers only */
/* Those who are depraved enough to do so (Like me), can always
--- 98,103 ----
***************
*** 122,129 ****
*/
void
! local_data_create(object)
! dbref object;
{
}
--- 121,127 ----
*/
void
! local_data_create(dbref object __attribute__ ((__unused__)))
{
}
***************
*** 136,144 ****
*/
void
! local_data_clone(clone, source)
! dbref clone;
! dbref source;
{
}
--- 134,141 ----
*/
void
! local_data_clone(dbref clone __attribute__ ((__unused__)),
! dbref source __attribute__ ((__unused__)))
{
}
***************
*** 147,159 ****
*/
void
! local_data_free(object)
! dbref object;
{
}
/* Initiation of objects after a reload or dumping to disk should
* be handled in local_dump_database() and local_startup().
*/
-
- #endif
--- 144,153 ----
*/
void
! local_data_free(dbref object __attribute__ ((__unused__)))
{
}
/* Initiation of objects after a reload or dumping to disk should
* be handled in local_dump_database() and local_startup().
*/
*** 1_7_7.66/src/wiz.c Tue, 17 Dec 2002 00:18:29 -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.3 660)
--- 1_7_7.81(w)/src/wiz.c Wed, 25 Dec 2002 00:34:25 -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.2 660)
***************
*** 967,1025 ****
* Powers stuff
*/
-
- #ifdef WIN32
- #pragma warning( disable : 4761) /* Disable bogus conversion warning */
- #endif
- /* ARGSUSED */
- FUNCTION(fun_haspower)
- {
- dbref it;
- object_flag_type pwr;
-
- it = match_thing(executor, args[0]);
- if (it == NOTHING) {
- safe_str("#-1", buff, bp);
- return;
- }
- if (HASPOWER_RESTRICTED)
- if (!Can_Examine(executor, it)) {
- notify(executor,
- T("We could let you see that, but then we'd have to kill you."));
- safe_str("#-1", buff, bp);
- return;
- }
- pwr = find_power(args[1]);
- if (pwr == -1)
- safe_str(T("#-1 NO SUCH POWER"), buff, bp);
- else
- safe_boolean(Powers(it) & pwr, buff, bp);
- }
-
- /* ARGSUSED */
- FUNCTION(fun_powers)
- {
- dbref it;
-
- it = match_thing(executor, args[0]);
- if (it == NOTHING) {
- safe_str("#-1", buff, bp);
- return;
- }
- if (HASPOWER_RESTRICTED)
- if (!Can_Examine(executor, it)) {
- notify(executor,
- T("We could let you see that, but then we'd have to kill you."));
- safe_str("#-1", buff, bp);
- return;
- }
- safe_str(power_description(it), buff, bp);
- }
-
- #ifdef WIN32
- #pragma warning( default : 4761) /* Re-enable conversion warning */
- #endif
-
void
do_power(dbref player, const char *name, const char *power)
{
--- 967,972 ----
*** 1_7_7.66/src/warnings.c Thu, 12 Dec 2002 21:23:20 -0600 dunemush (pennmush/b/25_warnings.c 1.23 660)
--- 1_7_7.81(w)/src/warnings.c Wed, 25 Dec 2002 00:34:25 -0600 dunemush (pennmush/b/25_warnings.c 1.21.1.2 660)
***************
*** 428,436 ****
warn_type flags;
/* Skip it if it's NOWARN or the player checking is the owner and
! * is NOWARN
*/
! if (Flags(i) & NOWARN)
return;
/* If the owner is checking, use the flags on the object, and fall back
--- 428,436 ----
warn_type flags;
/* Skip it if it's NOWARN or the player checking is the owner and
! * is NOWARN. Also skip GOING objects.
*/
! if (Going(i) || NoWarn(i))
return;
/* If the owner is checking, use the flags on the object, and fall back
*** 1_7_7.66/src/speech.c Wed, 20 Nov 2002 14:36:48 -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 660)
--- 1_7_7.81(w)/src/speech.c Wed, 25 Dec 2002 00:34:25 -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 660)
***************
*** 397,403 ****
DOLIST(first, first) {
overheard = 1;
for (who = 0; who < gcount; who++) {
! if (first == good[who]) {
overheard = 0;
break;
}
--- 397,403 ----
DOLIST(first, first) {
overheard = 1;
for (who = 0; who < gcount; who++) {
! if ((first == player) || (first == good[who])) {
overheard = 0;
break;
}
*** 1_7_7.66/src/player.c Sat, 07 Dec 2002 16:26:26 -0600 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4.1.9 660)
--- 1_7_7.81(w)/src/player.c Wed, 25 Dec 2002 00:34:24 -0600 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4.1.10 660)
***************
*** 411,419 ****
current_state.players++;
- #ifdef LOCAL_DATA
local_data_create(player);
- #endif
return player;
}
--- 411,417 ----
*** 1_7_7.66/src/parse.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/b/48_parse.c 1.23.1.10.1.2.1.1.1.1.1.2.1.2.1.7 660)
--- 1_7_7.81(w)/src/parse.c Wed, 25 Dec 2002 00:34:24 -0600 dunemush (pennmush/b/48_parse.c 1.23.1.10.1.2.1.1.1.1.1.2.1.2.1.9 660)
***************
*** 1046,1051 ****
--- 1046,1054 ----
mush_free((Malloc_t) buff, "process_expression.buffer_extension");
}
}
+ /* Once we cross call limit, we stay in error */
+ if (pe_info && CALL_LIMIT && pe_info->call_depth <= CALL_LIMIT)
+ pe_info->call_depth--;
if (made_info)
mush_free((Malloc_t) pe_info, "process_expression.pe_info");
if (old_iter_limit != -1) {
*** 1_7_7.66/src/look.c Tue, 17 Dec 2002 21:01:05 -0600 dunemush (pennmush/c/4_look.c 1.21.1.2.1.21 660)
--- 1_7_7.81(w)/src/look.c Wed, 25 Dec 2002 00:34:24 -0600 dunemush (pennmush/c/4_look.c 1.21.1.2.1.9.1.2 660)
***************
*** 656,664 ****
static char buf[BUFFER_LEN];
CHANLIST *c;
! if (Chanlist(player)) {
strcpy(buf, T("Channels:"));
! for (c = Chanlist(player); c; c = c->next)
sprintf(buf, "%s %s", buf, ChanName(c->chan));
} else
strcpy(buf, T("Channels: *NONE*"));
--- 656,664 ----
static char buf[BUFFER_LEN];
CHANLIST *c;
! if ((c = Chanlist(player))) {
strcpy(buf, T("Channels:"));
! for (; c; c = c->next)
sprintf(buf, "%s %s", buf, ChanName(c->chan));
} else
strcpy(buf, T("Channels: *NONE*"));
***************
*** 1273,1279 ****
if (dh->skipdef && ptr) {
/* Standard attribute. Get the default perms, if any. */
/* Are we different? If so, do as usual */
! if (AL_FLAGS(atr) != AL_FLAGS(ptr))
privs = privs_to_string(attr_privs, AL_FLAGS(atr));
} else {
privs = privs_to_string(attr_privs, AL_FLAGS(atr));
--- 1273,1280 ----
if (dh->skipdef && ptr) {
/* Standard attribute. Get the default perms, if any. */
/* Are we different? If so, do as usual */
! int npmflags = AL_FLAGS(ptr) & (~AF_PREFIXMATCH);
! if (AL_FLAGS(atr) != AL_FLAGS(ptr) && AL_FLAGS(atr) != npmflags)
privs = privs_to_string(attr_privs, AL_FLAGS(atr));
} else {
privs = privs_to_string(attr_privs, AL_FLAGS(atr));
*** 1_7_7.66/src/game.c Tue, 17 Dec 2002 00:18:29 -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.2 660)
--- 1_7_7.81(w)/src/game.c Wed, 25 Dec 2002 00:34:23 -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.3 660)
***************
*** 1727,1732 ****
--- 1727,1733 ----
extern HASHTAB htab_player_list;
extern HASHTAB htab_reserved_aliases;
extern HASHTAB help_files;
+ extern HASHTAB htab_objdata;
extern StrTree atr_names;
extern StrTree lock_names;
extern StrTree object_names;
***************
*** 1746,1751 ****
--- 1747,1753 ----
hash_stats(player, &htab_player_list, "Players");
hash_stats(player, &htab_reserved_aliases, "Aliases");
hash_stats(player, &help_files, "HelpFiles");
+ hash_stats(player, &htab_objdata, "ObjData");
notify(player, "Prefix Trees:");
ptab_stats_header(player);
*** 1_7_7.66/src/funstr.c Tue, 17 Dec 2002 15:42:31 -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.7 660)
--- 1_7_7.81(w)/src/funstr.c Wed, 25 Dec 2002 00:34:23 -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)
***************
*** 484,489 ****
--- 484,512 ----
}
/* ARGSUSED */
+ FUNCTION(fun_lpos)
+ {
+ char *pos;
+ char c = ' ';
+ size_t n, len;
+ int first = 1;
+
+ if (args[1][0])
+ c = args[1][0];
+
+ pos = remove_markup(args[0], &len);
+ for (n = 0; n < len; n++)
+ if (pos[n] == c) {
+ if (first)
+ first = 0;
+ else
+ safe_chr(' ', buff, bp);
+ safe_integer(n, buff, bp);
+ }
+ }
+
+
+ /* ARGSUSED */
FUNCTION(fun_strmatch)
{
char tbuf[BUFFER_LEN];
***************
*** 1140,1146 ****
{
int n;
for (n = 0; n < arglens[0]; n++) {
! safe_chr((char) accent_table[(unsigned char) args[0][n]].base, buff, bp);
}
}
--- 1163,1172 ----
{
int n;
for (n = 0; n < arglens[0]; n++) {
! if (accent_table[(unsigned char) args[0][n]].base)
! safe_str(accent_table[(unsigned char) args[0][n]].base, buff, bp);
! else
! safe_chr(args[0][n], buff, bp);
}
}
*** 1_7_7.66/src/fundb.c Sat, 07 Dec 2002 16:26:26 -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.1.1 660)
--- 1_7_7.81(w)/src/fundb.c Wed, 25 Dec 2002 00:34:23 -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.2 660)
***************
*** 115,122 ****
pattern = (char *) "*"; /* match anything */
thing = match_thing(executor, args[0]);
! if (thing == NOTHING) {
! safe_str(T(e_match), buff, bp);
return;
}
if (!Can_Examine(executor, thing)) {
--- 115,122 ----
pattern = (char *) "*"; /* match anything */
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing)) {
! safe_str(T(e_notvis), buff, bp);
return;
}
if (!Can_Examine(executor, thing)) {
***************
*** 134,141 ****
{
dbref thing;
thing = match_thing(executor, args[0]);
! if (thing == NOTHING) {
! safe_str(T(e_match), buff, bp);
return;
}
if (!Can_Examine(executor, thing)) {
--- 134,141 ----
{
dbref thing;
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing)) {
! safe_str(T(e_notvis), buff, bp);
return;
}
if (!Can_Examine(executor, thing)) {
***************
*** 152,158 ****
ATTR *a;
thing = match_thing(executor, args[0]);
! if (thing == NOTHING) {
safe_str(T(e_notvis), buff, bp);
return;
}
--- 152,158 ----
ATTR *a;
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing)) {
safe_str(T(e_notvis), buff, bp);
return;
}
***************
*** 186,192 ****
}
*s++ = '\0';
thing = match_thing(executor, args[0]);
! if (thing == NOTHING) {
safe_str(T(e_notvis), buff, bp);
return;
}
--- 186,192 ----
}
*s++ = '\0';
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing)) {
safe_str(T(e_notvis), buff, bp);
return;
}
***************
*** 202,208 ****
dbref thing;
thing = match_thing(executor, args[0]);
! if (thing == NOTHING) {
safe_str(T(e_notvis), buff, bp);
return;
}
--- 202,208 ----
dbref thing;
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing)) {
safe_str(T(e_notvis), buff, bp);
return;
}
***************
*** 252,258 ****
ATTR *a;
thing = match_thing(executor, args[0]);
! if (thing == NOTHING) {
safe_str(T(e_notvis), buff, bp);
return;
}
--- 252,258 ----
ATTR *a;
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing)) {
safe_str(T(e_notvis), buff, bp);
return;
}
***************
*** 294,300 ****
}
*s++ = '\0';
thing = match_thing(executor, args[0]);
! if (thing == NOTHING) {
safe_str(T(e_notvis), buff, bp);
return;
}
--- 294,300 ----
}
*s++ = '\0';
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing)) {
safe_str(T(e_notvis), buff, bp);
return;
}
***************
*** 423,430 ****
if ((p = strchr(args[0], '/')))
*p++ = '\0';
thing = match_thing(executor, args[0]);
! if (thing == NOTHING) {
! safe_str("#-1", buff, bp);
return;
}
if (p) {
--- 423,430 ----
if ((p = strchr(args[0], '/')))
*p++ = '\0';
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing)) {
! safe_str(T(e_notvis), buff, bp);
return;
}
if (p) {
***************
*** 441,446 ****
--- 441,498 ----
}
}
+ #ifdef WIN32
+ #pragma warning( disable : 4761) /* Disable bogus conversion warning */
+ #endif
+ /* ARGSUSED */
+ FUNCTION(fun_haspower)
+ {
+ dbref it;
+ object_flag_type pwr;
+
+ it = match_thing(executor, args[0]);
+ if (!GoodObject(it)) {
+ safe_str(T(e_notvis), buff, bp);
+ return;
+ }
+ if (HASPOWER_RESTRICTED)
+ if (!Can_Examine(executor, it)) {
+ notify(executor,
+ T("We could let you see that, but then we'd have to kill you."));
+ safe_str("#-1", buff, bp);
+ return;
+ }
+ pwr = find_power(args[1]);
+ if (pwr == -1)
+ safe_str(T("#-1 NO SUCH POWER"), buff, bp);
+ else
+ safe_boolean(Powers(it) & pwr, buff, bp);
+ }
+
+ /* ARGSUSED */
+ FUNCTION(fun_powers)
+ {
+ dbref it;
+
+ it = match_thing(executor, args[0]);
+ if (!GoodObject(it)) {
+ safe_str(T(e_notvis), buff, bp);
+ return;
+ }
+ if (HASPOWER_RESTRICTED)
+ if (!Can_Examine(executor, it)) {
+ notify(executor,
+ T("We could let you see that, but then we'd have to kill you."));
+ safe_str("#-1", buff, bp);
+ return;
+ }
+ safe_str(power_description(it), buff, bp);
+ }
+
+ #ifdef WIN32
+ #pragma warning( default : 4761) /* Re-enable conversion warning */
+ #endif
+
/* ARGSUSED */
FUNCTION(fun_num)
{
***************
*** 792,800 ****
dbref it = match_thing(executor, args[0]);
dbref thing = match_thing(executor, args[1]);
! if (it == NOTHING)
safe_str(T("#-1 ARG1 NOT FOUND"), buff, bp);
! else if (thing == NOTHING)
safe_str(T("#-1 ARG2 NOT FOUND"), buff, bp);
else if (!(controls(executor, it) || controls(executor, thing)
|| See_All(executor)))
--- 844,852 ----
dbref it = match_thing(executor, args[0]);
dbref thing = match_thing(executor, args[1]);
! if (!GoodObject(it))
safe_str(T("#-1 ARG1 NOT FOUND"), buff, bp);
! else if (!GoodObject(thing))
safe_str(T("#-1 ARG2 NOT FOUND"), buff, bp);
else if (!(controls(executor, it) || controls(executor, thing)
|| See_All(executor)))
***************
*** 814,830 ****
* anything or be seen.
*/
! dbref it, thing;
char *name;
ATTR *a;
! if ((it = match_thing(executor, args[0])) == NOTHING) {
! safe_chr('0', buff, bp);
return;
}
if ((name = strchr(args[1], '/')))
*name++ = '\0';
! if ((thing = match_thing(executor, args[1])) == NOTHING) {
safe_chr('0', buff, bp);
return;
}
--- 866,884 ----
* anything or be seen.
*/
! dbref it = match_thing(executor, args[0]);
! dbref thing;
char *name;
ATTR *a;
! if (!GoodObject(it)) {
! safe_str(T(e_notvis), buff, bp);
return;
}
if ((name = strchr(args[1], '/')))
*name++ = '\0';
! thing = match_thing(executor, args[1]);
! if (!GoodObject(thing)) {
safe_chr('0', buff, bp);
return;
}
***************
*** 840,847 ****
FUNCTION(fun_type)
{
dbref it = match_thing(executor, args[0]);
! if (it == NOTHING) {
! safe_str("#-1", buff, bp);
return;
}
switch (Typeof(it)) {
--- 894,901 ----
FUNCTION(fun_type)
{
dbref it = match_thing(executor, args[0]);
! if (!GoodObject(it)) {
! safe_str(T(e_notvis), buff, bp);
return;
}
switch (Typeof(it)) {
***************
*** 884,891 ****
safe_boolean(AL_FLAGS(attrib) & f, buff, bp);
} else {
thing = match_thing(executor, args[0]);
! if (thing == NOTHING)
! safe_str("#-1", buff, bp);
else
safe_boolean(sees_flag(executor, thing, args[1]), buff, bp);
}
--- 938,945 ----
safe_boolean(AL_FLAGS(attrib) & f, buff, bp);
} else {
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing))
! safe_str(T(e_notvis), buff, bp);
else
safe_boolean(sees_flag(executor, thing, args[1]), buff, bp);
}
***************
*** 895,902 ****
FUNCTION(fun_hastype)
{
dbref it = match_thing(executor, args[0]);
! if (it == NOTHING) {
! safe_str("#-1", buff, bp);
return;
}
switch (*args[1]) {
--- 949,956 ----
FUNCTION(fun_hastype)
{
dbref it = match_thing(executor, args[0]);
! if (!GoodObject(it)) {
! safe_str(T(e_notvis), buff, bp);
return;
}
switch (*args[1]) {
***************
*** 972,978 ****
#endif
return;
}
! if ((it != NOTHING) && (ltype != NULL)
&& Can_Read_Lock(executor, it, ltype)) {
safe_str(unparse_boolexp(executor, getlock(it, ltype), UB_DBREF), buff, bp);
return;
--- 1026,1032 ----
#endif
return;
}
! if (GoodObject(it) && (ltype != NULL)
&& Can_Read_Lock(executor, it, ltype)) {
safe_str(unparse_boolexp(executor, getlock(it, ltype), UB_DBREF), buff, bp);
return;
***************
*** 995,1001 ****
it = match_thing(executor, args[0]);
ltype = get_locktype(p);
! if ((it == NOTHING) || (ltype == NULL) || !Can_Read_Lock(executor, it, ltype)) {
safe_str("#-1", buff, bp);
return;
}
--- 1049,1055 ----
it = match_thing(executor, args[0]);
ltype = get_locktype(p);
! if (!GoodObject(it) || (ltype == NULL) || !Can_Read_Lock(executor, it, ltype)) {
safe_str("#-1", buff, bp);
return;
}
***************
*** 1009,1017 ****
dbref obj = match_thing(executor, args[0]);
dbref victim = match_thing(executor, args[1]);
! if (obj == NOTHING)
safe_str(T("#-1 ARG1 NOT FOUND"), buff, bp);
! else if (victim == NOTHING)
safe_str(T("#-1 ARG2 NOT FOUND"), buff, bp);
else
safe_boolean(Can_Locate(obj, victim), buff, bp);
--- 1063,1071 ----
dbref obj = match_thing(executor, args[0]);
dbref victim = match_thing(executor, args[1]);
! if (!GoodObject(obj))
safe_str(T("#-1 ARG1 NOT FOUND"), buff, bp);
! else if (!GoodObject(victim))
safe_str(T("#-1 ARG2 NOT FOUND"), buff, bp);
else
safe_boolean(Can_Locate(obj, victim), buff, bp);
***************
*** 1021,1027 ****
FUNCTION(fun_loc)
{
dbref it = match_thing(executor, args[0]);
! if ((it != NOTHING) && Can_Locate(executor, it))
safe_dbref(Location(it), buff, bp);
else
safe_str("#-1", buff, bp);
--- 1075,1081 ----
FUNCTION(fun_loc)
{
dbref it = match_thing(executor, args[0]);
! if (GoodObject(it) && Can_Locate(executor, it))
safe_dbref(Location(it), buff, bp);
else
safe_str("#-1", buff, bp);
***************
*** 1033,1039 ****
dbref it = match_thing(executor, args[0]);
char *s;
! if (it != NOTHING) {
s = (char *) ctime(&CreTime(it));
s[strlen(s) - 1] = '\0';
if (s[8] == ' ')
--- 1087,1093 ----
dbref it = match_thing(executor, args[0]);
char *s;
! if (GoodObject(it)) {
s = (char *) ctime(&CreTime(it));
s[strlen(s) - 1] = '\0';
if (s[8] == ' ')
***************
*** 1041,1063 ****
safe_str(s, buff, bp);
return;
}
! safe_str("#-1", buff, bp);
}
/* ARGSUSED */
FUNCTION(fun_mtime)
{
dbref it = match_thing(executor, args[0]);
! char *s;
! if ((it != NOTHING) && Can_Examine(executor, it) && !IsPlayer(it)) {
! s = (char *) ctime(&ModTime(it));
s[strlen(s) - 1] = '\0';
if (s[8] == ' ')
s[8] = '0';
safe_str(s, buff, bp);
- return;
}
- safe_str("#-1", buff, bp);
}
/* ARGSUSED */
--- 1095,1118 ----
safe_str(s, buff, bp);
return;
}
! safe_str(T(e_notvis), buff, bp);
}
/* ARGSUSED */
FUNCTION(fun_mtime)
{
dbref it = match_thing(executor, args[0]);
! if (!GoodObject(it))
! safe_str(T(e_notvis), buff, bp);
! else if (!Can_Examine(executor, it) || IsPlayer(it))
! safe_str(T(e_perm), buff, bp);
! else {
! char *s = (char *) ctime(&ModTime(it));
s[strlen(s) - 1] = '\0';
if (s[8] == ' ')
s[8] = '0';
safe_str(s, buff, bp);
}
}
/* ARGSUSED */
***************
*** 1066,1072 ****
/* finds the "real" location of an object */
dbref it = match_thing(executor, args[0]);
! if ((it != NOTHING) && Can_Locate(executor, it))
safe_dbref(where_is(it), buff, bp);
else
safe_str("#-1", buff, bp);
--- 1121,1127 ----
/* finds the "real" location of an object */
dbref it = match_thing(executor, args[0]);
! if (GoodObject(it) && Can_Locate(executor, it))
safe_dbref(where_is(it), buff, bp);
else
safe_str("#-1", buff, bp);
***************
*** 1075,1092 ****
/* ARGSUSED */
FUNCTION(fun_room)
{
- dbref room;
dbref it = match_thing(executor, args[0]);
! if ((it != NOTHING) && Can_Locate(executor, it)) {
! room = absolute_room(it);
if (!GoodObject(room)) {
! safe_str("#-1", buff, bp);
return;
}
safe_dbref(room, buff, bp);
- } else {
- safe_str(T(e_perm), buff, bp);
}
}
--- 1130,1148 ----
/* ARGSUSED */
FUNCTION(fun_room)
{
dbref it = match_thing(executor, args[0]);
! if (!GoodObject(it))
! safe_str(T(e_notvis), buff, bp);
! else if (!Can_Locate(executor, it))
! safe_str(T(e_perm), buff, bp);
! else {
! dbref room = absolute_room(it);
if (!GoodObject(room)) {
! safe_strl("#-1", 3, buff, bp);
return;
}
safe_dbref(room, buff, bp);
}
}
***************
*** 1099,1106 ****
if (deep > 20)
deep = 20;
! if ((it != NOTHING) && Can_Locate(executor, it)) {
for (i = 0; i < deep; i++) {
if (!GoodObject(it) || IsRoom(it))
break;
--- 1155,1168 ----
if (deep > 20)
deep = 20;
+ if (deep < 0)
+ deep = 0;
! if (!GoodObject(it))
! safe_str(T(e_notvis), buff, bp);
! else if (!Can_Locate(executor, it))
! safe_str(T(e_perm), buff, bp);
! else {
for (i = 0; i < deep; i++) {
if (!GoodObject(it) || IsRoom(it))
break;
***************
*** 1109,1115 ****
safe_dbref(it, buff, bp);
return;
}
- safe_str("#-1", buff, bp);
}
/* ARGSUSED */
--- 1171,1176 ----
***************
*** 1130,1140 ****
#endif
}
it = match_thing(executor, args[0]);
! if (!GoodObject(it) || !Can_Examine(executor, it)) {
! safe_str("#-1", buff, bp);
! return;
! }
! safe_dbref(Zone(it), buff, bp);
}
/* ARGSUSED */
--- 1191,1202 ----
#endif
}
it = match_thing(executor, args[0]);
! if (!GoodObject(it))
! safe_str(T(e_notvis), buff, bp);
! else if (!Can_Examine(executor, it))
! safe_str(T(e_perm), buff, bp);
! else
! safe_dbref(Zone(it), buff, bp);
}
/* ARGSUSED */
***************
*** 1155,1165 ****
#endif
}
it = match_thing(executor, args[0]);
! if (!GoodObject(it) || !Can_Examine(executor, it)) {
! safe_str("#-1", buff, bp);
! return;
! }
! safe_dbref(Parent(it), buff, bp);
}
/* ARGSUSED */
--- 1217,1228 ----
#endif
}
it = match_thing(executor, args[0]);
! if (!GoodObject(it))
! safe_str(T(e_notvis), buff, bp);
! else if (!Can_Examine(executor, it))
! safe_str(T(e_perm), buff, bp);
! else
! safe_dbref(Parent(it), buff, bp);
}
/* ARGSUSED */
***************
*** 1170,1176 ****
it = match_thing(executor, args[0]);
if (!GoodObject(it)) {
! safe_str("#-1", buff, bp);
return;
}
safe_dbref(it, buff, bp);
--- 1233,1239 ----
it = match_thing(executor, args[0]);
if (!GoodObject(it)) {
! safe_str(T(e_notvis), buff, bp);
return;
}
safe_dbref(it, buff, bp);
***************
*** 1188,1202 ****
FUNCTION(fun_home)
{
dbref it = match_thing(executor, args[0]);
! if ((it == NOTHING) || !Can_Examine(executor, it) || IsRoom(it)) {
! safe_str("#-1", buff, bp);
! return;
! }
! if (IsExit(it)) {
safe_dbref(Source(it), buff, bp);
! } else {
safe_dbref(Home(it), buff, bp);
- }
}
/* ARGSUSED */
--- 1251,1266 ----
FUNCTION(fun_home)
{
dbref it = match_thing(executor, args[0]);
! if (!GoodObject(it))
! safe_str(T(e_notvis), buff, bp);
! else if (!Can_Examine(executor, it))
! safe_str(T(e_perm), buff, bp);
! else if (IsExit(it))
safe_dbref(Source(it), buff, bp);
! else if (IsRoom(it))
! safe_dbref(Location(it), buff, bp);
! else
safe_dbref(Home(it), buff, bp);
}
/* ARGSUSED */
***************
*** 1205,1211 ****
/* Are we asking about something's money? */
dbref it = match_result(executor, args[0], NOTYPE, MAT_EVERYTHING);
! if (it == NOTHING) {
/* Well, are we asking for the plural/singular for some amount? */
if (is_integer(args[0])) {
int a = parse_integer(args[0]);
--- 1269,1275 ----
/* Are we asking about something's money? */
dbref it = match_result(executor, args[0], NOTYPE, MAT_EVERYTHING);
! if (!GoodObject(it)) {
/* Well, are we asking for the plural/singular for some amount? */
if (is_integer(args[0])) {
int a = parse_integer(args[0]);
***************
*** 1250,1257 ****
safe_dbref(attrib->creator, buff, bp);
} else {
thing = match_thing(executor, args[0]);
! if (thing == NOTHING)
! safe_str("#-1", buff, bp);
else
safe_dbref(Owner(thing), buff, bp);
}
--- 1314,1321 ----
safe_dbref(attrib->creator, buff, bp);
} else {
thing = match_thing(executor, args[0]);
! if (!GoodObject(thing))
! safe_str(T(e_notvis), buff, bp);
else
safe_dbref(Owner(thing), buff, bp);
}
***************
*** 1262,1267 ****
--- 1326,1334 ----
{
dbref it;
+ /* Special case for backward compatibility */
+ if (nargs == 0)
+ return;
if (nargs == 2) {
if (!command_check_byname(executor, "@name") || fun->flags & FN_NOSIDEFX) {
safe_str(T(e_perm), buff, bp);
***************
*** 1274,1299 ****
return;
#endif
}
! if ((it = match_thing(executor, args[0])) != NOTHING)
safe_str(shortname(it), buff, bp);
}
/* ARGSUSED */
FUNCTION(fun_fullname)
{
! dbref it;
!
! if ((it = match_thing(executor, args[0])) != NOTHING)
safe_str(Name(it), buff, bp);
}
/* ARGSUSED */
FUNCTION(fun_iname)
{
! dbref it;
char tbuf1[BUFFER_LEN];
! if ((it = match_thing(executor, args[0])) != NOTHING) {
/* You must either be see_all, control it, or be inside it */
if (!(controls(executor, it) || See_All(executor) ||
(Location(executor) == it))) {
--- 1341,1370 ----
return;
#endif
}
! it = match_thing(executor, args[0]);
! if (GoodObject(it))
safe_str(shortname(it), buff, bp);
+ else
+ safe_str(T(e_notvis), buff, bp);
}
/* ARGSUSED */
FUNCTION(fun_fullname)
{
! dbref it = match_thing(executor, args[0]);
! if (GoodObject(it))
safe_str(Name(it), buff, bp);
+ else
+ safe_str(T(e_notvis), buff, bp);
}
/* ARGSUSED */
FUNCTION(fun_iname)
{
! dbref it = match_thing(executor, args[0]);
char tbuf1[BUFFER_LEN];
! if (GoodObject(it)) {
/* You must either be see_all, control it, or be inside it */
if (!(controls(executor, it) || See_All(executor) ||
(Location(executor) == it))) {
***************
*** 1307,1313 ****
else
safe_str(accented_name(it), buff, bp);
} else
! safe_str(T(e_match), buff, bp);
}
/* ARGSUSED */
--- 1378,1384 ----
else
safe_str(accented_name(it), buff, bp);
} else
! safe_str(T(e_notvis), buff, bp);
}
/* ARGSUSED */
***************
*** 1363,1369 ****
/* find out what we're matching in relation to */
looker = match_thing(executor, args[0]);
! if (looker == NOTHING) {
notify(executor, T("I don't see that here."));
safe_str("#-1", buff, bp);
return;
--- 1434,1440 ----
/* find out what we're matching in relation to */
looker = match_thing(executor, args[0]);
! if (!GoodObject(looker)) {
notify(executor, T("I don't see that here."));
safe_str("#-1", buff, bp);
return;
***************
*** 1644,1650 ****
char *tp;
dbref it = match_thing(executor, args[0]);
! if (it == NOTHING) {
safe_str(T(e_notvis), buff, bp);
return;
}
--- 1715,1721 ----
char *tp;
dbref it = match_thing(executor, args[0]);
! if (!GoodObject(it)) {
safe_str(T(e_notvis), buff, bp);
return;
}
***************
*** 1680,1686 ****
} else {
who = lookup_player(args[0]);
if (who == NOTHING) {
! safe_str(T("#-1 NOT FOUND"), buff, bp);
return;
}
}
--- 1751,1757 ----
} else {
who = lookup_player(args[0]);
if (who == NOTHING) {
! safe_str(T(e_notvis), buff, bp);
return;
}
}
***************
*** 1888,1894 ****
char *res;
thing = match_controlled(executor, args[0]);
! if (thing == NOTHING) {
safe_str(T("#-1 INVALID OBJECT"), buff, bp);
return;
}
--- 1959,1965 ----
char *res;
thing = match_controlled(executor, args[0]);
! if (!GoodObject(thing)) {
safe_str(T("#-1 INVALID OBJECT"), buff, bp);
return;
}
***************
*** 1910,1916 ****
char *res;
thing = match_controlled(executor, args[0]);
! if (thing == NOTHING) {
safe_str(T("#-1 INVALID OBJECT"), buff, bp);
return;
}
--- 1981,1987 ----
char *res;
thing = match_controlled(executor, args[0]);
! if (!GoodObject(thing)) {
safe_str(T("#-1 INVALID OBJECT"), buff, bp);
return;
}
*** 1_7_7.66/src/function.c Tue, 17 Dec 2002 00:18:29 -0600 dunemush (pennmush/c/18_function.c 1.29.1.14.1.3.1.6.1.1.1.1.1.14.1.2.1.2 660)
--- 1_7_7.81(w)/src/function.c Wed, 25 Dec 2002 00:34:23 -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.2 660)
***************
*** 297,302 ****
--- 297,303 ----
{"LOCK", fun_lock, 1, 2, FN_REG},
{"LPARENT", fun_lparent, 1, 1, FN_REG},
{"LPLAYERS", fun_lplayers, 1, 1, FN_REG},
+ {"LPOS", fun_lpos, 2, 2, FN_REG},
{"LSEARCH", fun_lsearch, 1, 5, FN_REG},
{"LSEARCHR", fun_lsearch, 1, 5, FN_REG},
{"LSTATS", fun_lstats, 0, 1, FN_REG},
***************
*** 334,340 ****
{"MUL", fun_mul, 2, INT_MAX, FN_REG},
{"MUNGE", fun_munge, 3, 5, FN_REG},
{"MWHO", fun_lwho, 0, 0, FN_REG},
! {"NAME", fun_name, 1, 2, FN_REG},
{"NAND", fun_nand, 1, INT_MAX, FN_REG},
{"NATTR", fun_nattr, 1, 1, FN_REG},
{"NEARBY", fun_nearby, 2, 2, FN_REG},
--- 335,341 ----
{"MUL", fun_mul, 2, INT_MAX, FN_REG},
{"MUNGE", fun_munge, 3, 5, FN_REG},
{"MWHO", fun_lwho, 0, 0, FN_REG},
! {"NAME", fun_name, 0, 2, FN_REG},
{"NAND", fun_nand, 1, INT_MAX, FN_REG},
{"NATTR", fun_nattr, 1, 1, FN_REG},
{"NEARBY", fun_nearby, 2, 2, FN_REG},
*** 1_7_7.66/src/flags.c Sat, 07 Dec 2002 16:26:26 -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.4 660)
--- 1_7_7.81(w)/src/flags.c Wed, 25 Dec 2002 00:34:23 -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.5 660)
***************
*** 186,191 ****
--- 186,192 ----
{"Tport_Anything", TEL_OTHER},
{"Tport_Anywhere", TEL_ANYWHERE},
{"Unkillable", UNKILLABLE},
+ {"Can_nspemit", CAN_NSPEMIT},
{NULL, 0}
};
*** 1_7_7.66/src/extmail.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/c/22_extmail.c 1.44.1.7.1.5.1.10 660)
--- 1_7_7.81(w)/src/extmail.c Wed, 25 Dec 2002 00:34:23 -0600 dunemush (pennmush/c/22_extmail.c 1.44.1.7.1.5.1.9.1.2 660)
***************
*** 2534,2540 ****
{
struct mail_alias *m;
int i;
- char keepsub[BUFFER_LEN];
/* send a mail message to each player on an alias */
/* We return 0 if this wasn't an alias */
--- 2534,2539 ----
***************
*** 2547,2554 ****
((m->nflags & ALIAS_MEMBERS) && ismember(m, player))))
return 0;
- strcpy(keepsub, uncompress(subject));
-
/* If they are not allowed to see the people on the alias, then
* we must treat this as a case of silent mailing.
*/
--- 2546,2551 ----
***************
*** 2561,2567 ****
}
for (i = 0; i < m->size; i++) {
! send_mail(player, m->members[i], keepsub, message, flags, silent, nosig);
}
return 1; /* Success */
}
--- 2558,2564 ----
}
for (i = 0; i < m->size; i++) {
! send_mail(player, m->members[i], subject, message, flags, silent, nosig);
}
return 1; /* Success */
}
*** 1_7_7.66/src/extchat.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/c/23_extchat.c 1.1.1.1.1.1.1.1.1.2.1.1.1.3.1.1.1.5.1.1.1.1.1.5.1.2.1.3.1.3.1.1.1.4.1.2.1.6.1.2.1.1.2.4.2.9.1.2.1.2.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.2.1.1.2.1.1.3 660)
--- 1_7_7.81(w)/src/extchat.c Wed, 25 Dec 2002 00:34:23 -0600 dunemush (pennmush/c/23_extchat.c 1.1.1.1.1.1.1.1.1.2.1.1.1.3.1.1.1.5.1.1.1.1.1.5.1.2.1.3.1.3.1.1.1.4.1.2.1.6.1.2.1.1.2.4.2.9.1.2.1.2.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.2.1.1.2.1.1.4 660)
***************
*** 400,414 ****
* alphabetically greater, user should be the first entry on the list */
/* No channels? */
if (!Chanlist(who)) {
! Chanlist(who) = tmp;
! Chanlist(who)->next = NULL;
return;
}
p = Chanlist(who);
/* First channel? */
if (strcasecoll(ChanName(p->chan), ChanName(*ch)) > 0) {
! Chanlist(who) = tmp;
! Chanlist(who)->next = p;
return;
} else if (!strcasecmp(ChanName(p->chan), ChanName(*ch))) {
/* Don't add the same channel twice! */
--- 400,414 ----
* alphabetically greater, user should be the first entry on the list */
/* No channels? */
if (!Chanlist(who)) {
! tmp->next = NULL;
! s_Chanlist(who, tmp);
return;
}
p = Chanlist(who);
/* First channel? */
if (strcasecoll(ChanName(p->chan), ChanName(*ch)) > 0) {
! tmp->next = p;
! s_Chanlist(who, tmp);
return;
} else if (!strcasecmp(ChanName(p->chan), ChanName(*ch))) {
/* Don't add the same channel twice! */
***************
*** 440,451 ****
if (!ch)
return;
- if (!Chanlist(who))
- return;
p = Chanlist(who);
if (p->chan == ch) {
/* First channel */
! Chanlist(who) = p->next;
free_chanlist(p);
return;
}
--- 440,451 ----
if (!ch)
return;
p = Chanlist(who);
+ if (!p)
+ return;
if (p->chan == ch) {
/* First channel */
! s_Chanlist(who, p->next);
free_chanlist(p);
return;
}
***************
*** 2286,2289 ****
--- 2286,2290 ----
return (num < MAX_PLAYER_CHANS);
}
+
#endif /* CHAT_SYSTEM */
*** 1_7_7.66/src/destroy.c Mon, 02 Dec 2002 17:57:36 -0600 dunemush (pennmush/c/24_destroy.c 1.24.2.2.1.3.1.1.1.1.1.1.1.4.1.2 660)
--- 1_7_7.81(w)/src/destroy.c Wed, 25 Dec 2002 00:34:22 -0600 dunemush (pennmush/c/24_destroy.c 1.24.2.2.1.3.1.1.1.1.1.1.1.4.1.4 660)
***************
*** 576,584 ****
dbref i, loc;
if (!GoodObject(thing))
return;
- #ifdef LOCAL_DATA
local_data_free(thing);
- #endif
switch (Typeof(thing)) {
case TYPE_THING:
clear_thing(thing);
--- 576,582 ----
***************
*** 714,719 ****
--- 712,719 ----
Exits(thing) = NOTHING;
Home(thing) = NOTHING;
+ clear_objdata(thing);
+
Next(thing) = first_free;
first_free = thing;
*** 1_7_7.66/src/db.c Sat, 07 Dec 2002 16:26:26 -0600 dunemush (pennmush/c/25_db.c 1.26.1.1.1.1.1.8 660)
--- 1_7_7.81(w)/src/db.c Wed, 25 Dec 2002 00:34:22 -0600 dunemush (pennmush/c/25_db.c 1.26.1.1.1.1.1.10 660)
***************
*** 28,33 ****
--- 28,34 ----
#include "log.h"
#include "strtree.h"
#include "parse.h"
+ #include "htab.h"
#include "confmagic.h"
#ifdef WIN32
***************
*** 59,64 ****
--- 60,68 ----
dbref db_size = DB_INITIAL_SIZE;
+ HASHTAB htab_objdata;
+ HASHTAB htab_objdata_keys;
+
extern char ccom[];
static void db_grow(dbref newtop);
***************
*** 74,79 ****
--- 78,84 ----
void get_new_locks(dbref i, FILE * f);
int get_list(FILE * f, dbref i);
void db_free(void);
+ static void init_objdata_htab(int size);
StrTree object_names;
extern StrTree atr_names;
***************
*** 156,170 ****
o->flags = TYPE_GARBAGE;
o->toggles = 0;
o->powers = 0;
- #ifdef CHAT_SYSTEM
- /* initialize channels here, since it's not going to get done otherwise */
- o->channels = NULL;
- #endif
o->warnings = 0;
o->modification_time = o->creation_time = mudtime;
- #ifdef LOCAL_DATA
- o->local_data = NULL;
- #endif
o->attrcount = 0;
initialized++;
}
--- 161,168 ----
***************
*** 198,212 ****
o->flags = TYPE_GARBAGE;
o->toggles = 0;
o->powers = 0;
- #ifdef CHAT_SYSTEM
- /* initialize channels here, since it's not going to get done otherwise */
- o->channels = NULL;
- #endif
o->warnings = 0;
o->modification_time = o->creation_time = mudtime;
- #ifdef LOCAL_DATA
- o->local_data = NULL;
- #endif
o->attrcount = 0;
if (current_state.garbage)
current_state.garbage--;
--- 196,203 ----
***************
*** 1192,1197 ****
--- 1183,1189 ----
/* make sure database is at least this big *1.5 */
case '~':
db_init = (getref(f) * 3) / 2;
+ init_objdata_htab(db_init);
break;
/* Use the MUSH 2.0 header stuff to see what's in this db */
case '+':
***************
*** 1312,1320 ****
temp = getref(f);
else
temp = 0;
- #ifdef CHAT_SYSTEM
- o->channels = NULL;
- #endif /* CHAT_SYSTEM */
/* If there are warnings in the db, read 'em in */
temp = MAYBE_GET(f, DBF_WARNINGS);
--- 1304,1309 ----
***************
*** 1346,1354 ****
add_player(i, NULL);
Toggles(i) &= ~PLAYER_CONNECT;
}
- #ifdef LOCAL_DATA
- o->local_data = NULL;
- #endif
break;
case '*':
--- 1335,1340 ----
***************
*** 1373,1375 ****
--- 1359,1402 ----
}
}
}
+
+ static void
+ init_objdata_htab(int size)
+ {
+ hashinit(&htab_objdata, size, 4);
+ hashinit(&htab_objdata_keys, 8, 32);
+ }
+
+ void *
+ set_objdata(dbref thing, const char *keybase, void *data)
+ {
+ if (data) {
+ if (hashadd(tprintf("%s_#%d", keybase, thing), data, &htab_objdata) < 0)
+ return NULL;
+ if (hash_find(&htab_objdata_keys, keybase) == NULL) {
+ char *newkey = strdup(keybase);
+ hashadd(keybase, (void *) &newkey, &htab_objdata_keys);
+ }
+ return data;
+ } else {
+ hashdelete(tprintf("%s_#%d", keybase, thing), &htab_objdata);
+ return NULL;
+ }
+ }
+
+ void *
+ get_objdata(dbref thing, const char *keybase)
+ {
+ return hashfind(tprintf("%s_#%d", keybase, thing), &htab_objdata);
+ }
+
+ void
+ clear_objdata(dbref thing)
+ {
+ char *p;
+ /* Clear all data stored for this object. Used when the object is freed */
+ for (p = (char *) hash_firstentry(&htab_objdata_keys);
+ p; p = (char *) hash_nextentry(&htab_objdata_keys)) {
+ set_objdata(thing, p, NULL);
+ }
+ }
*** 1_7_7.66/src/create.c Thu, 12 Dec 2002 21:23:20 -0600 dunemush (pennmush/c/27_create.c 1.27.1.3.1.1.1.1.1.1.1.2.1.1.1.1.1.10 660)
--- 1_7_7.81(w)/src/create.c Wed, 25 Dec 2002 00:34:22 -0600 dunemush (pennmush/c/27_create.c 1.27.1.3.1.1.1.1.1.1.1.2.1.1.1.1.1.11 660)
***************
*** 140,148 ****
}
}
current_state.exits++;
- #ifdef LOCAL_DATA
local_data_create(new_exit);
- #endif
return new_exit;
}
return NOTHING;
--- 140,146 ----
***************
*** 358,366 ****
do_real_open(player, argv[2], "here", room);
}
current_state.rooms++;
- #ifdef LOCAL_DATA
local_data_create(room);
- #endif
if (tport) {
/* We need to use the full command, because we need NO_TEL
* and Z_TEL checking */
--- 356,362 ----
***************
*** 423,431 ****
/* and we're done */
notify_format(player, "Created: Object %s.", unparse_dbref(thing));
current_state.things++;
- #ifdef LOCAL_DATA
local_data_create(thing);
- #endif
return thing;
}
return NOTHING;
--- 419,425 ----
***************
*** 441,449 ****
memcpy(REFDB(clone), REFDB(thing), sizeof(struct object));
Owner(clone) = Owner(player);
- #ifdef CHAT_SYSTEM
- Chanlist(clone) = NULL;
- #endif
Name(clone) = NULL;
if (newname && *newname)
set_name(clone, newname);
--- 435,440 ----
***************
*** 518,527 ****
else
moveto(clone, Location(player));
current_state.things++;
- #ifdef LOCAL_DATA
- LocData(clone) = NULL;
local_data_clone(clone, thing);
- #endif
real_did_it(player, clone, NULL, NULL, NULL, NULL, "ACLONE", NOTHING,
wenv);
return clone;
--- 509,515 ----
***************
*** 534,543 ****
Exits(clone) = NOTHING;
notify_format(player, T("Cloned: Room #%d."), clone);
current_state.rooms++;
- #ifdef LOCAL_DATA
- LocData(clone) = NULL;
local_data_clone(clone, thing);
- #endif
real_did_it(player, clone, NULL, NULL, NULL, NULL, "ACLONE", NOTHING,
wenv);
return clone;
--- 522,528 ----
***************
*** 588,597 ****
T
("Warning: @CLONE/PRESERVE on an exit with WIZ, ROY, @Powers, or Warnings."));
notify_format(player, T("Cloned: Exit #%d."), clone);
- #ifdef LOCAL_DATA
- LocData(clone) = NULL;
local_data_clone(clone, thing);
- #endif
return clone;
}
}
--- 573,579 ----
*** 1_7_7.66/src/command.c Sat, 07 Dec 2002 16:26:26 -0600 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5.1.2.1.1.1.1.1.2.1.3.1.10.1.1.2.2 660)
--- 1_7_7.81(w)/src/command.c Wed, 25 Dec 2002 00:34:22 -0600 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5.1.2.1.1.1.1.1.2.1.3.1.10.1.1.2.3 660)
***************
*** 191,197 ****
0},
{"@NOTIFY", "ALL ANY", cmd_notify_drain, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0, 0},
{"@NSPEMIT", "LIST SILENT NOISY NOEVAL", cmd_nspemit,
! CMD_T_ANY | CMD_T_EQSPLIT, WIZARD, 0, 0},
{"@NUKE", NULL, cmd_nuke, CMD_T_ANY | CMD_T_NOGAGGED, 0, 0, 0},
{"@OEMIT", "NOEVAL", cmd_oemit, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED,
--- 191,197 ----
0},
{"@NOTIFY", "ALL ANY", cmd_notify_drain, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0, 0},
{"@NSPEMIT", "LIST SILENT NOISY NOEVAL", cmd_nspemit,
! CMD_T_ANY | CMD_T_EQSPLIT, WIZARD, 0, CAN_NSPEMIT},
{"@NUKE", NULL, cmd_nuke, CMD_T_ANY | CMD_T_NOGAGGED, 0, 0, 0},
{"@OEMIT", "NOEVAL", cmd_oemit, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED,
*** 1_7_7.66/src/bsd.c Tue, 17 Dec 2002 15:42:31 -0600 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12.1.1.1.1.1.2.1.1.1.13.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.8.2.1.1.1.1.1.1.1.1.2.1.1.1.4 660)
--- 1_7_7.81(w)/src/bsd.c Wed, 25 Dec 2002 00:34:22 -0600 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12.1.1.1.1.1.2.1.1.1.13.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.8.2.1.1.1.1.1.1.1.1.2.1.1.1.6 660)
***************
*** 351,360 ****
void free_text_block(struct text_block *t);
void add_to_queue(struct text_queue *q, const char *b, int n);
int flush_queue(struct text_queue *q, int n);
! int queue_write(DESC *d, const char *b, int n);
! int queue_newwrite(DESC *d, const char *b, int n);
! int queue_new_eol(DESC *d);
! int queue_string(DESC *d, const char *s);
static int queue_string_eol(DESC *d, const char *s);
int process_output(DESC *d);
void freeqs(DESC *d);
--- 351,359 ----
void free_text_block(struct text_block *t);
void add_to_queue(struct text_queue *q, const char *b, int n);
int flush_queue(struct text_queue *q, int n);
! static int queue_write(DESC *d, const char *b, int n);
! static int queue_newwrite(DESC *d, const unsigned char *b, int n);
! static int queue_string(DESC *d, const char *s);
static int queue_string_eol(DESC *d, const char *s);
int process_output(DESC *d);
void freeqs(DESC *d);
***************
*** 1063,1069 ****
if (type == NA_TPASCII)
safe_str("\xFF\xFF", t, &o);
else if (strip)
! safe_chr((char) accent_table[IAC].base, t, &o);
else
safe_chr((char) IAC, t, &o);
break;
--- 1062,1068 ----
if (type == NA_TPASCII)
safe_str("\xFF\xFF", t, &o);
else if (strip)
! safe_str(accent_table[IAC].base, t, &o);
else
safe_chr((char) IAC, t, &o);
break;
***************
*** 1081,1088 ****
safe_str("\r\n", t, &o);
break;
default:
! if (strip)
! safe_chr((char) accent_table[(unsigned char) *p].base, t, &o);
else
safe_chr(*p, t, &o);
}
--- 1080,1087 ----
safe_str("\r\n", t, &o);
break;
default:
! if (strip && accent_table[(unsigned char) *p].base)
! safe_str(accent_table[(unsigned char) *p].base, t, &o);
else
safe_chr(*p, t, &o);
}
***************
*** 1204,1210 ****
safe_str(accent_table[(unsigned char) *p].entity, t, &o);
break;
default:
! safe_chr((char) accent_table[(unsigned char) *p].base, t, &o);
break;
}
} else if (accent_table[(unsigned char) *p].entity)
--- 1203,1212 ----
safe_str(accent_table[(unsigned char) *p].entity, t, &o);
break;
default:
! if (accent_table[(unsigned char) *p].base)
! safe_str(accent_table[(unsigned char) *p].base, t, &o);
! else
! safe_chr(*p, t, &o);
break;
}
} else if (accent_table[(unsigned char) *p].entity)
***************
*** 1241,1248 ****
}
if (type == NA_TANSI || type == NA_TCOLOR)
safe_str("\xFF\xFF", t, &o);
! else if (strip)
! safe_chr(accent_table[IAC].base, t, &o);
else
safe_chr((char) IAC, t, &o);
break;
--- 1243,1250 ----
}
if (type == NA_TANSI || type == NA_TCOLOR)
safe_str("\xFF\xFF", t, &o);
! else if (strip && accent_table[IAC].base)
! safe_str(accent_table[IAC].base, t, &o);
else
safe_chr((char) IAC, t, &o);
break;
***************
*** 1269,1276 ****
changed = 0;
ansi_change_state(t, &o, color, state, newstate);
}
! if (strip)
! safe_chr((char) accent_table[(unsigned char) *p].base, t, &o);
else
safe_chr(*p, t, &o);
}
--- 1271,1278 ----
changed = 0;
ansi_change_state(t, &o, color, state, newstate);
}
! if (strip && accent_table[(unsigned char) *p].base)
! safe_str(accent_table[(unsigned char) *p].base, t, &o);
else
safe_chr(*p, t, &o);
}
***************
*** 3071,3077 ****
return really_flushed;
}
! int
queue_write(DESC *d, const char *b, int n)
{
char buff[BUFFER_LEN];
--- 3073,3079 ----
return really_flushed;
}
! static int
queue_write(DESC *d, const char *b, int n)
{
char buff[BUFFER_LEN];
***************
*** 3110,3117 ****
return n;
}
! int
! queue_newwrite(DESC *d, const char *b, int n)
{
int space;
--- 3112,3119 ----
return n;
}
! static int
! queue_newwrite(DESC *d, const unsigned char *b, int n)
{
int space;
***************
*** 3219,3225 ****
return queue_eol(d);
}
! int
queue_string(DESC *d, const char *s)
{
char *n;
--- 3221,3227 ----
return queue_eol(d);
}
! static int
queue_string(DESC *d, const char *s)
{
char *n;
*** 1_7_7.66/hdrs/version.h Tue, 17 Dec 2002 22:45:06 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9.1.1.1.17.1.4 660)
--- 1_7_7.81(w)/hdrs/version.h Wed, 25 Dec 2002 00:34:26 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9.1.1.1.17.1.5 660)
***************
*** 1,2 ****
! #define VERSION "PennMUSH version 1.7.7 patchlevel 1 [12/17/2002]"
! #define SHORTVN "PennMUSH 1.7.7p1"
--- 1,2 ----
! #define VERSION "PennMUSH version 1.7.7 patchlevel 2 [12/22/2002]"
! #define SHORTVN "PennMUSH 1.7.7p2"
*** 1_7_7.66/hdrs/flags.h Sat, 07 Dec 2002 16:26:26 -0600 dunemush (pennmush/d/14_flags.h 1.1.1.1.1.1.1.1.1.2.1.3.2.1.1.4.1.1.1.1.2.1.1.2 660)
--- 1_7_7.81(w)/hdrs/flags.h Wed, 25 Dec 2002 00:34:26 -0600 dunemush (pennmush/d/14_flags.h 1.1.1.1.1.1.1.1.1.2.1.3.2.1.1.4.1.1.1.1.2.1.1.3 660)
***************
*** 271,276 ****
--- 271,277 ----
#define NO_QUOTA 0x10000000 /* Has no quota restrictions */
#define LINK_ANYWHERE 0x20000000 /* Can @link an exit to any room */
#define OPEN_ANYWHERE 0x40000000 /* Can @open an exit from any room */
+ #define CAN_NSPEMIT 0x80000000 /* Can use @nspemit and nspemit() */
/* These powers are obsolete, but are kept around to implement
* DBF_SPLIT_IMMORTAL
*** 1_7_7.66/hdrs/externs.h Tue, 17 Dec 2002 15:42:31 -0600 dunemush (pennmush/d/16_externs.h 1.1.1.53.1.2.1.8.2.1.1.2.1.1.1.1.1.2.1.6.1.3.1.4.2.4 660)
--- 1_7_7.81(w)/hdrs/externs.h Wed, 25 Dec 2002 00:34:25 -0600 dunemush (pennmush/d/16_externs.h 1.1.1.53.1.2.1.8.2.1.1.2.1.1.1.1.1.2.1.6.1.3.1.4.2.6 660)
***************
*** 367,373 ****
char *buff, char **bp);
typedef struct {
! unsigned char base;
const char *entity;
} accent_info;
extern accent_info accent_table[];
--- 367,373 ----
char *buff, char **bp);
typedef struct {
! const char *base;
const char *entity;
} accent_info;
extern accent_info accent_table[];
***************
*** 473,483 ****
void local_timer(void);
void local_connect(dbref player, int isnew, int num);
void local_disconnect(dbref player, int num);
- #ifdef LOCAL_DATA
void local_data_create(dbref object);
void local_data_clone(dbref clone, dbref source);
void local_data_free(dbref object);
- #endif
/* funlist.c */
void do_gensort(char **s, int n, int sort_type);
--- 473,481 ----
*** 1_7_7.66/hdrs/extchat.h Sat, 09 Nov 2002 11:05:23 -0600 dunemush (pennmush/d/17_extchat.h 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.3.1.1.1.1 660)
--- 1_7_7.81(w)/hdrs/extchat.h Wed, 25 Dec 2002 00:34:25 -0600 dunemush (pennmush/d/17_extchat.h 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.3.1.1.1.1.2.1 660)
***************
*** 91,97 ****
struct chanlist *next;
};
! #define Chanlist(x) db[(x)].channels
/* Channel type flags and macros */
#define CHANNEL_PLAYER 0x1 /* Players may join */
--- 91,98 ----
struct chanlist *next;
};
! #define Chanlist(x) get_objdata(x, "CHANNELS")
! #define s_Chanlist(x, y) set_objdata(x, "CHANNELS", y)
/* Channel type flags and macros */
#define CHANNEL_PLAYER 0x1 /* Players may join */
*** 1_7_7.66/hdrs/dbdefs.h Sat, 07 Dec 2002 16:26:26 -0600 dunemush (pennmush/d/18_dbdefs.h 1.1.1.1.1.1.1.1.1.1.1.2.2.2.1.1.1.1.1.1.2.1.1.2 660)
--- 1_7_7.81(w)/hdrs/dbdefs.h Wed, 25 Dec 2002 00:34:25 -0600 dunemush (pennmush/d/18_dbdefs.h 1.1.1.1.1.1.1.1.1.1.1.2.2.2.1.1.1.1.1.1.2.1.1.4 660)
***************
*** 8,13 ****
--- 8,14 ----
#include <sys/time.h>
#endif
#include <time.h>
+ #include "htab.h"
extern int depth;
***************
*** 62,71 ****
#define AttrCount(x) (db[(x)].attrcount)
- #ifdef LOCAL_DATA
- #define LocData(x) (db[(x)].local_data)
- #endif
-
/* Moved from warnings.c because create.c needs it. */
#define Warnings(x) (db[(x)].warnings)
--- 63,68 ----
***************
*** 233,250 ****
dbref owner; /* who controls this object */
dbref zone; /* zone master object number */
int penn; /* number of pennies object contains */
- #ifdef CHAT_SYSTEM
- CHANLIST *channels;
- #endif
int warnings; /* bitflags of warning types */
time_t creation_time; /* Time/date of object creation */
time_t modification_time; /* Time/data of last modification to the
* object's attribs; number of failed
* logins for players. */
int attrcount; /* Number of attribs on the object */
- #ifdef LOCAL_DATA
- void *local_data;
- #endif
object_flag_type flags;
object_flag_type toggles;
object_flag_type powers;
--- 230,241 ----
***************
*** 263,268 ****
--- 254,263 ----
extern struct object *db;
extern dbref db_top;
+ extern void *get_objdata(dbref thing, const char *keybase);
+ extern void *set_objdata(dbref thing, const char *keybase, void *data);
+ extern void clear_objdata(dbref thing);
+
#define DOLIST(var, first)\
for((var) = (first); GoodObject((var)); (var) = Next(var))
*** 1_7_7.66/hdrs/conf.h Sun, 08 Dec 2002 22:36:08 -0600 dunemush (pennmush/d/20_conf.h 1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.2.1.1.2.1.2.13.1.2 660)
--- 1_7_7.81(w)/hdrs/conf.h Wed, 25 Dec 2002 00:34:25 -0600 dunemush (pennmush/d/20_conf.h 1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.2.1.1.2.1.2.13.1.4 660)
***************
*** 350,366 ****
/* Compiler-specific stuff. */
/* For gcc 3 and up, this attribute lets the compiler know that the
* function returns a newly allocated value, for pointer aliasing
* optimizations.
*/
! #ifndef __attribute_malloc__
! #if defined(__GNUC__) && __GNUC__ >= 3
#define __attribute_malloc__ __attribute__ ((__malloc__))
! #else
#define __attribute_malloc__
#endif
- #endif
/* The C99 restrict keyword lets the compiler do some more pointer
* aliasing optimizations. Essentially, a RESTRICT pointer function
--- 350,373 ----
/* Compiler-specific stuff. */
+ #ifndef __GNUC_PREREQ
+ #if defined __GNUC__ && defined __GNUC_MINOR__
+ # define __GNUC_PREREQ(maj, min) \
+ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+ #else
+ # define __GNUC_PREREQ(maj, min) 0
+ #endif
+ #endif
+
/* For gcc 3 and up, this attribute lets the compiler know that the
* function returns a newly allocated value, for pointer aliasing
* optimizations.
*/
! #if !defined(__attribute_malloc__) && __GNUC_PREREQ(2, 96)
#define __attribute_malloc__ __attribute__ ((__malloc__))
! #elif !defined(__attribute_malloc__)
#define __attribute_malloc__
#endif
/* The C99 restrict keyword lets the compiler do some more pointer
* aliasing optimizations. Essentially, a RESTRICT pointer function
***************
*** 368,377 ****
* arguments.
* This should be a Configure check sometime.
*/
! #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define RESTRICT restrict
- #elif defined(__GNUC__)
- #define RESTRICT __restrict__
#else
#define RESTRICT
#endif
--- 375,384 ----
* arguments.
* This should be a Configure check sometime.
*/
! #if __GNUC_PREREQ(2, 92)
! #define RESTRICT __restrict
! #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define RESTRICT restrict
#else
#define RESTRICT
#endif
***************
*** 380,386 ****
slightly better code for calls to it. */
#if defined(WIN32) && _MSC_VER >= 1200
#define NORETURN __declspec(noreturn)
! #elif defined(HAS_ATTRIBUTE)
#define NORETURN __attribute__ ((__noreturn__))
#else
#define NORETURN
--- 387,393 ----
slightly better code for calls to it. */
#if defined(WIN32) && _MSC_VER >= 1200
#define NORETURN __declspec(noreturn)
! #elif defined(HASATTRIBUTE)
#define NORETURN __attribute__ ((__noreturn__))
#else
#define NORETURN
*** 1_7_7.66/options.h.dist Sat, 07 Dec 2002 16:26:26 -0600 dunemush (pennmush/d/33_options.h. 1.10.1.1.1.1.1.2.1.1.1.1.1.1.1.3.1.6.1.2.2.2 600)
--- 1_7_7.81(w)/options.h.dist Wed, 18 Dec 2002 00:51:18 -0600 dunemush (pennmush/d/33_options.h. 1.10.1.1.1.1.1.2.1.1.1.1.1.1.1.3.1.6.1.2.2.3 600)
***************
*** 117,132 ****
*/
/* #define MEM_CHECK /* */
- /* Defining this will add 4 bytes to every object in memory, and that is
- * the local_data void *pointer.
- * Usefull for local hackers, who can store stuff like skills, languages,
- * combat stats etc in a record this points to, and then store/reload it
- * in the local_* hooks.
- * If you are NOT one of those who modify the local C source extensivly,
- * this will be COMPLETELY worthless to you.
- */
- /* #define LOCAL_DATA /* */
-
/* If defined, use the info_slave to get information from identd,
* instead of having the MUSH do it directly. This may help reduce lag
* from new logins. This does _not_ work under Win32.
--- 117,122 ----
*** 1_7_7.66/win32/funs.h Tue, 17 Dec 2002 16:03:37 -0600 dunemush (pennmush/f/12_funs.h 1.11.1.9.2.8.2.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.8.1.3.1.7.1.1.1.1.1.2 660)
--- 1_7_7.81(w)/win32/funs.h Tue, 24 Dec 2002 15:49:24 -0600 dunemush (pennmush/f/12_funs.h 1.11.1.9.2.8.2.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.8.1.3.1.7.1.1.1.1.1.1.1.3 660)
***************
*** 148,153 ****
--- 148,154 ----
FUNCTION_PROTO(fun_log);
FUNCTION_PROTO(fun_lparent);
FUNCTION_PROTO(fun_lplayers);
+ FUNCTION_PROTO(fun_lpos);
FUNCTION_PROTO(fun_lsearch);
FUNCTION_PROTO(fun_lstats);
FUNCTION_PROTO(fun_lt);
*** 1_7_7.66/src/tables.c Sat, 09 Nov 2002 18:52:33 -0600 dunemush (pennmush/g/11_tables.c 1.4 660)
--- 1_7_7.81(w)/src/tables.c Wed, 25 Dec 2002 00:34:25 -0600 dunemush (pennmush/g/11_tables.c 1.5 660)
***************
*** 1,4 ****
! /* This file was generated by running ./gentables compiled from
* utils/gentables.c. Edit that file, not this one, when making changes. */
#include <stdlib.h>
--- 1,4 ----
! /* This file was generated by running ./a.out compiled from
* utils/gentables.c. Edit that file, not this one, when making changes. */
#include <stdlib.h>
***************
*** 79,342 ****
};
typedef struct {
! unsigned char base;
const char *entity;
} accent_info;
accent_info accent_table[256] = {
! {0, NULL},
! {1, NULL},
! {2, NULL},
! {3, NULL},
! {4, NULL},
! {5, NULL},
! {6, NULL},
! {7, NULL},
! {8, NULL},
! {9, NULL},
! {10, "<br>\n"},
! {11, NULL},
! {12, NULL},
! {13, NULL},
! {14, NULL},
! {15, NULL},
! {16, NULL},
! {17, NULL},
! {18, NULL},
! {19, NULL},
! {20, NULL},
! {21, NULL},
! {22, NULL},
! {23, NULL},
! {24, NULL},
! {25, NULL},
! {26, NULL},
! {27, NULL},
! {28, NULL},
! {29, NULL},
! {30, NULL},
! {31, NULL},
! {32, NULL},
! {33, NULL},
! {34, """},
! {35, NULL},
! {36, NULL},
! {37, NULL},
! {38, "&"},
! {39, NULL},
! {40, NULL},
! {41, NULL},
! {42, NULL},
! {43, NULL},
! {44, NULL},
! {45, NULL},
! {46, NULL},
! {47, NULL},
! {48, NULL},
! {49, NULL},
! {50, NULL},
! {51, NULL},
! {52, NULL},
! {53, NULL},
! {54, NULL},
! {55, NULL},
! {56, NULL},
! {57, NULL},
! {58, NULL},
! {59, NULL},
! {60, "<"},
! {61, NULL},
! {62, ">"},
! {63, NULL},
! {64, NULL},
! {65, NULL},
! {66, NULL},
! {67, NULL},
! {68, NULL},
! {69, NULL},
! {70, NULL},
! {71, NULL},
! {72, NULL},
! {73, NULL},
! {74, NULL},
! {75, NULL},
! {76, NULL},
! {77, NULL},
! {78, NULL},
! {79, NULL},
! {80, NULL},
! {81, NULL},
! {82, NULL},
! {83, NULL},
! {84, NULL},
! {85, NULL},
! {86, NULL},
! {87, NULL},
! {88, NULL},
! {89, NULL},
! {90, NULL},
! {91, NULL},
! {92, NULL},
! {93, NULL},
! {94, NULL},
! {95, NULL},
! {96, NULL},
! {97, NULL},
! {98, NULL},
! {99, NULL},
! {100, NULL},
! {101, NULL},
! {102, NULL},
! {103, NULL},
! {104, NULL},
! {105, NULL},
! {106, NULL},
! {107, NULL},
! {108, NULL},
! {109, NULL},
! {110, NULL},
! {111, NULL},
! {112, NULL},
! {113, NULL},
! {114, NULL},
! {115, NULL},
! {116, NULL},
! {117, NULL},
! {118, NULL},
! {119, NULL},
! {120, NULL},
! {121, NULL},
! {122, NULL},
! {123, NULL},
! {124, NULL},
! {125, NULL},
! {126, NULL},
! {127, NULL},
! {128, NULL},
! {129, NULL},
! {130, NULL},
! {131, NULL},
! {132, NULL},
! {133, NULL},
! {134, NULL},
! {135, NULL},
! {136, NULL},
! {137, NULL},
! {138, NULL},
! {139, NULL},
! {140, NULL},
! {141, NULL},
! {142, NULL},
! {143, NULL},
! {144, NULL},
! {145, NULL},
! {146, NULL},
! {147, NULL},
! {148, NULL},
! {149, NULL},
! {150, NULL},
! {151, NULL},
! {152, NULL},
! {153, NULL},
! {154, NULL},
! {155, NULL},
! {156, NULL},
! {157, NULL},
! {158, NULL},
! {159, NULL},
! {160, NULL},
! {33, "¡"},
! {162, NULL},
! {163, NULL},
! {164, NULL},
! {165, NULL},
! {166, NULL},
! {167, NULL},
! {168, NULL},
! {169, NULL},
! {170, NULL},
! {34, "«"},
! {172, NULL},
! {173, NULL},
! {174, NULL},
! {175, NULL},
! {176, NULL},
! {177, NULL},
! {178, NULL},
! {179, NULL},
! {180, NULL},
! {181, NULL},
! {182, NULL},
! {183, NULL},
! {184, NULL},
! {185, NULL},
! {186, NULL},
! {34, "»"},
! {188, NULL},
! {189, NULL},
! {190, NULL},
! {63, "¿"},
! {65, "À"},
! {65, "Á"},
! {65, "Â"},
! {65, "Ã"},
! {65, "Ä"},
! {65, "Å"},
! {198, NULL},
! {67, "Ç"},
! {69, "È"},
! {69, "É"},
! {69, "Ê"},
! {69, "Ë"},
! {73, "Ì"},
! {73, "Í"},
! {73, "Î"},
! {73, "Ï"},
! {68, "Ð"},
! {78, "Ñ"},
! {79, "Ò"},
! {79, "Ó"},
! {79, "Ô"},
! {79, "Õ"},
! {79, "Ö"},
! {215, NULL},
! {216, NULL},
! {85, "Ù"},
! {85, "Ú"},
! {85, "Û"},
! {85, "Ü"},
! {89, "Ý"},
! {80, "Þ"},
! {66, "ß"},
! {97, "à"},
! {97, "á"},
! {97, "â"},
! {97, "ã"},
! {97, "ä"},
! {97, "å"},
! {230, NULL},
! {99, "ç"},
! {101, "è"},
! {101, "é"},
! {101, "ê"},
! {101, "ë"},
! {105, "ì"},
! {105, "í"},
! {105, "î"},
! {105, "ï"},
! {111, "ð"},
! {110, "ñ"},
! {111, "ò"},
! {111, "ó"},
! {111, "ô"},
! {111, "õ"},
! {111, "ö"},
! {247, NULL},
! {248, NULL},
! {117, "ù"},
! {117, "ú"},
! {117, "û"},
! {117, "ü"},
! {121, "ý"},
! {112, "þ:"},
! {121, "ÿ"}
};
--- 79,342 ----
};
typedef struct {
! const char *base;
const char *entity;
} accent_info;
accent_info accent_table[256] = {
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {"\n", "<br>\n"},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {"\"", """},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {"&", "&"},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {"<", "<"},
! {NULL, NULL},
! {">", ">"},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {"!", "¡"},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {"(c)", "©"},
! {NULL, NULL},
! {"<<", "«"},
! {NULL, NULL},
! {NULL, NULL},
! {"(r)", "®"},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {NULL, NULL},
! {">>", "»"},
! {"1/4", "¼"},
! {"1/2", "½"},
! {"3/4", "¾"},
! {"?", "¿"},
! {"A", "À"},
! {"A", "Á"},
! {"A", "Â"},
! {"A", "Ã"},
! {"A", "Ä"},
! {"A", "Å"},
! {"AE", "Æ"},
! {"C", "Ç"},
! {"E", "È"},
! {"E", "É"},
! {"E", "Ê"},
! {"E", "Ë"},
! {"I", "Ì"},
! {"I", "Í"},
! {"I", "Î"},
! {"I", "Ï"},
! {"Th", "Ð"},
! {"N", "Ñ"},
! {"O", "Ò"},
! {"O", "Ó"},
! {"O", "Ô"},
! {"O", "Õ"},
! {"O", "Ö"},
! {NULL, NULL},
! {NULL, NULL},
! {"U", "Ù"},
! {"U", "Ú"},
! {"U", "Û"},
! {"U", "Ü"},
! {"Y", "Ý"},
! {"Th", "Þ"},
! {"ss", "ß"},
! {"a", "à"},
! {"a", "á"},
! {"a", "â"},
! {"a", "ã"},
! {"a", "ä"},
! {"a", "å"},
! {"ae", "æ"},
! {"c", "ç"},
! {"e", "è"},
! {"e", "é"},
! {"e", "ê"},
! {"e", "ë"},
! {"i", "ì"},
! {"i", "í"},
! {"i", "î"},
! {"i", "ï"},
! {"th", "ð"},
! {"n", "ñ"},
! {"o", "ò"},
! {"o", "ó"},
! {"o", "ô"},
! {"o", "õ"},
! {"o", "ö"},
! {NULL, NULL},
! {NULL, NULL},
! {"u", "ù"},
! {"u", "ú"},
! {"u", "û"},
! {"u", "ü"},
! {"y", "ý"},
! {"th", "þ:"},
! {"y", "ÿ"}
};
*** 1_7_7.66/utils/gentables.c Sat, 09 Nov 2002 18:52:33 -0600 dunemush (pennmush/g/12_gentables. 1.3 600)
--- 1_7_7.81(w)/utils/gentables.c Tue, 24 Dec 2002 15:15:35 -0600 dunemush (pennmush/g/12_gentables. 1.4 600)
***************
*** 106,204 ****
* different families.
*/
typedef struct {
! char base;
const char *entity;
} accent_info;
accent_info entity_table[UCHAR_MAX + 1] = {
// Assorted characters
! ['<'] = {'<', "<"},
! ['>'] = {'>', ">"},
! ['&'] = {'&', "&"},
! ['"'] = {'"', """},
! ['\n'] = {'\n', "<br>\\n"},
// << and >> quotes
! [171] = {'"', "«"},
! [187] = {'"', "»"},
// Upside-down punctuation
! [161] = {'!', "¡"},
! [191] = {'?', "¿"},
// szlig
! [223] = {'B', "ß"},
// thorn
! [222] = {'P', "Þ"},
! [254] = {'p', "þ:"},
// eth
! [208] = {'D', "Ð"},
! [240] = {'o', "ð"},
// Accented a's
! [192] = {'A', "À"},
! [193] = {'A', "Á"},
! [194] = {'A', "Â"},
! [195] = {'A', "Ã"},
! [196] = {'A', "Ä"},
! [197] = {'A', "Å"},
! [224] = {'a', "à"},
! [225] = {'a', "á"},
! [226] = {'a', "â"},
! [227] = {'a', "ã"},
! [228] = {'a', "ä"},
! [229] = {'a', "å"},
// Accented c's
! [199] = {'C', "Ç"},
! [231] = {'c', "ç"},
// Accented e's
! [200] = {'E', "È"},
! [201] = {'E', "É"},
! [202] = {'E', "Ê"},
! [203] = {'E', "Ë"},
! [232] = {'e', "è"},
! [233] = {'e', "é"},
! [234] = {'e', "ê"},
! [235] = {'e', "ë"},
// Accented i's
! [204] = {'I', "Ì"},
! [205] = {'I', "Í"},
! [206] = {'I', "Î"},
! [207] = {'I', "Ï"},
! [236] = {'i', "ì"},
! [237] = {'i', "í"},
! [238] = {'i', "î"},
! [239] = {'i', "ï"},
// Accented n's
! [209] = {'N', "Ñ"},
! [241] = {'n', "ñ"},
// Accented o's
! [210] = {'O', "Ò"},
! [211] = {'O', "Ó"},
! [212] = {'O', "Ô"},
! [213] = {'O', "Õ"},
! [214] = {'O', "Ö"},
! [242] = {'o', "ò"},
! [243] = {'o', "ó"},
! [244] = {'o', "ô"},
! [245] = {'o', "õ"},
! [246] = {'o', "ö"},
// Accented u's
! [217] = {'U', "Ù"},
! [218] = {'U', "Ú"},
! [219] = {'U', "Û"},
! [220] = {'U', "Ü"},
! [249] = {'u', "ù"},
! [250] = {'u', "ú"},
! [251] = {'u', "û"},
! [252] = {'u', "ü"},
// Accented y's
! [221] = {'Y', "Ý"},
! [253] = {'y', "ý"},
! [255] = {'y', "ÿ"},
};
/* For tables of char's treated as small numeric values. */
--- 106,214 ----
* different families.
*/
typedef struct {
! const char *base;
const char *entity;
} accent_info;
accent_info entity_table[UCHAR_MAX + 1] = {
// Assorted characters
! ['<'] = {"<", "<"},
! ['>'] = {">", ">"},
! ['&'] = {"&", "&"},
! ['"'] = {"\\\"", """},
! ['\n'] = {"\\n", "<br>\\n"},
// << and >> quotes
! [171] = {"<<", "«"},
! [187] = {">>", "»"},
// Upside-down punctuation
! [161] = {"!", "¡"},
! [191] = {"?", "¿"},
// szlig
! [223] = {"ss", "ß"},
// thorn
! [222] = {"Th", "Þ"},
! [254] = {"th", "þ:"},
// eth
! [208] = {"Th", "Ð"},
! [240] = {"th", "ð"},
! // Special symbols
! [169] = {"(c)", "©"},
! [174] = {"(r)", "®"},
! [188] = {"1/4", "¼"},
! [189] = {"1/2", "½"},
! [190] = {"3/4", "¾"},
!
! // AE ligatures
! [198] = {"AE", "Æ"},
! [230] = {"ae", "æ"},
// Accented a's
! [192] = {"A", "À"},
! [193] = {"A", "Á"},
! [194] = {"A", "Â"},
! [195] = {"A", "Ã"},
! [196] = {"A", "Ä"},
! [197] = {"A", "Å"},
! [224] = {"a", "à"},
! [225] = {"a", "á"},
! [226] = {"a", "â"},
! [227] = {"a", "ã"},
! [228] = {"a", "ä"},
! [229] = {"a", "å"},
// Accented c's
! [199] = {"C", "Ç"},
! [231] = {"c", "ç"},
// Accented e's
! [200] = {"E", "È"},
! [201] = {"E", "É"},
! [202] = {"E", "Ê"},
! [203] = {"E", "Ë"},
! [232] = {"e", "è"},
! [233] = {"e", "é"},
! [234] = {"e", "ê"},
! [235] = {"e", "ë"},
// Accented i's
! [204] = {"I", "Ì"},
! [205] = {"I", "Í"},
! [206] = {"I", "Î"},
! [207] = {"I", "Ï"},
! [236] = {"i", "ì"},
! [237] = {"i", "í"},
! [238] = {"i", "î"},
! [239] = {"i", "ï"},
// Accented n's
! [209] = {"N", "Ñ"},
! [241] = {"n", "ñ"},
// Accented o's
! [210] = {"O", "Ò"},
! [211] = {"O", "Ó"},
! [212] = {"O", "Ô"},
! [213] = {"O", "Õ"},
! [214] = {"O", "Ö"},
! [242] = {"o", "ò"},
! [243] = {"o", "ó"},
! [244] = {"o", "ô"},
! [245] = {"o", "õ"},
! [246] = {"o", "ö"},
// Accented u's
! [217] = {"U", "Ù"},
! [218] = {"U", "Ú"},
! [219] = {"U", "Û"},
! [220] = {"U", "Ü"},
! [249] = {"u", "ù"},
! [250] = {"u", "ú"},
! [251] = {"u", "û"},
! [252] = {"u", "ü"},
// Accented y's
! [221] = {"Y", "Ý"},
! [253] = {"y", "ý"},
! [255] = {"y", "ÿ"},
};
/* For tables of char's treated as small numeric values. */
***************
*** 220,234 ****
const accent_info table[]) {
int n;
puts("typedef struct {");
! puts("unsigned char base;");
puts("const char *entity;");
puts("} accent_info;");
printf("accent_info %s[%d] = {\n", name, UCHAR_MAX + 1);
for (n = 0; n < UCHAR_MAX + 1; n++) {
if (table[n].entity)
! printf("{%d, \"%s\"}", table[n].base, table[n].entity);
else
! printf("{%d, NULL}", n);
if (n < UCHAR_MAX)
putchar(',');
putchar('\n');
--- 230,244 ----
const accent_info table[]) {
int n;
puts("typedef struct {");
! puts("const char *base;");
puts("const char *entity;");
puts("} accent_info;");
printf("accent_info %s[%d] = {\n", name, UCHAR_MAX + 1);
for (n = 0; n < UCHAR_MAX + 1; n++) {
if (table[n].entity)
! printf("{\"%s\", \"%s\"}", table[n].base, table[n].entity);
else
! printf("{NULL, NULL}", n);
if (n < UCHAR_MAX)
putchar(',');
putchar('\n');
*** 1_7_7.66/INSTALL Sun, 08 Dec 2002 22:42:35 -0600 dunemush (pennmush/g/20_INSTALL 1.2 600)
--- 1_7_7.81(w)/INSTALL Sun, 22 Dec 2002 01:19:21 -0600 dunemush (pennmush/g/20_INSTALL 1.3 600)
***************
*** 120,126 ****
2. cd pennmush. On Unix systems:
./Configure -d
! On cygwin systems:
. Configure
(That's a single period, a space, and Configure)
When you get to the question about hints files, choose 'cygwin'.
--- 120,126 ----
2. cd pennmush. On Unix systems:
./Configure -d
! On cygwin systems, try ./Configure -d, but if it fails, try:
. Configure
(That's a single period, a space, and Configure)
When you get to the question about hints files, choose 'cygwin'.
More information about the Pennmush-announce
mailing list