void pascal_printchar (int c, struct ui_file *stream) { int in_quotes = 0; pascal_one_char (c, stream, &in_quotes); if (in_quotes) fputs_filtered ("'", stream); }
static void pascal_emit_char (int c, struct ui_file *stream, int quoter) { int in_quotes = 0; pascal_one_char (c, stream, &in_quotes); if (in_quotes) fputs_filtered ("'", stream); }
void pascal_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, unsigned int length, const char *encoding, int force_ellipses, const struct value_print_options *options) { enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type)); unsigned int i; unsigned int things_printed = 0; int in_quotes = 0; int need_comma = 0; int width; /* Preserve TYPE's original type, just set its LENGTH. */ check_typedef (type); width = TYPE_LENGTH (type); /* If the string was not truncated due to `set print elements', and the last byte of it is a null, we don't print that, in traditional C style. */ if ((!force_ellipses) && length > 0 && extract_unsigned_integer (string + (length - 1) * width, width, byte_order) == 0) length--; if (length == 0) { fputs_filtered ("''", stream); return; } for (i = 0; i < length && things_printed < options->print_max; ++i) { /* Position of the character we are examining to see whether it is repeated. */ unsigned int rep1; /* Number of repetitions we have detected so far. */ unsigned int reps; unsigned long int current_char; QUIT; if (need_comma) { fputs_filtered (", ", stream); need_comma = 0; } current_char = extract_unsigned_integer (string + i * width, width, byte_order); rep1 = i + 1; reps = 1; while (rep1 < length && extract_unsigned_integer (string + rep1 * width, width, byte_order) == current_char) { ++rep1; ++reps; } if (reps > options->repeat_count_threshold) { if (in_quotes) { fputs_filtered ("', ", stream); in_quotes = 0; } pascal_printchar (current_char, type, stream); fprintf_filtered (stream, " <repeats %u times>", reps); i = rep1 - 1; things_printed += options->repeat_count_threshold; need_comma = 1; } else { if ((!in_quotes) && (PRINT_LITERAL_FORM (current_char))) { fputs_filtered ("'", stream); in_quotes = 1; } pascal_one_char (current_char, stream, &in_quotes); ++things_printed; } } /* Terminate the quotes if necessary. */ if (in_quotes) fputs_filtered ("'", stream); if (force_ellipses || i < length) fputs_filtered ("...", stream); }
void pascal_printstr (struct ui_file *stream, char *string, unsigned int length, int width, int force_ellipses) { unsigned int i; unsigned int things_printed = 0; int in_quotes = 0; int need_comma = 0; /* If the string was not truncated due to `set print elements', and the last byte of it is a null, we don't print that, in traditional C style. */ if ((!force_ellipses) && length > 0 && string[length - 1] == '\0') length--; if (length == 0) { fputs_filtered ("''", stream); return; } for (i = 0; i < length && things_printed < print_max; ++i) { /* Position of the character we are examining to see whether it is repeated. */ unsigned int rep1; /* Number of repetitions we have detected so far. */ unsigned int reps; QUIT; if (need_comma) { fputs_filtered (", ", stream); need_comma = 0; } rep1 = i + 1; reps = 1; while (rep1 < length && string[rep1] == string[i]) { ++rep1; ++reps; } if (reps > repeat_count_threshold) { if (in_quotes) { if (inspect_it) fputs_filtered ("\\', ", stream); else fputs_filtered ("', ", stream); in_quotes = 0; } pascal_printchar (string[i], stream); fprintf_filtered (stream, " <repeats %u times>", reps); i = rep1 - 1; things_printed += repeat_count_threshold; need_comma = 1; } else { int c = string[i]; if ((!in_quotes) && (PRINT_LITERAL_FORM (c))) { if (inspect_it) fputs_filtered ("\\'", stream); else fputs_filtered ("'", stream); in_quotes = 1; } pascal_one_char (c, stream, &in_quotes); ++things_printed; } } /* Terminate the quotes if necessary. */ if (in_quotes) { if (inspect_it) fputs_filtered ("\\'", stream); else fputs_filtered ("'", stream); } if (force_ellipses || i < length) fputs_filtered ("...", stream); }