PROGRAM STR;{$P} {$C-} {$M-} {$F-} {$I+} TYPE $STRING0 = STRING 0; $STRING80= STRING 80; $STRING255 = STRING 255; VAR NUMBER:REAL; DATA:$STRING80; PROCEDURE SETLENGTH(VARX:$STRING0;Y:INTEGER);EXTERNAL; FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL; {function to convert a string "str" to a real number... corresponds roughly to the VAL$ statement in BASIC} FUNCTION STRTOREAL (STR:$STRING80):REAL; LABEL 1; VAR DECVAL,SIGN,VAL:REAL; DECIMAL,ERROR:BOOLEAN; L,I,LEN:INTEGER; BEGIN VAL:=0; DECVAL:=0; LEN:=LENGTH(STR); L:=LEN; ERROR:=FALSE; DECIMAL:=FALSE; I:=1; SIGN:=1.0; IF LEN = 0 THEN BEGIN ERROR:=TRUE; GOTO 1; END; WHILE (DECIMAL = FALSE) AND (I < LEN + 1) DO BEGIN CASE STR[I] OF '-' : SIGN:=-1.0; '.' : DECIMAL:=TRUE; '0','1','2','3','4','5','6','7','8','9': VAL:=(VAL * 10) + (ORD(STR[I]) - 48); {48 = ord of zero} END; {OF CASE} I:=I+1; END; {of while} WHILE (DECIMAL = TRUE) AND (L > I-1 ) DO {i-1 because of last while loop} BEGIN IF STR[L] IN ['0'..'9'] THEN DECVAL:=(DECVAL * 0.1) + ((ORD(STR[L]) - 48) * 0.1); L:=L-1; END; 1: { Exit immediately upon detection of a fatal error.} STRTOREAL:=SIGN * (DECVAL + VAL); END; {OF PROCEDURE} BEGIN END. .