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:
parent
4f93b30192
commit
af5393c7a6
1 changed files with 29 additions and 33 deletions
|
|
@ -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, ¶m[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, ¶m[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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue