static void check_parms(pdc_core *pdc, const pdc_error_info *ei) { const char *msg = ei->errmsg; const char *dollar; while ((dollar = strchr(msg, '$')) != (char *) 0) { if (pdc_isdigit(dollar[1])) { int n = dollar[1] - '0'; if (ei->nparms < n || n < 1) pdc_panic(pdc, "illegal parameter '$%d' in error message %d", n, ei->errnum); } else if (dollar[1] != '$') { pdc_panic(pdc, "illegal '$' in error message %d", ei->errnum); } msg = dollar + 1; } } /* check_parms */
/* * flags: PDC_INT_HEXADEC, PDC_INT_CASESENS */ int pdc_get_keycode_num(pdc_core *pdc, const char *option, const char *i_keyword, int flags, const pdc_keyconn *keyconn, int *o_num) { static const char *fn = "pdc_get_keycode_num"; char *keyword; int i, len, keycode; keyword = pdc_strdup_ext(pdc, i_keyword, 0, fn); len = (int) strlen(keyword); *o_num = -1; /* parse number */ for (i = 0; i < len; i++) { if (pdc_isdigit(keyword[i])) { if (pdc_str2integer(&keyword[i], flags, o_num)) { keyword[i] = 0; } else { pdc_set_errmsg(pdc, PDC_E_OPT_ILLINTEGER, option, &keyword[i], 0, 0); } break; } } if (flags & PDC_INT_CASESENS) keycode = pdc_get_keycode(keyword, keyconn); else keycode = pdc_get_keycode_ci(keyword, keyconn); if (keycode == PDC_KEY_NOTFOUND) pdc_set_errmsg(pdc, PDC_E_OPT_ILLKEYWORD, option, keyword, 0, 0); pdc_free(pdc, keyword); return keycode; }