static char * convert_hex (struct type *type, char *p, char *limit, struct obstack *output) { unsigned long value = 0; while (p < limit && isxdigit (*p)) { value = 16 * value + host_hex_value (*p); ++p; } emit_numeric_character (type, value, output); return p; }
static char * convert_octal (struct type *type, char *p, char *limit, struct obstack *output) { int i; unsigned long value = 0; for (i = 0; i < 3 && p < limit && isdigit (*p) && *p != '8' && *p != '9'; ++i) { value = 8 * value + host_hex_value (*p); ++p; } emit_numeric_character (type, value, output); return p; }
static char * convert_ucn (char *p, char *limit, const char *dest_charset, struct obstack *output, int length) { unsigned long result = 0; gdb_byte data[4]; int i; for (i = 0; i < length && p < limit && isxdigit (*p); ++i, ++p) result = (result << 4) + host_hex_value (*p); for (i = 3; i >= 0; --i) { data[i] = result & 0xff; result >>= 8; } convert_between_encodings ("UTF-32BE", dest_charset, data, 4, 4, output, translit_none); return p; }
static int mi_parse_escape (char **string_ptr) { int c = *(*string_ptr)++; switch (c) { case '\n': return -2; case 0: (*string_ptr)--; return 0; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': { int i = host_hex_value (c); int count = 0; while (++count < 3) { c = (**string_ptr); if (isdigit (c) && c != '8' && c != '9') { (*string_ptr)++; i *= 8; i += host_hex_value (c); } else { break; } } return i; } case 'a': c = '\a'; break; case 'b': c = '\b'; break; case 'f': c = '\f'; break; case 'n': c = '\n'; break; case 'r': c = '\r'; break; case 't': c = '\t'; break; case 'v': c = '\v'; break; default: break; } return c; }