2 * cstring.c -- parse and print strings using the C escape sequences
16 int parse_c_string(char *str)
23 for (to = from = (char *) str;
24 *from && *from != '"'; to++, from++) {
48 if (ch >= 'a' && ch <= 'f')
50 if (ch >= '0' && ch <= '9')
52 else if (ch >= 'A' && ch <= 'F')
60 if (ch >= 'a' && ch <= 'f')
62 if (ch >= '0' && ch <= '9')
63 v = (v * 16) + (ch - '0');
64 else if (ch >= 'A' && ch <= 'F')
65 v = (v * 16) + (ch + 10 - 'A');
75 if (ch >= '0' && ch <= '9') {
78 if (ch >= '0' && ch <= '9') {
80 v = (8 * v) + (ch - '0');
82 if (ch >= '0' && ch <= '9') {
84 v = (8 * v) + (ch - '0');
96 return to - (char *) str;
99 void print_c_string(FILE *f, const char *cp, int len)
126 else if ((ch < 32) || (ch > 126))
127 fprintf(f, "\\%03o", ch);
134 int main(int argc, char **argv)
139 while ((c = getopt(argc, argv, "r")) != EOF) {
145 fprintf(stderr, "Usage: %s [-r]\n", argv[0]);
150 while (!feof(stdin)) {
151 if (fgets(buf, sizeof(buf), stdin) == NULL)
153 c = parse_c_string(buf);
157 print_c_string(stdout, buf, c);
158 printf(" <%d>\n", c);