Rev 1466 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1466 | Rev 1590 | ||
|---|---|---|---|
| Line 44... | Line 44... | ||
| 44 | */ |
44 | */ |
| 45 | #include <errno.h> |
45 | #include <errno.h> |
| 46 | /* #include <err.h> */ |
46 | /* #include <err.h> */ |
| 47 | /* #include <fcntl.h> */ |
47 | /* #include <fcntl.h> */ |
| 48 | /* #include <pwd.h> */ |
48 | /* #include <pwd.h> */ |
| 49 | /* #include <stdio.h> */ |
49 | #include <stdio.h> |
| 50 | /* #include <stdlib.h> */ |
50 | /* #include <stdlib.h> */ |
| 51 | /* #include <string.h> */ |
51 | #include <string.h> |
| 52 | /* #include <time.h> */ |
52 | /* #include <time.h> */ |
| 53 | /* #include <term.h> */ |
53 | /* #include <term.h> */ |
| 54 | /* #include <unistd.h> */ |
54 | /* #include <unistd.h> */ |
| 55 | /* #include <sys/param.h> */ |
55 | /* #include <sys/param.h> */ |
| 56 | /* #include <sys/stat.h> */ |
56 | /* #include <sys/stat.h> */ |
| Line 74... | Line 74... | ||
| 74 | 74 | ||
| 75 | /* static time_t now; */ |
75 | /* static time_t now; */ |
| 76 | /* static int nscores; */ |
76 | /* static int nscores; */ |
| 77 | /* static int gotscores; */ |
77 | /* static int gotscores; */ |
| 78 | /* static struct highscore scores[NUMSPOTS]; */ |
78 | /* static struct highscore scores[NUMSPOTS]; */ |
| - | 79 | static struct highscore scores[NUMSPOTS]; |
|
| 79 | 80 | ||
| 80 | /* static int checkscores(struct highscore *, int); */ |
81 | /* static int checkscores(struct highscore *, int); */ |
| 81 | /* static int cmpscores(const void *, const void *); */ |
82 | /* static int cmpscores(const void *, const void *); */ |
| 82 | /* static void getscores(FILE **); */ |
83 | /* static void getscores(FILE **); */ |
| 83 | /* static void printem(int, int, struct highscore *, int, const char *); */ |
84 | /* static void printem(int, int, struct highscore *, int, const char *); */ |
| 84 | /* static char *thisuser(void); */ |
85 | /* static char *thisuser(void); */ |
| 85 | 86 | ||
| - | 87 | void showscores(int firstgame) |
|
| - | 88 | { |
|
| - | 89 | int i; |
|
| - | 90 | ||
| - | 91 | clear_screen(); |
|
| - | 92 | moveto(10, 0); |
|
| - | 93 | printf("\tRank \tLevel \tName\t points\n"); |
|
| - | 94 | printf("\t========================================================\n"); |
|
| - | 95 | for (i = 0; i < NUMSPOTS - 1; i++) { |
|
| - | 96 | printf("\t%6d %6d %-16s %20d\n", i+1, scores[i].hs_level, scores[i].hs_name, scores[i].hs_score); |
|
| - | 97 | } |
|
| - | 98 | if (!firstgame) { |
|
| - | 99 | printf("\t========================================================\n"); |
|
| - | 100 | printf("\t Last %6d %-16s %20d\n", scores[NUMSPOTS - 1].hs_level, scores[NUMSPOTS - 1].hs_name, scores[NUMSPOTS - 1].hs_score); |
|
| - | 101 | } |
|
| - | 102 | printf("\n\n\n\n\tPress any key to return to main menu."); |
|
| - | 103 | getchar(); |
|
| - | 104 | } |
|
| - | 105 | ||
| - | 106 | /** Copy from hiscore table score with index src to dest |
|
| - | 107 | * |
|
| - | 108 | */ |
|
| - | 109 | static void copyhiscore(int dest, int src) |
|
| - | 110 | { |
|
| - | 111 | strcpy(scores[dest].hs_name, scores[src].hs_name); |
|
| - | 112 | scores[dest].hs_score = scores[src].hs_score; |
|
| - | 113 | scores[dest].hs_level = scores[src].hs_level; |
|
| - | 114 | } |
|
| - | 115 | ||
| - | 116 | void insertscore(int score, int level) |
|
| - | 117 | { |
|
| - | 118 | int i,j; |
|
| - | 119 | int key; |
|
| - | 120 | ||
| - | 121 | ||
| - | 122 | clear_screen(); |
|
| - | 123 | moveto(10 , 10); |
|
| - | 124 | puts("Insert your name: "); |
|
| - | 125 | strncpy(scores[NUMSPOTS - 1].hs_name, "Player", MAXLOGNAME); |
|
| - | 126 | i = 6; |
|
| - | 127 | ||
| - | 128 | moveto(10 , 28); |
|
| - | 129 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
|
| - | 130 | key = getchar(); |
|
| - | 131 | while(key != '\n') { |
|
| - | 132 | if (key == '\b') { |
|
| - | 133 | if (i > 0) |
|
| - | 134 | scores[NUMSPOTS - 1].hs_name[--i] = '\0'; |
|
| - | 135 | } else { |
|
| - | 136 | if (i < (MAXLOGNAME - 1)) |
|
| - | 137 | scores[NUMSPOTS - 1].hs_name[i++] = key; |
|
| - | 138 | scores[NUMSPOTS - 1].hs_name[i] = '\0'; |
|
| - | 139 | } |
|
| - | 140 | ||
| - | 141 | moveto(10 , 28); |
|
| - | 142 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
|
| - | 143 | ||
| - | 144 | key = getchar(); |
|
| - | 145 | } |
|
| - | 146 | ||
| - | 147 | scores[NUMSPOTS - 1].hs_score = score; |
|
| - | 148 | scores[NUMSPOTS - 1].hs_level = level; |
|
| - | 149 | ||
| - | 150 | i = NUMSPOTS-1; |
|
| - | 151 | while ((i > 0) && (scores[i - 1].hs_score < score)) |
|
| - | 152 | i--; |
|
| - | 153 | ||
| - | 154 | for (j = NUMSPOTS - 2; j > i; j--) { |
|
| - | 155 | copyhiscore(j,j-1); |
|
| - | 156 | } |
|
| - | 157 | copyhiscore(i, NUMSPOTS - 1); |
|
| - | 158 | } |
|
| - | 159 | ||
| - | 160 | void initscores(void) |
|
| - | 161 | { |
|
| - | 162 | int i; |
|
| - | 163 | for(i = 0; i < NUMSPOTS; i++) { |
|
| - | 164 | strncpy(scores[i].hs_name, "HelenOS Team", MAXLOGNAME); |
|
| - | 165 | scores[i].hs_score = (NUMSPOTS - i) * 200; |
|
| - | 166 | scores[i].hs_level = (i + 1 > MAXLEVEL?MAXLEVEL:i + 1); |
|
| - | 167 | } |
|
| - | 168 | } |
|
| - | 169 | ||
| 86 | /* |
170 | /* |
| 87 | * Read the score file. Can be called from savescore (before showscores) |
171 | * Read the score file. Can be called from savescore (before showscores) |
| 88 | * or showscores (if savescore will not be called). If the given pointer |
172 | * or showscores (if savescore will not be called). If the given pointer |
| 89 | * is not NULL, sets *fpp to an open file pointer that corresponds to a |
173 | * is not NULL, sets *fpp to an open file pointer that corresponds to a |
| 90 | * read/write score file that is locked with LOCK_EX. Otherwise, the |
174 | * read/write score file that is locked with LOCK_EX. Otherwise, the |
| Line 342... | Line 426... | ||
| 342 | * savescore is called at all, for two reasons: |
426 | * savescore is called at all, for two reasons: |
| 343 | * - Showscores munches the time field. |
427 | * - Showscores munches the time field. |
| 344 | * - Even if that were not the case, a new score must be recorded |
428 | * - Even if that were not the case, a new score must be recorded |
| 345 | * before it can be shown anyway. |
429 | * before it can be shown anyway. |
| 346 | */ |
430 | */ |
| - | 431 | /* |
|
| 347 | void |
432 | void |
| 348 | showscores(int level) |
433 | showscores(int level) |
| 349 | { |
434 | { |
| 350 | return; |
435 | return; |
| 351 | } |
436 | } |
| 352 | 437 | */ |
|
| 353 | /* struct highscore *sp; */ |
438 | /* struct highscore *sp; */ |
| 354 | /* int i, n, c; */ |
439 | /* int i, n, c; */ |
| 355 | /* const char *me; */ |
440 | /* const char *me; */ |
| 356 | /* int levelfound[NLEVELS]; */ |
441 | /* int levelfound[NLEVELS]; */ |
| 357 | 442 | ||