Calls to CEEQRYL and CEESTXF in PL/I

*PROCESS MACRO;
 /*Module/File Name: IBMSTXF                         */
 /****************************************************/
 /* Example for callable service CEESTXF             */
 /* Function: Query current collate category and     */
 /*   build input string as function of locale name. */
 /*   Translate string as function of locale.        */
 /****************************************************/

 PLISTXF: PROC OPTIONS(MAIN);

 %INCLUDE CEEIBMAW; /* ENTRY defs, macro defs        */
 %INCLUDE CEEIBMCT; /* FBCHECK macro, FB constants   */
 %INCLUDE CEEIBMLC; /* Locale category constants     */
 /* CEESTXF service call arguments */
 DCL MBSTRING  CHAR(10) VARYING;   /* input string   */
 DCL MBNUMBER  BIN FIXED(31);      /* input length   */
 DCL TXFSTRING CHAR(256) VARYING;  /* output string  */
 DCL TXFLENGTH BIN FIXED(31);      /* output length  */

 /* CEEQRYL service call arguments */
 DCL LOCALE_NAME_COLLATE CHAR(256) VARYING;

 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);
   /* retrieve active locale for collate category */
   /* Use LC_COLLATE category const from CEEIBMLC */
   CALL CEEQRYL ( LC_COLLATE, LOCALE_NAME_COLLATE, FC);

   /* FBCHECK macro used (defined in CEEIBMCT) */
   IF FBCHECK( FC, CEE000 ) THEN
     DO; /* successful query, set string for CEESTXF */
       IF LOCALE_NAME_COLLATE = 'Sv_SE.IBM-1047' THEN
           MBSTRING = '7,123,456.';
       ELSE
           MBSTRING = '8765432';

       MBNUMBER = LENGTH(MBSTRING);
     END;
   ELSE
     DO;
       DISPLAY ( 'Locale LC_COLLATE  '||FC.MsgNo );
       STOP;
     END;

   TXFSTRING = ';
   CALL CEESTXF ( *, MBSTRING, MBNUMBER,
                     TXFSTRING, TXFLENGTH, FC );

   IF FBCHECK( FC, CEE000 ) THEN
     DO; /* successful call, use transformed length */
       IF TXFLENGTH >0 THEN
         DO;
           PUT SKIP LIST( 'Transformed string is '||
                   SUBSTR(TXFSTRING,1, TXFLENGTH) );
         END;
     END;
   ELSE
     DO;
       IF FBCHECK( FC, CEE3TF ) THEN
         DO;
           DISPLAY ( 'Zero length input string' );
         END;
     END;

 END PLISTXF;