Ignore:
Timestamp:
Dec 4, 2009, 8:26:01 PM (14 years ago)
Author:
George Lilly
Message:

WorldVistAEHR overlayed on FOIAVistA

Location:
FOIAVistA/tag/r
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • FOIAVistA/tag/r/HEALTH_LEVEL_SEVEN-HL/HLCSTCP.m

    r628 r636  
    1 HLCSTCP ;SFIRMFO/TNV-ALB/JFP,PKE - (TCP/IP) MLLP ;09/19/2007  10:21
    2  ;;1.6;HEALTH LEVEL SEVEN;**19,43,49,57,58,64,84,109,133,122**;Oct 13, 1995;Build 14
     1HLCSTCP ;SFIRMFO/TNV-ALB/JFP,PKE - (TCP/IP) MLLP ;09/13/2006
     2 ;;1.6;HEALTH LEVEL SEVEN;**19,43,49,57,58,64,84,109,133**;Oct 13, 1995;Build 13
    33 ;Per VHA Directive 2004-038, this routine should not be modified.
    4  ;
     4 ; 
    55 ; This is an implementation of the HL7 Minimal Lower Layer Protocol
    6  ; taskman entry/startup option, HLDP defined in menu entry.
    7  ;
     6 ;
     7 ;taskman entry/startup option, HLDP defined in menu entry,
    88 Q:'$D(HLDP)
    9  ; patch HL*1.6*122 start
    10  L +^HLCS("HLTCPLINK",HLDP):5 I '$T D  Q
    11  . D MON^HLCSTCP("TskLcked")
    12  N HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET
    13  N HLZRULE
     9 N HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL
    1410 ;HLCSOUT= 1-error
    1511 I '$$INIT D EXITS("Init Error") Q
    16  S HLDP("$J")=$J
    17  S HLDP("$J",0,"LENGTH")=$L(HLDP("$J"))
    1812 ; Start the client
    1913 I $G(HLTCPCS)="C" D  Q
    20  . S HLDP("$J",0,"START")=HLDP("$J",0,"LENGTH")-8+$L(HLTCPORT)+$L(HLDP)
    21  . I HLDP("$J",0,"START")<1 S HLDP("$J",0,"START")=1
    22  . S HLDP("$J",0)=$E(HLDP("$J"),HLDP("$J",0,"START"),HLDP("$J",0,"LENGTH"))
    2314 . ; identify process for ^%SY
    24  . ; D SETNM^%ZOSV($E("HLClnt:"_HLDP,1,15))
    25  . D SETNM^%ZOSV($E("HLc:"_HLTCPORT_"-"_HLDP_"-"_HLDP("$J",0),1,15))
    26  . K HLDP("$J",0)
     15 . D SETNM^%ZOSV($E("HLClnt:"_HLDP,1,15))
    2716 . D ST1
    2817 . F  D ^HLCSTCP2 Q:$$STOP!$G(HLCSOUT)
    29  . ; I $G(HLCSOUT)=1 D MON("Error") H 1 Q
    30  . I $G(HLCSOUT)=1 D  Q
    31  .. D MON("Error") H 1
    32  .. L -^HLCS("HLTCPLINK",HLDP)
     18 . I $G(HLCSOUT)=1 D MON("Error") H 1 Q
    3319 . I $G(HLCSOUT)=2 D EXITS("Inactive") Q
    3420 . D EXITS("Shutdown")
    3521 ;
    36  S HLDP("$J",0,"START")=HLDP("$J",0,"LENGTH")-9+$L(HLTCPORT)
    37  I HLDP("$J",0,"START")<1 S HLDP("$J",0,"START")=1
    38  S HLDP("$J",0)=$E(HLDP("$J"),HLDP("$J",0,"START"),HLDP("$J",0,"LENGTH"))
    3922 ; identify process for ^%SY
    40  ; D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15))
    41  D SETNM^%ZOSV($E("HLs:"_HLTCPORT_"-"_HLDP("$J",0),1,15))
    42  K HLDP("$J",0)
    43  ; to stop the listener via updated Kernel API, need to pass the
    44  ; listener logical link (HLDP)
    45  S HLZRULE="S HLDP="_HLDP_" S ZISQUIT=$$STOP^HLCSTCP"
     23 D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15))
     24 ;HLCSFAIL=1 port failed to open
     25 S HLCSFAIL=1
    4626 ;single threaded listener
    4727 I $G(HLTCPCS)="S" D  Q
    48  . D ST1,MON("Listen"),LISTEN^%ZISTCP(HLTCPORT,"SERVER^HLCSTCP("""_HLDP_""")",HLZRULE)
    49  . I $$STOP D EXITS("Shutdown") Q
    50  . D EXITS("Openfail")
    51  ;
    52  ;multi-threaded listener (for OpenM/NT)
    53  I ($G(HLTCPCS)'="M")!(^%ZOSF("OS")'["OpenM") D  Q
    54  . L -^HLCS("HLTCPLINK",HLDP)
    55  I $$OS^%ZOSV["VMS" L -^HLCS("HLTCPLINK",HLDP) Q
    56  D ST1,MON("Listen"),LISTEN^%ZISTCPS(HLTCPORT,"SERVERS^HLCSTCP("""_HLDP_""")",HLZRULE)
    57  ; update status of listener
    58  I $$STOP D EXITS("Shutdown") Q
    59  D EXITS("Openfail")
    60  ; HL*1.6*122 end
     28 . D ST1,MON("Listen"),LISTEN^%ZISTCP(HLTCPORT,"SERVER^HLCSTCP("""_HLDP_""")")
     29 . ;couldn't open listener port
     30 . I HLCSFAIL D EXITS("Openfail") Q
     31 ;
     32 ;multi-threaded listener (OpenM)
     33 I $G(HLTCPCS)="M",^%ZOSF("OS")["OpenM" D  Q
     34 . D ST1,MON("Listen"),LISTEN^%ZISTCPS(HLTCPORT,"SERVERS^HLCSTCP("""_HLDP_""")")
    6135 Q
    6236 ;
    6337SERVER(HLDP) ; single server using Taskman
     38 S HLCSFAIL=0
    6439 I '$$INIT D EXITS("Init error") Q
    6540 D ^HLCSTCP1
     
    8055 G LISTEN
    8156 ;
     57CACHEVMS(%) ;Cache'/VMS tcpip/ucx entry point, called from HLSEVEN.COM file,
     58 ;listener,  % = HLDP
     59 I $G(%)="" D ^%ZTER Q
     60 S IO="SYS$NET",HLDP=%
     61 S IO(0)="_NLA0:" O IO(0) ;Setup null device
     62 ; **Cache'/VMS specific code**
     63 O IO::5 E  D MON("Openfail") Q
     64 X "U IO:(::""-M"")" ;Packet mode like DSM
     65 D LISTEN C IO Q
     66 ;
     67EN ;vms ucx entry point, called from HLSEVEN.COM file,
     68 ;listener,  % = device^HLDP
     69 I $G(%)="" D ^%ZTER Q
     70 S IO="SYS$NET",U="^",HLDP=$P(%,U,2)
     71 S IO(0)="_NLA0:" O IO(0) ;Setup null device
     72 ; **VMS specific code, need to share device**
     73 O IO:(TCPDEV):60 E  D MON("Openfail") Q
    8274LISTEN ;
    83  N HLLSTN,HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET
     75 N HLLSTN,HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL
    8476 I '$$INIT D ^%ZTER Q
    85  ; patch HL*1.6*122 start
    86  S HLDP("$J")=$J
    87  S HLDP("$J",0,"LENGTH")=$L(HLDP("$J"))
    88  S HLDP("$J",0,"START")=HLDP("$J",0,"LENGTH")-9+$L(HLTCPORT)
    89  I HLDP("$J",0,"START")<1 S HLDP("$J",0,"START")=1
    90  S HLDP("$J",0)=$E(HLDP("$J"),HLDP("$J",0,"START"),HLDP("$J",0,"LENGTH"))
    9177 ; identify process for ^%SY
    92  ; D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15))
    93  D SETNM^%ZOSV($E("HLs:"_HLTCPORT_"-"_HLDP("$J",0),1,15))
    94  K HLDP("$J",0)
    95  ; patch HL*1.6*122 end
     78 D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15))
    9679 ;HLLSTN used to identify a listener to tag MON
    9780 S HLLSTN=1
     
    11093 S HLOS=$P($G(^%ZOSF("OS")),"^")
    11194 N DA,DIQUIET,DR,TMP,X,Y
    112  S IOF=$$FLUSHCHR^%ZISTCP ; HL*1.6*122 set device flush character
    11395 S DIQUIET=1
    11496 D DT^DICRW
    11597 I 'HLDP S HLDP=$O(^HLCS(870,"B",HLDP,0)) I 'HLDP Q 0
    11698 S DA=HLDP
    117  ; patch HL*1.6*122 for field 400.09
    118  S DR="200.02;200.021;200.022;200.03;200.04;200.05;200.09;400.01;400.02;400.03;400.04;400.05;400.09"
     99 S DR="200.02;200.021;200.022;200.03;200.04;200.05;200.09;400.01;400.02;400.03;400.04;400.05"
    119100 D GETS^DIQ(870,DA,DR,"IN","TMP","TMP")
    120101 ;
     
    144125 S HLTCPRET=$G(TMP(870,DA_",",400.05,"I"))
    145126 ;
    146  ; patch HL*1.6*122 for field 400.09
    147  ; -- tcp/ip openfail timeout
    148  S HLTCPLNK("TIMEOUT")=$G(TMP(870,DA_",",400.09,"I"))
    149  ;
    150127 ; -- set defaults in case something's not set
    151128 S:HLDREAD=0 HLDREAD=10
    152129 S:HLDBACK=0 HLDBACK=60
    153  ; patch HL*1.6*122
    154  ; S:HLDBSIZE=0 HLDBSIZE=245
    155  S:HLDBSIZE<245 HLDBSIZE=245
     130 S:HLDBSIZE=0 HLDBSIZE=245
    156131 S:HLDRETR=0 HLDRETR=5
    157132 S:HLTCPRET="" X=$P($$PARAM^HLCS2,U,12),HLTCPRET=$S(X:X,1:15)
    158  ;
    159  ; patch HL*1.6*122 for field 400.09
    160  S:HLTCPLNK("TIMEOUT")=0 HLTCPLNK("TIMEOUT")=5
    161133 ;
    162134 Q 1
     
    166138 ;14=Shutdown LLP, 3=LLP Online, 18=Gross Errors
    167139 N HLJ,X
    168  ; HL*1.6*122 remove unnecessary locks
    169  ;F  L +^HLCS(870,HLDP,0):2 Q:$T
     140 F  L +^HLCS(870,HLDP,0):2 Q:$T
    170141 S X="HLJ(870,"""_HLDP_","")"
    171142 S @X@(4)="Init",(@X@(10),@X@(18))="@",@X@(14)=0
     
    175146 S:$G(ZTSK) @X@(11)=ZTSK
    176147 D FILE^HLDIE("","HLJ","","ST1","HLCSTCP") ;HL*1.6*109
    177  ;L -^HLCS(870,HLDP,0)
     148 L -^HLCS(870,HLDP,0)
    178149 Q
    179150 ;
     
    181152 ;don't display for multiple server
    182153 Q:$G(HLLSTN)
    183  ; HL*1.6*122 remove unnecessary locks
    184  ;F  L +^HLCS(870,HLDP,0):2 Q:$T
     154 F  L +^HLCS(870,HLDP,0):2 Q:$T
    185155 S $P(^HLCS(870,HLDP,0),U,5)=Y
    186  ;L -^HLCS(870,HLDP,0)
     156 L -^HLCS(870,HLDP,0)
    187157 Q:'$D(HLTRACE)
    188158 N X U IO(0)
    189159 W !,"IN State: ",Y
    190160 I '$$STOP D
    191  . ; patch HL*1.6*122
    192  . ; R !,"Type Q to Quit: ",X#1:1
    193  . R !,"Type Q to Quit: ",X:1
    194  . ; I $L(X),"Qq"[X S $P(^HLCS(870,HLDP,0),U,15)=1
    195  . I $L(X),"Qq"[$E(X) S $P(^HLCS(870,HLDP,0),U,15)=1
    196  . ; patch HL*1.6*122 end
     161 . R !,"Type Q to Quit: ",X#1:1
     162 . I $L(X),"Qq"[X S $P(^HLCS(870,HLDP,0),U,15)=1
    197163 U IO
    198164 Q
    199165UPDT(Y) ;update job count for multiple servers,X=1 increment
    200166 N HLJ,X
    201  ;
    202  ; HL*1.6*122 start
    203  ; F  L +^HLCS(870,HLDP,0):2 Q:$T
    204  Q:'$G(HLDP)
    205  Q:'$D(^HLCS(870,"E","M",HLDP))
    206  F  L +^HLCS(870,HLDP,0):10 Q:$T  H 1
    207  ; S X=+$P(^HLCS(870,HLDP,0),U,5),$P(^(0),U,5)=$S(Y:X+1,1:X-1)_" server"
    208  S X=+$P(^HLCS(870,HLDP,0),U,5)
    209  I X<0 S X=0
    210  S $P(^HLCS(870,HLDP,0),U,5)=$S(Y:(X+1),X<1:0,1:X-1)_" server"
     167 F  L +^HLCS(870,HLDP,0):2 Q:$T
     168 S X=+$P(^HLCS(870,HLDP,0),U,5),$P(^(0),U,5)=$S(Y:X+1,1:X-1)_" server"
    211169 ;if incrementing, set the Device Type field to Multi-Server
    212  ; I X S HLJ(870,HLDP_",",3)="MS" D FILE^HLDIE("","HLJ","","UPDT","HLCSTCP")
    213  I $P(^HLCS(870,HLDP,0),"^",4)']"" S $P(^HLCS(870,HLDP,0),"^",4)="MS"
    214  ; HL*1.6*122 end
    215  ;
     170 I X S HLJ(870,HLDP_",",3)="MS" D FILE^HLDIE("","HLJ","","UPDT","HLCSTCP") ;HL*1.6*109
    216171 L -^HLCS(870,HLDP,0)
    217172 Q
     
    230185 N P,X
    231186 S P=$S(Y<3:"IN",1:"OUT")_" QUEUE "_$S(Y#2:"BACK",1:"FRONT")_" POINTER"
    232  ; patch HL*1.6*122 start
    233  ; F  L +^HLCS(870,DP,P):2 Q:$T
    234  ; S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1)
    235  I '$L($G(OS)) N OS S OS=$G(^%ZOSF("OS"))
    236  I OS'["DSM",OS'["OpenM" D
    237  . F  L +^HLCS(870,DP,P):10 Q:$T  H 1
    238  . S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1)
    239  . L -^HLCS(870,DP,P)
    240  E  D
    241  . S X=$I(^HLCS(870,DP,P),$S($G(Z):-1,1:1))
    242  ; L -^HLCS(870,DP,P)
    243  ; patch HL*1.6*122 end
     187 F  L +^HLCS(870,DP,P):2 Q:$T
     188 S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1)
     189 L -^HLCS(870,DP,P)
    244190 Q
    245191SDFLD ; set Shutdown? field to yes
    246192 Q:'$G(HLDP)
    247  ; HL*1.6*122 remove unnecessary lock and call to FM
    248  S $P(^HLCS(870,HLDP,0),U,15)=1
    249  ;N HLJ,X
    250  ;F  L +^HLCS(870,HLDP,0):2 Q:$T
     193 N HLJ,X
     194 F  L +^HLCS(870,HLDP,0):2 Q:$T
    251195 ;14=Shutdown LLP?
    252  ;S HLJ(870,HLDP_",",14)=1
    253  ;D FILE^HLDIE("","HLJ","","SDFLD","HLCSTCP") ;HL*1.6*109
    254  ;L -^HLCS(870,HLDP,0)
    255  Q
    256  ;
    257 EXITS(Y) ; shutdown and clean up the listener process for either
    258  ; single-threaded or multi-threaded
     196 S HLJ(870,HLDP_",",14)=1
     197 D FILE^HLDIE("","HLJ","","SDFLD","HLCSTCP") ;HL*1.6*109
     198 L -^HLCS(870,HLDP,0)
     199 Q
     200 ;
     201EXITS(Y) ; Single service shutdown and cleans up
    259202 N HLJ,X
    260203 F  L +^HLCS(870,HLDP,0):2 Q:$T
     
    266209 L -^HLCS(870,HLDP,0)
    267210 I $D(ZTQUEUED) S ZTREQ="@"
    268  ; HL*1.6*122
    269  L -^HLCS("HLTCPLINK",HLDP)
    270211 Q
    271212 ;
    272213EXITM ;Multiple service shutdown and clean up
    273  ; shutdown and clean up a connection spawned by the listener
    274  ; process for a multi-threaded listener
    275214 D UPDT(0)
    276215 I $D(ZTQUEUED) S ZTREQ="@"
Note: See TracChangeset for help on using the changeset viewer.