[623] | 1 | HLCSMON ;SF-DISPLAY DRIVER PROGRAM ;07/10/2000 12:18
|
---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**34,40,48,49,65,66,73,109**;Oct 13, 1995
|
---|
| 3 | ;
|
---|
| 4 | ;This Program drives a real-time display monitor for the HL7
|
---|
| 5 | ;Package. All the data used by this display is stored in file
|
---|
| 6 | ;# 870. Several callable entry points were broken
|
---|
| 7 | ;out of this routine and placed into HLCSMON1
|
---|
| 8 | ;
|
---|
| 9 | ;This routine has no required input parameters other than require that
|
---|
| 10 | ;U be defined, it does not instantiate any parameters either.
|
---|
| 11 | ;
|
---|
| 12 | ;
|
---|
| 13 | ;HLARY=array of all,HLARYD=array of display,HLARYO=array of old values
|
---|
| 14 | ;HLPTR1=top of display,HLPTR2=bottom of display,HLPTR3=last in HLVARY
|
---|
| 15 | INIT N HLARY,HLARYD,HLARYO,HLCOFF,HLCON,HLDISP,HLPTR1,HLPTR2,HLPTR3,HLRESP
|
---|
| 16 | N HLDEV,HLERR,HLEVL,HLHDR,HLNODE,HLOCK
|
---|
| 17 | N HLPARAM,HLPROC,HLPROD,HLSEND,HLSENT,HLSITE
|
---|
| 18 | N HLI,HLREC,HLRUNCNT,HLSTAT,HLTMSTAT,HLLMSTAT,HLVIEW,HLXX,HLYY,X,Y,DX,DY
|
---|
| 19 | ;
|
---|
| 20 | D ^HLCSTERM ;Sets up variables to control display attributes
|
---|
| 21 | INIT1 ;
|
---|
| 22 | ; Next 4 lines copied here from top of START by patch 73...
|
---|
| 23 | ;HLRUNCNT=number of in filers^out filers, HLDISP=display mode
|
---|
| 24 | S HLRUNCNT="-1^-1",HLPTR1=1 S:'$D(HLDISP) HLDISP="S"
|
---|
| 25 | D BUILDARY ;Build an array for display
|
---|
| 26 | QUIT:$$LOCKED(.HLOCK) ;-> Anything locked?
|
---|
| 27 | ;
|
---|
| 28 | W HLCOFF ;Shut Cursor off
|
---|
| 29 | D HEADER^HLCSTERM ;Write header
|
---|
| 30 | D WDATA^HLCSMON1(5,17,"","","Incoming filers running => ")
|
---|
| 31 | D WDATA^HLCSMON1(5,18,"","","Outgoing filers running => ")
|
---|
| 32 | D WDATA^HLCSMON1(5,20,"","","Select a Command:")
|
---|
| 33 | D WDATA^HLCSMON1(1,21,"","","(N)EXT (B)ACKUP (A)LL LINKS (S)CREENED (V)IEWS (Q)UIT (?) HELP: ")
|
---|
| 34 | ;HLRUNCNT=number of in filers^out filers, HLDISP=display mode
|
---|
| 35 | S HLRUNCNT="-1^-1",HLPTR1=1 S:'$D(HLDISP) HLDISP="S"
|
---|
| 36 | START ;
|
---|
| 37 | D BUILDARY ;Build an array for display
|
---|
| 38 | D DISPLAY^HLCSMON1 ;Display the array just built
|
---|
| 39 | D READ
|
---|
| 40 | ;HLRESP=user response
|
---|
| 41 | I '$L(HLRESP) G START
|
---|
| 42 | G:HLRESP="Q" EXIT
|
---|
| 43 | ;any of following commands, kill old values
|
---|
| 44 | K HLARYO,HLTMSTAT,HLLMSTAT
|
---|
| 45 | I HLRESP="?" D HELP G INIT1
|
---|
| 46 | I HLRESP="V" D VIEW G INIT1
|
---|
| 47 | I "AS"[HLRESP K HLARY,HLEVL S HLDISP=HLRESP G INIT1
|
---|
| 48 | I "NB"[HLRESP D NEXT
|
---|
| 49 | G START
|
---|
| 50 | ;
|
---|
| 51 | READ ;Prompt the user for the next action
|
---|
| 52 | D WDATA^HLCSMON1(71,21,"","","",1)
|
---|
| 53 | W HLCON
|
---|
| 54 | R X#1:3
|
---|
| 55 | W HLCOFF
|
---|
| 56 | S HLRESP=$S(X="":X,"Qq^"[X:"Q","Bb"[X:"B","Nn"[X:"N","Aa"[X:"A","Vv"[X:"V",X="?":"?","Ss"[X:"S",1:"")
|
---|
| 57 | Q
|
---|
| 58 | ;
|
---|
| 59 | VIEW ;select new view
|
---|
| 60 | W HLCON,!!
|
---|
| 61 | N DIC
|
---|
| 62 | S DIC="^HLCS(869.3,1,6,",DIC(0)="QEA"
|
---|
| 63 | D ^DIC Q:Y<0
|
---|
| 64 | S HLVIEW=+Y,HLDISP="V"
|
---|
| 65 | W HLCOFF
|
---|
| 66 | Q
|
---|
| 67 | ;
|
---|
| 68 | NEXT ;
|
---|
| 69 | ;Next page
|
---|
| 70 | I HLRESP="N" D
|
---|
| 71 | . ;no more
|
---|
| 72 | . I HLPTR2=HLPTR3 D EOB Q
|
---|
| 73 | . S Y=HLPTR2+10,HLEVL(HLPTR1)=""
|
---|
| 74 | . ;exceed list, get last 10
|
---|
| 75 | . I Y>HLPTR3 S HLPTR2=HLPTR3,HLPTR1=HLPTR2-9 Q
|
---|
| 76 | . S HLPTR1=HLPTR2,HLPTR2=Y
|
---|
| 77 | ;
|
---|
| 78 | ;Backup a page
|
---|
| 79 | I HLRESP="B" D
|
---|
| 80 | . ;top of list
|
---|
| 81 | . I HLPTR1=1 D EOB Q
|
---|
| 82 | . I HLDISP="S" S HLPTR1=$O(HLEVL(HLPTR1),-1) Q
|
---|
| 83 | . S Y=HLPTR1-9
|
---|
| 84 | . ;can't go back 10, reset to top
|
---|
| 85 | . I Y'>0 S HLPTR1=1,HLPTR2=10 Q
|
---|
| 86 | . S HLPTR2=HLPTR1,HLPTR1=Y
|
---|
| 87 | ;
|
---|
| 88 | ;Erase what might be displayed on line 22
|
---|
| 89 | D WDATA^HLCSMON1(1,22,IOELALL,"","")
|
---|
| 90 | Q
|
---|
| 91 | EOB D WDATA^HLCSMON1(5,22,IORVON,IORVOFF,"CANNOT "_$S(HLRESP="N":"ADVANCE",1:"BACKUP")_" BEYOND END OF BUFFER")
|
---|
| 92 | W $C(7) H 2
|
---|
| 93 | Q
|
---|
| 94 | ;
|
---|
| 95 | BUILDARY ;
|
---|
| 96 | K HLARYD
|
---|
| 97 | ;
|
---|
| 98 | ;if view is defined, get links
|
---|
| 99 | I $G(HLVIEW) D S HLVIEW=0,HLDISP="V"
|
---|
| 100 | . N HLTMP
|
---|
| 101 | . K HLARY,HLEVL S HLI=0
|
---|
| 102 | . F S HLI=$O(^HLCS(869.3,1,6,HLVIEW,1,HLI)) Q:'HLI S HLYY=+$P($G(^(HLI,0)),U,2) D
|
---|
| 103 | .. S Y=$P($G(^HLCS(870,HLI,0)),U) Q:Y=""
|
---|
| 104 | .. ;build array by DISPLAY ORDER and then by NAME
|
---|
| 105 | .. I HLYY S HLTMP(HLYY,HLI)="" Q
|
---|
| 106 | .. S HLTMP(Y,HLI)=""
|
---|
| 107 | . S (HLI,HLYY)=0
|
---|
| 108 | . ;rebuild array to put in proper order
|
---|
| 109 | . F S HLI=$O(HLTMP(HLI)),HLXX=0 Q:HLI="" D
|
---|
| 110 | .. F S HLXX=$O(HLTMP(HLI,HLXX)) Q:'HLXX S HLYY=HLYY+1,HLARY(HLYY,HLXX)=""
|
---|
| 111 | . S HLPTR3=HLYY
|
---|
| 112 | ;
|
---|
| 113 | I '$D(HLARY) S HLYY=0,HLXX="" D
|
---|
| 114 | . ;build array in alphabetical order
|
---|
| 115 | . F S HLXX=$O(^HLCS(870,"B",HLXX)) Q:HLXX="" S Y=$O(^(HLXX,0)),HLYY=HLYY+1,HLARY(HLYY,Y)=""
|
---|
| 116 | . S HLPTR3=HLYY
|
---|
| 117 | ;
|
---|
| 118 | S HLI=HLPTR1,HLYY=6 ;HLYY=6TH Line of display
|
---|
| 119 | ;HLARYD(6) through HLARYD(15) with 6 through 15 also representing line
|
---|
| 120 | ;numbers on the display
|
---|
| 121 | F HLI=HLI:1 S HLXX=$O(HLARY(HLI,0)) Q:HLYY=16!'HLXX D COPY
|
---|
| 122 | S HLPTR2=HLI-1
|
---|
| 123 | ;Set all HLARY elements not defined on this pass to null
|
---|
| 124 | F HLYY=HLYY:1:15 S HLARYD(HLYY)=""
|
---|
| 125 | Q
|
---|
| 126 | COPY ;
|
---|
| 127 | Q:'$D(^HLCS(870,HLXX))
|
---|
| 128 | ;
|
---|
| 129 | ;These lock tags lock nodes in the global so that the screen is
|
---|
| 130 | ;refreshed in real-time. The lock forces the buffer to be refreshed,
|
---|
| 131 | ;so that the display is up to date.
|
---|
| 132 | ;
|
---|
| 133 | ;**109**
|
---|
| 134 | ;L +^HLCS(870,HLXX,0):0 L -^HLCS(870,HLXX,0) D CHKLOCK
|
---|
| 135 | ;
|
---|
| 136 | ; Set, even if not able to lock...
|
---|
| 137 | S Y=$G(^HLCS(870,HLXX,0))
|
---|
| 138 | ;
|
---|
| 139 | ;name^rec^proc^send^sent^device^state^error
|
---|
| 140 | S HLARYD(HLYY)=$P(Y,U)_"^^^^^"_$P(Y,U,4)_"^"_$P(Y,U,5)_"^"_$P(Y,U,19)
|
---|
| 141 | ;
|
---|
| 142 | ;**109**
|
---|
| 143 | ;L +^HLCS(870,HLXX,"IN QUEUE BACK POINTER"):0 D CHKLOCK
|
---|
| 144 | ;L -^HLCS(870,HLXX,"IN QUEUE BACK POINTER")
|
---|
| 145 | ;
|
---|
| 146 | S $P(HLARYD(HLYY),U,2)=$G(^HLCS(870,HLXX,"IN QUEUE BACK POINTER"))
|
---|
| 147 | ;
|
---|
| 148 | ;**109**
|
---|
| 149 | ;L +^HLCS(870,HLXX,"IN QUEUE FRONT POINTER"):0 D CHKLOCK
|
---|
| 150 | ;L -^HLCS(870,HLXX,"IN QUEUE FRONT POINTER")
|
---|
| 151 | ;
|
---|
| 152 | S $P(HLARYD(HLYY),U,3)=$G(^HLCS(870,HLXX,"IN QUEUE FRONT POINTER"))
|
---|
| 153 | ;
|
---|
| 154 | ;**109**
|
---|
| 155 | ;L +^HLCS(870,HLXX,"OUT QUEUE BACK POINTER"):0 D CHKLOCK
|
---|
| 156 | ;L -^HLCS(870,HLXX,"OUT QUEUE BACK POINTER")
|
---|
| 157 | ;
|
---|
| 158 | S $P(HLARYD(HLYY),U,4)=$G(^HLCS(870,HLXX,"OUT QUEUE BACK POINTER"))
|
---|
| 159 | ;
|
---|
| 160 | ;**109**
|
---|
| 161 | ;L +^HLCS(870,HLXX,"OUT QUEUE FRONT POINTER"):0 D CHKLOCK
|
---|
| 162 | ;L -^HLCS(870,HLXX,"OUT QUEUE FRONT POINTER")
|
---|
| 163 | ;
|
---|
| 164 | S $P(HLARYD(HLYY),U,5)=$G(^HLCS(870,HLXX,"OUT QUEUE FRONT POINTER"))
|
---|
| 165 | ;
|
---|
| 166 | S X=HLARYD(HLYY),Y=$P(X,U,2)+$P(X,U,3)+$P(X,U,4)+$P(X,U,5)
|
---|
| 167 | ;if Select and the Y=0, nothing to report
|
---|
| 168 | I 'Y,HLDISP="S" S HLARYD(HLYY)="" Q
|
---|
| 169 | S HLYY=HLYY+1
|
---|
| 170 | Q
|
---|
| 171 | ;
|
---|
| 172 | CHKLOCK ; Call here immediately after trying to lock. And, BE SURE that
|
---|
| 173 | ; nothing might occur that would change $T after the lock attempt!!
|
---|
| 174 | ; $T,HLXX -- req
|
---|
| 175 | N NM870
|
---|
| 176 | QUIT:$T ;-> Lock obtained...
|
---|
| 177 | S NM870=$P($G(^HLCS(870,+HLXX,0)),U)
|
---|
| 178 | S NM870=$S(NM870]"":NM870_" (IEN #"_HLXX_")",1:"IEN #"_HLXX)
|
---|
| 179 | S HLOCK(NM870)=""
|
---|
| 180 | QUIT
|
---|
| 181 | ;
|
---|
| 182 | HELP ;
|
---|
| 183 | W HLCON,@IOF
|
---|
| 184 | W !,"You have the following options when monitoring the Messaging System:"
|
---|
| 185 | W !,"Enter the command letter parentheses: N,B,Q,A,S,V or ?"
|
---|
| 186 | W !!,"(N) takes you to the next page of the display of Logical Links."
|
---|
| 187 | W !!,"(B) takes you back one page."
|
---|
| 188 | W !!,"(Q) terminates the monitor."
|
---|
| 189 | W !!,"(A) provides a display of all links defined on your system."
|
---|
| 190 | W !!,"(S) displays only those links that have had message traffic."
|
---|
| 191 | W !!,"(V) prompts for a view name and displays links defined in view."
|
---|
| 192 | W !!," Note that (S) is the default display at startup."
|
---|
| 193 | W !!,"**PRESS <RET> TO CONTINUE**"
|
---|
| 194 | R X:DTIME
|
---|
| 195 | W @IOF
|
---|
| 196 | W !,?25,"Device Types and corresponding prefixes:"
|
---|
| 197 | W !!,?30,"PC -- Persistent TCP/IP Client"
|
---|
| 198 | W !!,?30,"NC -- Non-Persistent TCP/IP Client"
|
---|
| 199 | W !!,?30,"SS -- Single-threaded TCP/IP Server"
|
---|
| 200 | W !!,?30,"MS -- Multi-threaded TCP/IP Server"
|
---|
| 201 | W !!,?30,"SH -- Serial HLLP"
|
---|
| 202 | W !!,?30,"SX -- Serial X3.28"
|
---|
| 203 | W !!,?30,"MM -- MailMan"
|
---|
| 204 | W !!,"**PRESS <RET> TO CONTINUE**"
|
---|
| 205 | R X:DTIME
|
---|
| 206 | W HLCOFF
|
---|
| 207 | Q
|
---|
| 208 | EXIT ;
|
---|
| 209 | ;Turn Cursor back on
|
---|
| 210 | W HLCON
|
---|
| 211 | D KVAR^HLCSTERM
|
---|
| 212 | Q
|
---|
| 213 | ;
|
---|
| 214 | LOCKED(HLOCK) ; Anything locked?
|
---|
| 215 | ;
|
---|
| 216 | ;
|
---|
| 217 | ; Nothing locked...
|
---|
| 218 | I '$D(HLOCK) QUIT "" ;->
|
---|
| 219 | ;
|
---|
| 220 | W !!,"Editing of logical link data is occurring right now. For this reason, some of"
|
---|
| 221 | W !,"the information on the 'System Link Monitor' report might not be accurate for"
|
---|
| 222 | W !,"the following node(s)..."
|
---|
| 223 | W !
|
---|
| 224 | ;
|
---|
| 225 | S HLOCK=""
|
---|
| 226 | F S HLOCK=$O(HLOCK(HLOCK)) Q:HLOCK']"" D
|
---|
| 227 | . W !,?5,HLOCK
|
---|
| 228 | ;
|
---|
| 229 | S ACTION=$$BTE("Press RETURN to print report or '^' to exit... ",1)
|
---|
| 230 | ;
|
---|
| 231 | QUIT $S(ACTION=1:1,1:"")
|
---|
| 232 | ;
|
---|
| 233 | BTE(PMT,FF) ;
|
---|
| 234 | N DIR,DIRUT,DTOUT,DUOUT,X,Y
|
---|
| 235 | F X=1:1:$G(FF) W !
|
---|
| 236 | S DIR(0)="EA",DIR("A")=PMT
|
---|
| 237 | D ^DIR
|
---|
| 238 | QUIT $S(Y=1:"",1:1)
|
---|
| 239 | ;
|
---|