|
|
| version 1.1, 2004/03/25 08:51:24 | version 1.12, 2004/07/29 15:15:35 |
|---|---|
| Line 5 | Line 5 |
| #include "bmpdata.h" | #include "bmpdata.h" |
| #include "softkbd.h" | #include "softkbd.h" |
| #include "keystat.h" | #include "keystat.h" |
| #include "softkbd.res" | |
| #define SOFTKEY_MENU 0xfe | #define SOFTKEY_MENU 0xfe |
| #define SOFTKEY_NC 0xff | #define SOFTKEY_NC 0xff |
| typedef struct { | |
| UINT8 left; | |
| UINT8 keys; | |
| UINT8 left1; | |
| UINT8 left2; | |
| UINT8 base; | |
| UINT8 right; | |
| } FULLKEY; | |
| typedef struct { | typedef struct { |
| FULLKEY fk[4]; | UINT8 key; |
| UINT8 cur0[5]; | UINT8 key2; |
| UINT8 cur1[5]; | UINT8 led; |
| UINT8 ten[20]; | UINT8 flag; |
| } KEYTBL; | void *ptr; |
| CMNBMP bmp; | |
| CMNPAL pal[16]; | |
| } SOFTKBD; | |
| static SOFTKBD softkbd; | |
| #if (SUPPORT_SOFTKBD == 1) | |
| #if defined(SIZE_QVGA) | |
| #include "softkbd1.res" | |
| #else | |
| #include "softkbd2.res" | |
| #endif | |
| #elif (SUPPORT_SOFTKBD == 2) | |
| #error not support (SUPPORT_SOFTKBD == 2) | |
| #else | |
| #if !defined(SUPPORT_PC9801_119) | |
| #include "softkbd.res" | |
| #else | |
| #include "softkbd3.res" | |
| #endif | |
| #endif | |
| static const KEYTBL keytbl = { | |
| // fullkey 90 | |
| {{12, 13, 0x00, 0x00, 0x01, 0x0e}, | |
| {16, 12, 0x0f, 0x0f, 0x10, 0x1c}, | |
| {20, 12, 0x74, 0x71, 0x1d, 0x1c}, | |
| {24, 11, 0x70, 0x70, 0x29, 0x70}}, | |
| // 247 | static void loadbmp(const char *filename) { |
| {0x38, 0x36, 0x3a, 0x3b, 0x3d}, | |
| {0x39, 0x37, 0x3a, 0x3c, 0x3d}, | |
| // 270 | void *ptr; |
| {0x3e, 0x3f, 0x40, 0x41, | |
| 0x42, 0x43, 0x44, 0x45, | |
| 0x46, 0x47, 0x48, 0x49, | |
| 0x4a, 0x4b, 0x4c, 0x4d, | |
| 0x4e, 0x4f, 0x50, 0x1c}}; | |
| softkbd.ptr = NULL; | |
| ptr = (void *)bmpdata_solvedata(np2kbd_bmp); | |
| if (ptr != NULL) { | |
| if (cmndraw_bmp4inf(&softkbd.bmp, ptr) == SUCCESS) { | |
| softkbd.ptr = ptr; | |
| } | |
| else { | |
| _MFREE(ptr); | |
| } | |
| } | |
| softkbd.flag |= SOFTKEY_FLAGREDRAW; | |
| (void)filename; | |
| } | |
| static UINT8 softkey = SOFTKEY_NC; | void softkbd_initialize(void) { |
| softkbd.key = SOFTKEY_NC; | |
| softkbd.led = 0; | |
| loadbmp(NULL); | |
| } | |
| void softkbd_paint(CMNVRAM *vram, CMNPALCNV cnv) { | void softkbd_deinitialize(void) { |
| BYTE *bmp; | void *ptr; |
| bmp = bmpdata_solvedata(np2kbd_bmp); | ptr = softkbd.ptr; |
| if (bmp) { | softkbd.ptr = NULL; |
| cmddraw_bmp16(vram, bmp, cnv); | if (ptr) { |
| _MFREE(bmp); | _MFREE(ptr); |
| } | } |
| } | } |
| static UINT getsoftkbd(int x, int y) { | BOOL softkbd_getsize(int *width, int *height) { |
| UINT posy; | if (softkbd.ptr == NULL) { |
| const FULLKEY *fk; | return(FAILURE); |
| if ((x >= 0) && (x < 32) && (y >= 8) && (y < 40)) { | |
| return(SOFTKEY_MENU); | |
| } | } |
| x -= 40; | if (width) { |
| posy = y >> 3; | *width = softkbd.bmp.width; |
| if ((posy >= 5) || (x < 0)) { | |
| return(SOFTKEY_NC); | |
| } | } |
| if (x < (54 - 40)) { // stop/copy | if (height) { |
| if ((x < 10) && (posy < 2)) { | *height = softkbd.bmp.height; |
| return(0x60 + posy); | |
| } | |
| return(SOFTKEY_NC); | |
| } | } |
| x -= (54 - 40); | return(SUCCESS); |
| if (x < (90 - 54)) { // function | } |
| if (x < 15) { | |
| return(0x62 + posy); | REG8 softkbd_process(void) { |
| } | |
| if ((x >= 17) && (x < 32)) { | return(softkbd.flag); |
| return(0x67 + posy); | } |
| } | |
| return(SOFTKEY_NC); | BOOL softkbd_paint(CMNVRAM *vram, CMNPALCNV cnv, BOOL redraw) { |
| } | |
| x -= (90 - 54); | UINT8 flag; |
| if (x < (247 - 90)) { // fullkey | BOOL ret; |
| if (posy < 4) { | |
| if (x < 153) { | flag = softkbd.flag; |
| fk = keytbl.fk + posy; | softkbd.flag = 0; |
| x -= fk->left; | if (redraw) { |
| if (x < -10) { | flag = SOFTKEY_FLAGREDRAW | SOFTKEY_FLAGDRAW; |
| return(fk->left1); | } |
| } | ret = FALSE; |
| else if (x < 0) { | if ((flag & SOFTKEY_FLAGREDRAW) && (vram) && (cnv)) { |
| return(fk->left2); | (*cnv)(softkbd.pal, softkbd.bmp.paltbl, softkbd.bmp.pals, vram->bpp); |
| } | cmndraw_bmp16(vram, softkbd.ptr, cnv, CMNBMP_LEFT | CMNBMP_TOP); |
| x = (x * (((1 << 12) / 10) + 1)) >> 12; | ret = TRUE; |
| if (x < (int)fk->keys) { | } |
| return(fk->base + x); | if (flag & SOFTKEY_FLAGDRAW) { |
| } | TRACEOUT(("softkbd_paint")); |
| return(fk->right); | ledpaint(vram); |
| } | ret = TRUE; |
| } | |
| else { | |
| x -= 19; | |
| if (x < 0) { | |
| return(SOFTKEY_NC); | |
| } | |
| x -= 10; | |
| if (x < 0) { | |
| return(0x72); | |
| } | |
| x -= 10; | |
| if (x < 0) { | |
| return(0x73); | |
| } | |
| x -= 15; | |
| if (x < 0) { | |
| return(0x51); | |
| } | |
| x -= 66; | |
| if (x < 0) { | |
| return(0x34); | |
| } | |
| if (x < 15) { | |
| return(0x35); | |
| } | |
| } | |
| return(SOFTKEY_NC); | |
| } | |
| x -= (247 - 90); | |
| if (x < (270 - 247)) { // cur | |
| if (x < 10) { | |
| return(keytbl.cur0[posy]); | |
| } | |
| else if (x < 20) { | |
| return(keytbl.cur1[posy]); | |
| } | |
| return(SOFTKEY_NC); | |
| } | |
| x -= (270 - 247); | |
| if (x < (310 - 270)) { // ten key | |
| x = (x * (((1 << 12) / 10) + 1)) >> 12; | |
| return(keytbl.ten[x + posy * 4]); | |
| } | } |
| return(SOFTKEY_NC); | return(ret); |
| } | } |
| BOOL softkbd_down(int x, int y) { | BOOL softkbd_down(int x, int y) { |
| Line 161 BOOL softkbd_down(int x, int y) { | Line 129 BOOL softkbd_down(int x, int y) { |
| return(TRUE); | return(TRUE); |
| } | } |
| else if (key != SOFTKEY_NC) { | else if (key != SOFTKEY_NC) { |
| keystat_senddata((UINT8)key); | keystat_down(&key, 1, NKEYREF_SOFTKBD); |
| softkey = key; | softkbd.key = key; |
| } | } |
| return(FALSE); | return(FALSE); |
| } | } |
| void softkbd_up(void) { | void softkbd_up(void) { |
| if (softkey != SOFTKEY_NC) { | if (softkbd.key != SOFTKEY_NC) { |
| keystat_senddata((REG8)(softkey | 0x80)); | keystat_up(&softkbd.key, 1, NKEYREF_SOFTKBD); |
| softkey = SOFTKEY_NC; | softkbd.key = SOFTKEY_NC; |
| } | } |
| } | } |
| void softkbd_led(REG8 led) { | |
| TRACEOUT(("softkbd_led(%x)", led)); | |
| if (softkbd.led != led) { | |
| softkbd.led = led; | |
| softkbd.flag |= SOFTKEY_FLAGDRAW; | |
| } | |
| } | |
| #endif | #endif |