* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "If it's squinky, then you know it's BrilligWare!" * * * * * * * * This work is licensed under a Creative Commons * * * * Attribution-NonCommercial-ShareAlike License: * * * * http://creativecommons.org/licenses/by-nc-sa/2.0/legalcode * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CP0301R * * * * Terminate All Interactive Jobs For A Given User * * * * Chris Pando (c) 2006 * * This program for demonstration purposes only * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * hactgrp(*caller) dftactgrp(*no) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... procedure interfaces ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... entry interfaces ... * dcp0301r pr d userProfile 10a dcp0301r pi d userProfile 10a * * ... APIs ... * dcrtUsrSpc pr ExtPgm('QUSCRTUS') d 20a d 10a d 8b 0 d 1a d 10a d 50a d 10a d 256a drtvPtr pr ExtPgm('QUSPTRUS') D 20a D * dlistJobs pr ExtPgm('QUSLJOB') D 20a D 8a D 26a D 10a 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 * * standard API error data structure * d errDS DS d errPrv 10u 0 Inz(%Size(errDS)) d errAvl 10u 0 Inz(0) d errMSGID 7a d 1a Inz(x'00') d errDta 240a * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... standalone variables ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * d usrSpc s 20a inz('CP0301 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 50a d replace s 10a Inz('*YES') d aut s 10a Inz('*ALL') d LJob s 26a Inz('*ALL xxxxxxxxxx*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 : replace : errds ); rtvPtr( usrSpc : headerPtr ); %SubSt( LJob : 11 : 10 ) = userProfile; listJobs( usrSpc : LFormat : LJob : status ); listPtr = headerPtr + listOffset; For $I = 1 to listEntryCnt; If (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