/* + BLDMBRLST: Generate a list of file members using a basic DSPFD 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 ( + &pqFile + &pFileAtr + &pLstF + &pLstOpt + ) dcl &pqFile *char 20 dcl &pFileAtr *char 4 dcl &pLstF *char 20 dcl &pLstOpt *char 20 dcl &File *char 10 dcl &FLib *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 file/library name into its parts... */ /* */ chgvar &File %sst( &pqFile 1 10 ) chgvar &FLib %sst( &pqFile 11 10 ) /* */ /* Break the qualified list file/library name into its parts... */ /* */ chgvar &LstF %sst( &pLstF 1 10 ) chgvar &LstFLib %sst( &pLstF 11 10 ) /* If a default list-file is requested, get the default name... */ if ( &LstF *eq '*DFT' ) do Qsys/rtvdtaara dtaara( VLDFTMBR ) 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 *FILE, 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 '*FILE' ) do if ( &File *eq '*ALL' ) + chgvar &LstNam '#ALL' else do Qsys/rtvmsg CPF9897 msgf( QSYS/QCPFMSG ) + msgdta( &File ) + msglen( &wrkLen) if ( %sst( &File &wrkLen 1 ) *eq '*' ) do chgvar &wrkLen ( &wrkLen - 1 ) chgvar &LstNam %sst( &File 1 &wrkLen ) enddo else + chgvar &LstNam &File enddo enddo /* */ /* Once the parms are settled, use them for DSPFD to list the file members */ /* to a member of an outfile... */ /* */ Qsys/dspfd file( &FLib/&File ) type( *MBR ) + output( *OUTFILE ) + fileatr( &pFileAtr ) + 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