/* * report.c * * Generate appropriate reports. */ /*** *** Include files ***/ #include #include #include #include #include #include #include "pragmas.h" #include "pinewood.h" #if 0 /* * print_race_schedule * * Print a listing of all users in the order of their currently * scheduled race. This only makes sense when the race has been * recently scheduled. */ void print_race_schedule(void) { char buffer[100]; int fields; FILE *fp; int lane; int low_lane; int low_user; int user; int user_lane; clrscr(); printf("Would you like to print the race schedule? "); fgets(buffer, sizeof(buffer), stdin); if (tolower(buffer[0]) != 'y') return; fp = xfopen(PRINTER, "a"); for (user = 0; user < Nusers; user++) Database[user].scanned = FALSE; xfprintf(fp, " Race schedule\n"); xfprintf(fp, "%-30.30sCar Rank Average\n", "Name"); fields = count_races(-1); for (low_user = 1; low_user != -1; ) { low_user = -1; low_lane = NLANES + 1; for (user = 0; user < Nusers; user++) { for (user_lane = NLANES, lane = 0; lane < NLANES; lane++) { if (Database[user].lane[lane] != 0) user_lane = Database[user].lane[lane]; } if (!Database[user].scanned && Database[user].racenum != 0 && (low_user == -1 || Database[user].racenum < Database[low_user].racenum || (Database[user].racenum == Database[low_user].racenum && user_lane < low_lane))) { low_user = user; low_lane = user_lane; } } if (low_user != -1) { print_user(fp, low_user, fields); Database[low_user].scanned = TRUE; } } for (user = 0; user < Nusers; user++) { if (!Database[user].scanned) { print_user(fp, low_user, fields); Database[low_user].scanned = TRUE; } } xfprintf(fp, "\f"); xfclose(fp); } #endif /* * print_results * * Print the results in the order of their averages. * This could be made far more efficient. */ void print_results(void) { char buffer[100]; int fields; FILE *fp; int low_user; int rank; time_t timeval; int user; clrscr(); printf("Would you like to print the current results? "); fgets(buffer, sizeof(buffer), stdin); if (tolower(buffer[0]) != 'y') return; fp = xfopen(PRINTER, "a"); timeval = time(NULL); xfprintf(fp, "\f Race results %s\n", ctime(&timeval)); xfprintf(fp, "Rank Average Car %-30.30s time/lane ...\n", "Name"); fields = count_races(-1); rank = 1; for (low_user = 1; low_user != -1; ) { low_user = -1; for (user = 0; user < Nusers; user++) { if (!Database[user].scanned && (low_user == -1 || average(user) < average(low_user))) { low_user = user; } } if (low_user != -1) { Database[low_user].rank = rank++; print_user(fp, low_user, fields); Database[low_user].scanned = TRUE; } } xfprintf(fp, "\f"); xfclose(fp); } /* * print_roster * * Print a form containing the people in the database order. */ void print_roster(void) { char buffer[100]; FILE *fp; time_t timeval; int user; clrscr(); printf("Would you like to print the race roster? "); fgets(buffer, sizeof(buffer), stdin); if (tolower(buffer[0]) != 'y') return; fp = xfopen(PRINTER, "a"); timeval = time(NULL); xfprintf(fp, "\f Race roster %s\n", ctime(&timeval)); xfprintf(fp, "Average Car Name\n"); for (user = 0; user < Nusers; user++) { xfprintf(fp, "%s %-3.3s %s\n", format_time(average(user)), Database[user].car, Database[user].name); } xfprintf(fp, "\f"); xfclose(fp); } /* * print_user * * Print a user's entry */ void print_user(FILE *fp, int user, int fields) { int heat; xfprintf(fp, "%4d %s %3s %-30.30s ", Database[user].rank, format_time(average(user)), Database[user].car, Database[user].name); if (fields > 1) xfprintf(fp, "\n "); for (heat = 0; heat < NRACES && Database[user].lane[heat] != 0; heat++) { if (Database[user].run[heat] != 0) { if ((heat % 4) == 0 && heat != 0) xfprintf(fp, "\n "); xfprintf(fp, "%s %d ", format_time(Database[user].run[heat]), Database[user].lane[heat]); } else { xfprintf(fp, " %d", Database[user].lane[heat]); if (Database[user].racenum == 0) xfprintf(fp, " "); else xfprintf(fp, "/%2d", Database[user].racenum); } } xfprintf(fp, "\n"); if (fields > 1) xfprintf(fp, "\n"); }