--- np2/generic/softkbd.res 2004/03/25 08:51:24 1.1 +++ np2/generic/softkbd.res 2004/03/25 15:22:42 1.2 @@ -1,4 +1,6 @@ +// QVGA 320x40 + static const BYTE np2kbd_bmp[2179] = { 0x76,0x19,0x00, 0x04,0x05,0x42,0x4d,0x76,0x19,0x00,0x00,0x04,0x76,0x00,0x32,0x48, @@ -170,3 +172,132 @@ static const BYTE np2kbd_bmp[2179] = { 0xf2,0x04,0xe3,0x9f,0x05,0x73,0x42,0x88,0x00,0x43,0x4f,0xf2,0x07, 0x23,0x00,0x4e,0x08,0xb4}; + +typedef struct { + UINT8 left; + UINT8 keys; + UINT8 left1; + UINT8 left2; + UINT8 base; + UINT8 right; +} FULLKEY; + +typedef struct { + FULLKEY fk[4]; + UINT8 cur0[5]; + UINT8 cur1[5]; + UINT8 ten[20]; +} KEYTBL; + +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 + {0x38, 0x36, 0x3a, 0x3b, 0x3d}, + {0x39, 0x37, 0x3a, 0x3c, 0x3d}, + + // 270 + {0x3e, 0x3f, 0x40, 0x41, + 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x1c}}; + + +static UINT getsoftkbd(int x, int y) { + + UINT posy; +const FULLKEY *fk; + + if ((x >= 0) && (x < 32) && (y >= 8) && (y < 40)) { + return(SOFTKEY_MENU); + } + x -= 40; + posy = y >> 3; + if ((posy >= 5) || (x < 0)) { + return(SOFTKEY_NC); + } + if (x < (54 - 40)) { // stop/copy + if ((x < 10) && (posy < 2)) { + return(0x60 + posy); + } + return(SOFTKEY_NC); + } + x -= (54 - 40); + if (x < (90 - 54)) { // function + if (x < 15) { + return(0x62 + posy); + } + if ((x >= 17) && (x < 32)) { + return(0x67 + posy); + } + return(SOFTKEY_NC); + } + x -= (90 - 54); + if (x < (247 - 90)) { // fullkey + if (posy < 4) { + if (x < 153) { + fk = keytbl.fk + posy; + x -= fk->left; + if (x < -10) { + return(fk->left1); + } + else if (x < 0) { + return(fk->left2); + } + x = (x * (((1 << 12) / 10) + 1)) >> 12; + if (x < (int)fk->keys) { + return(fk->base + x); + } + return(fk->right); + } + } + 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); +} +