1 | HLDIEDBG ;CIOFO-O/LJA - Direct 772 & 773 Sets DEBUG CODE ;12/29/03 10:39
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13,1995
|
---|
3 | ;
|
---|
4 | ; D MENU^HLDIE to invoke debug menu. Debugger documentation included.
|
---|
5 | ;
|
---|
6 | MENU ; Additional documentation available in INIT^HLDIEDB1...
|
---|
7 | D INIT^HLDIEDB1
|
---|
8 | Q
|
---|
9 | ;
|
---|
10 | SETDEBUG ; Set or "unset" the DEBUG string...
|
---|
11 | N IOBOFF,IOBON,IOINHI,IOINORM,NEWSTR,STRING,X
|
---|
12 | W @IOF,$$CJ^XLFSTR("HLDIE Debug String Set/Unset Utility",IOM)
|
---|
13 | W !,$$REPEAT^XLFSTR("=",IOM)
|
---|
14 | ;
|
---|
15 | S X="IOINHI;IOINORM" D ENDR^%ZISS
|
---|
16 | ;
|
---|
17 | ; Ask for a new string...
|
---|
18 | W !!,"When asked for a new debug string, you may take one of the following actions:"
|
---|
19 | W !!," * Enter RETURN or '^' to exit."
|
---|
20 | W !," * Enter a debug string. (E.g., '1' or '1^2' or '1^1^1'.)"
|
---|
21 | W !," * Enter '@' to delete the debug string, (If a debug string exists)."
|
---|
22 | ;
|
---|
23 | SET1 ;
|
---|
24 | ; Get current DEBUG value...
|
---|
25 | S STRING=$G(^XTMP("HLDIE-DEBUG","STATUS"))
|
---|
26 | ;
|
---|
27 | ; Show user current value...
|
---|
28 | W !!!!,"Current DEBUG string = ",IOINHI,STRING,IOINORM
|
---|
29 | ;
|
---|
30 | ; Get new debug string...
|
---|
31 | W !!,"Enter DEBUG string, ",$S(STRING]"":"'@', ",1:""),"or RETURN to exit: "
|
---|
32 | R NEWSTR:999 QUIT:'$T ;->
|
---|
33 | ;
|
---|
34 | ; Exit conditions...
|
---|
35 | I NEWSTR=U!(NEWSTR']"") D QUIT ;->
|
---|
36 | . I STRING']"" D QUIT ;->
|
---|
37 | . . W " no changes made. Exiting... "
|
---|
38 | . . H 2
|
---|
39 | . W !!,"No changes made. (If you want to stop debugging, enter '"
|
---|
40 | . W IOINHI,"@",IOINORM,"'.) Exiting..."
|
---|
41 | ;
|
---|
42 | ; Reset to null if @...
|
---|
43 | I NEWSTR="@" S NEWSTR=""
|
---|
44 | ;
|
---|
45 | ; User didn't change anything!!!
|
---|
46 | I NEWSTR=STRING W " no changes made... " G SET1 ;->
|
---|
47 | ;
|
---|
48 | ; If debug string to be set to null...
|
---|
49 | I NEWSTR']"" D G SET1 ;->
|
---|
50 | . KILL ^XTMP("HLDIE-DEBUG","STATUS")
|
---|
51 | . W " stopped all debugging!"
|
---|
52 | ;
|
---|
53 | ; Debug string has text, so just set it...
|
---|
54 | S ^XTMP("HLDIE-DEBUG",0)=$$FMADD^XLFDT(DT,7)_U_$$NOW^XLFDT_U_"Control string for HLDIE debugging"
|
---|
55 | S ^XTMP("HLDIE-DEBUG","STATUS")=NEWSTR
|
---|
56 | W " debugging set..."
|
---|
57 | ;
|
---|
58 | Q
|
---|
59 | ;
|
---|
60 | ;
|
---|
61 | ; ================================================================
|
---|
62 | ;
|
---|
63 | ;
|
---|
64 | DEBUG(RTN,LOC,STORE,XEC) ; Store debug data... (Don't call unless all
|
---|
65 | ; checks have been made and debug data IS to be stored!)
|
---|
66 | ;
|
---|
67 | ; ROOT() -- req
|
---|
68 | ;
|
---|
69 | ; RTN -- Where (subrtn~rtn, usually) call to FILE^HLDIE made from.
|
---|
70 | ;
|
---|
71 | ; LOC -- Location... BEFORE FILE^HLDIE call = 1
|
---|
72 | ; AFTER FILE^HLDIE call = 2
|
---|
73 | ;
|
---|
74 | ; STORE -- "" = Don't collect
|
---|
75 | ; 1 = Collect "select" (see above) data.
|
---|
76 | ; 2 = Collect "all" data.
|
---|
77 | ;
|
---|
78 | ; XEC -- If XEC=1 then S STORE=$$STORE^HLDIEDB0(RTN,LOC,STORE) is
|
---|
79 | ; called to optionally change the value of STORE (and thus
|
---|
80 | ; control whether data is stored.)
|
---|
81 | ;
|
---|
82 | N CT,DEBUGNO,DEBUGNOW,HLFILE,HLIEN,INCRNO,NO,X,XTMP
|
---|
83 | ;
|
---|
84 | S DEBUGNOW=$$NOW^XLFDT,DT=DEBUGNOW\1
|
---|
85 | ;
|
---|
86 | ; Get file and ien for storing in XTMP...
|
---|
87 | S FILE=$G(FILE),IEN=$G(IEN)
|
---|
88 | I FILE,IEN S HLFILE=FILE,HLIEN=IEN
|
---|
89 | I 'FILE!('IEN) D
|
---|
90 | . S (HLFILE,HLIEN)=0
|
---|
91 | . I $G(ROOT)]"" S HLFILE=$O(@ROOT@(0)),HLIEN=+$O(@ROOT@(+HLFILE,""))
|
---|
92 | ;
|
---|
93 | ; Get storage number...
|
---|
94 | S DEBUGNO=$O(^XTMP("HLDIE-DEBUG-"_DT,$J,RTN,":"),-1)+1
|
---|
95 | ;
|
---|
96 | ; How many stored? Can't store more than 20...
|
---|
97 | S CT=0,NO=0
|
---|
98 | F S NO=$O(^XTMP("HLDIE-DEBUG-"_DT,$J,RTN,NO)) Q:'NO D
|
---|
99 | . S CT=CT+1
|
---|
100 | ;
|
---|
101 | ; If M code passed, check w/^DIM, then execute.
|
---|
102 | I XEC=1 S STORE=$$STORESCR^HLDIEDB2(RTN,LOC,STORE) QUIT:'STORE ;->
|
---|
103 | ;
|
---|
104 | ERRESUME ; If $$STORESCR code errors, there has to be a place for
|
---|
105 | ; error trapping to GOTO. This is that place...
|
---|
106 | ;
|
---|
107 | ; Quit if 20 occurences stored...
|
---|
108 | QUIT:CT'<20 ;->
|
---|
109 | ;
|
---|
110 | ; Zero node & XTMP...
|
---|
111 | ;
|
---|
112 | ; Debug data retained for 7 days...
|
---|
113 | S XTMP="HLDIE-DEBUG-"_DT
|
---|
114 | S:$G(^XTMP(XTMP,0))']"" ^XTMP(XTMP,0)=$$FMADD^XLFDT(DT,7)_U_DEBUGNOW_U_"Debug data created by HLDIEDBG routine"
|
---|
115 | ;
|
---|
116 | ; Xref data retain for 7 days from last time any DEBUG data created...
|
---|
117 | S XTMP="HLDIE-DEBUGX"
|
---|
118 | S:$G(^XTMP(XTMP,0))']"" ^XTMP(XTMP,0)=$$FMADD^XLFDT(DT,7)_U_$$NOW^XLFDT_U_"Debug data created by HLDIEDBG routine"
|
---|
119 | I $P(^XTMP(XTMP,0),U)'=$$FMADD^XLFDT(DT,7) S $P(^XTMP(XTMP,0),U)=$$FMADD^XLFDT(DT,7)
|
---|
120 | ;
|
---|
121 | ; Get incremental number...
|
---|
122 | S INCRNO=$I(^XTMP("HLDIE-DEBUGN","N"),1)
|
---|
123 | ;
|
---|
124 | ; Do following for STORE=1 and STORE=2...
|
---|
125 | S ^XTMP("HLDIE-DEBUG-"_DT,$J,RTN,+DEBUGNO)=LOC_U_DEBUGNOW_U_$G(HLFILE)_U_$G(HLIEN)_U_$TR($P($G(XQY0),U,1,2),U,"~")_U_$TR($G(HLEDITOR),U,"~")
|
---|
126 | D STOREMSG(+$G(HLFILE),+$G(HLIEN),RTN,DEBUGNO,LOC,INCRNO)
|
---|
127 | ;
|
---|
128 | ; Store "select" data...
|
---|
129 | I STORE=1,LOC'=2,$G(ROOT)]"" D QUIT ;->
|
---|
130 | . MERGE ^XTMP("HLDIE-DEBUG-"_DT,$J,RTN,+DEBUGNO)=@ROOT
|
---|
131 | ;
|
---|
132 | QUIT:STORE'=2 ;->
|
---|
133 | ;
|
---|
134 | ; Store "all" local variable data...
|
---|
135 | S X="^XTMP(""HLDIE-DEBUG-"_DT_""","_$J_","""_RTN_""","_DEBUGNO_","
|
---|
136 | D DOLRO^%ZOSV
|
---|
137 | ;
|
---|
138 | D ONLYASC(X)
|
---|
139 | ;
|
---|
140 | Q
|
---|
141 | ;
|
---|
142 | ONLYASC(REF) ; Convert control characters to {ASCII}...
|
---|
143 | N DATA,LP
|
---|
144 | ;
|
---|
145 | S LP=$E(REF,1,$L(REF)-1)_")"
|
---|
146 | F S LP=$Q(@LP) Q:LP'[REF D
|
---|
147 | . S DATA=$$ONLYASC^HLDIEDB0(@LP)
|
---|
148 | . I $L(DATA),$TR(DATA," ","")']"" S DATA="{#"_$L(DATA)_" spaces}"
|
---|
149 | . S @LP=DATA
|
---|
150 | ;
|
---|
151 | Q
|
---|
152 | ;
|
---|
153 | STOREMSG(FILE,IEN,RTN,DEBUGNO,LOC,INCRNO) ; Store message data in ^XTMP...
|
---|
154 | ; DEBUGNOW -- req
|
---|
155 | N GBL,NODE
|
---|
156 | ;
|
---|
157 | ; Set XREF XTMP...
|
---|
158 | S ^XTMP("HLDIE-DEBUGX",FILE,IEN,DEBUGNOW,$J,RTN,DEBUGNO)=LOC_U_$TR($G(HLEDITOR),U,"~")
|
---|
159 | S ^XTMP("HLDIE-DEBUGN","N",INCRNO)=FILE_U_IEN_U_DEBUGNOW_U_$J_U_RTN_U_DEBUGNO_U_LOC_U_$TR($G(HLEDITOR),U,"~")
|
---|
160 | ;
|
---|
161 | ; Get GBL...
|
---|
162 | S GBL=$S(FILE=772:"^HL(772,"_IEN_")",1:"^HLMA("_IEN_")")
|
---|
163 | ;
|
---|
164 | ; Collect message data...
|
---|
165 | F NODE=0,1,2,"P","S",$S(FILE=772:"IN",1:"MSH") D NODE(GBL,NODE)
|
---|
166 | ;
|
---|
167 | Q
|
---|
168 | ;
|
---|
169 | NODE(GBL,NODE) ; Collect message data...
|
---|
170 | ; RTN,DEBUGNO -- req
|
---|
171 | N LAST,LNO,TXT,X
|
---|
172 | ;
|
---|
173 | I NODE="MSH" D QUIT ;->
|
---|
174 | . N LNO,TXT
|
---|
175 | . S LNO=0
|
---|
176 | . F S LNO=$O(@GBL@("MSH",LNO)) Q:'LNO D
|
---|
177 | . . S TXT=$G(@GBL@("MSH",+LNO,0)) QUIT:TXT']"" ;->
|
---|
178 | . . S ^XTMP("HLDIE-DEBUG-"_DT,$J,RTN,DEBUGNO,"D","MSH",LNO,0)=TXT
|
---|
179 | ;
|
---|
180 | I NODE="IN" D QUIT ;->
|
---|
181 | . N LAST,TXT
|
---|
182 | . S LAST=$O(@GBL@("IN",":"),-1)
|
---|
183 | . S TXT=$G(@GBL@("IN",1,0)) QUIT:TXT']"" ;->
|
---|
184 | . S ^XTMP("HLDIE-DEBUG-"_DT,$J,RTN,DEBUGNO,"D","IN",1,0)=1_":"_LAST_"~"_TXT
|
---|
185 | ;
|
---|
186 | ; Store node...
|
---|
187 | S X=$G(@GBL@(NODE)) I X]"" S ^XTMP("HLDIE-DEBUG-"_DT,$J,RTN,DEBUGNO,"D",NODE)=X
|
---|
188 | ;
|
---|
189 | Q
|
---|
190 | ;
|
---|
191 | KILLALL ; Don't call here unless it's OK to remove ALL-ALL debug data...
|
---|
192 | N KILL,OFF,XTMP
|
---|
193 | ;
|
---|
194 | I $O(^XTMP("HLDIE-DEBUG"))']"HLDIE-DEBUG" D QUIT ;->
|
---|
195 | . W !!,"No debug data exists..."
|
---|
196 | ;
|
---|
197 | W !
|
---|
198 | S KILL=$$YN^HLCSRPT4("Kill **ALL** debug data","No")
|
---|
199 | I 'KILL W " no data will be killed..." QUIT ;->
|
---|
200 | ;
|
---|
201 | W !!,"KILLing all debug data..."
|
---|
202 | S XTMP="HLDIE-DEBUG"
|
---|
203 | F S XTMP=$O(^XTMP(XTMP)) Q:XTMP'["HLDIE-DEBUG" D
|
---|
204 | . KILL ^XTMP(XTMP)
|
---|
205 | ;
|
---|
206 | Q
|
---|
207 | ;
|
---|
208 | LOG(SUBSV,KEEP,STOP) ; Log local vars into ^XTMP("HLDIE "_DT)...
|
---|
209 | ;
|
---|
210 | ; Documentation in MENU^HLDIE...
|
---|
211 | ;
|
---|
212 | N NO,NOW,NOXTMP,X,XTMP
|
---|
213 | ;
|
---|
214 | ; Presets...
|
---|
215 | S SUBSV=$G(SUBSV),KEEP=$G(KEEP),STOP=$G(STOP),NOXTMP=0,NOW=$$NOW^XLFDT
|
---|
216 | S SUBSV=$TR($S(SUBSV]"":SUBSV,1:"UNKNOWN"),"""","")
|
---|
217 | ;
|
---|
218 | ; # to keep setup...
|
---|
219 | S KEEP=$S(KEEP&(KEEP<100):KEEP,1:20)
|
---|
220 | ;
|
---|
221 | ; XTMP setup...
|
---|
222 | S XTMP="HLDIE-"_DT
|
---|
223 | S:'$D(^XTMP(XTMP,0)) ^XTMP(XTMP,0)=$$FMADD^XLFDT(NOW,7)_U_$$NOW^XLFDT_U_"Data logged by LOG~HLDIE"
|
---|
224 | ;
|
---|
225 | ; Count number entries...
|
---|
226 | I STOP=1 D
|
---|
227 | . S NOXTMP=0,NO=0
|
---|
228 | . F S NO=$O(^XTMP(XTMP,SUBSV,NO)) Q:'NO D
|
---|
229 | . . S NOXTMP=NOXTMP+1
|
---|
230 | ;
|
---|
231 | ; Incremented sequential store #...
|
---|
232 | S NO=$O(^XTMP(XTMP,SUBSV,":"),-1)+1
|
---|
233 | ;
|
---|
234 | ; STOP now?
|
---|
235 | I STOP,NOXTMP'<KEEP QUIT ;->
|
---|
236 | ;
|
---|
237 | ; Store all local variables...
|
---|
238 | S X="^XTMP("""_XTMP_""","""_SUBSV_""","_NO_"," D DOLRO^%ZOSV
|
---|
239 | S ^XTMP(XTMP,SUBSV,NO)=$$NOW^XLFDT
|
---|
240 | ;
|
---|
241 | I $ZE]"" S ^XTMP(XTMP,SUBSV,NO,"$ZE")=$ZE
|
---|
242 | ;
|
---|
243 | ; Keep only KEEP instances...
|
---|
244 | F NO=NO-KEEP:-1:1 KILL ^XTMP(XTMP,SUBSV,NO)
|
---|
245 | ;
|
---|
246 | Q
|
---|
247 | ;
|
---|
248 | EOR ;HLDIEDBG - Direct 772 & 773 Sets DEBUG CODE ; 11/18/2003 11:17
|
---|