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