home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / PASCAL / PASWIZ14.ZIP / CALC.PAS < prev    next >
Pascal/Delphi Source File  |  1993-02-28  |  3KB  |  76 lines

  1. { This is a demonstration of the expression evaluator
  2.   provided by the Pascal Wizard's Library }
  3.  
  4.  
  5.  
  6. {$M $2000,0,0 }          { stack size, min heap, max heap (bytes) }
  7. {$D-}                    { debug info off }
  8. {$A-}                    { word alignment off (so use byte alignment) }
  9. {$I-}                    { don't crash on errors }
  10.  
  11.  
  12.  
  13. USES
  14.    ExtMath;
  15.  
  16. VAR
  17.    Expr, StrResult: String;
  18.    Result: Real;
  19.    tmp, ErrCode: Integer;
  20.  
  21. BEGIN
  22.    IF (ParamCount = 0) THEN BEGIN
  23.       WriteLn('CALC  Demo for the PasWiz Library expression evaluator');
  24.       WriteLn;
  25.       WriteLn('Syntax:');
  26.       WriteLn('   CALC expression');
  27.       WriteLn;
  28.       WriteLn('Expressions may use the following operators:');
  29.       WriteLn('   +      add');
  30.       WriteLn('   /      divide');
  31.       WriteLn('   *      multiply');
  32.       WriteLn('   -      subtract');
  33.       WriteLn('   ^      raise to a power (** also works)');
  34.       WriteLn;
  35.       WriteLn('A number of functions are also provided:');
  36.       WriteLn('   ABS    absolute value         INT    integer');
  37.       WriteLn('   ACOS   inverse cosine         LOG    natural log');
  38.       WriteLn('   ASIN   inverse sine           PI     3.141593');
  39.       WriteLn('   ATAN   inverse tangent        SIN    sine');
  40.       WriteLn('   COS    cosine                 SQRT   square root');
  41.       WriteLn('   FRAC   fraction               TAN    tangent');
  42.       WriteLn;
  43.       WriteLn('Trig functions expect angles in radians.');
  44.    END
  45.    ELSE BEGIN
  46.       Expr := '';
  47.       FOR tmp := 1 TO ParamCount DO
  48.          Expr := Expr + ParamStr(tmp);
  49.       Evaluate(Expr, Result, ErrCode);
  50.       IF (ErrCode = 0) THEN BEGIN
  51.          Str(Result:10:6, StrResult);
  52.          WHILE (StrResult[Length(StrResult)] = '0') DO
  53.             Delete(StrResult, Length(StrResult), 1);
  54.          IF (Length(StrResult) = 0) THEN
  55.             StrResult := '0';
  56.          IF (StrResult[Length(StrResult)] = '.') THEN
  57.             Delete(StrResult, Length(StrResult), 1);
  58.          IF (StrResult[1] = ' ') THEN BEGIN
  59.             Delete(StrResult, 1, 1);
  60.             IF (StrResult[1] = ' ') THEN
  61.                Delete(StrResult, 1, 1);
  62.          END;
  63.          WriteLn(Expr, ' = ', StrResult);
  64.       END
  65.       ELSE
  66.          CASE ErrCode OF
  67.             1: WriteLn('Argument expected');
  68.             2: WriteLn('Missing number');
  69.             3: WriteLn('Unknown function');
  70.             4: WriteLn('Unbalanced parentheses');
  71.             9: WriteLn('Division by zero');
  72.             ELSE WriteLn('Error');
  73.          END;
  74.    END;
  75. END.
  76.