Calls to CEEFMON in PL/I

*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;