Rev 3386 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3386 | Rev 4263 | ||
---|---|---|---|
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 120... | Line 123... | ||
120 | } |
123 | } |
121 | 124 | ||
122 | void insertscore(int score, int level) |
125 | void insertscore(int score, int level) |
123 | { |
126 | { |
124 | int i,j; |
127 | int i,j; |
125 | int key; |
128 | size_t off; |
126 | 129 | kbd_event_t ev; |
|
127 | 130 | ||
128 | clear_screen(); |
131 | clear_screen(); |
129 | moveto(10 , 10); |
132 | moveto(10 , 10); |
130 | puts("Insert your name: "); |
133 | puts("Insert your name: "); |
131 | strncpy(scores[NUMSPOTS - 1].hs_name, "Player", MAXLOGNAME); |
134 | strncpy(scores[NUMSPOTS - 1].hs_name, "Player", MAXLOGNAME); |
132 | i = 6; |
135 | i = 6; off = 6; |
133 | 136 | ||
134 | moveto(10 , 28); |
137 | moveto(10 , 28); |
135 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
138 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
- | 139 | ||
- | 140 | while (1) { |
|
136 | key = getchar(); |
141 | fflush(stdout); |
- | 142 | if (kbd_get_event(&ev) != EOK) |
|
- | 143 | exit(1); |
|
- | 144 | ||
137 | while(key != '\n') { |
145 | if (ev.type == KE_RELEASE) |
- | 146 | continue; |
|
- | 147 | ||
- | 148 | if (ev.key == KC_ENTER || ev.key == KC_NENTER) |
|
- | 149 | break; |
|
- | 150 | ||
138 | if (key == '\b') { |
151 | if (ev.key == KC_BACKSPACE) { |
139 | if (i > 0) |
152 | if (i > 0) { |
- | 153 | wchar_t uc; |
|
- | 154 | ||
- | 155 | --i; |
|
- | 156 | while (off > 0) { |
|
- | 157 | --off; |
|
- | 158 | size_t otmp = off; |
|
- | 159 | uc = str_decode(scores[NUMSPOTS - 1].hs_name, |
|
- | 160 | &otmp, STR_BOUNDS(MAXLOGNAME) + 1); |
|
- | 161 | if (uc != U_SPECIAL) |
|
- | 162 | break; |
|
- | 163 | } |
|
- | 164 | ||
140 | scores[NUMSPOTS - 1].hs_name[--i] = '\0'; |
165 | scores[NUMSPOTS - 1].hs_name[off] = '\0'; |
- | 166 | } |
|
141 | } else { |
167 | } else if (ev.c != '\0') { |
142 | if (i < (MAXLOGNAME - 1)) |
168 | if (i < (MAXLOGNAME - 1)) { |
143 | scores[NUMSPOTS - 1].hs_name[i++] = key; |
169 | if (chr_encode(ev.c, scores[NUMSPOTS - 1].hs_name, |
- | 170 | &off, STR_BOUNDS(MAXLOGNAME) + 1) == EOK) { |
|
- | 171 | ++i; |
|
- | 172 | } |
|
144 | scores[NUMSPOTS - 1].hs_name[i] = '\0'; |
173 | scores[NUMSPOTS - 1].hs_name[off] = '\0'; |
- | 174 | } |
|
145 | } |
175 | } |
146 | 176 | ||
147 | moveto(10 , 28); |
177 | moveto(10 , 28); |
148 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
178 | printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
149 | - | ||
150 | key = getchar(); |
- | |
151 | } |
179 | } |
152 | 180 | ||
153 | scores[NUMSPOTS - 1].hs_score = score; |
181 | scores[NUMSPOTS - 1].hs_score = score; |
154 | scores[NUMSPOTS - 1].hs_level = level; |
182 | scores[NUMSPOTS - 1].hs_level = level; |
155 | 183 |