| 1 | XWBBRK2 ;ISC-SF/EG - DHCP BROKER PROTOYPE -
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**5**;Mar 28, 1997
 | 
|---|
| 3 | CAPI(XWBY,TAG,NAM,PAR) ;make API call
 | 
|---|
| 4 |  N R,T,DX,DY
 | 
|---|
| 5 |  IF XWB(1,"FLAG")=2 D
 | 
|---|
| 6 |  . S PAR=$P(PAR,XWB("FRM"))_XWB("TO")_$P(PAR,XWB("FRM"),2)
 | 
|---|
| 7 |  S R=$S(PAR'=+PAR&(PAR=""):TAG_"^"_NAM_"(.XWBY)",1:TAG_"^"_NAM_"(.XWBY,"_PAR_")")
 | 
|---|
| 8 |  D:$D(XRTL) T0^%ZOSV ;start RTL
 | 
|---|
| 9 |  U XWBNULL
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;start RUM for RPC
 | 
|---|
| 12 |  I $G(XWB(2,"CAPI"))]"" D LOGRSRC^%ZOSV(XWB(2,"CAPI"),2,1)
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  D @R
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ;restart RUM for handler
 | 
|---|
| 17 |  D LOGRSRC^%ZOSV("$BROKER HANDLER$",2,1)
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  S:$D(XRT0) XRTN=XWB(2,"NAME") D:$D(XRT0) T1^%ZOSV ;stop RTL
 | 
|---|
| 20 |  ;once call is completed, write buffer should be empty, make it so!
 | 
|---|
| 21 |  U XWBNULL S DX=0,DY=0 X ^%ZOSF("XY")
 | 
|---|
| 22 |  U XWBTDEV
 | 
|---|
| 23 |  Q
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 | BHDR(WKID,WINH,PRCH,WISH) ;Build a protocol header
 | 
|---|
| 26 |  N S,L
 | 
|---|
| 27 |  S S=""
 | 
|---|
| 28 |  S S=WKID_";"_WINH_";"_PRCH_";"_WISH_";"
 | 
|---|
| 29 |  S L=$L(S)
 | 
|---|
| 30 |  S S=$E("000"_L,$L(L)+1,$L(L)+3)_S
 | 
|---|
| 31 |  Q S
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 | BARY(A,R,V) ;add array elements+values to storage array
 | 
|---|
| 34 |  IF A'["XWBS" Q "-1^ARRAY NAME MUST BE XWBS"
 | 
|---|
| 35 |  S @A@(R)=V
 | 
|---|
| 36 |  Q 0
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | BLDB(P) ;Build formatted string
 | 
|---|
| 39 |  N L
 | 
|---|
| 40 |  S L=$L(P)
 | 
|---|
| 41 |  Q $E("000"_L,$L(L)+1,$L(L)+3)_P
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | BLDA(N,P) ;Build API string
 | 
|---|
| 44 |  ;M Extrinsic Function
 | 
|---|
| 45 |  ;Inputs
 | 
|---|
| 46 |  ;N        API name
 | 
|---|
| 47 |  ;P        Comma delimited parameter string
 | 
|---|
| 48 |  ;Outputs
 | 
|---|
| 49 |  ;String   API string if successful, "-1^Text" if error
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  N I,F,L,T,U,T1,T2
 | 
|---|
| 52 |  IF '+$D(N) Q "-1^Required input reference is NULL"
 | 
|---|
| 53 |  S U="^"
 | 
|---|
| 54 |  S (F,T,Y)=0
 | 
|---|
| 55 |  IF '$D(P) S P=""
 | 
|---|
| 56 |  IF P'="" D
 | 
|---|
| 57 |  . S L=$L(P)-$L($TR(P,$C(44)))+1
 | 
|---|
| 58 |  . IF L=0 S L=1
 | 
|---|
| 59 |  . F I=1:1:L D  Q:T
 | 
|---|
| 60 |  . . S T1=$P(P,",",I)
 | 
|---|
| 61 |  . . S T2=$E(T1,1,1)="."
 | 
|---|
| 62 |  . . IF T1=+T1 Q
 | 
|---|
| 63 |  . . IF $E(T1,1,1)="^" S F=2,T=1 Q
 | 
|---|
| 64 |  . . ;IF $E(T1,1,5)="$NA(^" S F=2,T=1 Q
 | 
|---|
| 65 |  . . IF T2&($E(T1,2,$L(T1))?.ANP) S F=1,T=1 Q
 | 
|---|
| 66 |  ;IF P?.ANP1"."1A.ANP S F=1
 | 
|---|
| 67 |  S P=$$BLDB(P)
 | 
|---|
| 68 |  S L=$L(P)+$L(P)-3
 | 
|---|
| 69 |  S P=F_N_U_P
 | 
|---|
| 70 |  S L=$L(P)
 | 
|---|
| 71 |  Q $E("000"_L,$L(L)+1,$L(L)+3)_P
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 | BLDS(R) ;Build a parameter string from an array
 | 
|---|
| 74 |  N L,T,Y
 | 
|---|
| 75 |  S Y=""
 | 
|---|
| 76 |  F  D  Q:R=""
 | 
|---|
| 77 |  . S R=$Q(@R)
 | 
|---|
| 78 |  . IF R="" Q
 | 
|---|
| 79 |  . S L=$L(R)+$L(@R)+1
 | 
|---|
| 80 |  . S T=@R
 | 
|---|
| 81 |  . S T=$TR(T,$C(44),$C(23))
 | 
|---|
| 82 |  . S Y=Y_$E("000"_L,$L(L)+1,$L(L)+3)_R_"="_T
 | 
|---|
| 83 |  Q Y_"000"
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | BLDU(R) ;Build a parameter string from a scalar
 | 
|---|
| 86 |  N DONE,L,N,N1,P1
 | 
|---|
| 87 |  IF R=+R Q R
 | 
|---|
| 88 |  S N=$F(R,$C(34))
 | 
|---|
| 89 |  IF N=0 Q $C(34)_R_$C(34)
 | 
|---|
| 90 |  S P1=$E(R,1,N-2)
 | 
|---|
| 91 |  S (L,DONE)=0
 | 
|---|
| 92 |  F  D  Q:DONE
 | 
|---|
| 93 |  . S N1=$F(R,$C(34),N)
 | 
|---|
| 94 |  . IF N1=0 S L=$L(R)+2,N1=L
 | 
|---|
| 95 |  . S P1=P1_$C(34,34)_$E(R,N,N1-2)
 | 
|---|
| 96 |  . IF N1=L S DONE=1,P1=$C(34)_P1_$C(34) Q
 | 
|---|
| 97 |  . S N=N1
 | 
|---|
| 98 |  Q $TR(P1,$C(44),$C(23))
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | BLDG(R) ;build a parameter string from a global reference
 | 
|---|
| 101 |  N I,L,L1,M,T,T1,T2,Y
 | 
|---|
| 102 |  K ^TMP("XWB",$J)
 | 
|---|
| 103 |  IF '$D(R) Q "-1^Reference does not exist"
 | 
|---|
| 104 |  S Y=$NA(^TMP("XWB",$J,$P($H,",",2)))
 | 
|---|
| 105 |  S I=0
 | 
|---|
| 106 |  S M=512
 | 
|---|
| 107 |  S T1=$P(R,")")
 | 
|---|
| 108 |  S L1=$L($P(R,"("))
 | 
|---|
| 109 |  F  D  Q:R=""
 | 
|---|
| 110 |  . S R=$Q(@R)
 | 
|---|
| 111 |  . S T2=$F(R,"(")
 | 
|---|
| 112 |  . IF R=""!(R'[T1) Q
 | 
|---|
| 113 |  . S L=$L(R)+$L(@R)-L1
 | 
|---|
| 114 |  . S T=@R
 | 
|---|
| 115 |  . S T=$TR(T,$C(44),$C(23))
 | 
|---|
| 116 |  . S @Y@(I)=$E("000"_L,$L(L)+1,$L(L)+3)_"^("_$E(R,T2,M)_"="_$$BLDU(T)
 | 
|---|
| 117 |  . S I=I+1
 | 
|---|
| 118 |  S @Y@(I)="000"
 | 
|---|
| 119 |  S Y=$TR(Y,$C(44),$C(23))
 | 
|---|
| 120 |  Q Y
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | OARY() ;create storage array
 | 
|---|
| 123 |  N A,DONE,I
 | 
|---|
| 124 |  S (DONE,I)=0
 | 
|---|
| 125 |  F I=1:1 D  Q:DONE
 | 
|---|
| 126 |  . S A="XWBS"_I
 | 
|---|
| 127 |  . K @A ;temp fix for single array
 | 
|---|
| 128 |  . IF '$D(@A) S DONE=1
 | 
|---|
| 129 |  ;S Y("XWBS")=A
 | 
|---|
| 130 |  S @A="" ;set naked
 | 
|---|
| 131 |  Q A
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 | CREF(R,P) ;Convert array contained in P to reference A
 | 
|---|
| 134 |  N I,X,DONE,F1,S
 | 
|---|
| 135 |  S DONE=0
 | 
|---|
| 136 |  S S=""
 | 
|---|
| 137 |  F I=1:1  D  Q:DONE
 | 
|---|
| 138 |  . IF $P(P,",",I)="" S DONE=1 Q
 | 
|---|
| 139 |  . S X(I)=$P(P,",",I)
 | 
|---|
| 140 |  . IF X(I)?1"."1A.E D
 | 
|---|
| 141 |  . . S F1=$F(X(I),".")
 | 
|---|
| 142 |  . . S X(I)="."_R
 | 
|---|
| 143 |  . S S=S_X(I)_","
 | 
|---|
| 144 |  Q $E(S,1,$L(S)-1)
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 | GETP(P) ;returns various parameters out of the Protocol string
 | 
|---|
| 147 |  N M,T,XWB
 | 
|---|
| 148 |  S M=512
 | 
|---|
| 149 |  S T=$$PRSP^XWBBRK(P)
 | 
|---|
| 150 |  IF '+T D
 | 
|---|
| 151 |  . S T=$$PRSM^XWBBRK(XWB(0,"MESG"))
 | 
|---|
| 152 |  . IF '+T S T=XWB(0,"WKID")_";"_XWB(0,"WINH")_";"_XWB(0,"PRCH")_";"_XWB(0,"WISH")_";"_$P(XWB(1,"TEXT"),"^")
 | 
|---|
| 153 |  Q T
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 | CALLM(X,P,DEBUG) ;make call using Message string
 | 
|---|
| 156 |  N ERR,S
 | 
|---|
| 157 |  S X="",ERR=0
 | 
|---|
| 158 |  S ERR=$$PRSM^XWBBRK(P)
 | 
|---|
| 159 |  IF '+ERR S ERR=$$PRSA^XWBBRK(XWB(1,"TEXT"))
 | 
|---|
| 160 |  IF '+ERR S S=$$PRSB^XWBBRK(XWB(2,"PARM"))
 | 
|---|
| 161 |  IF (+S=0)!(+S>0) D
 | 
|---|
| 162 |  . D CAPI(.X,XWB(2,"RTAG"),XWB(2,"RNAM"),S)
 | 
|---|
| 163 |  IF 'DEBUG K XWB
 | 
|---|
| 164 |  K @(X("XWBS")),X("XWBS")
 | 
|---|
| 165 |  Q
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 | CALLA(X,P,DEBUG) ;make call using API string
 | 
|---|
| 168 |  N ERR,S
 | 
|---|
| 169 |  S X="",ERR=0
 | 
|---|
| 170 |  S ERR=$$PRSA^XWBBRK(P)
 | 
|---|
| 171 |  IF '+ERR S S=$$PRSB^XWBBRK(XWB(2,"PARM"))
 | 
|---|
| 172 |  IF (+S=0)!(+S>0) D
 | 
|---|
| 173 |  . D CAPI(.X,XWB(2,"RTAG"),XWB(2,"RNAM"),S)
 | 
|---|
| 174 |  IF 'DEBUG K XWB
 | 
|---|
| 175 |  K @(X("XWBS")),X("XWBS")
 | 
|---|
| 176 |  Q
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 | TRANSPRT() ;Determine the Transport Method
 | 
|---|
| 179 |  ;DDP is local :=0
 | 
|---|
| 180 |  ;TCP/IP is remote :=1
 | 
|---|
| 181 |  ;Serial/RS-232 is remote :=2
 | 
|---|
| 182 |  Q 1
 | 
|---|
| 183 |  ;Q 0 ;Do DDP for Now
 | 
|---|