+print_string (lispobj *object)
+{
+ int tag = widetag_of(*object);
+ struct vector *vector = (struct vector *) object;
+
+#define doit(TYPE) \
+ do { \
+ int i; \
+ int n = fixnum_value(vector->length); \
+ TYPE *data = (TYPE *) vector->data; \
+ for (i = 0; i < n; i++) { \
+ wchar_t c = (wchar_t) data[i]; \
+ if (c == '\\' || c == '"') \
+ putchar('\\'); \
+ putwc(c, stdout); \
+ } \
+ } while (0)
+
+ switch (tag) {
+ case SIMPLE_BASE_STRING_WIDETAG:
+ doit(unsigned char);
+ break;
+#ifdef SIMPLE_CHARACTER_STRING_WIDETAG
+ case SIMPLE_CHARACTER_STRING_WIDETAG:
+ doit(unsigned int);
+ break;
+#endif
+ default:
+ printf("<??? type %d>", tag);
+ }
+#undef doit
+}
+
+static void