#include // Provides external file streams #include // Provides cin, cout, cerr #include // Provides isspace #include // Provides atoi #include // Provides sprintf #include // Provides AnsiString void Dog::getinfo(FILE* &ins) { int ctr; // char *str = NULL; eatspace(ins); getname(ins); eatheader(ins); for (ctr = 0;ctr < RACENUM;ctr++) if (!fillrace(ins,race[ctr])) { race[ctr].dist = race[ctr-1].dist; race[ctr].pp = race[ctr-1].pp; race[ctr].time = race[ctr-1].time; race[ctr].gate = race[ctr-1].gate; race[ctr].oneeigth = race[ctr-1].oneeigth; race[ctr].stretch = race[ctr-1].stretch; race[ctr].finish = race[ctr-1].finish; race[ctr].grade = race[ctr-1].grade; } eatspace(ins); geteffgrade(); calcform(); calculate(); } //---------------------------------------------------------- // Gets one integer from input file and return it to program void Dog::getname(FILE*& ins) { fgetc(ins); fgetc(ins); fgetc(ins); fgets(dogname,25,ins); } //---------------------------------------------------------- // Reads and discard "white space" from file void Dog::eatspace(FILE *&ins) { char ch; do { ch = (char)fgetc(ins); } while ((isspace(ch))||(ch =='-')); ungetc(ch,ins); return; } //---------------------------------------------------------- /// burn 3 lines of header... void Dog::eatheader(FILE*& ins) { while (fgetc(ins) != '\n') {} while (fgetc(ins) != '\n') {} while (fgetc(ins) != '\n') {} } //----------------------------------------------------------- bool Dog::fillrace(FILE*& ins, Race &race) { int i; char ch; AnsiString str; ch = (char)fgetc(ins); if (!isdigit(ch)) { if (ch == '-') return false; while (fgetc(ins) != '\n') {} return false; } //for (i=0;i<31;i++) fgetc(ins); for (i=0;i<10;i++) fgetc(ins); str = AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); if (AnsiStrScan(str.c_str(),'-')!=NULL) race.dist = 1650; else if (AnsiStrScan(str.c_str(),' ')!=NULL) race.dist = 1650; else race.dist = str.ToInt(); for (i=0;i<17;i++) fgetc(ins); race.pp = AnsiString((char)fgetc(ins)).ToInt(); for (i=0;i<3;i++) fgetc(ins); ch = (char)fgetc(ins); if (!isdigit(ch)) race.gate = 8; else race.gate = AnsiString(ch).ToInt(); for(i=0;i<5;i++) fgetc(ins); ch = (char)fgetc(ins); if (!isdigit(ch)) race.gate = 8; else race.oneeigth = AnsiString(ch).ToInt(); for(i=0;i<5;i++) fgetc(ins); ch = (char)fgetc(ins); if (!isdigit(ch)) race.gate = 8; else race.stretch = AnsiString(ch).ToInt(); for(i=0;i<5;i++) fgetc(ins); ch = (char)fgetc(ins); if (!isdigit(ch)) race.gate = 8; else race.finish = AnsiString(ch).ToInt(); for(i=0;i<5;i++) fgetc(ins); str = AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); if (AnsiStrPos(str.c_str(),"Oop")!=NULL) race.time = trackrecord + 3.0; else if (AnsiStrPos(str.c_str(),"Dnf")!=NULL) race.time = trackrecord + 3.0; else if (AnsiStrPos(str.c_str(),"Rfd")!=NULL) race.time = trackrecord + 3.0; else race.time = str.ToDouble(); for(i=0;i<9;i++) fgetc(ins); str = AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); str += AnsiString((char)fgetc(ins)); race.grade = str; while (fgetc(ins)!='\n') {} return true; }