Consultor Eletrônico



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.