********************************************************************************************** * DBG186R4: Work with user outqueue/spoolfile * 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 ********************************************************************************************** H DATEDIT(*YMD) DEBUG(*YES) OPTIon(*NODEBUGIO : *SRCSTMT) ************************************************************************** * WRKOUTQ outfile FDBG1860W If E DISK INFDS(LISTDS) * User *OUTQ list FDBGUOL00 UF A E K DISK * WRKUSROUTQ User settings FDBGWUS00 UF A E K DISK * Display screen FDBG186DF CF E WORKSTN F SFILE(SFL:RRN) F SFILE(SFL2:RRN2) F SFILE(SFL3:RRN3) F SFILE(SFL4:RRN4) F SFILE(SFL5:RRN5) ********************************************************************************************** * PROGRAM NAME D SDS D PGM 10 D Usrprf 254 263 * Information Data Structure D LISTDS DS * Current relative record number D ListRecNbr 397 400B 0 * ==List API structures== * Standard error code DS for API error handling D Error_Code DS D BytesProvd 1 4B 0 INZ(0) D BytesAvail 5 8B 0 INZ(0) D Except_ID 9 15 D Reserved 16 16 D Exception 17 272 * Receiver value DS for user space header info (used in first call to QUSRTVUS) D GenRcvrDS DS D UserArea 1 64 D GenHdrSize 65 68B 0 D StrucLevel 69 72 D FormatName 73 80 D APIused 81 90 D CreateStamp 91 103 D InfoStatus 104 104 D SizeUSused 105 108B 0 D InpParmOff 109 112B 0 D InpParmSiz 113 116B 0 D HeadOffset 117 120B 0 D HeaderSize 121 124B 0 D ListOffset 125 128B 0 D ListSize 129 132B 0 D ListNumber 133 136B 0 D EntrySize 137 140B 0 * QUSLOBJ format OBJL0100 structure D ObjL0100DS DS D ObjL0100 D L_Object 10A OVERLAY( ObjL0100 : 1 ) D L_ObjectLib 10A OVERLAY( ObjL0100 : 11 ) D L_ObjectTyp 10A OVERLAY( ObjL0100 : 21 ) * QSPROUTQ format OUTQ0100 structure D OutQ0100DS DS D OutQ0100 2000A D L_BytesRtrnd 9B 0 OVERLAY( OutQ0100 : 1 ) D L_BytesAvail 9B 0 OVERLAY( OutQ0100 : 5 ) D L_OutQName 10A OVERLAY( OutQ0100 : 9 ) D L_OutQLib 10A OVERLAY( OutQ0100 : 19 ) D L_FileOrder 10A OVERLAY( OutQ0100 : 29 ) D L_DisplayAny 10A OVERLAY( OutQ0100 : 39 ) D L_JobSeperat 9B 0 OVERLAY( OutQ0100 : 49 ) D L_OperatrCtl 10A OVERLAY( OutQ0100 : 53 ) D L_DataQName 10A OVERLAY( OutQ0100 : 63 ) D L_DataQLib 10A OVERLAY( OutQ0100 : 73 ) D L_CheckAuth 10A OVERLAY( OutQ0100 : 83 ) D L_NbrOfFiles 9B 0 OVERLAY( OutQ0100 : 93 ) D L_OutQStatus 10A OVERLAY( OutQ0100 : 97 ) D L_WtrJobName 10A OVERLAY( OutQ0100 : 107 ) D L_WtrJobUser 10A OVERLAY( OutQ0100 : 117 ) D L_WtrJobNbr 6A OVERLAY( OutQ0100 : 127 ) D L_WtrJobSts 10A OVERLAY( OutQ0100 : 133 ) D L_PrtDevName 10A OVERLAY( OutQ0100 : 143 ) D L_OutQText 10A OVERLAY( OutQ0100 : 153 ) D L_Reserved1 2A OVERLAY( OutQ0100 : 203 ) D L_NbrSplSpec 9B 0 OVERLAY( OutQ0100 : 205 ) D L_NbrWtrStrd 9B 0 OVERLAY( OutQ0100 : 209 ) D L_AutoStrWtr 9B 0 OVERLAY( OutQ0100 : 213 ) D L_RmtSysType 1A OVERLAY( OutQ0100 : 217 ) D L_RmtSysName 255A OVERLAY( OutQ0100 : 218 ) D L_RmtPrintQ 128A OVERLAY( OutQ0100 : 473 ) D L_MsgQName 10A OVERLAY( OutQ0100 : 601 ) D L_MsgQLib 10A OVERLAY( OutQ0100 : 611 ) D L_ConnectTyp 9B 0 OVERLAY( OutQ0100 : 621 ) D L_DestinType 9B 0 OVERLAY( OutQ0100 : 625 ) D L_VMMVSClass 1A OVERLAY( OutQ0100 : 629 ) D L_FormCtlBuf 8A OVERLAY( OutQ0100 : 630 ) D L_HostPrtTrf 1A OVERLAY( OutQ0100 : 638 ) D L_ManuTypMod 17A OVERLAY( OutQ0100 : 639 ) D L_WrkCustObj 10A OVERLAY( OutQ0100 : 656 ) D L_WrkCustLib 10A OVERLAY( OutQ0100 : 666 ) D L_SplAuxAttr 1A OVERLAY( OutQ0100 : 676 ) D L_MaxPagOffs 9B 0 OVERLAY( OutQ0100 : 677 ) D L_NbrPageRtn 9B 0 OVERLAY( OutQ0100 : 681 ) D L_LenSizeEnt 9B 0 OVERLAY( OutQ0100 : 685 ) D L_DestinOpts 128A OVERLAY( OutQ0100 : 689 ) D L_WtrTypStrd 1A OVERLAY( OutQ0100 : 817 ) D L_PrtSepPage 1A OVERLAY( OutQ0100 : 818 ) D L_LongRmtPrt 255A OVERLAY( OutQ0100 : 819 ) D L_ImgConfig 10A OVERLAY( OutQ0100 : 1074 ) D L_ImgConfLib 10A OVERLAY( OutQ0100 : 1084 ) D L_Reserved2 3A OVERLAY( OutQ0100 : 1094 ) D L_SplAuxID 9B 0 OVERLAY( OutQ0100 : 1097 ) * D DspFTPLog DS D DSPPFM 30A INZ('DSPPFM QTEMP/FTPSRC FTPOUT') * D PcDtaQData DS 7 D DtaQSflOpt 2 D DtaQRRN 9P 0 ********************************************************************************************** * WORK FIELDS: ********************************************************************************************** D COMPNY S 40 DTAARA(DBGCOMP) D Counter S 5 0 D CurrentEnt S 5P 0 D DataLength S 9B 0 INZ(140) D DefaultDir S 100 DTAARA(DBG186DA) D DtaLen S 5 0 D Errid S 7 D ExtendAttr S 10 INZ('USRSPC ') D FileName S 50 D GreenProtect S 1 INZ(X'A0') D GreenULine S 1 INZ(X'24') D HTMLTitle S 50 D IgnoreCase S 1N D InitialSiz S 9B 0 INZ(1024) D InitialVal S 1 INZ(X'00') D LastOptionLine S 3 0 D ListBuilt S 1 D ListFormat S 8 INZ('OBJL0100') D MoreDtaQRcds S 1N D MsgDta S 512 D MsgFil S 10 D MsgID S 7 D MsgLib S 10 D MsgTyp S 10 D Nb2Dlt S 4 0 D ObjectType S 10 INZ('*OUTQ ') D OutQRcvrLen S 9B 0 INZ(2000) D P_BatchFile S LIKE(BATCHFILE) D PcDtaqKeyLen S 3 0 INZ(10) D PcDtaqKeyOrd S 2 INZ('EQ') D PcDtaqKey S 10 D PcDtaqLen S 5 0 INZ(7) D PcDtaqLib S 10 INZ('QTEMP') D PcDtaqName S 10 INZ('DBG186DQ') D PcDtaqSndInf S 10 D PcDtaqSndLen S 3 0 INZ(0) D PcDtaqWait S 5 0 INZ(0) D P_CmdLength S 15 5 D P_CmdString S 256 D P_FileName S LIKE(FileName) D P_Format S LIKE(FORMAT) D P_Found S 1N D P_FTPDir S LIKE(FTPDIR) D Pgmq S 10 D PgmStk S 5 0 D P_HTMLTitle S LIKE(HTMLTitle) D P_IgnoreCase S 1N D P_LmtCpb S 10 D P_Mbropt S 10 D P_Outq S 20 D P_PCFileExt S LIKE(PCFILEEXT) D P_Pgm S 10 D P_QualOutQ S 20 D P_RemoteMach S LIKE(REMOTEMACH) D P_RemotePass S LIKE(REMOTEPASS) D P_RemoteUser S LIKE(REMOTEUSER) D P_SearchString S 25 D P_SplNbr S 4 D P_StmfDir S LIKE(STMFDIR) D PublicAut S 10 INZ('*ALL ') D P_User S 10 D P_Usrprf S 10 D QualifyObj S 20 INZ('*ALL *ALL') D QualOutQ S 20 D RcdNbr S 4 0 D RcdsThisPage S 4 0 D ReadDtaQ S 1N D RefreshRqd S 1 D Reload S 1 D ReplaceSpc S 10 INZ('*YES ') D Rrn2 S 4 0 D Rrn3 S 4 0 D Rrn4 S 4 0 D Rrn5 S 4 0 D Rrn S 4 0 D RunAPI S 1 D SearchString S 25 D Selected S 1N D SFLKey S 4 0 D ShowFtpLog S 1 D SpoolDlt S 1 D SpoolView S 1 0 INZ(1) D StartPos S 9B 0 INZ(1) D TextDescrp S 50 INZ('User space for API use') D TopRRN S 5 0 D UserSpace S 20 INZ('DBG186US QTEMP ') ********************************************************************************************** * CONSTANTS: ********************************************************************************************** * D OpText1 C CONST('1=Send 2=Change 3=Hold 4=D- D elete 5=Display 6=Release 8=Attri- D butes') D OpText2 C CONST(' 9=Work print st- D s F=FTP P=PC Open T=Text save V=V- D iew formatted') D Up C CONST(X'- D 00010203040506070809- D 0A0B0C0D0E0F10111213- D 1415161718191A1B1C1D- D 1E1F2021222324252627- D 28292A2B2C2D2E2F3031- D 32333435363738393A3B- D 3C3D3E3F404142434445- D 464748494A4B4C4D4E4F- D 50515253545556575859- D 5A5B5C5D5E5F60616263- D 6465666768696A6B6C6D- D 6E6F7071727374757677- D 78797A7B7C7D7E7F8081- D 82838485868788898A8B- D 8C8D8E8F909192939495- D 969798999A9B9C9D9E9F- D A0A1A2A3A4A5A6A7A8A9- D AAABACADAEAFB0B1B2B3- D B4B5B6B7B8B9BABBBCBD- D BEBFC0C1C2C3C4C5C6C7- D C8C9CACBCCCDCECFD0D1- D D2D3D4D5D6D7D8D9DADB- D DCDDDEDFE0E1E2E3E4E5- D E6E7E8E9EAEBECEDEEEF- D F0F1F2F3F4F5F6F7F8F9- D FAFBFCFDFEFF') * D Down C CONST(X'- D FFFEFDFCFBFAF9F8F7F6- D F5F4F3F2F1F0EFEEEDEC- D EBEAE9E8E7E6E5E4E3E2- D E1E0DFDEDDDCDBDAD9D8- D D7D6D5D4D3D2D1D0CFCE- D CDCCCBCAC9C8C7C6C5C4- D C3C2C1C0BFBEBDBCBBBA- D B9B8B7B6B5B4B3B2B1B0- D AFAEADACABAAA9A8A7A6- D A5A4A3A2A1A09F9E9D9C- D 9B9A9998979695949392- D 91908F8E8D8C8B8A8988- D 87868584838281807F7E- D 7D7C7B7A797877767574- D 737271706F6E6D6C6B6A- D 69686766656463626160- D 5F5E5D5C5B5A59585756- D 5554535251504F4E4D4C- D 4B4A4948474645444342- D 41403F3E3D3C3B3A3938- D 37363534333231302F2E- D 2D2C2B2A292827262524- D 232221201F1E1D1C1B1A- D 19181716151413121110- D 0F0E0D0C0B0A09080706- D 050403020100') ********************************************************************************************** * INDICATOR USAGE * Screen function keys * 03 (F3) Exit (all screens) * 05 (F5) Refresh * 11 (F11) View 1/2 - toggle between the two views of spoolfile details * 27 - ROLLUP * 28 - ROLLDOWN * Subfile control inds * Main subfile (SFL) * 35 - SFLEND * 36 - SFLDSP * N36 - SFLCLR * Delete request subfile (SFL2) * 37 - SFLEND * 38 - SFLDSP * N38 - SFLCLR * Screen error/dspatr inds * File access inds * 80 81 82 83 * Error ind (for calls) * 90 ************************************************************************** * ENTRY PARAMETERS ************************************************************************** C *ENTRY PList C Parm P_QualOutQ C Parm P_LmtCpb C Parm P_User ************************************************************************** * KEY LIST DEFINITIONS ************************************************************************** C PFUOLKey KList C KFld Usrprf C KFld AOQUE C KFld AOQUEL ************************************************************************** * MAINLINE ************************************************************************** * Program initialisation C ExSr Inits * Build first page C 1 SetLL DBG1860W C ExSr PagUp * Main Screen display loop B001 C DoU *IN03 * Only display subfile if records to show C Eval *IN36 = Rrn > 0 * Display command key text C Write FOOTER1 C Write MSFLC MSG SUBFILE C Write HEADER C ExFmt SFLCTL C Read HEADER 90 C Eval Reload = *off C Eval RefreshRqd = *off C Call 'DBG045CL' 90 REMove MSGS * Process response B002 C Select * F1/Help pressed S002 C When *IN01 = *on * Call the Helptext Viewer C Call 'DBG010R4' 90 Trap errors C Parm PGM P_Pgm * F3=Exit S002 C When *IN03 = *on C Leave * Rollup S002 C When *IN27 = *on C ExSr PagUp * Rolldown S002 C When *IN28 = *on C ExSr PagDwn * F5=Refresh S002 C When *IN05 = *on C ExSr Refresh C Eval TopRRN = 1 C Eval Reload = *on * F8=PC Options S002 C When *IN08 = *on C ExSr PCSetup * F11=View 1/2/3 S002 C When *IN11 = *on C ExSr SaveSFLOpts C Eval SpoolView = SpoolView + 1 B003 C If SpoolView > 3 C Eval SpoolView = 1 E003 C EndIf C Move *on Reload * F16=Find S002 C When *IN16 = *on C ExSr FindString * F17=Outq list S002 C When *IN17 = *on C ExSr OutList * F21=Command line S002 C When *IN21 = *on C ExSr SaveSFLOpts C Call 'QUSCMDLN' 90 * If restriction fields changed, reload from top of list S002 C When *IN55 C Eval TopRRN = 1 C Eval Reload = *on * Otherwise proces any subfile record requests S002 C Other C ExSr ProcessOpts C ExSr SetCursor E002 C EndSl * Reload subfile B002 C If Reload = *on C Eval *IN35 = *off SFLEND C TopRRN SetLL DBG1860W C ExSr PagUp E002 C EndIf E001 C EndDo * Time to go... C ENDPGM Tag * ====== === C Eval *INLR = *on C Return ************************************************************************** * PagUp: DISPLAY NEXT PAGE ************************************************************************** C PagUp BegSr * If not at SFLEND B001 C If *IN35 = *off C ExSr SaveSFLOpts * Reset the relative record number & clear the subfile C Eval Rrn = 0 C Eval RcdsThisPage = 0 C Eval Counter = 0 C Eval *IN36 = *off C Write SFLCTL * C Eval SSEL = ' ' C Eval *IN51 = *off C Eval *IN52 = *off C Eval *IN53 = *off B002 C Select S002 C When SpoolView = 1 C Eval *IN51 = *on S002 C When SpoolView = 2 C Eval *IN52 = *on S002 C When SpoolView = 3 C Eval *IN53 = *on E002 C EndSl * Load a page of entries B002 C DoU Counter = 13 C Read DBG1860W 82 * If record found B003 C If *IN82 = *off C Eval SSEL = ' ' C Eval ReadDtaQ = *on C Eval LISTRRN = ListRecNbr C ExSr RcdSelect B004 C If Selected * Add this record to the subfile C Eval Rrn = Rrn + 1 C Eval Counter = Rrn C Eval RcdsThisPage = Rrn C Write SFL * Store first subfile record values for roll down key positioning B005 C If Rrn = 1 C Eval TopRRN = LISTRRN E005 C EndIf E004 C EndIf * Otherwise we've hit the end of the WRKOUTQ outfile X003 C Else C Eval *IN35 = *on SFLEND C Eval Counter = 13 E003 C EndIf E002 C EndDo * C ExSr SetCursor * If not SFLEND B002 C If *IN35 = *off * Check ahead to see if there will be any more rcds next roll up - if * not then set SFLEND C LISTRRN SetGT DBG1860W 35 E002 C EndIf E001 C EndIf * C EndSr ********************************************************************************************** * PagDwn: DISPLAY PREVIOUS PAGE ********************************************************************************************** C PagDwn BegSr * C ExSr SaveSFLOpts C Eval *IN35 = *off SFLEND C Eval Counter = 0 * Position file to first record on displayed page C TopRRN SetLL DBG1860W * Read back to equivalent of top of previous page B001 C DoU Counter = 14 C ReadP DBG1860W 82 82 * If less than 'the page + a rcd' rcds exist, reset pointer to last read B002 C If *IN82 = *on * Cater for roll down before first record B003 C If LISTRRN = 0 C Eval LISTRRN = 1 E003 C EndIf * Cater for roll down after reading last record B003 C If LISTRRN > TopRRN C Eval LISTRRN = TopRRN E003 C EndIf C LISTRRN SetLL DBG1860W C Leave X002 C Else C Eval LISTRRN = ListRecNbr C Eval ReadDtaQ = *off C ExSr RcdSelect B003 C If Selected C Eval Counter = Counter + 1 E003 C EndIf E002 C EndIf E001 C EndDo * Rebuild the page from current point C ExSr PagUp * C EndSr ********************************************************************************************** * SetCursor: Set cursor position ********************************************************************************************** C SetCursor BegSr * Set cursor to appropriate line B002 C Select S002 C When LastOptionLine = 0 C Eval CSRLIN = 9 S002 C When LastOptionLine > RcdsThisPage + 8 C Eval CSRLIN = RcdsThisPage + 8 S002 C Other C Eval CSRLIN = LastOptionLine E002 C EndSl C Eval CSRCOL = 3 C Eval LastOptionLine = 9 * C EndSr ********************************************************************************************** * ProcessOpts: Process subfile options ********************************************************************************************** C ProcessOpts BegSr * C ExSr SaveSFLOpts * Only process if subfile records to work with C ExSr ReadDtaqRcd * Do while more selected records B001 C DoW MoreDtaQRcds * B002 C Select * Delete requests are grouped for a delete confirmation screen later S002 C When SSEL = '4' C ExSr FlgDlt S002 C Other * Refresh the list if any options can change what's displayed B003 C If SSEL = '2' or SSEL = '3' or SSEL = '4' C or SSEL = '6' C Eval RefreshRqd = *on E003 C EndIf * C Eval RunAPI = *on C Move SPLNBR P_SplNbr * Set default file name C Eval FileName = %TRIM(SPLNAME) + '-' + C %TRIM(P_SplNbr) + '-' + C %TRIM(SPLJOBNAME) + '-' + C %TRIM(SPLUSERPRF) + '-' + C %TRIM(SPLJOBNBR) * Set default HTML title C Eval HTMLTitle = SPLNAME * Set default FTP log status C Eval ShowFtpLog = FTPLOG * Set screen values from defaults C Eval FILENAME2 = FileName C Eval PCFILEEXT2 = PCFILEEXT C Eval STMFDIR2 = STMFDIR C Eval FTPDIR2 = FTPDIR C Eval BATCHFILE2 = BATCHFILE C Eval FORMAT2 = FORMAT C Eval RMTMACHINE = REMOTEMACH C Eval RMTUSER = REMOTEUSER C Eval RMTPASSWD = REMOTEPASS C Eval HTMLTITLE2 = HTMLTitle C Eval FTPLOG2 = FTPLOG * Prompt for overrides if required B003 C If OVERPROMPT = 'Y' and C (SSEL = 'F' or SSEL = 'P' or SSEL = 'T') * Display the prompt window B004 C DoU not *IN01 C ExFmt WINDOW C Call 'DBG045CL' 90 REMOVE MSGS * F1/Help pressed B005 C If *IN01 * Call the Helptext Viewer C Call 'DBG010R4' 90 Trap errors C Parm PGM P_Pgm E005 C EndIf E004 C EndDo E003 C EndIf * If F12 not pressed or prompt screen not displayed load API parms from window values B003 C If not *IN12 or OVERPROMPT = 'N' C Eval P_FileName = FILENAME2 C Eval P_PCFileExt = PCFILEEXT2 C Eval P_StmfDir = STMFDIR2 C Eval P_FTPDir = FTPDIR2 C Eval P_BatchFile = BATCHFILE2 C Eval P_Format = FORMAT2 C Eval P_RemoteMach = RMTMACHINE C Eval P_RemoteUser = RMTUSER C Eval P_RemotePass = RMTPASSWD C Eval P_HTMLTitle = HTMLTITLE2 C Eval ShowFtpLog = FTPLOG2 * Otherwise cancel action X003 C Else C Eval RunAPI = *off E003 C EndIf * B003 C If RunAPI = *on C Call 'DBG187CL' 90 C Parm SPLNAME C Parm SPLJOBNAME C Parm SPLUSERPRF C Parm SPLJOBNBR C Parm P_SplNbr C Parm SSEL C Parm P_BatchFile C Parm P_StmfDir C Parm P_FTPDir C Parm P_RemoteMach C Parm P_RemoteUser C Parm P_RemotePass C Parm P_PCFileExt C Parm P_Format C Parm P_FileName C Parm P_HTMLTitle * B004 C If ShowFtpLog = 'Y' and SSEL = 'F' C Call 'QCMDEXC' 90 C Parm DSPPFM P_CmdString C Parm 30 P_CmdLength E004 C EndIf E003 C EndIf * E002 C EndSl * * Next selected record C ExSr ReadDtaqRcd E001 C EndDo * Process delete requests B001 C If SpoolDlt = *on C ExSr MassDelete E001 C EndIf * Set cursor back on line of last request, not where it actually was C * B001 C If RefreshRqd = *on C Call 'QCLRDTAQ' C Parm PcDtaqName C Parm PcDtaqLib C ExSr Refresh C Eval Reload = *on E001 C EndIf * C EndSr ********************************************************************************************** * RcdSelect: Record selection ********************************************************************************************** C RcdSelect BegSr * C Eval Selected = *off * If the restriction criteria are empty or match the starting characters of the target field * File name & user data can be generic - user is an exact match B001 C If (SELFILE = ' ' or %TRIM(SELFILE) = C %SUBST(SPLNAME:1:%LEN(%TRIM(SELFILE)))) C and (SELUSER = ' ' or SELUSER = SPLUSERPRF) C and (SELUSRDTA = ' ' or %TRIM(SELUSRDTA) = C %SUBST(SPLUSRDTA:1:%LEN(%TRIM(SELUSRDTA)))) * Include search criteria B002 C If SearchString <> *blanks C ExSr SearchSpool X002 C Else C Eval Selected = *on E002 C EndIf * If record selected B002 C If ReadDtaQ and Selected C ExSr GetSFLOpt E002 C EndIf * Set subfile fields C ExSr SetSFLFields E001 C EndIf * C EndSr ********************************************************************************************** * SetSFLFields: Set subfile fields from record ********************************************************************************************** C SetSFLFields BegSr * C Eval SP_NAME = SPLNAME C Eval SP_JOBNAME = SPLJOBNAME C Eval SP_USRPRF1 = SPLUSERPRF C Eval SP_USRPRF2 = SPLUSERPRF C Eval SP_NBR = SPLNBR C Eval SP_JOBNBR = SPLJOBNBR C Eval SP_OUTQ = SPLOUTQ C Eval SP_OUTQLIB = SPLOUTQLIB C Eval SP_DEVICE = SPLDEVICE C Eval SP_USRDTA = SPLUSRDTA B001 C Select S001 C When SPLSTATUS = '*READY' C Eval SP_STS = 'RDY' S001 C When SPLSTATUS = '*HELD' C Eval SP_STS = 'HLD' S001 C When SPLSTATUS = '*SAVED' C Eval SP_STS = 'SAV' S001 C When SPLSTATUS = '*WRITING' C Eval SP_STS = 'WTR' S001 C When SPLSTATUS = '*OPEN' C Eval SP_STS = 'OPN' S001 C When SPLSTATUS = '*CLOSED' C Eval SP_STS = 'CLO' S001 C When SPLSTATUS = '*SENDING' C Eval SP_STS = 'SND' S001 C When SPLSTATUS = '*DEFERRED' C Eval SP_STS = 'DFR' S001 C When SPLSTATUS = '*PENDING' C Eval SP_STS = 'PND' S001 C When SPLSTATUS = '*PRINTING' C Eval SP_STS = 'PRT' S001 C When SPLSTATUS = '*MESSAGE' C Eval SP_STS = 'MSGW' S001 C Other C Eval SP_STS = SPLSTATUS E001 C EndSl C Eval SP_TOTPAGE = SPLTOTPAGE C Eval SP_CURPAGE = SPLCURPAGE C Eval SP_CPYLEFT = SPLCPYLEFT C Eval SP_FORMTYP = SPLFORMTYP C Eval SP_PRIORTY = SPLPRIORTY C Eval SP_DATE = SPLDATE C Eval SP_TIME = SPLTIME * C EndSr ********************************************************************************************** * PCSetup: Setup PC options ********************************************************************************************** C PCSetup BegSr * B001 C DoW not *IN03 B002 C If REMOTEPASS <> ' ' and REMOTEPASS = CONFRMPASS C Eval PASSWRDSET = 'Password set' X002 C Else C Eval PASSWRDSET = 'Password rqd' E002 C EndIf * Display command key text C Write MSFLC C ExFmt SCREEN C Call 'DBG045CL' 90 REMove MSGS * Process response B002 C Select * F1/Help pressed S002 C When *IN01 * Call the Helptext Viewer C Call 'DBG010R4' 90 Trap errors C Parm PGM P_Pgm * F3=Exit S002 C When *IN03 C Leave * F12=Previous S002 C When *IN12 C Eval *IN12 = *off C Leave * F20=Save settings S002 C When *IN20 C Eval USUSER = Usrprf C USUSER Chain DBGWUS00 C Eval USSDIR = STMFDIR C Eval USFEXT = PCFILEEXT C Eval USFMTO = FORMAT C Eval USFTPL = FTPLOG C Eval USOPMT = OVERPROMPT C Eval USFDIR = FTPDIR C Eval USRSCP = BATCHFILE C Eval USRMCH = REMOTEMACH C Eval USRUSR = REMOTEUSER C Up:Down Xlate REMOTEPASS USRPWD B003 C If %FOUND(DBGWUS00) C Update PFWUS0 X003 C Else C Write PFWUS0 E003 C EndIf C Eval MsgID = 'GSM9999' C Eval MsgDta = 'Settings saved for user ' + C Usrprf C Eval DtaLen = 512 C Eval PgmStk = 0 C ExSr SndMsg E002 C EndSl E001 C EndDo * C EndSr ********************************************************************************************** * FindString: Find string in selected spoolfiles ********************************************************************************************** C FindString BegSr * C Eval SearchString = *blanks C Eval F16STS = 'Find subset *OFF*' C Eval Reload = *on C Eval TopRRN = 1 B001 C DoU not *IN01 * Display command key text C Write MSFLC C ExFmt WINDOW2 C Call 'DBG045CL' 90 REMove MSGS * Process response B002 C Select * F1/Help pressed S002 C When *IN01 * Call the Helptext Viewer C Call 'DBG010R4' 90 Trap errors C Parm PGM P_Pgm * F12=Previous S002 C When *IN12 * F16=Find S002 C When *IN16 C Eval SearchString = SEARCH C Eval IgnoreCase = IGNORE = 'Y' C Eval F16STS = 'Find subset *ON*' C Eval Reload = *on C Eval TopRRN = 1 C Eval *IN16 = *off E002 C EndSl E001 C EndDo * C EndSr ************************************************************************** * Refresh: Refresh output queue list ************************************************************************** C Refresh BegSr * C Close DBG1860W C Eval P_Mbropt = '*REPLACE' B001 C If SELUSER <> *blanks C Eval P_Usrprf = SELUSER X001 C Else C Eval P_Usrprf = '*ALL' E001 C EndIf * B001 C Select S001 C When OUTQUE = '*OUTQLIST' C Usrprf Chain DBGUOL00 80 B002 C DoW not *IN80 C Eval %SUBST(P_Outq:1:10) = ULOUTQ C Eval %SUBST(P_Outq:11:10) = ULOUTL C Call 'DBG188R4' C Parm P_Usrprf C Parm P_Outq C Parm P_Mbropt C Eval P_Mbropt = '*ADD ' C Usrprf ReadE DBGUOL00 80 E002 C EndDo * S001 C When OUTQUE = '*USRSPLF' C Eval P_Outq = '*ALL' C Call 'DBG188R4' C Parm P_Usrprf C Parm P_Outq C Parm P_Mbropt * S001 C Other C Call 'DBG188R4' C Parm P_Usrprf C Parm P_QualOutQ P_Outq C Parm P_Mbropt E001 C EndSl * C Open DBG1860W * C EndSr ********************************************************************************************** * FlgDlt: Flag spoolfile for deletion ********************************************************************************************** C FlgDlt BegSr * C ExSr SetSFLFields C Eval Rrn2 = Rrn2 + 1 C Write SFL2 C Eval Rrn4 = Rrn4 + 1 C Write SFL4 C Eval Rrn5 = Rrn5 + 1 C Write SFL5 C Move *on SpoolDlt * C EndSr ********************************************************************************************** * OutList: Work with output queue list ********************************************************************************************** C OutList BegSr * Load all *OUTQ subfile C ExSr LoadOutQ C Call 'DBG045CL' 90 REMove MSGS * B001 C DoW not *IN03 * Only display subfile if records to show C Eval *IN40 = Rrn3 > 0 C Write MSFLC C Write FOOTER3 C Write HEADER3 C ExFmt SFLCTL3 C Call 'DBG045CL' 90 REMove MSGS * B002 C Select * F1/Help pressed S002 C When *IN01 = *on * Call the Helptext Viewer C Call 'DBG010R4' 90 Trap errors C Parm PGM P_Pgm * F3=Exit S002 C When *IN03 C Leave * F5=Refresh list S002 C When *IN05 * Force display to *OUTQ list mode, if not already C Eval P_QualOutQ = '*OUTQLIST' C Eval OUTQUE = '*OUTQLIST' * Load all *OUTQ subfile C ExSr LoadOutQ * F12=Previous S002 C When *IN12 C Leave * Update user list from subfile entries S002 C Other B003 C If Rrn3 > 0 C ReadC SFL3 81 B004 C DoW not *IN81 * If current *OUTQ selected B005 C If SSEL3 = '1' C PFUOLKey SetLL DBGUOL00 82 * Add it to the list if not already there B006 C If not *IN82 C Eval ULUSER = Usrprf C Eval ULOUTQ = AOQUE C Eval ULOUTL = AOQUEL C Write PFUOL E006 C EndIf * Otherwise remove it from the user's list X005 C Else C PFUOLKey Delete PFUOL 82 E005 C EndIf C ReadC SFL3 81 E004 C EndDo * Force display to *OUTQ list mode, if not already C Eval P_QualOutQ = '*OUTQLIST' C Eval OUTQUE = '*OUTQLIST' * Rebuild the spool file list from scratch C ExSr Refresh * Set screen to load from the first spool file in the list C Eval TopRRN = 1 C Move *on Reload E003 C EndIf C Leave E002 C EndSl * E001 C EndDo * * C EndSr ********************************************************************************************** * LoadOutQ: Load all *OUTQs subfile ********************************************************************************************** C LoadOutQ BegSr * Create a user space to hold the format list entries C Call 'QUSCRTUS' C Parm UserSpace C Parm ExtendAttr C Parm InitialSiz C Parm InitialVal C Parm PublicAut C Parm TextDescrp C Parm ReplaceSpc C Parm Error_Code * List the outqueues on the system C Call 'QUSLOBJ' C Parm UserSpace C Parm 'OBJL0100' ListFormat C Parm QualifyObj C Parm ObjectType C Parm Error_Code * Get the header info for this space C Call 'QUSRTVUS' C Parm UserSpace C Parm StartPos C Parm DataLength C Parm GenRcvrDS C Parm Error_Code * Reset the relative record number & clear the subfile C Eval Rrn3 = 0 C Move ' ' SSEL3 C Eval *IN40 = *off C Write SFLCTL3 * Process returned entries B001 C If ListNumber > 0 * Set the initial offset for the start of the list entries C Eval ListOffset = ListOffset + 1 C Eval CurrentEnt = 1 * Loop through the entries held in the list section of the user space B002 C DoW CurrentEnt <= ListNumber * Get the header info for this space C Call 'QUSRTVUS' C Parm UserSpace C Parm ListOffset C Parm EntrySize C Parm ObjL0100DS C Parm Error_Code * Retrieve Output Queue info for this entry C Eval QualOutQ = L_Object + L_ObjectLib C Call 'QSPROUTQ' 90 C Parm OutQ0100 C Parm OutQRcvrLen C Parm 'OUTQ0100' FormatName C Parm QualOutQ C Parm Error_Code * Include outque if API call successful B003 C If not *IN90 C Eval AOQUE = L_OutQName C Eval AOQUEL = L_OutQLib C Eval AOFILS = L_NbrOfFiles C Eval AOWTR = L_WtrJobName C Eval AOSTS = L_OutQStatus * Check if already in user's list - preselect if so C PFUOLKey SetLL DBGUOL00 80 B004 C If *IN80 C Eval SSEL3 = '1' X004 C Else C Eval SSEL3 = ' ' E004 C EndIf C Eval Rrn3 = Rrn3 + 1 C Write SFL3 E003 C EndIf * Bump up the counter & offset for the next entry C Eval ListOffset = ListOffset + EntrySize C Eval CurrentEnt = CurrentEnt + 1 E002 C EndDo E001 C EndIf * C EndSr ********************************************************************************************** * MassDelete: Mass delete selected reports ********************************************************************************************** C MassDelete BegSr * Only display subfile if records to show C Eval *IN38 = Rrn2 > 0 C Eval *IN37 = *on C Eval CSRCOL = 2 C Eval CSRLIN = 1 * Display command key text B001 C DoU *IN12 C Write FOOTER2 C Write MSFLC MSG SUBFILE C Write HEADER2 B002 C Select S002 C When SpoolView = 1 C ExFmt SFLCTL2 S002 C When SpoolView = 2 C ExFmt SFLCTL4 S002 C When SpoolView = 3 C ExFmt SFLCTL5 E002 C EndSl C Call 'DBG045CL' 90 REMOVE MSGS B002 C Select * F1/Help pressed S002 C When *IN01 = *on * Call the Helptext Viewer C Call 'GSRDDT10' 90 Trap errors C Parm PGM P_Pgm * F11=View 1/2/3 pressed S002 C When *IN11 = *on C Eval SpoolView = SpoolView + 1 B003 C If SpoolView > 3 C Eval SpoolView = 1 E003 C EndIf * Enter=Confirm Delete pressed S002 C When *IN12 = *off C and Rrn2 > 0 C Eval Nb2Dlt = Rrn2 B003 C 1 Do Nb2Dlt RcdNbr C RcdNbr Chain SFL2 80 B004 C If *IN80 = *off C Move SPLNBR P_SplNbr C Call 'DBG187CL' 90 C Parm SPLNAME C Parm SPLJOBNAME C Parm SPLUSERPRF C Parm SPLJOBNBR C Parm P_SplNbr C Parm '4' SSEL C Parm ' ' P_BatchFile C Parm ' ' P_StmfDir C Parm ' ' P_FTPDir C Parm ' ' P_RemoteMach C Parm ' ' P_RemoteUser C Parm ' ' P_RemotePass C Parm ' ' P_PCFileExt C Parm ' ' P_Format C Parm ' ' P_FileName C Parm ' ' P_HTMLTitle * E004 C EndIf * E003 C EndDo C Eval RefreshRqd = *on C Leave E002 C EndSl E001 C EndDo * Reset the relative record number & clear the subfiles C Eval *IN38 = *off C Eval Rrn2 = 0 C Write SFLCTL2 C Eval Rrn4 = 0 C Write SFLCTL4 C Eval Rrn5 = 0 C Write SFLCTL5 * C Move *off SpoolDlt C Move *on Reload * C EndSr ********************************************************************************************** * SearchSpool: Search spoolfiles for a string ********************************************************************************************** C SearchSpool BegSr * C Move SPLNBR P_SplNbr C Call 'DBG195R4' 90 C Parm SPLNAME C Parm SPLJOBNAME C Parm SPLUSERPRF C Parm SPLJOBNBR C Parm P_SplNbr C Parm SearchString P_SearchString C Parm IgnoreCase P_IgnoreCase C Parm *off P_Found * C Eval Selected = P_Found * C EndSr ********************************************************************************************** * SaveSFLOpts: Save subfile options for current page ********************************************************************************************** C SaveSFLOpts BegSr * B001 C If RcdsThisPage > 0 B002 C 1 Do RcdsThisPage SFLKey C SFLKey Chain SFL 81 * Do while more selected records B003 C If not *IN81 and SSEL <> *blanks C Eval PcDtaqKey = %EDITC(LISTRRN : 'X') C Eval LastOptionLine = SFLKey + 8 * Check if this record already has a dataqueue entry (read & ignore) C Call (E) 'QRCVDTAQ' C Parm PcDtaqName C Parm PcDtaqLib C Parm 7 PcDtaqLen C Parm PcDtaQData C Parm PcDtaqWait C Parm 'EQ' PcDtaqKeyOrd C Parm PcDtaqKeyLen C Parm PcDtaqKey C Parm PcDtaqSndLen C Parm PcDtaqSndInf * and post a new one on C Eval DtaQSflOpt = SSEL C Eval DtaQRRN = LISTRRN C Eval PcDtaqKey = %EDITC(LISTRRN : 'X') C Call (E) 'QSNDDTAQ' C Parm PcDtaqName C Parm PcDtaqLib C Parm 7 PcDtaqLen C Parm PcDtaQData C Parm PcDtaqKeyLen C Parm PcDtaqKey C Eval SSEL = ' ' C Eval *IN51 = *off C Eval *IN52 = *off C Eval *IN53 = *off * B004 C Select S004 C When SpoolView = 1 C Eval *IN51 = *on S004 C When SpoolView = 2 C Eval *IN52 = *on S004 C When SpoolView = 3 C Eval *IN53 = *on E004 C EndSl C Update SFL E003 C EndIf E002 C EndDo E001 C EndIf * C EndSr ********************************************************************************************** * GetSFLOpt: Get subfile option from dtaq ********************************************************************************************** C GetSFLOpt BegSr * C Eval PcDtaqKey = %EDITC(ListRecNbr : 'X') * Check if this record has a dataqueue entry C Call (E) 'QRCVDTAQ' C Parm PcDtaqName C Parm PcDtaqLib C Parm 7 PcDtaqLen C Parm PcDtaQData C Parm PcDtaqWait C Parm 'EQ' PcDtaqKeyOrd C Parm PcDtaqKeyLen C Parm PcDtaqKey C Parm PcDtaqSndLen C Parm PcDtaqSndInf * Set subfile option from returned data (if any) B001 C If PcDtaqLen > 0 C Eval SSEL = DtaQSflOpt X001 C Else C Eval SSEL = *blanks E001 C EndIf * C EndSr ********************************************************************************************** * ReadDtaQRcd: Read Data queue entry & matching workfile record ********************************************************************************************** C ReadDtaqRcd BegSr * Get the next available record in RRN sequence C Call (E) 'QRCVDTAQ' C Parm PcDtaqName C Parm PcDtaqLib C Parm 7 PcDtaqLen C Parm PcDtaQData C Parm PcDtaqWait C Parm 'GT' PcDtaqKeyOrd C Parm PcDtaqKeyLen C Parm *blanks PcDtaqKey C Parm PcDtaqSndLen C Parm PcDtaqSndInf * Set subfile option from returned data (if any) B001 C If PcDtaqLen > 0 C Eval MoreDtaQRcds = *on C Eval SSEL = DtaQSflOpt C DtaQRRN Chain DBG1860W X001 C Else C Eval MoreDtaQRcds = *off E001 C EndIf * C EndSr ********************************************************************************************** * Inits: Program initialisation ********************************************************************************************** C Inits BegSr * INITIALIZE C In COMPNY C In DefaultDir C Eval STMFDIR = DefaultDir * Clear the delete screen first time round C Eval Rrn2 = 0 C Eval Rrn4 = 0 C Eval Rrn5 = 0 C Eval *IN54 = P_LmtCpb = '*NO' B001 C If P_LmtCpb = '*NO' C Eval DA_STMFDIR = GreenULine X001 C Else C Eval DA_STMFDIR = GreenProtect E001 C EndIf C Eval DA_SELUSER = GreenULine C Eval *IN38 = *off C Eval F16STS = 'Find subset *OFF*' C Eval IGNORE = 'N' C Eval OUTQUE = %SUBST(P_QualOutQ:1:10) C Usrprf Chain (N) DBGWUS00 B001 C If %FOUND(DBGWUS00) C Eval STMFDIR = USSDIR C Eval PCFILEEXT = USFEXT C Eval FORMAT = USFMTO C Eval FTPLOG = USFTPL C Eval OVERPROMPT = USOPMT C Eval FTPDIR = USFDIR C Eval BATCHFILE = USRSCP C Eval REMOTEMACH = USRMCH C Eval REMOTEUSER = USRUSR C Down:Up Xlate USRPWD REMOTEPASS C Eval CONFRMPASS = REMOTEPASS X001 C Else C Eval STMFDIR = DefaultDir C Eval PCFILEEXT = '.txt' C Eval FORMAT = 'Y' C Eval FTPLOG = 'Y' C Eval OVERPROMPT = 'Y' E001 C EndIf C Eval OPTXT1 = OpText1 C Eval OPTXT2 = OpText2 C Write SFLCTL2 C Eval SpoolDlt = *off C Eval ListBuilt = *off * Set user restrictor to current profile if in "WRKSPLF mode" B001 C If OUTQUE = '*USRSPLF' B002 C If P_LmtCpb = '*YES' C Eval DA_SELUSER = GreenProtect E002 C EndIf C Eval SELUSER = P_User E001 C EndIf * C Call 'DBG045CL' 90 Remove msgs * C EndSr ********************************************************************************************** * SndMsg: Send Program message ********************************************************************************************** C SndMsg BegSr * C Call 'DBG044R3' C Parm MsgID C Parm 'DBGMSGF' MsgFil C Parm '*LIBL' MsgLib C Parm MsgDta C Parm DtaLen C Parm '*INFO' MsgTyp C Parm PGM Pgmq C Parm PgmStk C Parm ' ' Errid * C EndSr **********************************************************************************************