diff --git a/src/lex.c b/src/lex.c
index 550400f13cb678bd7e2a01bb61affa1f0c7e2247..21b3ac82dd879a3b57d44e8400c5ede521910037 100644
--- a/src/lex.c
+++ b/src/lex.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: lex.c,v 1.26 1997/08/30 18:35:39 grubba Exp $");
+RCSID("$Id: lex.c,v 1.27 1997/09/08 01:03:24 hubbe Exp $");
 #include "language.h"
 #include "array.h"
 #include "lex.h"
@@ -1072,15 +1072,52 @@ static int char_const(void)
   int c;
   switch(c=GETC())
   {
-  case '0': case '1': case '2': case '3':
-  case '4': case '5': case '6': case '7':
+    case 'x':
+      switch(LOOK())
+      {
+	default: return c;
+	case '0': case '1': case '2': case '3':
+	case '4': case '5': case '6': case '7':
+	case '8': case '9':
+	  c=GETC()-'0';
+	  break;
+	  
+	case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+	  c=GETC()-'a'+10;
+	  break;
+
+	case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+	  c=GETC()-'a'+10;
+	  break;
+      }
+      switch(LOOK())
+      {
+	default: return c;
+	case '0': case '1': case '2': case '3':
+	case '4': case '5': case '6': case '7':
+	case '8': case '9':
+	  c=c*16+GETC()-'0';
+	  break;
+	  
+	case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+	  c=c*16+GETC()-'a'+10;
+	  break;
+
+	case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+	  c=c*16+GETC()-'a'+10;
+	  break;
+      }
+      return c;
+      
+    case '0': case '1': case '2': case '3':
+    case '4': case '5': case '6': case '7':
       c-='0';
       if(LOOK()<'0' || LOOK()>'8') return c;
       c=c*8+(GETC()-'0');
       if(LOOK()<'0' || LOOK()>'8') return c;
       c=c*8+(GETC()-'0');
       return c;
-
+      
     case 'r': return '\r';
     case 'n': return '\n';
     case 't': return '\t';