/* + BLDMBRLST: Generate a list of file members using a basic DSPOBJD to an + outfile member. Each 'list' is a named member of the outfile. + + Once any list is generated, chosen rows can be deleted to remove + unneeded details. Multiple lists can be appended to a single + member or each list can be kept separate. Lists may be built in + QTEMP, in a separate user library or all in the same list file. + */ pgm ( + &pqObj + &pObjTyp + &pqLstF + &pLstOpt + ) dcl &pqObj *char 20 dcl &pObjTyp *char 10 dcl &pqLstF *char 20 dcl &pLstOpt *char 20 dcl &Obj *char 10 dcl &ObjLib *char 10 dcl &LstF *char 10 dcl &LstFLib *char 10 dcl &LstNam *char 10 dcl &LstOpt *char 8 dcl &wrkLen *dec ( 5 0 ) dcl &CStkCtr *char 4 dcl &CStkIDLen *char 4 dcl &RSNM0100 *char 29 /* */ /* Global message monitor... */ /* */ monmsg ( CPF0000 CPF9999 ) exec( goto Std_Err ) /* */ /* Break the qualified object/library name into its parts... */ /* */ chgvar &Obj %sst( &pqObj 1 10 ) chgvar &ObjLib %sst( &pqObj 11 10 ) /* We won't use a library if object is *IBM or *ALLOBJ... */ if ( &Obj *eq '*IBM' *or &Obj *eq '*ALLOBJ' ) do chgvar &ObjLib '*N' enddo /* */ /* Break the qualified list file/library name into its parts... */ /* */ chgvar &LstF %sst( &pqLstF 1 10 ) chgvar &LstFLib %sst( &pqLstF 11 10 ) /* If a default list-file is requested, get the default name... */ if ( &LstF *eq '*DFT' ) do Qsys/rtvdtaara dtaara( VLDFTOBJ ) rtnvar( &LstF ) enddo /* */ /* Break the list options into its parts -- list name and ADD/REPLACE... */ /* */ chgvar &LstNam %sst( &pLstOpt 3 10 ) chgvar &LstOpt %sst( &pLstOpt 13 8 ) /* */ /* If list-name is *OBJ, then use the name of whatever is being listed... */ /* If name is *ALL, use #ALL as the list name. If the name is generic, use */ /* whatever is left after the trailing asterisk is removed... */ /* */ if ( &LstNam *eq '*OBJ' ) do if ( &Obj *eq '*ALL' ) + chgvar &LstNam '#ALL' else do Qsys/rtvmsg CPF9897 msgf( QSYS/QCPFMSG ) + msgdta( &Obj ) + msglen( &wrkLen) if ( %sst( &Obj &wrkLen 1 ) *eq '*' ) do chgvar &wrkLen ( &wrkLen - 1 ) chgvar &LstNam %sst( &Obj 1 &wrkLen ) enddo else + chgvar &LstNam &Obj enddo enddo /* */ /* Once the parms are settled, use them for DSPOBJD to list the objects to a */ /* member of an outfile... */ /* */ Qsys/dspobjd obj( &ObjLib/&Obj ) + objtype( &pObjTyp ) + output( *OUTFILE ) + outfile( &LstFLib/&LstF ) + outmbr( &LstNam &LstOpt ) return Std_Err: /* Move any *DIAG messages up the stack... */ Qsys/call pgm( QSYS/QMHMOVPM ) parm( + ' ' + '*DIAG ' + x'00000001' + '* ' + x'00000001' + x'00000000' + ) Qsys/monmsg ( CPF0000 MCH0000 ) /* Resend any *ESCAPE messages up the stack... */ chgvar %bin( &CStkCtr ) 2 Qsys/monmsg ( CPF0000 MCH0000 ) chgvar %bin( &CStkIDLen ) 1 Qsys/monmsg ( CPF0000 MCH0000 ) chgvar &RSNM0100 ( &CStkCtr *CAT + '*NONE *NONE ' *CAT + &CStkIDLen *CAT + '*' + ) Qsys/monmsg ( CPF0000 MCH0000 ) Qsys/call pgm( QSYS/QMHRSNEM ) parm( + ' ' + x'00000000' + &RSNM0100 + x'0000001D' + 'RSNM0100 ' + '* ' + x'00000000' + ) Qsys/monmsg ( CPF0000 MCH0000 ) return endpgm