| 1 | HLCSDL ;ALB/MTC/SF/JC - INITIALIZE VARIABLES AND OPEN DEVICE X3.28 ;08/23/99  13:35 | 
|---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**2,44,49,57**;Oct 13, 1995 | 
|---|
| 3 | ; | 
|---|
| 4 | EN ;-- entry point for X3.28 protocol | 
|---|
| 5 | ; | 
|---|
| 6 | ;-- error trap (keepalive for disconnects) | 
|---|
| 7 | I ^%ZOSF("OS")["DSM" N $ETRAP S $ET="" | 
|---|
| 8 | S X="ERROR^HLCSDL",@^%ZOSF("TRAP") | 
|---|
| 9 | EN1 ;-- check device init | 
|---|
| 10 | ;-- if device error and still running, try again | 
|---|
| 11 | I $$INIT,$$RUN^HLCSDL2 D EXIT2 H 5 G EN1 | 
|---|
| 12 | ;-- setup X3.28 parameters | 
|---|
| 13 | I $$XSETUP G ENQ | 
|---|
| 14 | ;-- file start stats | 
|---|
| 15 | D FILE | 
|---|
| 16 | ;-- start LLP | 
|---|
| 17 | D START^HLCSDL1 | 
|---|
| 18 | ;-- file end stats | 
|---|
| 19 | D END | 
|---|
| 20 | ;-- exit | 
|---|
| 21 | ENQ D EXIT | 
|---|
| 22 | ; | 
|---|
| 23 | Q | 
|---|
| 24 | ; | 
|---|
| 25 | INIT() ;-- check for device, open | 
|---|
| 26 | ;   This fucntion will return a 1 if it fails else 0 | 
|---|
| 27 | ; | 
|---|
| 28 | N RESULT | 
|---|
| 29 | S RESULT=0 | 
|---|
| 30 | I '$D(HLDP)&($G(%)'="") S HLDP=% ;LAUNCHED FROM VMS | 
|---|
| 31 | I '$D(HLDP) S RESULT=1 G INITQ | 
|---|
| 32 | D DT^DICRW | 
|---|
| 33 | I HLDP'>0 S HLDP=$O(^HLCS(870,"B",HLDP,"")) | 
|---|
| 34 | I HLDP'>0 S RESULT=1 G INITQ | 
|---|
| 35 | ;HLDP IEN of LOGICAL LINK file #870 | 
|---|
| 36 | S HLPARM=$G(^HLCS(870,HLDP,300)) | 
|---|
| 37 | ;pointer to DEVICE file | 
|---|
| 38 | S HLDEVPTR=$P(HLPARM,U) | 
|---|
| 39 | ;-- check for valid pointer | 
|---|
| 40 | I HLDEVPTR'>0 S RESULT=1 G INITQ | 
|---|
| 41 | ;-- check for device | 
|---|
| 42 | S HLDEVICE=$P($G(^%ZIS(1,HLDEVPTR,0)),"^",1) | 
|---|
| 43 | I HLDEVICE="" S RESULT=1 G INITQ | 
|---|
| 44 | ;-- open device | 
|---|
| 45 | D MONITOR^HLCSDR2("OPEN",5,HLDP) | 
|---|
| 46 | K ZTIO S IOP=HLDEVICE D ^%ZIS I POP D MONITOR^HLCSDR2("OPENFAIL",5,HLDP) H 3 S RESULT=1 G INITQ | 
|---|
| 47 | ;-- set up environment | 
|---|
| 48 | S X=255 U IO X ^%ZOSF("EOFF"),^%ZOSF("RM"),^%ZOSF("TRMON") | 
|---|
| 49 | ; | 
|---|
| 50 | INITQ Q RESULT | 
|---|
| 51 | ; | 
|---|
| 52 | XSETUP() ;-- This function will set up all parameters required by the X3.28 | 
|---|
| 53 | ;   protocol. | 
|---|
| 54 | ; This function will return a 1 if it fails, else 0 | 
|---|
| 55 | ; | 
|---|
| 56 | N RESULT | 
|---|
| 57 | S RESULT=0 | 
|---|
| 58 | ;-- initialize and set defaults | 
|---|
| 59 | ;-- max message size | 
|---|
| 60 | S HLMMS=$P(HLPARM,U,2) S:'HLMMS HLMMS=99999 | 
|---|
| 61 | ;-- block size | 
|---|
| 62 | S HLDBLOCK=$P(HLPARM,U,3) S:'HLDBLOCK HLDBLOCK=245 | 
|---|
| 63 | ;-- timer a | 
|---|
| 64 | S HLTIMA=$P(HLPARM,U,4) S:'HLTIMA HLTIMA=6 | 
|---|
| 65 | ;-- timer b | 
|---|
| 66 | S HLTIMB=$P(HLPARM,U,5) S:'HLTIMB HLTIMB=3 | 
|---|
| 67 | ;-- timer d | 
|---|
| 68 | S HLTIMD=$P(HLPARM,U,6) S:'HLTIMD HLTIMD=30 | 
|---|
| 69 | ;-- timer e | 
|---|
| 70 | S HLTIME=$P(HLPARM,U,7) S:'HLTIME HLTIME=180 | 
|---|
| 71 | N I,J,K F I=1:1 S J=$T(CTRLS+I) Q:J["END"  D | 
|---|
| 72 | .S K=$P(J,";",3),@K=$P(J,";",4) | 
|---|
| 73 | .S HLCTRL(@K)=$P(J,";",5) | 
|---|
| 74 | I $G(HLTRACE) K ^TMP("HLLOG",$J) S HLLOG=0 | 
|---|
| 75 | ; | 
|---|
| 76 | XSETQ Q RESULT | 
|---|
| 77 | ; | 
|---|
| 78 | FILE ;-- file startup stats | 
|---|
| 79 | ; | 
|---|
| 80 | D NOW^%DTC | 
|---|
| 81 | L +^HLCS(870,HLDP,0):DTIME I '$T G FILE | 
|---|
| 82 | ;9=Time Started, 10=Time Stopped, 11=Task Number | 
|---|
| 83 | ;14=Shutdown LLP, 3=Device Type, 18=Gross Errors | 
|---|
| 84 | I '$D(ZTSK) S ZTSK="" | 
|---|
| 85 | S DIE="^HLCS(870,",DA=HLDP,DR="9////^S X=%;10////@;11////^S X=ZTSK;14////0;3////SX;18////@" D ^DIE K DIE,DA,DR | 
|---|
| 86 | L -^HLCS(870,HLDP,0) | 
|---|
| 87 | Q | 
|---|
| 88 | ; | 
|---|
| 89 | END ;-- file stats | 
|---|
| 90 | D NOW^%DTC | 
|---|
| 91 | D MONITOR^HLCSDR2("SHUTDOWN",5,HLDP) | 
|---|
| 92 | L +^HLCS(870,HLDP,0):DTIME I '$T G END | 
|---|
| 93 | ;10=Time Stopped,9=Time Started,11=Task Number | 
|---|
| 94 | S DIE="^HLCS(870,",DA=HLDP,DR="10////^S X=%;9////@;11////@" D ^DIE K DIE,DA,DR | 
|---|
| 95 | L -^HLCS(870,HLDP,0) | 
|---|
| 96 | Q | 
|---|
| 97 | ; | 
|---|
| 98 | EXIT2 ; | 
|---|
| 99 | D ^%ZISC X ^%ZOSF("EON") | 
|---|
| 100 | Q | 
|---|
| 101 | EXIT ;-- exit cleanup | 
|---|
| 102 | D ^%ZISC X ^%ZOSF("EON") | 
|---|
| 103 | K HLMMS,HLBLOCK,HLTIMA,HLTIMB,HLTIMD,HLTIME,HLTERM,HLSOH,HLSTX,HLETB,HLETX,HLEOT,HLENQ,HLRINT,HLDLE,HLNAK,HLACK0,HLACK1,HLACK2,HLACK3,HLACK4,HLACK5,HLACK6,HLACK7 | 
|---|
| 104 | K HLDNODE,HLDEVPTR,HLDEVICE,HLRETPRM,HLDAPP,X,HLDEND,HLDSTRT,HLDVER,HLDREAD,HLDWRITE,HLDP,HLTRACE,ZTSK,HLDBSIZE | 
|---|
| 105 | Q | 
|---|
| 106 | ; | 
|---|
| 107 | ERROR ; | 
|---|
| 108 | ;-- on disconnect errors, trap and try to reconnect, all others, | 
|---|
| 109 | ;   trap and shut down gracefully | 
|---|
| 110 | I $$EC^%ZOSV["DSCON" D MONITOR^HLCSDR2("Disconnect",5,HLDP) H 3 G EN1 | 
|---|
| 111 | D ^%ZTER | 
|---|
| 112 | D END G EXIT | 
|---|
| 113 | CTRLS ;X3.28 control settings | 
|---|
| 114 | ;;HLTERM;13;<CR> | 
|---|
| 115 | ;;HLSOH;1;<SOH> | 
|---|
| 116 | ;;HLSTX;2;<STX> | 
|---|
| 117 | ;;HLETB;23;<ETB> | 
|---|
| 118 | ;;HLETX;3;<ETX> | 
|---|
| 119 | ;;HLEOT;4;<EOT> | 
|---|
| 120 | ;;HLENQ;5;<ENQ> | 
|---|
| 121 | ;;HLRINT;60;<RINT> | 
|---|
| 122 | ;;HLDLE;16;<DLE> | 
|---|
| 123 | ;;HLNAK;21;<NAK> | 
|---|
| 124 | ;;HLACK0;48;<ACK0> | 
|---|
| 125 | ;;HLACK1;49;<ACK1> | 
|---|
| 126 | ;;HLACK2;50;<ACK2> | 
|---|
| 127 | ;;HLACK3;51;<ACK3> | 
|---|
| 128 | ;;HLACK4;52;<ACK4> | 
|---|
| 129 | ;;HLACK5;53;<ACK5> | 
|---|
| 130 | ;;HLACK6;54;<ACK6> | 
|---|
| 131 | ;;HLACK7;55;<ACK7> | 
|---|
| 132 | ;;END | 
|---|