home *** CD-ROM | disk | FTP | other *** search
- 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.