91 lines
1.6 KiB
C
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);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|