1 | XQUIT ;SEA/LUKE - Jump Utilities (Part II) ;06/23/98 11:28
|
---|
2 | ;;8.0;KERNEL;**46,87**;Jul 10, 1995
|
---|
3 | ;XQUIT has been set in an entry action
|
---|
4 | ;
|
---|
5 | I $D(XQRB) D RB Q ;Rubber band target set the XQUIT
|
---|
6 | ;
|
---|
7 | N %,XQFLAG,XQI,XQJ,XQOP,XQOPQT,XQX
|
---|
8 | S XQX=0 ;Set to 1 if XQUIT EXECUTABLE field is executed
|
---|
9 | ;
|
---|
10 | S XQOPQT=$S($D(XQD):XQD,1:XQY) ;XQY if this is not a jump or jump is completed
|
---|
11 | ;
|
---|
12 | ;See if there is anything in the XQUIT XECUTABLE field
|
---|
13 | D X
|
---|
14 | Q:'$D(XQUIT) ;XQUIT cleared, we're done here
|
---|
15 | ;
|
---|
16 | I $D(ZTQUEUED) Q ;Tasked option, no messages allowed.
|
---|
17 | ;
|
---|
18 | ;Print the message unless the XQUIT EXECUTABLE field is filled in
|
---|
19 | I 'XQX D MESS
|
---|
20 | ;
|
---|
21 | ;Single step, no stack resetting is necessary
|
---|
22 | I $S('$D(XQJMP):0,XQJMP=1:0,(+XQSV=+^XUTL("XQ",$J,^XUTL("XQ",$J,"T"))):1,1:0) D
|
---|
23 | .S XQY=+XQSV,XQDIC=$P(XQSV,U,2),XQY0=$P(XQSV,U,3,99)
|
---|
24 | .S XQT=$P(XQY0,U,4)
|
---|
25 | .K XQJMP,XQNO,XQOPQT,XQTT,XQUIT,XQUR,Y
|
---|
26 | .Q
|
---|
27 | Q:'$D(XQUIT)
|
---|
28 | ;
|
---|
29 | ;
|
---|
30 | RESET ;Reset the stack to what it should be
|
---|
31 | S XQY=+XQSV,XQDIC=$P(XQSV,U,2),XQY0=$P(XQSV,U,3,99)
|
---|
32 | S XQT1=$S($D(XQTT):XQTT,1:^XUTL("XQ",$J,"T"))
|
---|
33 | ;
|
---|
34 | ;Regular "^" jumps
|
---|
35 | ;Remove the new stuff we have put on the stack.
|
---|
36 | ;
|
---|
37 | D
|
---|
38 | .S %=^XUTL("XQ",$J,XQT1) I $P(%,U,18),$D(^DIC(19,+%,26)),$L(^(26)) X ^(26) ;W " ==> ^XQUIT"
|
---|
39 | .I $D(XQONSTK),$L(XQONSTK) F XQI=1:1 S %=$P(XQONSTK,U,XQI) Q:%="" D POP^XQ72(%)
|
---|
40 | .Q
|
---|
41 | ;.;Restore the old stack as it was.
|
---|
42 | ;.F XQI=1:1:XQT S %=$G(XQOLDSTK(XQI)) Q:%="" D
|
---|
43 | ;..Q:^XUTL("XQ",$J,XQI)=%
|
---|
44 | ;..S ^XUTL("XQ",$J,XQI)=XQOLDSTK(XQI),XQTT=XQTT+1
|
---|
45 | ;..Q
|
---|
46 | ;.Q
|
---|
47 | ;
|
---|
48 | ;Reset the stack pointer
|
---|
49 | I '$D(XQTT) S XQTT=^XUTL("XQ",$J,"T") ;We haven't been to POP^XQ72
|
---|
50 | S ^XUTL("XQ",$J,"T")=$S(XQTT>1:XQTT,1:1)
|
---|
51 | S XQT=$P(XQY0,U,4) ;Reset Option Type
|
---|
52 | ;
|
---|
53 | K XQJMP,XQONSTK,XQOPQT,XQSVSTK,XQTT,XQUR,Y
|
---|
54 | Q
|
---|
55 | ;
|
---|
56 | ;
|
---|
57 | RB ;Come here from ^XQ73 for Rubber Band jumps
|
---|
58 | N %,XQOPQT,XQI,XQX
|
---|
59 | S XQX=0 ;Flag that tells us if XQUIT EXECUTABLE is executed (XQX=1)
|
---|
60 | S XQOPQT=$S($D(XQYY):XQYY,1:XQY) ;The option where XQUIT was born
|
---|
61 | D X Q:'$D(XQUIT) ;Stop if the application cleared the XQUIT
|
---|
62 | D:'XQX MESS ;Tell the user what's going on
|
---|
63 | ;
|
---|
64 | I $D(^XUTL("XQ",$J,"RBX")) D ;Unwind the jump
|
---|
65 | .S %=0 F S %=$O(^XUTL("XQ",$J,"RBX",%)) Q:%="" X ^(%)
|
---|
66 | .K ^XUTL("XQ",$J,"RBX"),XQRB
|
---|
67 | .Q
|
---|
68 | ;
|
---|
69 | ;Reload the option we came from, and execute it's header. Quit.
|
---|
70 | I ^XUTL("XQ",$J,^XUTL("XQ",$J,"T"))=-1 S (XQTT,^XUTL("XQ",$J,"T"))=$S(^("T")>1:^("T")-1,1:1)
|
---|
71 | ;F XQI=XQTT:-1:1 S %=^XUTL("XQ",$J,XQI) Q:%=-1 S (^XUTL("XQ",$J,"T"),XQTT)=$S(%>0:%,1:1)
|
---|
72 | S XQY=+XQSV,XQDIC=$P(XQSV,U,2),XQY0=$P(XQSV,U,3,99)
|
---|
73 | S XQT=$P(XQY0,U,4)
|
---|
74 | I $P(XQY0,U,17),$D(^DIC(19,XQY,26)),$L(^(26)) X ^(26)
|
---|
75 | Q
|
---|
76 | ;
|
---|
77 | ;
|
---|
78 | T ;Come here from XQT1+14 & 33 if a template finds XQUIT while executing
|
---|
79 | D X
|
---|
80 | Q:'$D(XQUIT)
|
---|
81 | ;I 'XQX D MESS
|
---|
82 | Q
|
---|
83 | ;
|
---|
84 | PM ;Come here from XQ12 if XQUIT is encounter at logon in a primary menu
|
---|
85 | N XQOPQT,XQX
|
---|
86 | S XQX=0
|
---|
87 | S XQOPQT=XQY
|
---|
88 | D X
|
---|
89 | Q:'$D(XQUIT)
|
---|
90 | I 'XQX D
|
---|
91 | .I $D(^DIC(19,+XQY,21)),$P(^(21,0),U,3)>0 D DISPLAY^XQUTL
|
---|
92 | .E D
|
---|
93 | ..W !!," **> Sorry, access to your primary menu has been denied by the application.",!?6,"An XQUIT was encountered in the Entry Action code.",!?6,"Please see your computer person."
|
---|
94 | ..D HOLD^XQUTL
|
---|
95 | ..Q
|
---|
96 | .Q
|
---|
97 | Q
|
---|
98 | ;
|
---|
99 | ;
|
---|
100 | ; ***** Subroutines ****
|
---|
101 | ;
|
---|
102 | MESS ;Tell the user what's going on unless we executed XQUIT EXECUTABLE field
|
---|
103 | I 'XQX D
|
---|
104 | .I '$D(XQNO) S XQNO=$P(XQY0,U,2)
|
---|
105 | .;
|
---|
106 | .I $D(^DIC(19,XQOPQT,21)),$P(^(21,0),U,3)>0 D DISPLAY^XQUTL
|
---|
107 | .E D
|
---|
108 | ..W !!," **> Sorry, access to this option has been denied by the application.",!!?7,"The variable XQUIT was encountered at the option",!?7,"'",XQNO,"'.",!?7,"You are being returned to:",!?7,"'",$P(XQSV,U,4),"'",!
|
---|
109 | ..D HOLD^XQUTL
|
---|
110 | ..Q
|
---|
111 | .Q
|
---|
112 | Q
|
---|
113 | ;
|
---|
114 | X ;If there is something in the XQUIT EXECUTABLE field, execute it.
|
---|
115 | I '$D(XQOPQT) S XQOPQT=XQY
|
---|
116 | I $D(^DIC(19,XQOPQT,22)),$L(^(22)) X ^(22) S XQX=1
|
---|
117 | Q
|
---|