#include <stdio.h> #include <time.h> #include "structs.h" #define bytemask 0xFF struct old_char_point_data { sh_int mana; sh_int max_mana; /* Not useable may be erased upon player file renewal */ sh_int hit; sh_int max_hit; /* Max hit for NPC */ sh_int move; sh_int max_move; /* Max move for NPC */ byte armor; /* Internal -100..100, external -10..10 AC */ int gold; /* Money carried */ int exp; /* The experience of the player */ sbyte hitroll; /* Any bonus or penalty to the hit roll */ sbyte damroll; /* Any bonus or penalty to the damage roll */ }; struct char_file_old_u { byte sex; byte class; byte level; time_t birth; /* Time of birth of character */ int played; /* Number of secs played in total */ ubyte weight; ubyte height; char title[80]; sh_int hometown; char description[240]; bool talks[MAX_TOUNGE]; sh_int load_room; /* Which room to place char in */ struct char_ability_data abilities; struct old_char_point_data points; struct char_skill_data skills[MAX_SKILLS]; struct affected_type affected[MAX_AFFECT]; /* specials */ byte spells_to_learn; int alignment; time_t last_logon; /* Time (in secs) of last logon */ ubyte act; /* ACT Flags */ /* char data */ char name[20]; char pwd[11]; sh_int apply_saving_throw[5]; int conditions[3]; }; void do_it(FILE *src, FILE *trg); main(int argc, char **argv) { FILE *src, *trg; if (argc != 3) { fprintf(stderr, "Usage: %s source target\n", argv[0]); exit (0); } else if (!(src = fopen(argv[1], "rb"))) fprintf(stderr, "%s: Could not open.\n", argv[1]); else if (!(trg = fopen(argv[2], "wb"))) fprintf(stderr, "%s: Could not open.\n", argv[2]); else do_it(src, trg); fclose(src); fclose(trg); } void do_it(FILE *src, FILE *trg) { struct char_file_u buf; struct char_file_old_u oldbuf; int a,b,c,d, n; srand((int) time(0)); n=1; for (;;) { fread(&oldbuf, sizeof(oldbuf), 1, src); if (feof(src)) break; /* do something */ buf.sex = oldbuf.sex; buf.class = oldbuf.class; buf.level = oldbuf.level; buf.birth = oldbuf.birth; /* Time of birth of character */ buf.played = oldbuf.played; /* Number of secs played in total */ buf.weight = oldbuf.weight; buf.height = oldbuf.height; strcpy(buf.title, oldbuf.title); buf.hometown = oldbuf.hometown; strcpy(buf.description, oldbuf.description); buf.talks[0] = oldbuf.talks[0]; buf.talks[1] = oldbuf.talks[1]; buf.talks[2] = oldbuf.talks[2]; buf.load_room = oldbuf.load_room; buf.abilities = oldbuf.abilities; buf.points.mana = oldbuf.points.mana; buf.points.max_mana = oldbuf.points.max_mana; buf.points.hit = oldbuf.points.hit; buf.points.max_hit = oldbuf.points.max_hit; buf.points.move = oldbuf.points.move; buf.points.max_move = oldbuf.points.max_move; buf.points.armor = 100; buf.points.gold = oldbuf.points.gold; buf.points.exp = oldbuf.points.exp; buf.points.hitroll = 0; buf.points.damroll = 0; for(n=0; n < MAX_SKILLS; n++) buf.skills[n] = oldbuf.skills[n]; for(n=0; n < MAX_AFFECT; n++) buf.affected[n] = oldbuf.affected[n]; buf.spells_to_learn = oldbuf.spells_to_learn; buf.alignment = oldbuf.alignment; buf.last_logon = oldbuf.last_logon; buf.act = oldbuf.act; strcpy(buf.name,oldbuf.name); strcpy(buf.pwd, oldbuf.pwd); buf.apply_saving_throw[0] = oldbuf.apply_saving_throw[0]; buf.apply_saving_throw[1] = oldbuf.apply_saving_throw[1]; buf.apply_saving_throw[2] = oldbuf.apply_saving_throw[2]; buf.apply_saving_throw[3] = oldbuf.apply_saving_throw[3]; buf.apply_saving_throw[4] = oldbuf.apply_saving_throw[4]; buf.conditions[0] = oldbuf.conditions[0]; buf.conditions[1] = oldbuf.conditions[1]; buf.conditions[2] = oldbuf.conditions[2]; /* do something else */ fwrite(&buf, sizeof(buf), 1, trg); } printf("Size of buf is %d\n\rSize of oldbuf is %d\n\r", sizeof(buf), sizeof(oldbuf)); }