********************************************************************************************** * DBG188R4: Retrieve spoolfile info by User Profile or #OUTQ * Copyright (C) 2000 Martin Rowe <martin@dbg400.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Note: Some of the API usage was derived from examples in the IBM API reference. I don't * think I've infringed any copyrights but if you know different let me know. ********************************************************************************************** H DATEDIT(*YMD) DEBUG(*YES) OPTION(*NODEBUGIO : *SRCSTMT) ********************************************************************************************** * APIs Used: QUSLSPL - List Spooled Files * QUSCRTUS - Create User Space * QUSPTRUS - Retrieve Pointer to User Space ********************************************************************************************** * FILES: ********************************************************************************************** FDBG1860W O E DISK USROPN ********************************************************************************************** * ARRAYS: ********************************************************************************************** D ARR S 1 BASED(Lstptr) DIM(32767) D KEYS S 9B 0 DIM(20) ********************************************************************************************** * DATA STRUCTURES: ********************************************************************************************** * Error Code parameter include * This code is the same as /COPY QSYSINC/QRPGLESRC,QUSEC - but not everyone has it installed. DQUSEC DS D QUSBPRV 1 4B 0 D QUSBAVL 5 8B 0 D QUSEI 9 15 D QUSERVED 16 16 * D DS D SpoolNbr# 9B 0 D SpoolNbrChr 4 OVERLAY(SpoolNbr#) * D DS D Totpages# 9B 0 D TotpagesChr 4 OVERLAY(Totpages#) * D DS D Curpage# 9B 0 D CurpageChr 4 OVERLAY(Curpage#) * D DS D Copiesleft# 9B 0 D CopiesleftChr 4 OVERLAY(Copiesleft#) * ***************************************************************** * * The following QUSGEN include from QSYSINC is copied into * this program so that it can be declared as BASED on SPCPTR * ***************************************************************** DQUSH0100 DS BASED(Spcptr) * Qus Generic Header 0100 D Qusua 64 * User Area D Qussgh 9B 0 * Size Generic Header D Qussrl 4 * Structure Release Level D Qusfn 8 * Format Name D Qusau 10 * API Used D Qusdtc 13 * Date Time Created D Qusis 1 * Information Status D Qussus 9B 0 * Size User Space D Qusoip 9B 0 * Offset Input Parameter D Qussip 9B 0 * Size Input Parameter D Qusohs 9B 0 * Offset Header Section D Qusshs 9B 0 * Size Header Section D Qusold 9B 0 * Offset List Data D Qussld 9B 0 * Size List Data D Qusnbrle 9B 0 * Number List Entries D Qussee 9B 0 * Size Each Entry D Qussidle 9B 0 * CCSID List Ent D Quscid 2 * Country ID D Quslid 3 * Language ID D Qussli 1 * Subset List Indicator D Quserved00 42 * Type definition for the SPLF0200 format. DQUSSPLKI DS 100 BASED(Lstptr2) * Qus LSPL Key Info D Quslfir02 9B 0 * Len Field Info Retd D Quskfffr00 9B 0 * Key Field for Field Retd D Qustod02 1 * Type of Data D Qusr300 3 * Reserv3 D Qusdl02 9B 0 * Data Length * Varying length DQUSF0200 DS BASED(Lstptr) * Qus SPLF0200 D Qusnbrfr00 9B 0 * Num Fields Retd D CLRPFM DS D 80 INZ('CLRPFM FILE(QTEMP/DBG1860W)') ********************************************************************************************** * WORK FIELDS: ********************************************************************************************** D CmdLength S 15 5 D CmdString S 256 D Ext_Attr S 10 D Format S 8 D FormType S 10 D Index S 3 0 D JobName S 26 D Key# S 9B 0 INZ(20) D Lstptr S * D Lstptr2 S * D OnePercent S 11 2 D Outqueue S 20 D P_Marker S 1 INZ(X'33') D P_Percent S 3 0 D P_Text S 20 D P#MbrOpt S 8 D P#OutQ S 20 D P#User S 10 D RcdsRead S 9 0 D Remainder S 9 0 D Spc_Aut S 10 D Spc_Domain S 10 D Spc_Init S 1 INZ(X'00') D Spc_Name S 20 INZ('USERSPLF QTEMP ') D Spc_Replac S 10 D Spc_Size S 9B 0 INZ(2000) D Spc_Text S 50 D Spcptr S * D SplDateChr S 7 D SplTimeChr S 6 D User S 10 D UserData S 10 D X S 9 0 ********************************************************************************************** * ENTRY PARAMETERS: ********************************************************************************************** C *ENTRY PLIST C PARM P#User C PARM P#OutQ C PARM P#MbrOpt ********************************************************************************************** * MAINLINE: ********************************************************************************************** C EXSR #INITS * Set Error Code structure to use exceptions C EVAL QUSBPRV = 0 * Load the Keys array - might as well get the whole lot. B001 C DO 20 Index C EVAL KEYS(Index) = 200 + Index E001 C ENDDO * Create a User Space for the List generated by QUSLSPL C CALL 'QUSCRTUS' C PARM Spc_Name C PARM 'quslspl ' Ext_Attr C PARM Spc_Size C PARM Spc_Init C PARM '*ALL' Spc_Aut C PARM 'WRKUSROUTQ' Spc_Text C PARM '*YES' Spc_Replac C PARM QUSEC C PARM '*USER' Spc_Domain * Call QUSLSPL to get all spooled files for input parms C CALL (E) 'QUSLSPL' C PARM Spc_Name C PARM 'SPLF0200' Format C PARM P#User User C PARM P#OutQ Outqueue C PARM '*ALL' FormType C PARM '*ALL' UserData C PARM QUSEC C PARM JobName C PARM KEYS C PARM Key# * B001 C IF NOT %ERROR * Get a resolved pointer to the User Space for performance C CALL 'QUSPTRUS' C PARM Spc_Name C PARM Spcptr C PARM QUSEC * If valid information was returned B002 C IF Qussrl = '0100' B003 C IF Qusis = 'C' C OR Qusis = 'P' * and list entries were found B004 C IF Qusnbrle > 0 * Account for low record numbers C EVAL OnePercent = Qusnbrle / 100 B005 C IF Qusnbrle < 10 C EVAL OnePercent = 0.1 C EVAL RcdsRead = 10 - Qusnbrle E005 C ENDIF * Set progress meter message B005 C IF P#User = '*ALL' C EVAL P_Text = 'Loading ' + %SUBST(P#OutQ : 1 : 10) X005 C ELSE C EVAL P_Text = 'Loading ' + P#User E005 C ENDIF * set LSTPTR to the first byte of the User Space C EVAL Lstptr = Spcptr * increment LSTPTR to the first List entry C EVAL Lstptr = %ADDR(ARR(Qusold + 1)) * and process all of the entries B005 C DO Qusnbrle * Keep track of how far through the user space we have got C EVAL RcdsRead = RcdsRead + 1 C RcdsRead DIV OnePercent P_Percent C MVR Remainder * If we've completed another one percent of the file, report it B006 C IF Remainder = 0 C CALL 'DBG202R4' C PARM P_Percent C PARM P_Text C PARM P_Marker E006 C ENDIF * set LSTPTR2 to the first variable length record for this entry C EVAL X = 5 C EVAL Lstptr2 = %ADDR(ARR(X)) B006 C DO Qusnbrfr00 * process the data based on key type B007 C SELECT S007 C WHEN Quskfffr00 = 201 C EVAL SPLNAME = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 202 C EVAL SPLJOBNAME = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 203 C EVAL SPLUSERPRF = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 204 C EVAL SPLJOBNBR = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 205 C EVAL SpoolNbrChr = %SUBST(QUSSPLKI:17:Qusdl02) C EVAL SPLNBR = SpoolNbr# S007 C WHEN Quskfffr00 = 206 C EVAL SPLOUTQ = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 207 C EVAL SPLOUTQLIB = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 208 C EVAL SPLDEVICE = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 209 C EVAL SPLUSRDTA = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 210 C EVAL SPLSTATUS = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 211 C EVAL TotpagesChr = %SUBST(QUSSPLKI:17:Qusdl02) C EVAL SPLTOTPAGE = Totpages# S007 C WHEN Quskfffr00 = 212 C EVAL CurpageChr = %SUBST(QUSSPLKI:17:Qusdl02) C EVAL SPLCURPAGE = Curpage# S007 C WHEN Quskfffr00 = 213 C EVAL CopiesleftChr = %SUBST(QUSSPLKI:17:Qusdl02) C EVAL SPLCPYLEFT = Copiesleft# S007 C WHEN Quskfffr00 = 214 C EVAL SPLFORMTYP = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 215 C EVAL SPLPRIORTY = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 216 C EVAL SplDateChr = %SUBST(QUSSPLKI:17:Qusdl02) C MOVE SplDateChr SPLDATE S007 C WHEN Quskfffr00 = 217 C EVAL SplTimeChr = %SUBST(QUSSPLKI:17:Qusdl02) C MOVE SplTimeChr SPLTIME S007 C WHEN Quskfffr00 = 218 C EVAL SPLINJOBID = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 219 C EVAL SPLINSPLID = %SUBST(QUSSPLKI:17:Qusdl02) S007 C WHEN Quskfffr00 = 220 C EVAL SPLDEVTYPE = %SUBST(QUSSPLKI:17:Qusdl02) B008 C IF SPLDEVTYPE = 'PRINTER' C EVAL SPLDEVICE = SPLOUTQ E008 C ENDIF S007 C OTHER C EXSR ERROR E007 C ENDSL * increment LSTPTR2 to next variable length record C EVAL X = X + Quslfir02 C EVAL Lstptr2 = %ADDR(ARR(X)) E006 C ENDDO C WRITE DBG186W * after each entry, increment LSTPTR to the next entry C EVAL Lstptr = %ADDR(ARR(Qussee + 1)) E005 C ENDDO E004 C ENDIF E003 C ENDIF E002 C ENDIF E001 C ENDIF * Exit the program C EVAL *INLR = *ON C RETURN ********************************************************************************************** * #INITS: ********************************************************************************************** C #INITS BEGSR * B001 C IF P#MbrOpt = '*REPLACE' C CALL 'QCMDEXC' 90 C PARM CLRPFM CmdString C PARM 80 CmdLength E001 C ENDIF C OPEN DBG1860W * C ENDSR ********************************************************************************************** ********************************************************************************************** * SUBRTN: ********************************************************************************************** C ERROR BEGSR * C Quskfffr00 DSPLY C EVAL *INLR = *ON C RETURN * C ENDSR **********************************************************************************************