* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "If it's squinky, then you know it's BrilligWare!" * * * * * * * * Source available at http://pando.org/downloads * * * * Brillig Enterprises (aka Chris Pando) 2004 * * * * * * * * This work is licensed under a Creative Commons Attribution- * * * * NonCommercial-ShareAlike License: * * * * http://creativecommons.org/licenses/by-nc-sa/2.0/legalcode * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CP0300R * * Cancel Hung Sessions - The Help Desk's Friend * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * hactgrp(*caller) dftactgrp(*no) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * entry procedure * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * dcp0300r pr dcp0300r pi * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * external program procedures * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * dcrtUsrSpc pr ExtPgm('QUSCRTUS') d 20a d 10a d 8b 0 d 1a d 10a d 50a drtvPtr pr ExtPgm('QUSPTRUS') D 20a D * dlistJobs pr ExtPgm('QUSLJOB') D 20a D 8a D 26a D 10a drtvJobA pr ExtPgm('QUSRJOBI') D 86a D 8b 0 Const D 8a D 26a D 16a Const dexec pr ExtPgm('QCMDEXC') d 512a Options(*Varsize) Const d 15p 5 Const * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... data structures ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * dgenericHeader ds 140 Based(headerPtr) d listOffset 125 128u 0 d listEntryCnt 133 136u 0 d listEntryLen 137 140u 0 dlist ds 53 Based(listPtr) d jobName 1 10a d userName 11 20a d jobNumber 21 26a d jobType 53 53a djobA ds 86 d device 9 18a * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... standalone variables ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * d usrSpc s 20a inz('J98INITA QTEMP') d size s 8b 0 inz(16000) d $I s 10u 0 d status s 10a Inz('*ACTIVE') d blanks s 10a d blanks50 s 50 d aut s 10a inz('*ALL') d IJob s 26a Inz('* ') d IFormat s 8a Inz('JOBI0100') d LJob s 26a Inz('*ALL *CURRENT *ALL') d LFormat s 8a Inz('JOBL0100') d cmd s 512a * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... Constants ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * D CONST1 C 'ENDJOB JOB(' D CONST2 C '/' D CONST3 C ') OPTION(*IMMED)' D INTERACTIVE C 'I' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... mainline ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /free *InLR = *On; crtusrspc(usrSpc : blanks : size : blanks : aut : blanks50); rtvPtr( usrSpc : headerPtr); rtvJobA( jobA : %len(jobA) : Iformat : IJob : *Blanks); listJobs( usrSpc : Lformat : Ljob : status); listPtr = headerPtr + listOffset; For $I = 1 to listEntryCnt; If (device <> jobName And jobType = INTERACTIVE); cmd = *blanks; cmd = CONST1 + jobNumber + // ENDJOB (999999/ CONST2 + %trimr(userName) + // aaaaaaaaaa/ CONST2 + %trimr(jobName) + // aaaaaaaaaa) CONST3; // OPTION(*IMMED) exec (cmd:%len(cmd)); EndIf; listPtr = listPtr + listEntryLen; EndFor; Return; /end-free