Rev 4055 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4055 | Rev 4296 | ||
---|---|---|---|
Line 53... | Line 53... | ||
53 | /* #include <fcntl.h> */ |
53 | /* #include <fcntl.h> */ |
54 | /* #include <pwd.h> */ |
54 | /* #include <pwd.h> */ |
55 | #include <stdio.h> |
55 | #include <stdio.h> |
56 | /* #include <stdlib.h> */ |
56 | /* #include <stdlib.h> */ |
57 | #include <string.h> |
57 | #include <string.h> |
- | 58 | #include <kbd/kbd.h> |
|
- | 59 | #include <kbd/keycode.h> |
|
- | 60 | #include <stdlib.h> |
|
58 | /* #include <time.h> */ |
61 | /* #include <time.h> */ |
59 | /* #include <term.h> */ |
62 | /* #include <term.h> */ |
60 | /* #include <unistd.h> */ |
63 | /* #include <unistd.h> */ |
61 | /* #include <sys/param.h> */ |
64 | /* #include <sys/param.h> */ |
62 | /* #include <sys/stat.h> */ |
65 | /* #include <sys/stat.h> */ |
Line 112... | Line 115... | ||
112 | /** Copy from hiscore table score with index src to dest |
115 | /** Copy from hiscore table score with index src to dest |
113 | * |
116 | * |
114 | */ |
117 | */ |
115 | static void copyhiscore(int dest, int src) |
118 | static void copyhiscore(int dest, int src) |
116 | { |
119 | { |
117 | strcpy(scores[dest].hs_name, scores[src].hs_name); |
120 | str_cpy(scores[dest].hs_name, STR_BOUNDS(MAXLOGNAME) + 1, |
- | 121 | scores[src].hs_name); |
|
118 | scores[dest].hs_score = scores[src].hs_score; |
122 | scores[dest].hs_score = scores[src].hs_score; |
119 | scores[dest].hs_level = scores[src].hs_level; |
123 | scores[dest].hs_level = scores[src].hs_level; |
120 | } |
124 | } |
121 | 125 | ||
122 | void insertscore(int score, int level) |
126 | void insertscore(int score, int level) |
123 | { |
127 | { |
124 | int i,j; |
128 | int i,j; |
125 | int key; |
129 | size_t off; |
126 | 130 | kbd_event_t ev; |
|
127 | 131 | ||
128 | clear_screen(); |
132 | clear_screen(); |
129 | moveto(10 , 10); |
133 | moveto(10 , 10); |
130 | puts("Insert your name: "); |
134 | puts("Insert your name: "); |
131 | strncpy(scores[NUMSPOTS - 1].hs_name, "Player", MAXLOGNAME); |
135 | str_cpy(scores[NUMSPOTS - 1].hs_name, STR_BOUNDS(MAXLOGNAME) + 1, |
- | 136 | "Player"); |
|
132 | i = 6; |
137 | i = 6; off = 6; |
133 | 138 | ||
134 | moveto(10 , 28); |
139 | moveto(10 , 28); |
135 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
140 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
- | 141 | ||
- | 142 | while (1) { |
|
136 | key = getchar(); |
143 | fflush(stdout); |
- | 144 | if (kbd_get_event(&ev) != EOK) |
|
- | 145 | exit(1); |
|
- | 146 | ||
137 | while(key != '\n') { |
147 | if (ev.type == KE_RELEASE) |
- | 148 | continue; |
|
- | 149 | ||
- | 150 | if (ev.key == KC_ENTER || ev.key == KC_NENTER) |
|
- | 151 | break; |
|
- | 152 | ||
138 | if (key == '\b') { |
153 | if (ev.key == KC_BACKSPACE) { |
139 | if (i > 0) |
154 | if (i > 0) { |
- | 155 | wchar_t uc; |
|
- | 156 | ||
- | 157 | --i; |
|
- | 158 | while (off > 0) { |
|
- | 159 | --off; |
|
- | 160 | size_t otmp = off; |
|
- | 161 | uc = str_decode(scores[NUMSPOTS - 1].hs_name, |
|
- | 162 | &otmp, STR_BOUNDS(MAXLOGNAME) + 1); |
|
- | 163 | if (uc != U_SPECIAL) |
|
- | 164 | break; |
|
- | 165 | } |
|
- | 166 | ||
140 | scores[NUMSPOTS - 1].hs_name[--i] = '\0'; |
167 | scores[NUMSPOTS - 1].hs_name[off] = '\0'; |
- | 168 | } |
|
141 | } else { |
169 | } else if (ev.c != '\0') { |
142 | if (i < (MAXLOGNAME - 1)) |
170 | if (i < (MAXLOGNAME - 1)) { |
143 | scores[NUMSPOTS - 1].hs_name[i++] = key; |
171 | if (chr_encode(ev.c, scores[NUMSPOTS - 1].hs_name, |
- | 172 | &off, STR_BOUNDS(MAXLOGNAME) + 1) == EOK) { |
|
- | 173 | ++i; |
|
- | 174 | } |
|
144 | scores[NUMSPOTS - 1].hs_name[i] = '\0'; |
175 | scores[NUMSPOTS - 1].hs_name[off] = '\0'; |
- | 176 | } |
|
145 | } |
177 | } |
146 | 178 | ||
147 | moveto(10 , 28); |
179 | moveto(10 , 28); |
148 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
180 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
149 | - | ||
150 | key = getchar(); |
- | |
151 | } |
181 | } |
152 | 182 | ||
153 | scores[NUMSPOTS - 1].hs_score = score; |
183 | scores[NUMSPOTS - 1].hs_score = score; |
154 | scores[NUMSPOTS - 1].hs_level = level; |
184 | scores[NUMSPOTS - 1].hs_level = level; |
155 | 185 | ||
Line 165... | Line 195... | ||
165 | 195 | ||
166 | void initscores(void) |
196 | void initscores(void) |
167 | { |
197 | { |
168 | int i; |
198 | int i; |
169 | for(i = 0; i < NUMSPOTS; i++) { |
199 | for(i = 0; i < NUMSPOTS; i++) { |
170 | strncpy(scores[i].hs_name, "HelenOS Team", MAXLOGNAME); |
200 | str_cpy(scores[i].hs_name, STR_BOUNDS(MAXLOGNAME) + 1, "HelenOS Team"); |
171 | scores[i].hs_score = (NUMSPOTS - i) * 200; |
201 | scores[i].hs_score = (NUMSPOTS - i) * 200; |
172 | scores[i].hs_level = (i + 1 > MAXLEVEL?MAXLEVEL:i + 1); |
202 | scores[i].hs_level = (i + 1 > MAXLEVEL?MAXLEVEL:i + 1); |
173 | } |
203 | } |
174 | } |
204 | } |
175 | 205 | ||
Line 259... | Line 289... | ||
259 | /* * Otherwise add new score at end (there is always room). */ |
289 | /* * Otherwise add new score at end (there is always room). */ |
260 | /* *\/ */ |
290 | /* *\/ */ |
261 | /* change = 0; */ |
291 | /* change = 0; */ |
262 | /* me = thisuser(); */ |
292 | /* me = thisuser(); */ |
263 | /* for (i = 0, sp = &scores[0]; i < nscores; i++, sp++) { */ |
293 | /* for (i = 0, sp = &scores[0]; i < nscores; i++, sp++) { */ |
264 | /* if (sp->hs_level != level || strcmp(sp->hs_name, me) != 0) */ |
294 | /* if (sp->hs_level != level || str_cmp(sp->hs_name, me) != 0) */ |
265 | /* continue; */ |
295 | /* continue; */ |
266 | /* if (score > sp->hs_score) { */ |
296 | /* if (score > sp->hs_score) { */ |
267 | /* (void)printf("%s bettered %s %d score of %d!\n", */ |
297 | /* (void)printf("%s bettered %s %d score of %d!\n", */ |
268 | /* "\nYou", "your old level", level, */ |
298 | /* "\nYou", "your old level", level, */ |
269 | /* sp->hs_score * sp->hs_level); */ |
299 | /* sp->hs_score * sp->hs_level); */ |
Line 387... | Line 417... | ||
387 | /* for (i = 0, sp = hs; i < num;) { */ |
417 | /* for (i = 0, sp = hs; i < num;) { */ |
388 | /* /\* */ |
418 | /* /\* */ |
389 | /* * This is O(n^2), but do you think we care? */ |
419 | /* * This is O(n^2), but do you think we care? */ |
390 | /* *\/ */ |
420 | /* *\/ */ |
391 | /* for (j = 0, pu = count; j < numnames; j++, pu++) */ |
421 | /* for (j = 0, pu = count; j < numnames; j++, pu++) */ |
392 | /* if (strcmp(sp->hs_name, pu->name) == 0) */ |
422 | /* if (str_cmp(sp->hs_name, pu->name) == 0) */ |
393 | /* break; */ |
423 | /* break; */ |
394 | /* if (j == numnames) { */ |
424 | /* if (j == numnames) { */ |
395 | /* /\* */ |
425 | /* /\* */ |
396 | /* * Add new user, set per-user count to 1. */ |
426 | /* * Add new user, set per-user count to 1. */ |
397 | /* *\/ */ |
427 | /* *\/ */ |
Line 524... | Line 554... | ||
524 | /* * we only get one score per level. */ |
554 | /* * we only get one score per level. */ |
525 | /* *\/ */ |
555 | /* *\/ */ |
526 | /* if (me != NULL && */ |
556 | /* if (me != NULL && */ |
527 | /* sp->hs_level == level && */ |
557 | /* sp->hs_level == level && */ |
528 | /* sp->hs_score == score && */ |
558 | /* sp->hs_score == score && */ |
529 | /* strcmp(sp->hs_name, me) == 0) { */ |
559 | /* str_cmp(sp->hs_name, me) == 0) { */ |
530 | /* putpad(SOstr); */ |
560 | /* putpad(SOstr); */ |
531 | /* highlight = 1; */ |
561 | /* highlight = 1; */ |
532 | /* } */ |
562 | /* } */ |
533 | /* (void)printf("%s", buf); */ |
563 | /* (void)printf("%s", buf); */ |
534 | /* if (highlight) { */ |
564 | /* if (highlight) { */ |