You are on page 1of 4

/*

http://www.netshare400.com/cgi-bin/dspsamp?file=qclsrc&mbr=setlibl*/

/* ================================================================= */
/* */
/* brief documentation : */
/* */
/* this program retrieves the initial user library list of */
/* a job description and set the library list based on the */
/* information retrieved. */
/* */
/* the program expects the name of the job description and the */
/* library of the job description beeing passed to it. */
/* */
/* provided by thomas raddatz */
/* */
/* e-mail adresse: */
/* thomas.raddatz@online-club.de */
/* */
/* homepage: */
/* http://www.online-club.de/~thomas.raddatz/ */
/* ================================================================= */
pgm parm(&jobd &jobdlib)

/* *entry-parameter */
dcl var(&jobd ) type(*char) len( 10)
dcl var(&jobdlib ) type(*char) len( 10)

/* api - qwdrjobd - retrieve job description information */


dcl var(&jobd0100 ) type(*char) len(1024)
dcl var(&initlibofs) type(*dec ) len(5 0)
dcl var(&nbrinitlib) type(*dec ) len(5 0)
dcl var(&lenrcvvar ) type(*char) len( 4)
dcl var(&formatname) type(*char) len( 8)
dcl var(&qjobname ) type(*char) len( 20)
dcl var(&errorcode ) type(*char) len( 8)

/* work fields */
dcl var(&bin4$ ) type(*char) len( 4)
dcl var(&pos ) type(*dec ) len(5 0)
dcl var(&qpos ) type(*dec ) len(5 0)
dcl var(&length ) type(*dec ) len(5 0)
dcl var(&usrlibl ) type(*char) len(275)
dcl var(&qusrlibl ) type(*char) len(250)
dcl var(&lib ) type(*char) len( 10)

dcl var(&curlib ) type(*char) len( 10)


dcl var(&prdlib1 ) type(*char) len( 10)
dcl var(&prdlib2 ) type(*char) len( 10)

/* error handling */
dcl var(&error ) type(*lgl) +
value('0')
dcl var(&true ) type(*lgl) +
value('1')
dcl var(&false ) type(*lgl) +
value('0')
dcl var(&errmsgkey) type(*char) len(4)

dcl var(&errmsgtyp) type(*char) len(10) +


value('*diag')
dcl var(&errnbrtyp) type(*char) len(4) +
value(x'00000001')
dcl var(&errpgmmsgq) type(*char) len(10) +
value('*')
dcl var(&errstkctr) type(*char) len(4) +
value(x'00000001')
dcl var(&errcode ) type(*char) len(4) +
value(x'00000000')

/* global error handler */


monmsg msgid(cpf0000) exec(goto cmdlbl(error))

chgvar var(&error ) value(&false)

/* -------------------------------------------------------------- */
/* let's start */
/* -------------------------------------------------------------- */

/* retrieve the initial user library list */


chgvar var(&jobd0100 ) value(' ')
chgvar var(%bin(&lenrcvvar 1 4)) value(1024)
chgvar var(&formatname) value('jobd0100')
chgvar var(&qjobname ) value(&jobd *cat &jobdlib)
chgvar var(%bin(&errorcode 1 4)) value( 0)
chgvar var(%bin(&errorcode 5 4)) value( 0)

call pgm(qwdrjobd) parm(&jobd0100 +


&lenrcvvar +
&formatname +
&qjobname +
&errorcode )

chgvar var(&bin4$) value(%sst(&jobd0100 365 4))


chgvar var(&nbrinitlib) value(%bin(&bin4$))

chgvar var(&bin4$) value(%sst(&jobd0100 361 4))


chgvar var(&initlibofs) value(%bin(&bin4$))

chgvar var(&pos ) value(&initlibofs + 1)


chgvar var(&length ) value(&nbrinitlib * 11)
chgvar var(&usrlibl ) value(%sst(&jobd0100 &pos &length))

/* check for special values: *sysval, *none ... */


if cond(%sst(&usrlibl 1 10) *eq '*sysval') +
then(do)
/* ... *sysval */
rtvsysval sysval(qusrlibl) rtnvar(&qusrlibl)
chgvar var(&qpos ) value(1)
chgvar var(&pos ) value(1)
chgvar var(&nbrinitlib) value(0)
qloop:
if cond(&qpos *lt 250) then(do)
chgvar var(&lib) value(%sst(&qusrlibl &qpos 10))
if cond(&lib *ne ' ') then(do)
chgvar var(%sst(&usrlibl &pos 11)) value(&lib)
chgvar var(&qpos ) value(&qpos + 10)
chgvar var(&pos ) value(&pos + 11)
chgvar var(&nbrinitlib) value(&nbrinitlib + 1)
goto cmdlbl(qloop)
enddo
enddo
enddo

if cond(%sst(&usrlibl 1 10) *eq '*none') +


then(do)
/* ... *none */
chgvar var(&usrlibl ) value(' ')
chgvar var(&nbrinitlib) value(0)
enddo

/* set the user library list */


chgvar var(&curlib ) value('*same')
chgvar var(&prdlib1 ) value('*same')
chgvar var(&prdlib2 ) value('*same')
chgvar var(%bin(&bin4$) ) value(&nbrinitlib)
chgvar var(%bin(&errorcode 1 4)) value( 0)
chgvar var(%bin(&errorcode 5 4)) value( 0)

call pgm(qlichgll) parm(&curlib +


&prdlib1 +
&prdlib2 +
&usrlibl +
&bin4$ +
&errorcode )

/* -------------------------------------------------------------- */
/* end of program */
/* -------------------------------------------------------------- */

ende:

/* ---------------- */
/* in case of an */
/* error ... */
/* ---------------- */
if cond(&error) then(do)
/* ... resend latest *escape message again */
call pgm(qmhrsnem) parm(&errmsgkey &errcode)
monmsg msgid(cpf0000)
enddo

return

/* -------------------------------------------------------------- */
/* global error handler */
/* -------------------------------------------------------------- */

error:
if cond(&error) then(goto cmdlbl(ende))
else chgvar var(&error) value(&true)

/* move all *diag messages to the calling program */


call pgm(qmhmovpm) parm(&errmsgkey &errmsgtyp +
&errnbrtyp &errpgmmsgq &errstkctr &errcode)

goto cmdlbl(ende)

You might also like