[613] | 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
|
---|