Kbase 20076: How to use trigonometric functions in ABL on UNIX systems
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  05/08/2009 |
|
Status: Verified
GOAL:
How to use trigonometric functions in ABL on UNIX systems
GOAL:
How to call UNIX libm Function: Tan (Tangent)
GOAL:
How to call UNIX libm Function: Sin (Sine)
GOAL:
How to call UNIX libm Function: Cos (Cosine)
GOAL:
How to Call UNIX libm Function: Asin (Arcsine)
GOAL:
How to Call UNIX libm Function: Acos (Arccosine)
GOAL:
How to Call UNIX libm Function: Atan (Arctangent)
GOAL:
How to Call UNIX libm Function: Sinh (Hyperbolic Sine)
GOAL:
How to Call UNIX libm Function: Cosh (Hyperbolic Cosine)
GOAL:
How to Call UNIX libm Function: Tanh (Hyperbolic Tangent)
FACT(s) (Environment):
Progress 9.1D
Progress 9.1E
OpenEdge 10.x
UNIX
FIX:
The following sample code shows how to call the various trigonometric functions from the UNIX libm shared library (typically named /usr/lib/libm.1 or /usr/lib/libm.so) from within an ABL procedure.
These function expect an input in radians. Conversion is required if the application handles angles using a different unit of measurement (degrees or grads).
The sample code:
/* Define DLL procedure hooks */
PROCEDURE sin EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
PROCEDURE cos EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
PROCEDURE tan EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
PROCEDURE asin EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
PROCEDURE acos EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
PROCEDURE atan EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
PROCEDURE sinh EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
PROCEDURE cosh EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
PROCEDURE tanh EXTERNAL "/usr/lib/libm.1" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.
/* Do the math */
DEFINE VARIABLE decResult AS DECIMAL NO-UNDO.
RUN sin (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Sine of 0.655 is " decResult VIEW-AS ALERT-BOX.
RUN cos (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Cosine of 0.655 is " decResult VIEW-AS ALERT-BOX.
RUN tan (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Tangent of 0.655 is " decResult VIEW-AS ALERT-BOX.
RUN asin (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Arcsine of 0.655 is " decResult VIEW-AS ALERT-BOX.
RUN acos (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Arccosine of 0.655 is " decResult VIEW-AS ALERT-BOX.
RUN atan (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Arctangent of 0.655 is " decResult VIEW-AS ALERT-BOX.
RUN sinh (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Sine of 0.655 is " decResult VIEW-AS ALERT-BOX.
RUN cosh (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Hyperbolic Cosine of 0.655 is " decResult VIEW-AS ALERT-BOX.
RUN tanh (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Hyperbolic Tangent of 0.655 is " decResult VIEW-AS ALERT-BOX.