bug 760701
From Edmund Grimley Evans
The pattern of failures certainly looks like that of a program that
assumes char is signed... and, indeed, this seems to fix it:

  - In io.web, change the return type of get() and peek() from char to int.

  - In scan.web, change the type of prev_char, curr_char and next_char from char to int.

---
 src/io.web   |    8 ++++----
 src/scan.web |    6 +++---
 2 files changed, 7 insertions(+), 7 deletions(-)

--- 3dldf.orig/src/io.web
+++ 3dldf/src/io.web
@@ -3265,14 +3265,14 @@
 \ENDLOG 
 
 @<Declare |Scanner_Type| functions@>=
-char
+int
 get() const;
 
 
 @q ****** (6) Definition. @>
 @
 @<Define |Scanner_Type| functions@>=
-char
+int
 Scanner_Type::get() const
 {
   return in->stream_ptr->get();
@@ -3285,14 +3285,14 @@
 \ENDLOG 
 
 @<Declare |Scanner_Type| functions@>=
-char
+int
 peek() const;
 
 
 @q ****** (6) Definition. @>
 @
 @<Define |Scanner_Type| functions@>=
-char
+int
 Scanner_Type::peek() const
 {
   return in->stream_ptr->peek();
--- 3dldf.orig/src/scan.web
+++ 3dldf/src/scan.web
@@ -1211,9 +1211,9 @@
   unsigned int start_column;
   unsigned int curr_column;
 
-  char prev_char;  
-  char curr_char = EOF;
-  char next_char = EOF;
+  int prev_char;  
+  int curr_char = EOF;
+  int next_char = EOF;
 
   string curr_token_string = "";
   unsigned int curr_catcode;
