Merge lp:~joel-sher/openvista-gtm-integration/kidsbuild into lp:openvista-gtm-integration

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

Subscribers

People subscribed via source and target branches