| 1 | HLDIEDB1 ;CIOFO-O/LJA - DEBUG Menu ;1/8/04 @ 01:28
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13,1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | INIT ;
 | 
|---|
| 5 |  N A7UMENU,A7UOK,A7UOPT,NOMENU,I,T,X,Y
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | CTRL ;
 | 
|---|
| 8 |  D HEADER
 | 
|---|
| 9 |  D M
 | 
|---|
| 10 |  D ASK I 'A7UOK QUIT  ;->
 | 
|---|
| 11 |  D XEC
 | 
|---|
| 12 |  D BT QUIT:'A7UOK  ;->
 | 
|---|
| 13 |  G CTRL ;->
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | BT ;
 | 
|---|
| 16 |  N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 17 |  W !
 | 
|---|
| 18 |  S A7UOK=0
 | 
|---|
| 19 |  N DIR
 | 
|---|
| 20 |  S DIR(0)="EA",DIR("A")="Press RETURN to continue, or '^' to exit... "
 | 
|---|
| 21 |  D ^DIR
 | 
|---|
| 22 |  QUIT:+Y'=1  ;->
 | 
|---|
| 23 |  S A7UOK=1
 | 
|---|
| 24 |  QUIT
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 | HEADER ;
 | 
|---|
| 27 |  N DEBUG,IOINHI,IOINORM,X
 | 
|---|
| 28 |  W @IOF,$$CJ^XLFSTR("HLDIE Debug Utility",IOM)
 | 
|---|
| 29 |  S DEBUG=$G(^XTMP("HLDIE-DEBUG","STATUS"))
 | 
|---|
| 30 |  I DEBUG]"" D  ; Show debug string...
 | 
|---|
| 31 |  .  S X="IOINORM;IOINHI" D ENDR^%ZISS
 | 
|---|
| 32 |  .  S DEBUG="Pre-call: "_$$CD($P(DEBUG,U))_"  Post-call: "_$$CD($P(DEBUG,U,2))_"  Screen: "_$$CD($P(DEBUG,U,3))
 | 
|---|
| 33 |  .  W !,?17,DEBUG
 | 
|---|
| 34 |  W !,$$REPEAT^XLFSTR("=",80)
 | 
|---|
| 35 |  QUIT
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 | CD(TXT) ; debug information
 | 
|---|
| 38 |  ; IOINORM,IOINHI -- req
 | 
|---|
| 39 |  QUIT:TXT']"" "OFF" ;->
 | 
|---|
| 40 |  QUIT IOINHI_"ON["_TXT_"]"_IOINORM ;->
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | M KILL A7UMENU N I,T F I=1:1 S T=$T(M+I) QUIT:T'[";;"  S T=$P(T,";;",2,99),A7UMENU(I)=$P(T,"~",2,99) W !,$J(I,2),". ",$P(T,"~") S NOMENU=I
 | 
|---|
| 43 |  ;;Display debug documentation~D DOC
 | 
|---|
| 44 |  ;;Display debug data - API~D API^HLDIEDB0
 | 
|---|
| 45 |  ;;Display debug data - FILE,IEN~D FILEIEN^HLDIEDB0
 | 
|---|
| 46 |  ;;Display debug data - SEARCH~D SEARCH^HLDIEDB0
 | 
|---|
| 47 |  ;;Display debug data - REALTIME~D REALTIME^HLDIEDB1
 | 
|---|
| 48 |  ;;Display debug data - JOB~D JOB^HLDIEDB3
 | 
|---|
| 49 |  ;;Set debug control string (Turn debugging on/off)~D SETDEBUG^HLDIEDBG
 | 
|---|
| 50 |  ;;Kill debug data~D KILLALL^HLDIEDBG
 | 
|---|
| 51 |  QUIT
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 | ASK ;
 | 
|---|
| 54 |  ; NOMENU -- req
 | 
|---|
| 55 |  N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 56 |  W !
 | 
|---|
| 57 |  S A7UOK=0
 | 
|---|
| 58 |  N DIR
 | 
|---|
| 59 |  S DIR(0)="NO^1:"_NOMENU,DIR("A")="Select option"
 | 
|---|
| 60 |  D ^DIR
 | 
|---|
| 61 |  QUIT:'$D(A7UMENU(+Y))  ;->
 | 
|---|
| 62 |  S A7UOPT=+Y
 | 
|---|
| 63 |  S A7UOK=1
 | 
|---|
| 64 |  QUIT
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | XEC ;
 | 
|---|
| 67 |  S X=A7UMENU(+A7UOPT) X X
 | 
|---|
| 68 |  QUIT
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | REALTIME ; real-time monitoring...
 | 
|---|
| 71 |  N C2,C3,C4,C5,C6,C7,C8,CT,GBL,LAST,STOP,X
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  S GBL="^XTMP(""HLDIE-DEBUGN"",""N"")",LAST=$G(@GBL)
 | 
|---|
| 74 |  S C2=7,C3=18,C4=30,C5=40,C6=52,C7=70,C8=75
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  S CT=0
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  D REALHDR
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  F  D  Q:STOP
 | 
|---|
| 81 |  .  S STOP=1,CT=CT+1
 | 
|---|
| 82 |  .  D REALSHOW
 | 
|---|
| 83 |  .  R X:60 QUIT:X]""  ;->
 | 
|---|
| 84 |  .  S STOP=0
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  Q
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 | REALHDR ; Header for real-time display...
 | 
|---|
| 89 |  ; Cn -- req
 | 
|---|
| 90 |  W !!,"#",?C2,"NOW",?C3,"File [#IEN]",?C4,"DataTM",?C5,"$J"
 | 
|---|
| 91 |  W ?C6,"Rtn",?C7,"LOC",?C8,"Edtor"
 | 
|---|
| 92 |  W !,$$REPEAT^XLFSTR("=",IOM)
 | 
|---|
| 93 |  Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 | REALSHOW ; Show information...
 | 
|---|
| 96 |  ;C2,C3,GBL,LAST -- req --> LAST
 | 
|---|
| 97 |  N DNO,NOW,NUM
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  S NUM=$G(@GBL),NOW=$$TIME($$NOW^XLFDT)
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  I CT=1 D  QUIT  ;->
 | 
|---|
| 102 |  .  W !,?C2,NOW,?C3,"Collecting data..."
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  I NUM=LAST D  QUIT  ;->
 | 
|---|
| 105 |  .  W:$X>0 !
 | 
|---|
| 106 |  .  W ?C2,NOW,?C3,"[No change]"
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  F DNO=(LAST+1):1:NUM D REALONE(DNO)
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 |  S LAST=NUM
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  Q
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 | REALONE(DNO) ; Show one entry...
 | 
|---|
| 115 |  ; Cn -- req
 | 
|---|
| 116 |  N DATA,DATE,EDITOR,FILE,IEN,JOB,LOC,RTN,SNO,TIME
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  S DATA=$G(@GBL@(DNO))
 | 
|---|
| 119 |  S FILE=$P(DATA,U),IEN=$P(DATA,U,2),TIME=$P(DATA,U,3),JOB=$P(DATA,U,4)
 | 
|---|
| 120 |  S RTN=$P(DATA,U,5),SNO=$P(DATA,U,6),EDITOR=$P(DATA,U,7)
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  S TIME=$$TIME(TIME)
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  W !,$J(DNO,5),?C2,NOW,?C3,FILE," [#",IEN,"]",?C4,TIME,?C5,JOB
 | 
|---|
| 125 |  W ?C6,RTN,?C7,SNO,?C8,$S(EDITOR["HLDIE":"HL",1:"FM")
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | TIME(FMTIME) ; Return HH:MM:SS
 | 
|---|
| 130 |  S FMTIME=$P(FMTIME_"000000",".",2)
 | 
|---|
| 131 |  QUIT $E(FMTIME,1,2)_":"_$E(FMTIME,3,4)_":"_$E(FMTIME,5,6)
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | DOC N C,I,IOINHI,IOINORM,T,X
 | 
|---|
| 136 |  S X="IOINHI;IOINORM" D ENDR^%ZISS
 | 
|---|
| 137 |  F I=4:1 S T=$T(DOC+I) QUIT:T'[";;"!($G(X)[U)  D
 | 
|---|
| 138 |  .  S T=$P(T,";;",2,99) S:$E(T,1,2)="[[" T=IOINHI_$TR(T,"[]","")_IOINORM W !,T
 | 
|---|
| 139 |  ;;[[OVERVIEW]]
 | 
|---|
| 140 |  ;; HLDIE debug data can be captured for evaluation by setting a "debug string."
 | 
|---|
| 141 |  ;; The debug string is stored on the ^XTMP("HLDIE-DEBUG","STATUS") node.
 | 
|---|
| 142 |  ;; This debug string should be set using the 'Set debug control string (Turn
 | 
|---|
| 143 |  ;; debugging on/off)' menu choice.
 | 
|---|
| 144 |  ;;
 | 
|---|
| 145 |  ;;
 | 
|---|
| 146 |  ;;[[DEBUG STRING DETAILS]]
 | 
|---|
| 147 |  ;; The "debug string" had three(3) pieces:
 | 
|---|
| 148 |  ;; 
 | 
|---|
| 149 |  ;;   * Piece 1 controls data capture prior to FILE^DIE or FILE^HLDIE call.
 | 
|---|
| 150 |  ;;     - If set to 1, "select" data (see below) is captures.
 | 
|---|
| 151 |  ;;     - If set to 2, all local variables are captures.
 | 
|---|
| 152 |  ;;     - If set to "", no data is collected.
 | 
|---|
| 153 |  ;;
 | 
|---|
| 154 |  ;;   * Piece 2 controls data capture after FILE^DIE or FILE^HLDIE call.
 | 
|---|
| 155 |  ;;     - See piece 1 above for setting details.
 | 
|---|
| 156 |  ;;
 | 
|---|
| 157 |  ;;   * Piece 3 activates data capture screening.
 | 
|---|
| 158 |  ;;     - Piece 3 can be set to 1 to activate the data screen held in
 | 
|---|
| 159 |  ;;       $$STORESCR^HLDIEDB2.  This API holds no M code, but is a placeholder
 | 
|---|
| 160 |  ;;       for M code that can evaluate the environment and on-the-fly turn on
 | 
|---|
| 161 |  ;;       or off data storage.  (It can also control whethere "select" or all
 | 
|---|
| 162 |  ;;       data is captured.)
 | 
|---|
| 163 |  ;;
 | 
|---|
| 164 |  ;;
 | 
|---|
| 165 |  ;;[[PIECE 3 DATA SCREEN DETAILS]]
 | 
|---|
| 166 |  ;; If piece 3 of the debug control string equals 1, the following 
 | 
|---|
| 167 |  ;; occurs:  
 | 
|---|
| 168 |  ;;
 | 
|---|
| 169 |  ;;  * $$STORESCR^HLDIEDB2 is called by debugging process in FILE^HLDIE.
 | 
|---|
| 170 |  ;;  * The local variable STORE holds the value null, 1 or 2 (see above),
 | 
|---|
| 171 |  ;;    specifying whether data should be captured, and if so, whether "select"
 | 
|---|
| 172 |  ;;    or all local variables should be stored.
 | 
|---|
| 173 |  ;;  * If M code has been added to $$STORESCR^HLDIEDB2, it may evaluate the
 | 
|---|
| 174 |  ;;    environment and optionally reset STORE to null, 1 or 2.
 | 
|---|
| 175 |  ;;  * The value of STORE after M code execution is returned to the debugging 
 | 
|---|
| 176 |  ;;    process.  (And, if set to null, no data is captured.)
 | 
|---|
| 177 |  ;;
 | 
|---|
| 178 |  ;; The following variables are defined for use by the M code added to
 | 
|---|
| 179 |  ;; $$STORESCR^HLDIEDB2:
 | 
|---|
| 180 |  ;;
 | 
|---|
| 181 |  ;;  * CT - The number occurences already stored for TODAY/JOB#/API.
 | 
|---|
| 182 |  ;;         (When a job calls STATUS^HLTF0, a call is made to FILE^HLDIE which
 | 
|---|
| 183 |  ;;         can result in the creation of a debug data capture entry.  Every
 | 
|---|
| 184 |  ;;         such call by the job to STATUS^HLTF0 results in the creation of 
 | 
|---|
| 185 |  ;;         another data capture.  Twenty such calls can be made, after which
 | 
|---|
| 186 |  ;;         the oldest capture is removed by the FIFO method.  The value of CT
 | 
|---|
| 187 |  ;;         holds the total number of data capture occurences.)
 | 
|---|
| 188 |  ;;  * DEBUGNO - The sequential number to be used during data storage.
 | 
|---|
| 189 |  ;;  * DEBUGNOW - The date/time that will be used during data storage.
 | 
|---|
| 190 |  ;;  * HLFILE - The file being edited.
 | 
|---|
| 191 |  ;;  * HLIEN - The file's IEN being edited.
 | 
|---|
| 192 |  ;;  * LOC - 1 (before call) or 2 (after call). 
 | 
|---|
| 193 |  ;;  * RTN - RTN~SUBRTN (from the 4th & 5th FILE^HLDIE parameters.)
 | 
|---|
| 194 |  ;;  * STORE - "" (don't store), 1 (store "select"), or 2 (store all.)
 | 
|---|
| 195 |  ;;
 | 
|---|
| 196 |  ;;
 | 
|---|
| 197 |  ;;[[DEBUGGING - ALL VARIABLE STORAGE]]
 | 
|---|
| 198 |  ;; Unrelated to the above debugging instructions, the 
 | 
|---|
| 199 |  ;; LOG^HLDIEDBG(SUBSV,KEEP,STOP) API can be used by VistA HL7 developers to
 | 
|---|
| 200 |  ;; store all variables.  (The DOLRO^%ZOSV API is used.)  Data created by this
 | 
|---|
| 201 |  ;; call is stored in:
 | 
|---|
| 202 |  ;;
 | 
|---|
| 203 |  ;;   ^XTMP("HLDIE-"_DT,SUBSV,#,VAR)=VALUE
 | 
|---|
| 204 |  ;;
 | 
|---|
| 205 |  ;; Entries in this global are sequential at the '#' subscript level.  When a
 | 
|---|
| 206 |  ;; call is made to this API, all local variables are stored at the VAR
 | 
|---|
| 207 |  ;; subscript level.
 | 
|---|
| 208 |  ;;
 | 
|---|
| 209 |  ;; The LOG API has the following parameters:
 | 
|---|
| 210 |  ;;
 | 
|---|
| 211 |  ;;  * SUBSV - The subscript to be used when storing data.  (The value of this
 | 
|---|
| 212 |  ;;            parameter is usually RTN~SUBRTN.)
 | 
|---|
| 213 |  ;;  * KEEP - The number of entries to store.  (The entry of this parameter is
 | 
|---|
| 214 |  ;;           optional, defaulting to 20.)
 | 
|---|
| 215 |  ;;  * STOP - If set to 1, after KEEP number of entries are stored, no more
 | 
|---|
| 216 |  ;;           data is captured, (and no data is deleted.)  If not set to 1, 
 | 
|---|
| 217 |  ;;           KEEP number of entries are stored, the first entry stored is
 | 
|---|
| 218 |  ;;           deleted in FIFO manner, to ensure that no more than KEEP entries
 | 
|---|
| 219 |  ;;           exist.
 | 
|---|
| 220 |  Q
 | 
|---|
| 221 |  ;
 | 
|---|
| 222 | ERR ; If error occurs during screening...
 | 
|---|
| 223 |  ; The SENDUZ(DUZ)="" array *MUST* already be defined...
 | 
|---|
| 224 |  N C,DATA,ERRTXT,LP,NO,ST,STORERR,TEXT,TIME,X,XMDUZ,XMSUB,XMTEXT,XMZ
 | 
|---|
| 225 |  ;
 | 
|---|
| 226 |  ; Before continuing, specify that NOTHING should be stored...
 | 
|---|
| 227 |  ; This email message is ALL that will be stored or sent.
 | 
|---|
| 228 |  S STORE="" ; This variable is returned to FILE^HLDIE execution
 | 
|---|
| 229 |  ;
 | 
|---|
| 230 |  ; Also, turn off STORE capture!
 | 
|---|
| 231 |  S ^XTMP("HLDIE-DEBUG","STATUS")=""
 | 
|---|
| 232 |  ;
 | 
|---|
| 233 |  ; Record an error in logger...
 | 
|---|
| 234 |  S ERRTXT=$$EC^%ZOSV
 | 
|---|
| 235 |  S X=$$LOG^HLEVAPI2("FILE-HLDIE","ERRTXT")
 | 
|---|
| 236 |  ;
 | 
|---|
| 237 |  ; setup things...
 | 
|---|
| 238 |  S XMDUZ=.5,XMSUB="HLDIE $$STORESCR Error"
 | 
|---|
| 239 |  S XMTEXT="^TMP("_$J_",""HLMSG"","
 | 
|---|
| 240 |  KILL ^TMP($J,"HLMSG"),^TMP($J,"HLVAR")
 | 
|---|
| 241 |  S NO=0
 | 
|---|
| 242 |  ;
 | 
|---|
| 243 |  ; Add text...
 | 
|---|
| 244 |  D MAILADD("An error occurred in $$STORESCR^HLDIEDB2 that must be checked.  The")
 | 
|---|
| 245 |  D MAILADD("variables that existed at the time of the error are listed below.")
 | 
|---|
| 246 |  D MAILADD("")
 | 
|---|
| 247 |  D MAILADD("The error was '"_$$EC^%ZOSV_"'.")
 | 
|---|
| 248 |  D MAILADD("")
 | 
|---|
| 249 |  D MAILADD("IMPORTANT!!  All debugging was turned off.  Please review the problem,")
 | 
|---|
| 250 |  D MAILADD("             then turn debugging back on.")
 | 
|---|
| 251 |  D MAILADD("")
 | 
|---|
| 252 |  D MAILADD("Local Variable List"),MAILADD("--------------------")
 | 
|---|
| 253 |  ;
 | 
|---|
| 254 |  S X="^TMP("_$J_",""HLVAR""," D DOLRO^%ZOSV
 | 
|---|
| 255 |  S LP="^TMP("_$J_",""HLVAR""",ST=LP_",",LP=LP_")",C=","
 | 
|---|
| 256 |  F  S LP=$Q(@LP) Q:LP'[ST  D
 | 
|---|
| 257 |  .  S DATA=$TR($P($P(LP,ST,2),")"),"""","")
 | 
|---|
| 258 |  .  I DATA[C S DATA=$P(DATA,C)_"("_$P(DATA,C,2,99)_")"
 | 
|---|
| 259 |  .  D MAILADD(DATA_"="_@LP)
 | 
|---|
| 260 |  ;
 | 
|---|
| 261 |  MERGE XMY=SENDUZ
 | 
|---|
| 262 |  I $O(XMY(0))'>0 S XMY(+$G(DUZ))=""
 | 
|---|
| 263 |  ;
 | 
|---|
| 264 |  D ^XMD
 | 
|---|
| 265 |  ;
 | 
|---|
| 266 |  KILL ^TMP($J,"HLMSG"),^TMP($J,"HLVAR")
 | 
|---|
| 267 |  ;
 | 
|---|
| 268 |  D UNWIND^%ZTER
 | 
|---|
| 269 |  ;
 | 
|---|
| 270 |  Q
 | 
|---|
| 271 |  ;
 | 
|---|
| 272 | MAILADD(T) S NO=$G(NO)+1,^TMP($J,"HLMSG",NO)=T
 | 
|---|
| 273 |  QUIT
 | 
|---|
| 274 |  ;
 | 
|---|
| 275 | EOR ;HLDIEDB1 - DEBUG Menu ;1/8/04 @ 01:28
 | 
|---|