diff options
-rw-r--r-- | evaluator.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/evaluator.c b/evaluator.c index 343eb7b..e9c8037 100644 --- a/evaluator.c +++ b/evaluator.c @@ -631,6 +631,44 @@ static void Parse(void) Word[length++] = '\r'; ExprPtr += 2; break; + case 'x': + { + int i; + char hexC; + int hex[2]; + + for (i = 0; i < 2; i++) { + hexC = *(ExprPtr + 2 + i); + if (hexC >= '0' && hexC <= '9') + hex[i] = hexC - '0'; + else if (hexC >= 'a' && hexC <= 'f') + hex[i] = hexC - 'a' + 10; + else if (hexC >= 'A' && hexC <= 'F') + hex[i] = hexC - 'A' + 10; + else + break; + } + switch (i) { + case 1: + Word[length] = hex[0]; + ExprPtr += 3; + break; + case 2: + Word[length] = hex[0] * 16 + hex[1]; + ExprPtr += 4; + break; + default: + error("Evaluator: Illegal hex sequence '\\x%c' in <%s> keeps unchanged.", + *(ExprPtr + 2), Expression); + Word[length] = '\\'; + ExprPtr += 1; + } + if (Word[length] == 0) + error("Evaluator: Null character(s) in <%s> will be ignored.", Expression); + else + length++; + } + break; case '0': case '1': case '2': |