be checked as being valid DBCS strings. DBCS characters must be enclosed within
shift-out (X'0E') and shift-in (X'0F') delimiters. In the following example, the shift-out
(SO) and shift-in (SI) delimiters are represented by the less than symbol ( < ) and
the greater than symbol ( > ) respectively.
1
For example, <.S.Y.M.D> and
<.D.B.C.S.R.T.N> represent DBCS symbols in the following examples.
Example 1
The following is an example of an exec using a DBCS variable name and a DBCS
subroutine label.
/* REXX */
OPTIONS 'ETMODE' /* ETMODE to enable DBCS variable names */
j=1
<.S.Y.M.D> = 10 /* Variable with DBCS characters between
shift-out (<) and shift-in (>) */
CALL <.D.B.C.S.R.T.N> /* Invoke subroutine with DBCS name */
.
.
.
<.D.B.C.S.R.T.N>: /* Subroutine with DBCS name */
DOi=1TO10
IF x.i = <.S.Y.D.M> THEN /* Does x.i match the DBCS variable's
value? */
SAY 'Value of the DBCS variable is : ' <.S.Y.D.M>
END
EXIT 0
Example 2
The following example shows some other uses of DBCS variable names with the
EXECIO stem option, as DBCS parameters passed to a program invoked through
LINKMVS, and with built-in function, LENGTH.
/* REXX */
OPTIONS 'ETMODE' /* ETMODE to enable DBCS variable names */
"ALLOC FI(INDD) DA('DEPTA29.DATA') SHR REU"
/*******************************************************************/
/* Use EXECIO to read lines into DBCS stem variables */
/*******************************************************************/
"EXECIO * DISKR indd (FINIS STEM <.d.b.c.s__.s.t.e.m>."
IF rc = 0 THEN /* if good return code from execio */
/*****************************************************************/
/* Say each DBCS stem variable set by EXECIO */
/*****************************************************************/
DOi=1TO<.d.b.c.s__.s.t.e.m>.0
SAY "Line " i "==> " <.d.b.c.s__.s.t.e.m>.i
END
line1_<.v.a.l.u.e> = <.d.b.c.s__.s.t.e.m>.1 /* line 1 value */
line_len = length(line1_<.v.a.l.u.e>) /* Length of line */
/*******************************************************************/
/* Invoke LINKMVS command "proca29" to process a line. */
/* Two variable names are used to pass 2 parameters, one of */
1. The SO and SI characters are non-printable.
Execs Using Double-Byte Character Set Names
Chapter 2. Writing and Running a REXX Exec 15