home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol064 / str.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1984-04-29  |  1.3 KB  |  76 lines

  1. PROGRAM STR;{$P}
  2. {$C-}
  3. {$M-}
  4. {$F-}
  5. {$I+}
  6. TYPE
  7. $STRING0 = STRING 0;
  8. $STRING80= STRING 80;
  9. $STRING255 = STRING 255;
  10.  
  11. VAR
  12. NUMBER:REAL;
  13. DATA:$STRING80;
  14.  
  15. PROCEDURE SETLENGTH(VARX:$STRING0;Y:INTEGER);EXTERNAL;
  16. FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL;
  17.  
  18. {function to convert a string "str" to a real number...
  19. corresponds roughly to the VAL$ statement in BASIC}
  20.  
  21. FUNCTION STRTOREAL (STR:$STRING80):REAL;
  22. LABEL 1;
  23.  
  24. VAR
  25. DECVAL,SIGN,VAL:REAL;
  26. DECIMAL,ERROR:BOOLEAN;
  27. L,I,LEN:INTEGER;
  28.  
  29. BEGIN
  30. VAL:=0;
  31. DECVAL:=0;
  32. LEN:=LENGTH(STR);
  33. L:=LEN;
  34. ERROR:=FALSE;
  35. DECIMAL:=FALSE;
  36. I:=1;
  37. SIGN:=1.0;
  38.  
  39. IF LEN = 0 THEN 
  40.     BEGIN
  41.     ERROR:=TRUE;
  42.     GOTO 1;
  43.     END;
  44.  
  45. WHILE (DECIMAL = FALSE) AND (I < LEN + 1) DO
  46. BEGIN
  47.  
  48.     CASE STR[I] OF
  49.  
  50.      '-' : SIGN:=-1.0; 
  51.      '.' : DECIMAL:=TRUE;
  52.  
  53.     '0','1','2','3','4','5','6','7','8','9':
  54.         VAL:=(VAL * 10) + (ORD(STR[I]) - 48); {48 = ord of zero}
  55.        END; {OF CASE}
  56.  
  57. I:=I+1;
  58.  
  59. END; {of while}
  60.  
  61. WHILE (DECIMAL = TRUE) AND (L > I-1 ) DO  {i-1 because of last while loop}
  62.     BEGIN    
  63.         IF STR[L] IN ['0'..'9'] THEN
  64.             DECVAL:=(DECVAL * 0.1) + ((ORD(STR[L]) - 48) * 0.1);
  65.         L:=L-1;
  66.     END;
  67.  
  68.  
  69. 1: { Exit immediately upon detection of a fatal error.}
  70.  
  71. STRTOREAL:=SIGN * (DECVAL + VAL);
  72. END; {OF PROCEDURE}
  73.  
  74.  
  75. BEGIN
  76. END.