*PROCESS MACRO;
/*Module/File Name: IBMFMON */
/****************************************************/
/* Example for callable service CEEFMON */
/* Function: Convert a numeric value to a monetary */
/* string using specified format passed as parm */
/****************************************************/
PLIFMON: PROC OPTIONS(MAIN);
%INCLUDE CEEIBMAW; /* ENTRY defs, macro defs */
%INCLUDE CEEIBMCT; /* FBCHECK macro, FB constants */
%INCLUDE CEEIBMLC; /* Locale category constants */
/* CEESETL service call arguments */
DCL LOCALE_NAME CHAR(14) VARYING;
/* CEEFMON service call arguments */
DCL MONETARY REAL FLOAT DEC(16); /* input value */
DCL MAXSIZE_FMON BIN FIXED(31); /* output size */
DCL FORMAT_FMON CHAR(256) VARYING; /* format spec */
DCL RESULT_FMON BIN FIXED(31); /* result status */
DCL OUTPUT_FMON CHAR(60) VARYING; /* output string */
DCL 01 FC, /* Feedback token */
03 MsgSev REAL FIXED BINARY(15,0),
03 MsgNo REAL FIXED BINARY(15,0),
03 Flags,
05 Case BIT(2),
05 Severity BIT(3),
05 Control BIT(3),
03 FacID CHAR(3), /* Facility ID */
03 ISI /* Instance-Specific Information */
REAL FIXED BINARY(31,0);
/* init locale name to United States */
LOCALE_NAME = 'En_US.IBM-1047';
/* use LC_ALL category constant from CEEIBMLC */
CALL CEESETL (LOCALE_NAME, LC_ALL, FC);
/* FBCHECK macro used (defined in CEEIBMCT) */
IF FBCHECK (FC, CEE2KE) THEN
DO; /* invalid locale name */
DISPLAY ('Locale LC_ALL Call '||FC.MsgNo);
STOP;
END;
MONETARY = 12345.62; /* monetary numeric value */
MAXSIZE_FMON = 60; /* max char length returned */
FORMAT_FMON = '%i'; /* international currency */
CALL CEEFMON ( *, /* optional argument */
MONETARY , /* input, 8 byte floating point */
MAXSIZE_FMON, /* maximum size of output string*/
FORMAT_FMON, /* conversion request */
OUTPUT_FMON, /* string returned by CEEFMON */
RESULT_FMON, /* no. of chars in OUTPUT_FMON */
FC ); /* feedback code structure */
IF RESULT_FMON = -1 THEN
DO;
/* FBCHECK macro used (defined in CEEIBMCT) */
IF FBCHECK( FC, CEE3VM ) THEN
DISPLAY ( 'Invalid input '||MONETARY );
ELSE
DISPLAY ('CEEFMON not completed '||FC.MsgNo );
STOP;
END;
ELSE
DO;
PUT SKIP LIST(
'International Format '||OUTPUT_FMON );
END;
END PLIFMON;