- prog++;
- assert ((int) *prog); /* How could a line end in `\'? */
- switch (*prog++)
- {
- case '\'':
- c = '\'';
- break;
- case '"':
- c = '"';
- break;
- case '?':
- c = '?';
- break;
- case '\\':
- c = '\\';
- break;
- case '}':
- c = '}';
- break;
- case 'a':
- c = '\a';
- break;
- case 'b':
- c = '\b';
- break;
- case 'f':
- c = '\f';
- break;
- case 'n':
- c = '\n';
- break;
- case 'r':
- c = '\r';
- break;
- case 't':
- c = '\t';
- break;
- case 'v':
- c = '\v';
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- {
- c = prog[-1] - '0';
- while (*prog >= '0' && *prog <= '7')
- c = c * 8 + *prog++ - '0';
- }
- break;
- case 'x':
- case 'X':
- {
- c = 0;
- while (isxdigit ((unsigned char) *prog))
- {
- c *= 16;
- if (isdigit ((unsigned char) *prog))
- c += *prog - '0';
- else
- c += (tolower ((unsigned char) (*prog))
- - 'a' + 10);
- prog++;
- }
- }
- break;
- default:
- msg (IS, _("Syntax error in string constant."));
- continue;
- }
- ds_putc (&op_tokstr, (unsigned char) c);
- }
- }
- prog++;
- }
- else
- while (*prog && !isspace ((unsigned char) *prog) && *prog != '=')
- ds_putc (&op_tokstr, *prog++);
- op_token = 'a';
+ switch (ds_at (s, *pos))
+ {
+ case '\'':
+ out = '\'';
+ break;
+ case '"':
+ out = '"';
+ break;
+ case '\\':
+ out = '\\';
+ break;
+ case 'a':
+ out = '\a';
+ break;
+ case 'b':
+ out = '\b';
+ break;
+ case 'f':
+ out = '\f';
+ break;
+ case 'n':
+ out = '\n';
+ break;
+ case 'r':
+ out = '\r';
+ break;
+ case 't':
+ out = '\t';
+ break;
+ case 'v':
+ out = '\v';
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ out = c - '0';
+ while (ds_at (s, *pos) >= '0' && ds_at (s, *pos) <= '7')
+ out = c * 8 + ds_at (s, (*pos)++) - '0';
+ break;
+ case 'x':
+ case 'X':
+ out = 0;
+ while (isxdigit (ds_at (s, *pos)))
+ {
+ c = ds_at (s, *pos);
+ if (!isxdigit (c))
+ break;
+ (*pos)++;
+
+ out *= 16;
+ if (isdigit (c))
+ out += c - '0';
+ else
+ out += tolower (c) - 'a' + 10;
+ }
+ break;
+ default:
+ error (0, 0, _("syntax error in string constant "
+ "parsing options for \"%s\" driver"),
+ driver_name);
+ return false;
+ }
+ ds_putc (token, out);
+ }
+ }