Merge lp:~joel-sher/openvista-gtm-integration/kidsbuild into lp:openvista-gtm-integration
- kidsbuild
- Merge into mainline
Proposed by
JSHER
Status: | Merged |
---|---|
Merge reported by: | JSHER |
Merged at revision: | not available |
Proposed branch: | lp:~joel-sher/openvista-gtm-integration/kidsbuild |
Merge into: | lp:openvista-gtm-integration |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~joel-sher/openvista-gtm-integration/kidsbuild |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
JSHER | Approve | ||
Review via email: mp+6097@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
JSHER (joel-sher) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added directory 'kids' | |||
2 | === added file 'kids/MSCZJOB_6.KID' | |||
3 | --- kids/MSCZJOB_6.KID 1970-01-01 00:00:00 +0000 | |||
4 | +++ kids/MSCZJOB_6.KID 2009-04-17 17:48:03 +0000 | |||
5 | @@ -0,0 +1,6098 @@ | |||
6 | 1 | KIDS Distribution saved on Apr 17, 2009@10:21:46 | ||
7 | 2 | GTM CHANGES | ||
8 | 3 | **KIDS**:MSCZJOB*0.1*6^ | ||
9 | 4 | |||
10 | 5 | **INSTALL NAME** | ||
11 | 6 | MSCZJOB*0.1*6 | ||
12 | 7 | "BLD",6833,0) | ||
13 | 8 | MSCZJOB*0.1*6^^0^3090417^y | ||
14 | 9 | "BLD",6833,1,0) | ||
15 | 10 | ^^1^1^3070625^ | ||
16 | 11 | "BLD",6833,1,1,0) | ||
17 | 12 | SYSTEM STATUS AND JOBEXAM FOR GT.M | ||
18 | 13 | "BLD",6833,4,0) | ||
19 | 14 | ^9.64PA^^ | ||
20 | 15 | "BLD",6833,6.3) | ||
21 | 16 | 30 | ||
22 | 17 | "BLD",6833,"KRN",0) | ||
23 | 18 | ^9.67PA^8989.52^19 | ||
24 | 19 | "BLD",6833,"KRN",.4,0) | ||
25 | 20 | .4 | ||
26 | 21 | "BLD",6833,"KRN",.401,0) | ||
27 | 22 | .401 | ||
28 | 23 | "BLD",6833,"KRN",.402,0) | ||
29 | 24 | .402 | ||
30 | 25 | "BLD",6833,"KRN",.403,0) | ||
31 | 26 | .403 | ||
32 | 27 | "BLD",6833,"KRN",.403,"NM",0) | ||
33 | 28 | ^9.68A^2^2 | ||
34 | 29 | "BLD",6833,"KRN",.403,"NM",1,0) | ||
35 | 30 | MSCZJOBEXAM FILE #3.081^3.081^0 | ||
36 | 31 | "BLD",6833,"KRN",.403,"NM",2,0) | ||
37 | 32 | MSCZLOCK FILE #3.081^3.081^0 | ||
38 | 33 | "BLD",6833,"KRN",.403,"NM","B","MSCZJOBEXAM FILE #3.081",1) | ||
39 | 34 | |||
40 | 35 | "BLD",6833,"KRN",.403,"NM","B","MSCZLOCK FILE #3.081",2) | ||
41 | 36 | |||
42 | 37 | "BLD",6833,"KRN",.5,0) | ||
43 | 38 | .5 | ||
44 | 39 | "BLD",6833,"KRN",.84,0) | ||
45 | 40 | .84 | ||
46 | 41 | "BLD",6833,"KRN",3.6,0) | ||
47 | 42 | 3.6 | ||
48 | 43 | "BLD",6833,"KRN",3.8,0) | ||
49 | 44 | 3.8 | ||
50 | 45 | "BLD",6833,"KRN",9.2,0) | ||
51 | 46 | 9.2 | ||
52 | 47 | "BLD",6833,"KRN",9.8,0) | ||
53 | 48 | 9.8 | ||
54 | 49 | "BLD",6833,"KRN",9.8,"NM",0) | ||
55 | 50 | ^9.68A^25^19 | ||
56 | 51 | "BLD",6833,"KRN",9.8,"NM",1,0) | ||
57 | 52 | MSCZJOB^^0^B12797960 | ||
58 | 53 | "BLD",6833,"KRN",9.8,"NM",4,0) | ||
59 | 54 | MSCZJOBU^^0^B3546679 | ||
60 | 55 | "BLD",6833,"KRN",9.8,"NM",5,0) | ||
61 | 56 | ZIS4GTM^^0^B18414491 | ||
62 | 57 | "BLD",6833,"KRN",9.8,"NM",7,0) | ||
63 | 58 | XTER1A^^0^B29045171 | ||
64 | 59 | "BLD",6833,"KRN",9.8,"NM",8,0) | ||
65 | 60 | ZU^^0^B9872646 | ||
66 | 61 | "BLD",6833,"KRN",9.8,"NM",11,0) | ||
67 | 62 | ZCD^^0^B5581 | ||
68 | 63 | "BLD",6833,"KRN",9.8,"NM",13,0) | ||
69 | 64 | ZOSV2GTM^^0^B6700455 | ||
70 | 65 | "BLD",6833,"KRN",9.8,"NM",14,0) | ||
71 | 66 | ZOSFGUX^^0^B22117954 | ||
72 | 67 | "BLD",6833,"KRN",9.8,"NM",15,0) | ||
73 | 68 | ZISHGUX^^0^B37875330 | ||
74 | 69 | "BLD",6833,"KRN",9.8,"NM",16,0) | ||
75 | 70 | HLCSTCP1^^0^B29662559 | ||
76 | 71 | "BLD",6833,"KRN",9.8,"NM",17,0) | ||
77 | 72 | HLCSTCP^^0^B32199902 | ||
78 | 73 | "BLD",6833,"KRN",9.8,"NM",18,0) | ||
79 | 74 | HLCSLNCH^^0^B37355917 | ||
80 | 75 | "BLD",6833,"KRN",9.8,"NM",19,0) | ||
81 | 76 | XOBVLL^^0^B18038185 | ||
82 | 77 | "BLD",6833,"KRN",9.8,"NM",20,0) | ||
83 | 78 | XOBVRH^^0^B13028891 | ||
84 | 79 | "BLD",6833,"KRN",9.8,"NM",21,0) | ||
85 | 80 | XOBVSKT^^0^B19778790 | ||
86 | 81 | "BLD",6833,"KRN",9.8,"NM",22,0) | ||
87 | 82 | XOBVTCPL^^0^B13529543 | ||
88 | 83 | "BLD",6833,"KRN",9.8,"NM",23,0) | ||
89 | 84 | XWBTCPM^^0^B56160723 | ||
90 | 85 | "BLD",6833,"KRN",9.8,"NM",24,0) | ||
91 | 86 | ZTMGRSET^^0^B48490586 | ||
92 | 87 | "BLD",6833,"KRN",9.8,"NM",25,0) | ||
93 | 88 | ZISTCPS^^0^B18372148 | ||
94 | 89 | "BLD",6833,"KRN",9.8,"NM","B","HLCSLNCH",18) | ||
95 | 90 | |||
96 | 91 | "BLD",6833,"KRN",9.8,"NM","B","HLCSTCP",17) | ||
97 | 92 | |||
98 | 93 | "BLD",6833,"KRN",9.8,"NM","B","HLCSTCP1",16) | ||
99 | 94 | |||
100 | 95 | "BLD",6833,"KRN",9.8,"NM","B","MSCZJOB",1) | ||
101 | 96 | |||
102 | 97 | "BLD",6833,"KRN",9.8,"NM","B","MSCZJOBU",4) | ||
103 | 98 | |||
104 | 99 | "BLD",6833,"KRN",9.8,"NM","B","XOBVLL",19) | ||
105 | 100 | |||
106 | 101 | "BLD",6833,"KRN",9.8,"NM","B","XOBVRH",20) | ||
107 | 102 | |||
108 | 103 | "BLD",6833,"KRN",9.8,"NM","B","XOBVSKT",21) | ||
109 | 104 | |||
110 | 105 | "BLD",6833,"KRN",9.8,"NM","B","XOBVTCPL",22) | ||
111 | 106 | |||
112 | 107 | "BLD",6833,"KRN",9.8,"NM","B","XTER1A",7) | ||
113 | 108 | |||
114 | 109 | "BLD",6833,"KRN",9.8,"NM","B","XWBTCPM",23) | ||
115 | 110 | |||
116 | 111 | "BLD",6833,"KRN",9.8,"NM","B","ZCD",11) | ||
117 | 112 | |||
118 | 113 | "BLD",6833,"KRN",9.8,"NM","B","ZIS4GTM",5) | ||
119 | 114 | |||
120 | 115 | "BLD",6833,"KRN",9.8,"NM","B","ZISHGUX",15) | ||
121 | 116 | |||
122 | 117 | "BLD",6833,"KRN",9.8,"NM","B","ZISTCPS",25) | ||
123 | 118 | |||
124 | 119 | "BLD",6833,"KRN",9.8,"NM","B","ZOSFGUX",14) | ||
125 | 120 | |||
126 | 121 | "BLD",6833,"KRN",9.8,"NM","B","ZOSV2GTM",13) | ||
127 | 122 | |||
128 | 123 | "BLD",6833,"KRN",9.8,"NM","B","ZTMGRSET",24) | ||
129 | 124 | |||
130 | 125 | "BLD",6833,"KRN",9.8,"NM","B","ZU",8) | ||
131 | 126 | |||
132 | 127 | "BLD",6833,"KRN",19,0) | ||
133 | 128 | 19 | ||
134 | 129 | "BLD",6833,"KRN",19,"NM",0) | ||
135 | 130 | ^9.68A^2^2 | ||
136 | 131 | "BLD",6833,"KRN",19,"NM",1,0) | ||
137 | 132 | MSCZJOB^^0 | ||
138 | 133 | "BLD",6833,"KRN",19,"NM",2,0) | ||
139 | 134 | MSCZLOCK^^0 | ||
140 | 135 | "BLD",6833,"KRN",19,"NM","B","MSCZJOB",1) | ||
141 | 136 | |||
142 | 137 | "BLD",6833,"KRN",19,"NM","B","MSCZLOCK",2) | ||
143 | 138 | |||
144 | 139 | "BLD",6833,"KRN",19.1,0) | ||
145 | 140 | 19.1 | ||
146 | 141 | "BLD",6833,"KRN",101,0) | ||
147 | 142 | 101 | ||
148 | 143 | "BLD",6833,"KRN",409.61,0) | ||
149 | 144 | 409.61 | ||
150 | 145 | "BLD",6833,"KRN",771,0) | ||
151 | 146 | 771 | ||
152 | 147 | "BLD",6833,"KRN",870,0) | ||
153 | 148 | 870 | ||
154 | 149 | "BLD",6833,"KRN",8989.51,0) | ||
155 | 150 | 8989.51 | ||
156 | 151 | "BLD",6833,"KRN",8989.52,0) | ||
157 | 152 | 8989.52 | ||
158 | 153 | "BLD",6833,"KRN",8994,0) | ||
159 | 154 | 8994 | ||
160 | 155 | "BLD",6833,"KRN","B",.4,.4) | ||
161 | 156 | |||
162 | 157 | "BLD",6833,"KRN","B",.401,.401) | ||
163 | 158 | |||
164 | 159 | "BLD",6833,"KRN","B",.402,.402) | ||
165 | 160 | |||
166 | 161 | "BLD",6833,"KRN","B",.403,.403) | ||
167 | 162 | |||
168 | 163 | "BLD",6833,"KRN","B",.5,.5) | ||
169 | 164 | |||
170 | 165 | "BLD",6833,"KRN","B",.84,.84) | ||
171 | 166 | |||
172 | 167 | "BLD",6833,"KRN","B",3.6,3.6) | ||
173 | 168 | |||
174 | 169 | "BLD",6833,"KRN","B",3.8,3.8) | ||
175 | 170 | |||
176 | 171 | "BLD",6833,"KRN","B",9.2,9.2) | ||
177 | 172 | |||
178 | 173 | "BLD",6833,"KRN","B",9.8,9.8) | ||
179 | 174 | |||
180 | 175 | "BLD",6833,"KRN","B",19,19) | ||
181 | 176 | |||
182 | 177 | "BLD",6833,"KRN","B",19.1,19.1) | ||
183 | 178 | |||
184 | 179 | "BLD",6833,"KRN","B",101,101) | ||
185 | 180 | |||
186 | 181 | "BLD",6833,"KRN","B",409.61,409.61) | ||
187 | 182 | |||
188 | 183 | "BLD",6833,"KRN","B",771,771) | ||
189 | 184 | |||
190 | 185 | "BLD",6833,"KRN","B",870,870) | ||
191 | 186 | |||
192 | 187 | "BLD",6833,"KRN","B",8989.51,8989.51) | ||
193 | 188 | |||
194 | 189 | "BLD",6833,"KRN","B",8989.52,8989.52) | ||
195 | 190 | |||
196 | 191 | "BLD",6833,"KRN","B",8994,8994) | ||
197 | 192 | |||
198 | 193 | "BLD",6833,"MSC") | ||
199 | 194 | /home/jsher/MSCZJOB_6.KID | ||
200 | 195 | "BLD",6833,"MSCOM") | ||
201 | 196 | LOCKS ON SEPARATE PAGE, UNLOCK AND KILL IN GTM | ||
202 | 197 | "KRN",.403,116,-1) | ||
203 | 198 | 0^1 | ||
204 | 199 | "KRN",.403,116,0) | ||
205 | 200 | MSCZJOBEXAM^ ^@^^3070530.1755^^^3.081^0^1^1 | ||
206 | 201 | "KRN",.403,116,12) | ||
207 | 202 | |||
208 | 203 | "KRN",.403,116,21) | ||
209 | 204 | |||
210 | 205 | "KRN",.403,116,40,0) | ||
211 | 206 | ^.4031I^3^3 | ||
212 | 207 | "KRN",.403,116,40,1,0) | ||
213 | 208 | 1^^1,1^^^1^17,80 | ||
214 | 209 | "KRN",.403,116,40,1,1) | ||
215 | 210 | Page 1 | ||
216 | 211 | "KRN",.403,116,40,1,40,0) | ||
217 | 212 | ^.4032IP^427^2 | ||
218 | 213 | "KRN",.403,116,40,1,40,426,0) | ||
219 | 214 | MSCZJOBEXAM^4^3,2^e | ||
220 | 215 | "KRN",.403,116,40,1,40,426,2) | ||
221 | 216 | 13^^u^^1 | ||
222 | 217 | "KRN",.403,116,40,1,40,426,"COMP MUL") | ||
223 | 218 | D COMPMUL^MSCZJOB | ||
224 | 219 | "KRN",.403,116,40,1,40,426,"COMP MUL PTR") | ||
225 | 220 | |||
226 | 221 | "KRN",.403,116,40,1,40,427,0) | ||
227 | 222 | MSCZJOBEXAM HDR^1^1,2^d | ||
228 | 223 | "KRN",.403,116,40,2,0) | ||
229 | 224 | 2^^1,1^^^1^18,79 | ||
230 | 225 | "KRN",.403,116,40,2,1) | ||
231 | 226 | Page 2 | ||
232 | 227 | "KRN",.403,116,40,2,40,0) | ||
233 | 228 | ^.4032IP^431^3 | ||
234 | 229 | "KRN",.403,116,40,2,40,428,0) | ||
235 | 230 | MSCZJOBEXAM 2^1^1,1^e | ||
236 | 231 | "KRN",.403,116,40,2,40,429,0) | ||
237 | 232 | MSCZJOBVARS^3^8,3^e | ||
238 | 233 | "KRN",.403,116,40,2,40,429,2) | ||
239 | 234 | 9^^f^^1 | ||
240 | 235 | "KRN",.403,116,40,2,40,429,"COMP MUL") | ||
241 | 236 | D COMPVARS^MSCZJOB | ||
242 | 237 | "KRN",.403,116,40,2,40,431,0) | ||
243 | 238 | MSCZJOBSTACK^4^3,3^e | ||
244 | 239 | "KRN",.403,116,40,2,40,431,2) | ||
245 | 240 | 3^ | ||
246 | 241 | "KRN",.403,116,40,2,40,431,"COMP MUL") | ||
247 | 242 | D COMPSTK^MSCZJOB | ||
248 | 243 | "KRN",.403,116,40,3,0) | ||
249 | 244 | 3^^4,4^^^1^15,70 | ||
250 | 245 | "KRN",.403,116,40,3,1) | ||
251 | 246 | Page 3 | ||
252 | 247 | "KRN",.403,116,40,3,40,0) | ||
253 | 248 | ^.4032IP^430^1 | ||
254 | 249 | "KRN",.403,116,40,3,40,430,0) | ||
255 | 250 | MSCZJOBLOCKS^1^2,3^e | ||
256 | 251 | "KRN",.403,116,40,3,40,430,2) | ||
257 | 252 | 6^ | ||
258 | 253 | "KRN",.403,116,40,3,40,430,"COMP MUL") | ||
259 | 254 | D COMPLKS^MSCZJOB | ||
260 | 255 | "KRN",.403,116,21400) | ||
261 | 256 | 1 | ||
262 | 257 | "KRN",.403,117,-1) | ||
263 | 258 | 0^2 | ||
264 | 259 | "KRN",.403,117,0) | ||
265 | 260 | MSCZLOCK^ ^@^^3070530.1755^^^3.081^0^1^1 | ||
266 | 261 | "KRN",.403,117,40,0) | ||
267 | 262 | ^.4031I^1^1 | ||
268 | 263 | "KRN",.403,117,40,1,0) | ||
269 | 264 | 1^^1,1^^^0^17,80 | ||
270 | 265 | "KRN",.403,117,40,1,1) | ||
271 | 266 | Page 1 | ||
272 | 267 | "KRN",.403,117,40,1,40,0) | ||
273 | 268 | ^.4032IP^433^2 | ||
274 | 269 | "KRN",.403,117,40,1,40,432,0) | ||
275 | 270 | MSCZLOCKEXAM^4^3,2^e | ||
276 | 271 | "KRN",.403,117,40,1,40,432,2) | ||
277 | 272 | 13^^u^^1 | ||
278 | 273 | "KRN",.403,117,40,1,40,432,"COMP MUL") | ||
279 | 274 | D COMPLK^MSCZJOB | ||
280 | 275 | "KRN",.403,117,40,1,40,433,0) | ||
281 | 276 | MSCZJOBLOCK HDR^1^1,1^d | ||
282 | 277 | "KRN",.404,426,0) | ||
283 | 278 | MSCZJOBEXAM^3.081 | ||
284 | 279 | "KRN",.404,426,40,0) | ||
285 | 280 | ^.4044I^5^5 | ||
286 | 281 | "KRN",.404,426,40,1,0) | ||
287 | 282 | 1^^2^^JOB NUMBER | ||
288 | 283 | "KRN",.404,426,40,1,2) | ||
289 | 284 | 1,2^6 | ||
290 | 285 | "KRN",.404,426,40,1,3) | ||
291 | 286 | !M | ||
292 | 287 | "KRN",.404,426,40,1,3.1) | ||
293 | 288 | S Y=$$JOB^MSCZJOB(D0) S:Y=$J Y=Y_"*" | ||
294 | 289 | "KRN",.404,426,40,1,4) | ||
295 | 290 | ^^^2 | ||
296 | 291 | "KRN",.404,426,40,1,10) | ||
297 | 292 | S DDSSTACK=2,MSCJOBD0=D0,MSCJOBID=$P(MSCZJOB(D0),U) | ||
298 | 293 | "KRN",.404,426,40,1,20) | ||
299 | 294 | F | ||
300 | 295 | "KRN",.404,426,40,2,0) | ||
301 | 296 | 2^^2^^DEVICE | ||
302 | 297 | "KRN",.404,426,40,2,2) | ||
303 | 298 | 1,9^23 | ||
304 | 299 | "KRN",.404,426,40,2,3) | ||
305 | 300 | !M | ||
306 | 301 | "KRN",.404,426,40,2,3.1) | ||
307 | 302 | S Y=$$DEV^MSCZJOB(D0) | ||
308 | 303 | "KRN",.404,426,40,2,4) | ||
309 | 304 | ^^^1 | ||
310 | 305 | "KRN",.404,426,40,2,20) | ||
311 | 306 | F | ||
312 | 307 | "KRN",.404,426,40,3,0) | ||
313 | 308 | 4^^2^^NAMESPACE | ||
314 | 309 | "KRN",.404,426,40,3,2) | ||
315 | 310 | 1,48^11 | ||
316 | 311 | "KRN",.404,426,40,3,3) | ||
317 | 312 | !M | ||
318 | 313 | "KRN",.404,426,40,3,3.1) | ||
319 | 314 | S Y=$$NSP^MSCZJOB(D0) | ||
320 | 315 | "KRN",.404,426,40,3,4) | ||
321 | 316 | ^^^1 | ||
322 | 317 | "KRN",.404,426,40,3,20) | ||
323 | 318 | F | ||
324 | 319 | "KRN",.404,426,40,4,0) | ||
325 | 320 | 5^^2^^ROUTINE | ||
326 | 321 | "KRN",.404,426,40,4,2) | ||
327 | 322 | 1,60^18 | ||
328 | 323 | "KRN",.404,426,40,4,3) | ||
329 | 324 | !M | ||
330 | 325 | "KRN",.404,426,40,4,3.1) | ||
331 | 326 | S Y=$$ROUTINE^MSCZJOB(D0) | ||
332 | 327 | "KRN",.404,426,40,4,4) | ||
333 | 328 | ^^^1 | ||
334 | 329 | "KRN",.404,426,40,4,20) | ||
335 | 330 | F^U | ||
336 | 331 | "KRN",.404,426,40,5,0) | ||
337 | 332 | 3^^2^^USER | ||
338 | 333 | "KRN",.404,426,40,5,2) | ||
339 | 334 | 1,33^14 | ||
340 | 335 | "KRN",.404,426,40,5,3) | ||
341 | 336 | !M | ||
342 | 337 | "KRN",.404,426,40,5,3.1) | ||
343 | 338 | S Y=$$USER^MSCZJOB(D0) | ||
344 | 339 | "KRN",.404,426,40,5,4) | ||
345 | 340 | ^^^1 | ||
346 | 341 | "KRN",.404,426,40,5,20) | ||
347 | 342 | F | ||
348 | 343 | "KRN",.404,427,0) | ||
349 | 344 | MSCZJOBEXAM HDR^3.081^ | ||
350 | 345 | "KRN",.404,427,40,0) | ||
351 | 346 | ^.4044I^2^2 | ||
352 | 347 | "KRN",.404,427,40,1,0) | ||
353 | 348 | 1^Process Device User Namespace Routine ^1 | ||
354 | 349 | "KRN",.404,427,40,1,2) | ||
355 | 350 | ^^2,1 | ||
356 | 351 | "KRN",.404,427,40,2,0) | ||
357 | 352 | 2^!M^1 | ||
358 | 353 | "KRN",.404,427,40,2,.1) | ||
359 | 354 | S Y=$$GET1^DIQ(8989.3,1,.01) | ||
360 | 355 | "KRN",.404,427,40,2,2) | ||
361 | 356 | ^^1,28 | ||
362 | 357 | "KRN",.404,428,0) | ||
363 | 358 | MSCZJOBEXAM 2^3.081 | ||
364 | 359 | "KRN",.404,428,40,0) | ||
365 | 360 | ^.4044I^7^7 | ||
366 | 361 | "KRN",.404,428,40,1,0) | ||
367 | 362 | 1^Job^2^^JOB NUMBER | ||
368 | 363 | "KRN",.404,428,40,1,2) | ||
369 | 364 | 2,8^6^2,3 | ||
370 | 365 | "KRN",.404,428,40,1,3) | ||
371 | 366 | !M | ||
372 | 367 | "KRN",.404,428,40,1,3.1) | ||
373 | 368 | S Y=$$JOB^MSCZJOB(MSCJOBD0) | ||
374 | 369 | "KRN",.404,428,40,1,20) | ||
375 | 370 | N | ||
376 | 371 | "KRN",.404,428,40,2,0) | ||
377 | 372 | 2^NSpace^2^^NAMESPACE | ||
378 | 373 | "KRN",.404,428,40,2,2) | ||
379 | 374 | 2,24^11^2,16 | ||
380 | 375 | "KRN",.404,428,40,2,3) | ||
381 | 376 | !M | ||
382 | 377 | "KRN",.404,428,40,2,3.1) | ||
383 | 378 | S Y=$$NSP^MSCZJOB(MSCJOBD0) | ||
384 | 379 | "KRN",.404,428,40,2,4) | ||
385 | 380 | ^^^2 | ||
386 | 381 | "KRN",.404,428,40,2,20) | ||
387 | 382 | F | ||
388 | 383 | "KRN",.404,428,40,3,0) | ||
389 | 384 | 3^Routine^2 | ||
390 | 385 | "KRN",.404,428,40,3,2) | ||
391 | 386 | 2,46^16^2,37 | ||
392 | 387 | "KRN",.404,428,40,3,3) | ||
393 | 388 | !M | ||
394 | 389 | "KRN",.404,428,40,3,3.1) | ||
395 | 390 | S Y=$$ROUTINE^MSCZJOB(MSCJOBD0) | ||
396 | 391 | "KRN",.404,428,40,3,4) | ||
397 | 392 | ^^^2 | ||
398 | 393 | "KRN",.404,428,40,3,20) | ||
399 | 394 | F^U | ||
400 | 395 | "KRN",.404,428,40,4,0) | ||
401 | 396 | 4^^2^^USER | ||
402 | 397 | "KRN",.404,428,40,4,2) | ||
403 | 398 | 2,63^14 | ||
404 | 399 | "KRN",.404,428,40,4,3) | ||
405 | 400 | !M | ||
406 | 401 | "KRN",.404,428,40,4,3.1) | ||
407 | 402 | S Y=$$USER^MSCZJOB(MSCJOBD0) | ||
408 | 403 | "KRN",.404,428,40,4,4) | ||
409 | 404 | ^^^2 | ||
410 | 405 | "KRN",.404,428,40,4,20) | ||
411 | 406 | F | ||
412 | 407 | "KRN",.404,428,40,5,0) | ||
413 | 408 | 5^Device^2^^DEVICE | ||
414 | 409 | "KRN",.404,428,40,5,2) | ||
415 | 410 | 3,24^38^3,16 | ||
416 | 411 | "KRN",.404,428,40,5,3) | ||
417 | 412 | !M | ||
418 | 413 | "KRN",.404,428,40,5,3.1) | ||
419 | 414 | S Y=$$DEV^MSCZJOB(MSCJOBD0) | ||
420 | 415 | "KRN",.404,428,40,5,4) | ||
421 | 416 | ^^^1 | ||
422 | 417 | "KRN",.404,428,40,5,20) | ||
423 | 418 | F^U | ||
424 | 419 | "KRN",.404,428,40,6,0) | ||
425 | 420 | 4.4^LOCKs^2^^LOCKS | ||
426 | 421 | "KRN",.404,428,40,6,2) | ||
427 | 422 | 3,10^3^3,3 | ||
428 | 423 | "KRN",.404,428,40,6,3) | ||
429 | 424 | !M | ||
430 | 425 | "KRN",.404,428,40,6,3.1) | ||
431 | 426 | S Y=$$LOCKS^MSCZJOB | ||
432 | 427 | "KRN",.404,428,40,6,10) | ||
433 | 428 | S DDSSTACK=3 | ||
434 | 429 | "KRN",.404,428,40,6,20) | ||
435 | 430 | N | ||
436 | 431 | "KRN",.404,428,40,7,0) | ||
437 | 432 | 6^KILL JOB?^2^^KILL | ||
438 | 433 | "KRN",.404,428,40,7,2) | ||
439 | 434 | 3,74^3^3,63 | ||
440 | 435 | "KRN",.404,428,40,7,13) | ||
441 | 436 | N X,Y I DDSEXT="YES" D KILL^MSCZJOB(MSCJOBID) | ||
442 | 437 | "KRN",.404,428,40,7,20) | ||
443 | 438 | Y | ||
444 | 439 | "KRN",.404,429,0) | ||
445 | 440 | MSCZJOBVARS^3.081 | ||
446 | 441 | "KRN",.404,429,40,0) | ||
447 | 442 | ^.4044I^3^3 | ||
448 | 443 | "KRN",.404,429,40,1,0) | ||
449 | 444 | 1^^2^^VARIABLE NAME | ||
450 | 445 | "KRN",.404,429,40,1,2) | ||
451 | 446 | 1,1^24 | ||
452 | 447 | "KRN",.404,429,40,1,3) | ||
453 | 448 | !M | ||
454 | 449 | "KRN",.404,429,40,1,3.1) | ||
455 | 450 | S Y=$P(@MSC@(MSCJOBID,"V",D0),"=") | ||
456 | 451 | "KRN",.404,429,40,1,4) | ||
457 | 452 | ^^^2 | ||
458 | 453 | "KRN",.404,429,40,1,20) | ||
459 | 454 | F | ||
460 | 455 | "KRN",.404,429,40,2,0) | ||
461 | 456 | 2^^2^^VALUE OF VARIABLE | ||
462 | 457 | "KRN",.404,429,40,2,2) | ||
463 | 458 | 1,28^48 | ||
464 | 459 | "KRN",.404,429,40,2,3) | ||
465 | 460 | !M | ||
466 | 461 | "KRN",.404,429,40,2,3.1) | ||
467 | 462 | S Y=$P(@MSC@(MSCJOBID,"V",D0),"=",2,999) | ||
468 | 463 | "KRN",.404,429,40,2,4) | ||
469 | 464 | ^^^2 | ||
470 | 465 | "KRN",.404,429,40,2,20) | ||
471 | 466 | F^U | ||
472 | 467 | "KRN",.404,429,40,3,0) | ||
473 | 468 | 1.5^=^1 | ||
474 | 469 | "KRN",.404,429,40,3,2) | ||
475 | 470 | ^^1,26 | ||
476 | 471 | "KRN",.404,430,0) | ||
477 | 472 | MSCZJOBLOCKS^3.081^ | ||
478 | 473 | "KRN",.404,430,40,0) | ||
479 | 474 | ^.4044I^2^2 | ||
480 | 475 | "KRN",.404,430,40,1,0) | ||
481 | 476 | 1^^2^^LOCKS | ||
482 | 477 | "KRN",.404,430,40,1,2) | ||
483 | 478 | 2,1^47 | ||
484 | 479 | "KRN",.404,430,40,1,3) | ||
485 | 480 | !M | ||
486 | 481 | "KRN",.404,430,40,1,3.1) | ||
487 | 482 | S Y=@MSC@(MSCJOBID,"L",D0) | ||
488 | 483 | "KRN",.404,430,40,1,4) | ||
489 | 484 | ^^^2 | ||
490 | 485 | "KRN",.404,430,40,1,20) | ||
491 | 486 | F^U | ||
492 | 487 | "KRN",.404,430,40,2,0) | ||
493 | 488 | 2^UNLOCK?^2^^UNLOCK | ||
494 | 489 | "KRN",.404,430,40,2,2) | ||
495 | 490 | 2,58^3^2,49^1 | ||
496 | 491 | "KRN",.404,430,40,2,13) | ||
497 | 492 | I DDSEXT="YES" D UNLOCK^MSCZJOB(D0) | ||
498 | 493 | "KRN",.404,430,40,2,20) | ||
499 | 494 | Y | ||
500 | 495 | "KRN",.404,431,0) | ||
501 | 496 | MSCZJOBSTACK^3.081 | ||
502 | 497 | "KRN",.404,431,40,0) | ||
503 | 498 | ^.4044I^1^1 | ||
504 | 499 | "KRN",.404,431,40,1,0) | ||
505 | 500 | 1^^2^^STACK | ||
506 | 501 | "KRN",.404,431,40,1,2) | ||
507 | 502 | 2,1^75 | ||
508 | 503 | "KRN",.404,431,40,1,3) | ||
509 | 504 | !M | ||
510 | 505 | "KRN",.404,431,40,1,3.1) | ||
511 | 506 | S Y=$$STACK^MSCZJOB(D0) | ||
512 | 507 | "KRN",.404,431,40,1,4) | ||
513 | 508 | ^^^2 | ||
514 | 509 | "KRN",.404,431,40,1,20) | ||
515 | 510 | F^U | ||
516 | 511 | "KRN",.404,432,0) | ||
517 | 512 | MSCZLOCKEXAM^3.081 | ||
518 | 513 | "KRN",.404,432,40,0) | ||
519 | 514 | ^.4044I^5^5 | ||
520 | 515 | "KRN",.404,432,40,1,0) | ||
521 | 516 | 1^^2^^JOB NUMBER | ||
522 | 517 | "KRN",.404,432,40,1,2) | ||
523 | 518 | 1,2^6 | ||
524 | 519 | "KRN",.404,432,40,1,3) | ||
525 | 520 | !M | ||
526 | 521 | "KRN",.404,432,40,1,3.1) | ||
527 | 522 | S Y=$P($G(MSCZLK(D0)),U,5) S:Y=$J Y=Y_"*" | ||
528 | 523 | "KRN",.404,432,40,1,4) | ||
529 | 524 | ^^^2 | ||
530 | 525 | "KRN",.404,432,40,1,10) | ||
531 | 526 | S DDSSTACK=2,MSCJOBD0=D0,MSCJOBID=$P(MSCZJOB(D0),U) | ||
532 | 527 | "KRN",.404,432,40,1,20) | ||
533 | 528 | F | ||
534 | 529 | "KRN",.404,432,40,2,0) | ||
535 | 530 | 2^^2^^LOCK | ||
536 | 531 | "KRN",.404,432,40,2,2) | ||
537 | 532 | 1,9^23 | ||
538 | 533 | "KRN",.404,432,40,2,3) | ||
539 | 534 | !M | ||
540 | 535 | "KRN",.404,432,40,2,3.1) | ||
541 | 536 | S Y=$TR($P($G(MSCZLK(D0)),U),"~") | ||
542 | 537 | "KRN",.404,432,40,2,4) | ||
543 | 538 | ^^^1 | ||
544 | 539 | "KRN",.404,432,40,2,20) | ||
545 | 540 | F | ||
546 | 541 | "KRN",.404,432,40,3,0) | ||
547 | 542 | 4^^2^^ROUTINE | ||
548 | 543 | "KRN",.404,432,40,3,2) | ||
549 | 544 | 1,48^25 | ||
550 | 545 | "KRN",.404,432,40,3,3) | ||
551 | 546 | !M | ||
552 | 547 | "KRN",.404,432,40,3,3.1) | ||
553 | 548 | S Y=$TR($P($G(MSCZLK(D0)),U,3),$C(126),U) | ||
554 | 549 | "KRN",.404,432,40,3,4) | ||
555 | 550 | ^^^1 | ||
556 | 551 | "KRN",.404,432,40,3,20) | ||
557 | 552 | F^U | ||
558 | 553 | "KRN",.404,432,40,4,0) | ||
559 | 554 | 5^^2^^UNLOCK | ||
560 | 555 | "KRN",.404,432,40,4,2) | ||
561 | 556 | 1,76^3 | ||
562 | 557 | "KRN",.404,432,40,4,3) | ||
563 | 558 | !M | ||
564 | 559 | "KRN",.404,432,40,4,4) | ||
565 | 560 | ^^^0 | ||
566 | 561 | "KRN",.404,432,40,4,13) | ||
567 | 562 | I DDSEXT="YES" D UNL^MSCZJOB(D0) | ||
568 | 563 | "KRN",.404,432,40,4,20) | ||
569 | 564 | Y^U | ||
570 | 565 | "KRN",.404,432,40,5,0) | ||
571 | 566 | 3^^2^^USER | ||
572 | 567 | "KRN",.404,432,40,5,2) | ||
573 | 568 | 1,33^14 | ||
574 | 569 | "KRN",.404,432,40,5,3) | ||
575 | 570 | !M | ||
576 | 571 | "KRN",.404,432,40,5,3.1) | ||
577 | 572 | S Y=$P($G(MSCZLK(D0)),U,2) | ||
578 | 573 | "KRN",.404,432,40,5,4) | ||
579 | 574 | ^^^1 | ||
580 | 575 | "KRN",.404,432,40,5,20) | ||
581 | 576 | F | ||
582 | 577 | "KRN",.404,433,0) | ||
583 | 578 | MSCZJOBLOCK HDR^3.081 | ||
584 | 579 | "KRN",.404,433,40,0) | ||
585 | 580 | ^.4044I^2^2 | ||
586 | 581 | "KRN",.404,433,40,1,0) | ||
587 | 582 | 1^Process Lock User Routine Unlock^1 | ||
588 | 583 | "KRN",.404,433,40,1,2) | ||
589 | 584 | ^^2,1 | ||
590 | 585 | "KRN",.404,433,40,2,0) | ||
591 | 586 | 2^!M^1 | ||
592 | 587 | "KRN",.404,433,40,2,.1) | ||
593 | 588 | S Y=$$GET1^DIQ(8989.3,1,.01) | ||
594 | 589 | "KRN",.404,433,40,2,2) | ||
595 | 590 | ^^1,28 | ||
596 | 591 | "KRN",19,13155,-1) | ||
597 | 592 | 0^1 | ||
598 | 593 | "KRN",19,13155,0) | ||
599 | 594 | MSCZJOB^JOB EXAMINE^^R^^^^^^^^ | ||
600 | 595 | "KRN",19,13155,1,0) | ||
601 | 596 | ^^1^1^3070623^ | ||
602 | 597 | "KRN",19,13155,1,1,0) | ||
603 | 598 | DESIGNED FOR GT.M | ||
604 | 599 | "KRN",19,13155,25) | ||
605 | 600 | MSCZJOB | ||
606 | 601 | "KRN",19,13155,"U") | ||
607 | 602 | JOB EXAMINE | ||
608 | 603 | "KRN",19,13162,-1) | ||
609 | 604 | 0^2 | ||
610 | 605 | "KRN",19,13162,0) | ||
611 | 606 | MSCZLOCK^LOCK EXAMINE^^R^^^^^^^^ | ||
612 | 607 | "KRN",19,13162,1,0) | ||
613 | 608 | ^^1^1^3070623^ | ||
614 | 609 | "KRN",19,13162,1,1,0) | ||
615 | 610 | DESIGNED FOR GT.M | ||
616 | 611 | "KRN",19,13162,25) | ||
617 | 612 | LOCK^MSCZJOB | ||
618 | 613 | "KRN",19,13162,"U") | ||
619 | 614 | LOCK EXAMINE | ||
620 | 615 | "MBREQ") | ||
621 | 616 | 0 | ||
622 | 617 | "ORD",8,.403) | ||
623 | 618 | .403;8;;;EDEOUT^DIFROMSO(.403,DA,"",XPDA);FPRE^DIFROMSI(.403,"",XPDA);EPRE^DIFROMSI(.403,DA,$E("N",$G(XPDNEW)),XPDA,"",OLDA);;EPOST^DIFROMSI(.403,DA,"",XPDA);DEL^DIFROMSK(.403,"",%) | ||
624 | 619 | "ORD",8,.403,0) | ||
625 | 620 | FORM | ||
626 | 621 | "ORD",18,19) | ||
627 | 622 | 19;18;;;OPT^XPDTA;OPTF1^XPDIA;OPTE1^XPDIA;OPTF2^XPDIA;;OPTDEL^XPDIA | ||
628 | 623 | "ORD",18,19,0) | ||
629 | 624 | OPTION | ||
630 | 625 | "QUES","XPF1",0) | ||
631 | 626 | Y | ||
632 | 627 | "QUES","XPF1","??") | ||
633 | 628 | ^D REP^XPDH | ||
634 | 629 | "QUES","XPF1","A") | ||
635 | 630 | Shall I write over your |FLAG| File | ||
636 | 631 | "QUES","XPF1","B") | ||
637 | 632 | YES | ||
638 | 633 | "QUES","XPF1","M") | ||
639 | 634 | D XPF1^XPDIQ | ||
640 | 635 | "QUES","XPF2",0) | ||
641 | 636 | Y | ||
642 | 637 | "QUES","XPF2","??") | ||
643 | 638 | ^D DTA^XPDH | ||
644 | 639 | "QUES","XPF2","A") | ||
645 | 640 | Want my data |FLAG| yours | ||
646 | 641 | "QUES","XPF2","B") | ||
647 | 642 | YES | ||
648 | 643 | "QUES","XPF2","M") | ||
649 | 644 | D XPF2^XPDIQ | ||
650 | 645 | "QUES","XPI1",0) | ||
651 | 646 | YO | ||
652 | 647 | "QUES","XPI1","??") | ||
653 | 648 | ^D INHIBIT^XPDH | ||
654 | 649 | "QUES","XPI1","A") | ||
655 | 650 | Want KIDS to INHIBIT LOGONs during the install | ||
656 | 651 | "QUES","XPI1","B") | ||
657 | 652 | YES | ||
658 | 653 | "QUES","XPI1","M") | ||
659 | 654 | D XPI1^XPDIQ | ||
660 | 655 | "QUES","XPM1",0) | ||
661 | 656 | PO^VA(200,:EM | ||
662 | 657 | "QUES","XPM1","??") | ||
663 | 658 | ^D MG^XPDH | ||
664 | 659 | "QUES","XPM1","A") | ||
665 | 660 | Enter the Coordinator for Mail Group '|FLAG|' | ||
666 | 661 | "QUES","XPM1","B") | ||
667 | 662 | |||
668 | 663 | "QUES","XPM1","M") | ||
669 | 664 | D XPM1^XPDIQ | ||
670 | 665 | "QUES","XPO1",0) | ||
671 | 666 | Y | ||
672 | 667 | "QUES","XPO1","??") | ||
673 | 668 | ^D MENU^XPDH | ||
674 | 669 | "QUES","XPO1","A") | ||
675 | 670 | Want KIDS to Rebuild Menu Trees Upon Completion of Install | ||
676 | 671 | "QUES","XPO1","B") | ||
677 | 672 | YES | ||
678 | 673 | "QUES","XPO1","M") | ||
679 | 674 | D XPO1^XPDIQ | ||
680 | 675 | "QUES","XPZ1",0) | ||
681 | 676 | Y | ||
682 | 677 | "QUES","XPZ1","??") | ||
683 | 678 | ^D OPT^XPDH | ||
684 | 679 | "QUES","XPZ1","A") | ||
685 | 680 | Want to DISABLE Scheduled Options, Menu Options, and Protocols | ||
686 | 681 | "QUES","XPZ1","B") | ||
687 | 682 | YES | ||
688 | 683 | "QUES","XPZ1","M") | ||
689 | 684 | D XPZ1^XPDIQ | ||
690 | 685 | "QUES","XPZ2",0) | ||
691 | 686 | Y | ||
692 | 687 | "QUES","XPZ2","??") | ||
693 | 688 | ^D RTN^XPDH | ||
694 | 689 | "QUES","XPZ2","A") | ||
695 | 690 | Want to MOVE routines to other CPUs | ||
696 | 691 | "QUES","XPZ2","B") | ||
697 | 692 | NO | ||
698 | 693 | "QUES","XPZ2","M") | ||
699 | 694 | D XPZ2^XPDIQ | ||
700 | 695 | "RTN") | ||
701 | 696 | 19 | ||
702 | 697 | "RTN","HLCSLNCH") | ||
703 | 698 | 0^18^B37355917 | ||
704 | 699 | "RTN","HLCSLNCH",1,0) | ||
705 | 700 | HLCSLNCH ;ALB/MTC/JC MSC/JDA - START AND STOP THE LLP ;12/31/2003 17:37 | ||
706 | 701 | "RTN","HLCSLNCH",2,0) | ||
707 | 702 | ;;1.6;HEALTH LEVEL SEVEN;**6,19,43,49,57,75,84,109,MSC**;Oct 13, 1995 | ||
708 | 703 | "RTN","HLCSLNCH",3,0) | ||
709 | 704 | ; | ||
710 | 705 | "RTN","HLCSLNCH",4,0) | ||
711 | 706 | ;This program is callable from a menu | ||
712 | 707 | "RTN","HLCSLNCH",5,0) | ||
713 | 708 | ;It allows the user to Start and Stop the Lower Layer | ||
714 | 709 | "RTN","HLCSLNCH",6,0) | ||
715 | 710 | ;Protocol in the Background or in the foreground | ||
716 | 711 | "RTN","HLCSLNCH",7,0) | ||
717 | 712 | ; | ||
718 | 713 | "RTN","HLCSLNCH",8,0) | ||
719 | 714 | ;Required or Optional INPUT PARAMETERS | ||
720 | 715 | "RTN","HLCSLNCH",9,0) | ||
721 | 716 | ; None | ||
722 | 717 | "RTN","HLCSLNCH",10,0) | ||
723 | 718 | ; | ||
724 | 719 | "RTN","HLCSLNCH",11,0) | ||
725 | 720 | ; | ||
726 | 721 | "RTN","HLCSLNCH",12,0) | ||
727 | 722 | ;Output variables | ||
728 | 723 | "RTN","HLCSLNCH",13,0) | ||
729 | 724 | ; HLDP=IEN of Logical Link in file #870 | ||
730 | 725 | "RTN","HLCSLNCH",14,0) | ||
731 | 726 | ;(optional)HLTRACE=if SET it launches the LLP in the Foreground | ||
732 | 727 | "RTN","HLCSLNCH",15,0) | ||
733 | 728 | ;(optional) ZTSK=if defined LLP was launched in the | ||
734 | 729 | "RTN","HLCSLNCH",16,0) | ||
735 | 730 | ;background | ||
736 | 731 | "RTN","HLCSLNCH",17,0) | ||
737 | 732 | ; | ||
738 | 733 | "RTN","HLCSLNCH",18,0) | ||
739 | 734 | ; | ||
740 | 735 | "RTN","HLCSLNCH",19,0) | ||
741 | 736 | START ; Start up the lower level protocol | ||
742 | 737 | "RTN","HLCSLNCH",20,0) | ||
743 | 738 | N DIC,DIRUT,DTOUT,DUOUT,HLDP,HLDAPP,HLJ,HLQUIT,HLTRACE | ||
744 | 739 | "RTN","HLCSLNCH",21,0) | ||
745 | 740 | N HLPARM0,HLPARM4,HLTYPTR,HLBGR,X,Y,ZTCPU,ZTSK,ZTRTN,ZTDESC | ||
746 | 741 | "RTN","HLCSLNCH",22,0) | ||
747 | 742 | W !!,"This option is used to launch the lower level protocol for the" | ||
748 | 743 | "RTN","HLCSLNCH",23,0) | ||
749 | 744 | W !,"appropriate device. Please select the node with which you want" | ||
750 | 745 | "RTN","HLCSLNCH",24,0) | ||
751 | 746 | W !,"to communicate",! | ||
752 | 747 | "RTN","HLCSLNCH",25,0) | ||
753 | 748 | S DIC="^HLCS(870,",DIC(0)="QEAMZ" D ^DIC G:Y<0 STARTQ | ||
754 | 749 | "RTN","HLCSLNCH",26,0) | ||
755 | 750 | S HLDP=+Y,HLDAPP=Y(0,0),HLTYPTR=+$P(Y(0),U,3),HLPARM0=Y(0) | ||
756 | 751 | "RTN","HLCSLNCH",27,0) | ||
757 | 752 | ;-- check if parameter have been setup | ||
758 | 753 | "RTN","HLCSLNCH",28,0) | ||
759 | 754 | ;-- check for LLP type | ||
760 | 755 | "RTN","HLCSLNCH",29,0) | ||
761 | 756 | I 'HLTYPTR W !,$C(7),"A Lower Layer Protocol must be selected before start-up can occur." G STARTQ | ||
762 | 757 | "RTN","HLCSLNCH",30,0) | ||
763 | 758 | ;-- get TCP information | ||
764 | 759 | "RTN","HLCSLNCH",31,0) | ||
765 | 760 | S HLPARM4=$G(^HLCS(870,HLDP,400)) | ||
766 | 761 | "RTN","HLCSLNCH",32,0) | ||
767 | 762 | ;-- get routine (background job for LLP) | ||
768 | 763 | "RTN","HLCSLNCH",33,0) | ||
769 | 764 | S HLBGR=$G(^HLCS(869.1,HLTYPTR,100)) | ||
770 | 765 | "RTN","HLCSLNCH",34,0) | ||
771 | 766 | ;-- get environment check routine (HLQUIT should be defined in fails) | ||
772 | 767 | "RTN","HLCSLNCH",35,0) | ||
773 | 768 | S HLENV=$G(^HLCS(869.1,HLTYPTR,200)) | ||
774 | 769 | "RTN","HLCSLNCH",36,0) | ||
775 | 770 | ; | ||
776 | 771 | "RTN","HLCSLNCH",37,0) | ||
777 | 772 | I HLBGR="" W !,$C(7),"No routine has been specified for this LLP." G STARTQ | ||
778 | 773 | "RTN","HLCSLNCH",38,0) | ||
779 | 774 | ; | ||
780 | 775 | "RTN","HLCSLNCH",39,0) | ||
781 | 776 | ;-- execute environment check routine if HLQUIT is defined then terminate | ||
782 | 777 | "RTN","HLCSLNCH",40,0) | ||
783 | 778 | I HLENV'="" X HLENV G:$D(HLQUIT) STARTQ | ||
784 | 779 | "RTN","HLCSLNCH",41,0) | ||
785 | 780 | ;Multi-Servers, only enable the link if not OpenM | ||
786 | 781 | "RTN","HLCSLNCH",42,0) | ||
787 | 782 | I $P(HLPARM4,U,3)="M",$$NOTMULTI D G STARTQ | ||
788 | 783 | "RTN","HLCSLNCH",43,0) | ||
789 | 784 | . W !,$C(7),"This LLP is a multi-threaded server. It is controlled by external service, i.e. TCPIP/UCX. You must use the external service to start this LLP." | ||
790 | 785 | "RTN","HLCSLNCH",44,0) | ||
791 | 786 | . Q | ||
792 | 787 | "RTN","HLCSLNCH",45,0) | ||
793 | 788 | ; | ||
794 | 789 | "RTN","HLCSLNCH",46,0) | ||
795 | 790 | I $P(HLPARM0,U,10) W !,$C(7),"The LLP was last started on ",$$DAT2^HLUTIL1($P(HLPARM0,U,10)),"." G STP1:$P(HLPARM0,U,5)'="Error" | ||
796 | 791 | "RTN","HLCSLNCH",47,0) | ||
797 | 792 | I $P(HLPARM0,U,11) W !,"The LLP was last shutdown on ",$$DAT2^HLUTIL1($P(HLPARM0,U,11)),"." | ||
798 | 793 | "RTN","HLCSLNCH",48,0) | ||
799 | 794 | I $P(HLPARM0,U,5)'="Error",'($P(HLPARM4,U,3)="C"&("N"[$P(HLPARM4,U,4))),$P(HLPARM0,U,10)]""&($P(HLPARM0,U,11)=""),$P(HLPARM0,U,12) W !,"The LLP appears to be online already !" | ||
800 | 795 | "RTN","HLCSLNCH",49,0) | ||
801 | 796 | I $$TASK^HLUTIL1($P(HLPARM0,U,12)) D G STARTQ | ||
802 | 797 | "RTN","HLCSLNCH",50,0) | ||
803 | 798 | . W !,$C(7),"NOTE: The lower level protocol for this application is already running." | ||
804 | 799 | "RTN","HLCSLNCH",51,0) | ||
805 | 800 | I $P(HLPARM4,U,3)="C"&("N"[$P(HLPARM4,U,4)) D G STARTQ | ||
806 | 801 | "RTN","HLCSLNCH",52,0) | ||
807 | 802 | .;4=status 9=Time Started, 10=Time Stopped, 11=Task Number | ||
808 | 803 | "RTN","HLCSLNCH",53,0) | ||
809 | 804 | .;14=Shutdown LLP, 3=Device Type, 18=Gross Errors | ||
810 | 805 | "RTN","HLCSLNCH",54,0) | ||
811 | 806 | .N HLJ,X | ||
812 | 807 | "RTN","HLCSLNCH",55,0) | ||
813 | 808 | .I $P(HLPARM0,U,15)=0 W !,"This LLP is already enabled!" Q | ||
814 | 809 | "RTN","HLCSLNCH",56,0) | ||
815 | 810 | .L +^HLCS(870,HLDP,0):2 | ||
816 | 811 | "RTN","HLCSLNCH",57,0) | ||
817 | 812 | .E W !,$C(7),"Unable to enable this LLP !" Q | ||
818 | 813 | "RTN","HLCSLNCH",58,0) | ||
819 | 814 | .S X="HLJ(870,"""_HLDP_","")" | ||
820 | 815 | "RTN","HLCSLNCH",59,0) | ||
821 | 816 | .S @X@(4)="Enabled",@X@(9)=$$NOW^XLFDT,@X@(14)=0 | ||
822 | 817 | "RTN","HLCSLNCH",60,0) | ||
823 | 818 | .D FILE^HLDIE("","HLJ","","START","HLCSLNCH") ;HL*1.6*109 | ||
824 | 819 | "RTN","HLCSLNCH",61,0) | ||
825 | 820 | .L -^HLCS(870,HLDP,0) | ||
826 | 821 | "RTN","HLCSLNCH",62,0) | ||
827 | 822 | .W !,"This LLP has been enabled!" | ||
828 | 823 | "RTN","HLCSLNCH",63,0) | ||
829 | 824 | .Q | ||
830 | 825 | "RTN","HLCSLNCH",64,0) | ||
831 | 826 | I $P(HLPARM4,U,6),$D(^%ZIS(14.7,+$P(HLPARM4,U,6),0)) S ZTCPU=$P(^(0),U) W !,"This LLP will start on node ",ZTCPU," if it is run in the Background.",! | ||
832 | 827 | "RTN","HLCSLNCH",65,0) | ||
833 | 828 | ; | ||
834 | 829 | "RTN","HLCSLNCH",66,0) | ||
835 | 830 | W ! S DIR(0)="SM^F:FOREGROUND;B:BACKGROUND;Q:QUIT" | ||
836 | 831 | "RTN","HLCSLNCH",67,0) | ||
837 | 832 | S DIR("A")="Method for running the receiver" | ||
838 | 833 | "RTN","HLCSLNCH",68,0) | ||
839 | 834 | S DIR("B")="B" | ||
840 | 835 | "RTN","HLCSLNCH",69,0) | ||
841 | 836 | S DIR("?",1)="Enter F for Foreground (and trace)" | ||
842 | 837 | "RTN","HLCSLNCH",70,0) | ||
843 | 838 | S DIR("?",2)=" B for Background (normal) or" | ||
844 | 839 | "RTN","HLCSLNCH",71,0) | ||
845 | 840 | S DIR("?")=" Q to quit without starting the receiver" | ||
846 | 841 | "RTN","HLCSLNCH",72,0) | ||
847 | 842 | D ^DIR K DIR | ||
848 | 843 | "RTN","HLCSLNCH",73,0) | ||
849 | 844 | Q:(Y=U)!(Y="Q") | ||
850 | 845 | "RTN","HLCSLNCH",74,0) | ||
851 | 846 | ; | ||
852 | 847 | "RTN","HLCSLNCH",75,0) | ||
853 | 848 | S HLX=$G(^HLCS(870,HLDP,0)) | ||
854 | 849 | "RTN","HLCSLNCH",76,0) | ||
855 | 850 | ;-- foreground | ||
856 | 851 | "RTN","HLCSLNCH",77,0) | ||
857 | 852 | I Y="F" S HLTRACE=1 D G STARTQ | ||
858 | 853 | "RTN","HLCSLNCH",78,0) | ||
859 | 854 | . X HLBGR | ||
860 | 855 | "RTN","HLCSLNCH",79,0) | ||
861 | 856 | ;-- background | ||
862 | 857 | "RTN","HLCSLNCH",80,0) | ||
863 | 858 | I Y="B" D G STARTQ | ||
864 | 859 | "RTN","HLCSLNCH",81,0) | ||
865 | 860 | . S ZTRTN=$P(HLBGR," ",2),HLTRACE="",ZTIO="",ZTDTH=$H | ||
866 | 861 | "RTN","HLCSLNCH",82,0) | ||
867 | 862 | . S ZTDESC=HLDAPP_" Low Level Protocol",ZTSAVE("HLDP")="" | ||
868 | 863 | "RTN","HLCSLNCH",83,0) | ||
869 | 864 | . D ^%ZTLOAD | ||
870 | 865 | "RTN","HLCSLNCH",84,0) | ||
871 | 866 | . W !,$S($D(ZTSK):"Job was queued as "_ZTSK_".",1:"Unable to queue job.") | ||
872 | 867 | "RTN","HLCSLNCH",85,0) | ||
873 | 868 | ; | ||
874 | 869 | "RTN","HLCSLNCH",86,0) | ||
875 | 870 | Q | ||
876 | 871 | "RTN","HLCSLNCH",87,0) | ||
877 | 872 | ; | ||
878 | 873 | "RTN","HLCSLNCH",88,0) | ||
879 | 874 | ; | ||
880 | 875 | "RTN","HLCSLNCH",89,0) | ||
881 | 876 | STARTQ ; | ||
882 | 877 | "RTN","HLCSLNCH",90,0) | ||
883 | 878 | I $G(POP) W !,?5,"-Unable to Open the Device !",!,!,?6,"Check that Port is Logged Out, and that the",!,?6,"Lower Level Protocol is not Already Running." | ||
884 | 879 | "RTN","HLCSLNCH",91,0) | ||
885 | 880 | Q | ||
886 | 881 | "RTN","HLCSLNCH",92,0) | ||
887 | 882 | ; | ||
888 | 883 | "RTN","HLCSLNCH",93,0) | ||
889 | 884 | STOP ; Shut down a lower level protocol.. | ||
890 | 885 | "RTN","HLCSLNCH",94,0) | ||
891 | 886 | N DIC,DIRUT,DTOUT,DUOUT,HLDP,HLDAPP,HLJ,HLPARM0,HLPARM4,X,Y | ||
892 | 887 | "RTN","HLCSLNCH",95,0) | ||
893 | 888 | W !!,"This option is used to shut down the lower level protocol for the" | ||
894 | 889 | "RTN","HLCSLNCH",96,0) | ||
895 | 890 | W !,"appropriate device. Please select the link which you would" | ||
896 | 891 | "RTN","HLCSLNCH",97,0) | ||
897 | 892 | W !,"like to shutdown.",! | ||
898 | 893 | "RTN","HLCSLNCH",98,0) | ||
899 | 894 | S DIC="^HLCS(870,",DIC(0)="QEAMZ" D ^DIC K DIC Q:Y<0 | ||
900 | 895 | "RTN","HLCSLNCH",99,0) | ||
901 | 896 | S HLDP=+Y,HLDAPP=Y(0,0),HLPARM0=Y(0),HLPARM4=$G(^HLCS(870,HLDP,400)) | ||
902 | 897 | "RTN","HLCSLNCH",100,0) | ||
903 | 898 | I $P(HLPARM4,U,3)="M",$$NOTMULTI D Q | ||
904 | 899 | "RTN","HLCSLNCH",101,0) | ||
905 | 900 | . W !,$C(7),"This LLP is a multi-threaded server. It is controlled by external service, i.e. UCX. You must use the external service to disable this LLP." | ||
906 | 901 | "RTN","HLCSLNCH",102,0) | ||
907 | 902 | . Q | ||
908 | 903 | "RTN","HLCSLNCH",103,0) | ||
909 | 904 | ; | ||
910 | 905 | "RTN","HLCSLNCH",104,0) | ||
911 | 906 | I $P(HLPARM0,U,15) W !,$C(7),"The lower level protocol is already ",$P(HLPARM0,U,5),"." Q | ||
912 | 907 | "RTN","HLCSLNCH",105,0) | ||
913 | 908 | I $P(HLPARM0,U,10) W !,$C(7),"The lower level protocol was started on ",$$DAT2^HLUTIL1($P(HLPARM0,U,10)),"." | ||
914 | 909 | "RTN","HLCSLNCH",106,0) | ||
915 | 910 | STP1 ; | ||
916 | 911 | "RTN","HLCSLNCH",107,0) | ||
917 | 912 | W ! S DIR(0)="Y",DIR("A")="Okay to shut down this job" D ^DIR K DIR | ||
918 | 913 | "RTN","HLCSLNCH",108,0) | ||
919 | 914 | I 'Y!($D(DIRUT))!($D(DUOUT)) W !!,"The job will not be shut down." Q | ||
920 | 915 | "RTN","HLCSLNCH",109,0) | ||
921 | 916 | S ; | ||
922 | 917 | "RTN","HLCSLNCH",110,0) | ||
923 | 918 | F L +^HLCS(870,HLDP,0):2 Q:$T | ||
924 | 919 | "RTN","HLCSLNCH",111,0) | ||
925 | 920 | ;4=status,10=Time Stopped,9=Time Started,11=Task Number,3=Device Type,14=shutdown | ||
926 | 921 | "RTN","HLCSLNCH",112,0) | ||
927 | 922 | S X="HLJ(870,"""_HLDP_","")",@X@(4)="Halting",@X@(10)=$$NOW^XLFDT,(@X@(11),@X@(9))="@",@X@(14)=1 | ||
928 | 923 | "RTN","HLCSLNCH",113,0) | ||
929 | 924 | I $P(HLPARM4,U,3)="C"&("N"[$P(HLPARM4,U,4)),'$P(HLPARM0,U,12) S @X@(4)="Shutdown" | ||
930 | 925 | "RTN","HLCSLNCH",114,0) | ||
931 | 926 | D FILE^HLDIE("","HLJ","","STOP","HLCSLNCH") ; HL*1.6*109 | ||
932 | 927 | "RTN","HLCSLNCH",115,0) | ||
933 | 928 | I ^%ZOSF("OS")["OpenM",(($P(HLPARM4,U,3)="M"&($$OS^%ZOSV'["VMS"))!($P(HLPARM4,U,3)="S")) D | ||
934 | 929 | "RTN","HLCSLNCH",116,0) | ||
935 | 930 | . ;pass task number to stop listener | ||
936 | 931 | "RTN","HLCSLNCH",117,0) | ||
937 | 932 | . S:$P(HLPARM0,U,12) X=$$ASKSTOP^%ZTLOAD(+$P(HLPARM0,U,12)) | ||
938 | 933 | "RTN","HLCSLNCH",118,0) | ||
939 | 934 | . D CALL^%ZISTCP($P(HLPARM4,U),$P(HLPARM4,U,2),10) | ||
940 | 935 | "RTN","HLCSLNCH",119,0) | ||
941 | 936 | . I POP D HOME^%ZIS U IO W !,"Unable to shutdown logical link!!!",$C(7),$C(7) Q | ||
942 | 937 | "RTN","HLCSLNCH",120,0) | ||
943 | 938 | . U IO W "**STOP**" | ||
944 | 939 | "RTN","HLCSLNCH",121,0) | ||
945 | 940 | . W ! | ||
946 | 941 | "RTN","HLCSLNCH",122,0) | ||
947 | 942 | . D CLOSE^%ZISTCP | ||
948 | 943 | "RTN","HLCSLNCH",123,0) | ||
949 | 944 | L -^HLCS(870,HLDP,0) | ||
950 | 945 | "RTN","HLCSLNCH",124,0) | ||
951 | 946 | W !,"The job for the "_HLDAPP_" Lower Level Protocol will be shut down." | ||
952 | 947 | "RTN","HLCSLNCH",125,0) | ||
953 | 948 | Q | ||
954 | 949 | "RTN","HLCSLNCH",126,0) | ||
955 | 950 | ; | ||
956 | 951 | "RTN","HLCSLNCH",127,0) | ||
957 | 952 | NOTMULTI() ; Returns 1 if implementation can't run multithreaded listener | ||
958 | 953 | "RTN","HLCSLNCH",128,0) | ||
959 | 954 | Q:^%ZOSF("OS")["GT.M" 0 | ||
960 | 955 | "RTN","HLCSLNCH",129,0) | ||
961 | 956 | Q $S(^%ZOSF("OS")'["OpenM":1,1:$$OS^%ZOSV["VMS") | ||
962 | 957 | "RTN","HLCSLNCH",130,0) | ||
963 | 958 | STOPQ Q | ||
964 | 959 | "RTN","HLCSTCP") | ||
965 | 960 | 0^17^B32199902 | ||
966 | 961 | "RTN","HLCSTCP",1,0) | ||
967 | 962 | HLCSTCP ;SFIRMFO/TNV-ALB/JFP,PKE MSC/JDA- (TCP/IP) MLLP ;12/31/2003 18:03 | ||
968 | 963 | "RTN","HLCSTCP",2,0) | ||
969 | 964 | ;;1.6;HEALTH LEVEL SEVEN;**19,43,49,57,58,64,84,109,MSC**;Oct 13, 1995 | ||
970 | 965 | "RTN","HLCSTCP",3,0) | ||
971 | 966 | ; | ||
972 | 967 | "RTN","HLCSTCP",4,0) | ||
973 | 968 | ; This is an implementation of the HL7 Minimal Lower Layer Protocol | ||
974 | 969 | "RTN","HLCSTCP",5,0) | ||
975 | 970 | ; | ||
976 | 971 | "RTN","HLCSTCP",6,0) | ||
977 | 972 | ;taskman entry/startup option, HLDP defined in menu entry, | ||
978 | 973 | "RTN","HLCSTCP",7,0) | ||
979 | 974 | Q:'$D(HLDP) | ||
980 | 975 | "RTN","HLCSTCP",8,0) | ||
981 | 976 | N HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL | ||
982 | 977 | "RTN","HLCSTCP",9,0) | ||
983 | 978 | ;HLCSOUT= 1-error | ||
984 | 979 | "RTN","HLCSTCP",10,0) | ||
985 | 980 | I '$$INIT D EXITS("Init Error") Q | ||
986 | 981 | "RTN","HLCSTCP",11,0) | ||
987 | 982 | ; Start the client | ||
988 | 983 | "RTN","HLCSTCP",12,0) | ||
989 | 984 | I $G(HLTCPCS)="C" D Q | ||
990 | 985 | "RTN","HLCSTCP",13,0) | ||
991 | 986 | . ; identify process for ^%SY | ||
992 | 987 | "RTN","HLCSTCP",14,0) | ||
993 | 988 | . D SETNM^%ZOSV($E("HLClnt:"_HLDP,1,15)) | ||
994 | 989 | "RTN","HLCSTCP",15,0) | ||
995 | 990 | . D ST1 | ||
996 | 991 | "RTN","HLCSTCP",16,0) | ||
997 | 992 | . F D ^HLCSTCP2 Q:$$STOP!$G(HLCSOUT) | ||
998 | 993 | "RTN","HLCSTCP",17,0) | ||
999 | 994 | . I $G(HLCSOUT)=1 D MON("Error") H 1 Q | ||
1000 | 995 | "RTN","HLCSTCP",18,0) | ||
1001 | 996 | . I $G(HLCSOUT)=2 D EXITS("Inactive") Q | ||
1002 | 997 | "RTN","HLCSTCP",19,0) | ||
1003 | 998 | . D EXITS("Shutdown") | ||
1004 | 999 | "RTN","HLCSTCP",20,0) | ||
1005 | 1000 | ; | ||
1006 | 1001 | "RTN","HLCSTCP",21,0) | ||
1007 | 1002 | ; identify process for ^%SY | ||
1008 | 1003 | "RTN","HLCSTCP",22,0) | ||
1009 | 1004 | D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15)) | ||
1010 | 1005 | "RTN","HLCSTCP",23,0) | ||
1011 | 1006 | ;HLCSFAIL=1 port failed to open | ||
1012 | 1007 | "RTN","HLCSTCP",24,0) | ||
1013 | 1008 | S HLCSFAIL=1 | ||
1014 | 1009 | "RTN","HLCSTCP",25,0) | ||
1015 | 1010 | ;single threaded listener | ||
1016 | 1011 | "RTN","HLCSTCP",26,0) | ||
1017 | 1012 | I $G(HLTCPCS)="S" D Q | ||
1018 | 1013 | "RTN","HLCSTCP",27,0) | ||
1019 | 1014 | . D ST1,MON("Listen"),LISTEN^%ZISTCP(HLTCPORT,"SERVER^HLCSTCP("""_HLDP_""")") | ||
1020 | 1015 | "RTN","HLCSTCP",28,0) | ||
1021 | 1016 | . ;couldn't open listener port | ||
1022 | 1017 | "RTN","HLCSTCP",29,0) | ||
1023 | 1018 | . I HLCSFAIL D EXITS("Openfail") Q | ||
1024 | 1019 | "RTN","HLCSTCP",30,0) | ||
1025 | 1020 | ; | ||
1026 | 1021 | "RTN","HLCSTCP",31,0) | ||
1027 | 1022 | ;multi-threaded listener (OpenM or GT.M) | ||
1028 | 1023 | "RTN","HLCSTCP",32,0) | ||
1029 | 1024 | I $G(HLTCPCS)="M",(^%ZOSF("OS")["OpenM")!(^%ZOSF("OS")["GT.M") D Q | ||
1030 | 1025 | "RTN","HLCSTCP",33,0) | ||
1031 | 1026 | . D ST1,MON("Listen"),LISTEN^%ZISTCPS(HLTCPORT,"SERVERS^HLCSTCP("""_HLDP_""")") | ||
1032 | 1027 | "RTN","HLCSTCP",34,0) | ||
1033 | 1028 | Q | ||
1034 | 1029 | "RTN","HLCSTCP",35,0) | ||
1035 | 1030 | ; | ||
1036 | 1031 | "RTN","HLCSTCP",36,0) | ||
1037 | 1032 | SERVER(HLDP) ; single server using Taskman | ||
1038 | 1033 | "RTN","HLCSTCP",37,0) | ||
1039 | 1034 | S HLCSFAIL=0 | ||
1040 | 1035 | "RTN","HLCSTCP",38,0) | ||
1041 | 1036 | I '$$INIT D EXITS("Init error") Q | ||
1042 | 1037 | "RTN","HLCSTCP",39,0) | ||
1043 | 1038 | D ^HLCSTCP1 | ||
1044 | 1039 | "RTN","HLCSTCP",40,0) | ||
1045 | 1040 | I $$STOP D CLOSE^%ZISTCP,EXITS("Shutdown") S IO("C")="" Q | ||
1046 | 1041 | "RTN","HLCSTCP",41,0) | ||
1047 | 1042 | Q:$G(HLCSOUT)=1 | ||
1048 | 1043 | "RTN","HLCSTCP",42,0) | ||
1049 | 1044 | D MON("Idle") | ||
1050 | 1045 | "RTN","HLCSTCP",43,0) | ||
1051 | 1046 | Q | ||
1052 | 1047 | "RTN","HLCSTCP",44,0) | ||
1053 | 1048 | ; | ||
1054 | 1049 | "RTN","HLCSTCP",45,0) | ||
1055 | 1050 | SERVERS(HLDP) ; Multi-threaded server using Taskman | ||
1056 | 1051 | "RTN","HLCSTCP",46,0) | ||
1057 | 1052 | I '$$INIT D EXITS("Init error") Q | ||
1058 | 1053 | "RTN","HLCSTCP",47,0) | ||
1059 | 1054 | G LISTEN | ||
1060 | 1055 | "RTN","HLCSTCP",48,0) | ||
1061 | 1056 | ; | ||
1062 | 1057 | "RTN","HLCSTCP",49,0) | ||
1063 | 1058 | ;multiple process servers, called from an external utility | ||
1064 | 1059 | "RTN","HLCSTCP",50,0) | ||
1065 | 1060 | MSM ;MSM entry point, called from User-Defined Services | ||
1066 | 1061 | "RTN","HLCSTCP",51,0) | ||
1067 | 1062 | ;HLDP=ien in the HL LOWER LEVEL PROTOCOL PARAMETER file for the | ||
1068 | 1063 | "RTN","HLCSTCP",52,0) | ||
1069 | 1064 | ;HL7 Multi-Threaded SERVER | ||
1070 | 1065 | "RTN","HLCSTCP",53,0) | ||
1071 | 1066 | S (IO,IO(0))=$P | ||
1072 | 1067 | "RTN","HLCSTCP",54,0) | ||
1073 | 1068 | G LISTEN | ||
1074 | 1069 | "RTN","HLCSTCP",55,0) | ||
1075 | 1070 | ; | ||
1076 | 1071 | "RTN","HLCSTCP",56,0) | ||
1077 | 1072 | CACHEVMS(%) ;Cache'/VMS tcpip/ucx entry point, called from HLSEVEN.COM file, | ||
1078 | 1073 | "RTN","HLCSTCP",57,0) | ||
1079 | 1074 | ;listener, % = HLDP | ||
1080 | 1075 | "RTN","HLCSTCP",58,0) | ||
1081 | 1076 | I $G(%)="" D ^%ZTER Q | ||
1082 | 1077 | "RTN","HLCSTCP",59,0) | ||
1083 | 1078 | S (IO,IO(0))="SYS$NET",HLDP=% | ||
1084 | 1079 | "RTN","HLCSTCP",60,0) | ||
1085 | 1080 | ; **Cache'/VMS specific code** | ||
1086 | 1081 | "RTN","HLCSTCP",61,0) | ||
1087 | 1082 | O IO::5 E D MON("Openfail") Q | ||
1088 | 1083 | "RTN","HLCSTCP",62,0) | ||
1089 | 1084 | X "U IO:(::""-M"")" ;Packet mode like DSM | ||
1090 | 1085 | "RTN","HLCSTCP",63,0) | ||
1091 | 1086 | D LISTEN C IO Q | ||
1092 | 1087 | "RTN","HLCSTCP",64,0) | ||
1093 | 1088 | ; | ||
1094 | 1089 | "RTN","HLCSTCP",65,0) | ||
1095 | 1090 | EN ;vms ucx entry point, called from HLSEVEN.COM file, | ||
1096 | 1091 | "RTN","HLCSTCP",66,0) | ||
1097 | 1092 | ;listener, % = device^HLDP | ||
1098 | 1093 | "RTN","HLCSTCP",67,0) | ||
1099 | 1094 | I $G(%)="" D ^%ZTER Q | ||
1100 | 1095 | "RTN","HLCSTCP",68,0) | ||
1101 | 1096 | S (IO,IO(0))="SYS$NET",HLDP=$P(%,"^",2) | ||
1102 | 1097 | "RTN","HLCSTCP",69,0) | ||
1103 | 1098 | ; **VMS specific code, need to share device** | ||
1104 | 1099 | "RTN","HLCSTCP",70,0) | ||
1105 | 1100 | X "O IO:(TCPDEV):60" E D MON("Openfail") Q | ||
1106 | 1101 | "RTN","HLCSTCP",71,0) | ||
1107 | 1102 | LISTEN ; | ||
1108 | 1103 | "RTN","HLCSTCP",72,0) | ||
1109 | 1104 | N HLLSTN,HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL | ||
1110 | 1105 | "RTN","HLCSTCP",73,0) | ||
1111 | 1106 | I '$$INIT D ^%ZTER Q | ||
1112 | 1107 | "RTN","HLCSTCP",74,0) | ||
1113 | 1108 | ; identify process for ^%SY | ||
1114 | 1109 | "RTN","HLCSTCP",75,0) | ||
1115 | 1110 | D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15)) | ||
1116 | 1111 | "RTN","HLCSTCP",76,0) | ||
1117 | 1112 | ;HLLSTN used to identify a listener to tag MON | ||
1118 | 1113 | "RTN","HLCSTCP",77,0) | ||
1119 | 1114 | S HLLSTN=1 | ||
1120 | 1115 | "RTN","HLCSTCP",78,0) | ||
1121 | 1116 | ;increment job count, run server | ||
1122 | 1117 | "RTN","HLCSTCP",79,0) | ||
1123 | 1118 | D UPDT(1),^HLCSTCP1,EXITM | ||
1124 | 1119 | "RTN","HLCSTCP",80,0) | ||
1125 | 1120 | Q | ||
1126 | 1121 | "RTN","HLCSTCP",81,0) | ||
1127 | 1122 | ; | ||
1128 | 1123 | "RTN","HLCSTCP",82,0) | ||
1129 | 1124 | DCOPEN(HLDP) ;open direct connect - called from HLMA2 | ||
1130 | 1125 | "RTN","HLCSTCP",83,0) | ||
1131 | 1126 | Q:'$$INIT 0 | ||
1132 | 1127 | "RTN","HLCSTCP",84,0) | ||
1133 | 1128 | Q:HLTCPADD=""!(HLTCPORT="") 0 | ||
1134 | 1129 | "RTN","HLCSTCP",85,0) | ||
1135 | 1130 | Q:'$$OPEN^HLCSTCP2 0 | ||
1136 | 1131 | "RTN","HLCSTCP",86,0) | ||
1137 | 1132 | Q 1 | ||
1138 | 1133 | "RTN","HLCSTCP",87,0) | ||
1139 | 1134 | ; | ||
1140 | 1135 | "RTN","HLCSTCP",88,0) | ||
1141 | 1136 | INIT() ; Initialize Variables | ||
1142 | 1137 | "RTN","HLCSTCP",89,0) | ||
1143 | 1138 | ; HLDP should be set to the IEN or name of Logical Link, file 870 | ||
1144 | 1139 | "RTN","HLCSTCP",90,0) | ||
1145 | 1140 | S HLOS=$P($G(^%ZOSF("OS")),"^") | ||
1146 | 1141 | "RTN","HLCSTCP",91,0) | ||
1147 | 1142 | N DA,DIQUIET,DR,TMP,X,Y | ||
1148 | 1143 | "RTN","HLCSTCP",92,0) | ||
1149 | 1144 | S DIQUIET=1 | ||
1150 | 1145 | "RTN","HLCSTCP",93,0) | ||
1151 | 1146 | D DT^DICRW | ||
1152 | 1147 | "RTN","HLCSTCP",94,0) | ||
1153 | 1148 | I 'HLDP S HLDP=$O(^HLCS(870,"B",HLDP,0)) I 'HLDP Q 0 | ||
1154 | 1149 | "RTN","HLCSTCP",95,0) | ||
1155 | 1150 | S DA=HLDP | ||
1156 | 1151 | "RTN","HLCSTCP",96,0) | ||
1157 | 1152 | S DR="200.02;200.021;200.03;200.04;200.05;200.09;400.01;400.02;400.03;400.04;400.05" | ||
1158 | 1153 | "RTN","HLCSTCP",97,0) | ||
1159 | 1154 | D GETS^DIQ(870,DA,DR,"IN","TMP","TMP") | ||
1160 | 1155 | "RTN","HLCSTCP",98,0) | ||
1161 | 1156 | ; | ||
1162 | 1157 | "RTN","HLCSTCP",99,0) | ||
1163 | 1158 | I $D(TMP("DIERR")) QUIT 0 | ||
1164 | 1159 | "RTN","HLCSTCP",100,0) | ||
1165 | 1160 | ; -- re-transmit attempts | ||
1166 | 1161 | "RTN","HLCSTCP",101,0) | ||
1167 | 1162 | S HLDRETR=+$G(TMP(870,DA_",",200.02,"I")) | ||
1168 | 1163 | "RTN","HLCSTCP",102,0) | ||
1169 | 1164 | ; -- exceed re-transmit action | ||
1170 | 1165 | "RTN","HLCSTCP",103,0) | ||
1171 | 1166 | S HLRETRA=$G(TMP(870,DA_",",200.021,"I")) | ||
1172 | 1167 | "RTN","HLCSTCP",104,0) | ||
1173 | 1168 | ; -- block size | ||
1174 | 1169 | "RTN","HLCSTCP",105,0) | ||
1175 | 1170 | S HLDBSIZE=+$G(TMP(870,DA_",",200.03,"I")) | ||
1176 | 1171 | "RTN","HLCSTCP",106,0) | ||
1177 | 1172 | ; -- read timeout | ||
1178 | 1173 | "RTN","HLCSTCP",107,0) | ||
1179 | 1174 | S HLDREAD=+$G(TMP(870,DA_",",200.04,"I")) | ||
1180 | 1175 | "RTN","HLCSTCP",108,0) | ||
1181 | 1176 | ; -- ack timeout | ||
1182 | 1177 | "RTN","HLCSTCP",109,0) | ||
1183 | 1178 | S HLDBACK=+$G(TMP(870,DA_",",200.05,"I")) | ||
1184 | 1179 | "RTN","HLCSTCP",110,0) | ||
1185 | 1180 | ; -- uni-directional wait | ||
1186 | 1181 | "RTN","HLCSTCP",111,0) | ||
1187 | 1182 | S HLDWAIT=$G(TMP(870,DA_",",200.09,"I")) | ||
1188 | 1183 | "RTN","HLCSTCP",112,0) | ||
1189 | 1184 | ; -- tcp address | ||
1190 | 1185 | "RTN","HLCSTCP",113,0) | ||
1191 | 1186 | S HLTCPADD=$G(TMP(870,DA_",",400.01,"I")) | ||
1192 | 1187 | "RTN","HLCSTCP",114,0) | ||
1193 | 1188 | ; -- tcp port | ||
1194 | 1189 | "RTN","HLCSTCP",115,0) | ||
1195 | 1190 | S HLTCPORT=$G(TMP(870,DA_",",400.02,"I")) | ||
1196 | 1191 | "RTN","HLCSTCP",116,0) | ||
1197 | 1192 | ; -- tcp/ip service type | ||
1198 | 1193 | "RTN","HLCSTCP",117,0) | ||
1199 | 1194 | S HLTCPCS=$G(TMP(870,DA_",",400.03,"I")) | ||
1200 | 1195 | "RTN","HLCSTCP",118,0) | ||
1201 | 1196 | ; -- link persistence | ||
1202 | 1197 | "RTN","HLCSTCP",119,0) | ||
1203 | 1198 | S HLTCPLNK=$G(TMP(870,DA_",",400.04,"I")) | ||
1204 | 1199 | "RTN","HLCSTCP",120,0) | ||
1205 | 1200 | ; -- retention | ||
1206 | 1201 | "RTN","HLCSTCP",121,0) | ||
1207 | 1202 | S HLTCPRET=$G(TMP(870,DA_",",400.05,"I")) | ||
1208 | 1203 | "RTN","HLCSTCP",122,0) | ||
1209 | 1204 | ; | ||
1210 | 1205 | "RTN","HLCSTCP",123,0) | ||
1211 | 1206 | ; -- set defaults in case something's not set | ||
1212 | 1207 | "RTN","HLCSTCP",124,0) | ||
1213 | 1208 | S:HLDREAD=0 HLDREAD=10 | ||
1214 | 1209 | "RTN","HLCSTCP",125,0) | ||
1215 | 1210 | S:HLDBACK=0 HLDBACK=60 | ||
1216 | 1211 | "RTN","HLCSTCP",126,0) | ||
1217 | 1212 | S:HLDBSIZE=0 HLDBSIZE=245 | ||
1218 | 1213 | "RTN","HLCSTCP",127,0) | ||
1219 | 1214 | S:HLDRETR=0 HLDRETR=5 | ||
1220 | 1215 | "RTN","HLCSTCP",128,0) | ||
1221 | 1216 | S:HLTCPRET="" X=$P($$PARAM^HLCS2,U,12),HLTCPRET=$S(X:X,1:15) | ||
1222 | 1217 | "RTN","HLCSTCP",129,0) | ||
1223 | 1218 | ; | ||
1224 | 1219 | "RTN","HLCSTCP",130,0) | ||
1225 | 1220 | Q 1 | ||
1226 | 1221 | "RTN","HLCSTCP",131,0) | ||
1227 | 1222 | ; | ||
1228 | 1223 | "RTN","HLCSTCP",132,0) | ||
1229 | 1224 | ST1 ;record startup in 870 for single server | ||
1230 | 1225 | "RTN","HLCSTCP",133,0) | ||
1231 | 1226 | ;4=status 9=Time Started, 10=Time Stopped, 11=Task Number | ||
1232 | 1227 | "RTN","HLCSTCP",134,0) | ||
1233 | 1228 | ;14=Shutdown LLP, 3=LLP Online, 18=Gross Errors | ||
1234 | 1229 | "RTN","HLCSTCP",135,0) | ||
1235 | 1230 | N HLJ,X | ||
1236 | 1231 | "RTN","HLCSTCP",136,0) | ||
1237 | 1232 | F L +^HLCS(870,HLDP,0):2 Q:$T | ||
1238 | 1233 | "RTN","HLCSTCP",137,0) | ||
1239 | 1234 | S X="HLJ(870,"""_HLDP_","")" | ||
1240 | 1235 | "RTN","HLCSTCP",138,0) | ||
1241 | 1236 | S @X@(4)="Init",(@X@(10),@X@(18))="@",@X@(14)=0 | ||
1242 | 1237 | "RTN","HLCSTCP",139,0) | ||
1243 | 1238 | I HLTCPCS["C" S @X@(3)=$S(HLTCPLNK["Y":"PC",1:"NC") | ||
1244 | 1239 | "RTN","HLCSTCP",140,0) | ||
1245 | 1240 | E S @X@(3)=$S(HLTCPCS["S":"SS",HLTCPCS["M":"MS",1:"") | ||
1246 | 1241 | "RTN","HLCSTCP",141,0) | ||
1247 | 1242 | I @X@(3)'="NC" S @X@(9)=$$NOW^XLFDT | ||
1248 | 1243 | "RTN","HLCSTCP",142,0) | ||
1249 | 1244 | S:$G(ZTSK) @X@(11)=ZTSK | ||
1250 | 1245 | "RTN","HLCSTCP",143,0) | ||
1251 | 1246 | D FILE^HLDIE("","HLJ","","ST1","HLCSTCP") ;HL*1.6*109 | ||
1252 | 1247 | "RTN","HLCSTCP",144,0) | ||
1253 | 1248 | L -^HLCS(870,HLDP,0) | ||
1254 | 1249 | "RTN","HLCSTCP",145,0) | ||
1255 | 1250 | Q | ||
1256 | 1251 | "RTN","HLCSTCP",146,0) | ||
1257 | 1252 | ; | ||
1258 | 1253 | "RTN","HLCSTCP",147,0) | ||
1259 | 1254 | MON(Y) ;Display current state & check for shutdown | ||
1260 | 1255 | "RTN","HLCSTCP",148,0) | ||
1261 | 1256 | ;don't display for multiple server | ||
1262 | 1257 | "RTN","HLCSTCP",149,0) | ||
1263 | 1258 | Q:$G(HLLSTN) | ||
1264 | 1259 | "RTN","HLCSTCP",150,0) | ||
1265 | 1260 | F L +^HLCS(870,HLDP,0):2 Q:$T | ||
1266 | 1261 | "RTN","HLCSTCP",151,0) | ||
1267 | 1262 | S $P(^HLCS(870,HLDP,0),U,5)=Y | ||
1268 | 1263 | "RTN","HLCSTCP",152,0) | ||
1269 | 1264 | L -^HLCS(870,HLDP,0) | ||
1270 | 1265 | "RTN","HLCSTCP",153,0) | ||
1271 | 1266 | Q:'$D(HLTRACE) | ||
1272 | 1267 | "RTN","HLCSTCP",154,0) | ||
1273 | 1268 | N X U IO(0) | ||
1274 | 1269 | "RTN","HLCSTCP",155,0) | ||
1275 | 1270 | W !,"IN State: ",Y | ||
1276 | 1271 | "RTN","HLCSTCP",156,0) | ||
1277 | 1272 | I '$$STOP D | ||
1278 | 1273 | "RTN","HLCSTCP",157,0) | ||
1279 | 1274 | . R !,"Type Q to Quit: ",X#1:1 | ||
1280 | 1275 | "RTN","HLCSTCP",158,0) | ||
1281 | 1276 | . I $L(X),"Qq"[X S $P(^HLCS(870,HLDP,0),U,15)=1 | ||
1282 | 1277 | "RTN","HLCSTCP",159,0) | ||
1283 | 1278 | U IO | ||
1284 | 1279 | "RTN","HLCSTCP",160,0) | ||
1285 | 1280 | Q | ||
1286 | 1281 | "RTN","HLCSTCP",161,0) | ||
1287 | 1282 | UPDT(Y) ;update job count for multiple servers,X=1 increment | ||
1288 | 1283 | "RTN","HLCSTCP",162,0) | ||
1289 | 1284 | N HLJ,X | ||
1290 | 1285 | "RTN","HLCSTCP",163,0) | ||
1291 | 1286 | F L +^HLCS(870,HLDP,0):2 Q:$T | ||
1292 | 1287 | "RTN","HLCSTCP",164,0) | ||
1293 | 1288 | S X=+$P(^HLCS(870,HLDP,0),U,5),$P(^(0),U,5)=$S(Y:X+1,1:X-1)_" server" | ||
1294 | 1289 | "RTN","HLCSTCP",165,0) | ||
1295 | 1290 | ;if incrementing, set the Device Type field to Multi-Server | ||
1296 | 1291 | "RTN","HLCSTCP",166,0) | ||
1297 | 1292 | I X S HLJ(870,HLDP_",",3)="MS" D FILE^HLDIE("","HLJ","","UPDT","HLCSTCP") ;HL*1.6*109 | ||
1298 | 1293 | "RTN","HLCSTCP",167,0) | ||
1299 | 1294 | L -^HLCS(870,HLDP,0) | ||
1300 | 1295 | "RTN","HLCSTCP",168,0) | ||
1301 | 1296 | Q | ||
1302 | 1297 | "RTN","HLCSTCP",169,0) | ||
1303 | 1298 | STOP() ;stop flag set | ||
1304 | 1299 | "RTN","HLCSTCP",170,0) | ||
1305 | 1300 | N X | ||
1306 | 1301 | "RTN","HLCSTCP",171,0) | ||
1307 | 1302 | F L +^HLCS(870,HLDP,0):2 Q:$T | ||
1308 | 1303 | "RTN","HLCSTCP",172,0) | ||
1309 | 1304 | S X=+$P(^HLCS(870,HLDP,0),U,15) | ||
1310 | 1305 | "RTN","HLCSTCP",173,0) | ||
1311 | 1306 | L -^HLCS(870,HLDP,0) | ||
1312 | 1307 | "RTN","HLCSTCP",174,0) | ||
1313 | 1308 | Q X | ||
1314 | 1309 | "RTN","HLCSTCP",175,0) | ||
1315 | 1310 | ; | ||
1316 | 1311 | "RTN","HLCSTCP",176,0) | ||
1317 | 1312 | LLCNT(DP,Y,Z) ;update Logical Link counters | ||
1318 | 1313 | "RTN","HLCSTCP",177,0) | ||
1319 | 1314 | ;DP=ien of Logical Link in file 870 | ||
1320 | 1315 | "RTN","HLCSTCP",178,0) | ||
1321 | 1316 | ;Y: 1=msg rec, 2=msg proc, 3=msg to send, 4=msg sent | ||
1322 | 1317 | "RTN","HLCSTCP",179,0) | ||
1323 | 1318 | ;Z: ""=add to counter, 1=subtract from counter | ||
1324 | 1319 | "RTN","HLCSTCP",180,0) | ||
1325 | 1320 | Q:'$D(^HLCS(870,+$G(DP),0))!('$G(Y)) | ||
1326 | 1321 | "RTN","HLCSTCP",181,0) | ||
1327 | 1322 | N P,X | ||
1328 | 1323 | "RTN","HLCSTCP",182,0) | ||
1329 | 1324 | S P=$S(Y<3:"IN",1:"OUT")_" QUEUE "_$S(Y#2:"BACK",1:"FRONT")_" POINTER" | ||
1330 | 1325 | "RTN","HLCSTCP",183,0) | ||
1331 | 1326 | F L +^HLCS(870,DP,P):2 Q:$T | ||
1332 | 1327 | "RTN","HLCSTCP",184,0) | ||
1333 | 1328 | S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1) | ||
1334 | 1329 | "RTN","HLCSTCP",185,0) | ||
1335 | 1330 | L -^HLCS(870,DP,P) | ||
1336 | 1331 | "RTN","HLCSTCP",186,0) | ||
1337 | 1332 | Q | ||
1338 | 1333 | "RTN","HLCSTCP",187,0) | ||
1339 | 1334 | SDFLD ; set Shutdown? field to yes | ||
1340 | 1335 | "RTN","HLCSTCP",188,0) | ||
1341 | 1336 | Q:'$G(HLDP) | ||
1342 | 1337 | "RTN","HLCSTCP",189,0) | ||
1343 | 1338 | N HLJ,X | ||
1344 | 1339 | "RTN","HLCSTCP",190,0) | ||
1345 | 1340 | F L +^HLCS(870,HLDP,0):2 Q:$T | ||
1346 | 1341 | "RTN","HLCSTCP",191,0) | ||
1347 | 1342 | ;14=Shutdown LLP? | ||
1348 | 1343 | "RTN","HLCSTCP",192,0) | ||
1349 | 1344 | S HLJ(870,HLDP_",",14)=1 | ||
1350 | 1345 | "RTN","HLCSTCP",193,0) | ||
1351 | 1346 | D FILE^HLDIE("","HLJ","","SDFLD","HLCSTCP") ;HL*1.6*109 | ||
1352 | 1347 | "RTN","HLCSTCP",194,0) | ||
1353 | 1348 | L -^HLCS(870,HLDP,0) | ||
1354 | 1349 | "RTN","HLCSTCP",195,0) | ||
1355 | 1350 | Q | ||
1356 | 1351 | "RTN","HLCSTCP",196,0) | ||
1357 | 1352 | ; | ||
1358 | 1353 | "RTN","HLCSTCP",197,0) | ||
1359 | 1354 | EXITS(Y) ; Single service shutdown and cleans up | ||
1360 | 1355 | "RTN","HLCSTCP",198,0) | ||
1361 | 1356 | N HLJ,X | ||
1362 | 1357 | "RTN","HLCSTCP",199,0) | ||
1363 | 1358 | F L +^HLCS(870,HLDP,0):2 Q:$T | ||
1364 | 1359 | "RTN","HLCSTCP",200,0) | ||
1365 | 1360 | ;4=status,10=Time Stopped,9=Time Started,11=Task Number | ||
1366 | 1361 | "RTN","HLCSTCP",201,0) | ||
1367 | 1362 | S X="HLJ(870,"""_HLDP_","")" | ||
1368 | 1363 | "RTN","HLCSTCP",202,0) | ||
1369 | 1364 | S @X@(4)=Y,@X@(11)="@" | ||
1370 | 1365 | "RTN","HLCSTCP",203,0) | ||
1371 | 1366 | S:$G(HLCSOUT)'=2 @X@(10)=$$NOW^XLFDT,@X@(9)="@" | ||
1372 | 1367 | "RTN","HLCSTCP",204,0) | ||
1373 | 1368 | D FILE^HLDIE("","HLJ","","EXITS","HLCSTCP") ; HL*1.6*109 | ||
1374 | 1369 | "RTN","HLCSTCP",205,0) | ||
1375 | 1370 | L -^HLCS(870,HLDP,0) | ||
1376 | 1371 | "RTN","HLCSTCP",206,0) | ||
1377 | 1372 | I $D(ZTQUEUED) S ZTREQ="@" | ||
1378 | 1373 | "RTN","HLCSTCP",207,0) | ||
1379 | 1374 | Q | ||
1380 | 1375 | "RTN","HLCSTCP",208,0) | ||
1381 | 1376 | ; | ||
1382 | 1377 | "RTN","HLCSTCP",209,0) | ||
1383 | 1378 | EXITM ;Multiple service shutdown and clean up | ||
1384 | 1379 | "RTN","HLCSTCP",210,0) | ||
1385 | 1380 | D UPDT(0) | ||
1386 | 1381 | "RTN","HLCSTCP",211,0) | ||
1387 | 1382 | I $D(ZTQUEUED) S ZTREQ="@" | ||
1388 | 1383 | "RTN","HLCSTCP",212,0) | ||
1389 | 1384 | Q | ||
1390 | 1385 | "RTN","HLCSTCP1") | ||
1391 | 1386 | 0^16^B29662559 | ||
1392 | 1387 | "RTN","HLCSTCP1",1,0) | ||
1393 | 1388 | HLCSTCP1 ;SFIRMFO/RSD MSC/JDA - BI-DIRECTIONAL TCP ;11/21/2001 17:09 | ||
1394 | 1389 | "RTN","HLCSTCP1",2,0) | ||
1395 | 1390 | ;;1.6;HEALTH LEVEL SEVEN;**19,43,57,64,71,MSC**;JUL 17,1995 | ||
1396 | 1391 | "RTN","HLCSTCP1",3,0) | ||
1397 | 1392 | ;Receiver | ||
1398 | 1393 | "RTN","HLCSTCP1",4,0) | ||
1399 | 1394 | ;connection is initiated by sender and listener accepts connection | ||
1400 | 1395 | "RTN","HLCSTCP1",5,0) | ||
1401 | 1396 | ;and calls this routine | ||
1402 | 1397 | "RTN","HLCSTCP1",6,0) | ||
1403 | 1398 | ; | ||
1404 | 1399 | "RTN","HLCSTCP1",7,0) | ||
1405 | 1400 | N $ETRAP,$ESTACK S $ETRAP="D ERROR^HLCSTCP1" | ||
1406 | 1401 | "RTN","HLCSTCP1",8,0) | ||
1407 | 1402 | N HLMIEN,HLASTMSG | ||
1408 | 1403 | "RTN","HLCSTCP1",9,0) | ||
1409 | 1404 | D MON^HLCSTCP("Open") | ||
1410 | 1405 | "RTN","HLCSTCP1",10,0) | ||
1411 | 1406 | K ^TMP("HLCSTCP",$J,0) | ||
1412 | 1407 | "RTN","HLCSTCP1",11,0) | ||
1413 | 1408 | S HLMIEN=0,HLASTMSG="" | ||
1414 | 1409 | "RTN","HLCSTCP1",12,0) | ||
1415 | 1410 | F D Q:$$STOP^HLCSTCP I 'HLMIEN D MON^HLCSTCP("Idle") H 3 | ||
1416 | 1411 | "RTN","HLCSTCP1",13,0) | ||
1417 | 1412 | . S HLMIEN=$$READ | ||
1418 | 1413 | "RTN","HLCSTCP1",14,0) | ||
1419 | 1414 | . Q:'HLMIEN | ||
1420 | 1415 | "RTN","HLCSTCP1",15,0) | ||
1421 | 1416 | . D PROCESS | ||
1422 | 1417 | "RTN","HLCSTCP1",16,0) | ||
1423 | 1418 | Q | ||
1424 | 1419 | "RTN","HLCSTCP1",17,0) | ||
1425 | 1420 | ; | ||
1426 | 1421 | "RTN","HLCSTCP1",18,0) | ||
1427 | 1422 | PROCESS ;check message and reply | ||
1428 | 1423 | "RTN","HLCSTCP1",19,0) | ||
1429 | 1424 | ;HLDP=LL in 870, update monitor, received msg. | ||
1430 | 1425 | "RTN","HLCSTCP1",20,0) | ||
1431 | 1426 | N HLTCP,HLTCPI,HLTCPO | ||
1432 | 1427 | "RTN","HLCSTCP1",21,0) | ||
1433 | 1428 | S HLTCP="",HLTCPO=HLDP,HLTCPI=+HLMIEN | ||
1434 | 1429 | "RTN","HLCSTCP1",22,0) | ||
1435 | 1430 | ;update monitor, msg. received | ||
1436 | 1431 | "RTN","HLCSTCP1",23,0) | ||
1437 | 1432 | D LLCNT^HLCSTCP(HLDP,1) | ||
1438 | 1433 | "RTN","HLCSTCP1",24,0) | ||
1439 | 1434 | D NEW^HLTP3(HLMIEN) | ||
1440 | 1435 | "RTN","HLCSTCP1",25,0) | ||
1441 | 1436 | ;update monitor, msg. processed | ||
1442 | 1437 | "RTN","HLCSTCP1",26,0) | ||
1443 | 1438 | D LLCNT^HLCSTCP(HLDP,2) | ||
1444 | 1439 | "RTN","HLCSTCP1",27,0) | ||
1445 | 1440 | Q | ||
1446 | 1441 | "RTN","HLCSTCP1",28,0) | ||
1447 | 1442 | ; | ||
1448 | 1443 | "RTN","HLCSTCP1",29,0) | ||
1449 | 1444 | READ() ;read 1 message, returns ien in 773^ien in 772 for message | ||
1450 | 1445 | "RTN","HLCSTCP1",30,0) | ||
1451 | 1446 | D MON^HLCSTCP("Reading") | ||
1452 | 1447 | "RTN","HLCSTCP1",31,0) | ||
1453 | 1448 | N HLDB,HLDT,HLDEND,HLACKWT,HLDSTRT,HLHDR,HLIND1,HLINE,HLMSG,HLRDOUT,HLRS,HLX,X | ||
1454 | 1449 | "RTN","HLCSTCP1",32,0) | ||
1455 | 1450 | ;HLDSTRT=start char., HLDEND=end char., HLRS=record seperator | ||
1456 | 1451 | "RTN","HLCSTCP1",33,0) | ||
1457 | 1452 | S HLDSTRT=$C(11),HLDEND=$C(28),HLRS=$C(13) | ||
1458 | 1453 | "RTN","HLCSTCP1",34,0) | ||
1459 | 1454 | ;HLRDOUT=exit read loop, HLINE=line count, HLIND1=ien 773^ien 772 | ||
1460 | 1455 | "RTN","HLCSTCP1",35,0) | ||
1461 | 1456 | ;HLHDR=have a header, ^TMP(...)=excess from last read, HLACKWT=wait for ack | ||
1462 | 1457 | "RTN","HLCSTCP1",36,0) | ||
1463 | 1458 | S (HLRDOUT,HLINE,HLIND1,HLHDR)=0,HLX=$G(^TMP("HLCSTCP",$J,0)),HLACKWT=HLDBACK | ||
1464 | 1459 | "RTN","HLCSTCP1",37,0) | ||
1465 | 1460 | K ^TMP("HLCSTCP",$J,0) | ||
1466 | 1461 | "RTN","HLCSTCP1",38,0) | ||
1467 | 1462 | F D RDBLK Q:HLRDOUT | ||
1468 | 1463 | "RTN","HLCSTCP1",39,0) | ||
1469 | 1464 | ;save any excess for next time | ||
1470 | 1465 | "RTN","HLCSTCP1",40,0) | ||
1471 | 1466 | S:$L(HLX) ^TMP("HLCSTCP",$J,0)=HLX | ||
1472 | 1467 | "RTN","HLCSTCP1",41,0) | ||
1473 | 1468 | I +HLIND1,'$P(HLIND1,U,3) D DELMSG(HLIND1) S HLIND1=0 | ||
1474 | 1469 | "RTN","HLCSTCP1",42,0) | ||
1475 | 1470 | Q HLIND1 | ||
1476 | 1471 | "RTN","HLCSTCP1",43,0) | ||
1477 | 1472 | ; | ||
1478 | 1473 | "RTN","HLCSTCP1",44,0) | ||
1479 | 1474 | RDBLK S HLDB=HLDBSIZE-$L(HLX) | ||
1480 | 1475 | "RTN","HLCSTCP1",45,0) | ||
1481 | 1476 | U IO D:$D ERROR R X#HLDB:HLDREAD ; MSC/JDA added check against $d | ||
1482 | 1477 | "RTN","HLCSTCP1",46,0) | ||
1483 | 1478 | ; timedout or error, check ack timeout, clean up | ||
1484 | 1479 | "RTN","HLCSTCP1",47,0) | ||
1485 | 1480 | I '$T,X="",HLX="" S HLACKWT=HLACKWT-HLDREAD D:HLACKWT<0&'HLHDR CLEAN Q | ||
1486 | 1481 | "RTN","HLCSTCP1",48,0) | ||
1487 | 1482 | ;data stream: <sb>dddd<cr><eb><cr> | ||
1488 | 1483 | "RTN","HLCSTCP1",49,0) | ||
1489 | 1484 | ;add incoming line to what wasn't processed in last read | ||
1490 | 1485 | "RTN","HLCSTCP1",50,0) | ||
1491 | 1486 | S HLX=$G(HLX)_X | ||
1492 | 1487 | "RTN","HLCSTCP1",51,0) | ||
1493 | 1488 | ; look for segment= <CR> | ||
1494 | 1489 | "RTN","HLCSTCP1",52,0) | ||
1495 | 1490 | F Q:HLX'[HLRS D Q:HLRDOUT | ||
1496 | 1491 | "RTN","HLCSTCP1",53,0) | ||
1497 | 1492 | . ; Get the first piece, save the rest of the line | ||
1498 | 1493 | "RTN","HLCSTCP1",54,0) | ||
1499 | 1494 | . S HLINE=HLINE+1,HLMSG(HLINE,0)=$P(HLX,HLRS),HLX=$P(HLX,HLRS,2,999) | ||
1500 | 1495 | "RTN","HLCSTCP1",55,0) | ||
1501 | 1496 | . ; check for start block, Quit if no ien | ||
1502 | 1497 | "RTN","HLCSTCP1",56,0) | ||
1503 | 1498 | . I HLMSG(HLINE,0)[HLDSTRT!HLHDR D Q | ||
1504 | 1499 | "RTN","HLCSTCP1",57,0) | ||
1505 | 1500 | .. D:HLMSG(HLINE,0)[HLDSTRT | ||
1506 | 1501 | "RTN","HLCSTCP1",58,0) | ||
1507 | 1502 | ... S X=$L(HLMSG(HLINE,0),HLDSTRT) | ||
1508 | 1503 | "RTN","HLCSTCP1",59,0) | ||
1509 | 1504 | ... S:X>2 HLMSG(HLINE,0)=HLDSTRT_$P(HLMSG(HLINE,0),HLDSTRT,X) | ||
1510 | 1505 | "RTN","HLCSTCP1",60,0) | ||
1511 | 1506 | ... S HLMSG(HLINE,0)=$P(HLMSG(HLINE,0),HLDSTRT,2) | ||
1512 | 1507 | "RTN","HLCSTCP1",61,0) | ||
1513 | 1508 | ... D RESET:(HLINE>1) | ||
1514 | 1509 | "RTN","HLCSTCP1",62,0) | ||
1515 | 1510 | .. ;ping message | ||
1516 | 1511 | "RTN","HLCSTCP1",63,0) | ||
1517 | 1512 | .. I $E(HLMSG(1,0),1,9)="MSH^PING^" D PING Q | ||
1518 | 1513 | "RTN","HLCSTCP1",64,0) | ||
1519 | 1514 | .. ; get next ien to store | ||
1520 | 1515 | "RTN","HLCSTCP1",65,0) | ||
1521 | 1516 | .. D MIEN | ||
1522 | 1517 | "RTN","HLCSTCP1",66,0) | ||
1523 | 1518 | .. K HLMSG | ||
1524 | 1519 | "RTN","HLCSTCP1",67,0) | ||
1525 | 1520 | .. S (HLINE,HLHDR)=0 | ||
1526 | 1521 | "RTN","HLCSTCP1",68,0) | ||
1527 | 1522 | . ; check for end block; HLMSG(HLINE) = <eb><cr> | ||
1528 | 1523 | "RTN","HLCSTCP1",69,0) | ||
1529 | 1524 | . I HLMSG(HLINE,0)[HLDEND D | ||
1530 | 1525 | "RTN","HLCSTCP1",70,0) | ||
1531 | 1526 | .. ;no msg. ien | ||
1532 | 1527 | "RTN","HLCSTCP1",71,0) | ||
1533 | 1528 | .. Q:'HLIND1 | ||
1534 | 1529 | "RTN","HLCSTCP1",72,0) | ||
1535 | 1530 | .. ; Kill just the last line | ||
1536 | 1531 | "RTN","HLCSTCP1",73,0) | ||
1537 | 1532 | .. K HLMSG(HLINE,0) S HLINE=HLINE-1 | ||
1538 | 1533 | "RTN","HLCSTCP1",74,0) | ||
1539 | 1534 | .. ; move into 772 | ||
1540 | 1535 | "RTN","HLCSTCP1",75,0) | ||
1541 | 1536 | .. D SAVE(.HLMSG,"^HL(772,"_+$P(HLIND1,U,2)_",""IN"")") | ||
1542 | 1537 | "RTN","HLCSTCP1",76,0) | ||
1543 | 1538 | .. ;mark that end block has been received | ||
1544 | 1539 | "RTN","HLCSTCP1",77,0) | ||
1545 | 1540 | .. ;HLIND1=ien in 773^ien in 772^1 if end block was received | ||
1546 | 1541 | "RTN","HLCSTCP1",78,0) | ||
1547 | 1542 | .. S $P(HLIND1,U,3)=1 | ||
1548 | 1543 | "RTN","HLCSTCP1",79,0) | ||
1549 | 1544 | .. ;reset variables for next message | ||
1550 | 1545 | "RTN","HLCSTCP1",80,0) | ||
1551 | 1546 | .. D CLEAN | ||
1552 | 1547 | "RTN","HLCSTCP1",81,0) | ||
1553 | 1548 | . ;add blank line for carriage return | ||
1554 | 1549 | "RTN","HLCSTCP1",82,0) | ||
1555 | 1550 | . I HLINE'=0,HLMSG(HLINE,0)]"" S HLINE=HLINE+1,HLMSG(HLINE,0)="" | ||
1556 | 1551 | "RTN","HLCSTCP1",83,0) | ||
1557 | 1552 | Q:HLRDOUT | ||
1558 | 1553 | "RTN","HLCSTCP1",84,0) | ||
1559 | 1554 | ;If the line is long and no <CR> move it into the array. | ||
1560 | 1555 | "RTN","HLCSTCP1",85,0) | ||
1561 | 1556 | I ($L(HLX)=HLDBSIZE),(HLX'[HLRS),(HLX'[HLDEND),(HLX'[HLDSTRT) D Q | ||
1562 | 1557 | "RTN","HLCSTCP1",86,0) | ||
1563 | 1558 | . S HLINE=HLINE+1,HLMSG(HLINE,0)=HLX,HLX="" | ||
1564 | 1559 | "RTN","HLCSTCP1",87,0) | ||
1565 | 1560 | ;have start block but no record seperator | ||
1566 | 1561 | "RTN","HLCSTCP1",88,0) | ||
1567 | 1562 | I HLX[HLDSTRT D Q | ||
1568 | 1563 | "RTN","HLCSTCP1",89,0) | ||
1569 | 1564 | . ;check for more than 1 start block | ||
1570 | 1565 | "RTN","HLCSTCP1",90,0) | ||
1571 | 1566 | . S X=$L(HLX,HLDSTRT) S:X>2 HLX=HLDSTRT_$P(HLX,HLDSTRT,X) | ||
1572 | 1567 | "RTN","HLCSTCP1",91,0) | ||
1573 | 1568 | . S:$L($P(HLX,HLDSTRT,2))>8 HLINE=HLINE+1,HLMSG(HLINE,0)=$P(HLX,HLDSTRT,2),HLX="",HLHDR=1 | ||
1574 | 1569 | "RTN","HLCSTCP1",92,0) | ||
1575 | 1570 | . D RESET:(HLHDR&(HLINE>1)) | ||
1576 | 1571 | "RTN","HLCSTCP1",93,0) | ||
1577 | 1572 | ;if no ien, then we don't have start block, reset | ||
1578 | 1573 | "RTN","HLCSTCP1",94,0) | ||
1579 | 1574 | I 'HLIND1 D CLEAN Q | ||
1580 | 1575 | "RTN","HLCSTCP1",95,0) | ||
1581 | 1576 | ; big message-merge from local to global every 100 lines | ||
1582 | 1577 | "RTN","HLCSTCP1",96,0) | ||
1583 | 1578 | I (HLINE-$O(HLMSG(0)))>100 D | ||
1584 | 1579 | "RTN","HLCSTCP1",97,0) | ||
1585 | 1580 | . M ^HL(772,+$P(HLIND1,U,2),"IN")=HLMSG | ||
1586 | 1581 | "RTN","HLCSTCP1",98,0) | ||
1587 | 1582 | . ; reset working array | ||
1588 | 1583 | "RTN","HLCSTCP1",99,0) | ||
1589 | 1584 | . K HLMSG | ||
1590 | 1585 | "RTN","HLCSTCP1",100,0) | ||
1591 | 1586 | Q | ||
1592 | 1587 | "RTN","HLCSTCP1",101,0) | ||
1593 | 1588 | ; | ||
1594 | 1589 | "RTN","HLCSTCP1",102,0) | ||
1595 | 1590 | SAVE(SRC,DEST) ;save into global & set top node | ||
1596 | 1591 | "RTN","HLCSTCP1",103,0) | ||
1597 | 1592 | ;SRC=source array (passed by ref.), DEST=destination global | ||
1598 | 1593 | "RTN","HLCSTCP1",104,0) | ||
1599 | 1594 | M @DEST=SRC | ||
1600 | 1595 | "RTN","HLCSTCP1",105,0) | ||
1601 | 1596 | S @DEST@(0)="^^"_HLINE_"^"_HLINE_"^"_DT_"^" | ||
1602 | 1597 | "RTN","HLCSTCP1",106,0) | ||
1603 | 1598 | Q | ||
1604 | 1599 | "RTN","HLCSTCP1",107,0) | ||
1605 | 1600 | ; | ||
1606 | 1601 | "RTN","HLCSTCP1",108,0) | ||
1607 | 1602 | DELMSG(HLMAMT) ;delete message from Message Administration/Message Text files. | ||
1608 | 1603 | "RTN","HLCSTCP1",109,0) | ||
1609 | 1604 | N DIK,DA | ||
1610 | 1605 | "RTN","HLCSTCP1",110,0) | ||
1611 | 1606 | S DA=+HLMAMT,DIK="^HLMA(" | ||
1612 | 1607 | "RTN","HLCSTCP1",111,0) | ||
1613 | 1608 | D ^DIK | ||
1614 | 1609 | "RTN","HLCSTCP1",112,0) | ||
1615 | 1610 | S DA=$P(HLMAMT,U,2),DIK="^HL(772," | ||
1616 | 1611 | "RTN","HLCSTCP1",113,0) | ||
1617 | 1612 | D ^DIK | ||
1618 | 1613 | "RTN","HLCSTCP1",114,0) | ||
1619 | 1614 | Q | ||
1620 | 1615 | "RTN","HLCSTCP1",115,0) | ||
1621 | 1616 | MIEN ; sets HLIND1=ien in 773^ien in 772 for message | ||
1622 | 1617 | "RTN","HLCSTCP1",116,0) | ||
1623 | 1618 | N HLMID,X | ||
1624 | 1619 | "RTN","HLCSTCP1",117,0) | ||
1625 | 1620 | I HLIND1 D | ||
1626 | 1621 | "RTN","HLCSTCP1",118,0) | ||
1627 | 1622 | . S:'$G(^HLMA(+HLIND1,0)) HLIND1=0 | ||
1628 | 1623 | "RTN","HLCSTCP1",119,0) | ||
1629 | 1624 | . S:'$G(^HL(772,+$P(HLIND1,U,2),0)) HLIND1=0 | ||
1630 | 1625 | "RTN","HLCSTCP1",120,0) | ||
1631 | 1626 | ;msg. id is 10th of MSH & 11th for BSH or FSH | ||
1632 | 1627 | "RTN","HLCSTCP1",121,0) | ||
1633 | 1628 | S X=10+($E(HLMSG(1,0),1,3)'="MSH"),HLMID=$$PMSH(.HLMSG,X) | ||
1634 | 1629 | "RTN","HLCSTCP1",122,0) | ||
1635 | 1630 | ;if HLIND1 is set, kill old message, use HLIND1 for new | ||
1636 | 1631 | "RTN","HLCSTCP1",123,0) | ||
1637 | 1632 | ;message, it means we never got end block for 1st msg. | ||
1638 | 1633 | "RTN","HLCSTCP1",124,0) | ||
1639 | 1634 | I HLIND1 D Q | ||
1640 | 1635 | "RTN","HLCSTCP1",125,0) | ||
1641 | 1636 | . ;get pointer to 772, kill header | ||
1642 | 1637 | "RTN","HLCSTCP1",126,0) | ||
1643 | 1638 | . K ^HLMA(+HLIND1,"MSH") | ||
1644 | 1639 | "RTN","HLCSTCP1",127,0) | ||
1645 | 1640 | . I $D(^HL(772,+$P(HLIND1,U,2),"IN")) K ^("IN") | ||
1646 | 1641 | "RTN","HLCSTCP1",128,0) | ||
1647 | 1642 | . S X=$$MAID^HLTF(+HLIND1,HLMID) | ||
1648 | 1643 | "RTN","HLCSTCP1",129,0) | ||
1649 | 1644 | . D SAVE(.HLMSG,"^HLMA("_+HLIND1_",""MSH"")") | ||
1650 | 1645 | "RTN","HLCSTCP1",130,0) | ||
1651 | 1646 | . S:$P(HLIND1,U,3) $P(HLIND1,U,3)="" | ||
1652 | 1647 | "RTN","HLCSTCP1",131,0) | ||
1653 | 1648 | D TCP^HLTF(.HLMID,.X,.HLDT) | ||
1654 | 1649 | "RTN","HLCSTCP1",132,0) | ||
1655 | 1650 | I 'X D Q | ||
1656 | 1651 | "RTN","HLCSTCP1",133,0) | ||
1657 | 1652 | . ;error - record and reset array | ||
1658 | 1653 | "RTN","HLCSTCP1",134,0) | ||
1659 | 1654 | . ;killing HLLSTN will allow MON^HLCSTCP to work with multi-server | ||
1660 | 1655 | "RTN","HLCSTCP1",135,0) | ||
1661 | 1656 | . D CLEAN K HLLSTN | ||
1662 | 1657 | "RTN","HLCSTCP1",136,0) | ||
1663 | 1658 | . ;error 100=LLP Could not Enqueue the Message, reset array | ||
1664 | 1659 | "RTN","HLCSTCP1",137,0) | ||
1665 | 1660 | . D MONITOR^HLCSDR2(100,19,HLDP),MON^HLCSTCP("ERROR") H 30 | ||
1666 | 1661 | "RTN","HLCSTCP1",138,0) | ||
1667 | 1662 | ;HLIND1=ien in 773^ien in 772 | ||
1668 | 1663 | "RTN","HLCSTCP1",139,0) | ||
1669 | 1664 | S HLIND1=X_U_+$G(^HLMA(X,0)) | ||
1670 | 1665 | "RTN","HLCSTCP1",140,0) | ||
1671 | 1666 | ;save MSH into 773 | ||
1672 | 1667 | "RTN","HLCSTCP1",141,0) | ||
1673 | 1668 | D SAVE(.HLMSG,"^HLMA("_+HLIND1_",""MSH"")") | ||
1674 | 1669 | "RTN","HLCSTCP1",142,0) | ||
1675 | 1670 | Q | ||
1676 | 1671 | "RTN","HLCSTCP1",143,0) | ||
1677 | 1672 | ; | ||
1678 | 1673 | "RTN","HLCSTCP1",144,0) | ||
1679 | 1674 | PMSH(MSH,P) ;get piece P from MSH array (passed by ref.) | ||
1680 | 1675 | "RTN","HLCSTCP1",145,0) | ||
1681 | 1676 | N FS,I,L,L1,L2,X,Y | ||
1682 | 1677 | "RTN","HLCSTCP1",146,0) | ||
1683 | 1678 | S FS=$E(MSH(1,0),4),(L2,Y)=0,X="" | ||
1684 | 1679 | "RTN","HLCSTCP1",147,0) | ||
1685 | 1680 | F I=1:1 S L1=$L($G(MSH(I,0)),FS),L=L1+Y-1 D Q:$L(X)!'$D(MSH(I,0)) | ||
1686 | 1681 | "RTN","HLCSTCP1",148,0) | ||
1687 | 1682 | . S:L1=1 L=L+1 | ||
1688 | 1683 | "RTN","HLCSTCP1",149,0) | ||
1689 | 1684 | . S:P'>L X=$P($G(MSH(I-1,0)),FS,P-L2)_$P($G(MSH(I,0)),FS,(P-Y)) | ||
1690 | 1685 | "RTN","HLCSTCP1",150,0) | ||
1691 | 1686 | . S L2=Y,Y=L | ||
1692 | 1687 | "RTN","HLCSTCP1",151,0) | ||
1693 | 1688 | Q X | ||
1694 | 1689 | "RTN","HLCSTCP1",152,0) | ||
1695 | 1690 | ; | ||
1696 | 1691 | "RTN","HLCSTCP1",153,0) | ||
1697 | 1692 | PING ;process PING message | ||
1698 | 1693 | "RTN","HLCSTCP1",154,0) | ||
1699 | 1694 | S X=HLMSG(1,0) | ||
1700 | 1695 | "RTN","HLCSTCP1",155,0) | ||
1701 | 1696 | I X[HLDEND U IO W X,! | ||
1702 | 1697 | "RTN","HLCSTCP1",156,0) | ||
1703 | 1698 | CLEAN ;reset var. for next message | ||
1704 | 1699 | "RTN","HLCSTCP1",157,0) | ||
1705 | 1700 | K HLMSG | ||
1706 | 1701 | "RTN","HLCSTCP1",158,0) | ||
1707 | 1702 | S HLINE=0,HLRDOUT=1 | ||
1708 | 1703 | "RTN","HLCSTCP1",159,0) | ||
1709 | 1704 | Q | ||
1710 | 1705 | "RTN","HLCSTCP1",160,0) | ||
1711 | 1706 | ; | ||
1712 | 1707 | "RTN","HLCSTCP1",161,0) | ||
1713 | 1708 | ERROR ; Error trap for disconnect error and return back to the read loop. | ||
1714 | 1709 | "RTN","HLCSTCP1",162,0) | ||
1715 | 1710 | S $ETRAP="D UNWIND^%ZTER" | ||
1716 | 1711 | "RTN","HLCSTCP1",163,0) | ||
1717 | 1712 | I $$EC^%ZOSV["READ"!($$EC^%ZOSV["NOTOPEN")!($$EC^%ZOSV["DEVNOTOPN") D UNWIND^%ZTER Q | ||
1718 | 1713 | "RTN","HLCSTCP1",164,0) | ||
1719 | 1714 | I $$EC^%ZOSV["WRITE" D CC("Wr-err") D UNWIND^%ZTER Q | ||
1720 | 1715 | "RTN","HLCSTCP1",165,0) | ||
1721 | 1716 | S HLCSOUT=1 D ^%ZTER,CC("Error") | ||
1722 | 1717 | "RTN","HLCSTCP1",166,0) | ||
1723 | 1718 | D UNWIND^%ZTER | ||
1724 | 1719 | "RTN","HLCSTCP1",167,0) | ||
1725 | 1720 | Q | ||
1726 | 1721 | "RTN","HLCSTCP1",168,0) | ||
1727 | 1722 | ; | ||
1728 | 1723 | "RTN","HLCSTCP1",169,0) | ||
1729 | 1724 | CC(X) ;cleanup and close | ||
1730 | 1725 | "RTN","HLCSTCP1",170,0) | ||
1731 | 1726 | D MON^HLCSTCP(X) | ||
1732 | 1727 | "RTN","HLCSTCP1",171,0) | ||
1733 | 1728 | H 2 | ||
1734 | 1729 | "RTN","HLCSTCP1",172,0) | ||
1735 | 1730 | Q | ||
1736 | 1731 | "RTN","HLCSTCP1",173,0) | ||
1737 | 1732 | RESET ;reset info as a result of no end block | ||
1738 | 1733 | "RTN","HLCSTCP1",174,0) | ||
1739 | 1734 | N % | ||
1740 | 1735 | "RTN","HLCSTCP1",175,0) | ||
1741 | 1736 | S HLMSG(1,0)=HLMSG(HLINE,0) | ||
1742 | 1737 | "RTN","HLCSTCP1",176,0) | ||
1743 | 1738 | F %=2:1:HLINE K HLMSG(%,0) | ||
1744 | 1739 | "RTN","HLCSTCP1",177,0) | ||
1745 | 1740 | S HLINE=1 | ||
1746 | 1741 | "RTN","HLCSTCP1",178,0) | ||
1747 | 1742 | Q | ||
1748 | 1743 | "RTN","MSCZJOB") | ||
1749 | 1744 | 0^1^B12797960 | ||
1750 | 1745 | "RTN","MSCZJOB",1,0) | ||
1751 | 1746 | MSCZJOB ;GFT/MSC;28JAN2009 | ||
1752 | 1747 | "RTN","MSCZJOB",2,0) | ||
1753 | 1748 | ;;8.0;KERNEL;**MSC** | ||
1754 | 1749 | "RTN","MSCZJOB",3,0) | ||
1755 | 1750 | W !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
1756 | 1751 | "RTN","MSCZJOB",4,0) | ||
1757 | 1752 | N MSC | ||
1758 | 1753 | "RTN","MSCZJOB",5,0) | ||
1759 | 1754 | DDS ; | ||
1760 | 1755 | "RTN","MSCZJOB",6,0) | ||
1761 | 1756 | S DDSFILE=3.081,DR="[MSCZJOBEXAM]",DDSPARM="S" | ||
1762 | 1757 | "RTN","MSCZJOB",7,0) | ||
1763 | 1758 | D ^DDS Q | ||
1764 | 1759 | "RTN","MSCZJOB",8,0) | ||
1765 | 1760 | ; | ||
1766 | 1761 | "RTN","MSCZJOB",9,0) | ||
1767 | 1762 | UNLOCK(D0) ;FROM FIELD 2, PAGE 3: UNLOCK THE LOCK | ||
1768 | 1763 | "RTN","MSCZJOB",10,0) | ||
1769 | 1764 | N X,R S R=$G(@MSC@(MSCJOBID,"L",D0)) I R'["^" Q ;CAN'T SEE IT | ||
1770 | 1765 | "RTN","MSCZJOB",11,0) | ||
1771 | 1766 | S R=$P(R,"~",2),R="^"_$S(R'["(":$P(R," "),1:$P(R,")")_")"),X="L "_R D ^DIM Q:'$D(X) ;GOOD SYNTAX? | ||
1772 | 1767 | "RTN","MSCZJOB",12,0) | ||
1773 | 1768 | D UNLOCK^MSCZJOBU(R,MSCJOBID) | ||
1774 | 1769 | "RTN","MSCZJOB",13,0) | ||
1775 | 1770 | Q | ||
1776 | 1771 | "RTN","MSCZJOB",14,0) | ||
1777 | 1772 | ; | ||
1778 | 1773 | "RTN","MSCZJOB",15,0) | ||
1779 | 1774 | ; | ||
1780 | 1775 | "RTN","MSCZJOB",16,0) | ||
1781 | 1776 | KILL(J) ;FROM FIELD | ||
1782 | 1777 | "RTN","MSCZJOB",17,0) | ||
1783 | 1778 | D KILL^MSCZJOBU(J) | ||
1784 | 1779 | "RTN","MSCZJOB",18,0) | ||
1785 | 1780 | Q | ||
1786 | 1781 | "RTN","MSCZJOB",19,0) | ||
1787 | 1782 | ; | ||
1788 | 1783 | "RTN","MSCZJOB",20,0) | ||
1789 | 1784 | ; | ||
1790 | 1785 | "RTN","MSCZJOB",21,0) | ||
1791 | 1786 | ; | ||
1792 | 1787 | "RTN","MSCZJOB",22,0) | ||
1793 | 1788 | ; | ||
1794 | 1789 | "RTN","MSCZJOB",23,0) | ||
1795 | 1790 | COMPMUL ;COMPUTED MULTIPLE FOR MSCZJOBEXAM BLOCK | ||
1796 | 1791 | "RTN","MSCZJOB",24,0) | ||
1797 | 1792 | N X,D0,J | ||
1798 | 1793 | "RTN","MSCZJOB",25,0) | ||
1799 | 1794 | S MSC="^TMP(""MSCZJOB"")" D POLL | ||
1800 | 1795 | "RTN","MSCZJOB",26,0) | ||
1801 | 1796 | F D0=0:0 S D0=$O(MSCZJOB(D0)) Q:'D0 D | ||
1802 | 1797 | "RTN","MSCZJOB",27,0) | ||
1803 | 1798 | .S MSCZJOB(D0)=MSCZJOB(D0)_U_$$DEV(D0)_U_$$USER(D0)_U_$$NSP(D0)_U_U_U_U_U_$$ROUTINE(D0) | ||
1804 | 1799 | "RTN","MSCZJOB",28,0) | ||
1805 | 1800 | .S X=MSCZJOB(D0) X DICMX | ||
1806 | 1801 | "RTN","MSCZJOB",29,0) | ||
1807 | 1802 | Q | ||
1808 | 1803 | "RTN","MSCZJOB",30,0) | ||
1809 | 1804 | JOB(D0) Q $P(MSCZJOB(D0),U) ;*** | ||
1810 | 1805 | "RTN","MSCZJOB",31,0) | ||
1811 | 1806 | DEV(D0) Q $$FIND(D0,"I","$PRINCIPAL") | ||
1812 | 1807 | "RTN","MSCZJOB",32,0) | ||
1813 | 1808 | NSP(D0) N N D Q N | ||
1814 | 1809 | "RTN","MSCZJOB",33,0) | ||
1815 | 1810 | .N L,P S N=$$FIND(D0,"I","$ZGBLDIR"),L=$L(N,"/") I L<2 Q | ||
1816 | 1811 | "RTN","MSCZJOB",34,0) | ||
1817 | 1812 | .F L=L-1:-1:2 S P=$P(N,"/",L) I P'[".",P'["globals" Q | ||
1818 | 1813 | "RTN","MSCZJOB",35,0) | ||
1819 | 1814 | .S P=1 I $P(N,"/")="" S P=2 | ||
1820 | 1815 | "RTN","MSCZJOB",36,0) | ||
1821 | 1816 | .S N=$P(N,"/",P,L) | ||
1822 | 1817 | "RTN","MSCZJOB",37,0) | ||
1823 | 1818 | USER(D0) Q $P($G(^VA(200,+$$FIND(D0,"V","DUZ"),0)),U) | ||
1824 | 1819 | "RTN","MSCZJOB",38,0) | ||
1825 | 1820 | ROUTINE(D0) Q $$FIND(D0,"V","%ZPOS") | ||
1826 | 1821 | "RTN","MSCZJOB",39,0) | ||
1827 | 1822 | ; | ||
1828 | 1823 | "RTN","MSCZJOB",40,0) | ||
1829 | 1824 | FIND(D0,ARR,KEY) N I,J,X S X="",J=+MSCZJOB(D0) | ||
1830 | 1825 | "RTN","MSCZJOB",41,0) | ||
1831 | 1826 | F I=0:0 S I=$O(@MSC@(J,ARR,I)) Q:'I I $P(^(I),KEY_"=")="" S X=$TR($P(^(I),"=",2),"""") Q | ||
1832 | 1827 | "RTN","MSCZJOB",42,0) | ||
1833 | 1828 | Q X | ||
1834 | 1829 | "RTN","MSCZJOB",43,0) | ||
1835 | 1830 | ; | ||
1836 | 1831 | "RTN","MSCZJOB",44,0) | ||
1837 | 1832 | ; | ||
1838 | 1833 | "RTN","MSCZJOB",45,0) | ||
1839 | 1834 | ; | ||
1840 | 1835 | "RTN","MSCZJOB",46,0) | ||
1841 | 1836 | ; | ||
1842 | 1837 | "RTN","MSCZJOB",47,0) | ||
1843 | 1838 | ; | ||
1844 | 1839 | "RTN","MSCZJOB",48,0) | ||
1845 | 1840 | COMPSTK ;COMPUTED MULTIPLE FOR MSCZJOBSTACK BLOCK | ||
1846 | 1841 | "RTN","MSCZJOB",49,0) | ||
1847 | 1842 | S MSC="^TMP(""MSCZJOB"")" K @MSC@(MSCJOBID) D POLL1 | ||
1848 | 1843 | "RTN","MSCZJOB",50,0) | ||
1849 | 1844 | N D0,J S J=MSCJOBID | ||
1850 | 1845 | "RTN","MSCZJOB",51,0) | ||
1851 | 1846 | F D0=1:1:$O(@MSC@(J,"S",""),-1) S X="" X DICMX | ||
1852 | 1847 | "RTN","MSCZJOB",52,0) | ||
1853 | 1848 | Q | ||
1854 | 1849 | "RTN","MSCZJOB",53,0) | ||
1855 | 1850 | ; | ||
1856 | 1851 | "RTN","MSCZJOB",54,0) | ||
1857 | 1852 | STACK(D0) N X S X=$G(@MSC@(MSCJOBID,"S",D0)) | ||
1858 | 1853 | "RTN","MSCZJOB",55,0) | ||
1859 | 1854 | Q X | ||
1860 | 1855 | "RTN","MSCZJOB",56,0) | ||
1861 | 1856 | ; | ||
1862 | 1857 | "RTN","MSCZJOB",57,0) | ||
1863 | 1858 | ; | ||
1864 | 1859 | "RTN","MSCZJOB",58,0) | ||
1865 | 1860 | COMPVARS ;COMPUTED MULTIPLE FOR MSCZJOBVARS BLOCK | ||
1866 | 1861 | "RTN","MSCZJOB",59,0) | ||
1867 | 1862 | S MSC="^TMP(""MSCZJOB"")" K @MSC@(MSCJOBID) D POLL1 | ||
1868 | 1863 | "RTN","MSCZJOB",60,0) | ||
1869 | 1864 | N D0,J S J=MSCJOBID | ||
1870 | 1865 | "RTN","MSCZJOB",61,0) | ||
1871 | 1866 | F D0=1:1:$O(@MSC@(J,"V",""),-1) S X="" X DICMX | ||
1872 | 1867 | "RTN","MSCZJOB",62,0) | ||
1873 | 1868 | Q | ||
1874 | 1869 | "RTN","MSCZJOB",63,0) | ||
1875 | 1870 | ; | ||
1876 | 1871 | "RTN","MSCZJOB",64,0) | ||
1877 | 1872 | ; | ||
1878 | 1873 | "RTN","MSCZJOB",65,0) | ||
1879 | 1874 | COMPLKS ;COMPUTED MULTIPLE FOR MSCZJOBLOCKS BLOCK | ||
1880 | 1875 | "RTN","MSCZJOB",66,0) | ||
1881 | 1876 | S MSC="^TMP(""MSCZJOB"")" D POLL1 | ||
1882 | 1877 | "RTN","MSCZJOB",67,0) | ||
1883 | 1878 | N D0 | ||
1884 | 1879 | "RTN","MSCZJOB",68,0) | ||
1885 | 1880 | F D0=1:1:$$LOCKS S X="" X DICMX | ||
1886 | 1881 | "RTN","MSCZJOB",69,0) | ||
1887 | 1882 | Q | ||
1888 | 1883 | "RTN","MSCZJOB",70,0) | ||
1889 | 1884 | ; | ||
1890 | 1885 | "RTN","MSCZJOB",71,0) | ||
1891 | 1886 | LOCKS() Q +$O(@MSC@(MSCJOBID,"L",""),-1) | ||
1892 | 1887 | "RTN","MSCZJOB",72,0) | ||
1893 | 1888 | ; | ||
1894 | 1889 | "RTN","MSCZJOB",73,0) | ||
1895 | 1890 | ; | ||
1896 | 1891 | "RTN","MSCZJOB",74,0) | ||
1897 | 1892 | POLL K MSCZJOB ;D HLP^DDSUTL(" POLLING JOBS.....") | ||
1898 | 1893 | "RTN","MSCZJOB",75,0) | ||
1899 | 1894 | I $G(^%ZOSF("OS"))["GT.M" D | ||
1900 | 1895 | "RTN","MSCZJOB",76,0) | ||
1901 | 1896 | .K @MSC | ||
1902 | 1897 | "RTN","MSCZJOB",77,0) | ||
1903 | 1898 | .D INTRPT^MSCZJOBU("*") ;SETS UP ^TMP | ||
1904 | 1899 | "RTN","MSCZJOB",78,0) | ||
1905 | 1900 | .N MSCA,I D PIDS^MSCZJOBU(.MSCA) | ||
1906 | 1901 | "RTN","MSCZJOB",79,0) | ||
1907 | 1902 | .S MSCA="" F I=1:1 S MSCA=$O(MSCA(MSCA)) Q:'MSCA S MSCZJOB(I)=MSCA ;SETS UP LOCAL ARRAY | ||
1908 | 1903 | "RTN","MSCZJOB",80,0) | ||
1909 | 1904 | .H 1 ;WAIT FOR POLLING | ||
1910 | 1905 | "RTN","MSCZJOB",81,0) | ||
1911 | 1906 | D TEST | ||
1912 | 1907 | "RTN","MSCZJOB",82,0) | ||
1913 | 1908 | Q | ||
1914 | 1909 | "RTN","MSCZJOB",83,0) | ||
1915 | 1910 | ; | ||
1916 | 1911 | "RTN","MSCZJOB",84,0) | ||
1917 | 1912 | POLL1 Q:'$G(MSCJOBID) | ||
1918 | 1913 | "RTN","MSCZJOB",85,0) | ||
1919 | 1914 | I $G(^%ZOSF("OS"))["GT.M" D | ||
1920 | 1915 | "RTN","MSCZJOB",86,0) | ||
1921 | 1916 | .K @MSC@(MSCJOBID) | ||
1922 | 1917 | "RTN","MSCZJOB",87,0) | ||
1923 | 1918 | .D INTRPT^MSCZJOBU(MSCJOBID) ;SETS UP ^TMP(MSCZJOB) | ||
1924 | 1919 | "RTN","MSCZJOB",88,0) | ||
1925 | 1920 | .H 1 ;WAIT FOR POLLING | ||
1926 | 1921 | "RTN","MSCZJOB",89,0) | ||
1927 | 1922 | D TEST | ||
1928 | 1923 | "RTN","MSCZJOB",90,0) | ||
1929 | 1924 | Q | ||
1930 | 1925 | "RTN","MSCZJOB",91,0) | ||
1931 | 1926 | ; | ||
1932 | 1927 | "RTN","MSCZJOB",92,0) | ||
1933 | 1928 | ; | ||
1934 | 1929 | "RTN","MSCZJOB",93,0) | ||
1935 | 1930 | ; | ||
1936 | 1931 | "RTN","MSCZJOB",94,0) | ||
1937 | 1932 | ; | ||
1938 | 1933 | "RTN","MSCZJOB",95,0) | ||
1939 | 1934 | TEST Q | ||
1940 | 1935 | "RTN","MSCZJOB",96,0) | ||
1941 | 1936 | COMPLK ;COMPUTED MULTIPLE FOR MSCZLOCK BLOCK | ||
1942 | 1937 | "RTN","MSCZJOB",97,0) | ||
1943 | 1938 | N X,D0,J | ||
1944 | 1939 | "RTN","MSCZJOB",98,0) | ||
1945 | 1940 | S MSC="^TMP(""MSCZJOB"")" D POLL S D0=0 | ||
1946 | 1941 | "RTN","MSCZJOB",99,0) | ||
1947 | 1942 | F K=0:0 S K=$O(MSCZJOB(K)) Q:'K D | ||
1948 | 1943 | "RTN","MSCZJOB",100,0) | ||
1949 | 1944 | .F J=0:0 S J=$O(^TMP("MSCZJOB",MSCZJOB(K),"L",J)) Q:'J S A=$TR(^(J),U,"~") D | ||
1950 | 1945 | "RTN","MSCZJOB",101,0) | ||
1951 | 1946 | ..S D0=D0+1,MSCZLK(D0)=$P(A,"LOCK ",2,9)_U_$$USER(K)_U_$TR($$ROUTINE(K),U,"~")_"^^"_MSCZJOB(K) | ||
1952 | 1947 | "RTN","MSCZJOB",102,0) | ||
1953 | 1948 | ..S X=MSCZLK(D0) X DICMX | ||
1954 | 1949 | "RTN","MSCZJOB",103,0) | ||
1955 | 1950 | Q | ||
1956 | 1951 | "RTN","MSCZJOB",104,0) | ||
1957 | 1952 | LOCK ; ; | ||
1958 | 1953 | "RTN","MSCZJOB",105,0) | ||
1959 | 1954 | S DDSFILE=3.081,DR="[MSCZLOCK]",DDSPARM="S" | ||
1960 | 1955 | "RTN","MSCZJOB",106,0) | ||
1961 | 1956 | D ^DDS Q | ||
1962 | 1957 | "RTN","MSCZJOB",107,0) | ||
1963 | 1958 | UNL(D0) ;FROM FIELD 2, PAGE 3: UNLOCK THE LOCK | ||
1964 | 1959 | "RTN","MSCZJOB",108,0) | ||
1965 | 1960 | N X,R S R=$P($G(MSCZLK(D0)),U),P=$P($G(MSCZLK(D0)),U,5) ;I R'["^" Q ;CAN'T SEE IT | ||
1966 | 1961 | "RTN","MSCZJOB",109,0) | ||
1967 | 1962 | S R=$P(R,"~",2),R="^"_$S(R'["(":$P(R," "),1:$P(R,")")_")"),X="L "_R D ^DIM Q:'$D(X) ;GOOD SYNTAX? | ||
1968 | 1963 | "RTN","MSCZJOB",110,0) | ||
1969 | 1964 | D UNLOCK^MSCZJOBU(R,P) | ||
1970 | 1965 | "RTN","MSCZJOBU") | ||
1971 | 1966 | 0^4^B3546679 | ||
1972 | 1967 | "RTN","MSCZJOBU",1,0) | ||
1973 | 1968 | MSCZJOBU ;RHL/MSC;26JUNE2007 | ||
1974 | 1969 | "RTN","MSCZJOBU",2,0) | ||
1975 | 1970 | ;;8.0;KERNEL;**MSC** | ||
1976 | 1971 | "RTN","MSCZJOBU",3,0) | ||
1977 | 1972 | ; | ||
1978 | 1973 | "RTN","MSCZJOBU",4,0) | ||
1979 | 1974 | ; JOB EXAM UTILITIES FOR GT.M | ||
1980 | 1975 | "RTN","MSCZJOBU",5,0) | ||
1981 | 1976 | Q | ||
1982 | 1977 | "RTN","MSCZJOBU",6,0) | ||
1983 | 1978 | PIDS(XARY) ; GET ARRAY OF ALL MUMPS PROCESS | ||
1984 | 1979 | "RTN","MSCZJOBU",7,0) | ||
1985 | 1980 | ; XARY PASSED BY REFERENCE | ||
1986 | 1981 | "RTN","MSCZJOBU",8,0) | ||
1987 | 1982 | ; RETURNS XARY(PID)="" | ||
1988 | 1983 | "RTN","MSCZJOBU",9,0) | ||
1989 | 1984 | ; NOTE: Unix PID=$J for all mumps processes. | ||
1990 | 1985 | "RTN","MSCZJOBU",10,0) | ||
1991 | 1986 | ; | ||
1992 | 1987 | "RTN","MSCZJOBU",11,0) | ||
1993 | 1988 | N %FILE | ||
1994 | 1989 | "RTN","MSCZJOBU",12,0) | ||
1995 | 1990 | S %FILE="/tmp/msczjob"_$J_".tmp" | ||
1996 | 1991 | "RTN","MSCZJOBU",13,0) | ||
1997 | 1992 | ZSYSTEM "ps --no-headers -o pid= -C mumps>"_%FILE | ||
1998 | 1993 | "RTN","MSCZJOBU",14,0) | ||
1999 | 1994 | O %FILE::0 Q:'$T | ||
2000 | 1995 | "RTN","MSCZJOBU",15,0) | ||
2001 | 1996 | ; | ||
2002 | 1997 | "RTN","MSCZJOBU",16,0) | ||
2003 | 1998 | N %I S %I=$I | ||
2004 | 1999 | "RTN","MSCZJOBU",17,0) | ||
2005 | 2000 | N %J ; $JOB | ||
2006 | 2001 | "RTN","MSCZJOBU",18,0) | ||
2007 | 2002 | N %LINE | ||
2008 | 2003 | "RTN","MSCZJOBU",19,0) | ||
2009 | 2004 | N U S U="^" | ||
2010 | 2005 | "RTN","MSCZJOBU",20,0) | ||
2011 | 2006 | F U %FILE R %LINE U %I Q:%LINE="" D | ||
2012 | 2007 | "RTN","MSCZJOBU",21,0) | ||
2013 | 2008 | . Q:$P(%LINE,U)="PID" ; header line | ||
2014 | 2009 | "RTN","MSCZJOBU",22,0) | ||
2015 | 2010 | . S %J=$P(%LINE,U) | ||
2016 | 2011 | "RTN","MSCZJOBU",23,0) | ||
2017 | 2012 | . F Q:$E(%J,1)'=" " S %J=$E(%J,2,999) | ||
2018 | 2013 | "RTN","MSCZJOBU",24,0) | ||
2019 | 2014 | . S XARY(%J)="" | ||
2020 | 2015 | "RTN","MSCZJOBU",25,0) | ||
2021 | 2016 | ; | ||
2022 | 2017 | "RTN","MSCZJOBU",26,0) | ||
2023 | 2018 | C %FILE:DELETE | ||
2024 | 2019 | "RTN","MSCZJOBU",27,0) | ||
2025 | 2020 | ;ZSYSTEM "rm "_$P(%FILE,".",1)_"*" | ||
2026 | 2021 | "RTN","MSCZJOBU",28,0) | ||
2027 | 2022 | Q | ||
2028 | 2023 | "RTN","MSCZJOBU",29,0) | ||
2029 | 2024 | ; | ||
2030 | 2025 | "RTN","MSCZJOBU",30,0) | ||
2031 | 2026 | ; | ||
2032 | 2027 | "RTN","MSCZJOBU",31,0) | ||
2033 | 2028 | INTRPT(PID) ; SEND mupip intrpt to each process. | ||
2034 | 2029 | "RTN","MSCZJOBU",32,0) | ||
2035 | 2030 | ; WHICH CAUSES THE $ZINTERRUPT CODE TO BE EXECUTED. | ||
2036 | 2031 | "RTN","MSCZJOBU",33,0) | ||
2037 | 2032 | ; PID PASSED BY VALUE | ||
2038 | 2033 | "RTN","MSCZJOBU",34,0) | ||
2039 | 2034 | ; PID CAN BE A SINGLE PID, I.E. $J | ||
2040 | 2035 | "RTN","MSCZJOBU",35,0) | ||
2041 | 2036 | ; PID CAN BE A "*" WHICH SENDS AN INTERRUPT TO ALL MUMPS PROCESSES | ||
2042 | 2037 | "RTN","MSCZJOBU",36,0) | ||
2043 | 2038 | ; | ||
2044 | 2039 | "RTN","MSCZJOBU",37,0) | ||
2045 | 2040 | Q:$G(PID)="" | ||
2046 | 2041 | "RTN","MSCZJOBU",38,0) | ||
2047 | 2042 | ; | ||
2048 | 2043 | "RTN","MSCZJOBU",39,0) | ||
2049 | 2044 | I PID="*" D Q ; ALL PIDS | ||
2050 | 2045 | "RTN","MSCZJOBU",40,0) | ||
2051 | 2046 | . N ARRAY | ||
2052 | 2047 | "RTN","MSCZJOBU",41,0) | ||
2053 | 2048 | . D PIDS(.ARRAY) | ||
2054 | 2049 | "RTN","MSCZJOBU",42,0) | ||
2055 | 2050 | . N %J S %J="" | ||
2056 | 2051 | "RTN","MSCZJOBU",43,0) | ||
2057 | 2052 | . F S %J=$O(ARRAY(%J)) Q:%J="" D | ||
2058 | 2053 | "RTN","MSCZJOBU",44,0) | ||
2059 | 2054 | . . S A="test1",c="mupip intrpt "_%J_" > /dev/null" | ||
2060 | 2055 | "RTN","MSCZJOBU",45,0) | ||
2061 | 2056 | . . OPEN A:(COMM="mupip intrpt "_%J)::"PIPE" U A C A | ||
2062 | 2057 | "RTN","MSCZJOBU",46,0) | ||
2063 | 2058 | . . ;ZSYSTEM "mupip intrpt "_%J_" > /dev/null" | ||
2064 | 2059 | "RTN","MSCZJOBU",47,0) | ||
2065 | 2060 | ; | ||
2066 | 2061 | "RTN","MSCZJOBU",48,0) | ||
2067 | 2062 | ; JUST 1 PID | ||
2068 | 2063 | "RTN","MSCZJOBU",49,0) | ||
2069 | 2064 | Q:PID'?1N.N | ||
2070 | 2065 | "RTN","MSCZJOBU",50,0) | ||
2071 | 2066 | S A="test1" | ||
2072 | 2067 | "RTN","MSCZJOBU",51,0) | ||
2073 | 2068 | OPEN A:(COMM="mupip intrpt "_PID)::"PIPE" U A C A | ||
2074 | 2069 | "RTN","MSCZJOBU",52,0) | ||
2075 | 2070 | ;ZSYSTEM "mupip intrpt "_PID_" > /dev/null" | ||
2076 | 2071 | "RTN","MSCZJOBU",53,0) | ||
2077 | 2072 | Q | ||
2078 | 2073 | "RTN","MSCZJOBU",54,0) | ||
2079 | 2074 | ; | ||
2080 | 2075 | "RTN","MSCZJOBU",55,0) | ||
2081 | 2076 | KILL(PID) ; Send PID to mupip to kill process | ||
2082 | 2077 | "RTN","MSCZJOBU",56,0) | ||
2083 | 2078 | Q:PID'?1N.N | ||
2084 | 2079 | "RTN","MSCZJOBU",57,0) | ||
2085 | 2080 | X "ZSYSTEM ""mupip stop ""_PID_"" > /dev/null""" | ||
2086 | 2081 | "RTN","MSCZJOBU",58,0) | ||
2087 | 2082 | Q | ||
2088 | 2083 | "RTN","MSCZJOBU",59,0) | ||
2089 | 2084 | ; | ||
2090 | 2085 | "RTN","MSCZJOBU",60,0) | ||
2091 | 2086 | UNLOCK(NODE,PROC) ; Use lke to remove lock on NODE. | ||
2092 | 2087 | "RTN","MSCZJOBU",61,0) | ||
2093 | 2088 | N X | ||
2094 | 2089 | "RTN","MSCZJOBU",62,0) | ||
2095 | 2090 | S X="lke clear -lock="""_NODE_""" -nointeractive -output=/dev/null" | ||
2096 | 2091 | "RTN","MSCZJOBU",63,0) | ||
2097 | 2092 | ZSYSTEM X | ||
2098 | 2093 | "RTN","MSCZJOBU",64,0) | ||
2099 | 2094 | Q | ||
2100 | 2095 | "RTN","XOBVLL") | ||
2101 | 2096 | 0^19^B18038185 | ||
2102 | 2097 | "RTN","XOBVLL",1,0) | ||
2103 | 2098 | XOBVLL ;; mjk/alb MSC/JDA - VistALink Listen and Spawn Code ; 07/27/2002 13:00 | ||
2104 | 2099 | "RTN","XOBVLL",2,0) | ||
2105 | 2100 | ;;1.5;VistALink;**MSC**;Sep 09, 2005 | ||
2106 | 2101 | "RTN","XOBVLL",3,0) | ||
2107 | 2102 | ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026] | ||
2108 | 2103 | "RTN","XOBVLL",4,0) | ||
2109 | 2104 | ; | ||
2110 | 2105 | "RTN","XOBVLL",5,0) | ||
2111 | 2106 | QUIT | ||
2112 | 2107 | "RTN","XOBVLL",6,0) | ||
2113 | 2108 | ; | ||
2114 | 2109 | "RTN","XOBVLL",7,0) | ||
2115 | 2110 | ; ***deprecated*** tag ; Use START^XOBVTCP instead | ||
2116 | 2111 | "RTN","XOBVLL",8,0) | ||
2117 | 2112 | START(SOCKET) ; -- start listener | ||
2118 | 2113 | "RTN","XOBVLL",9,0) | ||
2119 | 2114 | DO START^XOBVTCP(SOCKET) | ||
2120 | 2115 | "RTN","XOBVLL",10,0) | ||
2121 | 2116 | QUIT | ||
2122 | 2117 | "RTN","XOBVLL",11,0) | ||
2123 | 2118 | ; | ||
2124 | 2119 | "RTN","XOBVLL",12,0) | ||
2125 | 2120 | ; ***deprecated*** tag ; Use UCX^XOBVTCP instead | ||
2126 | 2121 | "RTN","XOBVLL",13,0) | ||
2127 | 2122 | UCX ; -- VMS TCPIP (UCX) multi-thread entry point | ||
2128 | 2123 | "RTN","XOBVLL",14,0) | ||
2129 | 2124 | ; -- Called from VistALink .com files | ||
2130 | 2125 | "RTN","XOBVLL",15,0) | ||
2131 | 2126 | GOTO UCX^XOBVTCP | ||
2132 | 2127 | "RTN","XOBVLL",16,0) | ||
2133 | 2128 | ; | ||
2134 | 2129 | "RTN","XOBVLL",17,0) | ||
2135 | 2130 | SPAWN ; -- spawned process | ||
2136 | 2131 | "RTN","XOBVLL",18,0) | ||
2137 | 2132 | NEW X,XOBSTOP,XOBPORT,XOBHDLR,XOBLASTR | ||
2138 | 2133 | "RTN","XOBVLL",19,0) | ||
2139 | 2134 | ; | ||
2140 | 2135 | "RTN","XOBVLL",20,0) | ||
2141 | 2136 | SET XOBSTOP=0 | ||
2142 | 2137 | "RTN","XOBVLL",21,0) | ||
2143 | 2138 | SET XOBPORT=IO | ||
2144 | 2139 | "RTN","XOBVLL",22,0) | ||
2145 | 2140 | SET U="^" | ||
2146 | 2141 | "RTN","XOBVLL",23,0) | ||
2147 | 2142 | ; | ||
2148 | 2143 | "RTN","XOBVLL",24,0) | ||
2149 | 2144 | ; -- initialize timestamp for last time request made (used for debugging) | ||
2150 | 2145 | "RTN","XOBVLL",25,0) | ||
2151 | 2146 | SET XOBLASTR=0 | ||
2152 | 2147 | "RTN","XOBVLL",26,0) | ||
2153 | 2148 | ; | ||
2154 | 2149 | "RTN","XOBVLL",27,0) | ||
2155 | 2150 | ; -- set error trap | ||
2156 | 2151 | "RTN","XOBVLL",28,0) | ||
2157 | 2152 | ;Set up the error trap | ||
2158 | 2153 | "RTN","XOBVLL",29,0) | ||
2159 | 2154 | SET $ETRAP="DO ^%ZTER HALT" | ||
2160 | 2155 | "RTN","XOBVLL",30,0) | ||
2161 | 2156 | ; | ||
2162 | 2157 | "RTN","XOBVLL",31,0) | ||
2163 | 2158 | ; -- attempt to share the license; must have TCP port open first | ||
2164 | 2159 | "RTN","XOBVLL",32,0) | ||
2165 | 2160 | USE XOBPORT IF $TEXT(SHARELIC^%ZOSV)'="" DO SHARELIC^%ZOSV(1) | ||
2166 | 2161 | "RTN","XOBVLL",33,0) | ||
2167 | 2162 | ; | ||
2168 | 2163 | "RTN","XOBVLL",34,0) | ||
2169 | 2164 | ; -- start RUM for VistALink Handler | ||
2170 | 2165 | "RTN","XOBVLL",35,0) | ||
2171 | 2166 | DO LOGRSRC^%ZOSV("$VISTALINK HANDLER$",2,1) | ||
2172 | 2167 | "RTN","XOBVLL",36,0) | ||
2173 | 2168 | ; | ||
2174 | 2169 | "RTN","XOBVLL",37,0) | ||
2175 | 2170 | SET:^%ZOSF("OS")["GT.M" X=$$GTM^XOBVRH(.XOBHDLR) | ||
2176 | 2171 | "RTN","XOBVLL",38,0) | ||
2177 | 2172 | ; -- cache/initialize startup request handlers | ||
2178 | 2173 | "RTN","XOBVLL",39,0) | ||
2179 | 2174 | SET:^%ZOSF("OS")["OpenM" X=$$CACHE^XOBVRH(.XOBHDLR) | ||
2180 | 2175 | "RTN","XOBVLL",40,0) | ||
2181 | 2176 | IF 'X DO RMERR^XOBVRM(184001,$PIECE(X,U,2)) QUIT | ||
2182 | 2177 | "RTN","XOBVLL",41,0) | ||
2183 | 2178 | ; | ||
2184 | 2179 | "RTN","XOBVLL",42,0) | ||
2185 | 2180 | ; -- initialize tcp processing variables | ||
2186 | 2181 | "RTN","XOBVLL",43,0) | ||
2187 | 2182 | DO INIT^XOBVSKT | ||
2188 | 2183 | "RTN","XOBVLL",44,0) | ||
2189 | 2184 | ; | ||
2190 | 2185 | "RTN","XOBVLL",45,0) | ||
2191 | 2186 | ; -- change job name if possible | ||
2192 | 2187 | "RTN","XOBVLL",46,0) | ||
2193 | 2188 | DO SETNM^%ZOSV("VLink_"_$$CNV^XLFUTL($J,16)) | ||
2194 | 2189 | "RTN","XOBVLL",47,0) | ||
2195 | 2190 | ; | ||
2196 | 2191 | "RTN","XOBVLL",48,0) | ||
2197 | 2192 | ; -- loop until told to stop | ||
2198 | 2193 | "RTN","XOBVLL",49,0) | ||
2199 | 2194 | FOR DO NXTCALL QUIT:XOBSTOP | ||
2200 | 2195 | "RTN","XOBVLL",50,0) | ||
2201 | 2196 | ; | ||
2202 | 2197 | "RTN","XOBVLL",51,0) | ||
2203 | 2198 | ; -- final/clean tcp processing variables | ||
2204 | 2199 | "RTN","XOBVLL",52,0) | ||
2205 | 2200 | DO FINAL^XOBVSKT | ||
2206 | 2201 | "RTN","XOBVLL",53,0) | ||
2207 | 2202 | ; | ||
2208 | 2203 | "RTN","XOBVLL",54,0) | ||
2209 | 2204 | ; -- stop RUM for VistALink Handler | ||
2210 | 2205 | "RTN","XOBVLL",55,0) | ||
2211 | 2206 | DO LOGRSRC^%ZOSV("$VISTALINK HANDLER$",2,2) | ||
2212 | 2207 | "RTN","XOBVLL",56,0) | ||
2213 | 2208 | ; | ||
2214 | 2209 | "RTN","XOBVLL",57,0) | ||
2215 | 2210 | QUIT | ||
2216 | 2211 | "RTN","XOBVLL",58,0) | ||
2217 | 2212 | ; | ||
2218 | 2213 | "RTN","XOBVLL",59,0) | ||
2219 | 2214 | NXTCALL ; -- do next call | ||
2220 | 2215 | "RTN","XOBVLL",60,0) | ||
2221 | 2216 | NEW X,XOBROOT,XOBREAD,XOBTO,XOBFIRST,XOBOK,XOBRL,XOBDATA | ||
2222 | 2217 | "RTN","XOBVLL",61,0) | ||
2223 | 2218 | ; | ||
2224 | 2219 | "RTN","XOBVLL",62,0) | ||
2225 | 2220 | ; -- set up error trap | ||
2226 | 2221 | "RTN","XOBVLL",63,0) | ||
2227 | 2222 | NEW $ESTACK SET $ETRAP="DO SYSERR^XOBVLL" | ||
2228 | 2223 | "RTN","XOBVLL",64,0) | ||
2229 | 2224 | ; | ||
2230 | 2225 | "RTN","XOBVLL",65,0) | ||
2231 | 2226 | ; -- setup environment variables | ||
2232 | 2227 | "RTN","XOBVLL",66,0) | ||
2233 | 2228 | NEW DIQUIET SET DIQUIET=1 | ||
2234 | 2229 | "RTN","XOBVLL",67,0) | ||
2235 | 2230 | SET U="^",DTIME=$GET(DTIME,900),DT=$$DT^XLFDT() | ||
2236 | 2231 | "RTN","XOBVLL",68,0) | ||
2237 | 2232 | ; | ||
2238 | 2233 | "RTN","XOBVLL",69,0) | ||
2239 | 2234 | ; -- initialize 'current' request handler to empty string | ||
2240 | 2235 | "RTN","XOBVLL",70,0) | ||
2241 | 2236 | SET XOBHDLR="" | ||
2242 | 2237 | "RTN","XOBVLL",71,0) | ||
2243 | 2238 | ; | ||
2244 | 2239 | "RTN","XOBVLL",72,0) | ||
2245 | 2240 | ; -- # of chars to get on first read / read 11 for Broker initial read | ||
2246 | 2241 | "RTN","XOBVLL",73,0) | ||
2247 | 2242 | SET XOBREAD=11 | ||
2248 | 2243 | "RTN","XOBVLL",74,0) | ||
2249 | 2244 | ; | ||
2250 | 2245 | "RTN","XOBVLL",75,0) | ||
2251 | 2246 | ; -- get J2SE heartbet rate for timeout plus network latency factor | ||
2252 | 2247 | "RTN","XOBVLL",76,0) | ||
2253 | 2248 | SET XOBTO=$$GETRATE^XOBVLIB()+$$GETDELTA^XOBVLIB() | ||
2254 | 2249 | "RTN","XOBVLL",77,0) | ||
2255 | 2250 | ; | ||
2256 | 2251 | "RTN","XOBVLL",78,0) | ||
2257 | 2252 | ; -- get J2EE timeout value for app serv environment | ||
2258 | 2253 | "RTN","XOBVLL",79,0) | ||
2259 | 2254 | IF $GET(XOBSYS("ENV"))="j2ee" SET XOBTO=$$GETASTO^XOBVLIB() | ||
2260 | 2255 | "RTN","XOBVLL",80,0) | ||
2261 | 2256 | ; | ||
2262 | 2257 | "RTN","XOBVLL",81,0) | ||
2263 | 2258 | ; -- set first read flag | ||
2264 | 2259 | "RTN","XOBVLL",82,0) | ||
2265 | 2260 | SET XOBFIRST=1 | ||
2266 | 2261 | "RTN","XOBVLL",83,0) | ||
2267 | 2262 | ; | ||
2268 | 2263 | "RTN","XOBVLL",84,0) | ||
2269 | 2264 | ; -- setup intake global | ||
2270 | 2265 | "RTN","XOBVLL",85,0) | ||
2271 | 2266 | SET XOBROOT=$NAME(^TMP("XOBVLL",$JOB)) | ||
2272 | 2267 | "RTN","XOBVLL",86,0) | ||
2273 | 2268 | KILL @XOBROOT | ||
2274 | 2269 | "RTN","XOBVLL",87,0) | ||
2275 | 2270 | ; | ||
2276 | 2271 | "RTN","XOBVLL",88,0) | ||
2277 | 2272 | ; -- read from socket port | ||
2278 | 2273 | "RTN","XOBVLL",89,0) | ||
2279 | 2274 | USE XOBPORT | ||
2280 | 2275 | "RTN","XOBVLL",90,0) | ||
2281 | 2276 | SET XOBOK=$$READ^XOBVSKT(XOBROOT,.XOBREAD,.XOBTO,.XOBFIRST,.XOBSTOP,.XOBDATA,.XOBHDLR) | ||
2282 | 2277 | "RTN","XOBVLL",91,0) | ||
2283 | 2278 | ; | ||
2284 | 2279 | "RTN","XOBVLL",92,0) | ||
2285 | 2280 | ; -- timed out ; cleanup user and exit | ||
2286 | 2281 | "RTN","XOBVLL",93,0) | ||
2287 | 2282 | IF 'XOBOK!(XOBSTOP) DO GOTO NXTCALLQ | ||
2288 | 2283 | "RTN","XOBVLL",94,0) | ||
2289 | 2284 | . IF $GET(DUZ) DO CLEAN^XOBSCAV1 | ||
2290 | 2285 | "RTN","XOBVLL",95,0) | ||
2291 | 2286 | . SET XOBSTOP=1 | ||
2292 | 2287 | "RTN","XOBVLL",96,0) | ||
2293 | 2288 | ; | ||
2294 | 2289 | "RTN","XOBVLL",97,0) | ||
2295 | 2290 | ; -- need null device | ||
2296 | 2291 | "RTN","XOBVLL",98,0) | ||
2297 | 2292 | IF '$DATA(XOBNULL) DO ERROR(181002,$$EZBLD^DIALOG(181002),XOBPORT) SET XOBSTOP=1 GOTO NXTCALLQ | ||
2298 | 2293 | "RTN","XOBVLL",99,0) | ||
2299 | 2294 | ; | ||
2300 | 2295 | "RTN","XOBVLL",100,0) | ||
2301 | 2296 | ; -- call request manager | ||
2302 | 2297 | "RTN","XOBVLL",101,0) | ||
2303 | 2298 | SET XOBOK=$$EN^XOBVRM(XOBROOT,.XOBDATA,.XOBHDLR) | ||
2304 | 2299 | "RTN","XOBVLL",102,0) | ||
2305 | 2300 | ; -- timestamp last time request made | ||
2306 | 2301 | "RTN","XOBVLL",103,0) | ||
2307 | 2302 | SET XOBLASTR=$$NOW^XLFDT() | ||
2308 | 2303 | "RTN","XOBVLL",104,0) | ||
2309 | 2304 | ; -- cleanup intake global | ||
2310 | 2305 | "RTN","XOBVLL",105,0) | ||
2311 | 2306 | KILL @XOBROOT | ||
2312 | 2307 | "RTN","XOBVLL",106,0) | ||
2313 | 2308 | ; | ||
2314 | 2309 | "RTN","XOBVLL",107,0) | ||
2315 | 2310 | NXTCALLQ ; -- exit | ||
2316 | 2311 | "RTN","XOBVLL",108,0) | ||
2317 | 2312 | QUIT | ||
2318 | 2313 | "RTN","XOBVLL",109,0) | ||
2319 | 2314 | ; | ||
2320 | 2315 | "RTN","XOBVLL",110,0) | ||
2321 | 2316 | ; ---------------------------------------------------------------------------------- | ||
2322 | 2317 | "RTN","XOBVLL",111,0) | ||
2323 | 2318 | ; System Error Handler | ||
2324 | 2319 | "RTN","XOBVLL",112,0) | ||
2325 | 2320 | ; ---------------------------------------------------------------------------------- | ||
2326 | 2321 | "RTN","XOBVLL",113,0) | ||
2327 | 2322 | SYSERR ; -- send system error message | ||
2328 | 2323 | "RTN","XOBVLL",114,0) | ||
2329 | 2324 | ; -- If we get an error in the error handler just Halt | ||
2330 | 2325 | "RTN","XOBVLL",115,0) | ||
2331 | 2326 | SET $ETRAP="D ^%ZTER HALT" | ||
2332 | 2327 | "RTN","XOBVLL",116,0) | ||
2333 | 2328 | ; | ||
2334 | 2329 | "RTN","XOBVLL",117,0) | ||
2335 | 2330 | DO ERROR(181001,$$EZBLD^DIALOG(181001,$$EC^%ZOSV),XOBPORT) ; -- Get the error code | ||
2336 | 2331 | "RTN","XOBVLL",118,0) | ||
2337 | 2332 | QUIT | ||
2338 | 2333 | "RTN","XOBVLL",119,0) | ||
2339 | 2334 | ; | ||
2340 | 2335 | "RTN","XOBVLL",120,0) | ||
2341 | 2336 | ERROR(XOBEC,XOBMSG,XOBPORT) ; -- send error message | ||
2342 | 2337 | "RTN","XOBVLL",121,0) | ||
2343 | 2338 | NEW XOBDAT | ||
2344 | 2339 | "RTN","XOBVLL",122,0) | ||
2345 | 2340 | ; | ||
2346 | 2341 | "RTN","XOBVLL",123,0) | ||
2347 | 2342 | ; -- If we get an error in the error handler just Halt | ||
2348 | 2343 | "RTN","XOBVLL",124,0) | ||
2349 | 2344 | SET $ETRAP="D ^%ZTER HALT" | ||
2350 | 2345 | "RTN","XOBVLL",125,0) | ||
2351 | 2346 | ; | ||
2352 | 2347 | "RTN","XOBVLL",126,0) | ||
2353 | 2348 | ; -- set up error info | ||
2354 | 2349 | "RTN","XOBVLL",127,0) | ||
2355 | 2350 | SET XOBDAT("MESSAGE TYPE")=3 | ||
2356 | 2351 | "RTN","XOBVLL",128,0) | ||
2357 | 2352 | SET XOBDAT("ERRORS",1,"CODE")=XOBEC | ||
2358 | 2353 | "RTN","XOBVLL",129,0) | ||
2359 | 2354 | SET XOBDAT("ERRORS",1,"ERROR TYPE")="system" | ||
2360 | 2355 | "RTN","XOBVLL",130,0) | ||
2361 | 2356 | SET XOBDAT("ERRORS",1,"FAULT STRING")="System Error" | ||
2362 | 2357 | "RTN","XOBVLL",131,0) | ||
2363 | 2358 | SET XOBDAT("ERRORS",1,"CDATA")=1 | ||
2364 | 2359 | "RTN","XOBVLL",132,0) | ||
2365 | 2360 | SET XOBDAT("ERRORS",1,"MESSAGE",1)=XOBMSG | ||
2366 | 2361 | "RTN","XOBVLL",133,0) | ||
2367 | 2362 | ; | ||
2368 | 2363 | "RTN","XOBVLL",134,0) | ||
2369 | 2364 | ; -- if serious error, save error info, logout, and halt | ||
2370 | 2365 | "RTN","XOBVLL",135,0) | ||
2371 | 2366 | IF XOBMSG["<READ>"!(XOBMSG["<WRITE>")!(XOBMSG["<SYSTEM>")!(XOBMSG["READERR")!(XOBMSG["WRITERR")!(XOBMSG["SYSERR") DO HALT | ||
2372 | 2367 | "RTN","XOBVLL",136,0) | ||
2373 | 2368 | . DO ^%ZTER | ||
2374 | 2369 | "RTN","XOBVLL",137,0) | ||
2375 | 2370 | . IF $GET(DUZ) DO CLEAN^XOBSCAV1 | ||
2376 | 2371 | "RTN","XOBVLL",138,0) | ||
2377 | 2372 | ; | ||
2378 | 2373 | "RTN","XOBVLL",139,0) | ||
2379 | 2374 | ; -- send error back to client | ||
2380 | 2375 | "RTN","XOBVLL",140,0) | ||
2381 | 2376 | USE XOBPORT | ||
2382 | 2377 | "RTN","XOBVLL",141,0) | ||
2383 | 2378 | DO ERROR^XOBVLIB(.XOBDAT) | ||
2384 | 2379 | "RTN","XOBVLL",142,0) | ||
2385 | 2380 | ; | ||
2386 | 2381 | "RTN","XOBVLL",143,0) | ||
2387 | 2382 | ; -- just quit if no slots are available or logins are disabled | ||
2388 | 2383 | "RTN","XOBVLL",144,0) | ||
2389 | 2384 | IF (XOBEC=181003)!(XOBEC=181004) QUIT | ||
2390 | 2385 | "RTN","XOBVLL",145,0) | ||
2391 | 2386 | ; | ||
2392 | 2387 | "RTN","XOBVLL",146,0) | ||
2393 | 2388 | ; -- need to make sure any locks are released since code aborted ungracefully | ||
2394 | 2389 | "RTN","XOBVLL",147,0) | ||
2395 | 2390 | LOCK | ||
2396 | 2391 | "RTN","XOBVLL",148,0) | ||
2397 | 2392 | ; | ||
2398 | 2393 | "RTN","XOBVLL",149,0) | ||
2399 | 2394 | ; -- Save off the error | ||
2400 | 2395 | "RTN","XOBVLL",150,0) | ||
2401 | 2396 | DO ^%ZTER | ||
2402 | 2397 | "RTN","XOBVLL",151,0) | ||
2403 | 2398 | ; | ||
2404 | 2399 | "RTN","XOBVLL",152,0) | ||
2405 | 2400 | ; -- go back to listening | ||
2406 | 2401 | "RTN","XOBVLL",153,0) | ||
2407 | 2402 | SET $ETRAP="Q:($ESTACK&'$QUIT) Q:$ESTACK -9 S $ECODE="""" DO KILL^XOBVLL G NXTCALLQ^XOBVLL",$ECODE=",U99," | ||
2408 | 2403 | "RTN","XOBVLL",154,0) | ||
2409 | 2404 | QUIT | ||
2410 | 2405 | "RTN","XOBVLL",155,0) | ||
2411 | 2406 | ; | ||
2412 | 2407 | "RTN","XOBVLL",156,0) | ||
2413 | 2408 | KILL ; -- new VistALink variables and then do big KILL | ||
2414 | 2409 | "RTN","XOBVLL",157,0) | ||
2415 | 2410 | NEW XOBPORT,XOBSTOP,XOBNULL,XOBOS,XOBSYS,XOBHDLR,XOBOK | ||
2416 | 2411 | "RTN","XOBVLL",158,0) | ||
2417 | 2412 | DO KILL^XUSCLEAN | ||
2418 | 2413 | "RTN","XOBVLL",159,0) | ||
2419 | 2414 | QUIT | ||
2420 | 2415 | "RTN","XOBVLL",160,0) | ||
2421 | 2416 | ; | ||
2422 | 2417 | "RTN","XOBVRH") | ||
2423 | 2418 | 0^20^B13028891 | ||
2424 | 2419 | "RTN","XOBVRH",1,0) | ||
2425 | 2420 | XOBVRH ;mjk/alb SC/JDA - VistaLink Request Handler Utilities ; 07/27/2002 13:00 | ||
2426 | 2421 | "RTN","XOBVRH",2,0) | ||
2427 | 2422 | ;;1.5;VistALink;**MSC**;Sep 09, 2005 | ||
2428 | 2423 | "RTN","XOBVRH",3,0) | ||
2429 | 2424 | ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026] | ||
2430 | 2425 | "RTN","XOBVRH",4,0) | ||
2431 | 2426 | ; | ||
2432 | 2427 | "RTN","XOBVRH",5,0) | ||
2433 | 2428 | QUIT | ||
2434 | 2429 | "RTN","XOBVRH",6,0) | ||
2435 | 2430 | ; | ||
2436 | 2431 | "RTN","XOBVRH",7,0) | ||
2437 | 2432 | ; ------------------------------------------------------------------ | ||
2438 | 2433 | "RTN","XOBVRH",8,0) | ||
2439 | 2434 | ; Message Type Handler Utilities | ||
2440 | 2435 | "RTN","XOBVRH",9,0) | ||
2441 | 2436 | ; ------------------------------------------------------------------ | ||
2442 | 2437 | "RTN","XOBVRH",10,0) | ||
2443 | 2438 | ; | ||
2444 | 2439 | "RTN","XOBVRH",11,0) | ||
2445 | 2440 | ; -- set up msg type info using message name | ||
2446 | 2441 | "RTN","XOBVRH",12,0) | ||
2447 | 2442 | MSGNAME(XOBMSG,XOBHDLR) ; -- set up msg type info | ||
2448 | 2443 | "RTN","XOBVRH",13,0) | ||
2449 | 2444 | QUIT $$SETMSG(XOBMSG,"NAME",.XOBHDLR) | ||
2450 | 2445 | "RTN","XOBVRH",14,0) | ||
2451 | 2446 | ; | ||
2452 | 2447 | "RTN","XOBVRH",15,0) | ||
2453 | 2448 | ; -- set up msg type info using message type | ||
2454 | 2449 | "RTN","XOBVRH",16,0) | ||
2455 | 2450 | MSGTYPE(XOBMSG,XOBHDLR) ; -- set up msg type info | ||
2456 | 2451 | "RTN","XOBVRH",17,0) | ||
2457 | 2452 | QUIT $$SETMSG(XOBMSG,"MSGTYPE",.XOBHDLR) | ||
2458 | 2453 | "RTN","XOBVRH",18,0) | ||
2459 | 2454 | ; | ||
2460 | 2455 | "RTN","XOBVRH",19,0) | ||
2461 | 2456 | ; -- set up msg type info using proprietary string | ||
2462 | 2457 | "RTN","XOBVRH",20,0) | ||
2463 | 2458 | MSGSINK(XOBMSG,XOBHDLR) ; -- set up msg type info | ||
2464 | 2459 | "RTN","XOBVRH",21,0) | ||
2465 | 2460 | QUIT $$SETMSG(XOBMSG,"D",.XOBHDLR) | ||
2466 | 2461 | "RTN","XOBVRH",22,0) | ||
2467 | 2462 | ; | ||
2468 | 2463 | "RTN","XOBVRH",23,0) | ||
2469 | 2464 | CACHE(XOBHDLR) ; -- cache req handlers | ||
2470 | 2465 | "RTN","XOBVRH",24,0) | ||
2471 | 2466 | NEW TYPE,TYPE0,XOBOK | ||
2472 | 2467 | "RTN","XOBVRH",25,0) | ||
2473 | 2468 | SET TYPE=0 | ||
2474 | 2469 | "RTN","XOBVRH",26,0) | ||
2475 | 2470 | SET XOBOK=1 | ||
2476 | 2471 | "RTN","XOBVRH",27,0) | ||
2477 | 2472 | ; | ||
2478 | 2473 | "RTN","XOBVRH",28,0) | ||
2479 | 2474 | ; -- load request handler info | ||
2480 | 2475 | "RTN","XOBVRH",29,0) | ||
2481 | 2476 | FOR SET TYPE=$ORDER(^XOB(18.05,"AS",1,TYPE)) QUIT:'TYPE DO QUIT:'XOBOK | ||
2482 | 2477 | "RTN","XOBVRH",30,0) | ||
2483 | 2478 | . SET TYPE0=$GET(^XOB(18.05,TYPE,0)) | ||
2484 | 2479 | "RTN","XOBVRH",31,0) | ||
2485 | 2480 | . DO SET(TYPE,TYPE0,.XOBHDLR) | ||
2486 | 2481 | "RTN","XOBVRH",32,0) | ||
2487 | 2482 | . SET XOBOK=$GET(XOBHDLR(TYPE)) | ||
2488 | 2483 | "RTN","XOBVRH",33,0) | ||
2489 | 2484 | . IF 'XOBOK SET XOBOK=XOBOK_U_$GET(XOBHDLR,"ERROR") | ||
2490 | 2485 | "RTN","XOBVRH",34,0) | ||
2491 | 2486 | QUIT XOBOK | ||
2492 | 2487 | "RTN","XOBVRH",35,0) | ||
2493 | 2488 | ; | ||
2494 | 2489 | "RTN","XOBVRH",36,0) | ||
2495 | 2490 | ; | ||
2496 | 2491 | "RTN","XOBVRH",37,0) | ||
2497 | 2492 | GTM(XOBHDLR) ; -- GT.M req handlers | ||
2498 | 2493 | "RTN","XOBVRH",38,0) | ||
2499 | 2494 | Q $$CACHE(.XOBHDLR) ; Same as Cache until something different is needed | ||
2500 | 2495 | "RTN","XOBVRH",39,0) | ||
2501 | 2496 | ; | ||
2502 | 2497 | "RTN","XOBVRH",40,0) | ||
2503 | 2498 | ; -- set up msg type info | ||
2504 | 2499 | "RTN","XOBVRH",41,0) | ||
2505 | 2500 | SETMSG(XOBMSG,XOBXREF,XOBHDLR) ; | ||
2506 | 2501 | "RTN","XOBVRH",42,0) | ||
2507 | 2502 | NEW TYPE,TYPEO | ||
2508 | 2503 | "RTN","XOBVRH",43,0) | ||
2509 | 2504 | KILL XOBHDLR(0) | ||
2510 | 2505 | "RTN","XOBVRH",44,0) | ||
2511 | 2506 | ; | ||
2512 | 2507 | "RTN","XOBVRH",45,0) | ||
2513 | 2508 | ; -- already cached? | ||
2514 | 2509 | "RTN","XOBVRH",46,0) | ||
2515 | 2510 | SET TYPE=$ORDER(XOBHDLR(XOBXREF,XOBMSG,"")) | ||
2516 | 2511 | "RTN","XOBVRH",47,0) | ||
2517 | 2512 | IF TYPE QUIT TYPE | ||
2518 | 2513 | "RTN","XOBVRH",48,0) | ||
2519 | 2514 | ; | ||
2520 | 2515 | "RTN","XOBVRH",49,0) | ||
2521 | 2516 | ; -- load req handler | ||
2522 | 2517 | "RTN","XOBVRH",50,0) | ||
2523 | 2518 | SET TYPE=+$ORDER(^XOB(18.05,XOBXREF,XOBMSG,"")) | ||
2524 | 2519 | "RTN","XOBVRH",51,0) | ||
2525 | 2520 | IF TYPE DO | ||
2526 | 2521 | "RTN","XOBVRH",52,0) | ||
2527 | 2522 | . SET TYPE0=$GET(^XOB(18.05,TYPE,0)) | ||
2528 | 2523 | "RTN","XOBVRH",53,0) | ||
2529 | 2524 | . DO SET(.TYPE,.TYPE0,.XOBHDLR) | ||
2530 | 2525 | "RTN","XOBVRH",54,0) | ||
2531 | 2526 | IF 'TYPE DO | ||
2532 | 2527 | "RTN","XOBVRH",55,0) | ||
2533 | 2528 | . SET XOBHDLR(0)=0 | ||
2534 | 2529 | "RTN","XOBVRH",56,0) | ||
2535 | 2530 | . SET XOBHDLR(0,"ERROR")="No message type defined" | ||
2536 | 2531 | "RTN","XOBVRH",57,0) | ||
2537 | 2532 | QUIT TYPE | ||
2538 | 2533 | "RTN","XOBVRH",58,0) | ||
2539 | 2534 | ; | ||
2540 | 2535 | "RTN","XOBVRH",59,0) | ||
2541 | 2536 | SET(TYPE,TYPE0,XOBHDLR) ; -- set nodes | ||
2542 | 2537 | "RTN","XOBVRH",60,0) | ||
2543 | 2538 | NEW IRTN,XOBICBK | ||
2544 | 2539 | "RTN","XOBVRH",61,0) | ||
2545 | 2540 | KILL XOBHDLR(TYPE) | ||
2546 | 2541 | "RTN","XOBVRH",62,0) | ||
2547 | 2542 | SET IRTN=$$IRTN(TYPE0) | ||
2548 | 2543 | "RTN","XOBVRH",63,0) | ||
2549 | 2544 | IF IRTN="" DO GOTO SETQ | ||
2550 | 2545 | "RTN","XOBVRH",64,0) | ||
2551 | 2546 | . SET XOBHDLR(TYPE)=0 | ||
2552 | 2547 | "RTN","XOBVRH",65,0) | ||
2553 | 2548 | . IF TYPE0="" SET XOBHDLR(TYPE,"ERROR")="No entry for message type ["_TYPE_"]" QUIT | ||
2554 | 2549 | "RTN","XOBVRH",66,0) | ||
2555 | 2550 | . IF IRTN="" SET XOBHDLR(TYPE,"ERROR")="Invalid interface routine specified ["_$PIECE(TYPE0,U,5)_"]" QUIT | ||
2556 | 2551 | "RTN","XOBVRH",67,0) | ||
2557 | 2552 | ; | ||
2558 | 2553 | "RTN","XOBVRH",68,0) | ||
2559 | 2554 | SET XOBHDLR(TYPE)=1 | ||
2560 | 2555 | "RTN","XOBVRH",69,0) | ||
2561 | 2556 | SET XOBHDLR(TYPE,"AUTHENTICATE")=+$PIECE(TYPE0,U,4) | ||
2562 | 2557 | "RTN","XOBVRH",70,0) | ||
2563 | 2558 | SET XOBHDLR(TYPE,"REQHDLR")="DO REQHDLR^"_IRTN_"(.XOBDATA)" | ||
2564 | 2559 | "RTN","XOBVRH",71,0) | ||
2565 | 2560 | SET XOBHDLR(TYPE,"READER")="DO READER^"_IRTN_"(.XOBX,.XOBDATA)" | ||
2566 | 2561 | "RTN","XOBVRH",72,0) | ||
2567 | 2562 | IF $PIECE(TYPE0,U,1)]"" SET XOBHDLR("NAME",$PIECE(TYPE0,U,1),TYPE)="" | ||
2568 | 2563 | "RTN","XOBVRH",73,0) | ||
2569 | 2564 | IF $PIECE(TYPE0,U,2)]"" SET XOBHDLR("MSGTYPE",$PIECE(TYPE0,U,2),TYPE)="" | ||
2570 | 2565 | "RTN","XOBVRH",74,0) | ||
2571 | 2566 | IF $PIECE(TYPE0,U,7)]"" SET XOBHDLR("D",$PIECE(TYPE0,U,7),TYPE)="" | ||
2572 | 2567 | "RTN","XOBVRH",75,0) | ||
2573 | 2568 | ; | ||
2574 | 2569 | "RTN","XOBVRH",76,0) | ||
2575 | 2570 | ; -- set up SAX callbacks | ||
2576 | 2571 | "RTN","XOBVRH",77,0) | ||
2577 | 2572 | SET XOBHDLR(TYPE,"CB","ELEST")="QUIT" | ||
2578 | 2573 | "RTN","XOBVRH",78,0) | ||
2579 | 2574 | SET XOBHDLR(TYPE,"CB","ELEND")="QUIT" | ||
2580 | 2575 | "RTN","XOBVRH",79,0) | ||
2581 | 2576 | SET XOBHDLR(TYPE,"CB","CHR")="QUIT" | ||
2582 | 2577 | "RTN","XOBVRH",80,0) | ||
2583 | 2578 | ; | ||
2584 | 2579 | "RTN","XOBVRH",81,0) | ||
2585 | 2580 | XECUTE "DO CALLBACK^"_IRTN_"(.XOBICBK)" | ||
2586 | 2581 | "RTN","XOBVRH",82,0) | ||
2587 | 2582 | IF $DATA(XOBICBK("STARTELEMENT")) SET XOBHDLR(TYPE,"CB","ELEST")="DO "_XOBICBK("STARTELEMENT")_"(.ELE,.ATR)" | ||
2588 | 2583 | "RTN","XOBVRH",83,0) | ||
2589 | 2584 | IF $DATA(XOBICBK("ENDELEMENT")) SET XOBHDLR(TYPE,"CB","ELEND")="DO "_XOBICBK("ENDELEMENT")_"(.ELE)" | ||
2590 | 2585 | "RTN","XOBVRH",84,0) | ||
2591 | 2586 | IF $DATA(XOBICBK("CHARACTERS")) SET XOBHDLR(TYPE,"CB","CHR")="DO "_XOBICBK("CHARACTERS")_"(.TXT)" | ||
2592 | 2587 | "RTN","XOBVRH",85,0) | ||
2593 | 2588 | SETQ ; | ||
2594 | 2589 | "RTN","XOBVRH",86,0) | ||
2595 | 2590 | QUIT | ||
2596 | 2591 | "RTN","XOBVRH",87,0) | ||
2597 | 2592 | ; | ||
2598 | 2593 | "RTN","XOBVRH",88,0) | ||
2599 | 2594 | ; -- get interface routine and test for existence | ||
2600 | 2595 | "RTN","XOBVRH",89,0) | ||
2601 | 2596 | IRTN(XOBTYPE0) ; | ||
2602 | 2597 | "RTN","XOBVRH",90,0) | ||
2603 | 2598 | NEW X,RTN | ||
2604 | 2599 | "RTN","XOBVRH",91,0) | ||
2605 | 2600 | SET RTN="" | ||
2606 | 2601 | "RTN","XOBVRH",92,0) | ||
2607 | 2602 | SET X=$PIECE(XOBTYPE0,"^",5) | ||
2608 | 2603 | "RTN","XOBVRH",93,0) | ||
2609 | 2604 | IF X]"" DO | ||
2610 | 2605 | "RTN","XOBVRH",94,0) | ||
2611 | 2606 | . XECUTE ^%ZOSF("TEST") | ||
2612 | 2607 | "RTN","XOBVRH",95,0) | ||
2613 | 2608 | . IF $TEST SET RTN=X | ||
2614 | 2609 | "RTN","XOBVRH",96,0) | ||
2615 | 2610 | QUIT RTN | ||
2616 | 2611 | "RTN","XOBVRH",97,0) | ||
2617 | 2612 | ; | ||
2618 | 2613 | "RTN","XOBVSKT") | ||
2619 | 2614 | 0^21^B19778790 | ||
2620 | 2615 | "RTN","XOBVSKT",1,0) | ||
2621 | 2616 | XOBVSKT ;; mjk/alb MSC/JDA- VistaLink Socket Methods ; 07/27/2002 13:00 | ||
2622 | 2617 | "RTN","XOBVSKT",2,0) | ||
2623 | 2618 | ;;1.5;VistALink;**MSC**;Sep 09, 2005 | ||
2624 | 2619 | "RTN","XOBVSKT",3,0) | ||
2625 | 2620 | ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026] | ||
2626 | 2621 | "RTN","XOBVSKT",4,0) | ||
2627 | 2622 | ; | ||
2628 | 2623 | "RTN","XOBVSKT",5,0) | ||
2629 | 2624 | QUIT | ||
2630 | 2625 | "RTN","XOBVSKT",6,0) | ||
2631 | 2626 | ; | ||
2632 | 2627 | "RTN","XOBVSKT",7,0) | ||
2633 | 2628 | ; ------------------------------------------------------------------------------------ | ||
2634 | 2629 | "RTN","XOBVSKT",8,0) | ||
2635 | 2630 | ; Methods for Read fromto TCP/IP Socket | ||
2636 | 2631 | "RTN","XOBVSKT",9,0) | ||
2637 | 2632 | ; ------------------------------------------------------------------------------------ | ||
2638 | 2633 | "RTN","XOBVSKT",10,0) | ||
2639 | 2634 | READ(XOBROOT,XOBREAD,XOBTO,XOBFIRST,XOBSTOP,XOBDATA,XOBHDLR) ; | ||
2640 | 2635 | "RTN","XOBVSKT",11,0) | ||
2641 | 2636 | NEW X,EOT,OUT,STR,LINE,PIECES,DONE,TOFLAG,XOBCNT,XOBLEN,XOBBH,XOBEH,BS,ES,XOBOK,XOBX | ||
2642 | 2637 | "RTN","XOBVSKT",12,0) | ||
2643 | 2638 | ; | ||
2644 | 2639 | "RTN","XOBVSKT",13,0) | ||
2645 | 2640 | SET STR="",EOT=$CHAR(4),DONE=0,LINE=0,XOBOK=1 | ||
2646 | 2641 | "RTN","XOBVSKT",14,0) | ||
2647 | 2642 | ; | ||
2648 | 2643 | "RTN","XOBVSKT",15,0) | ||
2649 | 2644 | ; -- READ tcp stream to global buffer | main calling tag NXTCALL^XOBVLL | ||
2650 | 2645 | "RTN","XOBVSKT",16,0) | ||
2651 | 2646 | FOR READ XOBX#XOBREAD:XOBTO SET TOFLAG=$TEST DO:XOBFIRST CHK DO:'XOBSTOP!('DONE) QUIT:DONE | ||
2652 | 2647 | "RTN","XOBVSKT",17,0) | ||
2653 | 2648 | . ; | ||
2654 | 2649 | "RTN","XOBVSKT",18,0) | ||
2655 | 2650 | . ; -- if length of (new intake + current) is too large for buffer then store current | ||
2656 | 2651 | "RTN","XOBVSKT",19,0) | ||
2657 | 2652 | . IF $LENGTH(STR)+$LENGTH(XOBX)>400 DO ADD(STR) SET STR="" | ||
2658 | 2653 | "RTN","XOBVSKT",20,0) | ||
2659 | 2654 | . SET STR=STR_XOBX | ||
2660 | 2655 | "RTN","XOBVSKT",21,0) | ||
2661 | 2656 | . ; | ||
2662 | 2657 | "RTN","XOBVSKT",22,0) | ||
2663 | 2658 | . ; -- add node at each line-feed character | ||
2664 | 2659 | "RTN","XOBVSKT",23,0) | ||
2665 | 2660 | . ; COMMENTED OUT: Not needed anymore, and has side effect of stripping out line feeds in input | ||
2666 | 2661 | "RTN","XOBVSKT",24,0) | ||
2667 | 2662 | . ; array-type parameter values (in XML mode) | ||
2668 | 2663 | "RTN","XOBVSKT",25,0) | ||
2669 | 2664 | . ; FOR QUIT:STR'[$CHAR(10) DO ADD($PIECE(STR,$CHAR(10))) SET STR=$PIECE(STR,$CHAR(10),2,999) | ||
2670 | 2665 | "RTN","XOBVSKT",26,0) | ||
2671 | 2666 | . ; | ||
2672 | 2667 | "RTN","XOBVSKT",27,0) | ||
2673 | 2668 | . ; -- if end-of-text marker found then wrap up and quit | ||
2674 | 2669 | "RTN","XOBVSKT",28,0) | ||
2675 | 2670 | . IF STR[EOT SET STR=$PIECE(STR,EOT) DO ADD(STR) SET DONE=1 QUIT | ||
2676 | 2671 | "RTN","XOBVSKT",29,0) | ||
2677 | 2672 | . ; | ||
2678 | 2673 | "RTN","XOBVSKT",30,0) | ||
2679 | 2674 | . ; -- M XML parser cannot handle an element name split across nodes | ||
2680 | 2675 | "RTN","XOBVSKT",31,0) | ||
2681 | 2676 | . SET PIECES=$LENGTH(STR,">") | ||
2682 | 2677 | "RTN","XOBVSKT",32,0) | ||
2683 | 2678 | . IF PIECES>1 DO ADD($PIECE(STR,">",1,PIECES-1)_">") SET STR=$PIECE(STR,">",PIECES,999) | ||
2684 | 2679 | "RTN","XOBVSKT",33,0) | ||
2685 | 2680 | ; | ||
2686 | 2681 | "RTN","XOBVSKT",34,0) | ||
2687 | 2682 | QUIT XOBOK | ||
2688 | 2683 | "RTN","XOBVSKT",35,0) | ||
2689 | 2684 | ; | ||
2690 | 2685 | "RTN","XOBVSKT",36,0) | ||
2691 | 2686 | ADD(TXT) ; -- add new intake line | ||
2692 | 2687 | "RTN","XOBVSKT",37,0) | ||
2693 | 2688 | SET LINE=LINE+1 | ||
2694 | 2689 | "RTN","XOBVSKT",38,0) | ||
2695 | 2690 | SET @XOBROOT@(LINE)=TXT | ||
2696 | 2691 | "RTN","XOBVSKT",39,0) | ||
2697 | 2692 | QUIT | ||
2698 | 2693 | "RTN","XOBVSKT",40,0) | ||
2699 | 2694 | ; | ||
2700 | 2695 | "RTN","XOBVSKT",41,0) | ||
2701 | 2696 | CHK ; -- check if first read and change timeout and chars to read | ||
2702 | 2697 | "RTN","XOBVSKT",42,0) | ||
2703 | 2698 | SET XOBFIRST=0 | ||
2704 | 2699 | "RTN","XOBVSKT",43,0) | ||
2705 | 2700 | ; | ||
2706 | 2701 | "RTN","XOBVSKT",44,0) | ||
2707 | 2702 | ; -- abort if time out occurred and nothing was read | ||
2708 | 2703 | "RTN","XOBVSKT",45,0) | ||
2709 | 2704 | IF 'TOFLAG,$GET(XOBX)="" SET XOBSTOP=1,DONE=1,XOBOK=0 QUIT | ||
2710 | 2705 | "RTN","XOBVSKT",46,0) | ||
2711 | 2706 | ; | ||
2712 | 2707 | "RTN","XOBVSKT",47,0) | ||
2713 | 2708 | ; -- intercept for transport sinks | ||
2714 | 2709 | "RTN","XOBVSKT",48,0) | ||
2715 | 2710 | IF $EXTRACT(XOBX)'="<" DO SINK | ||
2716 | 2711 | "RTN","XOBVSKT",49,0) | ||
2717 | 2712 | ; | ||
2718 | 2713 | "RTN","XOBVSKT",50,0) | ||
2719 | 2714 | ; -- set up for subsequent reads | ||
2720 | 2715 | "RTN","XOBVSKT",51,0) | ||
2721 | 2716 | SET XOBREAD=200,XOBTO=1 | ||
2722 | 2717 | "RTN","XOBVSKT",52,0) | ||
2723 | 2718 | QUIT | ||
2724 | 2719 | "RTN","XOBVSKT",53,0) | ||
2725 | 2720 | ; | ||
2726 | 2721 | "RTN","XOBVSKT",54,0) | ||
2727 | 2722 | ; ------------------------------------------------------------------------------------ | ||
2728 | 2723 | "RTN","XOBVSKT",55,0) | ||
2729 | 2724 | ; Execute Proprietary Format Reader | ||
2730 | 2725 | "RTN","XOBVSKT",56,0) | ||
2731 | 2726 | ; ------------------------------------------------------------------------------------ | ||
2732 | 2727 | "RTN","XOBVSKT",57,0) | ||
2733 | 2728 | SINK ; | ||
2734 | 2729 | "RTN","XOBVSKT",58,0) | ||
2735 | 2730 | ; -- get size of sink indicator >> then get sink indicator >> load req handler | ||
2736 | 2731 | "RTN","XOBVSKT",59,0) | ||
2737 | 2732 | SET XOBHDLR=$$MSGSINK^XOBVRH($$GETSTR(+$$GETSTR(2,.XOBX),.XOBX),.XOBHDLR) | ||
2738 | 2733 | "RTN","XOBVSKT",60,0) | ||
2739 | 2734 | ; | ||
2740 | 2735 | "RTN","XOBVSKT",61,0) | ||
2741 | 2736 | ; -- execute proprietary stream reader | ||
2742 | 2737 | "RTN","XOBVSKT",62,0) | ||
2743 | 2738 | IF $GET(XOBHDLR(XOBHDLR)) XECUTE $GET(XOBHDLR(XOBHDLR,"READER")) | ||
2744 | 2739 | "RTN","XOBVSKT",63,0) | ||
2745 | 2740 | ; | ||
2746 | 2741 | "RTN","XOBVSKT",64,0) | ||
2747 | 2742 | SET DONE=1 | ||
2748 | 2743 | "RTN","XOBVSKT",65,0) | ||
2749 | 2744 | QUIT | ||
2750 | 2745 | "RTN","XOBVSKT",66,0) | ||
2751 | 2746 | ; | ||
2752 | 2747 | "RTN","XOBVSKT",67,0) | ||
2753 | 2748 | ; -- get string of length LEN from stream buffer | ||
2754 | 2749 | "RTN","XOBVSKT",68,0) | ||
2755 | 2750 | GETSTR(LEN,XOBUF) ; | ||
2756 | 2751 | "RTN","XOBVSKT",69,0) | ||
2757 | 2752 | NEW X | ||
2758 | 2753 | "RTN","XOBVSKT",70,0) | ||
2759 | 2754 | FOR QUIT:($LENGTH(XOBUF)'<LEN) DO RMORE(LEN-$LENGTH(XOBUF),.XOBUF) | ||
2760 | 2755 | "RTN","XOBVSKT",71,0) | ||
2761 | 2756 | SET X=$EXTRACT(XOBUF,1,LEN) | ||
2762 | 2757 | "RTN","XOBVSKT",72,0) | ||
2763 | 2758 | SET XOBUF=$EXTRACT(XOBUF,LEN+1,999) | ||
2764 | 2759 | "RTN","XOBVSKT",73,0) | ||
2765 | 2760 | QUIT X | ||
2766 | 2761 | "RTN","XOBVSKT",74,0) | ||
2767 | 2762 | ; | ||
2768 | 2763 | "RTN","XOBVSKT",75,0) | ||
2769 | 2764 | ; -- read more from stream buffer but only needed amount | ||
2770 | 2765 | "RTN","XOBVSKT",76,0) | ||
2771 | 2766 | RMORE(LEN,XOBUF) ; | ||
2772 | 2767 | "RTN","XOBVSKT",77,0) | ||
2773 | 2768 | NEW X | ||
2774 | 2769 | "RTN","XOBVSKT",78,0) | ||
2775 | 2770 | READ X#LEN:1 SET XOBUF=XOBUF_X | ||
2776 | 2771 | "RTN","XOBVSKT",79,0) | ||
2777 | 2772 | QUIT | ||
2778 | 2773 | "RTN","XOBVSKT",80,0) | ||
2779 | 2774 | ; | ||
2780 | 2775 | "RTN","XOBVSKT",81,0) | ||
2781 | 2776 | ; ------------------------------------------------------------------------------------ | ||
2782 | 2777 | "RTN","XOBVSKT",82,0) | ||
2783 | 2778 | ; Methods for Openning and Closing Socket | ||
2784 | 2779 | "RTN","XOBVSKT",83,0) | ||
2785 | 2780 | ; ------------------------------------------------------------------------------------ | ||
2786 | 2781 | "RTN","XOBVSKT",84,0) | ||
2787 | 2782 | OPEN(XOBPARMS) ; -- Open tcp/ip socket | ||
2788 | 2783 | "RTN","XOBVSKT",85,0) | ||
2789 | 2784 | NEW I,POP | ||
2790 | 2785 | "RTN","XOBVSKT",86,0) | ||
2791 | 2786 | SET POP=1 | ||
2792 | 2787 | "RTN","XOBVSKT",87,0) | ||
2793 | 2788 | ; | ||
2794 | 2789 | "RTN","XOBVSKT",88,0) | ||
2795 | 2790 | ; -- set up os var | ||
2796 | 2791 | "RTN","XOBVSKT",89,0) | ||
2797 | 2792 | DO OS | ||
2798 | 2793 | "RTN","XOBVSKT",90,0) | ||
2799 | 2794 | ; | ||
2800 | 2795 | "RTN","XOBVSKT",91,0) | ||
2801 | 2796 | ; -- preserve client io | ||
2802 | 2797 | "RTN","XOBVSKT",92,0) | ||
2803 | 2798 | DO SAVDEV^%ZISUTL("XOB CLIENT") | ||
2804 | 2799 | "RTN","XOBVSKT",93,0) | ||
2805 | 2800 | ; | ||
2806 | 2801 | "RTN","XOBVSKT",94,0) | ||
2807 | 2802 | FOR I=1:1:XOBPARMS("RETRIES") DO CALL^%ZISTCP(XOBPARMS("ADDRESS"),XOBPARMS("PORT")) QUIT:'POP | ||
2808 | 2803 | "RTN","XOBVSKT",95,0) | ||
2809 | 2804 | ; -- device open | ||
2810 | 2805 | "RTN","XOBVSKT",96,0) | ||
2811 | 2806 | IF 'POP USE IO QUIT 1 | ||
2812 | 2807 | "RTN","XOBVSKT",97,0) | ||
2813 | 2808 | ; -- device not open | ||
2814 | 2809 | "RTN","XOBVSKT",98,0) | ||
2815 | 2810 | QUIT 0 | ||
2816 | 2811 | "RTN","XOBVSKT",99,0) | ||
2817 | 2812 | ; | ||
2818 | 2813 | "RTN","XOBVSKT",100,0) | ||
2819 | 2814 | CLOSE(XOBPARMS) ; -- close tcp/ip socket | ||
2820 | 2815 | "RTN","XOBVSKT",101,0) | ||
2821 | 2816 | ; -- tell server to Stop() connection if close message is needed to close | ||
2822 | 2817 | "RTN","XOBVSKT",102,0) | ||
2823 | 2818 | IF $GET(XOBPARMS("CLOSE MESSAGE"))]"" DO | ||
2824 | 2819 | "RTN","XOBVSKT",103,0) | ||
2825 | 2820 | . DO PRE | ||
2826 | 2821 | "RTN","XOBVSKT",104,0) | ||
2827 | 2822 | . DO WRITE($$XMLHDR^XOBVLIB()_XOBPARMS("CLOSE MESSAGE")) | ||
2828 | 2823 | "RTN","XOBVSKT",105,0) | ||
2829 | 2824 | . DO POST | ||
2830 | 2825 | "RTN","XOBVSKT",106,0) | ||
2831 | 2826 | ; | ||
2832 | 2827 | "RTN","XOBVSKT",107,0) | ||
2833 | 2828 | DO FINAL | ||
2834 | 2829 | "RTN","XOBVSKT",108,0) | ||
2835 | 2830 | DO CLOSE^%ZISTCP | ||
2836 | 2831 | "RTN","XOBVSKT",109,0) | ||
2837 | 2832 | DO USE^%ZISUTL("XOB CLIENT") | ||
2838 | 2833 | "RTN","XOBVSKT",110,0) | ||
2839 | 2834 | DO RMDEV^%ZISUTL("XOB CLIENT") | ||
2840 | 2835 | "RTN","XOBVSKT",111,0) | ||
2841 | 2836 | QUIT | ||
2842 | 2837 | "RTN","XOBVSKT",112,0) | ||
2843 | 2838 | ; | ||
2844 | 2839 | "RTN","XOBVSKT",113,0) | ||
2845 | 2840 | INIT ; -- set up variables needed in tcp/ip processing | ||
2846 | 2841 | "RTN","XOBVSKT",114,0) | ||
2847 | 2842 | KILL XOBNULL | ||
2848 | 2843 | "RTN","XOBVSKT",115,0) | ||
2849 | 2844 | ; | ||
2850 | 2845 | "RTN","XOBVSKT",116,0) | ||
2851 | 2846 | ; -- setup os var | ||
2852 | 2847 | "RTN","XOBVSKT",117,0) | ||
2853 | 2848 | DO OS | ||
2854 | 2849 | "RTN","XOBVSKT",118,0) | ||
2855 | 2850 | ; | ||
2856 | 2851 | "RTN","XOBVSKT",119,0) | ||
2857 | 2852 | ; -- set RPC Broker os variable (so $$BROKER^XWBLIB returns true) | ||
2858 | 2853 | "RTN","XOBVSKT",120,0) | ||
2859 | 2854 | SET XWBOS=XOBOS | ||
2860 | 2855 | "RTN","XOBVSKT",121,0) | ||
2861 | 2856 | ; | ||
2862 | 2857 | "RTN","XOBVSKT",122,0) | ||
2863 | 2858 | ; -- setup null device called "NULL" | ||
2864 | 2859 | "RTN","XOBVSKT",123,0) | ||
2865 | 2860 | SET %ZIS="0H",IOP="NULL" DO ^%ZIS | ||
2866 | 2861 | "RTN","XOBVSKT",124,0) | ||
2867 | 2862 | IF 'POP DO | ||
2868 | 2863 | "RTN","XOBVSKT",125,0) | ||
2869 | 2864 | . SET XOBNULL=IO | ||
2870 | 2865 | "RTN","XOBVSKT",126,0) | ||
2871 | 2866 | . DO SAVDEV^%ZISUTL("XOBNULL") | ||
2872 | 2867 | "RTN","XOBVSKT",127,0) | ||
2873 | 2868 | QUIT | ||
2874 | 2869 | "RTN","XOBVSKT",128,0) | ||
2875 | 2870 | ; | ||
2876 | 2871 | "RTN","XOBVSKT",129,0) | ||
2877 | 2872 | OS ; -- os var | ||
2878 | 2873 | "RTN","XOBVSKT",130,0) | ||
2879 | 2874 | SET XOBOS=$SELECT(^%ZOSF("OS")["OpenM":"OpenM",^("OS")["DSM":"DSM",^("OS")["UNIX":"UNIX",^("OS")["MSM":"MSM",1:"") | ||
2880 | 2875 | "RTN","XOBVSKT",131,0) | ||
2881 | 2876 | QUIT | ||
2882 | 2877 | "RTN","XOBVSKT",132,0) | ||
2883 | 2878 | ; | ||
2884 | 2879 | "RTN","XOBVSKT",133,0) | ||
2885 | 2880 | FINAL ; -- kill variables used in tcp/ip processing | ||
2886 | 2881 | "RTN","XOBVSKT",134,0) | ||
2887 | 2882 | ; | ||
2888 | 2883 | "RTN","XOBVSKT",135,0) | ||
2889 | 2884 | ; -- close null device | ||
2890 | 2885 | "RTN","XOBVSKT",136,0) | ||
2891 | 2886 | IF $DATA(XOBNULL) DO | ||
2892 | 2887 | "RTN","XOBVSKT",137,0) | ||
2893 | 2888 | . DO USE^%ZISUTL("XOBNULL") | ||
2894 | 2889 | "RTN","XOBVSKT",138,0) | ||
2895 | 2890 | . DO CLOSE^%ZISUTL("XOBNULL") | ||
2896 | 2891 | "RTN","XOBVSKT",139,0) | ||
2897 | 2892 | . KILL XOBNULL | ||
2898 | 2893 | "RTN","XOBVSKT",140,0) | ||
2899 | 2894 | ; | ||
2900 | 2895 | "RTN","XOBVSKT",141,0) | ||
2901 | 2896 | KILL XOBOS,XWBOS | ||
2902 | 2897 | "RTN","XOBVSKT",142,0) | ||
2903 | 2898 | ; | ||
2904 | 2899 | "RTN","XOBVSKT",143,0) | ||
2905 | 2900 | QUIT | ||
2906 | 2901 | "RTN","XOBVSKT",144,0) | ||
2907 | 2902 | ; | ||
2908 | 2903 | "RTN","XOBVSKT",145,0) | ||
2909 | 2904 | ; ------------------------------------------------------------------------------------ | ||
2910 | 2905 | "RTN","XOBVSKT",146,0) | ||
2911 | 2906 | ; Methods for Writing to TCP/IP Socket | ||
2912 | 2907 | "RTN","XOBVSKT",147,0) | ||
2913 | 2908 | ; ------------------------------------------------------------------------------------ | ||
2914 | 2909 | "RTN","XOBVSKT",148,0) | ||
2915 | 2910 | PRE ; -- prepare socket for writing | ||
2916 | 2911 | "RTN","XOBVSKT",149,0) | ||
2917 | 2912 | SET $X=0 | ||
2918 | 2913 | "RTN","XOBVSKT",150,0) | ||
2919 | 2914 | QUIT | ||
2920 | 2915 | "RTN","XOBVSKT",151,0) | ||
2921 | 2916 | ; | ||
2922 | 2917 | "RTN","XOBVSKT",152,0) | ||
2923 | 2918 | WRITE(STR) ; -- Write a data string to socket | ||
2924 | 2919 | "RTN","XOBVSKT",153,0) | ||
2925 | 2920 | IF XOBOS="MSM" WRITE STR QUIT | ||
2926 | 2921 | "RTN","XOBVSKT",154,0) | ||
2927 | 2922 | ; | ||
2928 | 2923 | "RTN","XOBVSKT",155,0) | ||
2929 | 2924 | ; -- handle a short string | ||
2930 | 2925 | "RTN","XOBVSKT",156,0) | ||
2931 | 2926 | IF $LENGTH(STR)<511 DO:($X+$LENGTH(STR))>511 FLUSH WRITE STR QUIT | ||
2932 | 2927 | "RTN","XOBVSKT",157,0) | ||
2933 | 2928 | ; | ||
2934 | 2929 | "RTN","XOBVSKT",158,0) | ||
2935 | 2930 | ; -- handle a long string | ||
2936 | 2931 | "RTN","XOBVSKT",159,0) | ||
2937 | 2932 | DO FLUSH | ||
2938 | 2933 | "RTN","XOBVSKT",160,0) | ||
2939 | 2934 | FOR QUIT:'$LENGTH(STR) WRITE $EXTRACT(STR,1,511) DO FLUSH SET STR=$EXTRACT(STR,512,99999) | ||
2940 | 2935 | "RTN","XOBVSKT",161,0) | ||
2941 | 2936 | ; | ||
2942 | 2937 | "RTN","XOBVSKT",162,0) | ||
2943 | 2938 | QUIT | ||
2944 | 2939 | "RTN","XOBVSKT",163,0) | ||
2945 | 2940 | ; | ||
2946 | 2941 | "RTN","XOBVSKT",164,0) | ||
2947 | 2942 | POST ; -- send eot and flush socket buffer | ||
2948 | 2943 | "RTN","XOBVSKT",165,0) | ||
2949 | 2944 | DO WRITE($CHAR(4)) | ||
2950 | 2945 | "RTN","XOBVSKT",166,0) | ||
2951 | 2946 | DO FLUSH | ||
2952 | 2947 | "RTN","XOBVSKT",167,0) | ||
2953 | 2948 | QUIT | ||
2954 | 2949 | "RTN","XOBVSKT",168,0) | ||
2955 | 2950 | ; | ||
2956 | 2951 | "RTN","XOBVSKT",169,0) | ||
2957 | 2952 | FLUSH ; flush buffer | ||
2958 | 2953 | "RTN","XOBVSKT",170,0) | ||
2959 | 2954 | IF XOBOS="OpenM" WRITE ! QUIT | ||
2960 | 2955 | "RTN","XOBVSKT",171,0) | ||
2961 | 2956 | IF XOBOS="DSM" WRITE:$X>0 ! QUIT | ||
2962 | 2957 | "RTN","XOBVSKT",172,0) | ||
2963 | 2958 | IF XOBOS="GTM" WRITE # QUIT | ||
2964 | 2959 | "RTN","XOBVSKT",173,0) | ||
2965 | 2960 | QUIT | ||
2966 | 2961 | "RTN","XOBVSKT",174,0) | ||
2967 | 2962 | ; | ||
2968 | 2963 | "RTN","XOBVTCPL") | ||
2969 | 2964 | 0^22^B13529543 | ||
2970 | 2965 | "RTN","XOBVTCPL",1,0) | ||
2971 | 2966 | XOBVTCPL ;; mjk/alb MSC/JDA - VistALink TCP/IP Listener (Cache NT) ; 07/27/2002 13:00 | ||
2972 | 2967 | "RTN","XOBVTCPL",2,0) | ||
2973 | 2968 | ;;1.5;VistALink;**MSC**;Sep 09, 2005 | ||
2974 | 2969 | "RTN","XOBVTCPL",3,0) | ||
2975 | 2970 | ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026] | ||
2976 | 2971 | "RTN","XOBVTCPL",4,0) | ||
2977 | 2972 | ; | ||
2978 | 2973 | "RTN","XOBVTCPL",5,0) | ||
2979 | 2974 | QUIT | ||
2980 | 2975 | "RTN","XOBVTCPL",6,0) | ||
2981 | 2976 | ; | ||
2982 | 2977 | "RTN","XOBVTCPL",7,0) | ||
2983 | 2978 | ; -- Important: Should always be JOBed using START^XOBVTCP | ||
2984 | 2979 | "RTN","XOBVTCPL",8,0) | ||
2985 | 2980 | LISTENER(XOBPORT,XOBCFG) ; -- Start Listener | ||
2986 | 2981 | "RTN","XOBVTCPL",9,0) | ||
2987 | 2982 | ; | ||
2988 | 2983 | "RTN","XOBVTCPL",10,0) | ||
2989 | 2984 | N OS | ||
2990 | 2985 | "RTN","XOBVTCPL",11,0) | ||
2991 | 2986 | S OS=$$GETOS^XOBVTCP() | ||
2992 | 2987 | "RTN","XOBVTCPL",12,0) | ||
2993 | 2988 | ; -- quit if not Cache for NT or GT.M | ||
2994 | 2989 | "RTN","XOBVTCPL",13,0) | ||
2995 | 2990 | IF (OS'="OpenM-NT")&(OS'["GT.M") QUIT | ||
2996 | 2991 | "RTN","XOBVTCPL",14,0) | ||
2997 | 2992 | ; | ||
2998 | 2993 | "RTN","XOBVTCPL",15,0) | ||
2999 | 2994 | NEW $ETRAP,$ESTACK SET $ETRAP="D ^%ZTER HALT" | ||
3000 | 2995 | "RTN","XOBVTCPL",16,0) | ||
3001 | 2996 | ; | ||
3002 | 2997 | "RTN","XOBVTCPL",17,0) | ||
3003 | 2998 | NEW X,POP,XOBDA,U,DTIME,DT,XOBIO | ||
3004 | 2999 | "RTN","XOBVTCPL",18,0) | ||
3005 | 3000 | SET U="^",DTIME=900,DT=$$DT^XLFDT() | ||
3006 | 3001 | "RTN","XOBVTCPL",19,0) | ||
3007 | 3002 | IF $GET(DUZ)="" NEW DUZ SET DUZ=.5,DUZ(0)="@" | ||
3008 | 3003 | "RTN","XOBVTCPL",20,0) | ||
3009 | 3004 | ; | ||
3010 | 3005 | "RTN","XOBVTCPL",21,0) | ||
3011 | 3006 | ; -- only start if not already started | ||
3012 | 3007 | "RTN","XOBVTCPL",22,0) | ||
3013 | 3008 | IF $$LOCK^XOBVTCP(XOBPORT) DO | ||
3014 | 3009 | "RTN","XOBVTCPL",23,0) | ||
3015 | 3010 | . IF $$OPEN(.XOBIO,XOBPORT,OS) DO | ||
3016 | 3011 | "RTN","XOBVTCPL",24,0) | ||
3017 | 3012 | . . ; -- listener started and now stopping | ||
3018 | 3013 | "RTN","XOBVTCPL",25,0) | ||
3019 | 3014 | . . SET IO=XOBIO | ||
3020 | 3015 | "RTN","XOBVTCPL",26,0) | ||
3021 | 3016 | . . DO CLOSE^%ZISTCP | ||
3022 | 3017 | "RTN","XOBVTCPL",27,0) | ||
3023 | 3018 | . . ; -- update status to 'stopped' | ||
3024 | 3019 | "RTN","XOBVTCPL",28,0) | ||
3025 | 3020 | . . DO UPDATE^XOBVTCP(XOBPORT,4,$GET(XOBCFG)) | ||
3026 | 3021 | "RTN","XOBVTCPL",29,0) | ||
3027 | 3022 | . ELSE DO | ||
3028 | 3023 | "RTN","XOBVTCPL",30,0) | ||
3029 | 3024 | . . ; -- listener failed to start | ||
3030 | 3025 | "RTN","XOBVTCPL",31,0) | ||
3031 | 3026 | . . ; -- update status to 'failed' | ||
3032 | 3027 | "RTN","XOBVTCPL",32,0) | ||
3033 | 3028 | . . DO UPDATE^XOBVTCP(XOBPORT,5,$GET(XOBCFG)) | ||
3034 | 3029 | "RTN","XOBVTCPL",33,0) | ||
3035 | 3030 | . ; | ||
3036 | 3031 | "RTN","XOBVTCPL",34,0) | ||
3037 | 3032 | . DO UNLOCK^XOBVTCP(XOBPORT) | ||
3038 | 3033 | "RTN","XOBVTCPL",35,0) | ||
3039 | 3034 | QUIT | ||
3040 | 3035 | "RTN","XOBVTCPL",36,0) | ||
3041 | 3036 | ; | ||
3042 | 3037 | "RTN","XOBVTCPL",37,0) | ||
3043 | 3038 | ; -- open/start listener port | ||
3044 | 3039 | "RTN","XOBVTCPL",38,0) | ||
3045 | 3040 | OPEN(XOBIO,XOBPORT,OS) ; | ||
3046 | 3041 | "RTN","XOBVTCPL",39,0) | ||
3047 | 3042 | Q $S(OS="OpenM-NT":$$OPENM(.XOBIO,XOBPORT),OS["GT.M":$$OPENGTM(.XOBIO,XOBPORT),1:0) | ||
3048 | 3043 | "RTN","XOBVTCPL",40,0) | ||
3049 | 3044 | ; | ||
3050 | 3045 | "RTN","XOBVTCPL",41,0) | ||
3051 | 3046 | ; -- open/start listener port on Cache | ||
3052 | 3047 | "RTN","XOBVTCPL",42,0) | ||
3053 | 3048 | OPENM(XOBIO,XOBPORT) ; | ||
3054 | 3049 | "RTN","XOBVTCPL",43,0) | ||
3055 | 3050 | NEW XOBBOX,%ZA | ||
3056 | 3051 | "RTN","XOBVTCPL",44,0) | ||
3057 | 3052 | SET XOBBOX=+$$GETBOX^XOBVTCP() | ||
3058 | 3053 | "RTN","XOBVTCPL",45,0) | ||
3059 | 3054 | SET XOBIO="|TCP|"_XOBPORT | ||
3060 | 3055 | "RTN","XOBVTCPL",46,0) | ||
3061 | 3056 | X "OPEN XOBIO:(:XOBPORT:""AT""):30" | ||
3062 | 3057 | "RTN","XOBVTCPL",47,0) | ||
3063 | 3058 | ; | ||
3064 | 3059 | "RTN","XOBVTCPL",48,0) | ||
3065 | 3060 | ; -- if listener port could not be openned then gracefully quit | ||
3066 | 3061 | "RTN","XOBVTCPL",49,0) | ||
3067 | 3062 | ; (other namespace using port maybe?) | ||
3068 | 3063 | "RTN","XOBVTCPL",50,0) | ||
3069 | 3064 | IF '$TEST QUIT 0 | ||
3070 | 3065 | "RTN","XOBVTCPL",51,0) | ||
3071 | 3066 | ; | ||
3072 | 3067 | "RTN","XOBVTCPL",52,0) | ||
3073 | 3068 | ; -- indicate listener is 'running' | ||
3074 | 3069 | "RTN","XOBVTCPL",53,0) | ||
3075 | 3070 | DO UPDATE^XOBVTCP(XOBPORT,2,$GET(XOBCFG)) | ||
3076 | 3071 | "RTN","XOBVTCPL",54,0) | ||
3077 | 3072 | ; -- read & spawn loop | ||
3078 | 3073 | "RTN","XOBVTCPL",55,0) | ||
3079 | 3074 | FOR DO QUIT:$$EXIT(XOBBOX,XOBPORT) | ||
3080 | 3075 | "RTN","XOBVTCPL",56,0) | ||
3081 | 3076 | . USE XOBIO | ||
3082 | 3077 | "RTN","XOBVTCPL",57,0) | ||
3083 | 3078 | . READ *X:60 IF '$TEST QUIT | ||
3084 | 3079 | "RTN","XOBVTCPL",58,0) | ||
3085 | 3080 | . X "JOB CHILD^XOBVTCPL():(:4:XOBIO:XOBIO):10" SET %ZA=$ZA | ||
3086 | 3081 | "RTN","XOBVTCPL",59,0) | ||
3087 | 3082 | . IF %ZA\8196#2=1 WRITE *-2 ;Job failed to clear bit | ||
3088 | 3083 | "RTN","XOBVTCPL",60,0) | ||
3089 | 3084 | QUIT 1 | ||
3090 | 3085 | "RTN","XOBVTCPL",61,0) | ||
3091 | 3086 | ; | ||
3092 | 3087 | "RTN","XOBVTCPL",62,0) | ||
3093 | 3088 | ; -- open/start listener port on GT.M | ||
3094 | 3089 | "RTN","XOBVTCPL",63,0) | ||
3095 | 3090 | OPENGTM(XOBIO,XOBPORT) ; | ||
3096 | 3091 | "RTN","XOBVTCPL",64,0) | ||
3097 | 3092 | NEW XOBBOX | ||
3098 | 3093 | "RTN","XOBVTCPL",65,0) | ||
3099 | 3094 | SET XOBBOX=+$$GETBOX^XOBVTCP() | ||
3100 | 3095 | "RTN","XOBVTCPL",66,0) | ||
3101 | 3096 | SET XOBIO="|TCP|"_XOBPORT_"|"_$J | ||
3102 | 3097 | "RTN","XOBVTCPL",67,0) | ||
3103 | 3098 | OPEN XOBIO:(ZLISTEN=XOBPORT_":TCP":ATTACH="LISTENER"):5:"SOCKET" | ||
3104 | 3099 | "RTN","XOBVTCPL",68,0) | ||
3105 | 3100 | ; | ||
3106 | 3101 | "RTN","XOBVTCPL",69,0) | ||
3107 | 3102 | ; -- if listener port could not be openned then gracefully quit | ||
3108 | 3103 | "RTN","XOBVTCPL",70,0) | ||
3109 | 3104 | ; (other namespace using port maybe?) | ||
3110 | 3105 | "RTN","XOBVTCPL",71,0) | ||
3111 | 3106 | IF '$TEST QUIT 0 | ||
3112 | 3107 | "RTN","XOBVTCPL",72,0) | ||
3113 | 3108 | ; | ||
3114 | 3109 | "RTN","XOBVTCPL",73,0) | ||
3115 | 3110 | ; -- indicate listener is 'running' | ||
3116 | 3111 | "RTN","XOBVTCPL",74,0) | ||
3117 | 3112 | DO UPDATE^XOBVTCP(XOBPORT,2,$GET(XOBCFG)) | ||
3118 | 3113 | "RTN","XOBVTCPL",75,0) | ||
3119 | 3114 | D LISTEN^ZISTCPS(XOBPORT,"CHILD^XOBVTCPL","EXIT^XOBVTCPL("_XOBBOX_","_XOBPORT_")") | ||
3120 | 3115 | "RTN","XOBVTCPL",76,0) | ||
3121 | 3116 | ; | ||
3122 | 3117 | "RTN","XOBVTCPL",77,0) | ||
3123 | 3118 | CHILD ;Child process | ||
3124 | 3119 | "RTN","XOBVTCPL",78,0) | ||
3125 | 3120 | NEW XOBEC | ||
3126 | 3121 | "RTN","XOBVTCPL",79,0) | ||
3127 | 3122 | SET $ETRAP="D ^%ZTER L HALT" | ||
3128 | 3123 | "RTN","XOBVTCPL",80,0) | ||
3129 | 3124 | SET IO=$PRINCIPAL ;Reset IO to be $P | ||
3130 | 3125 | "RTN","XOBVTCPL",81,0) | ||
3131 | 3126 | IF $$GETOS^XOBVTCP()["OpenM" X "USE IO:(::""-M"")" ;Packet mode like DSM | ||
3132 | 3127 | "RTN","XOBVTCPL",82,0) | ||
3133 | 3128 | ; -- do quit to save a stack level | ||
3134 | 3129 | "RTN","XOBVTCPL",83,0) | ||
3135 | 3130 | SET XOBEC=$$NEWOK() | ||
3136 | 3131 | "RTN","XOBVTCPL",84,0) | ||
3137 | 3132 | IF XOBEC DO LOGINERR(XOBEC,IO) | ||
3138 | 3133 | "RTN","XOBVTCPL",85,0) | ||
3139 | 3134 | IF 'XOBEC DO VAR,SPAWN^XOBVLL | ||
3140 | 3135 | "RTN","XOBVTCPL",86,0) | ||
3141 | 3136 | QUIT | ||
3142 | 3137 | "RTN","XOBVTCPL",87,0) | ||
3143 | 3138 | ; | ||
3144 | 3139 | "RTN","XOBVTCPL",88,0) | ||
3145 | 3140 | VAR ;Setup IO variables | ||
3146 | 3141 | "RTN","XOBVTCPL",89,0) | ||
3147 | 3142 | SET IO(0)=IO,IO(1,IO)="",POP=0 | ||
3148 | 3143 | "RTN","XOBVTCPL",90,0) | ||
3149 | 3144 | SET IOT="TCP",IOF="#",IOST="P-TCP",IOST(0)=0 | ||
3150 | 3145 | "RTN","XOBVTCPL",91,0) | ||
3151 | 3146 | QUIT | ||
3152 | 3147 | "RTN","XOBVTCPL",92,0) | ||
3153 | 3148 | ; | ||
3154 | 3149 | "RTN","XOBVTCPL",93,0) | ||
3155 | 3150 | NEWOK() ;Is it OK to start a new process | ||
3156 | 3151 | "RTN","XOBVTCPL",94,0) | ||
3157 | 3152 | NEW XQVOL,XUVOL,X,XOBCODE,Y | ||
3158 | 3153 | "RTN","XOBVTCPL",95,0) | ||
3159 | 3154 | SET U="^" | ||
3160 | 3155 | "RTN","XOBVTCPL",96,0) | ||
3161 | 3156 | DO GETENV^%ZOSV SET XQVOL=$PIECE(Y,U,2) | ||
3162 | 3157 | "RTN","XOBVTCPL",97,0) | ||
3163 | 3158 | SET X=$$FIND1^DIC(8989.304,",1,","BX",XQVOL,"","",""),XUVOL=$SELECT(X>0:^XTV(8989.3,1,4,X,0),1:XQVOL_"^y^1") | ||
3164 | 3159 | "RTN","XOBVTCPL",98,0) | ||
3165 | 3160 | SET XOBCODE=$$INHIBIT^XUSRB() | ||
3166 | 3161 | "RTN","XOBVTCPL",99,0) | ||
3167 | 3162 | IF XOBCODE=1 QUIT 181004 | ||
3168 | 3163 | "RTN","XOBVTCPL",100,0) | ||
3169 | 3164 | IF XOBCODE=2 QUIT 181003 | ||
3170 | 3165 | "RTN","XOBVTCPL",101,0) | ||
3171 | 3166 | QUIT 0 | ||
3172 | 3167 | "RTN","XOBVTCPL",102,0) | ||
3173 | 3168 | ; | ||
3174 | 3169 | "RTN","XOBVTCPL",103,0) | ||
3175 | 3170 | ; -- process error | ||
3176 | 3171 | "RTN","XOBVTCPL",104,0) | ||
3177 | 3172 | LOGINERR(XOBEC,XOBPORT) ; | ||
3178 | 3173 | "RTN","XOBVTCPL",105,0) | ||
3179 | 3174 | DO ERROR^XOBVLL(XOBEC,$$EZBLD^DIALOG(XOBEC),XOBPORT) | ||
3180 | 3175 | "RTN","XOBVTCPL",106,0) | ||
3181 | 3176 | ; | ||
3182 | 3177 | "RTN","XOBVTCPL",107,0) | ||
3183 | 3178 | ; -- give client time to process stream | ||
3184 | 3179 | "RTN","XOBVTCPL",108,0) | ||
3185 | 3180 | HANG 2 | ||
3186 | 3181 | "RTN","XOBVTCPL",109,0) | ||
3187 | 3182 | QUIT | ||
3188 | 3183 | "RTN","XOBVTCPL",110,0) | ||
3189 | 3184 | ; | ||
3190 | 3185 | "RTN","XOBVTCPL",111,0) | ||
3191 | 3186 | EXIT(XOBBOX,XOBPORT) ; | ||
3192 | 3187 | "RTN","XOBVTCPL",112,0) | ||
3193 | 3188 | ; -- is status 'stopping' | ||
3194 | 3189 | "RTN","XOBVTCPL",113,0) | ||
3195 | 3190 | SET ZISQUIT=$PIECE($GET(^XOB(18.04,+$$GETLOGID(XOBBOX,XOBPORT),0)),U,3)=3 | ||
3196 | 3191 | "RTN","XOBVTCPL",114,0) | ||
3197 | 3192 | Q ZISQUIT | ||
3198 | 3193 | "RTN","XOBVTCPL",115,0) | ||
3199 | 3194 | ; | ||
3200 | 3195 | "RTN","XOBVTCPL",116,0) | ||
3201 | 3196 | GETLOGID(XOBBOX,XOBPORT) ; | ||
3202 | 3197 | "RTN","XOBVTCPL",117,0) | ||
3203 | 3198 | QUIT +$ORDER(^XOB(18.04,"C",XOBBOX,XOBPORT,"")) | ||
3204 | 3199 | "RTN","XOBVTCPL",118,0) | ||
3205 | 3200 | ; | ||
3206 | 3201 | "RTN","XTER1A") | ||
3207 | 3202 | 0^7^B29045171 | ||
3208 | 3203 | "RTN","XTER1A",1,0) | ||
3209 | 3204 | XTER1A ;ISC-SF.SEA/JLI - VA error reporting ;28MAR2006 | ||
3210 | 3205 | "RTN","XTER1A",2,0) | ||
3211 | 3206 | ;;8.0;KERNEL;**63,112,120,MSC,IHS**;Jul 10, 1995 | ||
3212 | 3207 | "RTN","XTER1A",3,0) | ||
3213 | 3208 | ; | ||
3214 | 3209 | "RTN","XTER1A",4,0) | ||
3215 | 3210 | TWO ; | ||
3216 | 3211 | "RTN","XTER1A",5,0) | ||
3217 | 3212 | S XTNUM=2 | ||
3218 | 3213 | "RTN","XTER1A",6,0) | ||
3219 | 3214 | ONE ; | ||
3220 | 3215 | "RTN","XTER1A",7,0) | ||
3221 | 3216 | S:'$D(XTNUM) XTNUM=1 | ||
3222 | 3217 | "RTN","XTER1A",8,0) | ||
3223 | 3218 | S:'$D(XTNDATE) XTNDATE=$H-1 I '$D(ZTQUEUED) S XTNDAT1=$$HTFM^XLFDT(XTNDATE),XTNDAT2=XTNDAT1 G INT^XTER1A1 | ||
3224 | 3219 | "RTN","XTER1A",9,0) | ||
3225 | 3220 | K ^TMP($J,"XTER1A") D LISTN,LIST | ||
3226 | 3221 | "RTN","XTER1A",10,0) | ||
3227 | 3222 | EXIT K XTNUM,XTNDATE,XTERN,XTERX,X,N,N1,Y,C,XTOUT,Z,I,XTER1AX,XTER1AN,XTER1AN1,%XTZDAT,%XTZNUM,XTMES,XTDV1,XTMES,XTPRNT | ||
3228 | 3223 | "RTN","XTER1A",11,0) | ||
3229 | 3224 | Q | ||
3230 | 3225 | "RTN","XTER1A",12,0) | ||
3231 | 3226 | LISTN ; | ||
3232 | 3227 | "RTN","XTER1A",13,0) | ||
3233 | 3228 | F XTERN=0:0 S XTERN=$O(^%ZTER(1,XTNDATE,1,XTERN)) Q:XTERN'>0 I $D(^(XTERN,"ZE")) S XTERX=$E(^("ZE"),1,30),X=^("ZE") D | ||
3234 | 3229 | "RTN","XTER1A",14,0) | ||
3235 | 3230 | .S N1=0 F N=0:0 S N=$O(^TMP($J,"XTER1A",XTERX,N)) Q:N="" S N1=N I ^(N)=X Q | ||
3236 | 3231 | "RTN","XTER1A",15,0) | ||
3237 | 3232 | .I N="" S ^TMP($J,"XTER1A",XTERX,N1+1)=X,^(N1+1,"CNT")=1,^(1)=XTNDATE_U_XTERN | ||
3238 | 3233 | "RTN","XTER1A",16,0) | ||
3239 | 3234 | .E S ^("CNT")=^TMP($J,"XTER1A",XTERX,N,"CNT")+1 I ^("CNT")'>XTNUM S Y=^("CNT"),^(Y)=XTNDATE_U_XTERN | ||
3240 | 3235 | "RTN","XTER1A",17,0) | ||
3241 | 3236 | .Q | ||
3242 | 3237 | "RTN","XTER1A",18,0) | ||
3243 | 3238 | Q | ||
3244 | 3239 | "RTN","XTER1A",19,0) | ||
3245 | 3240 | LIST ; | ||
3246 | 3241 | "RTN","XTER1A",20,0) | ||
3247 | 3242 | S XTERX="",C=0,XTOUT=0 K ^TMP($J,"XTER") | ||
3248 | 3243 | "RTN","XTER1A",21,0) | ||
3249 | 3244 | F S XTERX=$O(^TMP($J,"XTER1A",XTERX)) Q:XTERX="" F N=0:0 S N=$O(^TMP($J,"XTER1A",XTERX,N)) Q:N'>0 D | ||
3250 | 3245 | "RTN","XTER1A",22,0) | ||
3251 | 3246 | .S X=^TMP($J,"XTER1A",XTERX,N) S C=C+1,^TMP($J,"XTER",C)="",C=C+1,^(C)="",Z=$J(^TMP($J,"XTER1A",XTERX,N,"CNT"),8)_" " | ||
3252 | 3247 | "RTN","XTER1A",23,0) | ||
3253 | 3248 | .F I=1:60 S Y=$E(X,I,I+59) Q:Y="" S C=C+1,^TMP($J,"XTER",C)=Z_Y,Z=" " | ||
3254 | 3249 | "RTN","XTER1A",24,0) | ||
3255 | 3250 | S XTER1AX="" F S XTER1AX=$O(^TMP($J,"XTER1A",XTER1AX)) Q:XTER1AX="" F XTER1AN=0:0 S XTER1AN=$O(^TMP($J,"XTER1A",XTER1AX,XTER1AN)) Q:XTER1AN'>0 D | ||
3256 | 3251 | "RTN","XTER1A",25,0) | ||
3257 | 3252 | .F XTER1AN1=0:0 S XTER1AN1=$O(^TMP($J,"XTER1A",XTER1AX,XTER1AN,XTER1AN1)) Q:XTER1AN1'>0 S X=^(XTER1AN1) D | ||
3258 | 3253 | "RTN","XTER1A",26,0) | ||
3259 | 3254 | ..S C=C+1,^TMP($J,"XTER",C)="|PAGE|" S %XTZDAT=+X,%XTZNUM=$P(X,U,2),XTDV1=0 S XTMES=1 D WRT^XTER1 | ||
3260 | 3255 | "RTN","XTER1A",27,0) | ||
3261 | 3256 | D:IO=""&$D(^TMP($J,"XTER")) MESSG D:IO'="" WRITER | ||
3262 | 3257 | "RTN","XTER1A",28,0) | ||
3263 | 3258 | K ^TMP($J,"XTER") S C=0 I IO'="" U IO D ^%ZISC | ||
3264 | 3259 | "RTN","XTER1A",29,0) | ||
3265 | 3260 | Q | ||
3266 | 3261 | "RTN","XTER1A",30,0) | ||
3267 | 3262 | ; | ||
3268 | 3263 | "RTN","XTER1A",31,0) | ||
3269 | 3264 | MESG N DWPK,DWLW,DIC K ^TMP($J,"XTER"),^TMP($J,"XTER1") | ||
3270 | 3265 | "RTN","XTER1A",32,0) | ||
3271 | 3266 | W @IOF,!!,"Enter any comments to precede the error listing:" | ||
3272 | 3267 | "RTN","XTER1A",33,0) | ||
3273 | 3268 | S DWPK=1,DWLW=75,DIC="^TMP($J,""XTER1""," D EN^DIWE | ||
3274 | 3269 | "RTN","XTER1A",34,0) | ||
3275 | 3270 | S C=0 W ! F I=0:0 S I=$O(^TMP($J,"XTER1",I)) Q:I'>0 S C=I,^TMP($J,"XTER",I)=^TMP($J,"XTER1",I,0) | ||
3276 | 3271 | "RTN","XTER1A",35,0) | ||
3277 | 3272 | S XTMES=1,XTDV1=0 D WRT^XTER1 D:C>0 MESSG | ||
3278 | 3273 | "RTN","XTER1A",36,0) | ||
3279 | 3274 | S C=0 K XTMES,^TMP($J,"XTER"),^TMP($J,"XTER1") | ||
3280 | 3275 | "RTN","XTER1A",37,0) | ||
3281 | 3276 | G XTERR^XTER | ||
3282 | 3277 | "RTN","XTER1A",38,0) | ||
3283 | 3278 | ; | ||
3284 | 3279 | "RTN","XTER1A",39,0) | ||
3285 | 3280 | PRNT K ^TMP($J,"XTER"),ZTIO | ||
3286 | 3281 | "RTN","XTER1A",40,0) | ||
3287 | 3282 | S C=0,%ZIS="MQ" D ^%ZIS I POP D HOME^%ZIS G WRT^XTER1 | ||
3288 | 3283 | "RTN","XTER1A",41,0) | ||
3289 | 3284 | I $D(IO("Q")) D S XTX="" G XTERR^XTER | ||
3290 | 3285 | "RTN","XTER1A",42,0) | ||
3291 | 3286 | . K IO("Q") S ZTRTN="DQPRNT^XTER1A",ZTSAVE("%XTZDAT")="",ZTSAVE("%XTZNUM")="",ZTDESC="XTER1A-PRINT OF ERROR" D ^%ZTLOAD K ZTSK D HOME^%ZIS | ||
3292 | 3287 | "RTN","XTER1A",43,0) | ||
3293 | 3288 | ; | ||
3294 | 3289 | "RTN","XTER1A",44,0) | ||
3295 | 3290 | DQPRNT S XTPRNT=1,XTOUT=0 D WRT^XTER1 U IO D:C>0 WRITER | ||
3296 | 3291 | "RTN","XTER1A",45,0) | ||
3297 | 3292 | K ^TMP($J,"XTER"),XTX,XTPRNT S C=0 D ^%ZISC I $D(ZTQUEUED) Q | ||
3298 | 3293 | "RTN","XTER1A",46,0) | ||
3299 | 3294 | G XTERR^XTER | ||
3300 | 3295 | "RTN","XTER1A",47,0) | ||
3301 | 3296 | ; | ||
3302 | 3297 | "RTN","XTER1A",48,0) | ||
3303 | 3298 | WRITER F %=0:0 S %=$O(^TMP($J,"XTER",%)) Q:%'>0 W:((IOSL-$Y)'>4&$G(XTPRNT)) @IOF S %1=$S($D(^(%))=1:^(%),1:^(%,0)) D | ||
3304 | 3299 | "RTN","XTER1A",49,0) | ||
3305 | 3300 | .I $E(%1,1,6)="|PAGE|" W @IOF S %1=$E(%1,7,$L(%1)) Q:%1="" | ||
3306 | 3301 | "RTN","XTER1A",50,0) | ||
3307 | 3302 | .I $E(%1,1,4)="@IOF" W @IOF S %1=$E(%1,5,$L(%1)) Q:%1="" | ||
3308 | 3303 | "RTN","XTER1A",51,0) | ||
3309 | 3304 | .W !,%1 | ||
3310 | 3305 | "RTN","XTER1A",52,0) | ||
3311 | 3306 | K %,%1 | ||
3312 | 3307 | "RTN","XTER1A",53,0) | ||
3313 | 3308 | Q | ||
3314 | 3309 | "RTN","XTER1A",54,0) | ||
3315 | 3310 | MESSG S XMY(DUZ)="",XMDUZ=.5 I '$D(ZTQUEUED) K XMY,XMDUZ | ||
3316 | 3311 | "RTN","XTER1A",55,0) | ||
3317 | 3312 | S XMTEXT="^TMP($J,""XTER"",",XMSUB="ERROR - "_$E(%XTZE,1,40) F Q:XMSUB'[U S XMSUB=$P(XMSUB,U)_"~U~"_$P(XMSUB,U,2,99) | ||
3318 | 3313 | "RTN","XTER1A",56,0) | ||
3319 | 3314 | D ^XMD K XMY,XMTEXT,XMSUB | ||
3320 | 3315 | "RTN","XTER1A",57,0) | ||
3321 | 3316 | Q | ||
3322 | 3317 | "RTN","XTER1A",58,0) | ||
3323 | 3318 | ; | ||
3324 | 3319 | "RTN","XTER1A",59,0) | ||
3325 | 3320 | MORE Q:$G(XTMES) N DIR,DTOUT,DIRUT,DUOUT | ||
3326 | 3321 | "RTN","XTER1A",60,0) | ||
3327 | 3322 | S XTOUT=0,XTX="" D WRITER K ^TMP($J,"XTER") S C=0 | ||
3328 | 3323 | "RTN","XTER1A",61,0) | ||
3329 | 3324 | I '$D(ZTQUEUED),'$G(XTPRNT),$G(IOST)["C-" D | ||
3330 | 3325 | "RTN","XTER1A",62,0) | ||
3331 | 3326 | . S:($D(X)#2) XTMORE=X S DIR(0)="FO^0:50",DIR("A")=" Enter '^' to quit listing, <RETURN> to continue..." | ||
3332 | 3327 | "RTN","XTER1A",63,0) | ||
3333 | 3328 | . D ^DIR K DIR S:$D(DTOUT) X="^" S XTX=X S:$D(XTMORE) X=XTMORE K XTMORE | ||
3334 | 3329 | "RTN","XTER1A",64,0) | ||
3335 | 3330 | I $D(XTX),$E(XTX)="^" S XTOUT=1 Q | ||
3336 | 3331 | "RTN","XTER1A",65,0) | ||
3337 | 3332 | I $G(XTPRNT) W @IOF | ||
3338 | 3333 | "RTN","XTER1A",66,0) | ||
3339 | 3334 | Q | ||
3340 | 3335 | "RTN","XTER1A",67,0) | ||
3341 | 3336 | ; | ||
3342 | 3337 | "RTN","XTER1A",68,0) | ||
3343 | 3338 | LST S X=" ",XTQ="" N XTXT,XBLNK S $P(XBLNK," ",80)=" " | ||
3344 | 3339 | "RTN","XTER1A",69,0) | ||
3345 | 3340 | T1 S X=$O(^%ZTER(1,%XTZDAT,1,X),-1) R XTQ:0 Q:XTQ'="" G T2:X'>0,T1:'($D(^(X,"ZE"))#2) S XTP=^("ZE"),XTS="" | ||
3346 | 3341 | "RTN","XTER1A",70,0) | ||
3347 | 3342 | F S XTS=$O(^TMP($J,"XTERSCR",XTS)) Q:XTS="" I XTP[XTS,XTD S XTD=XTD+1 G T1 | ||
3348 | 3343 | "RTN","XTER1A",71,0) | ||
3349 | 3344 | ; | ||
3350 | 3345 | "RTN","XTER1A",72,0) | ||
3351 | 3346 | I '(X#20) S %XTERRX=X D MORE Q:XTOUT Q:XTX>0 D T3 S X=%XTERRX | ||
3352 | 3347 | "RTN","XTER1A",73,0) | ||
3353 | 3348 | I ^%ZTER(1,%XTZDAT,1,X,"ZE")["," S %XTERR=$P($P(^("ZE"),",",4),"-",4),%XTERR=$P($P(^("ZE"),",",2),"-",3)_$S(%XTERR="":"",1:"(")_%XTERR_$S(%XTERR="":"",1:")") S XTXT=$J(X,3)_") "_"<"_%XTERR_">"_$P(^("ZE"),",",1)_" " | ||
3354 | 3349 | "RTN","XTER1A",74,0) | ||
3355 | 3350 | I ^%ZTER(1,%XTZDAT,1,X,"ZE")'["," S XTXT=$J(X,3)_") "_^("ZE") | ||
3356 | 3351 | "RTN","XTER1A",75,0) | ||
3357 | 3352 | S %XTZNUM=X,%="" I $D(^%ZTER(1,%XTZDAT,1,%XTZNUM,"H")) S %H=^("H") D YMD^%DTC S %=$P(%,".",2)_"000000",%=$E(%,1,2)_":"_$E(%,3,4)_":"_$E(%,5,6) | ||
3358 | 3353 | "RTN","XTER1A",76,0) | ||
3359 | 3354 | S X=%XTZNUM S XTXT=$S($L(XTXT)>34:XTXT,1:$E(XTXT_XBLNK,1,34))_% | ||
3360 | 3355 | "RTN","XTER1A",77,0) | ||
3361 | 3356 | I $D(^%ZTER(1,%XTZDAT,1,X,"J")) S XTXT=XTXT_" ["_$P($P(^("J"),U,4),",")_"]" ;_" "_$J($P(^("J"),U,5),7) | ||
3362 | 3357 | "RTN","XTER1A",78,0) | ||
3363 | 3358 | D IHSXQY0 ;***IHS | ||
3364 | 3359 | "RTN","XTER1A",79,0) | ||
3365 | 3360 | W !,$E(XTXT,1,79) | ||
3366 | 3361 | "RTN","XTER1A",80,0) | ||
3367 | 3362 | COMMENT I $D(^DD(3.0751,21400)) D ;**MSC/GFT | ||
3368 | 3363 | "RTN","XTER1A",81,0) | ||
3369 | 3364 | .N DIC,DIQ,DR,DA,Y,S,DK,D0,D1 | ||
3370 | 3365 | "RTN","XTER1A",82,0) | ||
3371 | 3366 | .S DIC="^%ZTER(1,"_%XTZDAT_",1,",DIQ(0)="A",DR=21400,DA=X,DA(1)=%XTZDAT | ||
3372 | 3367 | "RTN","XTER1A",83,0) | ||
3373 | 3368 | .I $D(@(DIC_DA_",21400)")) N X D EN^DIQ | ||
3374 | 3369 | "RTN","XTER1A",84,0) | ||
3375 | 3370 | G T1 | ||
3376 | 3371 | "RTN","XTER1A",85,0) | ||
3377 | 3372 | T2 I XTD W !! I XTD-1 W XTD-1," screened error",$S(XTD-1>1:"s",1:""),! | ||
3378 | 3373 | "RTN","XTER1A",86,0) | ||
3379 | 3374 | ;D MORE | ||
3380 | 3375 | "RTN","XTER1A",87,0) | ||
3381 | 3376 | Q | ||
3382 | 3377 | "RTN","XTER1A",88,0) | ||
3383 | 3378 | T3 W !!,?11,"$ZE",?41,"Time",?49,"UCI,VOL",?61,"$J",?69,"$I",! | ||
3384 | 3379 | "RTN","XTER1A",89,0) | ||
3385 | 3380 | Q | ||
3386 | 3381 | "RTN","XTER1A",90,0) | ||
3387 | 3382 | INTRACT ; | ||
3388 | 3383 | "RTN","XTER1A",91,0) | ||
3389 | 3384 | G INTRACT^XTER1A1 | ||
3390 | 3385 | "RTN","XTER1A",92,0) | ||
3391 | 3386 | ; | ||
3392 | 3387 | "RTN","XTER1A",93,0) | ||
3393 | 3388 | ; | ||
3394 | 3389 | "RTN","XTER1A",94,0) | ||
3395 | 3390 | ; | ||
3396 | 3391 | "RTN","XTER1A",95,0) | ||
3397 | 3392 | ; | ||
3398 | 3393 | "RTN","XTER1A",96,0) | ||
3399 | 3394 | IHSXQY0 ;IHS/ANMC/LJF 5/20/99 find option name | ||
3400 | 3395 | "RTN","XTER1A",97,0) | ||
3401 | 3396 | NEW IHS,FOUND,STR | ||
3402 | 3397 | "RTN","XTER1A",98,0) | ||
3403 | 3398 | S (FOUND,IHS)=0,STR="" | ||
3404 | 3399 | "RTN","XTER1A",99,0) | ||
3405 | 3400 | F S IHS=$O(^%ZTER(1,%XTZDAT,1,X,"ZV",IHS)) Q:'IHS Q:FOUND D | ||
3406 | 3401 | "RTN","XTER1A",100,0) | ||
3407 | 3402 | .I $G(^%ZTER(1,%XTZDAT,1,X,"ZV",IHS,0))="DUZ" D Q | ||
3408 | 3403 | "RTN","XTER1A",101,0) | ||
3409 | 3404 | ..N D,Y S D=$G(^("D")) I D S Y=$P($G(^%ZTER(1,%XTZDAT,1,X,"J")),U,4),Y=$$UCICHECK^%ZOSV(Y) I $L(Y)>2 S STR=$P($G(^[$S(^%ZOSF("OS")["GT.M":$ZGB,1:Y)]VA(200,D,0)),",")_": " | ||
3410 | 3405 | "RTN","XTER1A",102,0) | ||
3411 | 3406 | . Q:$G(^%ZTER(1,%XTZDAT,1,X,"ZV",IHS,0))'="XQY0" | ||
3412 | 3407 | "RTN","XTER1A",103,0) | ||
3413 | 3408 | . S STR=STR_$P($G(^%ZTER(1,%XTZDAT,1,X,"ZV",IHS,"D")),U) | ||
3414 | 3409 | "RTN","XTER1A",104,0) | ||
3415 | 3410 | . S STR=$E(STR,1,26)_$$REPEAT^XLFSTR(" ",(26-$L(STR))),FOUND=1 | ||
3416 | 3411 | "RTN","XTER1A",105,0) | ||
3417 | 3412 | S XTXT=XTXT_" "_$G(STR) | ||
3418 | 3413 | "RTN","XTER1A",106,0) | ||
3419 | 3414 | Q | ||
3420 | 3415 | "RTN","XWBTCPM") | ||
3421 | 3416 | 0^23^B56160723 | ||
3422 | 3417 | "RTN","XWBTCPM",1,0) | ||
3423 | 3418 | XWBTCPM ;ISF/RWF MSC/JDA - BROKER TCP/IP PROCESS HANDLER ;01/04/2006 62562.56228 | ||
3424 | 3419 | "RTN","XWBTCPM",2,0) | ||
3425 | 3420 | ;;1.1;RPC BROKER;**35,43,MSC**;Mar 28, 1997 | ||
3426 | 3421 | "RTN","XWBTCPM",3,0) | ||
3427 | 3422 | ;Based on: XWBTCPC & XWBTCPL, Modified by ISF/RWF | ||
3428 | 3423 | "RTN","XWBTCPM",4,0) | ||
3429 | 3424 | ;Changed to be started by UCX or %ZISTCPS | ||
3430 | 3425 | "RTN","XWBTCPM",5,0) | ||
3431 | 3426 | ; | ||
3432 | 3427 | "RTN","XWBTCPM",6,0) | ||
3433 | 3428 | ;MSC/JDA 04/13/09 - Added MOREREADTIME to GT.M init | ||
3434 | 3429 | "RTN","XWBTCPM",7,0) | ||
3435 | 3430 | ; | ||
3436 | 3431 | "RTN","XWBTCPM",8,0) | ||
3437 | 3432 | DSM ;DSM called from ucx, % passed in with device. | ||
3438 | 3433 | "RTN","XWBTCPM",9,0) | ||
3439 | 3434 | D ESET | ||
3440 | 3435 | "RTN","XWBTCPM",10,0) | ||
3441 | 3436 | ;Open the device | ||
3442 | 3437 | "RTN","XWBTCPM",11,0) | ||
3443 | 3438 | S XWBTDEV=% X "O XWBTDEV:(TCPDEV):60" ;Special UCX/DSM open | ||
3444 | 3439 | "RTN","XWBTCPM",12,0) | ||
3445 | 3440 | ;Go find the connection type | ||
3446 | 3441 | "RTN","XWBTCPM",13,0) | ||
3447 | 3442 | U XWBTDEV | ||
3448 | 3443 | "RTN","XWBTCPM",14,0) | ||
3449 | 3444 | G CONNTYPE | ||
3450 | 3445 | "RTN","XWBTCPM",15,0) | ||
3451 | 3446 | ; | ||
3452 | 3447 | "RTN","XWBTCPM",16,0) | ||
3453 | 3448 | CACHEVMS ;Cache'/VMS tcpip entry point, called from XWBTCP_START.COM file | ||
3454 | 3449 | "RTN","XWBTCPM",17,0) | ||
3455 | 3450 | D ESET | ||
3456 | 3451 | "RTN","XWBTCPM",18,0) | ||
3457 | 3452 | S XWBTDEV="SYS$NET" | ||
3458 | 3453 | "RTN","XWBTCPM",19,0) | ||
3459 | 3454 | ; **Cache'/VMS specific code** | ||
3460 | 3455 | "RTN","XWBTCPM",20,0) | ||
3461 | 3456 | O XWBTDEV::5 | ||
3462 | 3457 | "RTN","XWBTCPM",21,0) | ||
3463 | 3458 | X "U XWBTDEV:(::""-M"")" ;Packet mode like DSM | ||
3464 | 3459 | "RTN","XWBTCPM",22,0) | ||
3465 | 3460 | G CONNTYPE | ||
3466 | 3461 | "RTN","XWBTCPM",23,0) | ||
3467 | 3462 | ; | ||
3468 | 3463 | "RTN","XWBTCPM",24,0) | ||
3469 | 3464 | NT ;entry from ZISTCPS | ||
3470 | 3465 | "RTN","XWBTCPM",25,0) | ||
3471 | 3466 | ;JOB LISTEN^%ZISTCPS("port","NT^XWBTCPM","stop code") | ||
3472 | 3467 | "RTN","XWBTCPM",26,0) | ||
3473 | 3468 | D ESET | ||
3474 | 3469 | "RTN","XWBTCPM",27,0) | ||
3475 | 3470 | S XWBTDEV=IO | ||
3476 | 3471 | "RTN","XWBTCPM",28,0) | ||
3477 | 3472 | G CONNTYPE | ||
3478 | 3473 | "RTN","XWBTCPM",29,0) | ||
3479 | 3474 | ; | ||
3480 | 3475 | "RTN","XWBTCPM",30,0) | ||
3481 | 3476 | GTMUCX(%) ;From ucx ZFOO | ||
3482 | 3477 | "RTN","XWBTCPM",31,0) | ||
3483 | 3478 | ;If called from LISTEN^%ZISTCP(PORT,"GTM^XWBTCPM") S XWBTDEV=IO | ||
3484 | 3479 | "RTN","XWBTCPM",32,0) | ||
3485 | 3480 | D ESET | ||
3486 | 3481 | "RTN","XWBTCPM",33,0) | ||
3487 | 3482 | ;GTM specific code | ||
3488 | 3483 | "RTN","XWBTCPM",34,0) | ||
3489 | 3484 | S @("$ZINTERRUPT=""I $$JOBEXAM^ZU($ZPOSITION)""") | ||
3490 | 3485 | "RTN","XWBTCPM",35,0) | ||
3491 | 3486 | S XWBTDEV=% X "O %:(RECORDSIZE=512)" | ||
3492 | 3487 | "RTN","XWBTCPM",36,0) | ||
3493 | 3488 | G CONNTYPE | ||
3494 | 3489 | "RTN","XWBTCPM",37,0) | ||
3495 | 3490 | ; | ||
3496 | 3491 | "RTN","XWBTCPM",38,0) | ||
3497 | 3492 | GTMLNX ;From Linux xinetd script | ||
3498 | 3493 | "RTN","XWBTCPM",39,0) | ||
3499 | 3494 | D ESET | ||
3500 | 3495 | "RTN","XWBTCPM",40,0) | ||
3501 | 3496 | ;GTM specific code | ||
3502 | 3497 | "RTN","XWBTCPM",41,0) | ||
3503 | 3498 | S @("$ZINTERRUPT=""I $$JOBEXAM^ZU($ZPOSITION)""") | ||
3504 | 3499 | "RTN","XWBTCPM",42,0) | ||
3505 | 3500 | S XWBTDEV=$P X "U XWBTDEV:(nowrap:nodelimiter)" | ||
3506 | 3501 | "RTN","XWBTCPM",43,0) | ||
3507 | 3502 | S %="",@("%=$ZTRNLNM(""REMOTE_HOST"")") S:$L(%) IO("GTM-IP")=% | ||
3508 | 3503 | "RTN","XWBTCPM",44,0) | ||
3509 | 3504 | G CONNTYPE | ||
3510 | 3505 | "RTN","XWBTCPM",45,0) | ||
3511 | 3506 | ; | ||
3512 | 3507 | "RTN","XWBTCPM",46,0) | ||
3513 | 3508 | ESET ;Set inital error trap | ||
3514 | 3509 | "RTN","XWBTCPM",47,0) | ||
3515 | 3510 | S U="^",$ETRAP="D ^%ZTER H" ;Set up the error trap | ||
3516 | 3511 | "RTN","XWBTCPM",48,0) | ||
3517 | 3512 | Q | ||
3518 | 3513 | "RTN","XWBTCPM",49,0) | ||
3519 | 3514 | ;Find the type of connection and jump to the processing routine. | ||
3520 | 3515 | "RTN","XWBTCPM",50,0) | ||
3521 | 3516 | CONNTYPE ; | ||
3522 | 3517 | "RTN","XWBTCPM",51,0) | ||
3523 | 3518 | N XWBDEBUG,XWBAPVER,XWBCLMAN,XWBENVL,XWBLOG,XWBOS,XWBPTYPE | ||
3524 | 3519 | "RTN","XWBTCPM",52,0) | ||
3525 | 3520 | N XWBTBUF,XWBTIP,XWBTSKT,XWBVER,XWBWRAP,XWBSHARE,XWBT | ||
3526 | 3521 | "RTN","XWBTCPM",53,0) | ||
3527 | 3522 | N SOCK,TYPE | ||
3528 | 3523 | "RTN","XWBTCPM",54,0) | ||
3529 | 3524 | D INIT | ||
3530 | 3525 | "RTN","XWBTCPM",55,0) | ||
3531 | 3526 | S XWB=$$BREAD^XWBRW(5,XWBTIME) | ||
3532 | 3527 | "RTN","XWBTCPM",56,0) | ||
3533 | 3528 | D LOG("MSG format is "_XWB_" type "_$S(XWB="[XWB]":"NEW",XWB="{XWB}":"OLD",XWB="<?xml":"M2M",1:"Unk")) | ||
3534 | 3529 | "RTN","XWBTCPM",57,0) | ||
3535 | 3530 | I XWB["[XWB]" G NEW | ||
3536 | 3531 | "RTN","XWBTCPM",58,0) | ||
3537 | 3532 | I XWB["{XWB}" G OLD^XWBTCPM1 | ||
3538 | 3533 | "RTN","XWBTCPM",59,0) | ||
3539 | 3534 | I XWB["<?xml" G M2M | ||
3540 | 3535 | "RTN","XWBTCPM",60,0) | ||
3541 | 3536 | I $L($T(OTH^XWBTCPM2)) D OTH^XWBTCPM2 ;See if a special code. | ||
3542 | 3537 | "RTN","XWBTCPM",61,0) | ||
3543 | 3538 | D LOG("Prefix not known: "_XWB) | ||
3544 | 3539 | "RTN","XWBTCPM",62,0) | ||
3545 | 3540 | Q | ||
3546 | 3541 | "RTN","XWBTCPM",63,0) | ||
3547 | 3542 | ; | ||
3548 | 3543 | "RTN","XWBTCPM",64,0) | ||
3549 | 3544 | NEWJOB() ;Check if OK to start a new job, Return 1 if OK, 0 if not OK. | ||
3550 | 3545 | "RTN","XWBTCPM",65,0) | ||
3551 | 3546 | N X,Y,J,XWBVOL | ||
3552 | 3547 | "RTN","XWBTCPM",66,0) | ||
3553 | 3548 | D GETENV^%ZOSV S XWBVOL=$P(Y,"^",2) | ||
3554 | 3549 | "RTN","XWBTCPM",67,0) | ||
3555 | 3550 | S X=$O(^XTV(8989.3,1,4,"B",XWBVOL,0)),J=$S(X>0:^XTV(8989.3,1,4,X,0),1:"ROU^y^1") | ||
3556 | 3551 | "RTN","XWBTCPM",68,0) | ||
3557 | 3552 | I $G(^%ZIS(14.5,"LOGON",XWBVOL)) Q 0 ;Check INHIBIT LOGONS? | ||
3558 | 3553 | "RTN","XWBTCPM",69,0) | ||
3559 | 3554 | I $D(^%ZOSF("ACTJ")) X ^("ACTJ") I $P(J,U,3),($P(J,U,3)'>Y) Q 0 | ||
3560 | 3555 | "RTN","XWBTCPM",70,0) | ||
3561 | 3556 | Q 1 | ||
3562 | 3557 | "RTN","XWBTCPM",71,0) | ||
3563 | 3558 | ; | ||
3564 | 3559 | "RTN","XWBTCPM",72,0) | ||
3565 | 3560 | M2M ;M2M Broker | ||
3566 | 3561 | "RTN","XWBTCPM",73,0) | ||
3567 | 3562 | S XWBRBUF=XWB_XWBRBUF,(IO,IO(0))=XWBTDEV G SPAWN^XWBVLL | ||
3568 | 3563 | "RTN","XWBTCPM",74,0) | ||
3569 | 3564 | Q | ||
3570 | 3565 | "RTN","XWBTCPM",75,0) | ||
3571 | 3566 | ; | ||
3572 | 3567 | "RTN","XWBTCPM",76,0) | ||
3573 | 3568 | NEW ;New broker | ||
3574 | 3569 | "RTN","XWBTCPM",77,0) | ||
3575 | 3570 | S U="^",DUZ=0,DUZ(0)="",XWBVER=1.108 | ||
3576 | 3571 | "RTN","XWBTCPM",78,0) | ||
3577 | 3572 | D SETTIME(1) ;Setup for sign-on timeout | ||
3578 | 3573 | "RTN","XWBTCPM",79,0) | ||
3579 | 3574 | U XWBTDEV D | ||
3580 | 3575 | "RTN","XWBTCPM",80,0) | ||
3581 | 3576 | . N XWB,ERR,NATIP,I | ||
3582 | 3577 | "RTN","XWBTCPM",81,0) | ||
3583 | 3578 | . S ERR=$$PRSP^XWBPRS | ||
3584 | 3579 | "RTN","XWBTCPM",82,0) | ||
3585 | 3580 | . S ERR=$$PRSM^XWBPRS | ||
3586 | 3581 | "RTN","XWBTCPM",83,0) | ||
3587 | 3582 | . S MSG=$G(XWB(4,"CMD")) ;Build connect msg. | ||
3588 | 3583 | "RTN","XWBTCPM",84,0) | ||
3589 | 3584 | . S I="" F S I=$O(XWB(5,"P",I)) Q:I="" S MSG=MSG_U_XWB(5,"P",I) | ||
3590 | 3585 | "RTN","XWBTCPM",85,0) | ||
3591 | 3586 | . ;Get the peer and save that IP. | ||
3592 | 3587 | "RTN","XWBTCPM",86,0) | ||
3593 | 3588 | . S NATIP=$$GETPEER^%ZOSV S:'$L(NATIP) NATIP=$P(MSG,"^",2) | ||
3594 | 3589 | "RTN","XWBTCPM",87,0) | ||
3595 | 3590 | . I NATIP'=$P(MSG,"^",2) S $P(MSG,"^",2)=NATIP | ||
3596 | 3591 | "RTN","XWBTCPM",88,0) | ||
3597 | 3592 | . Q | ||
3598 | 3593 | "RTN","XWBTCPM",89,0) | ||
3599 | 3594 | S X=$$NEWJOB() D:'X LOG("No New Connects") | ||
3600 | 3595 | "RTN","XWBTCPM",90,0) | ||
3601 | 3596 | I ($P(MSG,U)'="TCPConnect")!('X) D QSND^XWBRW("reject"),LOG("reject: "_MSG) Q | ||
3602 | 3597 | "RTN","XWBTCPM",91,0) | ||
3603 | 3598 | D QSND^XWBRW("accept"),LOG("accept") ;Ack | ||
3604 | 3599 | "RTN","XWBTCPM",92,0) | ||
3605 | 3600 | S IO("IP")=$P(MSG,U,2),XWBTSKT=$P(MSG,U,3),XWBCLMAN=$P(MSG,U,4) | ||
3606 | 3601 | "RTN","XWBTCPM",93,0) | ||
3607 | 3602 | S XWBTIP=$G(IO("IP")) | ||
3608 | 3603 | "RTN","XWBTCPM",94,0) | ||
3609 | 3604 | ;start RUM for Broker Handler XWB*1.1*5 | ||
3610 | 3605 | "RTN","XWBTCPM",95,0) | ||
3611 | 3606 | D LOGRSRC^%ZOSV("$BROKER HANDLER$",2,1) | ||
3612 | 3607 | "RTN","XWBTCPM",96,0) | ||
3613 | 3608 | ;GTM | ||
3614 | 3609 | "RTN","XWBTCPM",97,0) | ||
3615 | 3610 | I $G(XWBT("PCNT")) D | ||
3616 | 3611 | "RTN","XWBTCPM",98,0) | ||
3617 | 3612 | . S X=$NA(^XUTL("XUSYS",$J,1)) L +@X:0 | ||
3618 | 3613 | "RTN","XWBTCPM",99,0) | ||
3619 | 3614 | . D COUNT^XUSCNT(1),SETLOCK^XUSCNT(X) | ||
3620 | 3615 | "RTN","XWBTCPM",100,0) | ||
3621 | 3616 | ;We don't use a callback | ||
3622 | 3617 | "RTN","XWBTCPM",101,0) | ||
3623 | 3618 | K XWB,CON,LEN,MSG ;Clean up | ||
3624 | 3619 | "RTN","XWBTCPM",102,0) | ||
3625 | 3620 | ;Attempt to share license, Must have TCP port open first. | ||
3626 | 3621 | "RTN","XWBTCPM",103,0) | ||
3627 | 3622 | U XWBTDEV ;D SHARELIC^%ZOSV(1) | ||
3628 | 3623 | "RTN","XWBTCPM",104,0) | ||
3629 | 3624 | ;setup null device "NULL" | ||
3630 | 3625 | "RTN","XWBTCPM",105,0) | ||
3631 | 3626 | S %ZIS="0H",IOP="NULL" D ^%ZIS S XWBNULL=IO I POP S XWBERROR="No NULL device" D ^%ZTER,EXIT Q | ||
3632 | 3627 | "RTN","XWBTCPM",106,0) | ||
3633 | 3628 | D SAVDEV^%ZISUTL("XWBNULL") | ||
3634 | 3629 | "RTN","XWBTCPM",107,0) | ||
3635 | 3630 | ;change process name | ||
3636 | 3631 | "RTN","XWBTCPM",108,0) | ||
3637 | 3632 | D CHPRN("ip"_$P(XWBTIP,".",3,4)_":"_XWBTDEV) | ||
3638 | 3633 | "RTN","XWBTCPM",109,0) | ||
3639 | 3634 | ; | ||
3640 | 3635 | "RTN","XWBTCPM",110,0) | ||
3641 | 3636 | RESTART ;The error trap returns to here | ||
3642 | 3637 | "RTN","XWBTCPM",111,0) | ||
3643 | 3638 | N $ESTACK S $ETRAP="D ETRAP^XWBTCPM" | ||
3644 | 3639 | "RTN","XWBTCPM",112,0) | ||
3645 | 3640 | S DT=$$DT^XLFDT,DTIME=30 | ||
3646 | 3641 | "RTN","XWBTCPM",113,0) | ||
3647 | 3642 | U XWBTDEV D MAIN | ||
3648 | 3643 | "RTN","XWBTCPM",114,0) | ||
3649 | 3644 | D LOG("Exit: "_XWBTBUF) | ||
3650 | 3645 | "RTN","XWBTCPM",115,0) | ||
3651 | 3646 | ;Turn off the error trap for the exit | ||
3652 | 3647 | "RTN","XWBTCPM",116,0) | ||
3653 | 3648 | S $ETRAP="" | ||
3654 | 3649 | "RTN","XWBTCPM",117,0) | ||
3655 | 3650 | D EXIT ;Logout | ||
3656 | 3651 | "RTN","XWBTCPM",118,0) | ||
3657 | 3652 | K XWBR,XWBARY | ||
3658 | 3653 | "RTN","XWBTCPM",119,0) | ||
3659 | 3654 | ;stop RUM for handler XWB*1.1*5 | ||
3660 | 3655 | "RTN","XWBTCPM",120,0) | ||
3661 | 3656 | D LOGRSRC^%ZOSV("$BROKER HANDLER$",2,2) | ||
3662 | 3657 | "RTN","XWBTCPM",121,0) | ||
3663 | 3658 | D USE^%ZISUTL("XWBNULL"),CLOSE^%ZISUTL("XWBNULL") | ||
3664 | 3659 | "RTN","XWBTCPM",122,0) | ||
3665 | 3660 | ;Close in the calling script | ||
3666 | 3661 | "RTN","XWBTCPM",123,0) | ||
3667 | 3662 | K SOCK,TYPE,XWBSND,XWBTYPE,XWBRBUF | ||
3668 | 3663 | "RTN","XWBTCPM",124,0) | ||
3669 | 3664 | Q | ||
3670 | 3665 | "RTN","XWBTCPM",125,0) | ||
3671 | 3666 | ; | ||
3672 | 3667 | "RTN","XWBTCPM",126,0) | ||
3673 | 3668 | MAIN ; -- main message processing loop. debug at MAIN+1 | ||
3674 | 3669 | "RTN","XWBTCPM",127,0) | ||
3675 | 3670 | F D Q:XWBTBUF="#BYE#" | ||
3676 | 3671 | "RTN","XWBTCPM",128,0) | ||
3677 | 3672 | . ;Setup | ||
3678 | 3673 | "RTN","XWBTCPM",129,0) | ||
3679 | 3674 | . S XWBAPVER=0,XWBTBUF="",XWBTCMD="",XWBRBUF="" | ||
3680 | 3675 | "RTN","XWBTCPM",130,0) | ||
3681 | 3676 | . K XWBR,XWBARY,XWBPRT | ||
3682 | 3677 | "RTN","XWBTCPM",131,0) | ||
3683 | 3678 | . ; -- read client request | ||
3684 | 3679 | "RTN","XWBTCPM",132,0) | ||
3685 | 3680 | . S XR=$$BREAD^XWBRW(1,XWBTIME,1) | ||
3686 | 3681 | "RTN","XWBTCPM",133,0) | ||
3687 | 3682 | . I '$L(XR) D LOG("Timeout: "_XWBTIME) S XWBTBUF="#BYE#" Q | ||
3688 | 3683 | "RTN","XWBTCPM",134,0) | ||
3689 | 3684 | . S XR=XR_$$BREAD^XWBRW(4) | ||
3690 | 3685 | "RTN","XWBTCPM",135,0) | ||
3691 | 3686 | . I XR="#BYE#" D Q ;Check for exit | ||
3692 | 3687 | "RTN","XWBTCPM",136,0) | ||
3693 | 3688 | . . D QSND^XWBRW("#BYE#"),LOG("BYE CMD") S XWBTBUF="#BYE#" | ||
3694 | 3689 | "RTN","XWBTCPM",137,0) | ||
3695 | 3690 | . . Q | ||
3696 | 3691 | "RTN","XWBTCPM",138,0) | ||
3697 | 3692 | . S TYPE=(XR="[XWB]") ;check HDR | ||
3698 | 3693 | "RTN","XWBTCPM",139,0) | ||
3699 | 3694 | . I 'TYPE D LOG("Bad Header: "_XR) Q | ||
3700 | 3695 | "RTN","XWBTCPM",140,0) | ||
3701 | 3696 | . D CALLP^XWBPRS(.XWBR,$G(XWBDEBUG)) ;Read the NEW Msg parameters and call RPC | ||
3702 | 3697 | "RTN","XWBTCPM",141,0) | ||
3703 | 3698 | . IF XWBTCMD="#BYE#" D Q | ||
3704 | 3699 | "RTN","XWBTCPM",142,0) | ||
3705 | 3700 | . . D QSND^XWBRW("#BYE#"),LOG("BYE CMD") S XWBTBUF=XWBTCMD | ||
3706 | 3701 | "RTN","XWBTCPM",143,0) | ||
3707 | 3702 | . . Q | ||
3708 | 3703 | "RTN","XWBTCPM",144,0) | ||
3709 | 3704 | . U XWBTDEV | ||
3710 | 3705 | "RTN","XWBTCPM",145,0) | ||
3711 | 3706 | . S XWBPTYPE=$S('$D(XWBPTYPE):1,XWBPTYPE<1:1,XWBPTYPE>6:1,1:XWBPTYPE) | ||
3712 | 3707 | "RTN","XWBTCPM",146,0) | ||
3713 | 3708 | . ;I $G(XWBPRT) D RETURN^XWBPRS2 Q ;New msg return | ||
3714 | 3709 | "RTN","XWBTCPM",147,0) | ||
3715 | 3710 | . I '$G(XWBPRT) D SND^XWBRW ;Return data,flush buffer | ||
3716 | 3711 | "RTN","XWBTCPM",148,0) | ||
3717 | 3712 | Q ;End Of Main | ||
3718 | 3713 | "RTN","XWBTCPM",149,0) | ||
3719 | 3714 | ; | ||
3720 | 3715 | "RTN","XWBTCPM",150,0) | ||
3721 | 3716 | ; | ||
3722 | 3717 | "RTN","XWBTCPM",151,0) | ||
3723 | 3718 | ETRAP ; -- on trapped error, send error info to client | ||
3724 | 3719 | "RTN","XWBTCPM",152,0) | ||
3725 | 3720 | N XWBERC,XWBERR | ||
3726 | 3721 | "RTN","XWBTCPM",153,0) | ||
3727 | 3722 | ;Change trapping during trap. | ||
3728 | 3723 | "RTN","XWBTCPM",154,0) | ||
3729 | 3724 | S $ETRAP="D ^%ZTER,EXIT^XWBTCPM HALT" | ||
3730 | 3725 | "RTN","XWBTCPM",155,0) | ||
3731 | 3726 | S XWBERC=$E($$EC^%ZOSV,1,200),XWBERR="M ERROR="_XWBERC_$C(13,10)_"LAST REF="_$$LGR^%ZOSV | ||
3732 | 3727 | "RTN","XWBTCPM",156,0) | ||
3733 | 3728 | I $EC["U411" S XWBERROR="U411",XWBSEC="",XWBERR="Data Transfer Error to Server" | ||
3734 | 3729 | "RTN","XWBTCPM",157,0) | ||
3735 | 3730 | D ^%ZTER ;%ZTER clears $ZE and $ZCODE | ||
3736 | 3731 | "RTN","XWBTCPM",158,0) | ||
3737 | 3732 | D LOG("In ETRAP: "_XWBERC) ;Log | ||
3738 | 3733 | "RTN","XWBTCPM",159,0) | ||
3739 | 3734 | I (XWBERC["READ")!(XWBERC["WRITE")!(XWBERC["SYSTEM-F") D EXIT HALT | ||
3740 | 3735 | "RTN","XWBTCPM",160,0) | ||
3741 | 3736 | U XWBTDEV | ||
3742 | 3737 | "RTN","XWBTCPM",161,0) | ||
3743 | 3738 | I $G(XWBT("PCNT")) L ^XUTL("XUSYS",$J,0) | ||
3744 | 3739 | "RTN","XWBTCPM",162,0) | ||
3745 | 3740 | E L ;Clear Locks | ||
3746 | 3741 | "RTN","XWBTCPM",163,0) | ||
3747 | 3742 | ;I XWBOS'="DSM" D | ||
3748 | 3743 | "RTN","XWBTCPM",164,0) | ||
3749 | 3744 | S XWBPTYPE=1 ;So SNDERR won't check XWBR | ||
3750 | 3745 | "RTN","XWBTCPM",165,0) | ||
3751 | 3746 | ;D SNDERR^XWBRW,WRITE^XWBRW($C(24)_XWBERR_$C(4)) | ||
3752 | 3747 | "RTN","XWBTCPM",166,0) | ||
3753 | 3748 | D ESND^XWBRW($C(24)_XWBERR_$C(4)) | ||
3754 | 3749 | "RTN","XWBTCPM",167,0) | ||
3755 | 3750 | S $ETRAP="Q:($ESTACK&'$QUIT) Q:$ESTACK -9 S $ECODE="""" D CLEANP^XWBTCPM G RESTART^XWBTCPM",$ECODE=",U99," | ||
3756 | 3751 | "RTN","XWBTCPM",168,0) | ||
3757 | 3752 | Q | ||
3758 | 3753 | "RTN","XWBTCPM",169,0) | ||
3759 | 3754 | ; | ||
3760 | 3755 | "RTN","XWBTCPM",170,0) | ||
3761 | 3756 | CLEANP ;Clean up the partion | ||
3762 | 3757 | "RTN","XWBTCPM",171,0) | ||
3763 | 3758 | N XWBTDEV,XWBNULL D KILL^XUSCLEAN | ||
3764 | 3759 | "RTN","XWBTCPM",172,0) | ||
3765 | 3760 | Q | ||
3766 | 3761 | "RTN","XWBTCPM",173,0) | ||
3767 | 3762 | ; | ||
3768 | 3763 | "RTN","XWBTCPM",174,0) | ||
3769 | 3764 | STYPE(X,WRAP) ;For backward compatability only | ||
3770 | 3765 | "RTN","XWBTCPM",175,0) | ||
3771 | 3766 | I $D(WRAP) Q $$RTRNFMT^XWBLIB($G(X),WRAP) | ||
3772 | 3767 | "RTN","XWBTCPM",176,0) | ||
3773 | 3768 | Q $$RTRNFMT^XWBLIB(X) | ||
3774 | 3769 | "RTN","XWBTCPM",177,0) | ||
3775 | 3770 | ; | ||
3776 | 3771 | "RTN","XWBTCPM",178,0) | ||
3777 | 3772 | BREAD(L,T) ;read tcp buffer, L is length | ||
3778 | 3773 | "RTN","XWBTCPM",179,0) | ||
3779 | 3774 | Q $$BREAD^XWBRW(L,$G(T)) | ||
3780 | 3775 | "RTN","XWBTCPM",180,0) | ||
3781 | 3776 | ; | ||
3782 | 3777 | "RTN","XWBTCPM",181,0) | ||
3783 | 3778 | CHPRN(N) ;change process name | ||
3784 | 3779 | "RTN","XWBTCPM",182,0) | ||
3785 | 3780 | ;Change process name to N | ||
3786 | 3781 | "RTN","XWBTCPM",183,0) | ||
3787 | 3782 | D SETNM^%ZOSV($E(N,1,15)) | ||
3788 | 3783 | "RTN","XWBTCPM",184,0) | ||
3789 | 3784 | Q | ||
3790 | 3785 | "RTN","XWBTCPM",185,0) | ||
3791 | 3786 | ; | ||
3792 | 3787 | "RTN","XWBTCPM",186,0) | ||
3793 | 3788 | SETTIME(%) ;Set the Read timeout 0=RPC, 1=sign-on | ||
3794 | 3789 | "RTN","XWBTCPM",187,0) | ||
3795 | 3790 | S XWBTIME=$S($G(%):90,$G(XWBVER)>1.105:$$BAT^XUPARAM,1:36000),XWBTIME(1)=2 | ||
3796 | 3791 | "RTN","XWBTCPM",188,0) | ||
3797 | 3792 | I $G(%) S XWBTIME=$S($G(XWBVER)>1.1:90,1:36000) | ||
3798 | 3793 | "RTN","XWBTCPM",189,0) | ||
3799 | 3794 | Q | ||
3800 | 3795 | "RTN","XWBTCPM",190,0) | ||
3801 | 3796 | TIMEOUT ;Do this on MAIN loop timeout | ||
3802 | 3797 | "RTN","XWBTCPM",191,0) | ||
3803 | 3798 | I $G(DUZ)>0 D QSND^XWBRW("#BYE#") Q | ||
3804 | 3799 | "RTN","XWBTCPM",192,0) | ||
3805 | 3800 | ;Sign-on timeout | ||
3806 | 3801 | "RTN","XWBTCPM",193,0) | ||
3807 | 3802 | S XWBR(0)=0,XWBR(1)=1,XWBR(2)="",XWBR(3)="TIME-OUT",XWBPTYPE=2 | ||
3808 | 3803 | "RTN","XWBTCPM",194,0) | ||
3809 | 3804 | D SND^XWBRW | ||
3810 | 3805 | "RTN","XWBTCPM",195,0) | ||
3811 | 3806 | Q | ||
3812 | 3807 | "RTN","XWBTCPM",196,0) | ||
3813 | 3808 | ; | ||
3814 | 3809 | "RTN","XWBTCPM",197,0) | ||
3815 | 3810 | OS() ;Return the OS | ||
3816 | 3811 | "RTN","XWBTCPM",198,0) | ||
3817 | 3812 | Q $S(^%ZOSF("OS")["DSM":"DSM",^("OS")["UNIX":"UNIX",^("OS")["OpenM":"OpenM",^("OS")["GT.M":"GTM",1:"MSM") | ||
3818 | 3813 | "RTN","XWBTCPM",199,0) | ||
3819 | 3814 | ; | ||
3820 | 3815 | "RTN","XWBTCPM",200,0) | ||
3821 | 3816 | INIT ;Setup | ||
3822 | 3817 | "RTN","XWBTCPM",201,0) | ||
3823 | 3818 | S U="^",XWBTIME=10,XWBOS=$$OS,XWBDEBUG=0,XWBRBUF="" | ||
3824 | 3819 | "RTN","XWBTCPM",202,0) | ||
3825 | 3820 | S XWBDEBUG=$$GET^XPAR("SYS","XWBDEBUG") | ||
3826 | 3821 | "RTN","XWBTCPM",203,0) | ||
3827 | 3822 | S XWBT("BF")=$S(XWBOS="GT.M":"#",1:"!") | ||
3828 | 3823 | "RTN","XWBTCPM",204,0) | ||
3829 | 3824 | X:$D(XWBTDEV)&(XWBOS="GTM") "U XWBTDEV:(MOREREADTIME=999)" | ||
3830 | 3825 | "RTN","XWBTCPM",205,0) | ||
3831 | 3826 | S XWBT("PCNT")=0 I XWBOS="GT.M",$L($T(^XUSCNT)) S XWBT("PCNT")=1 | ||
3832 | 3827 | "RTN","XWBTCPM",206,0) | ||
3833 | 3828 | D LOGSTART^XWBDLOG("XWBTCPM") | ||
3834 | 3829 | "RTN","XWBTCPM",207,0) | ||
3835 | 3830 | Q | ||
3836 | 3831 | "RTN","XWBTCPM",208,0) | ||
3837 | 3832 | ; | ||
3838 | 3833 | "RTN","XWBTCPM",209,0) | ||
3839 | 3834 | DEBUG ;Entry point for debug, Build a server to get the connect | ||
3840 | 3835 | "RTN","XWBTCPM",210,0) | ||
3841 | 3836 | ;DSM sample;ZDEBUG ON S $ZB(1)="SERV+1^XWBTCPM:1",$ZB="ETRAP+1^XWBTCPM:1" | ||
3842 | 3837 | "RTN","XWBTCPM",211,0) | ||
3843 | 3838 | W !,"Before running this entry point set your debugger to stop at" | ||
3844 | 3839 | "RTN","XWBTCPM",212,0) | ||
3845 | 3840 | W !,"the place you want to debug. Some spots to use:" | ||
3846 | 3841 | "RTN","XWBTCPM",213,0) | ||
3847 | 3842 | W !,"'SERV+1^XWBTCPM', 'MAIN+1^XWBTCPM' or 'CAPI+1^XWBPRS.'",! | ||
3848 | 3843 | "RTN","XWBTCPM",214,0) | ||
3849 | 3844 | W !,"or location of your choice.",! | ||
3850 | 3845 | "RTN","XWBTCPM",215,0) | ||
3851 | 3846 | W !,"IP Socket to Listen on: " R SOCK:300 Q:'$T!(SOCK["^") | ||
3852 | 3847 | "RTN","XWBTCPM",216,0) | ||
3853 | 3848 | ;Use %ZISTCP to do a single server | ||
3854 | 3849 | "RTN","XWBTCPM",217,0) | ||
3855 | 3850 | D LISTEN^%ZISTCP(SOCK,"SERV^XWBTCPM") | ||
3856 | 3851 | "RTN","XWBTCPM",218,0) | ||
3857 | 3852 | U $P W !,"Done" | ||
3858 | 3853 | "RTN","XWBTCPM",219,0) | ||
3859 | 3854 | Q | ||
3860 | 3855 | "RTN","XWBTCPM",220,0) | ||
3861 | 3856 | SERV ;Callback from the server | ||
3862 | 3857 | "RTN","XWBTCPM",221,0) | ||
3863 | 3858 | S XWBTDEV=IO,XWBTIME(1)=3600 D INIT | ||
3864 | 3859 | "RTN","XWBTCPM",222,0) | ||
3865 | 3860 | S XWBDEBUG=1,MSG=$$BREAD^XWBRW(5,60) ;R MSG#5 | ||
3866 | 3861 | "RTN","XWBTCPM",223,0) | ||
3867 | 3862 | D NEW | ||
3868 | 3863 | "RTN","XWBTCPM",224,0) | ||
3869 | 3864 | S IO("C")=1 ;Cause the Listenr to stop | ||
3870 | 3865 | "RTN","XWBTCPM",225,0) | ||
3871 | 3866 | Q | ||
3872 | 3867 | "RTN","XWBTCPM",226,0) | ||
3873 | 3868 | ; | ||
3874 | 3869 | "RTN","XWBTCPM",227,0) | ||
3875 | 3870 | EXIT ;Close out | ||
3876 | 3871 | "RTN","XWBTCPM",228,0) | ||
3877 | 3872 | I $G(DUZ) D LOGOUT^XUSRB | ||
3878 | 3873 | "RTN","XWBTCPM",229,0) | ||
3879 | 3874 | I $G(XWBT("PCNT")) D COUNT^XUSCNT(-1) | ||
3880 | 3875 | "RTN","XWBTCPM",230,0) | ||
3881 | 3876 | Q | ||
3882 | 3877 | "RTN","XWBTCPM",231,0) | ||
3883 | 3878 | ; | ||
3884 | 3879 | "RTN","XWBTCPM",232,0) | ||
3885 | 3880 | LOG(MSG) ;Record Debug Info | ||
3886 | 3881 | "RTN","XWBTCPM",233,0) | ||
3887 | 3882 | D:$G(XWBDEBUG) LOG^XWBDLOG(MSG) | ||
3888 | 3883 | "RTN","XWBTCPM",234,0) | ||
3889 | 3884 | Q | ||
3890 | 3885 | "RTN","XWBTCPM",235,0) | ||
3891 | 3886 | ; | ||
3892 | 3887 | "RTN","ZCD") | ||
3893 | 3888 | 0^11^B5581 | ||
3894 | 3889 | "RTN","ZCD",1,0) | ||
3895 | 3890 | ZCD ; MSC/JKT ; "Namespace" utilities for GT.M/Unix ; 01/30/2009 | ||
3896 | 3891 | "RTN","ZCD",2,0) | ||
3897 | 3892 | ; | ||
3898 | 3893 | "RTN","ZCD",3,0) | ||
3899 | 3894 | ; This routine assumes that your global directory file exists one | ||
3900 | 3895 | "RTN","ZCD",4,0) | ||
3901 | 3896 | ; directory below the root of the instance, e.g., | ||
3902 | 3897 | "RTN","ZCD",5,0) | ||
3903 | 3898 | ; | ||
3904 | 3899 | "RTN","ZCD",6,0) | ||
3905 | 3900 | ; /opt/openvista/instance/globals/mumps.gld | ||
3906 | 3901 | "RTN","ZCD",7,0) | ||
3907 | 3902 | ; | ||
3908 | 3903 | "RTN","ZCD",8,0) | ||
3909 | 3904 | ; or | ||
3910 | 3905 | "RTN","ZCD",9,0) | ||
3911 | 3906 | ; | ||
3912 | 3907 | "RTN","ZCD",10,0) | ||
3913 | 3908 | ; /home/vista/instance/g/default.gld | ||
3914 | 3909 | "RTN","ZCD",11,0) | ||
3915 | 3910 | ; | ||
3916 | 3911 | "RTN","ZCD",12,0) | ||
3917 | 3912 | ; The actual file name of the global directory file and the actual name | ||
3918 | 3913 | "RTN","ZCD",13,0) | ||
3919 | 3914 | ; of the parent directory are never checked, so their names do not | ||
3920 | 3915 | "RTN","ZCD",14,0) | ||
3921 | 3916 | ; matter. | ||
3922 | 3917 | "RTN","ZCD",15,0) | ||
3923 | 3918 | G CD | ||
3924 | 3919 | "RTN","ZCD",16,0) | ||
3925 | 3920 | ; | ||
3926 | 3921 | "RTN","ZCD",17,0) | ||
3927 | 3922 | CURRENT() | ||
3928 | 3923 | "RTN","ZCD",18,0) | ||
3929 | 3924 | ; return the name of the current OpenVista instance | ||
3930 | 3925 | "RTN","ZCD",19,0) | ||
3931 | 3926 | Q $P($ZG,"/",$L($ZG,"/")-2) | ||
3932 | 3927 | "RTN","ZCD",20,0) | ||
3933 | 3928 | ; | ||
3934 | 3929 | "RTN","ZCD",21,0) | ||
3935 | 3930 | PATH() | ||
3936 | 3931 | "RTN","ZCD",22,0) | ||
3937 | 3932 | ; return the path to the current OpenVista instance | ||
3938 | 3933 | "RTN","ZCD",23,0) | ||
3939 | 3934 | N I,X S X="" | ||
3940 | 3935 | "RTN","ZCD",24,0) | ||
3941 | 3936 | S X=$P($ZG,"/",1,$L($ZG,"/")-2) | ||
3942 | 3937 | "RTN","ZCD",25,0) | ||
3943 | 3938 | Q X | ||
3944 | 3939 | "RTN","ZCD",26,0) | ||
3945 | 3940 | ; | ||
3946 | 3941 | "RTN","ZCD",27,0) | ||
3947 | 3942 | ROOT() | ||
3948 | 3943 | "RTN","ZCD",28,0) | ||
3949 | 3944 | ; return the path where all OpenVista instances live | ||
3950 | 3945 | "RTN","ZCD",29,0) | ||
3951 | 3946 | N I,X S X="" | ||
3952 | 3947 | "RTN","ZCD",30,0) | ||
3953 | 3948 | S X=$P($ZG,"/",1,$L($ZG,"/")-3) | ||
3954 | 3949 | "RTN","ZCD",31,0) | ||
3955 | 3950 | Q X | ||
3956 | 3951 | "RTN","ZCD",32,0) | ||
3957 | 3952 | ; | ||
3958 | 3953 | "RTN","ZCD",33,0) | ||
3959 | 3954 | LIST() | ||
3960 | 3955 | "RTN","ZCD",34,0) | ||
3961 | 3956 | ; returns an array (Y) of OpenVista instances on this system | ||
3962 | 3957 | "RTN","ZCD",35,0) | ||
3963 | 3958 | ; | ||
3964 | 3959 | "RTN","ZCD",36,0) | ||
3965 | 3960 | ; FIXME: a "user friendly" version of this list should screen out the | ||
3966 | 3961 | "RTN","ZCD",37,0) | ||
3967 | 3962 | ; current instance name and any instances that the current user | ||
3968 | 3963 | "RTN","ZCD",38,0) | ||
3969 | 3964 | ; should not be allowed to switch to (they must have access | ||
3970 | 3965 | "RTN","ZCD",39,0) | ||
3971 | 3966 | ; code and primary menu option in the target instance to switch) | ||
3972 | 3967 | "RTN","ZCD",40,0) | ||
3973 | 3968 | ; | ||
3974 | 3969 | "RTN","ZCD",41,0) | ||
3975 | 3970 | ; FIXME: this routine currently requires GT.M V5.3003 because it uses | ||
3976 | 3971 | "RTN","ZCD",42,0) | ||
3977 | 3972 | ; PIPE I/O. We many want to make it compatible with older | ||
3978 | 3973 | "RTN","ZCD",43,0) | ||
3979 | 3974 | ; versions of GT.M by falling back to using temporary files, | ||
3980 | 3975 | "RTN","ZCD",44,0) | ||
3981 | 3976 | ; but on versions of GT.M V5.3003 and later, we definitely want | ||
3982 | 3977 | "RTN","ZCD",45,0) | ||
3983 | 3978 | ; to use PIPEs to avoid temporary files moving forward. | ||
3984 | 3979 | "RTN","ZCD",46,0) | ||
3985 | 3980 | N P,I,X | ||
3986 | 3981 | "RTN","ZCD",47,0) | ||
3987 | 3982 | S P="ls" | ||
3988 | 3983 | "RTN","ZCD",48,0) | ||
3989 | 3984 | O P:(COMMAND="ls --color=none -1 "_$$ROOT():READONLY)::"PIPE" | ||
3990 | 3985 | "RTN","ZCD",49,0) | ||
3991 | 3986 | U P | ||
3992 | 3987 | "RTN","ZCD",50,0) | ||
3993 | 3988 | F I=1:1 R X Q:X="" S Y(I)=X,Y("B",X)="" | ||
3994 | 3989 | "RTN","ZCD",51,0) | ||
3995 | 3990 | U $P | ||
3996 | 3991 | "RTN","ZCD",52,0) | ||
3997 | 3992 | C P | ||
3998 | 3993 | "RTN","ZCD",53,0) | ||
3999 | 3994 | Q | ||
4000 | 3995 | "RTN","ZCD",54,0) | ||
4001 | 3996 | ; | ||
4002 | 3997 | "RTN","ZCD",55,0) | ||
4003 | 3998 | GTMPATH(INSTANCE) | ||
4004 | 3999 | "RTN","ZCD",56,0) | ||
4005 | 4000 | ; return the path to the version of GT.M this instance uses | ||
4006 | 4001 | "RTN","ZCD",57,0) | ||
4007 | 4002 | ; | ||
4008 | 4003 | "RTN","ZCD",58,0) | ||
4009 | 4004 | ; FIXME: handle the case when INSTANCE is bogus | ||
4010 | 4005 | "RTN","ZCD",59,0) | ||
4011 | 4006 | ; | ||
4012 | 4007 | "RTN","ZCD",60,0) | ||
4013 | 4008 | N P,X | ||
4014 | 4009 | "RTN","ZCD",61,0) | ||
4015 | 4010 | S P="readlink" | ||
4016 | 4011 | "RTN","ZCD",62,0) | ||
4017 | 4012 | O P:(COMMAND="readlink "_$$ROOT()_"/"_INSTANCE_"/gtm":READONLY)::"PIPE" | ||
4018 | 4013 | "RTN","ZCD",63,0) | ||
4019 | 4014 | U P | ||
4020 | 4015 | "RTN","ZCD",64,0) | ||
4021 | 4016 | R X | ||
4022 | 4017 | "RTN","ZCD",65,0) | ||
4023 | 4018 | U $P | ||
4024 | 4019 | "RTN","ZCD",66,0) | ||
4025 | 4020 | C P | ||
4026 | 4021 | "RTN","ZCD",67,0) | ||
4027 | 4022 | Q X | ||
4028 | 4023 | "RTN","ZCD",68,0) | ||
4029 | 4024 | ; | ||
4030 | 4025 | "RTN","ZCD",69,0) | ||
4031 | 4026 | SWITCH(INSTANCE) | ||
4032 | 4027 | "RTN","ZCD",70,0) | ||
4033 | 4028 | ; switch to another OpenVista instance by setting $ZG and $ZRO | ||
4034 | 4029 | "RTN","ZCD",71,0) | ||
4035 | 4030 | ; | ||
4036 | 4031 | "RTN","ZCD",72,0) | ||
4037 | 4032 | ; there are several ways to do this; try them in order until | ||
4038 | 4033 | "RTN","ZCD",73,0) | ||
4039 | 4034 | ; one succeeds | ||
4040 | 4035 | "RTN","ZCD",74,0) | ||
4041 | 4036 | ; | ||
4042 | 4037 | "RTN","ZCD",75,0) | ||
4043 | 4038 | ; FIXME: we may want to allow this entry point to be called using DO | ||
4044 | 4039 | "RTN","ZCD",76,0) | ||
4045 | 4040 | Q:$$SWITCH1(INSTANCE) 1 | ||
4046 | 4041 | "RTN","ZCD",77,0) | ||
4047 | 4042 | Q:$$SWITCH2(INSTANCE) 1 | ||
4048 | 4043 | "RTN","ZCD",78,0) | ||
4049 | 4044 | Q:$$SWITCH3(INSTANCE) 1 | ||
4050 | 4045 | "RTN","ZCD",79,0) | ||
4051 | 4046 | Q 0 | ||
4052 | 4047 | "RTN","ZCD",80,0) | ||
4053 | 4048 | ; | ||
4054 | 4049 | "RTN","ZCD",81,0) | ||
4055 | 4050 | SWITCH1(INSTANCE) | ||
4056 | 4051 | "RTN","ZCD",82,0) | ||
4057 | 4052 | ; private entry point | ||
4058 | 4053 | "RTN","ZCD",83,0) | ||
4059 | 4054 | ; | ||
4060 | 4055 | "RTN","ZCD",84,0) | ||
4061 | 4056 | ; look for new values of $ZG and $ZRO in env directory of | ||
4062 | 4057 | "RTN","ZCD",85,0) | ||
4063 | 4058 | ; target instance | ||
4064 | 4059 | "RTN","ZCD",86,0) | ||
4065 | 4060 | N ZG,ZRO,G,RO | ||
4066 | 4061 | "RTN","ZCD",87,0) | ||
4067 | 4062 | ; | ||
4068 | 4063 | "RTN","ZCD",88,0) | ||
4069 | 4064 | ; FIXME: if file does not exist or is unreadable (permission | ||
4070 | 4065 | "RTN","ZCD",89,0) | ||
4071 | 4066 | ; denied), Q 0 | ||
4072 | 4067 | "RTN","ZCD",90,0) | ||
4073 | 4068 | ;S G=$$ROOT()_"/"_INSTANCE_"/env/gtmgbldir" | ||
4074 | 4069 | "RTN","ZCD",91,0) | ||
4075 | 4070 | ;O G:READONLY U G R ZG U $P C G | ||
4076 | 4071 | "RTN","ZCD",92,0) | ||
4077 | 4072 | N I,A S A="/"_$$CURRENT()_"/",ZG="" | ||
4078 | 4073 | "RTN","ZCD",93,0) | ||
4079 | 4074 | F I=1:1:$L($ZG,A) S ZG=ZG_$P($ZG,A,I)_$S(I=$L($ZG,A):"",1:"/"_INSTANCE_"/") | ||
4080 | 4075 | "RTN","ZCD",94,0) | ||
4081 | 4076 | ; | ||
4082 | 4077 | "RTN","ZCD",95,0) | ||
4083 | 4078 | ; FIXME: if file does not exist or is unreadable (permission | ||
4084 | 4079 | "RTN","ZCD",96,0) | ||
4085 | 4080 | ; denied), Q 0 | ||
4086 | 4081 | "RTN","ZCD",97,0) | ||
4087 | 4082 | ;S RO=$$ROOT()_"/"_INSTANCE_"/env/gtmroutines" | ||
4088 | 4083 | "RTN","ZCD",98,0) | ||
4089 | 4084 | ;O RO:READONLY U RO R ZRO U $P C RO | ||
4090 | 4085 | "RTN","ZCD",99,0) | ||
4091 | 4086 | S ZRO="" | ||
4092 | 4087 | "RTN","ZCD",100,0) | ||
4093 | 4088 | F I=1:1:$L($ZRO,A) S ZRO=ZRO_$P($ZRO,A,I)_$S(I=$L($ZRO,A):"",1:"/"_INSTANCE_"/") | ||
4094 | 4089 | "RTN","ZCD",101,0) | ||
4095 | 4090 | ; | ||
4096 | 4091 | "RTN","ZCD",102,0) | ||
4097 | 4092 | S $ZG=ZG,$ZRO=ZRO | ||
4098 | 4093 | "RTN","ZCD",103,0) | ||
4099 | 4094 | ; | ||
4100 | 4095 | "RTN","ZCD",104,0) | ||
4101 | 4096 | ;zlink the buffer | ||
4102 | 4097 | "RTN","ZCD",105,0) | ||
4103 | 4098 | X "Q" | ||
4104 | 4099 | "RTN","ZCD",106,0) | ||
4105 | 4100 | N I | ||
4106 | 4101 | "RTN","ZCD",107,0) | ||
4107 | 4102 | S I=$view("rtnnext","") | ||
4108 | 4103 | "RTN","ZCD",108,0) | ||
4109 | 4104 | NEXT F S I=$VIEW("rtnnext",I) Q:I="" I I'="GTM$DMOD" D | ||
4110 | 4105 | "RTN","ZCD",109,0) | ||
4111 | 4106 | .I I="ZCD" Q | ||
4112 | 4107 | "RTN","ZCD",110,0) | ||
4113 | 4108 | .I $E(I)="%" Q:($E(I,2)'="Z") | ||
4114 | 4109 | "RTN","ZCD",111,0) | ||
4115 | 4110 | .K %ZR S A=$TR(I,"%","_") D SILENT^%RSEL(A) I $D(%ZR(A)) N $ET S $ET="G NEXT^ZCD" ZLINK A_".m" Q | ||
4116 | 4111 | "RTN","ZCD",112,0) | ||
4117 | 4112 | .N DIE,X,B S X=I,B(1,0)=I_" ;",B(2,0)=" ZMESSAGE 150374338:$PIECE($ZPOSITION,""^"",2)",B(3,0)=" QUIT" | ||
4118 | 4113 | "RTN","ZCD",113,0) | ||
4119 | 4114 | .S DIE="B(",XCN=0 N I D SAVE(X) | ||
4120 | 4115 | "RTN","ZCD",114,0) | ||
4121 | 4116 | ; FIXME: do we need to set $ZINTERRUPT and $PATH? | ||
4122 | 4117 | "RTN","ZCD",115,0) | ||
4123 | 4118 | Q 1 | ||
4124 | 4119 | "RTN","ZCD",116,0) | ||
4125 | 4120 | ; | ||
4126 | 4121 | "RTN","ZCD",117,0) | ||
4127 | 4122 | SWITCH2(INSTANCE) | ||
4128 | 4123 | "RTN","ZCD",118,0) | ||
4129 | 4124 | ; private entry point | ||
4130 | 4125 | "RTN","ZCD",119,0) | ||
4131 | 4126 | ; | ||
4132 | 4127 | "RTN","ZCD",120,0) | ||
4133 | 4128 | ; look for new values of $ZG and $ZRO in env file of target instance | ||
4134 | 4129 | "RTN","ZCD",121,0) | ||
4135 | 4130 | ; | ||
4136 | 4131 | "RTN","ZCD",122,0) | ||
4137 | 4132 | ; if the env file does not exist or is unreadable (permission denied) | ||
4138 | 4133 | "RTN","ZCD",123,0) | ||
4139 | 4134 | ; or unparsable, Q 0 without setting $ZG and $ZRO | ||
4140 | 4135 | "RTN","ZCD",124,0) | ||
4141 | 4136 | ; | ||
4142 | 4137 | "RTN","ZCD",125,0) | ||
4143 | 4138 | ; FIXME: implement this | ||
4144 | 4139 | "RTN","ZCD",126,0) | ||
4145 | 4140 | ; | ||
4146 | 4141 | "RTN","ZCD",127,0) | ||
4147 | 4142 | ; FIXME: do we need to set $ZINTERRUPT and $PATH? | ||
4148 | 4143 | "RTN","ZCD",128,0) | ||
4149 | 4144 | Q 0 | ||
4150 | 4145 | "RTN","ZCD",129,0) | ||
4151 | 4146 | ; | ||
4152 | 4147 | "RTN","ZCD",130,0) | ||
4153 | 4148 | SWITCH3(INSTANCE) | ||
4154 | 4149 | "RTN","ZCD",131,0) | ||
4155 | 4150 | ; private entry point | ||
4156 | 4151 | "RTN","ZCD",132,0) | ||
4157 | 4152 | ; | ||
4158 | 4153 | "RTN","ZCD",133,0) | ||
4159 | 4154 | ; get new values of $ZG and $ZRO by replacing $$PATH() with | ||
4160 | 4155 | "RTN","ZCD",134,0) | ||
4161 | 4156 | ; $$ROOT()_"/"_INSTANCE. Q 0 without setting $ZG and $ZRO if the | ||
4162 | 4157 | "RTN","ZCD",135,0) | ||
4163 | 4158 | ; resulting paths don't actually exist or we do not have permission to | ||
4164 | 4159 | "RTN","ZCD",136,0) | ||
4165 | 4160 | ; access them | ||
4166 | 4161 | "RTN","ZCD",137,0) | ||
4167 | 4162 | ; | ||
4168 | 4163 | "RTN","ZCD",138,0) | ||
4169 | 4164 | ; FIXME: implement this | ||
4170 | 4165 | "RTN","ZCD",139,0) | ||
4171 | 4166 | ; | ||
4172 | 4167 | "RTN","ZCD",140,0) | ||
4173 | 4168 | ; FIXME: do we need to set $ZINTERRUPT and $PATH? | ||
4174 | 4169 | "RTN","ZCD",141,0) | ||
4175 | 4170 | Q 0 | ||
4176 | 4171 | "RTN","ZCD",142,0) | ||
4177 | 4172 | ; | ||
4178 | 4173 | "RTN","ZCD",143,0) | ||
4179 | 4174 | CD ;Interactive | ||
4180 | 4175 | "RTN","ZCD",144,0) | ||
4181 | 4176 | N Y,DIR | ||
4182 | 4177 | "RTN","ZCD",145,0) | ||
4183 | 4178 | R !,"Namespace: ",DIR | ||
4184 | 4179 | "RTN","ZCD",146,0) | ||
4185 | 4180 | I DIR["^"!(DIR="") Q | ||
4186 | 4181 | "RTN","ZCD",147,0) | ||
4187 | 4182 | D LIST() | ||
4188 | 4183 | "RTN","ZCD",148,0) | ||
4189 | 4184 | I DIR["?" G HELP | ||
4190 | 4185 | "RTN","ZCD",149,0) | ||
4191 | 4186 | I '$D(Y("B",DIR)) W !,"Invalid Namespace" G CD | ||
4192 | 4187 | "RTN","ZCD",150,0) | ||
4193 | 4188 | I $$GTMPATH($$CURRENT())'=$$GTMPATH(DIR) W !,"Inconsistent GTM versions",! G CD | ||
4194 | 4189 | "RTN","ZCD",151,0) | ||
4195 | 4190 | S A=$$SWITCH1(DIR) | ||
4196 | 4191 | "RTN","ZCD",152,0) | ||
4197 | 4192 | S $ZPROMPT=DIR_">" | ||
4198 | 4193 | "RTN","ZCD",153,0) | ||
4199 | 4194 | Q | ||
4200 | 4195 | "RTN","ZCD",154,0) | ||
4201 | 4196 | HELP N A S A="" | ||
4202 | 4197 | "RTN","ZCD",155,0) | ||
4203 | 4198 | F S A=$O(Y("B",A)) Q:A="" W !,A | ||
4204 | 4199 | "RTN","ZCD",156,0) | ||
4205 | 4200 | W ! G CD | ||
4206 | 4201 | "RTN","ZCD",157,0) | ||
4207 | 4202 | Q | ||
4208 | 4203 | "RTN","ZCD",158,0) | ||
4209 | 4204 | SAVE(RN) ;Save a routine | ||
4210 | 4205 | "RTN","ZCD",159,0) | ||
4211 | 4206 | N %,%F,%I,%N,SP,$ETRAP | ||
4212 | 4207 | "RTN","ZCD",160,0) | ||
4213 | 4208 | S $ETRAP="S $ECODE="""" Q" | ||
4214 | 4209 | "RTN","ZCD",161,0) | ||
4215 | 4210 | S %I=$I,SP=" ",%F="/tmp/"_$J_"/"_RN_".m" | ||
4216 | 4211 | "RTN","ZCD",162,0) | ||
4217 | 4212 | ZSYSTEM "mkdir /tmp/"_$J | ||
4218 | 4213 | "RTN","ZCD",163,0) | ||
4219 | 4214 | O %F:(newversion:noreadonly:blocksize=2048:recordsize=2044) U %F | ||
4220 | 4215 | "RTN","ZCD",164,0) | ||
4221 | 4216 | F S XCN=$O(@(DIE_XCN_")")) Q:XCN'>0 S %=@(DIE_XCN_",0)") Q:$E(%,1)="$" I $E(%)'=";" W $P(%,SP)_$C(9)_$P(%,SP,2,99999),! | ||
4222 | 4217 | "RTN","ZCD",165,0) | ||
4223 | 4218 | C %F ;S %N=$$NULL | ||
4224 | 4219 | "RTN","ZCD",166,0) | ||
4225 | 4220 | S ZR=$ZRO,$ZRO=$ZRO_" /tmp/"_$J_"/" | ||
4226 | 4221 | "RTN","ZCD",167,0) | ||
4227 | 4222 | ZLINK RN | ||
4228 | 4223 | "RTN","ZCD",168,0) | ||
4229 | 4224 | ZSYSTEM "rm -r /tmp/"_$J | ||
4230 | 4225 | "RTN","ZCD",169,0) | ||
4231 | 4226 | S $ZRO=ZR | ||
4232 | 4227 | "RTN","ZCD",170,0) | ||
4233 | 4228 | ;C %N | ||
4234 | 4229 | "RTN","ZCD",171,0) | ||
4235 | 4230 | U %I | ||
4236 | 4231 | "RTN","ZCD",172,0) | ||
4237 | 4232 | Q | ||
4238 | 4233 | "RTN","ZIS4GTM") | ||
4239 | 4234 | 0^5^B18414491 | ||
4240 | 4235 | "RTN","ZIS4GTM",1,0) | ||
4241 | 4236 | %ZIS4 ;SFISC/AC,RWF,MVB - DEVICE HANDLER SPECIFIC CODE (GT.M 4.3 for Unix/VMS) ;29 Jan 2003 2:59 pm | ||
4242 | 4237 | "RTN","ZIS4GTM",2,0) | ||
4243 | 4238 | ;;8.0;KERNEL;**275**;Jul 10, 1995; | ||
4244 | 4239 | "RTN","ZIS4GTM",3,0) | ||
4245 | 4240 | ; | ||
4246 | 4241 | "RTN","ZIS4GTM",4,0) | ||
4247 | 4242 | OPEN G OPN2:$D(IO(1,IO)) | ||
4248 | 4243 | "RTN","ZIS4GTM",5,0) | ||
4249 | 4244 | S POP=0 D OP1 G NOPEN:'$D(IO(1,IO)) | ||
4250 | 4245 | "RTN","ZIS4GTM",6,0) | ||
4251 | 4246 | OPN2 I $D(%ZISHP),'$D(IOP) W !,*7," Routing to device "_$P(^%ZIS(1,%E,0),"^",1)_$S($D(^(1)):" "_$P(^(1),"^",1)_" ",1:"") | ||
4252 | 4247 | "RTN","ZIS4GTM",7,0) | ||
4253 | 4248 | Q | ||
4254 | 4249 | "RTN","ZIS4GTM",8,0) | ||
4255 | 4250 | NOPEN I %IS'["D",$D(%ZISHP)!(%ZISHG]"") S POP=1 Q | ||
4256 | 4251 | "RTN","ZIS4GTM",9,0) | ||
4257 | 4252 | I '$D(IOP) W *7," [BUSY]" W " ... RETRY" S %=2,U="^" D YN^%ZIS1 G OPEN:%=1 | ||
4258 | 4253 | "RTN","ZIS4GTM",10,0) | ||
4259 | 4254 | S POP=1 Q | ||
4260 | 4255 | "RTN","ZIS4GTM",11,0) | ||
4261 | 4256 | Q | ||
4262 | 4257 | "RTN","ZIS4GTM",12,0) | ||
4263 | 4258 | OP1 S X="OPNERR^%ZIS4",@^%ZOSF("TRAP"),$ZE="" | ||
4264 | 4259 | "RTN","ZIS4GTM",13,0) | ||
4265 | 4260 | L:$D(%ZISLOCK) +@%ZISLOCK:60 | ||
4266 | 4261 | "RTN","ZIS4GTM",14,0) | ||
4267 | 4262 | O IO::%ZISTO S:$T IO(1,IO)="" S:'$T POP=1 L:$D(%ZISLOCK) -@%ZISLOCK | ||
4268 | 4263 | "RTN","ZIS4GTM",15,0) | ||
4269 | 4264 | Q | ||
4270 | 4265 | "RTN","ZIS4GTM",16,0) | ||
4271 | 4266 | OPNERR S POP=1,IO("LASTERR")=$G(IO("ERROR")),IO("ERROR")=$$EC^%ZOSV,$EC="" Q | ||
4272 | 4267 | "RTN","ZIS4GTM",17,0) | ||
4273 | 4268 | ; | ||
4274 | 4269 | "RTN","ZIS4GTM",18,0) | ||
4275 | 4270 | O D:%IS["L" ZIO | ||
4276 | 4271 | "RTN","ZIS4GTM",19,0) | ||
4277 | 4272 | LCKGBL ;Lock Global | ||
4278 | 4273 | "RTN","ZIS4GTM",20,0) | ||
4279 | 4274 | I %ZTYPE="CHAN" N % S %=$G(^%ZIS(1,+%E,"GBL")) I $L(%) L @("+^"_%_":0") S:'$T POP=1 I POP W:'$D(IOP) !,?5,*7,"[DEVICE IS BUSY]" Q | ||
4280 | 4275 | "RTN","ZIS4GTM",21,0) | ||
4281 | 4276 | I $D(IO("S")),$D(^%ZIS(2,IO("S"),10)),^(10)]"" U IO(0) D X10^ZISX | ||
4282 | 4277 | "RTN","ZIS4GTM",22,0) | ||
4283 | 4278 | OPAR I $D(IOP),%ZTYPE="HFS",$D(%IS("HFSIO")),$D(%IS("IOPAR")),%IS("HFSIO")]"" S IO=%IS("HFSIO"),%ZISOPAR=%IS("IOPAR") | ||
4284 | 4279 | "RTN","ZIS4GTM",23,0) | ||
4285 | 4280 | I %ZTYPE="CHAN",IO["::""TASK="!(IO["SYS$NET") D ODECNET Q:POP G OXECUTE^%ZIS6 | ||
4286 | 4281 | "RTN","ZIS4GTM",24,0) | ||
4287 | 4282 | S %A=%ZISOPAR_$S(%ZISOPAR["):":"",%ZTYPE["CHAN"&($P(%ZTIME,"^",3)="n"):"",1:":"_%ZISTO) | ||
4288 | 4283 | "RTN","ZIS4GTM",25,0) | ||
4289 | 4284 | N % S %(IO)="",%=$P($P($NA(%(IO)),"(",2),")") | ||
4290 | 4285 | "RTN","ZIS4GTM",26,0) | ||
4291 | 4286 | S %A=%_$E(":",%A]"")_%A | ||
4292 | 4287 | "RTN","ZIS4GTM",27,0) | ||
4293 | 4288 | D O1 I POP D Q | ||
4294 | 4289 | "RTN","ZIS4GTM",28,0) | ||
4295 | 4290 | .I %ZTYPE="HFS",'$D(IOP),$G(IO("ERROR"))["file not found" W !,?5,*7,"[File Not Found]" Q | ||
4296 | 4291 | "RTN","ZIS4GTM",29,0) | ||
4297 | 4292 | .W:'$D(IOP) !,?5,*7,"[DEVICE IS BUSY]" Q | ||
4298 | 4293 | "RTN","ZIS4GTM",30,0) | ||
4299 | 4294 | ;S IO(1,IO)="" U IO S:'(IO=IO(0)&'$D(IO("S"))&'$D(ZTQUEUED)) $X=0,$Y=0 I %ZTYPE["TRM" U IO:(WIDTH=+%Z91) | ||
4300 | 4295 | "RTN","ZIS4GTM",31,0) | ||
4301 | 4296 | U IO S $X=0,$Y=0 I %ZTYPE["TRM" U IO:(WIDTH=+%Z91) | ||
4302 | 4297 | "RTN","ZIS4GTM",32,0) | ||
4303 | 4298 | I %ZISUPAR]"" S %A1=""""_IO_""":"_%ZISUPAR U @%A1 | ||
4304 | 4299 | "RTN","ZIS4GTM",33,0) | ||
4305 | 4300 | ;U:%IS'[0 IO(0) | ||
4306 | 4301 | "RTN","ZIS4GTM",34,0) | ||
4307 | 4302 | G OXECUTE^%ZIS6:IO'["lpr" | ||
4308 | 4303 | "RTN","ZIS4GTM",35,0) | ||
4309 | 4304 | Q | ||
4310 | 4305 | "RTN","ZIS4GTM",36,0) | ||
4311 | 4306 | ; | ||
4312 | 4307 | "RTN","ZIS4GTM",37,0) | ||
4313 | 4308 | O1 ;N $ES,$ET S $ET="G OPNERR^%ZIS4" | ||
4314 | 4309 | "RTN","ZIS4GTM",38,0) | ||
4315 | 4310 | L:$D(%ZISLOCK) +@%ZISLOCK:60 | ||
4316 | 4311 | "RTN","ZIS4GTM",39,0) | ||
4317 | 4312 | I %A["lpr" S IO="lpr",%A="IO:(COMMAND="_$P(%A,":")_":WRITEONLY)::""PIPE""" | ||
4318 | 4313 | "RTN","ZIS4GTM",40,0) | ||
4319 | 4314 | O @%A S:'$T&(%A?.E1":".N) POP=1 S:'POP IO(1,IO)="" L:$D(%ZISLOCK) -@%ZISLOCK | ||
4320 | 4315 | "RTN","ZIS4GTM",41,0) | ||
4321 | 4316 | S IO("ERROR")="" Q | ||
4322 | 4317 | "RTN","ZIS4GTM",42,0) | ||
4323 | 4318 | ; | ||
4324 | 4319 | "RTN","ZIS4GTM",43,0) | ||
4325 | 4320 | ;Need to find out how to get IP address | ||
4326 | 4321 | "RTN","ZIS4GTM",44,0) | ||
4327 | 4322 | ZIO N %,%1 S (%,%1)=$ZIO | ||
4328 | 4323 | "RTN","ZIS4GTM",45,0) | ||
4329 | 4324 | I $ZV["VMS",%["_TNA" D | ||
4330 | 4325 | "RTN","ZIS4GTM",46,0) | ||
4331 | 4326 | . S (%,%1)=$ZGETDVI($I,"TT_ACCPORNAM") | ||
4332 | 4327 | "RTN","ZIS4GTM",47,0) | ||
4333 | 4328 | . S %=$S(%["Host:":$P($P(%,"Host: ",2)," ")_":"_$P(%,"Port: ",2),1:%) S:%[" " %=$TR(%," ") | ||
4334 | 4329 | "RTN","ZIS4GTM",48,0) | ||
4335 | 4330 | I $ZV'["VMS" D | ||
4336 | 4331 | "RTN","ZIS4GTM",49,0) | ||
4337 | 4332 | . S (%,%1)=$ZTRNLNM("REMOTEHOST") S:$L(%) %1="Host:"_% S:'$L(%) %=$ZIO | ||
4338 | 4333 | "RTN","ZIS4GTM",50,0) | ||
4339 | 4334 | S IO("ZIO")=% S:(%1["Host:")&'$D(IO("IP")) IO("IP")=$P(%,":") | ||
4340 | 4335 | "RTN","ZIS4GTM",51,0) | ||
4341 | 4336 | Q | ||
4342 | 4337 | "RTN","ZIS4GTM",52,0) | ||
4343 | 4338 | ; | ||
4344 | 4339 | "RTN","ZIS4GTM",53,0) | ||
4345 | 4340 | ODECNET Q ; fill me in later | ||
4346 | 4341 | "RTN","ZIS4GTM",54,0) | ||
4347 | 4342 | SPOOL ;%ZDA=pointer to ^XMB(3.51, %ZFN=spool file name. | ||
4348 | 4343 | "RTN","ZIS4GTM",55,0) | ||
4349 | 4344 | I $D(ZISDA) W:'$D(IOP) !?5,*7,"You may not Spool the printing of a Spool document" G N | ||
4350 | 4345 | "RTN","ZIS4GTM",56,0) | ||
4351 | 4346 | I $D(DUZ)[0 W:'$D(IOP) !,"Must be a valid user." G N | ||
4352 | 4347 | "RTN","ZIS4GTM",57,0) | ||
4353 | 4348 | R S %ZY=-1 D NEWDOC^ZISPL1 G N:%ZY'>0 S %ZDA=+%ZY,%ZFN=$P(%ZY(0),U,2),IO("DOC")=$P(%ZY(0),U,1) G OK:$D(IO("Q")) | ||
4354 | 4349 | "RTN","ZIS4GTM",58,0) | ||
4355 | 4350 | G:'%ZISB OK I '$P(%ZY,"^",3),%ZFN]"" D SPL3 G N:%ZFN']"",DOC | ||
4356 | 4351 | "RTN","ZIS4GTM",59,0) | ||
4357 | 4352 | S %ZFN=IO_"SPOOL_no_"_%ZDA_".TMP" D SPL2 G:%ZFN']"" N S $P(^XMB(3.51,%ZDA,0),U,2)=%ZFN,^XMB(3.51,"C",%ZFN,%ZDA)="" | ||
4358 | 4353 | "RTN","ZIS4GTM",60,0) | ||
4359 | 4354 | DOC S IO=%ZFN,IO("SPOOL")=%ZDA,^XUTL("XQ",$J,"SPOOL")=%ZDA,IOF="#" | ||
4360 | 4355 | "RTN","ZIS4GTM",61,0) | ||
4361 | 4356 | I $D(^%ZIS(1,%ZISIOS,1)),$P(^(1),"^",8),$O(^("SPL",0)) S ^XUTL("XQ",$J,"ADSPL")=%ZISIOS,ZISPLAD=%ZISIOS | ||
4362 | 4357 | "RTN","ZIS4GTM",62,0) | ||
4363 | 4358 | OK K %ZDA,%ZFN Q | ||
4364 | 4359 | "RTN","ZIS4GTM",63,0) | ||
4365 | 4360 | N K %ZDA,%ZFN,IO("DOC") S POP=1 Q | ||
4366 | 4361 | "RTN","ZIS4GTM",64,0) | ||
4367 | 4362 | SPL2 O %ZFN:(NEWVERSION:WORLD=RWD) G:$ZA<0 SPL4 S IO(1,%ZFN)="" Q | ||
4368 | 4363 | "RTN","ZIS4GTM",65,0) | ||
4369 | 4364 | SPL3 N X S X="SPL4^%ZIS4",@^%ZOSF("TRAP") | ||
4370 | 4365 | "RTN","ZIS4GTM",66,0) | ||
4371 | 4366 | O %ZFN:READONLY:1 S:'$T ZISPLQ=1 G:$ZA<0!('$T) SPL4 S IO(1,%ZFN)="" Q | ||
4372 | 4367 | "RTN","ZIS4GTM",67,0) | ||
4373 | 4368 | SPL4 W:'$D(IOP)&'$D(ZTQUEUED) !?5,*7,"Couldn't open the spool file." S %ZFN="" Q | ||
4374 | 4369 | "RTN","ZIS4GTM",68,0) | ||
4375 | 4370 | CLOSE N %Z1 C:IO]"" IO K:IO]"" IO(1,IO) D FILE^ZISPL1 I %ZDA'>0 K ZISPLAD Q | ||
4376 | 4371 | "RTN","ZIS4GTM",69,0) | ||
4377 | 4372 | S %ZFN=$P(%ZS,"^",2) D SPL3 Q:%ZFN']"" U %ZFN S %ZCR=$C(13),%Y="",X="SPLEOF^%ZIS4",@^%ZOSF("TRAP") | ||
4378 | 4373 | "RTN","ZIS4GTM",70,0) | ||
4379 | 4374 | S %Z1=+$G(^XTV(8989.3,1,"SPL")) | ||
4380 | 4375 | "RTN","ZIS4GTM",71,0) | ||
4381 | 4376 | F %=0:0 R %X#255:5 Q:$ZA<0 S %2=%X D CL2 G:%Z1<% SPLEX | ||
4382 | 4377 | "RTN","ZIS4GTM",72,0) | ||
4383 | 4378 | SPLEOF I $ZE'["ENDO" Q ;Send error up | ||
4384 | 4379 | "RTN","ZIS4GTM",73,0) | ||
4385 | 4380 | SPLEX C %ZFN:(DELETE) K:%ZFN]"" IO(1,%ZFN) D CLOSE^ZISPL1 K %Y,%X,%1,%ZFN Q | ||
4386 | 4381 | "RTN","ZIS4GTM",74,0) | ||
4387 | 4382 | ; | ||
4388 | 4383 | "RTN","ZIS4GTM",75,0) | ||
4389 | 4384 | CL2 S %=%+1 I %Z1<% S ^XMBS(3.519,XS,2,%,0)="*** INCOMPLETE REPORT -- SPOOL DOCUMENT LINE LIMIT EXCEEDED ***",$P(^XMB(3.51,%ZDA,0),"^",11)=1 Q | ||
4390 | 4385 | "RTN","ZIS4GTM",76,0) | ||
4391 | 4386 | I %2[$C(12) S ^XMBS(3.519,XS,2,%,0)="|TOP|" Q | ||
4392 | 4387 | "RTN","ZIS4GTM",77,0) | ||
4393 | 4388 | S ^XMBS(3.519,XS,2,%,0)=%2 Q | ||
4394 | 4389 | "RTN","ZIS4GTM",78,0) | ||
4395 | 4390 | ; | ||
4396 | 4391 | "RTN","ZIS4GTM",79,0) | ||
4397 | 4392 | HFS G HFS^%ZISF | ||
4398 | 4393 | "RTN","ZIS4GTM",80,0) | ||
4399 | 4394 | REWMT(IO,IOPAR) ;Rewind Magtape | ||
4400 | 4395 | "RTN","ZIS4GTM",81,0) | ||
4401 | 4396 | S X="REWERR^%ZIS4",@^%ZOSF("TRAP") | ||
4402 | 4397 | "RTN","ZIS4GTM",82,0) | ||
4403 | 4398 | U IO W *5 | ||
4404 | 4399 | "RTN","ZIS4GTM",83,0) | ||
4405 | 4400 | Q 1 | ||
4406 | 4401 | "RTN","ZIS4GTM",84,0) | ||
4407 | 4402 | REWSDP(IO,IOPAR) ;Rewind SDP | ||
4408 | 4403 | "RTN","ZIS4GTM",85,0) | ||
4409 | 4404 | G REW1 | ||
4410 | 4405 | "RTN","ZIS4GTM",86,0) | ||
4411 | 4406 | REWHFS(IO,IOPAR) ;Rewind Host File. | ||
4412 | 4407 | "RTN","ZIS4GTM",87,0) | ||
4413 | 4408 | REW1 S X="REWERR^%ZIS4",@^%ZOSF("TRAP") | ||
4414 | 4409 | "RTN","ZIS4GTM",88,0) | ||
4415 | 4410 | U IO:(REWIND) | ||
4416 | 4411 | "RTN","ZIS4GTM",89,0) | ||
4417 | 4412 | Q 1 | ||
4418 | 4413 | "RTN","ZIS4GTM",90,0) | ||
4419 | 4414 | REWERR ;Error encountered | ||
4420 | 4415 | "RTN","ZIS4GTM",91,0) | ||
4421 | 4416 | Q 0 | ||
4422 | 4417 | "RTN","ZISHGUX") | ||
4423 | 4418 | 0^15^B37875330 | ||
4424 | 4419 | "RTN","ZISHGUX",1,0) | ||
4425 | 4420 | %ZISH ;ISF/AC,RWF - GT.M for UNIX Host file Control ;01/04/2005 08:13 | ||
4426 | 4421 | "RTN","ZISHGUX",2,0) | ||
4427 | 4422 | ;;8.0;KERNEL;**275,306**;Jul 10, 1995; | ||
4428 | 4423 | "RTN","ZISHGUX",3,0) | ||
4429 | 4424 | ; for GT.M for Unix/VMS, version 4.3 | ||
4430 | 4425 | "RTN","ZISHGUX",4,0) | ||
4431 | 4426 | ; | ||
4432 | 4427 | "RTN","ZISHGUX",5,0) | ||
4433 | 4428 | OPENERR ; | ||
4434 | 4429 | "RTN","ZISHGUX",6,0) | ||
4435 | 4430 | Q 0 | ||
4436 | 4431 | "RTN","ZISHGUX",7,0) | ||
4437 | 4432 | ; | ||
4438 | 4433 | "RTN","ZISHGUX",8,0) | ||
4439 | 4434 | OPEN(X1,X2,X3,X4,X5,X6) ;SR. Open file | ||
4440 | 4435 | "RTN","ZISHGUX",9,0) | ||
4441 | 4436 | ;D OPEN^%ZISH([handlename],[directory],filename,[accessmode],[recsize]) | ||
4442 | 4437 | "RTN","ZISHGUX",10,0) | ||
4443 | 4438 | ;X1=handle name | ||
4444 | 4439 | "RTN","ZISHGUX",11,0) | ||
4445 | 4440 | ;X2=directory, X3=filename, X4=access mode | ||
4446 | 4441 | "RTN","ZISHGUX",12,0) | ||
4447 | 4442 | ;X5=new file max record size, X6=Subtype | ||
4448 | 4443 | "RTN","ZISHGUX",13,0) | ||
4449 | 4444 | ; | ||
4450 | 4445 | "RTN","ZISHGUX",14,0) | ||
4451 | 4446 | N %,%1,%2,%IO,%I2,%P,%T,X,Y,$ETRAP | ||
4452 | 4447 | "RTN","ZISHGUX",15,0) | ||
4453 | 4448 | S $ETRAP="D OPNERR^%ZISH" | ||
4454 | 4449 | "RTN","ZISHGUX",16,0) | ||
4455 | 4450 | S U="^",X2=$$DEFDIR($G(X2)),X4=$$UP^XLFSTR(X4) | ||
4456 | 4451 | "RTN","ZISHGUX",17,0) | ||
4457 | 4452 | S Y=$S(X4["A":"append",X4["R":"readonly",X4["W":"newversion",1:"readonly") | ||
4458 | 4453 | "RTN","ZISHGUX",18,0) | ||
4459 | 4454 | S Y=Y_$S(X4["B":":fixed:nowrap:recordsize=512",$G(X5)&(X4["W"):":WIDTH="_+X5,1:"") | ||
4460 | 4455 | "RTN","ZISHGUX",19,0) | ||
4461 | 4456 | S:$E(Y)=":" Y=$E(Y,2,999) S %IO=X2_X3,%I2="%IO:"_$S($L(Y):"("_Y_")",1:"")_":3" | ||
4462 | 4457 | "RTN","ZISHGUX",20,0) | ||
4463 | 4458 | O @%I2 S %T=$T | ||
4464 | 4459 | "RTN","ZISHGUX",21,0) | ||
4465 | 4460 | I '%T S POP=1 Q | ||
4466 | 4461 | "RTN","ZISHGUX",22,0) | ||
4467 | 4462 | S IO=%IO,IO(1,IO)="",IOT="HFS",POP=0 D SUBTYPE^%ZIS3($G(X6)) | ||
4468 | 4463 | "RTN","ZISHGUX",23,0) | ||
4469 | 4464 | I $G(X1)]"" D SAVDEV^%ZISUTL(X1) | ||
4470 | 4465 | "RTN","ZISHGUX",24,0) | ||
4471 | 4466 | U IO U $P ;Enable use of $ZA to test EOF condition. | ||
4472 | 4467 | "RTN","ZISHGUX",25,0) | ||
4473 | 4468 | Q | ||
4474 | 4469 | "RTN","ZISHGUX",26,0) | ||
4475 | 4470 | OPNERR ;error on open | ||
4476 | 4471 | "RTN","ZISHGUX",27,0) | ||
4477 | 4472 | S POP=1,$ECODE="" | ||
4478 | 4473 | "RTN","ZISHGUX",28,0) | ||
4479 | 4474 | U:$G(%P)]"" %P | ||
4480 | 4475 | "RTN","ZISHGUX",29,0) | ||
4481 | 4476 | Q | ||
4482 | 4477 | "RTN","ZISHGUX",30,0) | ||
4483 | 4478 | ; | ||
4484 | 4479 | "RTN","ZISHGUX",31,0) | ||
4485 | 4480 | CLOSE(X) ;SR. Close HFS device not opened by %ZIS. | ||
4486 | 4481 | "RTN","ZISHGUX",32,0) | ||
4487 | 4482 | ;X1=Handle name, IO=device | ||
4488 | 4483 | "RTN","ZISHGUX",33,0) | ||
4489 | 4484 | I IO]"" C IO K IO(1,IO) | ||
4490 | 4485 | "RTN","ZISHGUX",34,0) | ||
4491 | 4486 | I $G(X)]"" D RMDEV^%ZISUTL(X) | ||
4492 | 4487 | "RTN","ZISHGUX",35,0) | ||
4493 | 4488 | D HOME^%ZIS | ||
4494 | 4489 | "RTN","ZISHGUX",36,0) | ||
4495 | 4490 | Q | ||
4496 | 4491 | "RTN","ZISHGUX",37,0) | ||
4497 | 4492 | DEL(%ZX1,%ZX2) ;ef,SR. Del fl(s) | ||
4498 | 4493 | "RTN","ZISHGUX",38,0) | ||
4499 | 4494 | ;S Y=$$DEL^%ZISH("dir path",$NA(array)) | ||
4500 | 4495 | "RTN","ZISHGUX",39,0) | ||
4501 | 4496 | N %ZISH,%ZISHLGR,%ZX,X,%ZXDEL | ||
4502 | 4497 | "RTN","ZISHGUX",40,0) | ||
4503 | 4498 | S %ZX1=$$DEFDIR($G(%ZX1)),%ZXDEL=1,%ZISH="" | ||
4504 | 4499 | "RTN","ZISHGUX",41,0) | ||
4505 | 4500 | F S %ZISH=$O(@%ZX2@(%ZISH)) Q:%ZISH="" D | ||
4506 | 4501 | "RTN","ZISHGUX",42,0) | ||
4507 | 4502 | . N $ETRAP,$ESTACK S $ETRAP="D DELERR^%ZISH" | ||
4508 | 4503 | "RTN","ZISHGUX",43,0) | ||
4509 | 4504 | . I %ZISH["*" S %ZXDEL=0 Q ; Wild card not allowed. | ||
4510 | 4505 | "RTN","ZISHGUX",44,0) | ||
4511 | 4506 | . S %ZX=$ZSEARCH(%ZX1_%ZISH) | ||
4512 | 4507 | "RTN","ZISHGUX",45,0) | ||
4513 | 4508 | . Q:%ZX']"" ; File doesn't exist - not an error, just quit. | ||
4514 | 4509 | "RTN","ZISHGUX",46,0) | ||
4515 | 4510 | . O %ZX:READONLY:0 | ||
4516 | 4511 | "RTN","ZISHGUX",47,0) | ||
4517 | 4512 | . I '$T S %ZXDEL=0 Q ; Can't open it. | ||
4518 | 4513 | "RTN","ZISHGUX",48,0) | ||
4519 | 4514 | . C %ZX:DELETE | ||
4520 | 4515 | "RTN","ZISHGUX",49,0) | ||
4521 | 4516 | . I $ZSEARCH(%ZX)]"" S %ZXDEL=0 ; Delete was not successful. | ||
4522 | 4517 | "RTN","ZISHGUX",50,0) | ||
4523 | 4518 | Q %ZXDEL | ||
4524 | 4519 | "RTN","ZISHGUX",51,0) | ||
4525 | 4520 | DELERR ;Trap any $ETRAP error, unwind and return. | ||
4526 | 4521 | "RTN","ZISHGUX",52,0) | ||
4527 | 4522 | S $ETRAP="D UNWIND^%ZTER" | ||
4528 | 4523 | "RTN","ZISHGUX",53,0) | ||
4529 | 4524 | S %ZXDEL=0 | ||
4530 | 4525 | "RTN","ZISHGUX",54,0) | ||
4531 | 4526 | D UNWIND^%ZTER | ||
4532 | 4527 | "RTN","ZISHGUX",55,0) | ||
4533 | 4528 | Q | ||
4534 | 4529 | "RTN","ZISHGUX",56,0) | ||
4535 | 4530 | ; | ||
4536 | 4531 | "RTN","ZISHGUX",57,0) | ||
4537 | 4532 | LIST(DIR,LIST,RETURN) ;ef,SR. Set local array holding fl names | ||
4538 | 4533 | "RTN","ZISHGUX",58,0) | ||
4539 | 4534 | ;S Y=$$LIST^ZISH("/dir/","list_root","return_root") | ||
4540 | 4535 | "RTN","ZISHGUX",59,0) | ||
4541 | 4536 | ;list_root can have XX("A*"), XX("test.com")... | ||
4542 | 4537 | "RTN","ZISHGUX",60,0) | ||
4543 | 4538 | ;Both arrays passed as $NA values (closed roots). | ||
4544 | 4539 | "RTN","ZISHGUX",61,0) | ||
4545 | 4540 | ;N %IO,%X,%ZISH,%ZISH1,%ZISHIO,%ZX,POP,X,%ZISHDL1,%ZISHDL2,%ZISHDN1,%ZISHDN2 | ||
4546 | 4541 | "RTN","ZISHGUX",62,0) | ||
4547 | 4542 | ;N $ETRAP,$ESTACK S $ETRAP="G LSTEOF^%ZISH",%ZX1=$$DEFDIR($G(%ZX1)) | ||
4548 | 4543 | "RTN","ZISHGUX",63,0) | ||
4549 | 4544 | ;S %IO=$I,%ZISHDN1="_ZISH"_$J_".TMPA",%ZISHDN2="ZISH"_$J_".TMPB" | ||
4550 | 4545 | "RTN","ZISHGUX",64,0) | ||
4551 | 4546 | ;%ZISHDL1=%ZX1_%ZISHDN1,%ZISHDL2=%ZX1_%ZISHDN2 | ||
4552 | 4547 | "RTN","ZISHGUX",65,0) | ||
4553 | 4548 | ;S $ZT="G SPAWNERR^%ZISH" | ||
4554 | 4549 | "RTN","ZISHGUX",66,0) | ||
4555 | 4550 | ;Init %ZISHDL1, %ZISHDL2 by deleteing them | ||
4556 | 4551 | "RTN","ZISHGUX",67,0) | ||
4557 | 4552 | ;I $ZSEARCH(%ZISHDL1)["ZISH" ZSYSTEM "rm "_%ZISHDL1 | ||
4558 | 4553 | "RTN","ZISHGUX",68,0) | ||
4559 | 4554 | ;I $ZSEARCH(%ZISHDL2)["ZISH" ZSYSTEM "rm "_%ZISHDL2_";*" | ||
4560 | 4555 | "RTN","ZISHGUX",69,0) | ||
4561 | 4556 | ;Get fls, Build listing in %ZISHDL1 with ls | ||
4562 | 4557 | "RTN","ZISHGUX",70,0) | ||
4563 | 4558 | S %ZISH1=0,%ZISH="" | ||
4564 | 4559 | "RTN","ZISHGUX",71,0) | ||
4565 | 4560 | N WANT,GLOB,NAME S WANT="",DIR=$$DEFDIR($G(DIR)) F S WANT=$O(@LIST@(WANT)) Q:WANT="" D | ||
4566 | 4561 | "RTN","ZISHGUX",72,0) | ||
4567 | 4562 | . S GLOB=DIR_WANT,NAME="" | ||
4568 | 4563 | "RTN","ZISHGUX",73,0) | ||
4569 | 4564 | . F S NAME=$ZSEARCH(GLOB) Q:NAME="" S @RETURN@($P(NAME,DIR,2))="" | ||
4570 | 4565 | "RTN","ZISHGUX",74,0) | ||
4571 | 4566 | Q $Q(@RETURN)]"" | ||
4572 | 4567 | "RTN","ZISHGUX",75,0) | ||
4573 | 4568 | LSTEOF S $ZT="" | ||
4574 | 4569 | "RTN","ZISHGUX",76,0) | ||
4575 | 4570 | I $L(%IO) U:$D(IO(1,%IO)) IO | ||
4576 | 4571 | "RTN","ZISHGUX",77,0) | ||
4577 | 4572 | ;C %ZISHDL1 ;:DELETE | ||
4578 | 4573 | "RTN","ZISHGUX",78,0) | ||
4579 | 4574 | ;I $L($ZSEARCH(%ZISHDL2)) ZSYSTEM "DEL "_%ZISHDL2 | ||
4580 | 4575 | "RTN","ZISHGUX",79,0) | ||
4581 | 4576 | ;I $L($ZSEARCH(%ZISHDL1)) ZSYSTEM "DEL "_%ZISHDL1_";*" | ||
4582 | 4577 | "RTN","ZISHGUX",80,0) | ||
4583 | 4578 | S $ECODE="" | ||
4584 | 4579 | "RTN","ZISHGUX",81,0) | ||
4585 | 4580 | Q ($Q(@%ZX3)]"") | ||
4586 | 4581 | "RTN","ZISHGUX",82,0) | ||
4587 | 4582 | ; | ||
4588 | 4583 | "RTN","ZISHGUX",83,0) | ||
4589 | 4584 | LIST1(%ZX,%ZD) ;Get one part of the list | ||
4590 | 4585 | "RTN","ZISHGUX",84,0) | ||
4591 | 4586 | N $ET,$ES S $ET="D LSTERR^%ZISH" | ||
4592 | 4587 | "RTN","ZISHGUX",85,0) | ||
4593 | 4588 | ;ZSYSTEM "ls -1 "_%ZX_" > "_%ZISHDL1 | ||
4594 | 4589 | "RTN","ZISHGUX",86,0) | ||
4595 | 4590 | ;O %ZISHDL1:readonly:1 U %ZISHDL1 | ||
4596 | 4591 | "RTN","ZISHGUX",87,0) | ||
4597 | 4592 | ;F R %X:1 Q:$ZEOF S @%ZX3@(%X)="" | ||
4598 | 4593 | "RTN","ZISHGUX",88,0) | ||
4599 | 4594 | ;C %ZISHDL1:DELETE | ||
4600 | 4595 | "RTN","ZISHGUX",89,0) | ||
4601 | 4596 | N %ZY,%ZI,%ZJ | ||
4602 | 4597 | "RTN","ZISHGUX",90,0) | ||
4603 | 4598 | S %ZY=$ZSEARCH("*.X") ;Clear vector | ||
4604 | 4599 | "RTN","ZISHGUX",91,0) | ||
4605 | 4600 | S %ZY=$P(%ZX,"*") | ||
4606 | 4601 | "RTN","ZISHGUX",92,0) | ||
4607 | 4602 | F S %ZI=$ZSEARCH(%ZX) Q:'$L(%ZI)!(%ZI'[%ZY) S %ZJ=$P(%ZI,%ZD,2),@%ZX3@(%ZJ)="" | ||
4608 | 4603 | "RTN","ZISHGUX",93,0) | ||
4609 | 4604 | Q 1 | ||
4610 | 4605 | "RTN","ZISHGUX",94,0) | ||
4611 | 4606 | LSTERR ;Error in list | ||
4612 | 4607 | "RTN","ZISHGUX",95,0) | ||
4613 | 4608 | I $ZSEARCH(%ZISHDL2)["ZISH" ZSYSTEM "DEL "_%ZISHDL2_";*" | ||
4614 | 4609 | "RTN","ZISHGUX",96,0) | ||
4615 | 4610 | Q 0 | ||
4616 | 4611 | "RTN","ZISHGUX",97,0) | ||
4617 | 4612 | ; | ||
4618 | 4613 | "RTN","ZISHGUX",98,0) | ||
4619 | 4614 | SPAWNERR ;TRAP ERROR OF SPAWN | ||
4620 | 4615 | "RTN","ZISHGUX",99,0) | ||
4621 | 4616 | O %ZISHDL1:READONLY:1 I $T C %ZISHDL1:DELETE | ||
4622 | 4617 | "RTN","ZISHGUX",100,0) | ||
4623 | 4618 | S $ECODE="" | ||
4624 | 4619 | "RTN","ZISHGUX",101,0) | ||
4625 | 4620 | Q 0 | ||
4626 | 4621 | "RTN","ZISHGUX",102,0) | ||
4627 | 4622 | ; | ||
4628 | 4623 | "RTN","ZISHGUX",103,0) | ||
4629 | 4624 | MV(X1,X2,Y1,Y2) ;ef,SR. Rename a fl | ||
4630 | 4625 | "RTN","ZISHGUX",104,0) | ||
4631 | 4626 | ;S Y=$$MV^ZISH("/dir/","fl","/dir/","fl") | ||
4632 | 4627 | "RTN","ZISHGUX",105,0) | ||
4633 | 4628 | N X,Y,%ZISHDL1 | ||
4634 | 4629 | "RTN","ZISHGUX",106,0) | ||
4635 | 4630 | S %ZISHDL1="ZISH"_$J_".TMPA",X1=$$DEFDIR($G(X1)),Y1=$$DEFDIR($G(Y1)) | ||
4636 | 4631 | "RTN","ZISHGUX",107,0) | ||
4637 | 4632 | S $ZT="SPAWNERR^%ZISH" | ||
4638 | 4633 | "RTN","ZISHGUX",108,0) | ||
4639 | 4634 | ;Pbv or qit | ||
4640 | 4635 | "RTN","ZISHGUX",109,0) | ||
4641 | 4636 | I (X2="")!(Y2="") Q 0 | ||
4642 | 4637 | "RTN","ZISHGUX",110,0) | ||
4643 | 4638 | ZSYSTEM "mv "_X1_X2_" "_Y1_Y2 ;Use system command | ||
4644 | 4639 | "RTN","ZISHGUX",111,0) | ||
4645 | 4640 | S Y=$ZSEARCH(Y1_Y2) | ||
4646 | 4641 | "RTN","ZISHGUX",112,0) | ||
4647 | 4642 | Q $L(Y)>0 | ||
4648 | 4643 | "RTN","ZISHGUX",113,0) | ||
4649 | 4644 | ; | ||
4650 | 4645 | "RTN","ZISHGUX",114,0) | ||
4651 | 4646 | PWD() ;ef,SR. Print working directory | ||
4652 | 4647 | "RTN","ZISHGUX",115,0) | ||
4653 | 4648 | N Y | ||
4654 | 4649 | "RTN","ZISHGUX",116,0) | ||
4655 | 4650 | S Y=$$DEFDIR("") | ||
4656 | 4651 | "RTN","ZISHGUX",117,0) | ||
4657 | 4652 | S:Y="" Y=$ZDIR | ||
4658 | 4653 | "RTN","ZISHGUX",118,0) | ||
4659 | 4654 | Q Y | ||
4660 | 4655 | "RTN","ZISHGUX",119,0) | ||
4661 | 4656 | ; | ||
4662 | 4657 | "RTN","ZISHGUX",120,0) | ||
4663 | 4658 | DEFDIR(DF) ;ef. Default Dir and frmt | ||
4664 | 4659 | "RTN","ZISHGUX",121,0) | ||
4665 | 4660 | S DF=$G(DF) Q:DF="." "" ;Special way to get current dir. | ||
4666 | 4661 | "RTN","ZISHGUX",122,0) | ||
4667 | 4662 | S:DF="" DF=$G(^XTV(8989.3,1,"DEV")) | ||
4668 | 4663 | "RTN","ZISHGUX",123,0) | ||
4669 | 4664 | ;Check syntax, VMS needs : or [ ] | ||
4670 | 4665 | "RTN","ZISHGUX",124,0) | ||
4671 | 4666 | I ^%ZOSF("OS")["VMS" D Q DF ;***EXIT FOR VMS/GTM | ||
4672 | 4667 | "RTN","ZISHGUX",125,0) | ||
4673 | 4668 | . N P1,P2 | ||
4674 | 4669 | "RTN","ZISHGUX",126,0) | ||
4675 | 4670 | . I DF[":" S P1=$P(DF,":")_":",P2=$P(DF,":",2) | ||
4676 | 4671 | "RTN","ZISHGUX",127,0) | ||
4677 | 4672 | . E S P1="",P2=DF | ||
4678 | 4673 | "RTN","ZISHGUX",128,0) | ||
4679 | 4674 | . I P1="",P2["$" S DF=P2 Q ;Assume a logical | ||
4680 | 4675 | "RTN","ZISHGUX",129,0) | ||
4681 | 4676 | . I $L(P2) S:P2'["[" P2="["_P2 S:P2'["]" P2=P2_"]" | ||
4682 | 4677 | "RTN","ZISHGUX",130,0) | ||
4683 | 4678 | . S DF=P1_P2 | ||
4684 | 4679 | "RTN","ZISHGUX",131,0) | ||
4685 | 4680 | . Q | ||
4686 | 4681 | "RTN","ZISHGUX",132,0) | ||
4687 | 4682 | ; | ||
4688 | 4683 | "RTN","ZISHGUX",133,0) | ||
4689 | 4684 | ;Check syntax, Unix check leading & trailing "/" | ||
4690 | 4685 | "RTN","ZISHGUX",134,0) | ||
4691 | 4686 | I "./"'[$E(DF) S DF="/"_DF | ||
4692 | 4687 | "RTN","ZISHGUX",135,0) | ||
4693 | 4688 | I $E(DF,$L(DF))'="/" S DF=DF_"/" | ||
4694 | 4689 | "RTN","ZISHGUX",136,0) | ||
4695 | 4690 | Q DF | ||
4696 | 4691 | "RTN","ZISHGUX",137,0) | ||
4697 | 4692 | STATUS() ;ef,SR. Return EOF status | ||
4698 | 4693 | "RTN","ZISHGUX",138,0) | ||
4699 | 4694 | U $I | ||
4700 | 4695 | "RTN","ZISHGUX",139,0) | ||
4701 | 4696 | Q $ZEOF | ||
4702 | 4697 | "RTN","ZISHGUX",140,0) | ||
4703 | 4698 | ; | ||
4704 | 4699 | "RTN","ZISHGUX",141,0) | ||
4705 | 4700 | EOF(X) ;Eof flag, Pass in $ZA | ||
4706 | 4701 | "RTN","ZISHGUX",142,0) | ||
4707 | 4702 | Q X | ||
4708 | 4703 | "RTN","ZISHGUX",143,0) | ||
4709 | 4704 | QL(X) ;Qlfrs | ||
4710 | 4705 | "RTN","ZISHGUX",144,0) | ||
4711 | 4706 | Q:X="" | ||
4712 | 4707 | "RTN","ZISHGUX",145,0) | ||
4713 | 4708 | S:$E(X)'="-" X="-"_X | ||
4714 | 4709 | "RTN","ZISHGUX",146,0) | ||
4715 | 4710 | Q | ||
4716 | 4711 | "RTN","ZISHGUX",147,0) | ||
4717 | 4712 | FL(X) ;Fl len | ||
4718 | 4713 | "RTN","ZISHGUX",148,0) | ||
4719 | 4714 | N ZOSHP1,ZOSHP2 | ||
4720 | 4715 | "RTN","ZISHGUX",149,0) | ||
4721 | 4716 | S ZOSHP1=$P(X,"."),ZOSHP2=$P(X,".",2) | ||
4722 | 4717 | "RTN","ZISHGUX",150,0) | ||
4723 | 4718 | I $L(ZOSHP1)>14 S X=4 Q | ||
4724 | 4719 | "RTN","ZISHGUX",151,0) | ||
4725 | 4720 | I $L(ZOSHP2)>8 S X=4 Q | ||
4726 | 4721 | "RTN","ZISHGUX",152,0) | ||
4727 | 4722 | Q | ||
4728 | 4723 | "RTN","ZISHGUX",153,0) | ||
4729 | 4724 | ; | ||
4730 | 4725 | "RTN","ZISHGUX",154,0) | ||
4731 | 4726 | MAKEREF(HF,IX,OVF) ;Internal call to rebuild global ref. | ||
4732 | 4727 | "RTN","ZISHGUX",155,0) | ||
4733 | 4728 | ;Return %ZISHF,%ZISHO,%ZISHI,%ZISUB | ||
4734 | 4729 | "RTN","ZISHGUX",156,0) | ||
4735 | 4730 | N I,F,MX | ||
4736 | 4731 | "RTN","ZISHGUX",157,0) | ||
4737 | 4732 | S OVF=$G(OVF,"%ZISHOF") | ||
4738 | 4733 | "RTN","ZISHGUX",158,0) | ||
4739 | 4734 | S %ZISHI=$$QS^DDBRAP(HF,IX),MX=$$QL^DDBRAP(HF) ; | ||
4740 | 4735 | "RTN","ZISHGUX",159,0) | ||
4741 | 4736 | S F=$NA(@HF,IX-1) ;Get first part | ||
4742 | 4737 | "RTN","ZISHGUX",160,0) | ||
4743 | 4738 | I IX=1 S %ZISHF=F_"(%ZISHI" ;Build root, IX=1 | ||
4744 | 4739 | "RTN","ZISHGUX",161,0) | ||
4745 | 4740 | I IX>1 S %ZISHF=$E(F,1,$L(F)-1)_",%ZISHI" ;Build root | ||
4746 | 4741 | "RTN","ZISHGUX",162,0) | ||
4747 | 4742 | S %ZISHO=%ZISHF_","_OVF_",%OVFCNT)" ;Make overflow | ||
4748 | 4743 | "RTN","ZISHGUX",163,0) | ||
4749 | 4744 | F I=IX+1:1:MX S %ZISHF=%ZISHF_",%ZISUB("_I_")",%ZISUB(I)=$$QS^DDBRAP(HF,I) | ||
4750 | 4745 | "RTN","ZISHGUX",164,0) | ||
4751 | 4746 | S %ZISHF=%ZISHF_")" | ||
4752 | 4747 | "RTN","ZISHGUX",165,0) | ||
4753 | 4748 | Q | ||
4754 | 4749 | "RTN","ZISHGUX",166,0) | ||
4755 | 4750 | FTG(%ZX1,%ZX2,%ZX3,%ZX4,%ZX5) ;ef,SR. Unload contents of host file into global | ||
4756 | 4751 | "RTN","ZISHGUX",167,0) | ||
4757 | 4752 | ;p1=host file directory | ||
4758 | 4753 | "RTN","ZISHGUX",168,0) | ||
4759 | 4754 | ;p2=host file name | ||
4760 | 4755 | "RTN","ZISHGUX",169,0) | ||
4761 | 4756 | ;p3= $NAME REFERENCE INCLUDING STARTING SUBSCRIPT | ||
4762 | 4757 | "RTN","ZISHGUX",170,0) | ||
4763 | 4758 | ;p4=INCREMENT SUBSCRIPT | ||
4764 | 4759 | "RTN","ZISHGUX",171,0) | ||
4765 | 4760 | ;p5=Overflow subscript, defaults to "OVF" | ||
4766 | 4761 | "RTN","ZISHGUX",172,0) | ||
4767 | 4762 | N %ZA,%ZB,%ZC,%ZL,X,%OVFCNT,%CONT | ||
4768 | 4763 | "RTN","ZISHGUX",173,0) | ||
4769 | 4764 | N I,%ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHLGR,%ZISHOF,%ZISHOX,%ZISHS,%ZX,%ZISHY,POP,%ZISUB,%EXIT | ||
4770 | 4765 | "RTN","ZISHGUX",174,0) | ||
4771 | 4766 | S %ZX1=$$DEFDIR($G(%ZX1)),%ZISHOF=$G(%ZX5,"OVF") | ||
4772 | 4767 | "RTN","ZISHGUX",175,0) | ||
4773 | 4768 | D MAKEREF(%ZX3,%ZX4,"%ZISHOF") | ||
4774 | 4769 | "RTN","ZISHGUX",176,0) | ||
4775 | 4770 | D OPEN^%ZISH(,%ZX1,%ZX2,"R") | ||
4776 | 4771 | "RTN","ZISHGUX",177,0) | ||
4777 | 4772 | I POP Q 0 | ||
4778 | 4773 | "RTN","ZISHGUX",178,0) | ||
4779 | 4774 | N $ETRAP S %EXIT=0,$ETRAP="S %ZA=1,%EXIT=1,$ECODE="""" Q" | ||
4780 | 4775 | "RTN","ZISHGUX",179,0) | ||
4781 | 4776 | U IO F K %XX D READNXT(.%XX) Q:$$EOF(%ZA) D | ||
4782 | 4777 | "RTN","ZISHGUX",180,0) | ||
4783 | 4778 | . S @%ZISHF=%XX | ||
4784 | 4779 | "RTN","ZISHGUX",181,0) | ||
4785 | 4780 | . I $D(%XX)>2 F %OVFCNT=1:1 Q:'$D(%XX(%OVFCNT)) S @%ZISHO=%XX(%OVFCNT) | ||
4786 | 4781 | "RTN","ZISHGUX",182,0) | ||
4787 | 4782 | . S %ZISHI=%ZISHI+1 | ||
4788 | 4783 | "RTN","ZISHGUX",183,0) | ||
4789 | 4784 | . Q | ||
4790 | 4785 | "RTN","ZISHGUX",184,0) | ||
4791 | 4786 | D CLOSE() ;Normal exit | ||
4792 | 4787 | "RTN","ZISHGUX",185,0) | ||
4793 | 4788 | Q '%EXIT | ||
4794 | 4789 | "RTN","ZISHGUX",186,0) | ||
4795 | 4790 | ; | ||
4796 | 4791 | "RTN","ZISHGUX",187,0) | ||
4797 | 4792 | ERREOF D CLOSE() ;Got error Reading file | ||
4798 | 4793 | "RTN","ZISHGUX",188,0) | ||
4799 | 4794 | Q 0 | ||
4800 | 4795 | "RTN","ZISHGUX",189,0) | ||
4801 | 4796 | ; | ||
4802 | 4797 | "RTN","ZISHGUX",190,0) | ||
4803 | 4798 | READNXT(REC) ; | ||
4804 | 4799 | "RTN","ZISHGUX",191,0) | ||
4805 | 4800 | N T,I,X,% | ||
4806 | 4801 | "RTN","ZISHGUX",192,0) | ||
4807 | 4802 | U IO R X:2 S %ZA=$ZEOF,REC=$E(X,1,255) | ||
4808 | 4803 | "RTN","ZISHGUX",193,0) | ||
4809 | 4804 | Q:$L(X)<256 | ||
4810 | 4805 | "RTN","ZISHGUX",194,0) | ||
4811 | 4806 | S %=256 F I=1:1 Q:$L(X)<% S REC(I)=$E(X,%,%+254),%=%+255 | ||
4812 | 4807 | "RTN","ZISHGUX",195,0) | ||
4813 | 4808 | Q | ||
4814 | 4809 | "RTN","ZISHGUX",196,0) | ||
4815 | 4810 | GTF(%ZX1,%ZX2,%ZX3,%ZX4) ;ef,SR. Load contents of global to host file. | ||
4816 | 4811 | "RTN","ZISHGUX",197,0) | ||
4817 | 4812 | ;Previously name LOAD | ||
4818 | 4813 | "RTN","ZISHGUX",198,0) | ||
4819 | 4814 | ;p1=$NAME of global reference | ||
4820 | 4815 | "RTN","ZISHGUX",199,0) | ||
4821 | 4816 | ;p2=incrementing subscript | ||
4822 | 4817 | "RTN","ZISHGUX",200,0) | ||
4823 | 4818 | ;p3=host file directory | ||
4824 | 4819 | "RTN","ZISHGUX",201,0) | ||
4825 | 4820 | ;p4=host file name | ||
4826 | 4821 | "RTN","ZISHGUX",202,0) | ||
4827 | 4822 | N %ZISHY,%ZISHLGR,%ZISHOX | ||
4828 | 4823 | "RTN","ZISHGUX",203,0) | ||
4829 | 4824 | S %ZISHY=$$MGTF(%ZX1,%ZX2,$G(%ZX3),%ZX4,"W") | ||
4830 | 4825 | "RTN","ZISHGUX",204,0) | ||
4831 | 4826 | Q %ZISHY | ||
4832 | 4827 | "RTN","ZISHGUX",205,0) | ||
4833 | 4828 | ; | ||
4834 | 4829 | "RTN","ZISHGUX",206,0) | ||
4835 | 4830 | GATF(%ZX1,%ZX2,%ZX3,%ZX4) ;ef,SR. Append to host file. | ||
4836 | 4831 | "RTN","ZISHGUX",207,0) | ||
4837 | 4832 | ; | ||
4838 | 4833 | "RTN","ZISHGUX",208,0) | ||
4839 | 4834 | ;p1=$NAME of global reference | ||
4840 | 4835 | "RTN","ZISHGUX",209,0) | ||
4841 | 4836 | ;p2=incrementing subscript | ||
4842 | 4837 | "RTN","ZISHGUX",210,0) | ||
4843 | 4838 | ;p3=host file directory | ||
4844 | 4839 | "RTN","ZISHGUX",211,0) | ||
4845 | 4840 | ;p4=host file name | ||
4846 | 4841 | "RTN","ZISHGUX",212,0) | ||
4847 | 4842 | N %ZISHY | ||
4848 | 4843 | "RTN","ZISHGUX",213,0) | ||
4849 | 4844 | S %ZISHY=$$MGTF(%ZX1,%ZX2,$G(%ZX3),%ZX4,"A") | ||
4850 | 4845 | "RTN","ZISHGUX",214,0) | ||
4851 | 4846 | Q %ZISHY | ||
4852 | 4847 | "RTN","ZISHGUX",215,0) | ||
4853 | 4848 | ; | ||
4854 | 4849 | "RTN","ZISHGUX",216,0) | ||
4855 | 4850 | MGTF(%ZX1,%ZX2,%ZX3,%ZX4,%ZX5) ; | ||
4856 | 4851 | "RTN","ZISHGUX",217,0) | ||
4857 | 4852 | ;p1=$NAME of global reference | ||
4858 | 4853 | "RTN","ZISHGUX",218,0) | ||
4859 | 4854 | ;p2=incrementing subscript | ||
4860 | 4855 | "RTN","ZISHGUX",219,0) | ||
4861 | 4856 | ;p3=host file directory | ||
4862 | 4857 | "RTN","ZISHGUX",220,0) | ||
4863 | 4858 | ;p4=host file name | ||
4864 | 4859 | "RTN","ZISHGUX",221,0) | ||
4865 | 4860 | N %ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHLGR,%ZISHS,%ZISHOX,IO,%ZX,Y | ||
4866 | 4861 | "RTN","ZISHGUX",222,0) | ||
4867 | 4862 | D MAKEREF(%ZX1,%ZX2) | ||
4868 | 4863 | "RTN","ZISHGUX",223,0) | ||
4869 | 4864 | D OPEN^%ZISH(,%ZX3,%ZX4,%ZX5) ;Default dir set in open | ||
4870 | 4865 | "RTN","ZISHGUX",224,0) | ||
4871 | 4866 | I POP Q 0 | ||
4872 | 4867 | "RTN","ZISHGUX",225,0) | ||
4873 | 4868 | N X | ||
4874 | 4869 | "RTN","ZISHGUX",226,0) | ||
4875 | 4870 | N $ETRAP S $ETRAP="",X="ERREOF^%ZISH",@^%ZOSF("TRAP") | ||
4876 | 4871 | "RTN","ZISHGUX",227,0) | ||
4877 | 4872 | F Q:'($D(@%ZISHF)#2) S %ZX=@%ZISHF,%ZISHI=%ZISHI+1 U IO W %ZX,! | ||
4878 | 4873 | "RTN","ZISHGUX",228,0) | ||
4879 | 4874 | D CLOSE() ;Normal Exit | ||
4880 | 4875 | "RTN","ZISHGUX",229,0) | ||
4881 | 4876 | Q 1 | ||
4882 | 4877 | "RTN","ZISHGUX",230,0) | ||
4883 | 4878 | ; | ||
4884 | 4879 | "RTN","ZISTCPS") | ||
4885 | 4880 | 0^25^B18372148 | ||
4886 | 4881 | "RTN","ZISTCPS",1,0) | ||
4887 | 4882 | %ZISTCPS ;ISF/RWF MSC/JDA - DEVICE HANDLER TCP/IP SERVER CALLS ;06/20/2005 09:11 | ||
4888 | 4883 | "RTN","ZISTCPS",2,0) | ||
4889 | 4884 | ;;8.0;KERNEL;**78,118,127,225,275,388,JDA**;Jul 10, 1995 | ||
4890 | 4885 | "RTN","ZISTCPS",3,0) | ||
4891 | 4886 | Q | ||
4892 | 4887 | "RTN","ZISTCPS",4,0) | ||
4893 | 4888 | ; | ||
4894 | 4889 | "RTN","ZISTCPS",5,0) | ||
4895 | 4890 | CLOSE ;Close and reset | ||
4896 | 4891 | "RTN","ZISTCPS",6,0) | ||
4897 | 4892 | G CLOSE^%ZISTCP | ||
4898 | 4893 | "RTN","ZISTCPS",7,0) | ||
4899 | 4894 | Q | ||
4900 | 4895 | "RTN","ZISTCPS",8,0) | ||
4901 | 4896 | ; | ||
4902 | 4897 | "RTN","ZISTCPS",9,0) | ||
4903 | 4898 | ;In ZRULE, set ZISQUIT=1 to quit | ||
4904 | 4899 | "RTN","ZISTCPS",10,0) | ||
4905 | 4900 | LISTEN(SOCK,RTN,ZRULE) ;Listen on socket, start routine | ||
4906 | 4901 | "RTN","ZISTCPS",11,0) | ||
4907 | 4902 | N %A,ZISOS,X,NIO,EXIT | ||
4908 | 4903 | "RTN","ZISTCPS",12,0) | ||
4909 | 4904 | N $ES,$ET S $ETRAP="D OPNERR^%ZISTCPS" | ||
4910 | 4905 | "RTN","ZISTCPS",13,0) | ||
4911 | 4906 | S ZISOS=^%ZOSF("OS"),ZRULE=$G(ZRULE) | ||
4912 | 4907 | "RTN","ZISTCPS",14,0) | ||
4913 | 4908 | S POP=1 | ||
4914 | 4909 | "RTN","ZISTCPS",15,0) | ||
4915 | 4910 | D GETENV^%ZOSV S U="^",XUENV=Y,XQVOL=$P(Y,U,2) | ||
4916 | 4911 | "RTN","ZISTCPS",16,0) | ||
4917 | 4912 | S POP=1 D LONT:ZISOS["OpenM",LGTM:ZISOS["GT.M" | ||
4918 | 4913 | "RTN","ZISTCPS",17,0) | ||
4919 | 4914 | I 'POP C NIO ;Close port | ||
4920 | 4915 | "RTN","ZISTCPS",18,0) | ||
4921 | 4916 | Q | ||
4922 | 4917 | "RTN","ZISTCPS",19,0) | ||
4923 | 4918 | ; | ||
4924 | 4919 | "RTN","ZISTCPS",20,0) | ||
4925 | 4920 | ; | ||
4926 | 4921 | "RTN","ZISTCPS",21,0) | ||
4927 | 4922 | LONT ;Open port in Accept mode with standard terminators. | ||
4928 | 4923 | "RTN","ZISTCPS",22,0) | ||
4929 | 4924 | N %ZA,NEWCHAR | ||
4930 | 4925 | "RTN","ZISTCPS",23,0) | ||
4931 | 4926 | S NIO="|TCP|"_SOCK,EXIT=0 | ||
4932 | 4927 | "RTN","ZISTCPS",24,0) | ||
4933 | 4928 | ;(adr:sock:term:ibuf:obuf:queue) | ||
4934 | 4929 | "RTN","ZISTCPS",25,0) | ||
4935 | 4930 | O NIO:(:SOCK:"AT"::512:512:10):30 Q:'$T S POP=0 U NIO | ||
4936 | 4931 | "RTN","ZISTCPS",26,0) | ||
4937 | 4932 | ;Wait on read for a connect | ||
4938 | 4933 | "RTN","ZISTCPS",27,0) | ||
4939 | 4934 | LONT2 F U NIO R *NEWCHAR:30 S EXIT=$$EXIT Q:$T!EXIT | ||
4940 | 4935 | "RTN","ZISTCPS",28,0) | ||
4941 | 4936 | I EXIT C NIO Q | ||
4942 | 4937 | "RTN","ZISTCPS",29,0) | ||
4943 | 4938 | ;JOB params (:Concurrent Server bit:principal input:principal output) | ||
4944 | 4939 | "RTN","ZISTCPS",30,0) | ||
4945 | 4940 | J CHILDONT^%ZISTCPS(NIO,RTN):(:16::):10 S %ZA=$ZA | ||
4946 | 4941 | "RTN","ZISTCPS",31,0) | ||
4947 | 4942 | I %ZA\8196#2=1 W *-2 ;Job failed to clear bit | ||
4948 | 4943 | "RTN","ZISTCPS",32,0) | ||
4949 | 4944 | G LONT2 | ||
4950 | 4945 | "RTN","ZISTCPS",33,0) | ||
4951 | 4946 | ; | ||
4952 | 4947 | "RTN","ZISTCPS",34,0) | ||
4953 | 4948 | CHILDONT(IO,RTN) ;Child process for OpenM | ||
4954 | 4949 | "RTN","ZISTCPS",35,0) | ||
4955 | 4950 | S $ETRAP="D ^%ZTER L HALT",IO=$ZU(53) | ||
4956 | 4951 | "RTN","ZISTCPS",36,0) | ||
4957 | 4952 | U IO:(::"-M") ;Work like DSM | ||
4958 | 4953 | "RTN","ZISTCPS",37,0) | ||
4959 | 4954 | S NEWJOB=$$NEWOK | ||
4960 | 4955 | "RTN","ZISTCPS",38,0) | ||
4961 | 4956 | I 'NEWJOB W "421 Service temporarily down.",$C(13,10),! | ||
4962 | 4957 | "RTN","ZISTCPS",39,0) | ||
4963 | 4958 | I NEWJOB K NEWJOB D VAR,@RTN | ||
4964 | 4959 | "RTN","ZISTCPS",40,0) | ||
4965 | 4960 | HALT | ||
4966 | 4961 | "RTN","ZISTCPS",41,0) | ||
4967 | 4962 | ; | ||
4968 | 4963 | "RTN","ZISTCPS",42,0) | ||
4969 | 4964 | VAR ;Setup IO variables | ||
4970 | 4965 | "RTN","ZISTCPS",43,0) | ||
4971 | 4966 | S IO(0)=IO,IO(1,IO)="",POP=0 | ||
4972 | 4967 | "RTN","ZISTCPS",44,0) | ||
4973 | 4968 | S IOT="TCP",IOST="P-TCP",IOST(0)=0 | ||
4974 | 4969 | "RTN","ZISTCPS",45,0) | ||
4975 | 4970 | S IOF=$$FLUSHCHR^%ZISTCP | ||
4976 | 4971 | "RTN","ZISTCPS",46,0) | ||
4977 | 4972 | S ^XUTL("XQ",$J,0)=$$DT^XLFDT | ||
4978 | 4973 | "RTN","ZISTCPS",47,0) | ||
4979 | 4974 | Q | ||
4980 | 4975 | "RTN","ZISTCPS",48,0) | ||
4981 | 4976 | NEWOK() ;Is it OK to start a new process | ||
4982 | 4977 | "RTN","ZISTCPS",49,0) | ||
4983 | 4978 | I $G(^%ZIS(14.5,"LOGON",^%ZOSF("VOL"))) Q 0 | ||
4984 | 4979 | "RTN","ZISTCPS",50,0) | ||
4985 | 4980 | I $$AVJ^%ZOSV()<3 Q 0 | ||
4986 | 4981 | "RTN","ZISTCPS",51,0) | ||
4987 | 4982 | Q 1 | ||
4988 | 4983 | "RTN","ZISTCPS",52,0) | ||
4989 | 4984 | OPNERR ; | ||
4990 | 4985 | "RTN","ZISTCPS",53,0) | ||
4991 | 4986 | S POP=1,EXIT=1,IO("ERROR")=$ECODE,$ECODE="" | ||
4992 | 4987 | "RTN","ZISTCPS",54,0) | ||
4993 | 4988 | Q | ||
4994 | 4989 | "RTN","ZISTCPS",55,0) | ||
4995 | 4990 | EXIT() ;See if time to exit | ||
4996 | 4991 | "RTN","ZISTCPS",56,0) | ||
4997 | 4992 | I $$S^%ZTLOAD Q 1 | ||
4998 | 4993 | "RTN","ZISTCPS",57,0) | ||
4999 | 4994 | N ZISQUIT S ZISQUIT=0 | ||
5000 | 4995 | "RTN","ZISTCPS",58,0) |
The diff has been truncated for viewing.