CL’s Null Value
April 19, 2006 Hey, Ted
|
I am writing a CL program in which I pass variables to the Change User Profile (CHGUSRPRF) command. The command fails when I try to use a qualified name containing a single value like *SAME or *NONE. If I use one variable for the qualified parameter, *SAME and *NONE work, but the compiler won’t allow me to put both library name and program name into one variable. How can I pass qualified names that allow single values as variables to commands? –Brian Use two variables for the qualified name in your CHGUSRPRF command. When you need to use a single value, put CL’s null value, *N, in the part of the qualified name that doesn’t need a value. Here’s an example. Suppose you want to run the Display Job (DSPJOB) command in a CL program. There are two ways to tell which job you want to display: You can qualify the job by entering the job name, user, and job number, or you can use the single value * to indicate the current job. The following program accepts three parameters that indicate which job is to be displayed. If the first parameter, the job name, has the single value *, then the other two parts of the job identifier, name and number, do not need a value. For that reason, I place *N into the &USER and &JOBNBR variables. The same DSPJOB command works for both the single value and a qualified value.
pgm parm(&inJob &inUser &inJobNbr)
dcl &inJob *char 10
dcl &inUser *char 10
dcl &inJobNbr *char 6
dcl &Job *char 10
dcl &User *char 10
dcl &JobNbr *char 6
chgvar &Job &inJob
if (&inJob *eq '*') do
chgvar &User '*N'
chgvar &JobNbr '*N'
enddo
else do
chgvar &User &inUser
chgvar &JobNbr &inJobNbr
enddo
dspjob job(&JobNbr/&User/&Job)
Let’s complicate the example slightly by adding another qualified parameter-sort sequence. The Sort Sequence (SRTSEQ) parameter of the Change Job (CHGJOB) command can accept six single values or a qualified sort sequence table name. The following program changes the sort sequence for a job.
pgm parm(&inJob &inUser &inJobNbr +
&inSortSeq &inSortLib)
dcl &inJob *char 10
dcl &inUser *char 10
dcl &inJobNbr *char 6
dcl &inSortSeq *char 10
dcl &inSortLib *char 10
dcl &Job *char 10
dcl &User *char 10
dcl &JobNbr *char 6
dcl &SortSeq *char 10
dcl &SortLib *char 10
chgvar &Job &inJob
if (&inJob *eq '*') do
chgvar &User '*N'
chgvar &JobNbr '*N'
enddo
else do
chgvar &User &inUser
chgvar &JobNbr &inJobNbr
enddo
chgvar &SortSeq &inSortSeq
if (&inSortSeq *eq '*SAME' +
*or &inSortSeq *eq '*USRPRF' +
*or &inSortSeq *eq '*SYSVAL' +
*or &inSortSeq *eq '*HEX' +
*or &inSortSeq *eq '*LANGIDUNQ' +
*or &inSortSeq *eq '*LANGIDSHR') do
chgvar &SortLib '*N'
enddo
else do
chgvar &SortLib &inSortLib
enddo
chgjob job(&JobNbr/&User/&Job) srtseq(&SortLib/&SortSeq)
If the first parameter is a single asterisk, the user and job number portions of the job parameter are loaded with *N. If the sort sequence, in the fifth parameter, is any of the single values, the sort table library name is given the value *N. The following text, cut from the job log, shows how the system interprets the CHGJOB command when single values are used. CHGJOB JOB(*) SRTSEQ(*LANGIDSHR) –Ted |

