int keysym2amiga (int keysym) { int amiga_keycode = kc_decode (keysym); if (amiga_keycode == -1) { switch (currprefs.keyboard_lang) { case KBD_LANG_FR: amiga_keycode = decode_fr (keysym); break; case KBD_LANG_US: amiga_keycode = decode_us (keysym); break; case KBD_LANG_DE: amiga_keycode = decode_de (keysym); break; case KBD_LANG_DK: amiga_keycode = decode_dk (keysym); break; case KBD_LANG_SE: amiga_keycode = decode_se (keysym); break; case KBD_LANG_IT: amiga_keycode = decode_it (keysym); break; case KBD_LANG_ES: amiga_keycode = decode_es (keysym); break; case KBD_LANG_FI: amiga_keycode = decode_fi (keysym); break; case KBD_LANG_TR: amiga_keycode = decode_tr (keysym); break; default: break; } } return amiga_keycode; }
int32_t xkeysym2amiga (KeySym ks) { int32_t as = kc_decode (ks); if (as == -1) { switch (currprefs.keyboard_lang) { case KBD_LANG_FR: as = decode_fr (ks); break; case KBD_LANG_US: as = decode_us (ks); break; case KBD_LANG_DE: as = decode_de (ks); break; case KBD_LANG_DK: as = decode_dk (ks); break; case KBD_LANG_SE: as = decode_se (ks); break; case KBD_LANG_IT: as = decode_it (ks); break; case KBD_LANG_ES: as = decode_es (ks); break; case KBD_LANG_TR: as = decode_tr (ks); break; case KBD_LANG_FI: default: break; } } return as; }
static void handle_de(yystype *tokens, size_t start, const size_t cnt, const char *name, struct decode_result *res) { /* find function decl. end */ size_t i, nesting = 1, j; yystype* parameters [6]; const size_t parameters_cnt = 6; for(i=start;i < cnt; i++) { if(tokens[i].type == TOK_FUNCTION) { if(TOKEN_GET(&tokens[i], scope)) nesting++; else nesting--; if(!nesting) break; } } if(nesting) return; memset(parameters, 0, sizeof(parameters)); if(name) { /* find call to function */ for(;i+2 < cnt; i++) { const char* token_val = TOKEN_GET(&tokens[i], cstring); if(tokens[i].type == TOK_IDENTIFIER_NAME && token_val && !strcmp(name, token_val) && tokens[i+1].type == TOK_PAR_OPEN) { i += 2; for(j = 0;j < parameters_cnt && i < cnt;j++) { parameters[j] = &tokens[i++]; if(j != parameters_cnt-1) while (tokens[i].type != TOK_COMMA && i < cnt) i++; else while (tokens[i].type != TOK_PAR_CLOSE && i < cnt) i++; i++; } if(j == parameters_cnt) decode_de(parameters, &res->txtbuf); } } } else { while(i<cnt && tokens[i].type != TOK_PAR_OPEN) i++; ++i; if(i >= cnt) return; /* TODO: move this v to another func */ for(j = 0;j < parameters_cnt && i < cnt;j++) { parameters[j] = &tokens[i++]; if(j != parameters_cnt-1) while (tokens[i].type != TOK_COMMA && i < cnt) i++; else while (tokens[i].type != TOK_PAR_CLOSE && i < cnt) i++; i++; } if(j == parameters_cnt) decode_de(parameters, &res->txtbuf); } if(parameters[0] && parameters[parameters_cnt-1]) { res->pos_begin = parameters[0] - tokens; res->pos_end = parameters[parameters_cnt-1] - tokens + 1; if(tokens[res->pos_end].type == TOK_BRACKET_OPEN && tokens[res->pos_end+1].type == TOK_BRACKET_CLOSE && tokens[res->pos_end+2].type == TOK_PAR_CLOSE) res->pos_end += 3; /* {}) */ else res->pos_end++; /* ) */ } }