wileymud-1.187b/
wileymud-1.187b/attic/
wileymud-1.187b/attic/bin/
wileymud-1.187b/attic/lib/
wileymud-1.187b/attic/lib/adm/
wileymud-1.187b/attic/lib/man/
wileymud-1.187b/attic/lib/new-wld/
wileymud-1.187b/attic/lib/new-wld/default/
wileymud-1.187b/attic/lib/old/
wileymud-1.187b/attic/lib/wld/
wileymud-1.187b/attic/public_html/
wileymud-1.187b/attic/public_html/gfx/
wileymud-1.187b/attic/src/bin/
wileymud-1.187b/attic/src/etc/
wileymud-1.187b/attic/src/libauth-4.0-p5/
wileymud-1.187b/attic/src/sedna/
wileymud-1.187b/backups/
wileymud-1.187b/bin/
wileymud-1.187b/docs/
wileymud-1.187b/etc/
wileymud-1.187b/lib/
wileymud-1.187b/lib/adm/
wileymud-1.187b/lib/boards/
wileymud-1.187b/lib/log/
wileymud-1.187b/lib/man/
wileymud-1.187b/lib/ply/
wileymud-1.187b/lib/ply/a/
wileymud-1.187b/lib/ply/b/
wileymud-1.187b/lib/ply/c/
wileymud-1.187b/lib/ply/d/
wileymud-1.187b/lib/ply/g/
wileymud-1.187b/lib/ply/k/
wileymud-1.187b/lib/ply/m/
wileymud-1.187b/lib/ply/s/
wileymud-1.187b/lib/ply/t/
wileymud-1.187b/public_html/gfx/
wileymud-1.187b/src/bin/
wileymud-1.187b/src/convert/attic/
wileymud-1.187b/src/convert/obj/
wileymud-1.187b/src/convert/perl/
wileymud-1.187b/src/convert/perl/MudConvert/
wileymud-1.187b/src/convert/perl/MudConvert/DUMP/
wileymud-1.187b/src/convert/perl/MudConvert/Report/
wileymud-1.187b/src/convert/perl/MudConvert/WileyMUD/
wileymud-1.187b/src/convert/perl/output/
wileymud-1.187b/src/convert/perl/output/DUMP/
wileymud-1.187b/src/convert/perl/output/Report/
wileymud-1.187b/src/convert/perl/output/WileyMUD/
wileymud-1.187b/src/etc/
wileymud-1.187b/src/etc/init.d/
wileymud-1.187b/src/etc/rc.d/
wileymud-1.187b/src/etc/rc.d/init.d/
wileymud-1.187b/src/lib/
wileymud-1.187b/src/lib/adm/
wileymud-1.187b/src/lib/boards/
wileymud-1.187b/src/lib/log/
wileymud-1.187b/src/lib/man/
wileymud-1.187b/src/lib/ply/
wileymud-1.187b/src/lib/ply/a/
wileymud-1.187b/src/lib/ply/b/
wileymud-1.187b/src/lib/ply/c/
wileymud-1.187b/src/lib/ply/d/
wileymud-1.187b/src/lib/ply/e/
wileymud-1.187b/src/lib/ply/f/
wileymud-1.187b/src/lib/ply/g/
wileymud-1.187b/src/lib/ply/h/
wileymud-1.187b/src/lib/ply/i/
wileymud-1.187b/src/lib/ply/j/
wileymud-1.187b/src/lib/ply/k/
wileymud-1.187b/src/lib/ply/l/
wileymud-1.187b/src/lib/ply/m/
wileymud-1.187b/src/lib/ply/n/
wileymud-1.187b/src/lib/ply/o/
wileymud-1.187b/src/lib/ply/p/
wileymud-1.187b/src/lib/ply/q/
wileymud-1.187b/src/lib/ply/r/
wileymud-1.187b/src/lib/ply/s/
wileymud-1.187b/src/lib/ply/t/
wileymud-1.187b/src/lib/ply/u/
wileymud-1.187b/src/lib/ply/v/
wileymud-1.187b/src/lib/ply/w/
wileymud-1.187b/src/lib/ply/x/
wileymud-1.187b/src/lib/ply/y/
wileymud-1.187b/src/lib/ply/z/
wileymud-1.187b/src/obj/
wileymud-1.187b/src/utils/
wileymud-1.187b/src/utils/mobmaker/
Installation for CircleMud
--------------------------

1. In the Makefile.in file, find:

#flags for profiling (see hacker.doc for more information)
PROFILE =

Directly below that, add:

#I3 - Comment out to disable I3 support
I3 = 1

Below the CXREF_FILES section, add the following:
   [Note: BSD users - put a period in front of the word ifdef, and in front of the word endif]

ifdef I3
   CXREF_FILES += i3.c
   OBJFILES += i3.o
   CFLAGS += -DI3 -DI3CIRCLE
endif

Directly below the following:

weather.o: weather.c conf.h sysdep.h structs.h utils.h comm.h handler.h \
  interpreter.h db.h
	$(CC) -c $(CFLAGS) weather.c

Add the following:

i3.o: i3.c conf.h sysdep.h structs.h utils.h comm.h db.h handler.h \
  interpreter.h i3.h i3cfg.h
	$(CC) -c $(CFLAGS) i3.c

2. Open act.social.c and find the following:

struct social_messg {
  int act_nr;
  int hide;
  int min_victim_position;      /* Position of victim */

  /* No argument was supplied */
  char *char_no_arg;
  char *others_no_arg;  

  /* An argument was there, and a victim was found */
  char *char_found;             /* if NULL, read no further, ignore args */
  char *others_found;
  char *vict_found;

  /* An argument was there, but no victim was found */
  char *not_found;

  /* The victim turned out to be the character */
  char *char_auto;
  char *others_auto;
} *soc_mess_list;

Below that, add the following:

/* For I3 */
struct social_messg *find_social( const char *name )
{
   int cmd, socidx;

   if( ( cmd = find_command( name ) ) < 0 )
      return NULL;

   if( ( socidx = find_action( cmd ) ) < 0 )
      return NULL;

   return &soc_mess_list[socidx];
}

3. Open comm.c and locate the following:

#ifdef HAVE_ARPA_TELNET_H
#include <arpa/telnet.h>
#else 
#include "telnet.h"
#endif


Directly below that, add the following:

#ifdef I3
#include "i3.h"
#endif

Locate function init_game, and find the following:

  log("Opening mother connection.");
  mother_desc = init_socket(port);

  boot_db();

Directly below that, add the following:

#ifdef I3
   /* Initialize and connect to Intermud-3 */
   I3_main( FALSE, port, FALSE );
#endif

Locate the following:

  CLOSE_SOCKET(mother_desc);
  fclose(player_fl);

Directly below that, add the following:

#ifdef I3
  I3_shutdown( 0 );
#endif

Locate game_loop and find the following:

    /* If we missed more than 30 seconds worth of pulses, just do 30 secs */
    if (missed_pulses > 30 RL_SEC) { 
      log("SYSERR: Missed %d seconds worth of pulses.", missed_pulses / PASSES_PER_SEC);
      missed_pulses = 30 RL_SEC;
    }

Directly below that, add the following:

#ifdef I3
    I3_loop();
#endif

*** For Circle 3.1 compatibility only *** - Support conjured by Rogel

In game_loop, find:

   /* Sleep if we don't have any connections */
   if (descriptor_list == NULL) {
      log("No connections.  Going to sleep.");
      FD_ZERO(&input_set);
      FD_SET(mother_desc, &input_set);
      if (select(mother_desc + 1, &input_set, (fd_set *) 0, (fd_set *) 0, NULL) < 0) {

Replace with:

    /* Sleep if we don't have any connections */
    if (descriptor_list == NULL) {
#ifdef I3
      int top_desc = this_i3mud != NULL ? MAX( mother_desc, this_i3mud->desc ) : mother_desc;
#else
      int top_desc = mother_desc;
#endif
      log("No connections.  Going to sleep.");
      FD_ZERO(&input_set);
      FD_SET(mother_desc, &input_set);
#ifdef I3
      if ( this_i3mud != NULL )
         FD_SET(this_i3mud->desc, &input_set);
#endif
      if (select(top_desc + 1, &input_set, (fd_set *) 0, (fd_set *) 0, NULL) < 0) {

4. Open db.c and find the following:

#include "interpreter.h"
#include "house.h"
#include "constants.h"

Directly below that, add:

#ifdef I3
#include "i3.h"
#endif

Locate the following:

void log_zone_error(zone_rnum zone, int cmd_no, const char *message);
void reset_time(void);
long get_ptable_by_name(char *name);

Directly below that, add the following:

#ifdef I3
void load_i3_pfile( struct char_data *ch );
char *i3_fread_word( char *buf, size_t len, FILE *fp );
#endif

Locate the following:

char *get_name_by_id(long id)
{
  int i;

  for (i = 0; i <= top_of_p_table; i++)
    if (player_table[i].id == id)
      return (player_table[i].name);

  return (NULL);
}

Directly below that, add the following:

#ifdef I3
void save_i3_pfile(struct char_data *ch)
{
  FILE *fl;
  char filename[PATH_MAX];
  
#if _CIRCLEMUD < CIRCLEMUD_VERSION(3,0,21)
  if (!get_filename(GET_PC_NAME(ch), filename, I3_FILE))
    return;
#else
  if (!get_filename(filename, sizeof(filename), I3_FILE, GET_PC_NAME(ch)))
    return;
#endif

  if (!(fl = fopen(filename, "w")))
  {
    if (errno != ENOENT)
      log("SYSERR: opening I3 file '%s' for writing: %s", filename, strerror(errno));
    return;
  }
 
  i3_savechar(ch, fl);
  fclose(fl);
}

void load_i3_pfile(struct char_data *ch)
{
  FILE *fl;
  char filename[PATH_MAX];
  char word[READ_SIZE];
  
#if _CIRCLEMUD < CIRCLEMUD_VERSION(3,0,21)
  if (!get_filename(GET_PC_NAME(ch), filename, I3_FILE))
    return;
#else
  if (!get_filename(filename, sizeof(filename), I3_FILE, GET_PC_NAME(ch)))
    return;
#endif
  if (!(fl = fopen(filename, "r")))
  {
    if (errno != ENOENT)
      log("SYSERR: opening I3 file '%s' for reading: %s", filename, strerror(errno));
    return;
  }
 
  for (;;)
  {
    i3_fread_word(word, sizeof(word), fl);
    if (*word != 'I')
      break;
    i3load_char(ch, fl, word);
  }
  fclose(fl);
}
#endif

Locate the following code in store_to_char:

  /* Add all spell effects */
  for (i = 0; i < MAX_AFFECT; i++) {
    if (st->affected[i].type)
      affect_to_char(ch, &st->affected[i]);
  }

Directly below that, add:

#ifdef I3
  i3init_char( ch );
  load_i3_pfile(ch);
#endif

Locate the following in char_to_store:

  if (GET_TITLE(ch))
    strcpy(st->title, GET_TITLE(ch));
  else
    *st->title = '\0';

Directly below that, add:

#ifdef I3
  save_i3_pfile(ch);
#endif

Locate the following in free_char:

  int i;
  struct alias_data *a;
      
  if (ch->player_specials != NULL && ch->player_specials != &dummy_mob) {

Directly below that, add:

#ifdef I3
    free_i3chardata( ch );
#endif

Scroll to the end of db.c and add the following function:

#ifdef I3
/*
 * Grab one word, ignoring preceding whitespace. Will
 * eat a single whitespace immediately after the word.
 */
char *i3_fread_word( char *buf, size_t len, FILE *fp )
{
   size_t copied = 0;
   char cur_char;

   if( !buf || len == 0 )
      return buf;

   *buf = '\0';

   do
   {
      cur_char = fgetc( fp );
   }
   while( isspace( cur_char ) );

   if( cur_char == EOF )
      return buf;

   do
   {
      buf[copied++] = cur_char;
      cur_char = fgetc( fp );
   }
   while( copied < len && !isspace( cur_char ) && cur_char != EOF );

   return buf;
}
#endif

5. Open db.h and locate the following:

#define LIB_PLROBJS     ":plrobjs:"
#define LIB_PLRALIAS    ":plralias:"

Directly below that, add:

#define LIB_PLRI3      ":plri3:"

Then locate the following:

#define LIB_PLROBJS     "plrobjs/"
#define LIB_PLRALIAS    "plralias/"

Directly below that, add:

#define LIB_PLRI3      "plri3/"

Then locate the following:

#define SUF_OBJS        "objs"
#define SUF_TEXT        "text"  
#define SUF_ALIAS       "alias"

Directly below that, add:

#define SUF_I3 "i3"

6. Open interpreter.c and locate the following:

#include "handler.h"
#include "mail.h"
#include "screen.h"

Directly below that, add:

#ifdef I3
#include "i3.h"
#endif

Then locate the following in command_interpreter:

  if (*cmd_info[cmd].command == '\n')
    send_to_char("Huh?!?\r\n", ch);

Change it to read as follows:

  if ( *cmd_info[cmd].command == '\n' )
#ifdef I3
  {
    if( !I3_command_hook(ch, arg, line) )
#endif
       send_to_char("WTF?!?\r\n", ch);
#ifdef I3
  } 
#endif

7. Open structs.h and locate the following:

   char *poofin;                /* Description on arrival of a god.     */
   char *poofout;               /* Description upon a god's exit.       */
   struct alias_data *aliases;  /* Character's aliases                  */
   long last_tell;              /* idnum of last tell from              */
   void *last_olc_targ;         /* olc control                          */
   int last_olc_mode;           /* olc control                          */

Directly below that, add:

#ifdef I3
   struct i3char_data *i3chardata;
#endif

8. Open utils.c and locate the following:

  case ETEXT_FILE:  
    prefix = LIB_PLRTEXT;
    suffix = SUF_TEXT;
    break;

Directly below that, add:

  case I3_FILE:
    prefix = LIB_PLRI3;
    suffix = SUF_I3;
    break;

9. Open utils.h and locate the following:

/* get_filename() */
#define CRASH_FILE      0
#define ETEXT_FILE      1
#define ALIAS_FILE      2

Directly below that, add:

#define I3_FILE        3

10. From the main directory, under lib, make a directory named plri3

Inside the plri3 directory, issue the following command:

mkdir A-E F-J K-O P-T U-Z ZZZ

11. Run your configure script according to the directions that came with Circle.

Return to the main I3.txt file and continue where you left off.