BEGIN BOOLEAN PROCEDURE ISNUMERIC(W); TEXT W; BEGIN BOOLEAN PROCEDURE MORE; MORE := W.MORE; CHARACTER PROCEDURE NEXT; NEXT := IF MORE THEN W.GETCHAR ELSE CHAR(0); CHARACTER PROCEDURE LAST; LAST := IF W.LENGTH = 0 THEN CHAR(0) ELSE W.SUB(W.LENGTH,1).GETCHAR; CHARACTER CH; W.SETPOS(1); IF MORE THEN BEGIN CH := NEXT; IF CH = '-' OR CH = '+' THEN CH := NEXT; WHILE DIGIT(CH) DO CH := NEXT; IF CH = '.' THEN BEGIN CH := NEXT; IF NOT DIGIT(CH) THEN GOTO L; WHILE DIGIT(CH) DO CH := NEXT; END; IF CH = '&' THEN BEGIN CH := NEXT; IF CH = '-' OR CH = '+' THEN CH := NEXT; WHILE DIGIT(CH) DO CH := NEXT; END; END; L: ISNUMERIC := (W.LENGTH > 0) AND THEN (NOT MORE) AND THEN DIGIT(LAST); END; REAL X; TEXT T; FOR X := 0, -3.1415, 2.768&+31, 5&10, .5, 5.&10 DO BEGIN OUTREAL(X, 10, 20); OUTIMAGE; END; OUTIMAGE; FOR T :- "0", "-3.1415", "2.768&+31", ".5", "5&22" DO BEGIN OUTTEXT(IF ISNUMERIC(T) THEN " NUMERIC " ELSE "NOT NUMERIC "); OUTCHAR('"'); OUTTEXT(T); OUTCHAR('"'); IF T = "0" THEN OUTCHAR(CHAR(9)); OUTCHAR(CHAR(9)); COMMENT PROBE ; X := T.GETREAL; OUTREAL(X, 10, 20); OUTIMAGE; END; OUTIMAGE; X := 5.&10; !X := 5&; !X := 5.; X := .5; FOR T :- "", "5.", "5&", "5&+", "5.&", "5.&-", "5.&10" DO BEGIN OUTTEXT(IF ISNUMERIC(T) THEN " NUMERIC " ELSE "NOT NUMERIC "); OUTCHAR('"'); OUTTEXT(T); OUTCHAR('"'); OUTIMAGE; END; END