(******************************
This program demonstrates that the ORD function doesn't always return the
correct value for a CHAR variable and that the statement "c := C^;" moves a
16 bit value at address C to the CHAR variable c. Both have caused serious
gas pains! Is there a fix or Modula2 update available?
**********************************)
MODULE M2BugDemo;
FROM STORAGE IMPORT ALLOCATE;
FROM SYSTEM IMPORT ADDRESS, FILL;
VAR
A : ADDRESS;
c : CHAR;
C : POINTER TO CHAR;
i : CARDINAL;
BEGIN
ALLOCATE (A, 10);
FILL (A, 10, 97);
FOR i := 0 TO 9 DO
C := A + i;
c := C^;
WRITELN (c, ORD (c));
END;
END M2BugDemo.