/* Data to create a T_REMAP_MATRIX for parser.c of Sim. */ /* The following macros give the same results as TIGCCLIB RR_ macros, but for the other calc (ie 89 for 92+/V200, 92+/V200 for 89). We need them to find the rowread pairs for the calculator to emulate. */ #define RRR_0 (!CALCULATOR?9:4),(!CALCULATOR?5:0) #define RRR_1 (!CALCULATOR?1:4),(!CALCULATOR?5:1) #define RRR_2 (!CALCULATOR?1:3),(!CALCULATOR?6:1) #define RRR_3 (!CALCULATOR?1:2),(!CALCULATOR?7:1) #define RRR_4 (!CALCULATOR?2:4),(!CALCULATOR?5:2) #define RRR_5 (!CALCULATOR?2:3),(!CALCULATOR?6:2) #define RRR_6 2,(!CALCULATOR?7:2) #define RRR_7 (!CALCULATOR?3:4),(!CALCULATOR?5:3) #define RRR_8 3,(!CALCULATOR?6:3) #define RRR_9 (!CALCULATOR?3:2),(!CALCULATOR?7:3) #define RRR_2ND 0,(!CALCULATOR?0:4) #define RRR_A (!CALCULATOR?9:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_ALPHA (!CALCULATOR?RRR_NO_KEY:0),(!CALCULATOR?RRR_NO_KEY:7) #define RRR_APPS (!CALCULATOR?7:5),(!CALCULATOR?6:0) #define RRR_B (!CALCULATOR?5:RRR_NO_KEY),(!CALCULATOR?1:RRR_NO_KEY) #define RRR_BCKSPC (!CALCULATOR?8:2),(!CALCULATOR?0:6) #define RRR_C (!CALCULATOR?3:RRR_NO_KEY),(!CALCULATOR?1:RRR_NO_KEY) #define RRR_CATALOG (!CALCULATOR?RRR_NO_KEY:3),(!CALCULATOR?RRR_NO_KEY:6) #define RRR_CLEAR (!CALCULATOR?7:1),(!CALCULATOR?5:6) #define RRR_COMMA (!CALCULATOR?4:2),(!CALCULATOR?7:4) #define RRR_COS (!CALCULATOR?5:RRR_NO_KEY),(!CALCULATOR?6:RRR_NO_KEY) #define RRR_D (!CALCULATOR?2:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_DIAMOND 0,(!CALCULATOR?1:6) #define RRR_DIVIDE (!CALCULATOR?5:1),(!CALCULATOR?0:4) #define RRR_DOT (!CALCULATOR?9:3),(!CALCULATOR?6:0) #define RRR_DOWN 0,(!CALCULATOR?7:2) #define RRR_E (!CALCULATOR?2:RRR_NO_KEY),(!CALCULATOR?3:RRR_NO_KEY) #define RRR_EE (!CALCULATOR?RRR_NO_KEY:5),(!CALCULATOR?RRR_NO_KEY:2) #define RRR_ENTER1 (!CALCULATOR?9:1),(!CALCULATOR?1:0) #define RRR_ENTER2 (!CALCULATOR?6:1),(!CALCULATOR?6:0) #define RRR_ENTER RRR_ENTER1 #define RRR_EQUALS RRR_NO_KEY,RRR_NO_KEY #define RRR_ESC (!CALCULATOR?8:6),(!CALCULATOR?6:0) #define RRR_F1 (!CALCULATOR?6:5),(!CALCULATOR?4:7) #define RRR_F2 4,(!CALCULATOR?4:7) #define RRR_F3 (!CALCULATOR?2:3),(!CALCULATOR?4:7) #define RRR_F4 (!CALCULATOR?9:2),(!CALCULATOR?4:7) #define RRR_F5 (!CALCULATOR?7:1),(!CALCULATOR?4:7) #define RRR_F6 (!CALCULATOR?5:RRR_NO_KEY),(!CALCULATOR?4:RRR_NO_KEY) #define RRR_F7 (!CALCULATOR?3:RRR_NO_KEY),(!CALCULATOR?4:RRR_NO_KEY) #define RRR_F8 (!CALCULATOR?1:RRR_NO_KEY),(!CALCULATOR?4:RRR_NO_KEY) #define RRR_F (!CALCULATOR?3:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_G (!CALCULATOR?4:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_H (!CALCULATOR?5:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_HAND (!CALCULATOR?0:RRR_NO_KEY),(!CALCULATOR?3:RRR_NO_KEY) #define RRR_HOME (!CALCULATOR?RRR_NO_KEY:5),(!CALCULATOR?RRR_NO_KEY:6) #define RRR_I (!CALCULATOR?7:RRR_NO_KEY),(!CALCULATOR?3:RRR_NO_KEY) #define RRR_J (!CALCULATOR?6:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_K (!CALCULATOR?7:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_L (!CALCULATOR?8:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_LEFT 0,(!CALCULATOR?4:1) #define RRR_LN (!CALCULATOR?6:RRR_NO_KEY),(!CALCULATOR?5:RRR_NO_KEY) #define RRR_M (!CALCULATOR?7:RRR_NO_KEY),(!CALCULATOR?1:RRR_NO_KEY) #define RRR_MINUS (!CALCULATOR?9:1),(!CALCULATOR?0:2) #define RRR_MODE (!CALCULATOR?8:4),(!CALCULATOR?5:6) #define RRR_MULTIPLY (!CALCULATOR?7:1),(!CALCULATOR?7:3) #define RRR_N (!CALCULATOR?6:RRR_NO_KEY),(!CALCULATOR?1:RRR_NO_KEY) #define RRR_NEGATE (!CALCULATOR?9:2),(!CALCULATOR?7:0) #define RRR_NO_KEY 0xF #define RRR_O (!CALCULATOR?8:RRR_NO_KEY),(!CALCULATOR?3:RRR_NO_KEY) #define RRR_P (!CALCULATOR?6:RRR_NO_KEY),(!CALCULATOR?7:RRR_NO_KEY) #define RRR_PAREN_CLOSE (!CALCULATOR?4:3),(!CALCULATOR?6:4) #define RRR_PAREN_OPEN 4,(!CALCULATOR?5:4) #define RRR_PLUS (!CALCULATOR?8:1),(!CALCULATOR?4:1) #define RRR_POWER (!CALCULATOR?6:1),(!CALCULATOR?0:5) #define RRR_Q (!CALCULATOR?9:RRR_NO_KEY),(!CALCULATOR?3:RRR_NO_KEY) #define RRR_R (!CALCULATOR?3:RRR_NO_KEY),(!CALCULATOR?3:RRR_NO_KEY) #define RRR_RIGHT 0,(!CALCULATOR?6:3) #define RRR_S (!CALCULATOR?1:RRR_NO_KEY),(!CALCULATOR?2:RRR_NO_KEY) #define RRR_SHIFT 0,(!CALCULATOR?2:5) #define RRR_SIN (!CALCULATOR?5:RRR_NO_KEY),(!CALCULATOR?5:RRR_NO_KEY) #define RRR_SPACE (!CALCULATOR?4:RRR_NO_KEY),(!CALCULATOR?0:RRR_NO_KEY) #define RRR_STORE (!CALCULATOR?3:5),(!CALCULATOR?0:1) #define RRR_T (!CALCULATOR?4:2),(!CALCULATOR?3:5) #define RRR_TAN (!CALCULATOR?5:RRR_NO_KEY),(!CALCULATOR?7:RRR_NO_KEY) #define RRR_THETA (!CALCULATOR?8:RRR_NO_KEY),(!CALCULATOR?1:RRR_NO_KEY) #define RRR_U (!CALCULATOR?6:RRR_NO_KEY),(!CALCULATOR?3:RRR_NO_KEY) #define RRR_UP 0,(!CALCULATOR?5:0) #define RRR_V (!CALCULATOR?4:RRR_NO_KEY),(!CALCULATOR?1:RRR_NO_KEY) #define RRR_W (!CALCULATOR?1:RRR_NO_KEY),(!CALCULATOR?3:RRR_NO_KEY) #define RRR_WITH (!CALCULATOR?RRR_NO_KEY:5),(!CALCULATOR?RRR_NO_KEY:3) #define RRR_X (!CALCULATOR?2:5),(!CALCULATOR?1:5) #define RRR_Y (!CALCULATOR?5:4),(!CALCULATOR?3:5) #define RRR_Z (!CALCULATOR?1:3),(!CALCULATOR?1:5) typedef struct { char row; char col; } RR_PARMS; /* a structure for one key containing the offset of the name of the key (read in the script) and the parameters for rowread for the calculator emulated, and for the calculator Sim is running onto. */ typedef struct { unsigned short name_offset; RR_PARMS this_calc, emulated_calc; /* found with RR_ and RRR_ macros */ } KEY_NAME_AND_PARMS; /* Macros to create the names of the keys : */ /* macro to create the structure containing the names */ #define KNAME_CREATE_FIELDS static const struct KNAMES_STRUCT { /* macros to create a new field for a name */ #define ADD_KNAME_FIELD(name) char name[sizeof(#name)] #define ADD_KNAME_SPECIAL_FIELD(field_name, kname) char field_name[sizeof(kname)] /* macro to end the definition of the fields */ #define KNAME_FIELDS_CREATED } knames_struct = /* macro to calculate the offset written to a KEY_NAME_AND_PARMS.name_offset */ #define KOFFSET(name) ((unsigned short)offsetof(struct KNAMES_STRUCT, name)) /* macro to get the name of a key giving its offset */ #define GET_KNAME(offset) ((const char *)&knames_struct + (unsigned short)offset) KNAME_CREATE_FIELDS ADD_KNAME_FIELD (HAND); ADD_KNAME_FIELD (F1); ADD_KNAME_FIELD (F2); ADD_KNAME_FIELD (F3); ADD_KNAME_FIELD (F4); ADD_KNAME_FIELD (F5); ADD_KNAME_FIELD (F6); ADD_KNAME_FIELD (F7); ADD_KNAME_FIELD (F8); ADD_KNAME_FIELD (Q); ADD_KNAME_FIELD (W); ADD_KNAME_FIELD (E); ADD_KNAME_FIELD (R); ADD_KNAME_FIELD (T); ADD_KNAME_FIELD (Y); ADD_KNAME_FIELD (U); ADD_KNAME_FIELD (I); ADD_KNAME_FIELD (O); ADD_KNAME_FIELD (P); ADD_KNAME_FIELD (A); ADD_KNAME_FIELD (S); ADD_KNAME_FIELD (D); ADD_KNAME_FIELD (F); ADD_KNAME_FIELD (G); ADD_KNAME_FIELD (H); ADD_KNAME_FIELD (J); ADD_KNAME_FIELD (K); ADD_KNAME_FIELD (L); ADD_KNAME_FIELD (SHIFT); ADD_KNAME_FIELD (Z); ADD_KNAME_FIELD (X); ADD_KNAME_FIELD (C); ADD_KNAME_FIELD (V); ADD_KNAME_FIELD (B); ADD_KNAME_FIELD (N); ADD_KNAME_FIELD (M); ADD_KNAME_FIELD (THETA); ADD_KNAME_FIELD (DIAMOND); ADD_KNAME_SPECIAL_FIELD (SECOND, "2ND"); ADD_KNAME_FIELD (STO); ADD_KNAME_FIELD (SPACE); ADD_KNAME_SPECIAL_FIELD (EQUALS, "="); ADD_KNAME_FIELD (BACKSPACE); ADD_KNAME_FIELD (ENTER); ADD_KNAME_FIELD (MODE); ADD_KNAME_FIELD (CLEAR); ADD_KNAME_FIELD (LN); ADD_KNAME_FIELD (ESC); ADD_KNAME_FIELD (APPS); ADD_KNAME_FIELD (ENTER_CPAD); ADD_KNAME_FIELD (LEFT); ADD_KNAME_FIELD (UP); ADD_KNAME_FIELD (RIGHT); ADD_KNAME_FIELD (DOWN); ADD_KNAME_FIELD (SIN); ADD_KNAME_FIELD (COS); ADD_KNAME_FIELD (TAN); ADD_KNAME_SPECIAL_FIELD (POWER, "^"); ADD_KNAME_SPECIAL_FIELD (BRACKET_OPEN, "("); ADD_KNAME_SPECIAL_FIELD (BRACKET_CLOSE, ")"); ADD_KNAME_FIELD (COMMA); ADD_KNAME_SPECIAL_FIELD (DIV, "/"); ADD_KNAME_SPECIAL_FIELD (MUL, "*"); ADD_KNAME_SPECIAL_FIELD (SUB, "-"); ADD_KNAME_SPECIAL_FIELD (ADD, "+"); ADD_KNAME_SPECIAL_FIELD (NEG, "\173"); /* (-) */ ADD_KNAME_SPECIAL_FIELD (DOT, "."); ADD_KNAME_SPECIAL_FIELD (N0, "0"); ADD_KNAME_SPECIAL_FIELD (N1, "1"); ADD_KNAME_SPECIAL_FIELD (N2, "2"); ADD_KNAME_SPECIAL_FIELD (N3, "3"); ADD_KNAME_SPECIAL_FIELD (N4, "4"); ADD_KNAME_SPECIAL_FIELD (N5, "5"); ADD_KNAME_SPECIAL_FIELD (N6, "6"); ADD_KNAME_SPECIAL_FIELD (N7, "7"); ADD_KNAME_SPECIAL_FIELD (N8, "8"); ADD_KNAME_SPECIAL_FIELD (N9, "9"); ADD_KNAME_FIELD (CATALOG); ADD_KNAME_FIELD (ALPHA); ADD_KNAME_SPECIAL_FIELD (WITH, "\x07C"); /* | */ ADD_KNAME_SPECIAL_FIELD (EE, "\x095"); /* EE */ ADD_KNAME_FIELD (HOME); KNAME_FIELDS_CREATED { "HAND", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A", "S", "D", "F", "G", "H", "J", "K", "L", "SHIFT", "Z", "X", "C", "V", "B", "N", "M", "THETA", "DIAMOND", "2ND", "STO", "SPACE", "=", "BACKSPACE", "ENTER", "MODE", "CLEAR", "LN", "ESC", "APPS", "ENTER_CPAD", "LEFT", "UP", "RIGHT", "DOWN", "SIN", "COS", "TAN", "^", "(", ")", "COMMA", "/", "*", "-", "+", "\173", /* (-) */ ".", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "CATALOG", "ALPHA", "\x07C", /* | */ "\x095", /* EE */ "HOME" }; /* This structure contains all the previous data as an array of KEY_NAME_AND_PARMS. The rowread parameters for a key will be searched by its name. */ static const KEY_NAME_AND_PARMS KEYS_DATA_TABLE[] = { {KOFFSET (HAND), {RR_HAND}, {RRR_HAND} }, {KOFFSET (F1), {RR_F1}, {RRR_F1} }, {KOFFSET (F2), {RR_F2}, {RRR_F2} }, {KOFFSET (F3), {RR_F3}, {RRR_F3} }, {KOFFSET (F4), {RR_F4}, {RRR_F4} }, {KOFFSET (F5), {RR_F5}, {RRR_F5} }, {KOFFSET (F6), {RR_F6}, {RRR_F6} }, {KOFFSET (F7), {RR_F7}, {RRR_F7} }, {KOFFSET (F8), {RR_F8}, {RRR_F8} }, {KOFFSET (Q), {RR_Q}, {RRR_Q} }, {KOFFSET (W), {RR_W}, {RRR_W} }, {KOFFSET (E), {RR_E}, {RRR_E} }, {KOFFSET (R), {RR_R}, {RRR_R} }, {KOFFSET (T), {RR_T}, {RRR_T} }, {KOFFSET (Y), {RR_Y}, {RRR_Y} }, {KOFFSET (U), {RR_U}, {RRR_U} }, {KOFFSET (I), {RR_I}, {RRR_I} }, {KOFFSET (O), {RR_O}, {RRR_O} }, {KOFFSET (P), {RR_P}, {RRR_P} }, {KOFFSET (A), {RR_A}, {RRR_A} }, {KOFFSET (S), {RR_S}, {RRR_S} }, {KOFFSET (D), {RR_D}, {RRR_D} }, {KOFFSET (F), {RR_F}, {RRR_F} }, {KOFFSET (G), {RR_G}, {RRR_G} }, {KOFFSET (H), {RR_H}, {RRR_H} }, {KOFFSET (J), {RR_J}, {RRR_J} }, {KOFFSET (K), {RR_K}, {RRR_K} }, {KOFFSET (L), {RR_L}, {RRR_L} }, {KOFFSET (SHIFT), {RR_SHIFT}, {RRR_SHIFT} }, {KOFFSET (Z), {RR_Z}, {RRR_Z} }, {KOFFSET (X), {RR_X}, {RRR_X} }, {KOFFSET (C), {RR_C}, {RRR_C} }, {KOFFSET (V), {RR_V}, {RRR_V} }, {KOFFSET (B), {RR_B}, {RRR_B} }, {KOFFSET (N), {RR_N}, {RRR_N} }, {KOFFSET (M), {RR_M}, {RRR_M} }, {KOFFSET (THETA), {RR_THETA}, {RRR_THETA} }, {KOFFSET (DIAMOND), {RR_DIAMOND}, {RRR_DIAMOND} }, {KOFFSET (SECOND), {RR_2ND}, {RRR_2ND} }, {KOFFSET (STO), {RR_STORE}, {RRR_STORE} }, {KOFFSET (SPACE), {RR_SPACE}, {RRR_SPACE} }, {KOFFSET (EQUALS), {RR_EQUALS}, {RRR_EQUALS} }, {KOFFSET (BACKSPACE), {RR_BCKSPC}, {RRR_BCKSPC} }, {KOFFSET (ENTER), {RR_ENTER1}, {RRR_ENTER1} }, {KOFFSET (MODE), {RR_MODE}, {RRR_MODE} }, {KOFFSET (CLEAR), {RR_CLEAR}, {RRR_CLEAR} }, {KOFFSET (LN), {RR_LN}, {RRR_LN} }, {KOFFSET (ESC), {RR_ESC}, {RRR_ESC} }, {KOFFSET (APPS), {RR_APPS}, {RRR_APPS} }, {KOFFSET (ENTER_CPAD), {RR_ENTER2}, {RRR_ENTER2} }, {KOFFSET (LEFT), {RR_LEFT}, {RRR_LEFT} }, {KOFFSET (UP), {RR_UP}, {RRR_UP} }, {KOFFSET (RIGHT), {RR_RIGHT}, {RRR_RIGHT} }, {KOFFSET (DOWN), {RR_DOWN}, {RRR_DOWN} }, {KOFFSET (SIN), {RR_SIN}, {RRR_SIN} }, {KOFFSET (COS), {RR_COS}, {RRR_COS} }, {KOFFSET (TAN), {RR_TAN}, {RRR_TAN} }, {KOFFSET (POWER), {RR_POWER}, {RRR_POWER} }, {KOFFSET (BRACKET_OPEN), {RR_PAREN_OPEN}, {RRR_PAREN_OPEN} }, {KOFFSET (BRACKET_CLOSE), {RR_PAREN_CLOSE}, {RRR_PAREN_CLOSE} }, {KOFFSET (COMMA), {RR_COMMA}, {RRR_COMMA} }, {KOFFSET (DIV), {RR_DIVIDE}, {RRR_DIVIDE} }, {KOFFSET (MUL), {RR_MULTIPLY}, {RRR_MULTIPLY} }, {KOFFSET (SUB), {RR_MINUS}, {RRR_MINUS} }, {KOFFSET (ADD), {RR_PLUS}, {RRR_PLUS} }, {KOFFSET (NEG), {RR_NEGATE}, {RRR_NEGATE} }, {KOFFSET (DOT), {RR_DOT}, {RRR_DOT} }, {KOFFSET (N0), {RR_0}, {RRR_0} }, {KOFFSET (N1), {RR_1}, {RRR_1} }, {KOFFSET (N2), {RR_2}, {RRR_2} }, {KOFFSET (N3), {RR_3}, {RRR_3} }, {KOFFSET (N4), {RR_4}, {RRR_4} }, {KOFFSET (N5), {RR_5}, {RRR_5} }, {KOFFSET (N6), {RR_6}, {RRR_6} }, {KOFFSET (N7), {RR_7}, {RRR_7} }, {KOFFSET (N8), {RR_8}, {RRR_8} }, {KOFFSET (N9), {RR_9}, {RRR_9} }, {KOFFSET (CATALOG), {RR_CATALOG}, {RRR_CATALOG} }, {KOFFSET (ALPHA), {RR_ALPHA}, {RRR_ALPHA} }, {KOFFSET (WITH), {RR_WITH}, {RRR_WITH} }, {KOFFSET (EE), {RR_EE}, {RRR_EE} }, {KOFFSET (HOME), {RR_HOME}, {RRR_HOME} } };