CMD: UTKDUPSPLF: CMD PROMPT('DUPLICATE AND CHANGE SPLF') PARM KWD(SPLFILE) TYPE(*NAME) LEN(10) DFT(QPRINT) + PROMPT('SPOOLED FILE NAME') PARM KWD(JOB) TYPE(JOBNAME) DFT(*) SNGVAL((*)) + PROMPT('JOB NAME') PARM KWD(SPLNBR) TYPE(*INT4) DFT(*LAST) RANGE(1 + 9999) SPCVAL((*ONLY 0) (*LAST -1)) MIN(0) + PROMPT('SPOOLED FILE NUMBER') PARM KWD(NEWUSER) TYPE(*NAME) LEN(10) DFT(*SAME) + SPCVAL((*SAME)) PROMPT('NEW USER') PARM KWD(OUTQ) TYPE(OUTQ) DFT(*SAME) + SNGVAL((*SAME)) MIN(0) PROMPT('OUTPUT QUEUE') PARM KWD(HOLD) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*SAME) VALUES(*YES *NO) + SPCVAL((*SAME)) PROMPT('HOLD FILE BEFORE + WRITTEN') PARM KWD(SAVE) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*SAME) VALUES(*YES *NO) + SPCVAL((*SAME)) PROMPT('SAVE FILE AFTER + WRITTEN') OUTQ: QUAL TYPE(*NAME) LEN(10) MIN(1) QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*CURLIB) (*LIBL)) PROMPT('LIBRARY') JOBNAME: QUAL TYPE(*NAME) LEN(10) MIN(1) QUAL TYPE(*NAME) LEN(10) DFT(' ') SPCVAL((' ')) + CHOICE('NAME') PROMPT('USER') QUAL TYPE(*CHAR) LEN(6) DFT(' ') RANGE(000000 + 999999) SPCVAL((' ')) FULL(*YES) + CHOICE('000000-999999') PROMPT('NUMBER') RPGLE Command processing program: hoption(*nodebugio:*srcstmt) dftactgrp(*no) actgrp('DUPSPLF') dDupSplf pr d SpoolName 10a d QualJob 26a d SplNbr 10i 0 d NewUser 10a d OutQ 20a d Hold 10a d Save 10a dDupSplf pi d SpoolName 10a d QualJob 26a d SplNbr 10i 0 d NewUser 10a d OutQ 20a d Hold 10a d Save 10a * Delete User Space API Procedure DDltUsrSpc pr ExtPgm('QUSDLTUS') DCUSQualUSName 20a CONST DErrorCode 32766A options(*varsize) * Create User Space API Procedure DCrtUsrSpc pr ExtPgm('QUSCRTUS') DCUSQualUSName 20a CONST DCUSExtAttribut 10a CONST DCUSInitSize 10I 0 CONST DCUSInitValue 1a CONST DCUSPublicAuth 10a CONST DCUSDescription 50a CONST DCUSReplace 10a CONST DErrorCode 32766A options(*varsize) * Change User Space API Procedure D ChgUsrSpc PR ExtPgm('QUSCUSAT') D RtnLib 10A D CUSQualUSName 20A CONST D CUSAttributes 32766A Options(*Varsize) D ErrorCode 32766A Options(*VarSize) * Get User Space Pointer API Procedure D UserSpacePntr PR ExtPgm('QUSPTRUS') D CUSQualUSName 20A CONST D CUSPointer * * Update User Space API Procedure D UpdUsrSpc PR ExtPgm('QUSCHGUS') D CUSQualUSName 20A Const d Start 10i 0 Const d DataLength 10i 0 Const d Data 32767a Options(*Varsize) Const d ForceASP 1a Const D ErrorCode 32766A Options(*VarSize) * User Space Header DS D USHeader ds Based(CUSPointer) Qualified d UserArea 64a d HdrSize 10i 0 d StrLvl 4a d Format 8a d APIUsed 10a d CrtDate 13a d InfoSts 1a d SizeOfUS 10i 0 d OffsetToInp 10i 0 d SizeOfInp 10i 0 d OffsetToHdr 10i 0 d SizeOfHdr 10i 0 d OffsetToDtl 10i 0 d SizeOfDtl 10i 0 d NumberOfDtl 10i 0 d EntrySize 10i 0 d CCSID 10i 0 d Country 2a d LangID 3a d SubsetInd 1a d 42a * User Space Attributes DS D AttributeDS DS Qualified D NbrAttrToChg 10i 0 Inz(1) D Key 10i 0 Inz(3) D DataLen 10i 0 Inz(1) D AutoExtend 1A Inz('1') D RtnLib s 10a dErrorDS ds Qualified d BytesProvided 10i 0 Inz(%Size(ErrorDS)) d BytesAvailable 10i 0 d MsgID 7a d 1a d Text 500a Varying dSplFUSPtr s * dSplFUsrSpcHdr ds Qualified Based(SplFUSPtr) d UserArea 64a d HeaderSize 10i 0 d StructureLvl 4a d SplFLvl 6a d Format 8a // I = Incomplete // P = Partial // C = Complete d CompleteInfo 1a d 1a d UsedSizeInUS 10i 0 d OffsetToBuffer 10i 0 d RequestedCount 10i 0 d ReturnCount 10i 0 d DataSize 10i 0 d PageCount 10i 0 d FirstPage 10i 0 d OffsetToFirstPage... d 10i 0 d 8a dBufferInfoPtr s * dBufferInfo ds Qualified Based(BufferInfoPtr) d Length 10i 0 d OrdinalPosition... d 10i 0 d OffsetToGeneralInfo... d 10i 0 d SizeOfGeneralInfo... d 10i 0 d OffsetToPageData... d 10i 0 d SizeOfPageData... d 10i 0 d PageEntryCount 10i 0 d PageEntrySize 10i 0 d OffsetToPrintData... d 10i 0 d SizeOfPrintData... d 10i 0 dGeneralInfoPtr s * dGeneralInfo ds Qualified Based(GeneralInfoPtr) d NonBlankLines 10i 0 d NonBlanksIn1stPage... d 10i 0 d ErrorInfoBufferNumber... d 10i 0 d OffsetToErrorRecovery... d 10i 0 d SizeOfPrintData... d 10i 0 d State 10a d LastPageContinues... d 1a d AFPDS 1a d LACArrayInBuffer... d 1a d LAC 1a d ErrorRecoveryHasLAC... d 1a d ErrorRecovery 1a d ZeroPages 1a d LoadFont 1a d IPDSData 1a d 5a dPageDataPtr s * dPageData ds Qualified Based(PageDataPtr) d TextStart 10i 0 d DataStart 10i 0 d Offset 10i 0 dPrintDataPtr s * dPrintData ds Qualified Based(PrintDataPtr) d Data 32766a dRtvSplFA pr ExtPgm('QUSRSPLA') d ReturnData 32766a Options(*VarSize) d ReturnLen 10i 0 Const d Format 8a Const d QualJob 26a Const d InternalJobID 16a Const d InternalSplFID 16a Const d SplFName 10a Const d SplNum 10i 0 Const d ErrorCode 584a Options(*VarSize) // Optional Parameters d System 8a Const Options(*NoPass) d SplCrtDate 7a Const Options(*NoPass) d SplCrtTime 6a Const Options(*NoPass) dOpenSplF pr ExtPgm('QSPOPNSP') d SplFHandle 10i 0 d QualJob 26a Const d InternalJobID 16a Const d InternalSplID 16a Const d SplF 10a Const d SplNum 10i 0 Const d BuffersToGet 10i 0 Const d ErrorCode 584a Options(*VarSize) // Optional Parameters d System 8a Options(*NoPass) d CreateDate 7a Options(*NoPass) d CreateTime 6a Options(*NoPass) dGetSplFData pr ExtPgm('QSPGETSP') d SplFHandle 10i 0 Const d UserSpace 20a Const d Format 8a Const d BufferToRead 10i 0 Const d EndOfFile 10a Const d ErrorCode 584a Options(*VarSize) // Attributes are from SPLA0200 in RtvSplFA dCrtSplF pr ExtPgm('QSPCRTSP') d Handle 10i 0 d Attributes 32766a Options(*VarSize) Const d ErrorCode 584a Options(*VarSize) dPutSplFData pr ExtPgm('QSPPUTSP') d Handle 10i 0 Const d UserSpace 20a Const d ErrorCode 584a Options(*VarSize) dCloseSplF pr ExtPgm('QSPCLOSP') d Handle 10i 0 Const d ErrorCode 584a Options(*VarSize) dDupSplFUS c Const('DUPSPLF QTEMP') dIntJobID s 16a dIntSplID s 16a dSpoolNumber s 10i 0 dNumberOfBuffers s 10i 0 Inz(-1) dHandle s 10i 0 dNewSplHandle s 10i 0 d i s 10i 0 /copy QSYSINC/QRPGLESRC,QUSRSPLA /free SpoolNumber = SplNbr; Monitor; DltUsrSpc( DupSplFUS : ErrorDS ); On-Error; EndMon; Monitor; CrtUsrSpc( DupSplFUS : 'USRSPC' : 1024 : x'00' : '*ALL' : DupSplFUS : '*NO' : ErrorDS ); ChgUsrSpc( RtnLib : DupSplFUS : AttributeDS : ErrorDS ); On-Error; ExSR Terminate; EndMon; RtvSplFA( QUSA0200 : %Size(QUSA0200) : 'SPLA0200' : QualJob : IntJobID : IntSplID : SpoolName : SpoolNumber : ErrorDS ); If ErrorDS.BytesAvailable <> 0; ExSR Terminate; EndIf; OpenSplF( Handle : QualJob : IntJobID : IntSplID : SpoolName : SpoolNumber : NumberOfBuffers : ErrorDS ); If ErrorDS.BytesAvailable <> 0; ExSR Terminate; EndIf; If NewUser <> '*SAME'; QUSUN13 = NewUser; EndIf; If OutQ <> '*SAME'; QUSON01 = %Subst(OutQ:1:10); QUSOL01 = %Subst(OutQ:11:10); EndIf; If Hold <> '*SAME'; QUSHFIL00 = Hold; EndIf; If Save <> '*SAME'; QUSSFIL04 = Save; EndIf; CrtSplF( NewSplHandle : QUSA0200 : ErrorDS ); If ErrorDS.BytesAvailable <> 0; ExSR Terminate; EndIf; For i = 1 To QUSNBRB; GetSplFData( Handle : DupSplFUS : 'SPFR0200' : i : '*WAIT' : ErrorDS ); If ErrorDS.BytesAvailable <> 0; ExSR Terminate; EndIf; UserSpacePntr( DupSplFUS : SplFUSPtr ); PutSplFData( NewSplHandle : DupSplFUS : ErrorDS ); EndFor; CloseSplF( NewSplHandle : ErrorDS ); ExSR Terminate; BegSR Terminate; *InLR = *On; Return; EndSR;