Пример #1
0
void load_changes(void)
{
    FILE *fp;
    int i;

    totChanges = 0;
    if ( !(fp = fopen( CHANGES_FILE, "r")) )
    {
        bug( "Could not open Changes File for reading.", 0 );
        return;
    }

    fscanf( fp, "%d\n", &maxChanges );

    /* Use malloc so we can realloc later on */
    changes_table = malloc( sizeof( CHANGE_DATA) * (maxChanges+1) );

    for( i = 0; i < maxChanges; i++ )
    {
        totChanges++;
        changes_table[i].change = fread_string( fp );
        changes_table[i].coder = fread_string( fp );
        changes_table[i].date = fread_string( fp );
        changes_table[i].mudtime = fread_number( fp );
    }
    changes_table[maxChanges].coder = str_dup("");
    fclose(fp);
    return;                                                 /* just return */
}
Пример #2
0
void load_logs(void)
{
    FILE *fp;
    int i;

    totLogs = 0;
    if ( !(fp = fopen( LOG_FILE, "r")) )
    {
        bug( "Could not open Log File for reading.", 0 );
        return;
    }

    fscanf( fp, "%d\n", &maxLogs );

    /* Use malloc so we can realloc later on */
    log_table = malloc( sizeof( LOG_DATA) * (maxLogs+1) );

    for( i = 0; i < maxLogs; i++ )
    {
        totLogs++;
        log_table[i].reporter = fread_string( fp );
        log_table[i].type = fread_string( fp );
        log_table[i].date = fread_string( fp );
        log_table[i].log = fread_string( fp );
    }
    log_table[maxLogs].reporter = str_dup("");
    fclose(fp);
    return;                                                 /* just return */
}
Пример #3
0
void read_exits( FILE* fp, room_data* room, int vnum )
{
  exit_data*    exit;
  char        letter;

  for( ; ; ) {
    if( ( letter = fread_letter( fp ) ) != 'D' )
      break;

    exit = add_exit( room, fread_number( fp ) );

    exit->name        = fread_string( fp, MEM_EXIT );
    exit->keywords    = fread_string( fp, MEM_EXIT );
    exit->exit_info   = fread_number( fp );
    exit->key         = fread_number( fp );
    exit->to_room     = (room_data*) fread_number( fp );
    exit->strength    = fread_number( fp );
    exit->light       = fread_number( fp );
    exit->size        = fread_number( fp );

    if( exit->direction < 0 || exit->direction > 6 ) 
      panic( "Fread_rooms: vnum %d has bad door number.", vnum );
    }

  ungetc( letter, fp );
}
Пример #4
0
NOTE_DATA * read_log( FILE *fp )
{
    NOTE_DATA * log;
    char * word;

    log = alloc_mem( sizeof( NOTE_DATA ) );
    
    for ( ; ; )
    {
        word = fread_word( fp );
        if ( !str_cmp( word, "Sender" ) )
            log->sender   = fread_string( fp );
        else if ( !str_cmp( word, "Date" ) )
            log->date     = fread_string( fp );
        else if ( !str_cmp( word, "Subject" ) )
            log->subject  = fread_string( fp );
        else if ( !str_cmp( word, "Text" ) )
            log->text     = fread_string( fp );
        else if ( !str_cmp( word, "Endlog" ) )
        {
            fread_to_eol( fp );
            log->next             = NULL;
            return log;
        }
        else
        {
            free_mem( log, sizeof( NOTE_DATA ) );
            bug( "read_log: bad key word.", 0 );
            return NULL;
        }
    }
}
Пример #5
0
void load_group( FILE *fp, struct group_type *group )
{
	int i;
	char *temp;

	group->name	= fread_string(fp);

	for ( i = 0; i < MAX_CLASS; ++i )
		group->rating[i]	= fread_number( fp );

	i = 0;

	while(TRUE)
	{
		temp = fread_string(fp);
		if ( !str_cmp( temp, "End" ) || i >= MAX_IN_GROUP )
      {
         while( i < MAX_IN_GROUP )
                group->spells[i++] = str_dup( "" );
			break;
      }
	   else
			group->spells[i++]	= temp;
	}
}
Пример #6
0
/*
 * Snarf a help section.
 */
void load_helps( FILE *fp )
{
    HELP_DATA *pHelp;

    for ( ; ; )
    {
	pHelp		= alloc_perm( sizeof(*pHelp) );
	pHelp->level	= fread_number( fp );
	pHelp->keyword	= fread_string( fp );
	if ( pHelp->keyword[0] == '$' )
	    break;
	pHelp->text	= fread_string( fp );

	if ( !str_cmp( pHelp->keyword, "greeting" ) )
	    help_greeting = pHelp->text;

	if ( help_first == NULL )
	    help_first = pHelp;
	if ( help_last  != NULL )
	    help_last->next = pHelp;

	help_last	= pHelp;
	pHelp->next	= NULL;
	top_help++;
    }

    return;
}
Пример #7
0
void load_songs(void)
{
    FILE *fp;
    int count = 0, lines, i;
    char letter;

    /* reset global */
    for (i = 0; i <= MAX_GLOBAL; i++)
	channel_songs[i] = -1;

    if ((fp = fopen(MUSIC_FILE,"r")) == NULL)
    {
	bug("Couldn't open music file, no songs available.",0);
	fclose(fp);
	return;
    }

    for (count = 0; count < MAX_SONGS; count++)
    {
        letter = fread_letter(fp);
        if (letter == '#')
        {
            if (count < MAX_SONGS)
                song_table[count].name = NULL;
            fclose(fp);
            return;
        }
  	else
	    ungetc(letter,fp);

	song_table[count].group = fread_string(fp);
	song_table[count].name 	= fread_string(fp);

	/* read lyrics */
	lines = 0;

	for ( ; ;)
	{
	    letter = fread_letter(fp);

	    if (letter == '~')
	    {
		song_table[count].lines = lines;
		break;
	    }
	    else
		ungetc(letter,fp);
		
	    if (lines >= MAX_LINES)
   	    {
		bug("Too many lines in a song -- limit is  %d.",MAX_LINES);
		break;
	    }

	    song_table[count].lyrics[lines] = fread_string_eol(fp);
	    lines++;
	}
    }
}
Пример #8
0
void read_trivia(void)
{
	FILE *fp;
	TRIVIA *strivia = 0;
	HINT *hint;
	char *word;

	if((fp = fopen(TRIVIA_FILE, "r")) == 0)
	{
		bug("read_trivia: unable to open file ro reading!", 0);
		return;
	}

	while(1)
	{
		word = fread_word(fp);

		if(!str_cmp(word, "end"))
			break;

		if(!str_cmp(word, "trivia"))
		{
			strivia = alloc_perm(sizeof(*strivia));
			strivia->question = fread_string(fp);
			strivia->answer = fread_string(fp);
			strivia->character = fread_string(fp);
			strivia->winner = fread_string(fp);
			strivia->guesses = fread_number(fp);
			strivia->time = fread_number(fp);
			strivia->timeleft = fread_number(fp);
			strivia->reward = fread_number(fp);
			strivia->next = trivia_list;
			trivia_list = strivia;
			continue;
		}

		if(!str_cmp(word, "hint"))
		{
			if(!strivia)
			{
				bug("read_trivia: hint read before trivia laoded!", 0);
				exit(1);
			}

			hint = alloc_perm(sizeof(*hint));
			hint->hint = fread_string(fp);
			hint->next = strivia->hints;
			strivia->hints = hint;
			continue;
		}

		bug("read_trivia: wrong word!", 0);
		break;
	}

	return;
}
Пример #9
0
void fread_comment( CHAR_DATA * ch, FILE * fp )
{
   NOTE_DATA *pnote;

   for( ;; )
   {
      char letter;

      do
      {
         letter = getc( fp );
         if( feof( fp ) )
         {
            fclose( fp );
            return;
         }
      }
      while( isspace( letter ) );
      ungetc( letter, fp );

      CREATE( pnote, NOTE_DATA, 1 );

      if( str_cmp( fread_word( fp ), "sender" ) )
         break;
      pnote->sender = fread_string( fp );

      if( str_cmp( fread_word( fp ), "date" ) )
         break;
      pnote->date = fread_string( fp );

      if( str_cmp( fread_word( fp ), "to" ) )
         break;
      pnote->to_list = fread_string( fp );

      if( str_cmp( fread_word( fp ), "subject" ) )
         break;
      pnote->subject = fread_string( fp );

      if( str_cmp( fread_word( fp ), "text" ) )
         break;
      pnote->text = fread_string( fp );

      pnote->next = ch->comments;
      pnote->prev = NULL;
      ch->comments = pnote;
      return;
   }

   bug( "fread_comment: bad key word. strap in!", 0 );
   /*
    * exit( 1 ); 
    */
}
Пример #10
0
/* Read in an individual slaytype */
void fread_slay( SLAY_DATA * slay, FILE * fp )
{
   const char *word;
   bool fMatch;

   for( ;; )
   {
      word = feof( fp ) ? "End" : fread_word( fp );
      fMatch = FALSE;

      switch ( UPPER( word[0] ) )
      {
         case '*':
            fMatch = TRUE;
            fread_to_eol( fp );
            break;

         case 'C':
            KEY( "Cmessage", slay->cmsg, fread_string( fp ) );
            KEY( "Color", slay->color, fread_number( fp ) );
            break;

         case 'E':
            if( !str_cmp( word, "End" ) )
            {
               if( !slay->owner )
                  slay->owner = STRALLOC( "Any" );
               return;
            }
            break;

         case 'O':
            KEY( "Owner", slay->owner, fread_string( fp ) );
            break;

         case 'R':
            KEY( "Rmessage", slay->rmsg, fread_string( fp ) );
            break;

         case 'T':
            KEY( "Type", slay->type, fread_string( fp ) );
            break;

         case 'V':
            KEY( "Vmessage", slay->vmsg, fread_string( fp ) );
            break;
      }

      if( !fMatch )
         bug( "Fread_slay: no match: %s", word );
   }
}
Пример #11
0
/* added for new index - 5/5/02 - Nopey */
void fread_news_type( NEWS_TYPE * type, FILE * fp )
{
   const char *word;
   bool fMatch;

   for( ;; )
   {
      word = feof( fp ) ? "End" : fread_word( fp );
      fMatch = FALSE;

      switch ( UPPER( word[0] ) )
      {
         case '*':
            fread_to_eol( fp );
            break;

         case 'C':
            KEY( "Cmd_Name", type->cmd_name, fread_string( fp ) );
            break;

         case 'E':
            if( !str_cmp( word, "END" ) )
            {
               if( !type->name )
                  type->name = STRALLOC( "Unknown" );

               return;
            }
            break;

         case 'H':
            KEY( "Header", type->header, fread_string( fp ) );
            break;

         case 'L':
            KEY( "Level", type->level, fread_number( fp ) );
            break;

         case 'N':
            KEY( "Name", type->name, fread_string( fp ) );
            break;

         case 'V':
            KEY( "Vnum", type->vnum, fread_number( fp ) );
            break;
      }

      if( !fMatch )
         bug( "fread_news_type(): no match: %s", word );
   }
}
Пример #12
0
static struct mail_t *read_mail_record(FILE *mail_file)
{
  char line[READ_SIZE];
  long sender, recipient;
  time_t sent_time;
  struct mail_t *record;

  if (!get_line(mail_file, line))
  	return NULL;

  if (sscanf(line, "### %ld %ld %ld", &recipient, &sender, (long *)&sent_time) != 3) {
  	log("Mail system - fatal error - malformed mail header");
  	log("Line was: %s", line);
  	return NULL;
  }

  CREATE(record, struct mail_t, 1);

  record->recipient = recipient;
  record->sender = sender;
  record->sent_time = sent_time;
  record->body = fread_string(mail_file, "read mail record");

  return record;
}
Пример #13
0
void load_materials(void) {
	bool fMatch;

	closeReserve();
	FILE *fp = fopen(MATERIAL_FILE, "r");
	if(!fp) return; // no materials to load.

	while(true)
	{
		const char *word  = feof( fp ) ? "End" : fread_word( fp );
		fMatch = FALSE;

		if(!str_cmp(word, "End")) {
			break;
		}

		if(!str_cmp(word, "MAT")) {
			MAT_TYPE *mat = new_mat();

			while(true) {
				word = feof( fp ) ? "End" : fread_word(fp);
				if(!str_cmp(word, "End")) {
					bug(Format("Prematurely reached end of materials data file; data corrupted!"), 0);
					fclose(fp);
					openReserve();
					return;
				}
				bool finished = false;
				switch ( UPPER(word[0]) )
				{
				case '*':
					fMatch = TRUE;
					fread_to_eol( fp );
					break;
				case 'E':
					if(!str_cmp(word, "ENDMAT")) {

						mat->next = mat_list;
						mat_list = mat;

						matValue++;
						finished = true;
						break;
					}
				case 'V':
					KEY("VAL",	mat->assignedValue, fread_number(fp) );
					break;
				case 'N':
					KEYS( "NAME",		mat->name,		fread_string(fp) );
					break;
				}
				if(finished)
					break;
			}
		}
	}
	fclose(fp);
	openReserve();
}
Пример #14
0
void LoadAnnounce()
{
    int nNum;
    FILE *fpi;
    if ((fpi = fopen("../txt/announce.txt", "r")) == NULL)
    {
        log_string("Fatal Error: announce.txt not found! Making one!");
        SaveAnnounce();
        return;
    }
    for ( nNum = 0; nNum < 10; nNum++ )
    {
        mudannounce_table[nNum].caAnnounceName = str_dup(fread_string( fpi ));
        mudannounce_table[nNum].caAnnounceDescription = str_dup(fread_string( fpi ));
    }
    fclose(fpi);
}
Пример #15
0
static void
fread_string_discard(gbfile *fd)
{
	char *temp = fread_string(fd);

	if (temp != NULL) {
		xfree(temp);
	}
}
Пример #16
0
void Load_Economy()
{

    int i;
    FILE *fp;

    if ((fp = fopen("../txt/economy.txt", "r")) == NULL)
    {
        log_string("Fatal Error: economy.txt not found!");
        exit(1);
    }
    for (i = 0; i < MAX_ECONOMY; i++)
    {
        economy_table[i].caEconomyName = fread_string(fp);

        economy_table[i].nExpRate = fread_number(fp);
        economy_table[i].nPrimalRate = fread_number(fp);
        economy_table[i].nQuestRate = fread_number(fp);
        economy_table[i].nClassRate = fread_number(fp);

        economy_table[i].nExpAmount = fread_number(fp);
        economy_table[i].nPrimalAmount = fread_number(fp);
        economy_table[i].nQuestAmount = fread_number(fp);
        economy_table[i].nClassAmount = fread_number(fp);

        economy_table[i].nMaxAmount = fread_number(fp);

        economy_table[i].nTimeTillRegeneration = fread_number(fp);
        economy_table[i].nTimeTillReset = fread_number(fp);
        economy_table[i].caLastPerson = fread_string(fp);
        economy_table[i].nExchanges = fread_number(fp);

        economy_table[i].nExpBought = fread_number(fp);
        economy_table[i].nPrimalBought = fread_number(fp);
        economy_table[i].nQuestBought = fread_number(fp);
        economy_table[i].nClassBought = fread_number(fp);

        economy_table[i].nExpSold = fread_number(fp);
        economy_table[i].nPrimalSold = fread_number(fp);
        economy_table[i].nQuestSold = fread_number(fp);
        economy_table[i].nClassSold = fread_number(fp);
    }
    fclose(fp);
}
Пример #17
0
int main(int argc, char** argv) {

  if(sqlite3_open("murk.db", &database)) {
    std::cerr << "Can't open database: " << sqlite3_errmsg(database) << std::endl;
    sqlite3_close(database);
    return 1;
  }
  std::ifstream fp;
  fp.open (strArea.c_str(), std::ifstream::in | std::ifstream::binary);
  if (!fp.is_open()) {
    std::cerr << "Can't find " << strArea << std::endl;
  }
  for (;;) {
    if (fread_letter (fp) != '#') {
      std::cerr << "# not found." << std::endl;
    }
    std::string word = fread_word (fp);
    if (word[0] == '$')
      break;
    else if (word == "HELPS") {
      for (;;) {
        int level = fread_number (fp);
        std::string keyword = fread_string (fp);
        if (keyword[0] == '$')
          break;
        std::string text = fread_string (fp);
        char * z;
        if (text[0] == '.')
          z = sqlite3_mprintf("INSERT INTO 'helps' VALUES(%d,'%q','%q')",
            level, keyword.c_str(), text.substr(1).c_str());
        else
          z = sqlite3_mprintf("INSERT INTO 'helps' VALUES(%d,'%q','%q')",
            level, keyword.c_str(), text.c_str());
        sqlite3_exec(database, z, 0, 0, 0);
        sqlite3_free(z);
      }
    } else {
      std::cerr << "Load helps: bad section name." << std::endl;
    }
  }
  fp.close();
  sqlite3_close(database);
  return 0;
}
Пример #18
0
void load_social (FILE *fp, struct social_type *social)
{
	strcpy(social->name, fread_string (fp));
	social->char_no_arg =   fread_string (fp);
	social->others_no_arg = fread_string (fp);
	social->char_found =    fread_string (fp);
	social->others_found =  fread_string (fp);
	social->vict_found =    fread_string (fp);
	social->char_auto =     fread_string (fp);
	social->others_auto =   fread_string (fp);
}
Пример #19
0
void load_helps( void )
{
  help_data*  help;
  FILE*         fp;
  int          pos;

  echo( "Loading Help ...\n\r" );

  help_list = NULL;
  max_help  = 0;

  fp = open_file( HELP_FILE, "r" );

  if( strcmp( fread_word( fp ), "#HELPS" ) ) 
    panic( "Load_helps: missing header" );

  for( ; ; ) {
    help           = new help_data;
    help->level[0] = fread_number( fp );
    help->level[1] = fread_number( fp );
    help->category = fread_number( fp );
    help->name     = fread_string( fp, MEM_HELP );

    if( *help->name == '$' ) {
      delete help;
      break;
      }

    help->text     = fread_string( fp, MEM_HELP );
    help->immortal = fread_string( fp, MEM_HELP );  

    pos = pntr_search( help_list, max_help, help->name );

    if( pos < 0 )
      pos = -pos-1;

    insert( help_list, max_help, help, pos );
    }

  fclose( fp );
}
Пример #20
0
void load_pkfile()
{
        FILE * fp = fopen(PKRANK_FILE,"r");
	if (fp)
	{
		PKINFO_TYPE * pkholder;
		char * tmp = fread_string(fp);
		while (strcmp(tmp,"END"))
		{
			PKINFO_TYPE * pk = alloc_perm(sizeof(*pk));
			pk->character = str_dup(tmp);
			bug("Read: %s",pk->character);
			pk->pk_count = fread_number(fp);
			bug("Read: %d",pk->pk_count);
			pk->pk_death_count = fread_number(fp);
			bug("Read: %d",pk->pk_death_count);
			if (pkranks == NULL)
			{
				pkranks = pk;
				pkholder = pk;
				pk->next = NULL;
			}
			else;
			{
				pkholder->next = pk;
				pkholder = pk;
				pk->next = NULL;

			}
			tmp = fread_string(fp);
		}		
	}
	else
	{
		pkranks = NULL;
		fp = fopen(PKRANK_FILE,"w");
		fprintf(fp,"END~\n");
		fclose(fp);
	}
}
Пример #21
0
void load_pkstore()
{
    int nNum;
    FILE *fp;
    if ((fp = fopen("../txt/pkstore.txt", "r")) == NULL)
    {
        log_string("Fatal Error: pkstore.txt not found! Making one!");
        save_pkstore();
        return;
    }
    pkstore_table.sStoreName = fread_string ( fp );
    for ( nNum = 0; nNum < 10; nNum++ )
    {
        pkstore_table.sItem[nNum] = str_dup(fread_string( fp ));
        pkstore_table.sItemDescriptions[nNum] = str_dup(fread_string( fp ));
        pkstore_table.nItemVnum[nNum] = fread_number( fp );
        pkstore_table.nItemPk[nNum] = fread_number( fp );
        pkstore_table.nItemQp[nNum] = fread_number( fp );
        pkstore_table.nItemDe[nNum] = fread_number( fp );
        pkstore_table.nItemBought[nNum] = fread_number( fp );
    }
    fclose(fp);
}
Пример #22
0
void clan_table_read() {
    int clan_pos;
    int kill_count;
    FILE *fp;
    char *dummy;
    if((fp = fopen(CLAN_LIST, "r")) != NULL) {
        for(clan_pos = 0; clan_pos <= MAX_CLAN - 1; clan_pos++) {
            dummy = fread_word(fp);
            clan_table[clan_pos].clan_name = fread_string(fp);
            dummy = fread_word(fp);
            clan_table[clan_pos].clan_leader = fread_string(fp);
            dummy = fread_word(fp);
            clan_table[clan_pos].clan_powers_1 = fread_string(fp);
            dummy = fread_word(fp);
            clan_table[clan_pos].clan_powers_2 = fread_string(fp);
            dummy = fread_word(fp);
            clan_table[clan_pos].clan_powers_3 = fread_string(fp);
            dummy = fread_word(fp);
            clan_table[clan_pos].lvnum = fread_number(fp);
            dummy = fread_word(fp);
            clan_table[clan_pos].uvnum = fread_number(fp);
            dummy = fread_word(fp);
            clan_table[clan_pos].clan_recall = fread_number(fp);
            dummy = fread_word(fp);
            for(kill_count = 0; kill_count <= MAX_CLAN - 1; kill_count++) {
                clan_table[clan_pos].clan_kills[kill_count] = fread_number(fp);
            }
        }
    } else {
        /*bug("Cannot Open Clan Table:- Loading Default Table", 0);*/
        return;
    }
    fflush(fp);
    fclose(fp);
    return;
}
Пример #23
0
void artifact_table_read() {
    int art_pos;
    FILE *fp;
    if((fp = fopen(ART_LIST, "r")) != NULL) {
        for(art_pos = 0; art_pos < MAX_ART; art_pos++) {
            artifact_table[art_pos].object_vnum = fread_number(fp);
            artifact_table[art_pos].player_name = fread_string(fp);
        }
    } else {
        /*bug("Cannot Open ARTIFACT Table:- Loading Default Table", 0);*/
        return;
    }
    fflush(fp);
    fclose(fp);
    return;
}
Пример #24
0
 append_to_file(fbuf, buf); } void remove_member(char *name, char *shortname) {
 FILE *fpList;
 FILE *fpNew;
 char *buf;
 char list[MAX_STRING_LENGTH];
 char temp[MAX_STRING_LENGTH];
 if(name[0] == '\0')
 {
   bug("remove_member: No name!\n\r");
   return;
 }
 if(shortname[0] == '\0' || !shortname)
 {
   bug("remove_member: No shortname!\n\r");
   return;
 }
 
 sprintf(list, "%s%s.list", CLAN_DIR, shortname);
 sprintf(temp,"%s.temp", list);
 if ( ( fpList = fopen(list, "r" ) ) == NULL )
 {
    bug("Unable to open member list");
    return;
 }
 if ( ( fpNew = fopen(temp, "w" ) ) == NULL)
 {
    bug("remove_member: Unable to write temp list");
    return;
 }
 
 for ( ; ; )
 {
     if(feof(fpList))
	break;
     buf = feof( fpList ) ? "End" : fread_string( fpList );
     if(!str_cmp(buf, "End") || buf[0] == '\0')
	break;
     if(str_cmp(name, buf) && strlen(buf) > 2)
	fprintf(fpNew, "%s~\n", buf);
 }
 fclose( fpNew );
 fclose( fpList );
 rename(temp, list);
}
Пример #25
0
/*
 * Snarf an 'area' header line.
 */
void load_area( FILE *fp )
{
    AREA_DATA *pArea;

    pArea		= alloc_perm( sizeof(*pArea) );
    pArea->reset_first	= NULL;
    pArea->reset_last	= NULL;
    pArea->name		= fread_string( fp );
    pArea->age		= 15;
    pArea->nplayer	= 0;

    if ( area_first == NULL )
	area_first = pArea;
    if ( area_last  != NULL )
	area_last->next = pArea;
    area_last	= pArea;
    pArea->next	= NULL;

    top_area++;
    return;
}
Пример #26
0
void boot_context_help(void) {
  int i, num;
  FILE *fl;
  char line[READ_SIZE];

  fl = fopen(CONTEXT_HELP_FILE, "r");

  /* init to 'no help' string */
  for (i=0;i < NUM_CONTEXTS;i++)
      context_help_list[i] = NO_HELP;
  
  if (!fl) { 
    log("No context help found : %s", strerror(errno));
    return;
  }
  while (get_line(fl, line)) {
    if (sscanf(line, "#%d *", &num) == 1) /* got a number, now get the text */
      context_help_list[num] = fread_string(fl, "Context sensitive help");
  }
  
  fclose(fl);
}
Пример #27
0
/*
 * Legge una struttura di sinonimo da un file.
 */
SYNO_DATA *fread_synonym( MUD_FILE *fp, int type )
{
	SYNO_DATA	*synonym;

	if ( !fp )
	{
		send_log( NULL, LOG_BUG, "fread_synonym: fp passato è NULL" );
		return NULL;
	}

	if ( type < 0 || type >= MAX_CODE )
	{
		send_log( NULL, LOG_BUG, "fread_synonym: type passato errato: %d", type );
		return NULL;
	}

	CREATE( synonym, SYNO_DATA, 1 );

	synonym->cat = code_code( fp, fread_word(fp), type );
	synonym->syn = fread_string( fp );

	return synonym;
}
Пример #28
0
int fread_number( FILE *fp )
{
  int number = 0;
  int sign = 1;
  char c;

  do {
    c = getc( fp );
    } while( isspace( c ) );

  switch( c ) {
    case '-' :  sign = -1;
    case '+' :  c = getc( fp );
    }

  if( !isdigit( c ) ) {
    bug( "Fread_number: bad format." );
    printf( "%s\n", fread_string( fp, MEM_UNKNOWN ) );
    exit( 1 );
    }

  while( isdigit( c ) ) {
   number = number * 10 + c - '0';
   c = getc( fp );
   }

  number *= sign;

  while( c == ' ' ) {
    c = getc( fp );
    }

  ungetc( c, fp );

  return number;
}
Пример #29
0
NEWS_DATA              *fread_news( FILE * fpin )
{
    const char             *word;
    bool                    fMatch;
    NEWS_DATA              *news = NULL;

    CREATE( news, NEWS_DATA, 1 );

    for ( ;; ) {
        word = feof( fpin ) ? "End" : fread_word( fpin );
        fMatch = FALSE;

        switch ( UPPER( word[0] ) ) {
            case '*':
                fMatch = TRUE;
                fread_to_eol( fpin );
                break;

            case 'D':
                if ( !str_cmp( word, "Day" ) ) {
                    news->day = fread_number( fpin );
                    fMatch = TRUE;
                    break;
                }

            case 'E':
                if ( !str_cmp( word, "End" ) )
                    return news;

            case 'M':
                if ( !str_cmp( word, "Month" ) ) {
                    news->month = fread_number( fpin );
                    fMatch = TRUE;
                    break;
                }

            case 'N':
                if ( !str_cmp( word, "NewsData" ) ) {
                    news->data = fread_string( fpin );
                    fMatch = TRUE;
                    break;
                }

            case 'T':
                if ( !str_cmp( word, "TimeStamp" ) ) {
                    news->time_stamp = fread_number( fpin );
                    if ( news->time_stamp > 0 ) {
                        format_posttime( news );
                    }
                    fMatch = TRUE;
                    break;
                }

            case 'Y':
                if ( !str_cmp( word, "Year" ) ) {
                    news->year = fread_number( fpin );
                    fMatch = TRUE;
                    break;
                }
        }

        if ( !fMatch ) {
            bug( "Load_news: no match: %s", word );
            bug( word, 0 );
        }
    }
    return NULL;
}
Пример #30
0
CHAR_DATA *load_mobile( FILE * fp )
{
   CHAR_DATA *mob = NULL;
   const char *word;
   bool fMatch;
   int inroom = 0;
   ROOM_INDEX_DATA *pRoomIndex = NULL;

   word = feof( fp ) ? "EndMobile" : fread_word( fp );
   if( !str_cmp( word, "Vnum" ) )
   {
      int vnum;

      vnum = fread_number( fp );
      if( get_mob_index( vnum ) == NULL )
      {
         bug( "%s: No index data for vnum %d", __FUNCTION__, vnum );
         return NULL;
      }
      mob = create_mobile( get_mob_index( vnum ) );
      if( !mob )
      {
         for( ;; )
         {
            word = feof( fp ) ? "EndMobile" : fread_word( fp );
            /*
             * So we don't get so many bug messages when something messes up
             * * --Shaddai 
             */
            if( !str_cmp( word, "EndMobile" ) )
               break;
         }
         bug( "%s: Unable to create mobile for vnum %d", __FUNCTION__, vnum );
         return NULL;
      }
   }
   else
   {
      for( ;; )
      {
         word = feof( fp ) ? "EndMobile" : fread_word( fp );
         /*
          * So we don't get so many bug messages when something messes up
          * * --Shaddai 
          */
         if( !str_cmp( word, "EndMobile" ) )
            break;
      }
      extract_char( mob, TRUE );
      bug( "%s: Vnum not found", __FUNCTION__ );
      return NULL;
   }

   for( ;; )
   {
      word = feof( fp ) ? "EndMobile" : fread_word( fp );
      fMatch = FALSE;
      switch ( UPPER( word[0] ) )
      {
         case '*':
            fMatch = TRUE;
            fread_to_eol( fp );
            break;

         case '#':
            if( !str_cmp( word, "#OBJECT" ) )
            {
               mob->tempnum = -9999;   /* Hackish, yes. Works though doesn't it? */
               fread_obj( mob, fp, OS_CARRY );
            }
            break;

         case 'A':
            if( !str_cmp( word, "Affect" ) || !str_cmp( word, "AffectData" ) )
            {
               AFFECT_DATA *paf;

               CREATE( paf, AFFECT_DATA, 1 );
               if( !str_cmp( word, "Affect" ) )
               {
                  paf->type = fread_number( fp );
               }
               else
               {
                  int sn;
                  const char *sname = fread_word( fp );

                  if( ( sn = skill_lookup( sname ) ) < 0 )
                  {
                     if( ( sn = herb_lookup( sname ) ) < 0 )
                        bug( "%s", "load_mobile: unknown skill." );
                     else
                        sn += TYPE_HERB;
                  }
                  paf->type = sn;
               }

               paf->duration = fread_number( fp );
               paf->modifier = fread_number( fp );
               paf->location = fread_number( fp );
               if( paf->location == APPLY_WEAPONSPELL
                   || paf->location == APPLY_WEARSPELL
                   || paf->location == APPLY_REMOVESPELL || paf->location == APPLY_STRIPSN )
                  paf->modifier = slot_lookup( paf->modifier );
               paf->bitvector = fread_bitvector( fp );
               LINK( paf, mob->first_affect, mob->last_affect, next, prev );
               fMatch = TRUE;
               break;
            }
            KEY( "AffectedBy", mob->affected_by, fread_bitvector( fp ) );
            break;

#ifdef OVERLANDCODE
         case 'C':
            if( !str_cmp( word, "Coordinates" ) )
            {
               mob->x = fread_number( fp );
               mob->y = fread_number( fp );
               mob->map = fread_number( fp );

               fMatch = TRUE;
               break;
            }
            break;
#endif

         case 'D':
            if( !str_cmp( word, "Description" ) )
            {
               STRFREE( mob->description );
               mob->description = fread_string( fp );
               fMatch = TRUE;
               break;
            }
            break;

         case 'E':
            if( !str_cmp( word, "EndMobile" ) )
            {
               if( inroom == 0 )
                  inroom = ROOM_VNUM_LIMBO;
               pRoomIndex = get_room_index( inroom );
               if( !pRoomIndex )
                  pRoomIndex = get_room_index( ROOM_VNUM_LIMBO );
               char_to_room( mob, pRoomIndex );
               mob->tempnum = -9998;   /* Yet another hackish fix! */
               update_room_reset( mob, FALSE );
               return mob;
            }
            if( !str_cmp( word, "End" ) ) /* End of object, need to ignore this. sometimes they creep in there somehow -- Scion */
               fMatch = TRUE; /* Trick the system into thinking it matched something */
            break;

         case 'F':
            KEY( "Flags", mob->act, fread_number( fp ) );
            break;

         case 'G':
            KEY( "Gold", mob->gold, fread_number( fp ) );
            break;

         case 'H':
            if( !str_cmp( word, "HpManaMove" ) )
            {
               mob->hit = fread_number( fp );
               mob->max_hit = fread_number( fp );
               mob->mana = fread_number( fp );
               mob->max_mana = fread_number( fp );
               mob->move = fread_number( fp );
               mob->max_move = fread_number( fp );

               if( mob->max_move <= 0 )
                  mob->max_move = 150;

               fMatch = TRUE;
               break;
            }
            break;

         case 'L':
            if( !str_cmp( word, "Long" ) )
            {
               STRFREE( mob->long_descr );
               mob->long_descr = fread_string( fp );
               fMatch = TRUE;
               break;
            }
            KEY( "Level", mob->top_level, fread_number( fp ) );
            break;

         case 'M':
            if( !str_cmp( word, "Mobclan" ) )
            {
               STRFREE( mob->mob_clan );
               mob->mob_clan = fread_string( fp );
               fMatch = TRUE;
               break;
            }
            break;

         case 'N':
            if( !str_cmp( word, "Name" ) )
            {
               STRFREE( mob->name );
               mob->name = fread_string( fp );
               fMatch = TRUE;
               break;
            }
            break;

         case 'P':
            KEY( "Position", mob->position, fread_number( fp ) );
            break;

         case 'R':
            KEY( "Room", inroom, fread_number( fp ) );
            KEY( "Resetvnum", mob->resetvnum, fread_number( fp ) );
            KEY( "Resetnum", mob->resetnum, fread_number( fp ) );
            break;

         case 'S':
            if( !str_cmp( word, "Short" ) )
            {
               STRFREE( mob->short_descr );
               mob->short_descr = fread_string( fp );
               fMatch = TRUE;
               break;
            }
            break;
      }
      if( !fMatch && str_cmp( word, "End" ) )
         bug( "%s: no match: %s", __FUNCTION__, word );
   }
   return NULL;
}