‚*--------------------------------------------------------------------* ‚* Created on: May 19th, 2009. * ‚* Created by: Robert Hicks * ‚* Reason : List spooled files using the QUSLSPL API. * ‚*--------------------------------------------------------------------* ‚*--------------------------------------------------------------------* ‚* COPYRIGHT (C) 2009 ROBERT HICKS. ALL RIGHTS RESERVED. * ‚* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS * ‚* AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * ‚* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * ‚* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * ‚* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS * ‚* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * ‚* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * ‚* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * ‚* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * ‚* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * ‚* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * ‚* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * ‚* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * ‚* SUCH DAMAGE. * ‚*--------------------------------------------------------------------* ‚*--------------------------------------------------------------------* ‚* MODIFICATIONS: * ‚* * ‚* Date Changed by Spec. # Description of changes * ‚* ---------- ---------- ---------- -------------------------------- * ‚*--------------------------------------------------------------------* ‚**------------------------------------------------------------------** ‚* Define the header specifications. * ‚**------------------------------------------------------------------** ‚** ‚* Define the header specifications. HDatFmt(*USA) TimFmt(*HMS) Option(*NoDebugIO) HDftActGrp(*No) ActGrp(*Caller) ‚** ‚* Get job descriptions. DQUSLJOB PR ExtPgm('QUSLJOB') D $USQual 20 Const D $Format 8 Const D $JobQual 26 Const D $Status 10 Const D $Error 32767 Options(*NoPass : *VarSize) D $JobType 1 Options(*NoPass) D #NbrFld 10I 0 Options(*NoPass) D #Keys 10I 0 Dim(256) Options(*NoPass) ‚** ‚* Define call definition to create a user space API. DQUSCRTUS PR ExtPgm('QUSCRTUS') D $USQual 20 Const D $USAttr 10 Const D #USSiz 10I 0 Const D $USIntVal 32767 Const Options(*Varsize) D $$USAut 10 Const D $USTst 50 Const D $RplUS 10 Const D $Error 32676 Options(*Varsize) ‚** ‚* Delete user space. DQUSDLTUS PR ExtPgm('QUSDLTUS') D $USQual 20 Const D $CrtErr 32767 Options(*Varsize) ‚** ‚* Retrieve user space address. DQUSPTRUS PR ExtPgm('QUSPTRUS') D $USQual 20 Const D #USAdr * D $Error 32767 Options(*NoPass : *VarSize) ‚** ‚* Create user space. DCRTWRKSPC PR N D $UserSpace 20 Value D #Pointer * Options(*Omit) D $Error LikeDS($GenErr_t) Options(*Omit) D #InitSize 10I 0 Options(*NoPass) Value ‚** ‚* Delete user space. DDLTWRKSPC PR N D $UserSpace 20 Value D #Pointer * D $Error LikeDS($GenErr_t) Options(*Omit) ‚** ‚* Job list template. D$JobL0xx_t DS Based(#JobL0xx_t) Qualified D $JobName 10 D $UserName 10 D $JobNbr 6 D $IntJobID 16 D $Status 10 D $Type 1 D $SubType 1 D 2 D $JobInfSts 1 D 3 D #NbrFldRtn 10I 0 D $JobL0100 56 Overlay($JobL0xx_t: 1) D $JobL0200 64 Overlay($JobL0xx_t: 1) ‚** ‚* Job qualifier structure. D$JobQual_t DS Based(#JobQual_t) Qualified D $JobName 10 D $UserName 10 D $JobNbr 6 ‚** ‚* Error structure work variables. D$GenErr_t DS Based(#GenErr_t) Qualified D #BytPrv 10I 0 D #BytAvl 10I 0 D $ErrID 7 D 1 D $ErrDsc 32756 ‚** ‚* User space entry template. D$USQual_t DS Qualified Based(#USQual_t) D #USPtr * D $USQual LikeDS($ObjQual_t) ‚** ‚* Generic user space header. D$USFmt_t DS Based(#USFmt_t) Qualified D $GenHdr 64 D #GenHdrSiz 10I 0 D $SrlLvl 4 D $InpFmt 8 D $APINam 10 D $CctDt 13 D $InfSts 1 D #USSiz 10I 0 D #IpSOS 10I 0 D #IpsSiz 10I 0 D #HdrOS 10I 0 D #HdrSiz 10I 0 D #LstOS 10I 0 D #LstSiz 10I 0 D #NbrEnt 10I 0 D #EntSiz 10I 0 ‚** ‚* Object qualifier structure. D$ObjQual_t DS Based(#ObjQual_t) Qualified D $ObjName 10 D $ObjLibr 10 ‚** ‚* Constants. DC_$All C '*ALL' DC_$Change C '*CHANGE' DC_$Yes C '*YES' DC_$Int C '*INT' ‚** ‚* General work fields. D#Idx1 S 10I 0 Inz(0) D$ErrOcr S N Inz('0') D$JobUSQual DS LikeDS($USQual_t) D$Error DS LikeDS($GenErr_t) D$JobQual DS LikeDS($ObjQual_t) D$USJobLGHdr DS LikeDS($USFmt_t) D Based($JobUSQual.#USPtr) D#USJobLEntPtr S * Inz(*Null) D$USJobLEnt DS LikeDS($JobL0xx_t) D Based(#USJobLEntPtr) ‚*--------------------------------------------------------------------* ‚* Main line. * ‚*--------------------------------------------------------------------* /Free // Start the program. ExSr @STRPRC; *INLR = '1'; /End-Free ‚*--------------------------------------------------------------------* ‚* ROUTINE: @STRPRC - Start the main process. * ‚*--------------------------------------------------------------------* /Free BegSr @STRPRC; // Build user space. If NOT CRTWRKSPC($JobUSQual.$USQual: $JobUSQual.#USPtr: $Error); $ErrOcr = '1'; EndIf; // Get a list of spooled files. QUSLJOB($JobUSQual.$USQual: 'JOBL0100': $JobQual: C_$All: $Error); If $Error.#BytAvl > 0; $USJobLGHdr.#NbrEnt = 0; $ErrOcr = '1'; EndIf; // Read the entire list of spooled files. #USJobLEntPtr = $JobUSQual.#USPtr + $USJobLGHdr.#LstOS; For #Idx1 = 1 TO $USJobLGHdr.#NbrEnt; // Do stuff HERE. #USJobLEntPtr = #USJobLEntPtr + $USJobLGHdr.#EntSiz; EndFor; // Delete the work space. DLTWRKSPC($JobUSQual.$USQual: $JobUSQual.#USPtr: $Error); EndSr; /End-Free ‚*--------------------------------------------------------------------* ‚* ROUTINE: *INZSR - Initialization routine. * ‚*--------------------------------------------------------------------* /Free Begsr *INZSR; // Set default values. $Error.#BytPrv = %Size($Error); $Error.#BytAvl = 0; $JobUSQual.$USQual = 'SPOOLUS QTEMP'; $JobQual = '*'; EndSr; /End-Free ‚*--------------------------------------------------------------------* ‚* PROCEDURE: CRTWRKSPC - Create our work space. * ‚*--------------------------------------------------------------------* PCRTWRKSPC B D PI N D $UserSpace 20 Value D #Pointer * Options(*Omit) D $Error LikeDS($GenErr_t) Options(*Omit) D #InitSize 10I 0 Options(*NoPass) Value ‚** ‚* Work fields. D$ErrOcr S N Inz('0') D$Err DS LikeDS($GenErr_t) D#Size S 10I 0 Inz(512) /Free // Set default values. If %Parms > 3 AND #InitSize > 0; #Size = #InitSize; EndIf; $Err.#BytPrv = %Size($Err); // Delete the user space. QUSDLTUS($UserSpace: $Err); // Create the user space. QUSCRTUS($UserSpace: 'USRSPC': #Size: X'00': C_$Change: 'Work Space': C_$Yes: $Err); $ErrOcr = $Err.#BytAvl > 0; // Retrieve user space pointer. If %Addr(#Pointer) <> *Null AND NOT $ErrOcr; QUSPTRUS($UserSpace: #Pointer: $Err); // Delete user space if we can't get the address. If $Err.#BytAvl > 0; QUSDLTUS($UserSpace: $Err); $ErrOcr = '1'; EndIf; EndIf; // Return if error occured. If %Addr($Error) <> *Null; $Error = $Err; EndIf; Return NOT $ErrOcr; /End-Free PCRTWRKSPC E ‚*--------------------------------------------------------------------* ‚* PROCEDURE: DLTWRKSPC - Create a user space. * ‚*--------------------------------------------------------------------* PDLTWRKSPC B D PI N D $UserSpace 20 Value D #Pointer * D $Error LikeDS($GenErr_t) Options(*Omit) ‚** ‚* Work fields. D$ErrOcr S N Inz('0') D$Err DS LikeDS($GenErr_t) /Free // Set default values. $Err.#BytPrv = %Size($Err); // Delete the user space. QUSDLTUS($UserSpace: $Err); $ErrOcr = $Err.#BytAvl > 0; // Reset the pointer. If NOT $ErrOcr; #Pointer = *Null; EndIf; // Return if error occured. If %Addr($Error) <> *Null; $Error = $Err; EndIf; Return NOT $ErrOcr; /End-Free PDLTWRKSPC E