diff options
author | Martin Scarratt <mmmm@rockbox.org> | 2006-07-23 18:33:43 +0000 |
---|---|---|
committer | Martin Scarratt <mmmm@rockbox.org> | 2006-07-23 18:33:43 +0000 |
commit | af5393c7a62c652943efa3cea385e63aa130dd3f (patch) | |
tree | fb83e951d002d4d476396e134579b48c4892702f /apps/recorder | |
parent | 4f93b30192270dd7dae6f0625a02cee095abbfac (diff) | |
download | rockbox-af5393c7a62c652943efa3cea385e63aa130dd3f.tar.gz rockbox-af5393c7a62c652943efa3cea385e63aa130dd3f.zip |
Fix custom Virtual keyboards (broken during VK remote support implementation)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10298 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/recorder')
-rw-r--r-- | apps/recorder/keyboard.c | 60 |
1 files changed, 28 insertions, 32 deletions
diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index 109f7452a4..e31c9201a3 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c | |||
@@ -221,11 +221,8 @@ static bool morse_mode = false; | |||
221 | int load_kbd(unsigned char* filename) | 221 | int load_kbd(unsigned char* filename) |
222 | { | 222 | { |
223 | int fd, count, l; | 223 | int fd, count, l; |
224 | int i[NB_SCREENS]; | 224 | int i = 0; |
225 | unsigned char buf[4]; | 225 | unsigned char buf[4]; |
226 | |||
227 | FOR_NB_SCREENS(l) | ||
228 | i[l] = 0; | ||
229 | 226 | ||
230 | if (filename == NULL) { | 227 | if (filename == NULL) { |
231 | kbd_loaded = false; | 228 | kbd_loaded = false; |
@@ -236,40 +233,39 @@ int load_kbd(unsigned char* filename) | |||
236 | if (fd < 0) | 233 | if (fd < 0) |
237 | return 1; | 234 | return 1; |
238 | 235 | ||
239 | FOR_NB_SCREENS(l) | 236 | while (read(fd, buf, 1) == 1 && i < KBD_BUF_SIZE) { |
240 | { | 237 | /* check how many bytes to read */ |
241 | while (read(fd, buf, 1) == 1 && i[l] < KBD_BUF_SIZE) { | 238 | if (buf[0] < 0x80) { |
242 | /* check how many bytes to read */ | 239 | count = 0; |
243 | if (buf[0] < 0x80) { | 240 | } else if (buf[0] < 0xe0) { |
244 | count = 0; | 241 | count = 1; |
245 | } else if (buf[0] < 0xe0) { | 242 | } else if (buf[0] < 0xf0) { |
246 | count = 1; | 243 | count = 2; |
247 | } else if (buf[0] < 0xf0) { | 244 | } else if (buf[0] < 0xf5) { |
248 | count = 2; | 245 | count = 3; |
249 | } else if (buf[0] < 0xf5) { | 246 | } else { |
250 | count = 3; | 247 | /* Invalid size. */ |
251 | } else { | 248 | continue; |
252 | /* Invalid size. */ | 249 | } |
253 | continue; | ||
254 | } | ||
255 | |||
256 | if (read(fd, &buf[1], count) != count) { | ||
257 | close(fd); | ||
258 | kbd_loaded = false; | ||
259 | return 1; | ||
260 | } | ||
261 | 250 | ||
262 | utf8decode(buf, ¶m[l].kbd_buf[i[l]]); | 251 | if (read(fd, &buf[1], count) != count) { |
263 | if (param[l].kbd_buf[i[l]] != 0xFEFF && | 252 | close(fd); |
264 | param[l].kbd_buf[i[l]] != '\r') /*skip BOM & carriage returns */ | 253 | kbd_loaded = false; |
265 | i[l]++; | 254 | return 1; |
266 | } | 255 | } |
256 | |||
257 | FOR_NB_SCREENS(l) | ||
258 | utf8decode(buf, ¶m[l].kbd_buf[i]); | ||
259 | |||
260 | if (param[0].kbd_buf[i] != 0xFEFF && param[0].kbd_buf[i] != '\n' && | ||
261 | param[0].kbd_buf[i] != '\r') /*skip BOM & newlines */ | ||
262 | i++; | ||
267 | } | 263 | } |
268 | 264 | ||
269 | close(fd); | 265 | close(fd); |
270 | kbd_loaded = true; | 266 | kbd_loaded = true; |
271 | FOR_NB_SCREENS(l) | 267 | FOR_NB_SCREENS(l) |
272 | param[l].nchars = i[l]; | 268 | param[l].nchars = i; |
273 | return 0; | 269 | return 0; |
274 | 270 | ||
275 | } | 271 | } |