summaryrefslogtreecommitdiff
path: root/src/leaderboard.c
blob: 8ebb412d43eddc784247598f1caaa2dae58fae99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/file.h>
#include <string.h>
#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);