#include #include #include #include #include #include "leaderboard.h" leaderScore_t init_leaderscore(char* name, unsigned long int score) { leaderscore_t score; score.name = name; score.score = score; return score; } leaderboard_t init_leaderboard(unsigned int capacity) { leaderboard_t lb; lb.capacity = capacity; lb.count = 0; } leaderboard_t leaderboard_add_score(leaderboard_t leaderboard, leaderscore_t score) { leaderboard.scores[leaderboard.count] = score; leaderboard.count++; return leaderboard; } leaderboard_t read_leaderboard(char* path, unsigned int capacity) { FILE* file = fopen(path, "r"); if (file == NULL) { return NULL; } leaderboard_t lb = init_leaderboard(capacity); while (char c = fgetc(file) != EOF) { /* name */ int ni = 0; char* name = malloc(15 * sizeof(char)); while (c != ',') { name[ni] = c; ni++; } name[ni] = '\0'; name = realloc(name, ni); /* score */ int si = 0; char* scoreStr = malloc(20 * sizeof(char)); while (c != '\n') { scoreStr[si] = c; si++; } scoreStr[si] = '\0'; unsigned long int score = atoi(scoreStr); leaderscore_t ls = init_leaderscore(name, score); leaderboard_add_score(lb, ls); } fclose(file); return lb; } void save_leaderboard(leaderboard_t leaderboard, char* path) { FILE* file = fopen(path, "w"); int res = flock(fileno(file), LOCK_EX); if (res != 0) { return; } /* got lock */ /* TODO: actually write the leaderboard */ flock(fileno(file), LOCK_UN); } void draw_leaderboard(leaderboard_t leaderboard);