The bug is that isdigit() from Borland's compiler doesn't work with
non-ASCII characters (ones whose numeric value is above 127). This is
because isdigit() takes a signed value (and int), but Borland's
implementation uses a lookup table of 256 entries to determine if the value
is a digit. Values outside the ASCII-7 range are actually negative numbers
in Borland's compiler (which is okay, but the definition of C), so instead
of looking stuff up in the table with an offset of, say, 148, it goes
backwards and looks at memory that is placed before the table. Thus, the
value that is uses for isdigit() depends on what the compiler happened to
put there. The change in wrksp.cpp happened to make some functions
smaller, so the compiler changed the layout of what when where in
fmslogo.exe and place non-zero data before the lookup table, which caused
these values to look like digits.
The fix is to use my own implementation of isdigit() that does not rely on a lookup table. This is what UCBLogo does.