sunder2.1/clan/
sunder2.1/class/
sunder2.1/class/bak/
sunder2.1/doc/ideas/
sunder2.1/gods/
sunder2.1/log/
sunder2.1/msgbase/
sunder2.1/src/o/
sunder2.1/time/
/**********************************************************
 *************** S U N D E R M U D *** 2 . 0 **************
 **********************************************************
 * The unique portions of the SunderMud code as well as   *
 * the integration efforts for code from other sources is *
 * based primarily on the efforts of:                     *
 *                                                        *
 * Lotherius <aelfwyne@operamail.com> (Alvin W. Brinson)  *
 *    and many others, see "help sundermud" in the mud.   *
 **********************************************************/

/* db2.c */

#include "everything.h"
#include "db.h"

extern int flag_lookup args((const char *name, const struct flag_type *flag_table));

/* values for db2.c */
struct       social_type     social_table[MAX_SOCIALS];
int          social_count            = 0;

/* Yeah I do something different here, so shoot me. */

void load_rc ( )
{
     FILE    *fpt;
     char    key[256];
     char    value[256];
     int     done = FALSE;

     if ( ( fpt = fopen ( "../bin/sunder.rc", "r" ) ) == NULL )
     {
          bugf ( "Unable to load bin/sunder.rc. Run autosetup, or copy sunder.rc.autoback to sunder.rc and restart." );
          exit ( 1 );
     }

     while (!done)
     {
          fscanf ( fpt, "%s %s", key, value );

          switch ( UPPER (key[0]))
          {
          case 'C':
               if ( !str_cmp ( key, "COLORLEVEL" ) )
                    mud.clogin = atoi (value);
               break;
          case 'D':
               if ( !str_cmp ( key, "DEATHLEVEL" ) )
                    mud.death = atoi (value);
               else if ( !str_cmp ( key, "DIFFICULTY" ) )
                    mud.mudxp = atoi (value);
               break;
          case 'E':
               if ( !str_cmp (key, "End") )
               {
                    done = TRUE;
                    break;
               }
               break;
          case 'M':
               if ( !str_cmp ( key, "MAKELEVEL" ) )
                    mud.makelevel = atoi(value);
               else if ( !str_cmp ( key, "MAKECOST" ) )
                    mud.makecost = atoi(value);
               else if ( !str_cmp ( key, "MAKEQP" ) )
                    mud.makeqp = atoi(value);
               break;
          case 'N':
               if ( !str_cmp ( key, "NEED_FORDEMI" ) )
                    mud.fordemi = atoi (value);
               else if ( !str_cmp (key, "NOVERIFY") )
                    mud.verify = FALSE;
               break;
          case 'P':
               if ( !str_cmp ( key, "PORT_NUM") )
                    mud.port = atoi (value);
               break;
          case 'V':
               if ( !str_cmp (key, "VERIFY_EMAIL") )
                    mud.verify = TRUE;
               break;
          }
     }
     fclose ( fpt );
     return;
}

/* 
 * snarf a socials file 
 * Modified below to use ~ at the end of the lines.
 * Now loads socials from a set non-area based file.
 */

void load_socials ( void )
{
     SNP ( strArea, "%s%s", DATA_DIR, SOCIAL_FILE );

     if ( !( fpArea = fopen ( strArea, "r" ) ) )
     {
          bugf ( "load_socials: Unable to open %s for reading!", strArea);
          perror ( strArea );
          return;
     }

     for ( ;; )
     {
          struct social_type  social;
          char               *temp;

          /* clear social */
          social.char_no_arg 	= NULL;
          social.others_no_arg 	= NULL;
          social.char_found 	= NULL;
          social.others_found 	= NULL;
          social.vict_found 	= NULL;
          social.char_not_found = NULL;
          social.char_auto 	= NULL;
          social.others_auto 	= NULL;

          temp 			= fread_string ( fpArea );
          if ( !strcmp ( temp, "#0" ) )
               return;		        /* done - # by itself means a social has ended before all lines were read. */
          				/* $ by itself means that line is blank but more exist. */
          SLCPY ( social.name, temp );

          temp = fread_string ( fpArea );   	/* Read next line */
          if ( !strcmp ( temp, "$" ) )      	/* If it is blank, set char_no_arg null */
               social.char_no_arg = NULL;
          else if ( !strcmp ( temp, "#" ) ) 	/* If it is a #, complete this social and go to the next. */
          {
               social_table[social_count] = social;
               social_count++;
               continue;
          }
          else
               social.char_no_arg = temp;   // Else, set the field on the social and look for the next.

          temp = fread_string ( fpArea );   // Same thing, for others_no_arg
          if ( !strcmp ( temp, "$" ) )
               social.others_no_arg = NULL;
          else if ( !strcmp ( temp, "#" ) )
          {
               social_table[social_count] = social;
               social_count++;
               continue;
          }
          else
               social.others_no_arg = temp;

          temp = fread_string ( fpArea );   // Same thing, for char_found
          if ( !strcmp ( temp, "$" ) )
               social.char_found = NULL;
          else if ( !strcmp ( temp, "#" ) )
          {
               social_table[social_count] = social;
               social_count++;
               continue;
          }
          else
               social.char_found = temp;

          temp = fread_string ( fpArea );  // Same thing, for others_found
          if ( !strcmp ( temp, "$" ) )
               social.others_found = NULL;
          else if ( !strcmp ( temp, "#" ) )
          {
               social_table[social_count] = social;
               social_count++;
               continue;
          }
          else
               social.others_found = temp;

          temp = fread_string ( fpArea );    // Same thing, for vict_found
          if ( !strcmp ( temp, "$" ) )
               social.vict_found = NULL;
          else if ( !strcmp ( temp, "#" ) )
          {
               social_table[social_count] = social;
               social_count++;
               continue;
          }
          else
               social.vict_found = temp;

          temp = fread_string ( fpArea );   // Same thing for char_not_found
          if ( !strcmp ( temp, "$" ) )
               social.char_not_found = NULL;
          else if ( !strcmp ( temp, "#" ) )
          {
               social_table[social_count] = social;
               social_count++;
               continue;
          }
          else
               social.char_not_found = temp;

          temp = fread_string ( fpArea );   // Same thing for char_auto
          if ( !strcmp ( temp, "$" ) )
               social.char_auto = NULL;
          else if ( !strcmp ( temp, "#" ) )
          {
               social_table[social_count] = social;
               social_count++;
               continue;
          }
          else
               social.char_auto = temp;

          temp = fread_string ( fpArea );    // Same thing for others_auto
          if ( !strcmp ( temp, "$" ) )
               social.others_auto = NULL;
          else if ( !strcmp ( temp, "#" ) )
          {
               social_table[social_count] = social;
               social_count++;
               continue;
          }
          else
               social.others_auto = temp;    // And we're going to assume this social is done without checking :)

          social_table[social_count] = social;
          social_count++;
     }
     fclose ( fpArea );
     strArea[0] = '\0';
     return;
}