/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <malloc.h>
#include <time.h>
#include "protos.h"

struct char_file_old1 {
  byte sex;
  byte class;
  byte level[8];
  time_t birth;  /* Time of birth of character     */
  int played;    /* Number of secs played in total */
  
  int   race;
  ubyte weight;
  ubyte height;
  
  char title[80];
  sh_int hometown;
  char description[240];
  bool talks[MAX_TOUNGE];
  long extra_flags;
  
  sh_int load_room;            /* Which room to place char in  */
  
  struct char_ability_data abilities;
  
  struct char_point_data points;
  
  struct char_skill_data skills[200];
};

struct char_file_old2 {

  struct affected_type affected[MAX_AFFECT];

  /* specials */
  
  byte spells_to_learn;
  int alignment;
  
  long affected_by;
  long affected_by2;
  
  time_t last_logon;  /* Time (in secs) of last logon */
  long    act;          /* ACT Flags                    */
  
  /* char data */
  char name[20];
  char pwd[11];
  sh_int apply_saving_throw[5];
  int conditions[3];
  int startroom;  /* which room the player should start in */
};

struct char_file_insert {
  struct char_skill_data skills[200];
};

struct char_file_insert insert;

struct moron {
  struct char_file_old1 pt1;
  struct char_file_old2 pt2;
} **dummy;


int change_struct( int orig_ammt, char *s);
char *time_print(long et);
int load_playerfile(char *argv[]);
int orig_ammt=0, after_ammt=0;
int our_pos = 0;

int get_int(int min, int max, int zero_ok)
{
  char buff[20];   /* We should never need anything over 10^20th */
  int i,isok=FALSE;
  printf("\n");
  do {
    printf(">");
    gets(buff);
    i=atoi(buff);
    if( i > max || i < min)
      printf("Hey bozo, you can't do that.\n");
    else if(i==0 && !zero_ok)
      printf("Sorry peanut-head, that was unacceptable.\n");
    else isok=TRUE;
  }while(!isok);
  return i;
}

get_string(char *s)
{
  do {
    printf(">");
    gets(s);
    if(*s=='\0') printf("There was nothing there!\n");
    else if(*s==' ')  printf("Please do not start with a blank.\n");
  }while(*s=='\0' || *s==' ');
}

main(int argc, char *argv[])
{
  char tempbuf[255];
  time_t CURRENT_TIME;
  int choice,j;
  register i;
  int number_level[9];
  
  system("clear");
  if(argc != 3) {
    printf("please use this program in the following format:");
    printf("\n<%s> <input file> <output file>\n",argv[0]);
    exit(0);
  }
  if(!strcmp(argv[1],argv[2])) {
    printf("\nPlease use a seperate files for input and output.\n");
    exit(0);
  }
  orig_ammt=load_playerfile(argv);
  CURRENT_TIME=time(0);

  printf("\nCurrent time: %s\n",time_print(CURRENT_TIME));
  printf("Attempting to convert player file.\n");
  change_struct(orig_ammt, argv[2]);
  printf("Done, new player file is in %s.", argv[2]);
}

int change_struct( int orig_ammt, char *s)
{
  int i,j;
  FILE *fl;

  for(i=0;i<200;i++) {
    insert.skills[i].learned=0;
    insert.skills[i].flags=0;
  }

  if(!(fl = fopen(s, "w"))) {
    printf("\nCan not open %s, bye!\n",s);
    exit(0);
  }

  for(i=0;i<orig_ammt;i++) {
    fwrite(&(dummy[i]->pt1), sizeof(struct char_file_old1), 1, fl);
    fwrite(&insert,sizeof(struct char_file_insert), 1, fl);
    fwrite(&(dummy[i]->pt2), sizeof(struct char_file_old2), 1, fl);
  }
  fclose(fl);
  printf("\nAll done!\n");
}

  
int load_playerfile(char *argv[]) {
  int ammt=0;
  FILE *fl;

  if (!(fl = fopen(argv[1], "r")))        {
    printf("\nCan not open %s, bye!\n",argv[1]);
    exit(0);
  }
  dummy=(struct moron**)malloc(10000 * sizeof(struct moron));
  /*   access_rent_files(); */
  if(dummy==NULL) {
    printf("ack!\n");
    exit(1);
  }
  for (;!feof(fl);)    {
    dummy[ammt]=(struct moron *)malloc(sizeof(struct moron));
    fread(&(dummy[ammt]->pt1), sizeof(struct char_file_old1), 1, fl); 
    fread(&(dummy[ammt]->pt2), sizeof(struct char_file_old2), 1, fl); 
    /*     printf("\n[%s] <%d>",dummy[ammt]->grunt.name,ammt);  */
    if (!feof(fl)) {
      ammt++;
    }
  }
  printf("\n%d players read.\n",ammt);
  return ammt;
}
  

char *time_print(long et)
{
  char *buff;

  buff= (char *)asctime(localtime(&et));
  *(buff + strlen(buff) -1) = '\0';
  return(buff);
}