distorted/
distorted/area/
distorted/data/CLN/
/* Pfile Parser exclusively for Asgardian Nightmares
 * by Tien (Robert Yearwood)
 */
#if defined(macintosh)
#include <types.h>
#include <time.h>
#else
#include <sys/types.h>
#include <errno.h>      
#include <unistd.h>     
#include <sys/time.h>
#endif
#include <malloc.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include "merc.h"
#include "recycle.h"
#include "lookup.h"
#include "tables.h"
#include "clan.h"

#define MAX_NEST        150
static  OBJ_DATA *  rgObjNest   [MAX_NEST];

void scan_pfiles (void) 
{
    char strsave[MAX_STRING_LENGTH];
    char currfile[MAX_STRING_LENGTH];
    char name[MAX_STRING_LENGTH];
    char period[MAX_STRING_LENGTH];
    char period2[MAX_STRING_LENGTH];
    DIR * dir_p;
    struct dirent * dir_entry_p;
     sprintf(period,".");
     sprintf(period2,"..");
  sprintf(strsave, "%sa", PLAYER_DIR);
  dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {   
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
    sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);

   sprintf(strsave, "%sb", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
    sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sc", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
    sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sd", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
    sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%se", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sf", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
   if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sg", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sh", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%si", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sj", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sk", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sl", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sm", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sn", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%so", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sp", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sq", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sr", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%ss", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%st", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%su", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sv", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sw", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sx", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sy", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
   sprintf(strsave, "%sz", PLAYER_DIR);
    dir_p = opendir(strsave);
    while( NULL != (dir_entry_p = readdir(dir_p)))
  {
    if (strcmp(dir_entry_p->d_name,period) && strcmp(dir_entry_p->d_name,period2))
   {
    sprintf(currfile,"%s/%s",strsave,dir_entry_p->d_name);
        sprintf(name,"%s",dir_entry_p->d_name);
    scan_file(currfile, name);
   }
  }
  closedir(dir_p);
}
void scan_file( char *file , char *name )
{
    char strsave[MAX_STRING_LENGTH];
  /*  char buf[MAX_STRING_LENGTH]; */
    CHAR_DATA *ch;
    FILE *fp;
    bool found;
    int stat;

    sprintf(strsave,file);
    ch = new_char();
    ch->pcdata = new_pcdata();

    ch->desc                = NULL;
    ch->name                = str_dup( name );
    ch->id              = get_pc_id();
    ch->race                = race_lookup("human");
    ch->act             = PLR_NOSUMMON;
    ch->comm                = COMM_COMBINE 
                    | COMM_PROMPT
                    | COMM_STORE;
    ch->prompt              = str_dup("<%hhp %mm %vmv> ");
    ch->pcdata->confirm_delete      = FALSE;
    ch->pcdata->pwd         = str_dup( "" );
    ch->pcdata->bamfin          = str_dup( "" );
    ch->pcdata->bamfout         = str_dup( "" );
    ch->pcdata->identity                = str_dup( "" );
    ch->pcdata->immskll                 = str_dup( "" );
    ch->pcdata->who_descr       = str_dup( "" );
    ch->pcdata->title           = str_dup( "" );
    ch->pcdata->pretit                  = str_dup( "" ); 
/*    ch->pcdata->colour_name             = str_dup( "" ); */
    ch->pcdata->usr_ttl                 = FALSE;
    ch->gladiator                       = NULL;
    ch->pcdata->tier                    = 1;
    for (stat =0; stat < MAX_STATS; stat++)
    ch->perm_stat[stat]     = 13;
    ch->pcdata->condition[COND_THIRST]  = 48; 
    ch->pcdata->condition[COND_FULL]    = 48;
    ch->pcdata->condition[COND_HUNGER]  = 48;
    ch->pcdata->security        = 0;    /* OLC */
    ch->pload = NULL;                          /* Skyn */
    ch->pcdata->power[POWER_KILLS] = 0;     /* Highlander */
    ch->pcdata->power[POWER_POINTS] = 0;
    ch->pcdata->power[POWER_LEVEL] = 0;
    ch->ghost = str_dup( "" );
    ch->ghost_timer = -1;
    ch->regen_rate = 0;
    ch->mana_regen_rate = 0;
    ch->toughness = 0;
    ch->pcdata->status = 0;
    for(stat =0; stat < 6; stat++)
     ch->magic[stat] = 1;

    for(stat =1; stat < 11; stat++)
     ch->stance[stat]=1;

    /* Sets all skills to not learned before read of what they know */
    for(stat = 0; stat < MAX_SKILL; stat++)
     ch->pcdata->learned[stat] = -1;

    ch->morph = NULL;
    ch->pcdata->target = NULL;
    ch->morph_form[0] = 0;
  
    found = FALSE;
    if ( ( fp = fopen( strsave, "r" ) ) != NULL )
    {
    int iNest;

    for ( iNest = 0; iNest < MAX_NEST; iNest++ )
        rgObjNest[iNest] = NULL;

    found = TRUE;
    for ( ; ; )
    {
        char letter;
        char *word;

        letter = fread_letter( fp );
        if ( letter == '*' )
        {
        fread_to_eol( fp );
        continue;
        }

        if ( letter != '#' )
        {
        bug( "Load_char_obj: # not found.", 0 );
        break;
        }

        word = fread_word( fp );
        if      ( !str_cmp( word, "PLAYER" ) ) fread_char ( ch, fp );
        else if ( !str_cmp( word, "OBJECT" ) ) fread_obj  ( ch, fp );
        else if ( !str_cmp( word, "O"      ) ) fread_obj  ( ch, fp );
        else if ( !str_cmp( word, "PET"    ) ) fread_pet  ( ch, fp );
        else if ( !str_cmp( word, "END"    ) ) break;
        else
        {
        bug( "Load_char_obj: bad section.", 0 );
        break;
        }
    }
    fclose( fp );
    }

    if (ch->pcdata->prank <= 0)
    {
        ch->pcdata->prank = 1500;
        ch->pcdata->prank += ch->pcdata->pkills * 2;
        ch->pcdata->prank -= ch->pcdata->pdeath * 2;
    }

    if (ch->pcdata->arank <= 0)
        ch->pcdata->arank = 1500;

    /* initialize race */
    if (found)
    {
    int i;

    if (ch->race == 0)
        ch->race = race_lookup("human");

    ch->size = pc_race_table[ch->race].size;
    ch->dam_type = 17; /*punch */

    for (i = 0; i < 5; i++)
    {
        if (pc_race_table[ch->race].skills[i] == NULL)
        break;
        group_add(ch,pc_race_table[ch->race].skills[i],FALSE);
    }
    ch->affected_by = ch->affected_by|race_table[ch->race].aff;
    ch->shielded_by = ch->shielded_by|race_table[ch->race].shd;
    ch->imm_flags   = ch->imm_flags | race_table[ch->race].imm;
    ch->res_flags   = ch->res_flags | race_table[ch->race].res;
    ch->vuln_flags  = ch->vuln_flags | race_table[ch->race].vuln;
    ch->form    = race_table[ch->race].form;
    ch->parts   = race_table[ch->race].parts;
    }

    
    /* RT initialize skills */

    if (found && ch->version < 2)  /* need to add the new skills */
    {
    ch->pcdata->learned[gsn_recall] = 50;
    }
 
    /* fix levels */
    if (found && ch->version < 3 && (ch->level > 35 || ch->trust > 35))
    {
    switch (ch->level)
    {
        case(40) : ch->level = 60;  break;  /* imp -> imp */
        case(39) : ch->level = 58;  break;  /* god -> supreme */
        case(38) : ch->level = 56;  break;  /* deity -> god */
        case(37) : ch->level = 53;  break;  /* angel -> demigod */
    }

        switch (ch->trust)
        {
            case(40) : ch->trust = 60;  break;  /* imp -> imp */
            case(39) : ch->trust = 58;  break;  /* god -> supreme */
            case(38) : ch->trust = 56;  break;  /* deity -> god */
            case(37) : ch->trust = 53;  break;  /* angel -> demigod */
            case(36) : ch->trust = 51;  break;  /* hero -> hero */
        }
    }

    /* ream gold */
    if (found && ch->version < 4)
    {
    ch->gold   /= 100;
    }

    // Do the testing stuff here.
    reset_char(ch);
    save_char_obj(ch);
    free_char(ch);
    return;
}