CircleMUD 3.0 beta patchlevel 11 released (Win 95 support)

From: Jeremy Elson (
Date: 04/14/96

I've just released CircleMUD version 3.0, patchlevel 11, to the usual FTP
sites ( and in pub/CircleMUD/3.x).

A few notes:

-- This will be one of the last beta patchlevels.  Effective this patchlevel,
   *NO* new features will be added -- ONLY bug fixes.  This means that a
   complete OLC will not be included until production version 3.01 or 3.02.
   (OLC will be done just as quickly as before; I have just changed the
   numbering scheme so that people who are waiting for the non-beta release
   of Circle can start developing their MUDs.)

   Once we get out of beta, hopefully we will have a very solid, stable,
   highly portable code base -- then, I'll be able to start adding new
   features again.

-- Starting with pl11, CircleMUD now compiles under Windows 95 and NT!
   Please only attempt this if you know what you're doing - I am absolutely
   not going to offer any technical support for Windows 95 users who don't
   know how to use their compilers. :-)  There are currently no binary
   distributions, although I will probably release a binary for Windows once
   the code gets out of beta.

-- I've decided to stop distributing Circle in .tar.Z format because everyone
   uses gzip now.  Also, I've started distributing Circle in .zip format to
   make it easier for Windows and OS/2 users to use.

-- It was brought to my attention that the old patch files that used to be
   on the FTP site didn't work because I forgot to include the --new-file
   switch to diff.  So, I've deleted the old patch files and recreated patch
   files to go from patchlevel 8, 9, and 10 directly to 11.

I've pasted the ChangeLog entries for patchlevel 11 below.  Enjoy!



******** Patchlevel 11 ***************************************************

-- Patches to make Circle compile under MSCV++ 4.0 under Windows 95:
	Created a '' to act as Windows' conf.h.  Created a new
        constant, CIRCLE_WINDOWS, to use for #ifdef's.  Changed OS2's constant
        from OS2 to CIRCLE_OS2 for consistency.

        Changes to some of the types throughout the code (e.g. changing some
        int's to size_t's.

	Changed the type of all sockets from int to socket_t; sysdep.h
	typedef's int as being socket_t under UNIX and SOCKET to socket_t
	under Windows.

	Changes to some of the code in comm.c (with ifdef's) to account for
	some of the differences between WinSock and Berkeley Sockets.

        Wrote a "fake" gettimeofday() function which is an interface to the
        Win32 GetTickCount() and a WinSock-compatible nonblock().

	Renamed 'act.obj.c' to 'act.item.c' to defeat an apparent bug in
	MSVC++ that refuses to properly object files that have the word
	"obj" in their name (i.e. act.obj.obj).

        Changed the boot-up procedure so that the max player calculation is
        done before socket initialization (this is done so that the max can
        be reduced from the MAX_PLAYERS value in comm.c if WSAStartup() tells
        us we have less than that number of max sockets available.

	Created a CLOSE_SOCKET macro: under UNIX, this is #defined as
	close(); under Windows, it's defined as closesocket.

        #defined log(x) as basic_mud_log(x) to prevent namespace collision
        with the mathematical log() function.

-- Various fixes to the 'configure' script:
       The '-lsocket' library should hopefully be detected more reliably
       (by detecting -lnsl first; some systems need -lnsl before -lsocket
       will link successfully).

       The -cckr option is given to the compiler if we are not using gcc and
       it is determined that your system's cc can take the -cckr argument.

       -fno-strict-prototypes given if we're using gcc (this should hopefully
       alleviate the continuing headache of getting function prototypes to

       Include a prototype for random and srandom if it's determined that
       we're using Circle's random/srandom functions and not libc's.

       Check for the presence of arpa/telnet.h, and use our own local copy
       (telnet.h is now included with the Circle distribution) if it does
       not exist.

       Check for sys/types.h before including it.

       Configure recreated with GNU autoconf v2.9 (previously was 2.7).

-- Made some fixes to the autorun script: most notably, it was not passing
   command-line parameters to the MUD, meaning that you had to change the
   port in config.c in order for it to be changed if you were using autorun.
   This means that port-number changing now works the way it was documented
   (autorun setting takes precedence over config.c).

-- Made some changes to conf.h.os2 to reflect the new configure script and
   the changing of the constant from OS2 to CIRCLE_OS2.

-- Moved heartbeat functions out of game_loop and into their own function
   which is called by game_loop (seems more logical this way to me).

-- game_loop, comm.c: The code which controls the tick-timing was rewritten;
   the timer is now much more accurate (does not drift with time), and
   gracefully handles making up for lost ticks if the MUD is suspended for
   more than a single tick-length (e.g. if the scheduler keeps it waiting
   for a long time under heavy load).  Added a 'timeadd' function to add
   two timevals for use with the calculations.

-- Added a timeout to the "What is your name?" prompt; should prevent denial
   of service attacks whereby people use up all available descriptors by
   repeatedly telnetting into the game and staying idle.  (Though I have not
   received reports of this happening, I'm sure someone has thought of it.)

-- Fixed various typos in the code, help files, and libraries.

-- do_advance, act.wizard.c: Does not allow someone to be advanced to the
   level they already are.

-- invalid_name, ban.c: Changed the buffer size from MAX_NAME_LENGTH to
   MAX_INPUT_LENGTH; was causing crashes when very long names were given.

-- Fixed look_in_obj, act.informative.c, to prevent crashes when looking into
   fountains or cups with invalid values.

-- Changed the semantics of top_of_helpt so that it points to the top element,
   not the number of elements, in the help table (done to be consistent with
   the other top_of_xxx variables).  Fixed do_help in act.informative.c to
   prevent crashes if "help zzzzzz" is typed.

-- Reshuffled the position of alias freeing in free_char yet again (I think
   I've finally gotten this one right).

-- handler.c, affect_from_char(): Changed the list traversal over to the
   classic method used when traversing a list and deleting items as we go
   (i.e. keeping around a temp variable with hjp->next).  (This bug was found
   courtesy of Win95's completely unforgiving memory manager.. unlike most
   UNIX memory managers, it causes crashes if you try to use memory that
   was just freed.... Win95 is almost as good as Electric Fence! :-))
-- handler.c, extract_char(): Changed "if (ch->desc != NULL)" to
   "if (!freed && ch->desc != NULL)" because ch was potentially freed in the
   previous statement.  (This bug was also found by Win 95...)

-- limits.c, point_update(): gain_condition called first rather than last;
   causes crashes when gain_condition() is called on a character that has just
   bled to death (i.e. killed by point_update()).  (This bug was also found
   by Win 95...)

-- Some similar cases of structures being used after they were freed in
   shop.c fixed (found by Win95...)

-- Fixed the pet shops so pets are no longer priced at 0 coins; pet prices
   are now 300 coins times the level of the pet.

-- spell_parser.c, get_skillname(): If the skill is -1, return UNUSED instead
   of UNDEFINED (makes stat and scroll of identify output look better).

-- Added more sanity checks to spell_parser.c (spell_level() and cast_spell())
   to prevent crashes if scrolls are created with wild spell numbers.

-- spell_parser.c, spello() and unused_spell(): Changed to use a loop
   instead of enumerating all classes; should make adding new classes easier.

-- spells.h: Changed types of mana_{min,max,change} to int to correctly handle
   spells which take large mana requirements.

-- handler.c, generic_find(): Silly bug introduced in pl10 fixed whereby
   you can't look in objects if you are equipped.

-- mail.h: Changed a '1' to a 'sizeof(char)' in the MudMail system (caused
   assertion failures on architectures where sizeof(char) != 1)

-- utils.c, sprinttype(): Cleaned up the code.  Looked silly before.

-- Fixes to autowiz.c: Added an fflush() at the end so that wizlists are
   correctly updated.  Also removed some old bzero() calls that were still
   lurking from the old days (modern SYSV systems don't like bzero() at all.)
   Took out the SO_REUSEPORT socket option.

-- Fixed wld2html.c: The parser code was quite old and could not handle
   the 3.0 world files with ASCII bitvectors.  wld2html now works correctly.

-- Changed "++col" to "col++" in Michael Buselli's pager code (patch sent by

-- Brought in the new world files and 'messages' file from Furry (scrolls
   of identify and the 'harm' spell now work) and new help files from
   Chris Epler.

-- Took out the very old bug, typo, and idea files from the standard

This archive was generated by hypermail 2b30 : 12/18/00 PST