|
|
| version 1.4, 2004/02/19 11:32:11 | version 1.5, 2004/02/21 04:48:35 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "dosio.h" | |
| #include "textfile.h" | #include "textfile.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| Line 24 static KEYSTAT keystat; | Line 25 static KEYSTAT keystat; |
| void keystat_initialize(void) { | void keystat_initialize(void) { |
| char path[MAX_PATH]; | |
| ZeroMemory(&keystat, sizeof(keystat)); | ZeroMemory(&keystat, sizeof(keystat)); |
| FillMemory(keystat.ref, sizeof(keystat.ref), NKEYREF_NC); | FillMemory(keystat.ref, sizeof(keystat.ref), NKEYREF_NC); |
| keystat_tblreset(); | keystat_tblreset(); |
| getbiospath(path, "key.txt", sizeof(path)); | |
| keystat_tblload(path); | |
| } | } |
| void keystat_tblreset(void) { | void keystat_tblreset(void) { |
| Line 40 void keystat_tblreset(void) { | Line 45 void keystat_tblreset(void) { |
| } | } |
| } | } |
| void keystat_tblset(REG8 ref, const UINT8 *key, UINT cnt) { | |
| UINT8 keycode; | |
| NKEYM *nkey; | |
| keycode = ref & 0x7f; | |
| if ((keycode != NKEY_USER1) && (keycode != NKEY_USER2)) { | |
| nkey = (NKEYM *)(nkeytbl.key + keycode); | |
| } | |
| else { | |
| nkey = (NKEYM *)(nkeytbl.user + (keycode - NKEY_USER1)); | |
| cnt = min(cnt, 15); | |
| } | |
| cnt = min(cnt, 3); | |
| nkey->keys = (UINT8)cnt; | |
| if (cnt) { | |
| CopyMemory(nkey->key, key, cnt); | |
| } | |
| } | |
| // ---- config... | // ---- config... |
| static REG8 searchkeynum(const char *str) { | static const char str_userkey1[] = "userkey1"; |
| static const char str_userkey2[] = "userkey2"; | |
| static REG8 searchkeynum(const char *str, BOOL user) { | |
| const KEYNAME *n; | const KEYNAME *n; |
| const KEYNAME *nterm; | const KEYNAME *nterm; |
| Line 56 const KEYNAME *nterm; | Line 84 const KEYNAME *nterm; |
| } | } |
| n++; | n++; |
| } | } |
| if (user) { | |
| if (!milstr_cmp(str_userkey1, str)) { | |
| return(NKEY_USER1); | |
| } | |
| if (!milstr_cmp(str_userkey2, str)) { | |
| return(NKEY_USER2); | |
| } | |
| } | |
| return(0xff); | return(0xff); |
| } | } |
| void keystat_tblload(const char *filename) { | void keystat_tblload(const char *filename) { |
| TEXTFILEH tfh; | TEXTFILEH tfh; |
| char work[128]; | char work[256]; |
| char *p; | char *p; |
| char *q; | char *q; |
| char *r; | char *r; |
| REG8 key; | UINT8 ref; |
| UINT8 key[15]; | |
| UINT cnt; | |
| tfh = textfile_open(filename, 0x800); | tfh = textfile_open(filename, 0x800); |
| if (tfh == NULL) { | if (tfh == NULL) { |
| Line 82 void keystat_tblload(const char *filenam | Line 120 void keystat_tblload(const char *filenam |
| continue; | continue; |
| } | } |
| *q++ = '\0'; | *q++ = '\0'; |
| r = (char *)milstr_chr(p, ' '); | r = milstr_chr(p, ' '); |
| if (r != NULL) { | if (r != NULL) { |
| *r = '\0'; | *r = '\0'; |
| } | } |
| key = searchkeynum(p); | ref = searchkeynum(p, TRUE); |
| if (ref == 0xff) { | |
| while(q) { | continue; |
| } | |
| cnt = 0; | |
| while((q) && (cnt < 16)) { | |
| p = milstr_nextword(q); | p = milstr_nextword(q); |
| q = milstr_chr(p, ' '); | q = milstr_chr(p, ' '); |
| if (q != NULL) { | if (q != NULL) { |
| *q++ = '\0'; | *q++ = '\0'; |
| } | } |
| key = searchkeynum(p); | key[cnt] = searchkeynum(p, FALSE); |
| if (key[cnt] != 0xff) { | |
| cnt++; | |
| } | |
| } | } |
| keystat_tblset(ref, key, cnt); | |
| } | } |
| textfile_close(tfh); | textfile_close(tfh); |
| Line 213 void keystat_resendstat(void) { | Line 257 void keystat_resendstat(void) { |
| void keystat_keydown(REG8 ref) { | void keystat_keydown(REG8 ref) { |
| UINT8 keycode; | UINT8 keycode; |
| UINT8 shift; | UINT8 shift; |
| const NKEYM3 *nkey3; | const NKEYM *nkey; |
| const NKEYM15 *nkey15; | |
| keycode = ref & 0x7f; | keycode = ref & 0x7f; |
| if (np2cfg.KEY_MODE) { | if (np2cfg.KEY_MODE) { |
| Line 227 const NKEYM15 *nkey15; | Line 270 const NKEYM15 *nkey15; |
| } | } |
| } | } |
| if ((keycode != NKEY_USER1) && (keycode != NKEY_USER2)) { | if ((keycode != NKEY_USER1) && (keycode != NKEY_USER2)) { |
| nkey3 = nkeytbl.key + keycode; | nkey = (NKEYM *)(nkeytbl.key + keycode); |
| keystat_down(nkey3->key, nkey3->keys, keycode); | keystat_down(nkey->key, nkey->keys, keycode); |
| } | } |
| else { | else { |
| #if 0 | nkey = (NKEYM *)(nkeytbl.user + (keycode - NKEY_USER1)); |
| nkey15 = nkeytbl.user + (keycode - NKEY_USER1); | keystat_down(nkey->key, nkey->keys, NKEYREF_USER); |
| #else | |
| nkey15 = (NKEYM15 *)(np2cfg.userkey + (keycode - NKEY_USER1)); | |
| #endif | |
| keystat_down(nkey15->key, nkey15->keys, NKEYREF_USER); | |
| } | } |
| } | } |
| void keystat_keyup(REG8 ref) { | void keystat_keyup(REG8 ref) { |
| UINT8 keycode; | UINT8 keycode; |
| UINT8 shift; | UINT8 shift; |
| const NKEYM3 *nkey3; | const NKEYM *nkey; |
| const NKEYM15 *nkey15; | |
| keycode = ref & 0x7f; | keycode = ref & 0x7f; |
| if (np2cfg.KEY_MODE) { | if (np2cfg.KEY_MODE) { |
| Line 256 const NKEYM15 *nkey15; | Line 294 const NKEYM15 *nkey15; |
| } | } |
| } | } |
| if ((keycode != NKEY_USER1) && (keycode != NKEY_USER2)) { | if ((keycode != NKEY_USER1) && (keycode != NKEY_USER2)) { |
| nkey3 = nkeytbl.key + keycode; | nkey = (NKEYM *)(nkeytbl.key + keycode); |
| keystat_up(nkey3->key, nkey3->keys, keycode); | keystat_up(nkey->key, nkey->keys, keycode); |
| } | } |
| else { | else { |
| #if 0 | nkey = (NKEYM *)(nkeytbl.user + (keycode - NKEY_USER1)); |
| nkey15 = nkeytbl.user + (keycode - NKEY_USER1); | keystat_up(nkey->key, nkey->keys, NKEYREF_USER); |
| #else | |
| nkey15 = (NKEYM15 *)(np2cfg.userkey + (keycode - NKEY_USER1)); | |
| #endif | |
| keystat_up(nkey15->key, nkey15->keys, NKEYREF_USER); | |
| } | } |
| } | } |