| [613] | 1 | AAQPRKIL ;FGO/PJP - Stop running Print jobs ;09/22/97 [8/28/01 10:38am]
 | 
|---|
 | 2 |  ;;1.0;Local;;
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  ; This routine will kill a process and remove an associated task
 | 
|---|
 | 5 |  ; from the task list, %ZTSCH("TASK",). You will be prompted for a
 | 
|---|
 | 6 |  ; print device and the routine will search all running jobs and
 | 
|---|
 | 7 |  ; display the job tied to that Device. 
 | 
|---|
 | 8 |  S FOUND=0 W ! S DIC="^%ZIS(1,",DIC(0)="AEMQZ",DIC("A")="Enter Printer Name: "  D ^DIC
 | 
|---|
 | 9 |  I Y=-1 G EXIT
 | 
|---|
 | 10 |  S PRINTER=$P(Y(0),"^",2)
 | 
|---|
 | 11 |  W !!,"If a print job is actively printing, answer the LOGOUT",!,"question with YES to continue with the kill process."
 | 
|---|
 | 12 |  W !!,"A print job stopped due to an Equinox port in XOFF state",!,"may resume printing after using LOGOUT to make the port available."
 | 
|---|
 | 13 | ASKLO S %=1 W !!,"Have you checked the port status to see if a LOGOUT is needed" D YN^DICN S AAQLO=% I %=0 W !!,"Answer 'Y' to continue with killing the job.",!,"Answer 'N' to check the port status first." G ASKLO
 | 
|---|
 | 14 |  I AAQLO=2 W !!,"Check the port, LOGOUT if needed, check port status for Accessed/Activity",!,"or us Examine Job to see if the job has resumed." R !!,"Press RETURN to continue:",DANS:15 W ! G EXIT
 | 
|---|
 | 15 |  ;; Taken from %ZAUG ;at/jas; birmingham ocio/albany ocio ;PROGRAM TO LIST JOBS AND PIDS
 | 
|---|
 | 16 |  S SW10=$V(0,-2,$ZU(40,0,1))\1024#2
 | 
|---|
 | 17 |  S BASE=$V($ZU(40,2,47),-2,"S")
 | 
|---|
 | 18 |  S MAXPID=$V($ZU(40,2,47)-(2*$ZU(40,0,4)),-2,4)
 | 
|---|
 | 19 |  F I=1:1:MAXPID S PID=$V(I*4+BASE,-3,4) S:PID JOB(PID)=PID
 | 
|---|
 | 20 |  S JJ="" F  S JJ=$O(JOB(JJ)) Q:(FOUND=1)!(JJ="")  D:$ZU(67,0,JJ)=2
 | 
|---|
 | 21 |  .S PID=JOB(JJ)
 | 
|---|
 | 22 |  .S XX=$V(-1,PID),PROG=$P(XX,"^",6),DEV=$P(XX,"^",3) S:PROG="" PROG="SystemJob"
 | 
|---|
 | 23 |  .I $G(^XUTL("XQ",PID,"DUZ")) S ZDUZ=^XUTL("XQ",PID,"DUZ") S:ZDUZ=0 ZDUZ=".5" S USER=$P(^VA(200,ZDUZ,0),"^",1)
 | 
|---|
 | 24 |  .; Do not allow the killing of a System Job or a % job.
 | 
|---|
 | 25 |  .I (DEV[PRINTER)&(PROG'["%")&(PROG'="SystemJob") D
 | 
|---|
 | 26 |  ..S FOUND=1
 | 
|---|
 | 27 |  ..S ^TMP($J,"DEV",PID)=XX
 | 
|---|
 | 28 |  ..S PADPID=PID_$E("      ",$L(PID)+1,6) ;pad pid for display
 | 
|---|
 | 29 |  ..S PADRTN=$P(XX,"^",6)_$E("           ",$L($P(XX,"^",6))+1,10) ;pad routine for display
 | 
|---|
 | 30 |  ..W !,!,"PID   ","ROUTINE   ","USER        ","       DEVICE "
 | 
|---|
 | 31 |  ..W !,"---   ","-------   ","----        ","       ------ "
 | 
|---|
 | 32 |  ..W !,PADPID,PADRTN,USER,"     ",$P(XX,"^",3),!
 | 
|---|
 | 33 |  ..D KILLIT
 | 
|---|
 | 34 |  I FOUND=0 W !,!,"...No job found using ",PRINTER,!
 | 
|---|
 | 35 | EXIT K %,AAQLO,BASE,DANS,DEV,DIC,FOUND,I,JJ,JOB,KILLED,MAXPID
 | 
|---|
 | 36 |  K PADPID,PADRTN,PID,PRINTER,PROG,RECORD,SW10,USER,TSK,TSKDEV,TSKPID,Y,XX,ZDUZ,ZTSK,^TMP($J,"DEV")
 | 
|---|
 | 37 |  Q
 | 
|---|
 | 38 | KILLIT K DIR
 | 
|---|
 | 39 |  S DIR(0)="Y"
 | 
|---|
 | 40 |  S DIR("A")="Are you sure you want to stop this process"
 | 
|---|
 | 41 |  S DIR("B")="NO"
 | 
|---|
 | 42 |  S DIR("?")="     Answer YES to kill the process."
 | 
|---|
 | 43 |  D ^DIR
 | 
|---|
 | 44 |  I 'Y W !,!,?5,"Tasks NOT stopped!",!
 | 
|---|
 | 45 |  I $D(DTOUT) W $C(7) G END
 | 
|---|
 | 46 |  K DIR,DIRUT,DTOUT,DUOUT
 | 
|---|
 | 47 |  I 'Y G END
 | 
|---|
 | 48 |  S KILLED=$$INT^ZZRESJOB(PID)
 | 
|---|
 | 49 |  I KILLED=0 W !,!,"...PROCESS DEAD OR NOT RESPONDING",!
 | 
|---|
 | 50 |  I KILLED=1 W !,!,"...PID# ",PID," has been stopped.",!
 | 
|---|
 | 51 |  S TSK=0 F I=0:0 S TSK=$O(^%ZTSCH("TASK",TSK)) Q:TSK=""  D
 | 
|---|
 | 52 |  .S RECORD=^%ZTSCH("TASK",TSK),TSKDEV=$P(RECORD,"^",6),TSKPID=$P(RECORD,"^",10)
 | 
|---|
 | 53 |  .I TSKPID=PID  D
 | 
|---|
 | 54 |  ..W !,"...PID# ",PID," was a tasked job.  Removing Task# ",TSK," from the task list.",! S ZTSK=TSK H 2
 | 
|---|
 | 55 |  ..L +^%ZTSCH("TASK",ZTSK)
 | 
|---|
 | 56 |  ..K ^%ZTSCH("TASK",ZTSK)
 | 
|---|
 | 57 |  ..W !?5,"...",ZTSK," removed."
 | 
|---|
 | 58 |  ..L -^%ZTSCH("TASK",ZTSK)
 | 
|---|
 | 59 |  ..W !?5,"...finished!",!
 | 
|---|
 | 60 |  ..R !,"...Press RETURN to continue:",DANS:15 W !
 | 
|---|
 | 61 |  Q
 | 
|---|
 | 62 | END S JJ=10000 ;Dirty exit should not have a process number higher
 | 
|---|
 | 63 |  Q
 | 
|---|