lisp-take-1/debug.c
2024-11-28 18:36:25 -06:00

91 lines
1.6 KiB
C

#include <stdio.h>
int debug_depth;
void dpvs_implementation(
const char* expression,
char quote,
const unsigned char* string_value,
size_t len)
{
printf("%*s", debug_depth, "");
printf("%s = %c", expression, quote);
for (const unsigned char* m = string_value; len && *m; m++, len--)
{
switch (*m)
{
case ' ':
case '~':
case '@':
case '$':
case ',':
case '%':
case '^':
case '&':
case '\'':
case '*':
case '#':
case '`':
case ';':
case '.':
case '=':
case '/':
case '+':
case '-':
case '_':
case '!':
case ':':
case '<': case '>':
case '(': case ')':
case '[': case ']':
case '{': case '}':
case '0' ... '9':
case 'a' ... 'z':
case 'A' ... 'Z':
putchar(*m);
break;
case '\\':
printf("\\\\");
break;
case '\"':
printf("\\\"");
break;
case '\e':
printf("\\e");
break;
case '\n':
printf("\\n");
break;
default:
printf("\\x%02X", *m);
break;
}
}
printf("%c\n", quote);
}