1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Martin Scarratt 2006-07-23 18:33:43 +00:00
parent 4f93b30192
commit af5393c7a6

View file

@ -221,12 +221,9 @@ static bool morse_mode = false;
int load_kbd(unsigned char* filename) int load_kbd(unsigned char* filename)
{ {
int fd, count, l; int fd, count, l;
int i[NB_SCREENS]; int i = 0;
unsigned char buf[4]; unsigned char buf[4];
FOR_NB_SCREENS(l)
i[l] = 0;
if (filename == NULL) { if (filename == NULL) {
kbd_loaded = false; kbd_loaded = false;
return 0; return 0;
@ -236,40 +233,39 @@ int load_kbd(unsigned char* filename)
if (fd < 0) if (fd < 0)
return 1; return 1;
FOR_NB_SCREENS(l) while (read(fd, buf, 1) == 1 && i < KBD_BUF_SIZE) {
{ /* check how many bytes to read */
while (read(fd, buf, 1) == 1 && i[l] < KBD_BUF_SIZE) { if (buf[0] < 0x80) {
/* check how many bytes to read */ count = 0;
if (buf[0] < 0x80) { } else if (buf[0] < 0xe0) {
count = 0; count = 1;
} else if (buf[0] < 0xe0) { } else if (buf[0] < 0xf0) {
count = 1; count = 2;
} else if (buf[0] < 0xf0) { } else if (buf[0] < 0xf5) {
count = 2; count = 3;
} else if (buf[0] < 0xf5) { } else {
count = 3; /* Invalid size. */
} else { continue;
/* Invalid size. */
continue;
}
if (read(fd, &buf[1], count) != count) {
close(fd);
kbd_loaded = false;
return 1;
}
utf8decode(buf, &param[l].kbd_buf[i[l]]);
if (param[l].kbd_buf[i[l]] != 0xFEFF &&
param[l].kbd_buf[i[l]] != '\r') /*skip BOM & carriage returns */
i[l]++;
} }
if (read(fd, &buf[1], count) != count) {
close(fd);
kbd_loaded = false;
return 1;
}
FOR_NB_SCREENS(l)
utf8decode(buf, &param[l].kbd_buf[i]);
if (param[0].kbd_buf[i] != 0xFEFF && param[0].kbd_buf[i] != '\n' &&
param[0].kbd_buf[i] != '\r') /*skip BOM & newlines */
i++;
} }
close(fd); close(fd);
kbd_loaded = true; kbd_loaded = true;
FOR_NB_SCREENS(l) FOR_NB_SCREENS(l)
param[l].nchars = i[l]; param[l].nchars = i;
return 0; return 0;
} }