Merge lp:~jontai/openvista-gtm-integration/artf9455 into lp:openvista-gtm-integration

Proposed by Jon Tai
Status: Merged
Merged at revision: not available
Proposed branch: lp:~jontai/openvista-gtm-integration/artf9455
Merge into: lp:openvista-gtm-integration
Diff against target: 12680 lines (+12660/-1)
2 files modified
kids/MSC_GTM_INTEG_10.KID (+12658/-0)
mumps/HLCSTCP.m (+2/-1)
To merge this branch: bzr merge lp:~jontai/openvista-gtm-integration/artf9455
Reviewer Review Type Date Requested Status
jeff.apple Approve
Review via email: mp+15253@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jon Tai (jontai) wrote :

This is a merge of an internal OpenVista Server bug.

Revision history for this message
jeff.apple (jeff-apple) wrote :

I believe that the changes in this were actually reviewed earlier, correct? The KIDS file itself is nearly impossible to review.

review: Approve
Revision history for this message
Jon Tai (jontai) wrote :

Your change from r82 was reviewed earlier, yes. Joel's change from artf9455 probably was not formally reviewed, but when I sent you the diff in an e-mail you remembered the problem it solved, so I assume you've signed off on the change. It will also go through a round of QA internally, so I think we're OK to merge.

Revision history for this message
jeff.apple (jeff-apple) wrote :

Yes. that change did look good.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'kids/MSC_GTM_INTEG_10.KID'
2--- kids/MSC_GTM_INTEG_10.KID 1970-01-01 00:00:00 +0000
3+++ kids/MSC_GTM_INTEG_10.KID 2009-11-25 19:50:24 +0000
4@@ -0,0 +1,12658 @@
5+KIDS Distribution saved on Nov 25, 2009@11:41:45
6+VERSION 10 - MERGE HLCSTCP FROM artf9455
7+**KIDS**:MSC GTM INTEGRATION*1.0*10^
8+
9+**INSTALL NAME**
10+MSC GTM INTEGRATION*1.0*10
11+"BLD",7026,0)
12+MSC GTM INTEGRATION*1.0*10^^0^3091125^y
13+"BLD",7026,1,0)
14+^^1^1^3090611^
15+"BLD",7026,1,1,0)
16+SYSTEM STATUS AND JOBEXAM FOR GT.M
17+"BLD",7026,4,0)
18+^9.64PA^^
19+"BLD",7026,6.3)
20+50
21+"BLD",7026,"INIT")
22+
23+"BLD",7026,"KRN",0)
24+^9.67PA^8989.52^19
25+"BLD",7026,"KRN",.4,0)
26+.4
27+"BLD",7026,"KRN",.401,0)
28+.401
29+"BLD",7026,"KRN",.402,0)
30+.402
31+"BLD",7026,"KRN",.403,0)
32+.403
33+"BLD",7026,"KRN",.403,"NM",0)
34+^9.68A^2^2
35+"BLD",7026,"KRN",.403,"NM",1,0)
36+MSCZJOBEXAM FILE #3.081^3.081^0
37+"BLD",7026,"KRN",.403,"NM",2,0)
38+MSCZLOCK FILE #3.081^3.081^0
39+"BLD",7026,"KRN",.403,"NM","B","MSCZJOBEXAM FILE #3.081",1)
40+
41+"BLD",7026,"KRN",.403,"NM","B","MSCZLOCK FILE #3.081",2)
42+
43+"BLD",7026,"KRN",.5,0)
44+.5
45+"BLD",7026,"KRN",.84,0)
46+.84
47+"BLD",7026,"KRN",3.6,0)
48+3.6
49+"BLD",7026,"KRN",3.8,0)
50+3.8
51+"BLD",7026,"KRN",9.2,0)
52+9.2
53+"BLD",7026,"KRN",9.2,"NM",0)
54+^9.68A^^
55+"BLD",7026,"KRN",9.8,0)
56+9.8
57+"BLD",7026,"KRN",9.8,"NM",0)
58+^9.68A^52^44
59+"BLD",7026,"KRN",9.8,"NM",1,0)
60+MSCZJOB^^0^B12965530
61+"BLD",7026,"KRN",9.8,"NM",4,0)
62+MSCZJOBU^^0^B9589351
63+"BLD",7026,"KRN",9.8,"NM",5,0)
64+ZIS4GTM^^0^B18512871
65+"BLD",7026,"KRN",9.8,"NM",7,0)
66+XTER1A^^0^B29100251
67+"BLD",7026,"KRN",9.8,"NM",8,0)
68+ZUGTM^^0^B10012519
69+"BLD",7026,"KRN",9.8,"NM",11,0)
70+ZCD^^0^B21703984
71+"BLD",7026,"KRN",9.8,"NM",13,0)
72+ZOSV2GTM^^0^B6700455
73+"BLD",7026,"KRN",9.8,"NM",14,0)
74+ZOSFGUX^^0^B22502126
75+"BLD",7026,"KRN",9.8,"NM",15,0)
76+ZISHGUX^^0^B36911880
77+"BLD",7026,"KRN",9.8,"NM",16,0)
78+HLCSTCP1^^0^B29662559
79+"BLD",7026,"KRN",9.8,"NM",17,0)
80+HLCSTCP^^0^B32647785
81+"BLD",7026,"KRN",9.8,"NM",18,0)
82+HLCSLNCH^^0^B37119958
83+"BLD",7026,"KRN",9.8,"NM",19,0)
84+XOBVLL^^0^B18012967
85+"BLD",7026,"KRN",9.8,"NM",20,0)
86+XOBVRH^^0^B13028891
87+"BLD",7026,"KRN",9.8,"NM",21,0)
88+XOBVSKT^^0^B19755798
89+"BLD",7026,"KRN",9.8,"NM",22,0)
90+XOBVTCPL^^0^B13492271
91+"BLD",7026,"KRN",9.8,"NM",23,0)
92+XWBTCPM^^0^B56922128
93+"BLD",7026,"KRN",9.8,"NM",24,0)
94+ZTMGRSET^^0^B54537333
95+"BLD",7026,"KRN",9.8,"NM",25,0)
96+ZISTCPS^^0^B18299533
97+"BLD",7026,"KRN",9.8,"NM",26,0)
98+XPDR^^0^B52133395
99+"BLD",7026,"KRN",9.8,"NM",27,0)
100+ZISFGUX^^1^
101+"BLD",7026,"KRN",9.8,"NM",28,0)
102+ZTER^^0^B39678986
103+"BLD",7026,"KRN",9.8,"NM",29,0)
104+ZSTARTGUX^^0^B140233
105+"BLD",7026,"KRN",9.8,"NM",31,0)
106+MSCXUS3A^^0^B8005003
107+"BLD",7026,"KRN",9.8,"NM",32,0)
108+RORHL7A^^0^B35660209
109+"BLD",7026,"KRN",9.8,"NM",33,0)
110+ZOSVGUX^^0^B1197142
111+"BLD",7026,"KRN",9.8,"NM",34,0)
112+DGMSTAPI^^0^B48539163
113+"BLD",7026,"KRN",9.8,"NM",35,0)
114+GMRCA2^^0^B10634
115+"BLD",7026,"KRN",9.8,"NM",36,0)
116+MAGDMEDL^^0^B3132920
117+"BLD",7026,"KRN",9.8,"NM",37,0)
118+PRCSEA^^0^B66865498
119+"BLD",7026,"KRN",9.8,"NM",38,0)
120+PSBOMH1^^0^B71152392
121+"BLD",7026,"KRN",9.8,"NM",39,0)
122+PSBRPC2^^0^B44967923
123+"BLD",7026,"KRN",9.8,"NM",40,0)
124+PXRMTMED^^0^B9970277
125+"BLD",7026,"KRN",9.8,"NM",41,0)
126+VALMW3^^0^B21033865
127+"BLD",7026,"KRN",9.8,"NM",42,0)
128+XQALSUR1^^0^B29675685
129+"BLD",7026,"KRN",9.8,"NM",43,0)
130+XUMF5AU^^0^B76801793
131+"BLD",7026,"KRN",9.8,"NM",44,0)
132+ZSTOPGUX^^0^B148072
133+"BLD",7026,"KRN",9.8,"NM",46,0)
134+MSCZJOBS^^0^B5731054
135+"BLD",7026,"KRN",9.8,"NM",47,0)
136+ZOSVONT^^0^B23474671
137+"BLD",7026,"KRN",9.8,"NM",48,0)
138+ZISFGTM^^0^B9317180
139+"BLD",7026,"KRN",9.8,"NM",49,0)
140+ZSSGUX^^0^B47435
141+"BLD",7026,"KRN",9.8,"NM",50,0)
142+XWBRW^^0^B8699412
143+"BLD",7026,"KRN",9.8,"NM",51,0)
144+XWBSEC^^0^B5872236
145+"BLD",7026,"KRN",9.8,"NM",52,0)
146+HLZTCP^^0^B44973921
147+"BLD",7026,"KRN",9.8,"NM","B","DGMSTAPI",34)
148+
149+"BLD",7026,"KRN",9.8,"NM","B","GMRCA2",35)
150+
151+"BLD",7026,"KRN",9.8,"NM","B","HLCSLNCH",18)
152+
153+"BLD",7026,"KRN",9.8,"NM","B","HLCSTCP",17)
154+
155+"BLD",7026,"KRN",9.8,"NM","B","HLCSTCP1",16)
156+
157+"BLD",7026,"KRN",9.8,"NM","B","HLZTCP",52)
158+
159+"BLD",7026,"KRN",9.8,"NM","B","MAGDMEDL",36)
160+
161+"BLD",7026,"KRN",9.8,"NM","B","MSCXUS3A",31)
162+
163+"BLD",7026,"KRN",9.8,"NM","B","MSCZJOB",1)
164+
165+"BLD",7026,"KRN",9.8,"NM","B","MSCZJOBS",46)
166+
167+"BLD",7026,"KRN",9.8,"NM","B","MSCZJOBU",4)
168+
169+"BLD",7026,"KRN",9.8,"NM","B","PRCSEA",37)
170+
171+"BLD",7026,"KRN",9.8,"NM","B","PSBOMH1",38)
172+
173+"BLD",7026,"KRN",9.8,"NM","B","PSBRPC2",39)
174+
175+"BLD",7026,"KRN",9.8,"NM","B","PXRMTMED",40)
176+
177+"BLD",7026,"KRN",9.8,"NM","B","RORHL7A",32)
178+
179+"BLD",7026,"KRN",9.8,"NM","B","VALMW3",41)
180+
181+"BLD",7026,"KRN",9.8,"NM","B","XOBVLL",19)
182+
183+"BLD",7026,"KRN",9.8,"NM","B","XOBVRH",20)
184+
185+"BLD",7026,"KRN",9.8,"NM","B","XOBVSKT",21)
186+
187+"BLD",7026,"KRN",9.8,"NM","B","XOBVTCPL",22)
188+
189+"BLD",7026,"KRN",9.8,"NM","B","XPDR",26)
190+
191+"BLD",7026,"KRN",9.8,"NM","B","XQALSUR1",42)
192+
193+"BLD",7026,"KRN",9.8,"NM","B","XTER1A",7)
194+
195+"BLD",7026,"KRN",9.8,"NM","B","XUMF5AU",43)
196+
197+"BLD",7026,"KRN",9.8,"NM","B","XWBRW",50)
198+
199+"BLD",7026,"KRN",9.8,"NM","B","XWBSEC",51)
200+
201+"BLD",7026,"KRN",9.8,"NM","B","XWBTCPM",23)
202+
203+"BLD",7026,"KRN",9.8,"NM","B","ZCD",11)
204+
205+"BLD",7026,"KRN",9.8,"NM","B","ZIS4GTM",5)
206+
207+"BLD",7026,"KRN",9.8,"NM","B","ZISFGTM",48)
208+
209+"BLD",7026,"KRN",9.8,"NM","B","ZISFGUX",27)
210+
211+"BLD",7026,"KRN",9.8,"NM","B","ZISHGUX",15)
212+
213+"BLD",7026,"KRN",9.8,"NM","B","ZISTCPS",25)
214+
215+"BLD",7026,"KRN",9.8,"NM","B","ZOSFGUX",14)
216+
217+"BLD",7026,"KRN",9.8,"NM","B","ZOSV2GTM",13)
218+
219+"BLD",7026,"KRN",9.8,"NM","B","ZOSVGUX",33)
220+
221+"BLD",7026,"KRN",9.8,"NM","B","ZOSVONT",47)
222+
223+"BLD",7026,"KRN",9.8,"NM","B","ZSSGUX",49)
224+
225+"BLD",7026,"KRN",9.8,"NM","B","ZSTARTGUX",29)
226+
227+"BLD",7026,"KRN",9.8,"NM","B","ZSTOPGUX",44)
228+
229+"BLD",7026,"KRN",9.8,"NM","B","ZTER",28)
230+
231+"BLD",7026,"KRN",9.8,"NM","B","ZTMGRSET",24)
232+
233+"BLD",7026,"KRN",9.8,"NM","B","ZUGTM",8)
234+
235+"BLD",7026,"KRN",19,0)
236+19
237+"BLD",7026,"KRN",19,"NM",0)
238+^9.68A^2^2
239+"BLD",7026,"KRN",19,"NM",1,0)
240+MSCZJOB^^0
241+"BLD",7026,"KRN",19,"NM",2,0)
242+MSCZLOCK^^0
243+"BLD",7026,"KRN",19,"NM","B","MSCZJOB",1)
244+
245+"BLD",7026,"KRN",19,"NM","B","MSCZLOCK",2)
246+
247+"BLD",7026,"KRN",19.1,0)
248+19.1
249+"BLD",7026,"KRN",101,0)
250+101
251+"BLD",7026,"KRN",409.61,0)
252+409.61
253+"BLD",7026,"KRN",771,0)
254+771
255+"BLD",7026,"KRN",870,0)
256+870
257+"BLD",7026,"KRN",8989.51,0)
258+8989.51
259+"BLD",7026,"KRN",8989.52,0)
260+8989.52
261+"BLD",7026,"KRN",8994,0)
262+8994
263+"BLD",7026,"KRN","B",.4,.4)
264+
265+"BLD",7026,"KRN","B",.401,.401)
266+
267+"BLD",7026,"KRN","B",.402,.402)
268+
269+"BLD",7026,"KRN","B",.403,.403)
270+
271+"BLD",7026,"KRN","B",.5,.5)
272+
273+"BLD",7026,"KRN","B",.84,.84)
274+
275+"BLD",7026,"KRN","B",3.6,3.6)
276+
277+"BLD",7026,"KRN","B",3.8,3.8)
278+
279+"BLD",7026,"KRN","B",9.2,9.2)
280+
281+"BLD",7026,"KRN","B",9.8,9.8)
282+
283+"BLD",7026,"KRN","B",19,19)
284+
285+"BLD",7026,"KRN","B",19.1,19.1)
286+
287+"BLD",7026,"KRN","B",101,101)
288+
289+"BLD",7026,"KRN","B",409.61,409.61)
290+
291+"BLD",7026,"KRN","B",771,771)
292+
293+"BLD",7026,"KRN","B",870,870)
294+
295+"BLD",7026,"KRN","B",8989.51,8989.51)
296+
297+"BLD",7026,"KRN","B",8989.52,8989.52)
298+
299+"BLD",7026,"KRN","B",8994,8994)
300+
301+"BLD",7026,"MSC")
302+/home/jon/MSC_GTM_INTEG_10.KID
303+"BLD",7026,"MSCOM")
304+VERSION 10 - MERGE HLCSTCP FROM artf9455
305+"BLD",7026,"PRE")
306+MSCGUX53
307+"BLD",7026,"QUES",0)
308+^9.62^^
309+"KRN",.403,121,-1)
310+0^1
311+"KRN",.403,121,0)
312+MSCZJOBEXAM^ ^@^^3070530.1755^^^3.081^0^1^1
313+"KRN",.403,121,12)
314+
315+"KRN",.403,121,21)
316+
317+"KRN",.403,121,40,0)
318+^.4031I^3^3
319+"KRN",.403,121,40,1,0)
320+1^^1,1^^^1^17,80
321+"KRN",.403,121,40,1,1)
322+Page 1
323+"KRN",.403,121,40,1,40,0)
324+^.4032IP^433^2
325+"KRN",.403,121,40,1,40,432,0)
326+MSCZJOBEXAM^4^3,2^e
327+"KRN",.403,121,40,1,40,432,2)
328+13^^u^^1
329+"KRN",.403,121,40,1,40,432,"COMP MUL")
330+D COMPMUL^MSCZJOB
331+"KRN",.403,121,40,1,40,432,"COMP MUL PTR")
332+
333+"KRN",.403,121,40,1,40,433,0)
334+MSCZJOBEXAM HDR^1^1,2^d
335+"KRN",.403,121,40,2,0)
336+2^^1,1^^^1^18,79
337+"KRN",.403,121,40,2,1)
338+Page 2
339+"KRN",.403,121,40,2,40,0)
340+^.4032IP^437^3
341+"KRN",.403,121,40,2,40,434,0)
342+MSCZJOBEXAM 2^1^1,1^e
343+"KRN",.403,121,40,2,40,435,0)
344+MSCZJOBVARS^3^8,3^e
345+"KRN",.403,121,40,2,40,435,2)
346+9^^f^^1
347+"KRN",.403,121,40,2,40,435,"COMP MUL")
348+D COMPVARS^MSCZJOB
349+"KRN",.403,121,40,2,40,437,0)
350+MSCZJOBSTACK^4^3,3^e
351+"KRN",.403,121,40,2,40,437,2)
352+3^
353+"KRN",.403,121,40,2,40,437,"COMP MUL")
354+D COMPSTK^MSCZJOB
355+"KRN",.403,121,40,3,0)
356+3^^4,4^^^1^15,70
357+"KRN",.403,121,40,3,1)
358+Page 3
359+"KRN",.403,121,40,3,40,0)
360+^.4032IP^436^1
361+"KRN",.403,121,40,3,40,436,0)
362+MSCZJOBLOCKS^1^2,3^e
363+"KRN",.403,121,40,3,40,436,2)
364+6^
365+"KRN",.403,121,40,3,40,436,"COMP MUL")
366+D COMPLKS^MSCZJOB
367+"KRN",.403,121,21400)
368+1
369+"KRN",.403,122,-1)
370+0^2
371+"KRN",.403,122,0)
372+MSCZLOCK^ ^@^^3070530.1755^^^3.081^0^1^1
373+"KRN",.403,122,40,0)
374+^.4031I^1^1
375+"KRN",.403,122,40,1,0)
376+1^^1,1^^^0^17,80
377+"KRN",.403,122,40,1,1)
378+Page 1
379+"KRN",.403,122,40,1,40,0)
380+^.4032IP^439^2
381+"KRN",.403,122,40,1,40,438,0)
382+MSCZLOCKEXAM^4^3,2^e
383+"KRN",.403,122,40,1,40,438,2)
384+13^^u^^1
385+"KRN",.403,122,40,1,40,438,"COMP MUL")
386+D COMPLK^MSCZJOB
387+"KRN",.403,122,40,1,40,439,0)
388+MSCZJOBLOCK HDR^1^1,1^d
389+"KRN",.404,432,0)
390+MSCZJOBEXAM^3.081
391+"KRN",.404,432,40,0)
392+^.4044I^5^5
393+"KRN",.404,432,40,1,0)
394+1^^2^^JOB NUMBER
395+"KRN",.404,432,40,1,2)
396+1,2^6
397+"KRN",.404,432,40,1,3)
398+!M
399+"KRN",.404,432,40,1,3.1)
400+S Y=$$JOB^MSCZJOB(D0) S:Y=$J Y=Y_"*"
401+"KRN",.404,432,40,1,4)
402+^^^2
403+"KRN",.404,432,40,1,10)
404+S DDSSTACK=2,MSCJOBD0=D0,MSCJOBID=$P(MSCZJOB(D0),U)
405+"KRN",.404,432,40,1,20)
406+F
407+"KRN",.404,432,40,2,0)
408+2^^2^^DEVICE
409+"KRN",.404,432,40,2,2)
410+1,9^23
411+"KRN",.404,432,40,2,3)
412+!M
413+"KRN",.404,432,40,2,3.1)
414+S Y=$$DEV^MSCZJOB(D0)
415+"KRN",.404,432,40,2,4)
416+^^^1
417+"KRN",.404,432,40,2,20)
418+F
419+"KRN",.404,432,40,3,0)
420+4^^2^^NAMESPACE
421+"KRN",.404,432,40,3,2)
422+1,48^11
423+"KRN",.404,432,40,3,3)
424+!M
425+"KRN",.404,432,40,3,3.1)
426+S Y=$$NSP^MSCZJOB(D0)
427+"KRN",.404,432,40,3,4)
428+^^^1
429+"KRN",.404,432,40,3,20)
430+F
431+"KRN",.404,432,40,4,0)
432+5^^2^^ROUTINE
433+"KRN",.404,432,40,4,2)
434+1,60^18
435+"KRN",.404,432,40,4,3)
436+!M
437+"KRN",.404,432,40,4,3.1)
438+S Y=$$ROUTINE^MSCZJOB(D0)
439+"KRN",.404,432,40,4,4)
440+^^^1
441+"KRN",.404,432,40,4,20)
442+F^U
443+"KRN",.404,432,40,5,0)
444+3^^2^^USER
445+"KRN",.404,432,40,5,2)
446+1,33^14
447+"KRN",.404,432,40,5,3)
448+!M
449+"KRN",.404,432,40,5,3.1)
450+S Y=$$USER^MSCZJOB(D0)
451+"KRN",.404,432,40,5,4)
452+^^^1
453+"KRN",.404,432,40,5,20)
454+F
455+"KRN",.404,433,0)
456+MSCZJOBEXAM HDR^3.081^
457+"KRN",.404,433,40,0)
458+^.4044I^2^2
459+"KRN",.404,433,40,1,0)
460+1^Process Device User Namespace Routine ^1
461+"KRN",.404,433,40,1,2)
462+^^2,1
463+"KRN",.404,433,40,2,0)
464+2^!M^1
465+"KRN",.404,433,40,2,.1)
466+S Y=$$GET1^DIQ(8989.3,1,.01)
467+"KRN",.404,433,40,2,2)
468+^^1,28
469+"KRN",.404,434,0)
470+MSCZJOBEXAM 2^3.081
471+"KRN",.404,434,40,0)
472+^.4044I^7^7
473+"KRN",.404,434,40,1,0)
474+1^Job^2^^JOB NUMBER
475+"KRN",.404,434,40,1,2)
476+2,8^6^2,3
477+"KRN",.404,434,40,1,3)
478+!M
479+"KRN",.404,434,40,1,3.1)
480+S Y=$$JOB^MSCZJOB(MSCJOBD0)
481+"KRN",.404,434,40,1,20)
482+N
483+"KRN",.404,434,40,2,0)
484+2^NSpace^2^^NAMESPACE
485+"KRN",.404,434,40,2,2)
486+2,24^11^2,16
487+"KRN",.404,434,40,2,3)
488+!M
489+"KRN",.404,434,40,2,3.1)
490+S Y=$$NSP^MSCZJOB(MSCJOBD0)
491+"KRN",.404,434,40,2,4)
492+^^^2
493+"KRN",.404,434,40,2,20)
494+F
495+"KRN",.404,434,40,3,0)
496+3^Routine^2
497+"KRN",.404,434,40,3,2)
498+2,46^16^2,37
499+"KRN",.404,434,40,3,3)
500+!M
501+"KRN",.404,434,40,3,3.1)
502+S Y=$$ROUTINE^MSCZJOB(MSCJOBD0)
503+"KRN",.404,434,40,3,4)
504+^^^2
505+"KRN",.404,434,40,3,20)
506+F^U
507+"KRN",.404,434,40,4,0)
508+4^^2^^USER
509+"KRN",.404,434,40,4,2)
510+2,63^14
511+"KRN",.404,434,40,4,3)
512+!M
513+"KRN",.404,434,40,4,3.1)
514+S Y=$$USER^MSCZJOB(MSCJOBD0)
515+"KRN",.404,434,40,4,4)
516+^^^2
517+"KRN",.404,434,40,4,20)
518+F
519+"KRN",.404,434,40,5,0)
520+5^Device^2^^DEVICE
521+"KRN",.404,434,40,5,2)
522+3,24^38^3,16
523+"KRN",.404,434,40,5,3)
524+!M
525+"KRN",.404,434,40,5,3.1)
526+S Y=$$DEV^MSCZJOB(MSCJOBD0)
527+"KRN",.404,434,40,5,4)
528+^^^1
529+"KRN",.404,434,40,5,20)
530+F^U
531+"KRN",.404,434,40,6,0)
532+4.4^LOCKs^2^^LOCKS
533+"KRN",.404,434,40,6,2)
534+3,10^3^3,3
535+"KRN",.404,434,40,6,3)
536+!M
537+"KRN",.404,434,40,6,3.1)
538+S Y=$$LOCKS^MSCZJOB
539+"KRN",.404,434,40,6,10)
540+S DDSSTACK=3
541+"KRN",.404,434,40,6,20)
542+N
543+"KRN",.404,434,40,7,0)
544+6^KILL JOB?^2^^KILL
545+"KRN",.404,434,40,7,2)
546+3,74^3^3,63
547+"KRN",.404,434,40,7,13)
548+N X,Y I DDSEXT="YES" D KILL^MSCZJOB(MSCJOBID)
549+"KRN",.404,434,40,7,20)
550+Y
551+"KRN",.404,435,0)
552+MSCZJOBVARS^3.081
553+"KRN",.404,435,40,0)
554+^.4044I^3^3
555+"KRN",.404,435,40,1,0)
556+1^^2^^VARIABLE NAME
557+"KRN",.404,435,40,1,2)
558+1,1^24
559+"KRN",.404,435,40,1,3)
560+!M
561+"KRN",.404,435,40,1,3.1)
562+S Y=$P(@MSC@(MSCJOBID,"V",D0),"=")
563+"KRN",.404,435,40,1,4)
564+^^^2
565+"KRN",.404,435,40,1,20)
566+F
567+"KRN",.404,435,40,2,0)
568+2^^2^^VALUE OF VARIABLE
569+"KRN",.404,435,40,2,2)
570+1,28^48
571+"KRN",.404,435,40,2,3)
572+!M
573+"KRN",.404,435,40,2,3.1)
574+S Y=$P(@MSC@(MSCJOBID,"V",D0),"=",2,999)
575+"KRN",.404,435,40,2,4)
576+^^^2
577+"KRN",.404,435,40,2,20)
578+F^U
579+"KRN",.404,435,40,3,0)
580+1.5^=^1
581+"KRN",.404,435,40,3,2)
582+^^1,26
583+"KRN",.404,436,0)
584+MSCZJOBLOCKS^3.081^
585+"KRN",.404,436,40,0)
586+^.4044I^2^2
587+"KRN",.404,436,40,1,0)
588+1^^2^^LOCKS
589+"KRN",.404,436,40,1,2)
590+2,1^47
591+"KRN",.404,436,40,1,3)
592+!M
593+"KRN",.404,436,40,1,3.1)
594+S Y=@MSC@(MSCJOBID,"L",D0)
595+"KRN",.404,436,40,1,4)
596+^^^2
597+"KRN",.404,436,40,1,20)
598+F^U
599+"KRN",.404,436,40,2,0)
600+2^UNLOCK?^2^^UNLOCK
601+"KRN",.404,436,40,2,2)
602+2,58^3^2,49^1
603+"KRN",.404,436,40,2,13)
604+I DDSEXT="YES" D UNLOCK^MSCZJOB(D0)
605+"KRN",.404,436,40,2,20)
606+Y
607+"KRN",.404,437,0)
608+MSCZJOBSTACK^3.081
609+"KRN",.404,437,40,0)
610+^.4044I^1^1
611+"KRN",.404,437,40,1,0)
612+1^^2^^STACK
613+"KRN",.404,437,40,1,2)
614+2,1^75
615+"KRN",.404,437,40,1,3)
616+!M
617+"KRN",.404,437,40,1,3.1)
618+S Y=$$STACK^MSCZJOB(D0)
619+"KRN",.404,437,40,1,4)
620+^^^2
621+"KRN",.404,437,40,1,20)
622+F^U
623+"KRN",.404,438,0)
624+MSCZLOCKEXAM^3.081
625+"KRN",.404,438,40,0)
626+^.4044I^5^5
627+"KRN",.404,438,40,1,0)
628+1^^2^^JOB NUMBER
629+"KRN",.404,438,40,1,2)
630+1,2^6
631+"KRN",.404,438,40,1,3)
632+!M
633+"KRN",.404,438,40,1,3.1)
634+S Y=$P($G(MSCZLK(D0)),U,5) S:Y=$J Y=Y_"*"
635+"KRN",.404,438,40,1,4)
636+^^^2
637+"KRN",.404,438,40,1,10)
638+S DDSSTACK=2,MSCJOBD0=D0,MSCJOBID=$P(MSCZJOB(D0),U)
639+"KRN",.404,438,40,1,20)
640+F
641+"KRN",.404,438,40,2,0)
642+2^^2^^LOCK
643+"KRN",.404,438,40,2,2)
644+1,9^23
645+"KRN",.404,438,40,2,3)
646+!M
647+"KRN",.404,438,40,2,3.1)
648+S Y=$TR($P($G(MSCZLK(D0)),U),"~")
649+"KRN",.404,438,40,2,4)
650+^^^1
651+"KRN",.404,438,40,2,20)
652+F
653+"KRN",.404,438,40,3,0)
654+4^^2^^ROUTINE
655+"KRN",.404,438,40,3,2)
656+1,48^25
657+"KRN",.404,438,40,3,3)
658+!M
659+"KRN",.404,438,40,3,3.1)
660+S Y=$TR($P($G(MSCZLK(D0)),U,3),$C(126),U)
661+"KRN",.404,438,40,3,4)
662+^^^1
663+"KRN",.404,438,40,3,20)
664+F^U
665+"KRN",.404,438,40,4,0)
666+5^^2^^UNLOCK
667+"KRN",.404,438,40,4,2)
668+1,76^3
669+"KRN",.404,438,40,4,3)
670+!M
671+"KRN",.404,438,40,4,4)
672+^^^0
673+"KRN",.404,438,40,4,13)
674+I DDSEXT="YES" D UNL^MSCZJOB(D0)
675+"KRN",.404,438,40,4,20)
676+Y^U
677+"KRN",.404,438,40,5,0)
678+3^^2^^USER
679+"KRN",.404,438,40,5,2)
680+1,33^14
681+"KRN",.404,438,40,5,3)
682+!M
683+"KRN",.404,438,40,5,3.1)
684+S Y=$P($G(MSCZLK(D0)),U,2)
685+"KRN",.404,438,40,5,4)
686+^^^1
687+"KRN",.404,438,40,5,20)
688+F
689+"KRN",.404,439,0)
690+MSCZJOBLOCK HDR^3.081
691+"KRN",.404,439,40,0)
692+^.4044I^2^2
693+"KRN",.404,439,40,1,0)
694+1^Process Lock User Routine Unlock^1
695+"KRN",.404,439,40,1,2)
696+^^2,1
697+"KRN",.404,439,40,2,0)
698+2^!M^1
699+"KRN",.404,439,40,2,.1)
700+S Y=$$GET1^DIQ(8989.3,1,.01)
701+"KRN",.404,439,40,2,2)
702+^^1,28
703+"KRN",19,14339,-1)
704+0^1
705+"KRN",19,14339,0)
706+MSCZJOB^JOB EXAMINE^^R^^^^^^^^
707+"KRN",19,14339,1,0)
708+^^1^1^3070623^
709+"KRN",19,14339,1,1,0)
710+DESIGNED FOR GT.M
711+"KRN",19,14339,25)
712+MSCZJOB
713+"KRN",19,14339,"U")
714+JOB EXAMINE
715+"KRN",19,14340,-1)
716+0^2
717+"KRN",19,14340,0)
718+MSCZLOCK^LOCK EXAMINE^^R^^^^^^^^
719+"KRN",19,14340,1,0)
720+^^1^1^3070623^
721+"KRN",19,14340,1,1,0)
722+DESIGNED FOR GT.M
723+"KRN",19,14340,25)
724+LOCK^MSCZJOB
725+"KRN",19,14340,"U")
726+LOCK EXAMINE
727+"MBREQ")
728+0
729+"ORD",0,9.8)
730+9.8;;1;RTNF^XPDTA;RTNE^XPDTA
731+"ORD",0,9.8,0)
732+ROUTINE
733+"ORD",8,.403)
734+.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,"",%)
735+"ORD",8,.403,0)
736+FORM
737+"ORD",18,19)
738+19;18;;;OPT^XPDTA;OPTF1^XPDIA;OPTE1^XPDIA;OPTF2^XPDIA;;OPTDEL^XPDIA
739+"ORD",18,19,0)
740+OPTION
741+"PRE")
742+MSCGUX53
743+"QUES","XPF1",0)
744+Y
745+"QUES","XPF1","??")
746+^D REP^XPDH
747+"QUES","XPF1","A")
748+Shall I write over your |FLAG| File
749+"QUES","XPF1","B")
750+YES
751+"QUES","XPF1","M")
752+D XPF1^XPDIQ
753+"QUES","XPF2",0)
754+Y
755+"QUES","XPF2","??")
756+^D DTA^XPDH
757+"QUES","XPF2","A")
758+Want my data |FLAG| yours
759+"QUES","XPF2","B")
760+YES
761+"QUES","XPF2","M")
762+D XPF2^XPDIQ
763+"QUES","XPI1",0)
764+YO
765+"QUES","XPI1","??")
766+^D INHIBIT^XPDH
767+"QUES","XPI1","A")
768+Want KIDS to INHIBIT LOGONs during the install
769+"QUES","XPI1","B")
770+NO
771+"QUES","XPI1","M")
772+D XPI1^XPDIQ
773+"QUES","XPM1",0)
774+PO^VA(200,:EM
775+"QUES","XPM1","??")
776+^D MG^XPDH
777+"QUES","XPM1","A")
778+Enter the Coordinator for Mail Group '|FLAG|'
779+"QUES","XPM1","B")
780+
781+"QUES","XPM1","M")
782+D XPM1^XPDIQ
783+"QUES","XPO1",0)
784+Y
785+"QUES","XPO1","??")
786+^D MENU^XPDH
787+"QUES","XPO1","A")
788+Want KIDS to Rebuild Menu Trees Upon Completion of Install
789+"QUES","XPO1","B")
790+NO
791+"QUES","XPO1","M")
792+D XPO1^XPDIQ
793+"QUES","XPZ1",0)
794+Y
795+"QUES","XPZ1","??")
796+^D OPT^XPDH
797+"QUES","XPZ1","A")
798+Want to DISABLE Scheduled Options, Menu Options, and Protocols
799+"QUES","XPZ1","B")
800+NO
801+"QUES","XPZ1","M")
802+D XPZ1^XPDIQ
803+"QUES","XPZ2",0)
804+Y
805+"QUES","XPZ2","??")
806+^D RTN^XPDH
807+"QUES","XPZ2","A")
808+Want to MOVE routines to other CPUs
809+"QUES","XPZ2","B")
810+NO
811+"QUES","XPZ2","M")
812+D XPZ2^XPDIQ
813+"RTN")
814+45
815+"RTN","DGMSTAPI")
816+0^34^B48539163
817+"RTN","DGMSTAPI",1,0)
818+DGMSTAPI ;ALB/SCK,MSC/JDA - API's for Military Sexual Trauma ;29APR2009
819+"RTN","DGMSTAPI",2,0)
820+ ;;5.3;Registration;**195,243,308,353,379,443,700,JDA**;Aug 13, 1993
821+"RTN","DGMSTAPI",3,0)
822+ Q
823+"RTN","DGMSTAPI",4,0)
824+ ;
825+"RTN","DGMSTAPI",5,0)
826+GETSTAT(DFN,DGDATE) ; Retrieves the current MST status for a patient
827+"RTN","DGMSTAPI",6,0)
828+ ;
829+"RTN","DGMSTAPI",7,0)
830+ ; Input
831+"RTN","DGMSTAPI",8,0)
832+ ; DFN - IEN of patient in the PATIENT File (#2)
833+"RTN","DGMSTAPI",9,0)
834+ ; DGDATE - Date for status lookup [OPTIONAL]
835+"RTN","DGMSTAPI",10,0)
836+ ;
837+"RTN","DGMSTAPI",11,0)
838+ ; Output
839+"RTN","DGMSTAPI",12,0)
840+ ; DGMST - Format will depend on result of lookup
841+"RTN","DGMSTAPI",13,0)
842+ ;
843+"RTN","DGMSTAPI",14,0)
844+ ; If an entry is found then:
845+"RTN","DGMSTAPI",15,0)
846+ ; DGMST returns a 7 piece data string, caret(^)-delimited:
847+"RTN","DGMSTAPI",16,0)
848+ ; $P(1) = IEN of entry in MST HISTORY File (#29.11)
849+"RTN","DGMSTAPI",17,0)
850+ ; $P(2) = Internal value of MST Status ("Y,N,D,U")
851+"RTN","DGMSTAPI",18,0)
852+ ; $P(3) = Date of status change
853+"RTN","DGMSTAPI",19,0)
854+ ; $P(4) = IEN of provider making determination, file (#200)
855+"RTN","DGMSTAPI",20,0)
856+ ; $P(5) = IEN of user who entered status, file (#200)
857+"RTN","DGMSTAPI",21,0)
858+ ; $P(6) = External format of MST Status
859+"RTN","DGMSTAPI",22,0)
860+ ; $P(7) = IEN pointer of the INSTITUTION file (#4)
861+"RTN","DGMSTAPI",23,0)
862+ ;
863+"RTN","DGMSTAPI",24,0)
864+ ; If no MST History is found, then:
865+"RTN","DGMSTAPI",25,0)
866+ ; DGMST = 0^U
867+"RTN","DGMSTAPI",26,0)
868+ ; "U" = (Unknown)
869+"RTN","DGMSTAPI",27,0)
870+ ; If an error occured in the GETS^DIQ lookup, then:
871+"RTN","DGMSTAPI",28,0)
872+ ; DGMST = -1^^Error Code IEN
873+"RTN","DGMSTAPI",29,0)
874+ ; (returned by GETS^DIQ call)
875+"RTN","DGMSTAPI",30,0)
876+ ;
877+"RTN","DGMSTAPI",31,0)
878+ ; Get most recent MST status entry for the patient from file using
879+"RTN","DGMSTAPI",32,0)
880+ ; reverse $Order on the "APDT" x-ref.
881+"RTN","DGMSTAPI",33,0)
882+ ;
883+"RTN","DGMSTAPI",34,0)
884+ N DGMST,DGIEN,DGFDA,DGMSG
885+"RTN","DGMSTAPI",35,0)
886+ S DFN=$G(DFN)
887+"RTN","DGMSTAPI",36,0)
888+ I '+DFN!('$D(^DPT(DFN,0))) D G STATQ
889+"RTN","DGMSTAPI",37,0)
890+ . S DGMST="-1"
891+"RTN","DGMSTAPI",38,0)
892+ I '$D(^DGMS(29.11,"APDT",DFN)) D G STATQ
893+"RTN","DGMSTAPI",39,0)
894+ .S DGMST="0^U"
895+"RTN","DGMSTAPI",40,0)
896+ S DGDATE=$S(+$G(DGDATE)>0:DGDATE,1:$$NOW^XLFDT)
897+"RTN","DGMSTAPI",41,0)
898+ I '$D(^DGMS(29.11,"APDT",DFN,DGDATE)) S DGDATE=$$DATE(DFN,DGDATE)
899+"RTN","DGMSTAPI",42,0)
900+ I '+DGDATE D G STATQ
901+"RTN","DGMSTAPI",43,0)
902+ . S DGMST="0^U"
903+"RTN","DGMSTAPI",44,0)
904+ S DGIEN=""
905+"RTN","DGMSTAPI",45,0)
906+ S DGIEN=+$O(^DGMS(29.11,"APDT",DFN,DGDATE,DGIEN),-1)
907+"RTN","DGMSTAPI",46,0)
908+ ;
909+"RTN","DGMSTAPI",47,0)
910+ ; Check for valid ien, if entry missing, return Unknown
911+"RTN","DGMSTAPI",48,0)
912+ I +DGIEN'>0 D G STATQ
913+"RTN","DGMSTAPI",49,0)
914+ . S DGMST="0^U"
915+"RTN","DGMSTAPI",50,0)
916+ ;
917+"RTN","DGMSTAPI",51,0)
918+ ; Retrieve data
919+"RTN","DGMSTAPI",52,0)
920+ D GETS^DIQ(29.11,+DGIEN_",","*","IE","DGFDA","DGMSG")
921+"RTN","DGMSTAPI",53,0)
922+ ; check for errors
923+"RTN","DGMSTAPI",54,0)
924+ I $D(DGMSG) D G STATQ
925+"RTN","DGMSTAPI",55,0)
926+ .S DGMST="-1^^"_$G(DGMSG("DIERR",1))
927+"RTN","DGMSTAPI",56,0)
928+ ;
929+"RTN","DGMSTAPI",57,0)
930+ S DGMST=DGIEN_U_$G(DGFDA(29.11,+DGIEN_",",3,"I"))_U_$G(DGFDA(29.11,+DGIEN_",",.01,"I"))_U_$G(DGFDA(29.11,+DGIEN_",",4,"I"))_U_$G(DGFDA(29.11,+DGIEN_",",5,"I"))
931+"RTN","DGMSTAPI",58,0)
932+ S DGMST=DGMST_U_$G(DGFDA(29.11,+DGIEN_",",3,"E"))
933+"RTN","DGMSTAPI",59,0)
934+ S DGMST=DGMST_U_$S($G(DGFDA(29.11,+DGIEN_",",6,"I"))]"":$G(DGFDA(29.11,+DGIEN_",",6,"I")),1:$$SITE)
935+"RTN","DGMSTAPI",60,0)
936+ ;
937+"RTN","DGMSTAPI",61,0)
938+STATQ Q $G(DGMST)
939+"RTN","DGMSTAPI",62,0)
940+ ;
941+"RTN","DGMSTAPI",63,0)
942+NEWSTAT(DFN,DGSTAT,DGDATE,DGPROV,DGSITE,DGXMIT) ; MST HISTORY (#29.11) filer
943+"RTN","DGMSTAPI",64,0)
944+ ; Callpoint to create a new MST HISTORY FILE (#29.11) entry.
945+"RTN","DGMSTAPI",65,0)
946+ ; Will also queue HL7 message for HEC database updates.
947+"RTN","DGMSTAPI",66,0)
948+ ;
949+"RTN","DGMSTAPI",67,0)
950+ ; Input
951+"RTN","DGMSTAPI",68,0)
952+ ; DFN - Patients DFN
953+"RTN","DGMSTAPI",69,0)
954+ ; DGSTAT - MST Status code, "Y,N,D,U"
955+"RTN","DGMSTAPI",70,0)
956+ ; DGDATE - Date of MST status change [default=NOW]
957+"RTN","DGMSTAPI",71,0)
958+ ; DGPROV - IEN of Provider making determination, file (#200)
959+"RTN","DGMSTAPI",72,0)
960+ ; DGSITE - IEN pointer of the INSTITUTION file (#4)
961+"RTN","DGMSTAPI",73,0)
962+ ; DGXMIT - HL7 transmit flag [OPTIONAL]
963+"RTN","DGMSTAPI",74,0)
964+ ; 0=don't queue a message
965+"RTN","DGMSTAPI",75,0)
966+ ; 1=queue a message [default])
967+"RTN","DGMSTAPI",76,0)
968+ ;
969+"RTN","DGMSTAPI",77,0)
970+ ; Output
971+"RTN","DGMSTAPI",78,0)
972+ ; DGRSLT - Returns IEN of file (#29.11) entry if successful
973+"RTN","DGMSTAPI",79,0)
974+ ;
975+"RTN","DGMSTAPI",80,0)
976+ ; If no patient was defined, then:
977+"RTN","DGMSTAPI",81,0)
978+ ; DGRSLT = -1^No patient defined
979+"RTN","DGMSTAPI",82,0)
980+ ;
981+"RTN","DGMSTAPI",83,0)
982+ ; If an error occured in the GETS^DIQ lookup, then:
983+"RTN","DGMSTAPI",84,0)
984+ ; DGMST = -1^^Error Code IEN
985+"RTN","DGMSTAPI",85,0)
986+ ; (returned by GETS^DIQ call)
987+"RTN","DGMSTAPI",86,0)
988+ ;
989+"RTN","DGMSTAPI",87,0)
990+ N DGFDA,DGMSG,DGERR,DGRSLT,MSTIEN
991+"RTN","DGMSTAPI",88,0)
992+ S DFN=$G(DFN)
993+"RTN","DGMSTAPI",89,0)
994+ I DFN']""!('$D(^DPT(DFN,0))) D G NEWQ
995+"RTN","DGMSTAPI",90,0)
996+ . S DGRSLT="-1^No patient defined"
997+"RTN","DGMSTAPI",91,0)
998+ ;
999+"RTN","DGMSTAPI",92,0)
1000+ S DGSTAT=$S($G(DGSTAT)]"":DGSTAT,1:"U")
1001+"RTN","DGMSTAPI",93,0)
1002+ S DGDATE=$G(DGDATE)
1003+"RTN","DGMSTAPI",94,0)
1004+ S DGPROV=$G(DGPROV)
1005+"RTN","DGMSTAPI",95,0)
1006+ S DGSITE=$G(DGSITE)
1007+"RTN","DGMSTAPI",96,0)
1008+ S DGXMIT=$S($G(DGXMIT)=0:DGXMIT,1:1)
1009+"RTN","DGMSTAPI",97,0)
1010+ S DGDATE=$S(+DGDATE>0:DGDATE,1:$$NOW^XLFDT)
1011+"RTN","DGMSTAPI",98,0)
1012+ S DGSITE=$S(+DGSITE>0:DGSITE,1:$$SITE)
1013+"RTN","DGMSTAPI",99,0)
1014+ ;
1015+"RTN","DGMSTAPI",100,0)
1016+ I '$$CHANGE(DFN,DGSTAT,DGDATE) D G NEWQ
1017+"RTN","DGMSTAPI",101,0)
1018+ . S DGRSLT="0"
1019+"RTN","DGMSTAPI",102,0)
1020+ ;
1021+"RTN","DGMSTAPI",103,0)
1022+ I '$$VALID(DFN,DGSTAT,DGDATE,DGPROV,DGSITE,.DGERR) D G NEWQ
1023+"RTN","DGMSTAPI",104,0)
1024+ . S DGRSLT="-1^"_DGERR
1025+"RTN","DGMSTAPI",105,0)
1026+ ;
1027+"RTN","DGMSTAPI",106,0)
1028+ S DGFDA(1,29.11,"+1,",.01)=DGDATE
1029+"RTN","DGMSTAPI",107,0)
1030+ S DGFDA(1,29.11,"+1,",2)=DFN
1031+"RTN","DGMSTAPI",108,0)
1032+ S DGFDA(1,29.11,"+1,",3)=DGSTAT
1033+"RTN","DGMSTAPI",109,0)
1034+ S DGFDA(1,29.11,"+1,",4)=DGPROV
1035+"RTN","DGMSTAPI",110,0)
1036+ S DGFDA(1,29.11,"+1,",5)=DUZ
1037+"RTN","DGMSTAPI",111,0)
1038+ S DGFDA(1,29.11,"+1,",6)=DGSITE
1039+"RTN","DGMSTAPI",112,0)
1040+ ;
1041+"RTN","DGMSTAPI",113,0)
1042+ D UPDATE^DIE("","DGFDA(1)","MSTIEN","DGERR")
1043+"RTN","DGMSTAPI",114,0)
1044+ I $D(DGERR) D G NEWQ
1045+"RTN","DGMSTAPI",115,0)
1046+ . S DGRSLT="-1^"_$G(DGERR("DIERR",1))
1047+"RTN","DGMSTAPI",116,0)
1048+ ;
1049+"RTN","DGMSTAPI",117,0)
1050+ S DGRSLT=+MSTIEN(1)
1051+"RTN","DGMSTAPI",118,0)
1052+ ;
1053+"RTN","DGMSTAPI",119,0)
1054+ ; Callpoint to queue an entry that will trigger a HEC
1055+"RTN","DGMSTAPI",120,0)
1056+ ; Enrollment Full Data Transmission (ORF/ORU~ZO7) HL7 message.
1057+"RTN","DGMSTAPI",121,0)
1058+ ; The HL7 message will contain the following three MST data elments
1059+"RTN","DGMSTAPI",122,0)
1060+ ; as part of the VA-Specific Eligibility ZEL segment:
1061+"RTN","DGMSTAPI",123,0)
1062+ ; (23) - MST STATUS
1063+"RTN","DGMSTAPI",124,0)
1064+ ; (24) - DATE MST STATUS CHANGED
1065+"RTN","DGMSTAPI",125,0)
1066+ ; (25) - SITE DETERMINING MST STATUS
1067+"RTN","DGMSTAPI",126,0)
1068+ ;
1069+"RTN","DGMSTAPI",127,0)
1070+ I DGXMIT D
1071+"RTN","DGMSTAPI",128,0)
1072+ . D SEND^DGMSTL1(DFN,"Z07")
1073+"RTN","DGMSTAPI",129,0)
1074+ ;
1075+"RTN","DGMSTAPI",130,0)
1076+NEWQ Q $G(DGRSLT)
1077+"RTN","DGMSTAPI",131,0)
1078+ ;
1079+"RTN","DGMSTAPI",132,0)
1080+DELMST(MSTIEN) ; Deletes the MST HISTORY File (#29.11) entry passed in.
1081+"RTN","DGMSTAPI",133,0)
1082+ ; This call is not to be used except from inside the DG MST List
1083+"RTN","DGMSTAPI",134,0)
1084+ ; Manager interface.
1085+"RTN","DGMSTAPI",135,0)
1086+ ;
1087+"RTN","DGMSTAPI",136,0)
1088+ ; Input
1089+"RTN","DGMSTAPI",137,0)
1090+ ; MSTIEN - IEN of the entry in the MST HISTORY File (#29.11)
1091+"RTN","DGMSTAPI",138,0)
1092+ ;
1093+"RTN","DGMSTAPI",139,0)
1094+ ; Output
1095+"RTN","DGMSTAPI",140,0)
1096+ ; If no IEN passed in, return -1
1097+"RTN","DGMSTAPI",141,0)
1098+ ; otherwise return 1
1099+"RTN","DGMSTAPI",142,0)
1100+ ;
1101+"RTN","DGMSTAPI",143,0)
1102+ Q:'$G(MSTIEN) "-1^No entry to delete"
1103+"RTN","DGMSTAPI",144,0)
1104+ ;
1105+"RTN","DGMSTAPI",145,0)
1106+ N DA,XD
1107+"RTN","DGMSTAPI",146,0)
1108+ S DA=+$G(MSTIEN)
1109+"RTN","DGMSTAPI",147,0)
1110+ S DIK="^DGMS(29.11,"
1111+"RTN","DGMSTAPI",148,0)
1112+ D ^DIK K DIK
1113+"RTN","DGMSTAPI",149,0)
1114+ Q 1
1115+"RTN","DGMSTAPI",150,0)
1116+ ;
1117+"RTN","DGMSTAPI",151,0)
1118+NAME(DA) ; Returns name from the VA NEW PERSON File using DIQ call
1119+"RTN","DGMSTAPI",152,0)
1120+ ;
1121+"RTN","DGMSTAPI",153,0)
1122+ N DGNAME,DGPROV,DIQ,DR,DIC
1123+"RTN","DGMSTAPI",154,0)
1124+ I $G(DA)="" G NAMEQ
1125+"RTN","DGMSTAPI",155,0)
1126+ S DIC=200,DR=".01",DIQ="DGPROV"
1127+"RTN","DGMSTAPI",156,0)
1128+ D EN^DIQ1
1129+"RTN","DGMSTAPI",157,0)
1130+ S DGNAME=$G(DGPROV(200,DA,.01))
1131+"RTN","DGMSTAPI",158,0)
1132+NAMEQ Q $G(DGNAME)
1133+"RTN","DGMSTAPI",159,0)
1134+ ;
1135+"RTN","DGMSTAPI",160,0)
1136+CHANGE(DFN,DGSTAT,DGDATE) ;Did the Status OR Date change?
1137+"RTN","DGMSTAPI",161,0)
1138+ ; Input
1139+"RTN","DGMSTAPI",162,0)
1140+ ; DFN - Patients DFN
1141+"RTN","DGMSTAPI",163,0)
1142+ ; DGSTAT - MST Status code, "Y,N,D,U"
1143+"RTN","DGMSTAPI",164,0)
1144+ ; DGDATE - Date of MST Status Change (FM format)
1145+"RTN","DGMSTAPI",165,0)
1146+ ;
1147+"RTN","DGMSTAPI",166,0)
1148+ ; Output
1149+"RTN","DGMSTAPI",167,0)
1150+ ; Returns 0 if no status change
1151+"RTN","DGMSTAPI",168,0)
1152+ ; 1 if status changed
1153+"RTN","DGMSTAPI",169,0)
1154+ ;
1155+"RTN","DGMSTAPI",170,0)
1156+ N DGCHG,DGMST
1157+"RTN","DGMSTAPI",171,0)
1158+ S DGCHG=0
1159+"RTN","DGMSTAPI",172,0)
1160+ I +$G(DFN)'>0!('$D(^DPT(DFN,0))) G CHNGQ
1161+"RTN","DGMSTAPI",173,0)
1162+ S DGSTAT=$G(DGSTAT)
1163+"RTN","DGMSTAPI",174,0)
1164+ I DGSTAT'?1A!("YNDU"'[DGSTAT) G CHNGQ
1165+"RTN","DGMSTAPI",175,0)
1166+ S DGDATE=$G(DGDATE)
1167+"RTN","DGMSTAPI",176,0)
1168+ I DGDATE="" G CHNGQ
1169+"RTN","DGMSTAPI",177,0)
1170+ S DGMST=$$GETSTAT(DFN),DGMST=$G(DGMST)
1171+"RTN","DGMSTAPI",178,0)
1172+ I +DGMST<1!($P(DGMST,U,2)'=$G(DGSTAT))!($P(DGMST,U,3)'=$G(DGDATE)) S DGCHG=1
1173+"RTN","DGMSTAPI",179,0)
1174+CHNGQ Q DGCHG
1175+"RTN","DGMSTAPI",180,0)
1176+ ;
1177+"RTN","DGMSTAPI",181,0)
1178+SITE(DGSITE) ;Convert a station number into a pointer to the
1179+"RTN","DGMSTAPI",182,0)
1180+ ; INSTITUTION file (#4). If called with a null parameter then
1181+"RTN","DGMSTAPI",183,0)
1182+ ; the pointer to the INSTITUTION file (#4) of the primary site
1183+"RTN","DGMSTAPI",184,0)
1184+ ; will be returned.
1185+"RTN","DGMSTAPI",185,0)
1186+ ;
1187+"RTN","DGMSTAPI",186,0)
1188+ ; Input
1189+"RTN","DGMSTAPI",187,0)
1190+ ; DGSITE - Station number (optional)
1191+"RTN","DGMSTAPI",188,0)
1192+ ;
1193+"RTN","DGMSTAPI",189,0)
1194+ ; Output
1195+"RTN","DGMSTAPI",190,0)
1196+ ; Return Site IEN to INSTITUTION file (#4)
1197+"RTN","DGMSTAPI",191,0)
1198+ ;
1199+"RTN","DGMSTAPI",192,0)
1200+ S DGSITE=$G(DGSITE)
1201+"RTN","DGMSTAPI",193,0)
1202+ I DGSITE]"",$D(^DIC(4,"D",DGSITE)) D
1203+"RTN","DGMSTAPI",194,0)
1204+ . S DGSITE=$O(^DIC(4,"D",DGSITE,0))
1205+"RTN","DGMSTAPI",195,0)
1206+ E D
1207+"RTN","DGMSTAPI",196,0)
1208+ . S DGSITE=$P($$SITE^VASITE,U)
1209+"RTN","DGMSTAPI",197,0)
1210+ I +DGSITE'>0 S DGSITE=""
1211+"RTN","DGMSTAPI",198,0)
1212+ Q DGSITE
1213+"RTN","DGMSTAPI",199,0)
1214+ ;
1215+"RTN","DGMSTAPI",200,0)
1216+DATE(DFN,DGDT) ;Determine 'current' MST date
1217+"RTN","DGMSTAPI",201,0)
1218+ ;
1219+"RTN","DGMSTAPI",202,0)
1220+ ; Input
1221+"RTN","DGMSTAPI",203,0)
1222+ ; DFN - Patient's DFN
1223+"RTN","DGMSTAPI",204,0)
1224+ ; DGDT - FileMan format date
1225+"RTN","DGMSTAPI",205,0)
1226+ ;
1227+"RTN","DGMSTAPI",206,0)
1228+ ; Output
1229+"RTN","DGMSTAPI",207,0)
1230+ ; Return MST effective date
1231+"RTN","DGMSTAPI",208,0)
1232+ ;
1233+"RTN","DGMSTAPI",209,0)
1234+ N DGMSTDT
1235+"RTN","DGMSTAPI",210,0)
1236+ S DFN=$G(DFN)
1237+"RTN","DGMSTAPI",211,0)
1238+ I '+DFN D G DATEQ
1239+"RTN","DGMSTAPI",212,0)
1240+ . S DGMSTDT=""
1241+"RTN","DGMSTAPI",213,0)
1242+ S DGDT=$S(+$G(DGDT)>0:DGDT,1:$$NOW^XLFDT)
1243+"RTN","DGMSTAPI",214,0)
1244+ I $P(DGDT,".",2)="" S DGDT=DGDT_".999999"
1245+"RTN","DGMSTAPI",215,0)
1246+ S DGMSTDT=$O(^DGMS(29.11,"APDT",DFN,DGDT),-1)
1247+"RTN","DGMSTAPI",216,0)
1248+DATEQ Q DGMSTDT
1249+"RTN","DGMSTAPI",217,0)
1250+ ;
1251+"RTN","DGMSTAPI",218,0)
1252+VALID(DFN,DGSTAT,DGDATE,DGPROV,DGSITE,DGERR) ;Validate fields before filing
1253+"RTN","DGMSTAPI",219,0)
1254+ ; Input:
1255+"RTN","DGMSTAPI",220,0)
1256+ ; DFN - [REQUIRED] - ien of Patient
1257+"RTN","DGMSTAPI",221,0)
1258+ ; DGSTAT - [REQUIRED] - MST Status code, "Y,N,D,U"
1259+"RTN","DGMSTAPI",222,0)
1260+ ; DGDATE - [REQUIRED] - Date of MST status change[FileMan Internal]
1261+"RTN","DGMSTAPI",223,0)
1262+ ; DGPROV - [optional] - IEN of Provider making determination
1263+"RTN","DGMSTAPI",224,0)
1264+ ; DGSITE - [optional] - IEN pointer of the INSTITUTION file
1265+"RTN","DGMSTAPI",225,0)
1266+ ; DGERR - [optional] - error parameter passed by reference
1267+"RTN","DGMSTAPI",226,0)
1268+ ; Output:
1269+"RTN","DGMSTAPI",227,0)
1270+ ; Function Value - Returns 1 - if validation checks passed
1271+"RTN","DGMSTAPI",228,0)
1272+ ; 0 - if validation checks failed
1273+"RTN","DGMSTAPI",229,0)
1274+ ; DGERR - an error message if validation checks fail
1275+"RTN","DGMSTAPI",230,0)
1276+ ; init variables
1277+"RTN","DGMSTAPI",231,0)
1278+ N I,DGFILE,DGFLD,DGMSG,DGSTR,DGVAL,DGVAR,DGX,VALID
1279+"RTN","DGMSTAPI",232,0)
1280+ S DGFILE=29.11,VALID=1,DGMSG=" IS REQUIRED"
1281+"RTN","DGMSTAPI",233,0)
1282+ ; Quit DO block if invalid condition found
1283+"RTN","DGMSTAPI",234,0)
1284+ ; Check for [REQUIRED] fields
1285+"RTN","DGMSTAPI",235,0)
1286+ D
1287+"RTN","DGMSTAPI",236,0)
1288+ . I DFN="" D MSG(DGFILE,2,DGMSG,.DGERR) Q ;pat ien
1289+"RTN","DGMSTAPI",237,0)
1290+ . I DGSTAT="" D MSG(DGFILE,3,DGMSG,.DGERR) Q ;mst status code
1291+"RTN","DGMSTAPI",238,0)
1292+ . I DGDATE="" D MSG(DGFILE,.01,DGMSG,.DGERR) Q ;dt chg status
1293+"RTN","DGMSTAPI",239,0)
1294+ .;
1295+"RTN","DGMSTAPI",240,0)
1296+ .; Check for valid FIELD values
1297+"RTN","DGMSTAPI",241,0)
1298+ . S DGMSG=" IS NOT VALID"
1299+"RTN","DGMSTAPI",242,0)
1300+ .; need to strip off the 'seconds' to pass the CHK^DIE() call...
1301+"RTN","DGMSTAPI",243,0)
1302+ . I DGDATE["." N DGSECS S DGSECS=$E($P(DGDATE,".",2),5,6) I DGSECS'="" I DGSECS<0!(DGSECS>60) D MSG(DGFILE,.01,DGMSG,.DGERR) Q
1303+"RTN","DGMSTAPI",244,0)
1304+ . N DGDATEX S DGDATEX=DGDATE
1305+"RTN","DGMSTAPI",245,0)
1306+ . I DGDATEX["." S DGDATEX=$P(DGDATEX,".")_"."_$E($P(DGDATEX,".",2),1,4)
1307+"RTN","DGMSTAPI",246,0)
1308+ . I $E($P(DGDATEX,".",2),1,4)="0000" S DGDATEX=$P(DGDATEX,".")_".1"
1309+"RTN","DGMSTAPI",247,0)
1310+ . S DGSTR=".01;DGDATEX^2;DFN^3;DGSTAT^4;DGPROV^5;DUZ^6;DGSITE"
1311+"RTN","DGMSTAPI",248,0)
1312+ .;
1313+"RTN","DGMSTAPI",249,0)
1314+ . F I=1:1:$L(DGSTR,U) S DGX=$P(DGSTR,U,I) Q:DGX="" D Q:'VALID
1315+"RTN","DGMSTAPI",250,0)
1316+ .. S DGFLD=$P(DGX,";"),DGVAR=$P(DGX,";",2),DGVAL=@DGVAR
1317+"RTN","DGMSTAPI",251,0)
1318+ .. Q:DGVAL=""
1319+"RTN","DGMSTAPI",252,0)
1320+ .. S VALID=$$TESTVAL(DGFILE,DGFLD,DGVAL)
1321+"RTN","DGMSTAPI",253,0)
1322+ .. D:'VALID MSG(DGFILE,DGFLD,DGMSG,.DGERR)
1323+"RTN","DGMSTAPI",254,0)
1324+ Q VALID
1325+"RTN","DGMSTAPI",255,0)
1326+ ;
1327+"RTN","DGMSTAPI",256,0)
1328+MSG(DGFIL,DGFLD,DGMSG,DGERR) ; error message setup
1329+"RTN","DGMSTAPI",257,0)
1330+ ; Input:
1331+"RTN","DGMSTAPI",258,0)
1332+ ; DGFIL - file number
1333+"RTN","DGMSTAPI",259,0)
1334+ ; DGFLD - field number of file
1335+"RTN","DGMSTAPI",260,0)
1336+ ; DGMSG - message type verbiage - " IS REQUIRED" or " IS NOT VALID"
1337+"RTN","DGMSTAPI",261,0)
1338+ ; DGERR - error parameter passed by reference
1339+"RTN","DGMSTAPI",262,0)
1340+ ; Output:
1341+"RTN","DGMSTAPI",263,0)
1342+ ; DGERR - error message
1343+"RTN","DGMSTAPI",264,0)
1344+ S DGERR=$$GET1^DID(DGFIL,DGFLD,,"LABEL")_DGMSG
1345+"RTN","DGMSTAPI",265,0)
1346+ Q
1347+"RTN","DGMSTAPI",266,0)
1348+ ;
1349+"RTN","DGMSTAPI",267,0)
1350+TESTVAL(DGFIL,DGFLD,DGVAL) ; Determine if a field value is valid.
1351+"RTN","DGMSTAPI",268,0)
1352+ ; Input:
1353+"RTN","DGMSTAPI",269,0)
1354+ ; DGFIL - file number
1355+"RTN","DGMSTAPI",270,0)
1356+ ; DGFLD - field number of file
1357+"RTN","DGMSTAPI",271,0)
1358+ ; DGVAL - field value to be validated
1359+"RTN","DGMSTAPI",272,0)
1360+ ; Output:
1361+"RTN","DGMSTAPI",273,0)
1362+ ; Function value: Returns 1 if field is valid
1363+"RTN","DGMSTAPI",274,0)
1364+ ; 0 if validation fails
1365+"RTN","DGMSTAPI",275,0)
1366+ N DGVALEX,DGRSLT,VALID
1367+"RTN","DGMSTAPI",276,0)
1368+ S VALID=1
1369+"RTN","DGMSTAPI",277,0)
1370+ I DGVAL'="" D
1371+"RTN","DGMSTAPI",278,0)
1372+ . S DGVALEX=$$EXTERNAL^DILFD(DGFIL,DGFLD,"F",DGVAL)
1373+"RTN","DGMSTAPI",279,0)
1374+ . I DGVALEX="" S VALID=0 Q ; no external value, not valid
1375+"RTN","DGMSTAPI",280,0)
1376+ . I $$GET1^DID(DGFIL,DGFLD,"","TYPE")'="POINTER" D
1377+"RTN","DGMSTAPI",281,0)
1378+ .. D CHK^DIE(DGFIL,DGFLD,,DGVALEX,.DGRSLT) I DGRSLT="^" S VALID=0
1379+"RTN","DGMSTAPI",282,0)
1380+ Q VALID
1381+"RTN","GMRCA2")
1382+0^35^B10634
1383+"RTN","GMRCA2",1,0)
1384+GMRCA2 ;SLC/KCM,DLT,MSC/JDA - Select prompt for processing actions ;27APR2009
1385+"RTN","GMRCA2",2,0)
1386+ ;;3.0;CONSULT/REQUEST TRACKING;**1,4,MSC**;DEC 27, 1997
1387+"RTN","GMRCA2",3,0)
1388+SELECT(GMRCO) ; Select the consult to process
1389+"RTN","GMRCA2",4,0)
1390+ ;This utility checks the GMRCO variable against the selection list
1391+"RTN","GMRCA2",5,0)
1392+ ; Input variable used:
1393+"RTN","GMRCA2",6,0)
1394+ ; BLK, LNCT, GMRCO
1395+"RTN","GMRCA2",7,0)
1396+ ; GMRC("NMBR")
1397+"RTN","GMRCA2",8,0)
1398+ ; Output variables returned:
1399+"RTN","GMRCA2",9,0)
1400+ ; GMRCQUT=1 if no consult was selected
1401+"RTN","GMRCA2",10,0)
1402+ ; GMRCQUT is not defined on return when selection made
1403+"RTN","GMRCA2",11,0)
1404+ ; GMRCO= consult selected from list
1405+"RTN","GMRCA2",12,0)
1406+START
1407+"RTN","GMRCA2",13,0)
1408+ K GMRCQUT,GMRCSEL
1409+"RTN","GMRCA2",14,0)
1410+ N GMRCAGN
1411+"RTN","GMRCA2",15,0)
1412+ I '$L($G(GMRCO)) D Q:$D(GMRCQUT) G:$D(GMRCAGN) START
1413+"RTN","GMRCA2",16,0)
1414+ .;use the highlighted number if defined
1415+"RTN","GMRCA2",17,0)
1416+ .I $D(GMRC("NMBR")) S GMRCSEL=GMRC("NMBR")
1417+"RTN","GMRCA2",18,0)
1418+ .I '$D(GMRCSEL),$D(LNCT),LNCT=1 S GMRCSEL=LNCT
1419+"RTN","GMRCA2",19,0)
1420+ .I $S('+$G(GMRCSEL):1,+GMRCSEL<1:1,+GMRCSEL>BLK:1,GMRCSEL="":1,1:0) K GMRCSEL D:+$G(GMRC("NMBR")) AGAIN^GMRCSLMV(GMRC("NMBR")) K GMRC("NMBR")
1421+"RTN","GMRCA2",20,0)
1422+ .I '+$G(GMRCSEL) D SEL I $S($D(DTOUT):1,$D(DIROUT):1,$D(GMRCQUT):1,'+GMRCSEL:1,1:0) K GMRCSEL S GMRCQUT=1 Q
1423+"RTN","GMRCA2",21,0)
1424+ .I $S(+GMRCSEL<1:1,GMRCSEL>BLK:1,1:0) W !,"Select a consult listed in the number range 1 to "_BLK S GMRCAGN=1 Q
1425+"RTN","GMRCA2",22,0)
1426+ .S GMRCO=$O(^TMP("GMRCR",$J,"CS","AD",GMRCSEL,GMRCSEL,0))
1427+"RTN","GMRCA2",23,0)
1428+ .I '+GMRCO D
1429+"RTN","GMRCA2",24,0)
1430+ .. S GMRCQUT=1
1431+"RTN","GMRCA2",25,0)
1432+ .. W !,$C(7),"Select a consult by entering its listed number between 1 and "_LNCT_"."
1433+"RTN","GMRCA2",26,0)
1434+ .. K GMRCO,GMRCSEL
1435+"RTN","GMRCA2",27,0)
1436+ . Q
1437+"RTN","GMRCA2",28,0)
1438+ Q
1439+"RTN","GMRCA2",29,0)
1440+ ;
1441+"RTN","GMRCA2",30,0)
1442+SEL ;Select order number(s) exit: GMRCSEL
1443+"RTN","GMRCA2",31,0)
1444+ I $D(GMRC("NMBR")) S GMRCSEL=GMRC("NMBR") Q
1445+"RTN","GMRCA2",32,0)
1446+ I '$D(^TMP("GMRCR",$J,"CS","AD")) W !,"No orders to select.",! S GMRCQUT=1,GMRCSEL="" Q
1447+"RTN","GMRCA2",33,0)
1448+ I '$O(^TMP("GMRCR",$J,"CS","AD")),BLK=1 S GMRCSEL=BLK Q
1449+"RTN","GMRCA2",34,0)
1450+ S GMRCSEL="" W !,"CHOOSE No. 1-",BLK,": " R X:DTIME S:X="^^" DIROUT=1 I '$T!(X["^") S (DTOUT,GMRCQUT)=1 Q
1451+"RTN","GMRCA2",35,0)
1452+ I X["?" D SELHELP G SEL
1453+"RTN","GMRCA2",36,0)
1454+ I X="" S GMRCQUT=1 Q
1455+"RTN","GMRCA2",37,0)
1456+ I X'?.3N W $C(7)," ?? Enter the number from the far left of the list." G SEL
1457+"RTN","GMRCA2",38,0)
1458+ I $S(X>BLK:1,X<1:1,1:0) D SELHELP G SEL
1459+"RTN","GMRCA2",39,0)
1460+ S GMRCSEL=X
1461+"RTN","GMRCA2",40,0)
1462+ Q
1463+"RTN","GMRCA2",41,0)
1464+SELHELP ;Help to select a valid entry
1465+"RTN","GMRCA2",42,0)
1466+ W !,"Select a request by typing the number from the left column and pressing <ENTER>.",!
1467+"RTN","GMRCA2",43,0)
1468+ Q
1469+"RTN","GMRCA2",44,0)
1470+UP ;Convert lower to upper case entry: X exit: X
1471+"RTN","GMRCA2",45,0)
1472+ F %=1:1:$L(X) I $E(X,%)?1L S X=$E(X,1,%-1)_$C($A(X,%)-32)_$E(X,%+1,99)
1473+"RTN","GMRCA2",46,0)
1474+ Q
1475+"RTN","HLCSLNCH")
1476+0^18^B37119958
1477+"RTN","HLCSLNCH",1,0)
1478+HLCSLNCH ;ALB/MTC/JC MSC/JDA - START AND STOP THE LLP ;31JUL2009
1479+"RTN","HLCSLNCH",2,0)
1480+ ;;1.6;HEALTH LEVEL SEVEN;**6,19,43,49,57,75,84,109,MSC**;Oct 13, 1995
1481+"RTN","HLCSLNCH",3,0)
1482+ ;
1483+"RTN","HLCSLNCH",4,0)
1484+ ;This program is callable from a menu
1485+"RTN","HLCSLNCH",5,0)
1486+ ;It allows the user to Start and Stop the Lower Layer
1487+"RTN","HLCSLNCH",6,0)
1488+ ;Protocol in the Background or in the foreground
1489+"RTN","HLCSLNCH",7,0)
1490+ ;
1491+"RTN","HLCSLNCH",8,0)
1492+ ;Required or Optional INPUT PARAMETERS
1493+"RTN","HLCSLNCH",9,0)
1494+ ; None
1495+"RTN","HLCSLNCH",10,0)
1496+ ;
1497+"RTN","HLCSLNCH",11,0)
1498+ ;
1499+"RTN","HLCSLNCH",12,0)
1500+ ;Output variables
1501+"RTN","HLCSLNCH",13,0)
1502+ ; HLDP=IEN of Logical Link in file #870
1503+"RTN","HLCSLNCH",14,0)
1504+ ;(optional)HLTRACE=if SET it launches the LLP in the Foreground
1505+"RTN","HLCSLNCH",15,0)
1506+ ;(optional) ZTSK=if defined LLP was launched in the
1507+"RTN","HLCSLNCH",16,0)
1508+ ;background
1509+"RTN","HLCSLNCH",17,0)
1510+ ;
1511+"RTN","HLCSLNCH",18,0)
1512+ ;
1513+"RTN","HLCSLNCH",19,0)
1514+START ; Start up the lower level protocol
1515+"RTN","HLCSLNCH",20,0)
1516+ N DIC,DIRUT,DTOUT,DUOUT,HLDP,HLDAPP,HLJ,HLQUIT,HLTRACE
1517+"RTN","HLCSLNCH",21,0)
1518+ N HLPARM0,HLPARM4,HLTYPTR,HLBGR,X,Y,ZTCPU,ZTSK,ZTRTN,ZTDESC
1519+"RTN","HLCSLNCH",22,0)
1520+ W !!,"This option is used to launch the lower level protocol for the"
1521+"RTN","HLCSLNCH",23,0)
1522+ W !,"appropriate device. Please select the node with which you want"
1523+"RTN","HLCSLNCH",24,0)
1524+ W !,"to communicate",!
1525+"RTN","HLCSLNCH",25,0)
1526+ S DIC="^HLCS(870,",DIC(0)="QEAMZ" D ^DIC G:Y<0 STARTQ
1527+"RTN","HLCSLNCH",26,0)
1528+ S HLDP=+Y,HLDAPP=Y(0,0),HLTYPTR=+$P(Y(0),U,3),HLPARM0=Y(0)
1529+"RTN","HLCSLNCH",27,0)
1530+ ;-- check if parameter have been setup
1531+"RTN","HLCSLNCH",28,0)
1532+ ;-- check for LLP type
1533+"RTN","HLCSLNCH",29,0)
1534+ I 'HLTYPTR W !,$C(7),"A Lower Layer Protocol must be selected before start-up can occur." G STARTQ
1535+"RTN","HLCSLNCH",30,0)
1536+ ;-- get TCP information
1537+"RTN","HLCSLNCH",31,0)
1538+ S HLPARM4=$G(^HLCS(870,HLDP,400))
1539+"RTN","HLCSLNCH",32,0)
1540+ ;-- get routine (background job for LLP)
1541+"RTN","HLCSLNCH",33,0)
1542+ S HLBGR=$G(^HLCS(869.1,HLTYPTR,100))
1543+"RTN","HLCSLNCH",34,0)
1544+ ;-- get environment check routine (HLQUIT should be defined in fails)
1545+"RTN","HLCSLNCH",35,0)
1546+ S HLENV=$G(^HLCS(869.1,HLTYPTR,200))
1547+"RTN","HLCSLNCH",36,0)
1548+ ;
1549+"RTN","HLCSLNCH",37,0)
1550+ I HLBGR="" W !,$C(7),"No routine has been specified for this LLP." G STARTQ
1551+"RTN","HLCSLNCH",38,0)
1552+ ;
1553+"RTN","HLCSLNCH",39,0)
1554+ ;-- execute environment check routine if HLQUIT is defined then terminate
1555+"RTN","HLCSLNCH",40,0)
1556+ I HLENV'="" X HLENV G:$D(HLQUIT) STARTQ
1557+"RTN","HLCSLNCH",41,0)
1558+ ;Multi-Servers, only enable the link if not OpenM
1559+"RTN","HLCSLNCH",42,0)
1560+ I $P(HLPARM4,U,3)="M",$$NOTMULTI D G STARTQ
1561+"RTN","HLCSLNCH",43,0)
1562+ . 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."
1563+"RTN","HLCSLNCH",44,0)
1564+ . Q
1565+"RTN","HLCSLNCH",45,0)
1566+ ;
1567+"RTN","HLCSLNCH",46,0)
1568+ 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"
1569+"RTN","HLCSLNCH",47,0)
1570+ I $P(HLPARM0,U,11) W !,"The LLP was last shutdown on ",$$DAT2^HLUTIL1($P(HLPARM0,U,11)),"."
1571+"RTN","HLCSLNCH",48,0)
1572+ 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 !"
1573+"RTN","HLCSLNCH",49,0)
1574+ I $$TASK^HLUTIL1($P(HLPARM0,U,12)) D G STARTQ
1575+"RTN","HLCSLNCH",50,0)
1576+ . W !,$C(7),"NOTE: The lower level protocol for this application is already running."
1577+"RTN","HLCSLNCH",51,0)
1578+ I $P(HLPARM4,U,3)="C"&("N"[$P(HLPARM4,U,4)) D G STARTQ
1579+"RTN","HLCSLNCH",52,0)
1580+ .;4=status 9=Time Started, 10=Time Stopped, 11=Task Number
1581+"RTN","HLCSLNCH",53,0)
1582+ .;14=Shutdown LLP, 3=Device Type, 18=Gross Errors
1583+"RTN","HLCSLNCH",54,0)
1584+ .N HLJ,X
1585+"RTN","HLCSLNCH",55,0)
1586+ .I $P(HLPARM0,U,15)=0 W !,"This LLP is already enabled!" Q
1587+"RTN","HLCSLNCH",56,0)
1588+ .L +^HLCS(870,HLDP,0):2
1589+"RTN","HLCSLNCH",57,0)
1590+ .E W !,$C(7),"Unable to enable this LLP !" Q
1591+"RTN","HLCSLNCH",58,0)
1592+ .S X="HLJ(870,"""_HLDP_","")"
1593+"RTN","HLCSLNCH",59,0)
1594+ .S @X@(4)="Enabled",@X@(9)=$$NOW^XLFDT,@X@(14)=0
1595+"RTN","HLCSLNCH",60,0)
1596+ .D FILE^HLDIE("","HLJ","","START","HLCSLNCH") ;HL*1.6*109
1597+"RTN","HLCSLNCH",61,0)
1598+ .L -^HLCS(870,HLDP,0)
1599+"RTN","HLCSLNCH",62,0)
1600+ .W !,"This LLP has been enabled!"
1601+"RTN","HLCSLNCH",63,0)
1602+ .Q
1603+"RTN","HLCSLNCH",64,0)
1604+ 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.",!
1605+"RTN","HLCSLNCH",65,0)
1606+ ;
1607+"RTN","HLCSLNCH",66,0)
1608+ W ! S DIR(0)="SM^F:FOREGROUND;B:BACKGROUND;Q:QUIT"
1609+"RTN","HLCSLNCH",67,0)
1610+ S DIR("A")="Method for running the receiver"
1611+"RTN","HLCSLNCH",68,0)
1612+ S DIR("B")="B"
1613+"RTN","HLCSLNCH",69,0)
1614+ S DIR("?",1)="Enter F for Foreground (and trace)"
1615+"RTN","HLCSLNCH",70,0)
1616+ S DIR("?",2)=" B for Background (normal) or"
1617+"RTN","HLCSLNCH",71,0)
1618+ S DIR("?")=" Q to quit without starting the receiver"
1619+"RTN","HLCSLNCH",72,0)
1620+ D ^DIR K DIR
1621+"RTN","HLCSLNCH",73,0)
1622+ Q:(Y=U)!(Y="Q")
1623+"RTN","HLCSLNCH",74,0)
1624+ ;
1625+"RTN","HLCSLNCH",75,0)
1626+ S HLX=$G(^HLCS(870,HLDP,0))
1627+"RTN","HLCSLNCH",76,0)
1628+ ;-- foreground
1629+"RTN","HLCSLNCH",77,0)
1630+ I Y="F" S HLTRACE=1 D G STARTQ
1631+"RTN","HLCSLNCH",78,0)
1632+ . X HLBGR
1633+"RTN","HLCSLNCH",79,0)
1634+ ;-- background
1635+"RTN","HLCSLNCH",80,0)
1636+ I Y="B" D G STARTQ
1637+"RTN","HLCSLNCH",81,0)
1638+ . S ZTRTN=$P(HLBGR," ",2),HLTRACE="",ZTIO="",ZTDTH=$H
1639+"RTN","HLCSLNCH",82,0)
1640+ . S ZTDESC=HLDAPP_" Low Level Protocol",ZTSAVE("HLDP")=""
1641+"RTN","HLCSLNCH",83,0)
1642+ . D ^%ZTLOAD
1643+"RTN","HLCSLNCH",84,0)
1644+ . W !,$S($D(ZTSK):"Job was queued as "_ZTSK_".",1:"Unable to queue job.")
1645+"RTN","HLCSLNCH",85,0)
1646+ ;
1647+"RTN","HLCSLNCH",86,0)
1648+ Q
1649+"RTN","HLCSLNCH",87,0)
1650+ ;
1651+"RTN","HLCSLNCH",88,0)
1652+ ;
1653+"RTN","HLCSLNCH",89,0)
1654+STARTQ ;
1655+"RTN","HLCSLNCH",90,0)
1656+ 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."
1657+"RTN","HLCSLNCH",91,0)
1658+ Q
1659+"RTN","HLCSLNCH",92,0)
1660+ ;
1661+"RTN","HLCSLNCH",93,0)
1662+STOP ; Shut down a lower level protocol..
1663+"RTN","HLCSLNCH",94,0)
1664+ N DIC,DIRUT,DTOUT,DUOUT,HLDP,HLDAPP,HLJ,HLPARM0,HLPARM4,X,Y
1665+"RTN","HLCSLNCH",95,0)
1666+ W !!,"This option is used to shut down the lower level protocol for the"
1667+"RTN","HLCSLNCH",96,0)
1668+ W !,"appropriate device. Please select the link which you would"
1669+"RTN","HLCSLNCH",97,0)
1670+ W !,"like to shutdown.",!
1671+"RTN","HLCSLNCH",98,0)
1672+ S DIC="^HLCS(870,",DIC(0)="QEAMZ" D ^DIC K DIC Q:Y<0
1673+"RTN","HLCSLNCH",99,0)
1674+ S HLDP=+Y,HLDAPP=Y(0,0),HLPARM0=Y(0),HLPARM4=$G(^HLCS(870,HLDP,400))
1675+"RTN","HLCSLNCH",100,0)
1676+ I $P(HLPARM4,U,3)="M",$$NOTMULTI D Q
1677+"RTN","HLCSLNCH",101,0)
1678+ . 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."
1679+"RTN","HLCSLNCH",102,0)
1680+ . Q
1681+"RTN","HLCSLNCH",103,0)
1682+ ;
1683+"RTN","HLCSLNCH",104,0)
1684+ I $P(HLPARM0,U,15) W !,$C(7),"The lower level protocol is already ",$P(HLPARM0,U,5),"." Q
1685+"RTN","HLCSLNCH",105,0)
1686+ I $P(HLPARM0,U,10) W !,$C(7),"The lower level protocol was started on ",$$DAT2^HLUTIL1($P(HLPARM0,U,10)),"."
1687+"RTN","HLCSLNCH",106,0)
1688+STP1 ;
1689+"RTN","HLCSLNCH",107,0)
1690+ W ! S DIR(0)="Y",DIR("A")="Okay to shut down this job" D ^DIR K DIR
1691+"RTN","HLCSLNCH",108,0)
1692+ I 'Y!($D(DIRUT))!($D(DUOUT)) W !!,"The job will not be shut down." Q
1693+"RTN","HLCSLNCH",109,0)
1694+S ;
1695+"RTN","HLCSLNCH",110,0)
1696+ F L +^HLCS(870,HLDP,0):2 Q:$T
1697+"RTN","HLCSLNCH",111,0)
1698+ ;4=status,10=Time Stopped,9=Time Started,11=Task Number,3=Device Type,14=shutdown
1699+"RTN","HLCSLNCH",112,0)
1700+ S X="HLJ(870,"""_HLDP_","")",@X@(4)="Halting",@X@(10)=$$NOW^XLFDT,(@X@(11),@X@(9))="@",@X@(14)=1
1701+"RTN","HLCSLNCH",113,0)
1702+ I $P(HLPARM4,U,3)="C"&("N"[$P(HLPARM4,U,4)),'$P(HLPARM0,U,12) S @X@(4)="Shutdown"
1703+"RTN","HLCSLNCH",114,0)
1704+ D FILE^HLDIE("","HLJ","","STOP","HLCSLNCH") ; HL*1.6*109
1705+"RTN","HLCSLNCH",115,0)
1706+ S $ETRAP=""
1707+"RTN","HLCSLNCH",116,0)
1708+ I ($P(HLPARM4,U,3)="M"&'$$NOTMULTI())!($P(HLPARM4,U,3)="S") D
1709+"RTN","HLCSLNCH",117,0)
1710+ . ;pass task number to stop listener
1711+"RTN","HLCSLNCH",118,0)
1712+ . S:$P(HLPARM0,U,12) X=$$ASKSTOP^%ZTLOAD(+$P(HLPARM0,U,12))
1713+"RTN","HLCSLNCH",119,0)
1714+ . D CALL^%ZISTCP($P(HLPARM4,U),$P(HLPARM4,U,2),10)
1715+"RTN","HLCSLNCH",120,0)
1716+ . I POP D HOME^%ZIS U IO W !,"Unable to shutdown logical link!!!",$C(7),$C(7) Q
1717+"RTN","HLCSLNCH",121,0)
1718+ . U IO W "**STOP**"
1719+"RTN","HLCSLNCH",122,0)
1720+ . W !
1721+"RTN","HLCSLNCH",123,0)
1722+ . D CLOSE^%ZISTCP
1723+"RTN","HLCSLNCH",124,0)
1724+ L -^HLCS(870,HLDP,0)
1725+"RTN","HLCSLNCH",125,0)
1726+ W !,"The job for the "_HLDAPP_" Lower Level Protocol will be shut down."
1727+"RTN","HLCSLNCH",126,0)
1728+ Q
1729+"RTN","HLCSLNCH",127,0)
1730+ ;
1731+"RTN","HLCSLNCH",128,0)
1732+NOTMULTI() ; Returns 1 if implementation can't run multithreaded listener
1733+"RTN","HLCSLNCH",129,0)
1734+ Q:^%ZOSF("OS")["GT.M" 0
1735+"RTN","HLCSLNCH",130,0)
1736+ Q $S(^%ZOSF("OS")'["OpenM":1,1:$$OS^%ZOSV["VMS")
1737+"RTN","HLCSLNCH",131,0)
1738+STOPQ Q
1739+"RTN","HLCSTCP")
1740+0^17^B32647785
1741+"RTN","HLCSTCP",1,0)
1742+HLCSTCP ;SFIRMFO/TNV-ALB/JFP,PKE MSC/JDS - (TCP/IP) MLLP ;25NOV2009
1743+"RTN","HLCSTCP",2,0)
1744+ ;;1.6;HEALTH LEVEL SEVEN;**19,43,49,57,58,64,84,109,MSC**;Oct 13, 1995
1745+"RTN","HLCSTCP",3,0)
1746+ ;
1747+"RTN","HLCSTCP",4,0)
1748+ ; This is an implementation of the HL7 Minimal Lower Layer Protocol
1749+"RTN","HLCSTCP",5,0)
1750+ ;
1751+"RTN","HLCSTCP",6,0)
1752+ ;taskman entry/startup option, HLDP defined in menu entry,
1753+"RTN","HLCSTCP",7,0)
1754+ Q:'$D(HLDP)
1755+"RTN","HLCSTCP",8,0)
1756+ N HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL
1757+"RTN","HLCSTCP",9,0)
1758+ ;HLCSOUT= 1-error
1759+"RTN","HLCSTCP",10,0)
1760+ I '$$INIT D EXITS("Init Error") Q
1761+"RTN","HLCSTCP",11,0)
1762+ ; Start the client
1763+"RTN","HLCSTCP",12,0)
1764+ I $G(HLTCPCS)="C" D Q
1765+"RTN","HLCSTCP",13,0)
1766+ . ; identify process for ^%SY
1767+"RTN","HLCSTCP",14,0)
1768+ . D SETNM^%ZOSV($E("HLClnt:"_HLDP,1,15))
1769+"RTN","HLCSTCP",15,0)
1770+ . D ST1
1771+"RTN","HLCSTCP",16,0)
1772+ . F D ^HLCSTCP2 Q:$$STOP!$G(HLCSOUT)
1773+"RTN","HLCSTCP",17,0)
1774+ . I $G(HLCSOUT)=1 D MON("Error") H 1 Q
1775+"RTN","HLCSTCP",18,0)
1776+ . I $G(HLCSOUT)=2 D EXITS("Inactive") Q
1777+"RTN","HLCSTCP",19,0)
1778+ . D EXITS("Shutdown")
1779+"RTN","HLCSTCP",20,0)
1780+ ;
1781+"RTN","HLCSTCP",21,0)
1782+ ; identify process for ^%SY
1783+"RTN","HLCSTCP",22,0)
1784+ D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15))
1785+"RTN","HLCSTCP",23,0)
1786+ ;HLCSFAIL=1 port failed to open
1787+"RTN","HLCSTCP",24,0)
1788+ S HLCSFAIL=1
1789+"RTN","HLCSTCP",25,0)
1790+ ;single threaded listener
1791+"RTN","HLCSTCP",26,0)
1792+ I $G(HLTCPCS)="S" D Q
1793+"RTN","HLCSTCP",27,0)
1794+ . D ST1,MON("Listen"),LISTEN^%ZISTCP(HLTCPORT,"SERVER^HLCSTCP("""_HLDP_""")")
1795+"RTN","HLCSTCP",28,0)
1796+ . ;couldn't open listener port
1797+"RTN","HLCSTCP",29,0)
1798+ . I $$STOP D CLOSE^%ZISTCP,EXITS("Shutdown") S IO("C")="" Q
1799+"RTN","HLCSTCP",30,0)
1800+ . I HLCSFAIL D EXITS("Openfail") Q
1801+"RTN","HLCSTCP",31,0)
1802+ ;
1803+"RTN","HLCSTCP",32,0)
1804+ ;multi-threaded listener (OpenM or GT.M)
1805+"RTN","HLCSTCP",33,0)
1806+ I $G(HLTCPCS)="M",(^%ZOSF("OS")["OpenM")!(^%ZOSF("OS")["GT.M") D Q
1807+"RTN","HLCSTCP",34,0)
1808+ . D ST1,MON("Listen"),LISTEN^%ZISTCPS(HLTCPORT,"SERVERS^HLCSTCP("""_HLDP_""")")
1809+"RTN","HLCSTCP",35,0)
1810+ Q
1811+"RTN","HLCSTCP",36,0)
1812+ ;
1813+"RTN","HLCSTCP",37,0)
1814+SERVER(HLDP) ; single server using Taskman
1815+"RTN","HLCSTCP",38,0)
1816+ S HLCSFAIL=0
1817+"RTN","HLCSTCP",39,0)
1818+ I '$$INIT D EXITS("Init error") Q
1819+"RTN","HLCSTCP",40,0)
1820+ D ^HLCSTCP1
1821+"RTN","HLCSTCP",41,0)
1822+ I $$STOP D CLOSE^%ZISTCP,EXITS("Shutdown") S IO("C")="" Q
1823+"RTN","HLCSTCP",42,0)
1824+ Q:$G(HLCSOUT)=1
1825+"RTN","HLCSTCP",43,0)
1826+ D MON("Idle")
1827+"RTN","HLCSTCP",44,0)
1828+ Q
1829+"RTN","HLCSTCP",45,0)
1830+ ;
1831+"RTN","HLCSTCP",46,0)
1832+SERVERS(HLDP) ; Multi-threaded server using Taskman
1833+"RTN","HLCSTCP",47,0)
1834+ I '$$INIT D EXITS("Init error") Q
1835+"RTN","HLCSTCP",48,0)
1836+ G LISTEN
1837+"RTN","HLCSTCP",49,0)
1838+ ;
1839+"RTN","HLCSTCP",50,0)
1840+ ;multiple process servers, called from an external utility
1841+"RTN","HLCSTCP",51,0)
1842+MSM ;MSM entry point, called from User-Defined Services
1843+"RTN","HLCSTCP",52,0)
1844+ ;HLDP=ien in the HL LOWER LEVEL PROTOCOL PARAMETER file for the
1845+"RTN","HLCSTCP",53,0)
1846+ ;HL7 Multi-Threaded SERVER
1847+"RTN","HLCSTCP",54,0)
1848+ S (IO,IO(0))=$P
1849+"RTN","HLCSTCP",55,0)
1850+ G LISTEN
1851+"RTN","HLCSTCP",56,0)
1852+ ;
1853+"RTN","HLCSTCP",57,0)
1854+CACHEVMS(%) ;Cache'/VMS tcpip/ucx entry point, called from HLSEVEN.COM file,
1855+"RTN","HLCSTCP",58,0)
1856+ ;listener, % = HLDP
1857+"RTN","HLCSTCP",59,0)
1858+ I $G(%)="" D ^%ZTER Q
1859+"RTN","HLCSTCP",60,0)
1860+ S (IO,IO(0))="SYS$NET",HLDP=%
1861+"RTN","HLCSTCP",61,0)
1862+ ; **Cache'/VMS specific code**
1863+"RTN","HLCSTCP",62,0)
1864+ O IO::5 E D MON("Openfail") Q
1865+"RTN","HLCSTCP",63,0)
1866+ X "U IO:(::""-M"")" ;Packet mode like DSM
1867+"RTN","HLCSTCP",64,0)
1868+ D LISTEN C IO Q
1869+"RTN","HLCSTCP",65,0)
1870+ ;
1871+"RTN","HLCSTCP",66,0)
1872+EN ;vms ucx entry point, called from HLSEVEN.COM file,
1873+"RTN","HLCSTCP",67,0)
1874+ ;listener, % = device^HLDP
1875+"RTN","HLCSTCP",68,0)
1876+ I $G(%)="" D ^%ZTER Q
1877+"RTN","HLCSTCP",69,0)
1878+ S (IO,IO(0))="SYS$NET",HLDP=$P(%,"^",2)
1879+"RTN","HLCSTCP",70,0)
1880+ ; **VMS specific code, need to share device**
1881+"RTN","HLCSTCP",71,0)
1882+ X "O IO:(TCPDEV):60" E D MON("Openfail") Q
1883+"RTN","HLCSTCP",72,0)
1884+LISTEN ;
1885+"RTN","HLCSTCP",73,0)
1886+ N HLLSTN,HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL
1887+"RTN","HLCSTCP",74,0)
1888+ I '$$INIT D ^%ZTER Q
1889+"RTN","HLCSTCP",75,0)
1890+ ; identify process for ^%SY
1891+"RTN","HLCSTCP",76,0)
1892+ D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15))
1893+"RTN","HLCSTCP",77,0)
1894+ ;HLLSTN used to identify a listener to tag MON
1895+"RTN","HLCSTCP",78,0)
1896+ S HLLSTN=1
1897+"RTN","HLCSTCP",79,0)
1898+ ;increment job count, run server
1899+"RTN","HLCSTCP",80,0)
1900+ D UPDT(1),^HLCSTCP1,EXITM
1901+"RTN","HLCSTCP",81,0)
1902+ Q
1903+"RTN","HLCSTCP",82,0)
1904+ ;
1905+"RTN","HLCSTCP",83,0)
1906+DCOPEN(HLDP) ;open direct connect - called from HLMA2
1907+"RTN","HLCSTCP",84,0)
1908+ Q:'$$INIT 0
1909+"RTN","HLCSTCP",85,0)
1910+ Q:HLTCPADD=""!(HLTCPORT="") 0
1911+"RTN","HLCSTCP",86,0)
1912+ Q:'$$OPEN^HLCSTCP2 0
1913+"RTN","HLCSTCP",87,0)
1914+ Q 1
1915+"RTN","HLCSTCP",88,0)
1916+ ;
1917+"RTN","HLCSTCP",89,0)
1918+INIT() ; Initialize Variables
1919+"RTN","HLCSTCP",90,0)
1920+ ; HLDP should be set to the IEN or name of Logical Link, file 870
1921+"RTN","HLCSTCP",91,0)
1922+ S HLOS=$P($G(^%ZOSF("OS")),"^")
1923+"RTN","HLCSTCP",92,0)
1924+ N DA,DIQUIET,DR,TMP,X,Y
1925+"RTN","HLCSTCP",93,0)
1926+ S DIQUIET=1
1927+"RTN","HLCSTCP",94,0)
1928+ D DT^DICRW
1929+"RTN","HLCSTCP",95,0)
1930+ I 'HLDP S HLDP=$O(^HLCS(870,"B",HLDP,0)) I 'HLDP Q 0
1931+"RTN","HLCSTCP",96,0)
1932+ S DA=HLDP
1933+"RTN","HLCSTCP",97,0)
1934+ S DR="200.02;200.021;200.03;200.04;200.05;200.09;400.01;400.02;400.03;400.04;400.05"
1935+"RTN","HLCSTCP",98,0)
1936+ D GETS^DIQ(870,DA,DR,"IN","TMP","TMP")
1937+"RTN","HLCSTCP",99,0)
1938+ ;
1939+"RTN","HLCSTCP",100,0)
1940+ I $D(TMP("DIERR")) QUIT 0
1941+"RTN","HLCSTCP",101,0)
1942+ ; -- re-transmit attempts
1943+"RTN","HLCSTCP",102,0)
1944+ S HLDRETR=+$G(TMP(870,DA_",",200.02,"I"))
1945+"RTN","HLCSTCP",103,0)
1946+ ; -- exceed re-transmit action
1947+"RTN","HLCSTCP",104,0)
1948+ S HLRETRA=$G(TMP(870,DA_",",200.021,"I"))
1949+"RTN","HLCSTCP",105,0)
1950+ ; -- block size
1951+"RTN","HLCSTCP",106,0)
1952+ S HLDBSIZE=+$G(TMP(870,DA_",",200.03,"I"))
1953+"RTN","HLCSTCP",107,0)
1954+ ; -- read timeout
1955+"RTN","HLCSTCP",108,0)
1956+ S HLDREAD=+$G(TMP(870,DA_",",200.04,"I"))
1957+"RTN","HLCSTCP",109,0)
1958+ ; -- ack timeout
1959+"RTN","HLCSTCP",110,0)
1960+ S HLDBACK=+$G(TMP(870,DA_",",200.05,"I"))
1961+"RTN","HLCSTCP",111,0)
1962+ ; -- uni-directional wait
1963+"RTN","HLCSTCP",112,0)
1964+ S HLDWAIT=$G(TMP(870,DA_",",200.09,"I"))
1965+"RTN","HLCSTCP",113,0)
1966+ ; -- tcp address
1967+"RTN","HLCSTCP",114,0)
1968+ S HLTCPADD=$G(TMP(870,DA_",",400.01,"I"))
1969+"RTN","HLCSTCP",115,0)
1970+ ; -- tcp port
1971+"RTN","HLCSTCP",116,0)
1972+ S HLTCPORT=$G(TMP(870,DA_",",400.02,"I"))
1973+"RTN","HLCSTCP",117,0)
1974+ ; -- tcp/ip service type
1975+"RTN","HLCSTCP",118,0)
1976+ S HLTCPCS=$G(TMP(870,DA_",",400.03,"I"))
1977+"RTN","HLCSTCP",119,0)
1978+ ; -- link persistence
1979+"RTN","HLCSTCP",120,0)
1980+ S HLTCPLNK=$G(TMP(870,DA_",",400.04,"I"))
1981+"RTN","HLCSTCP",121,0)
1982+ ; -- retention
1983+"RTN","HLCSTCP",122,0)
1984+ S HLTCPRET=$G(TMP(870,DA_",",400.05,"I"))
1985+"RTN","HLCSTCP",123,0)
1986+ ;
1987+"RTN","HLCSTCP",124,0)
1988+ ; -- set defaults in case something's not set
1989+"RTN","HLCSTCP",125,0)
1990+ S:HLDREAD=0 HLDREAD=10
1991+"RTN","HLCSTCP",126,0)
1992+ S:HLDBACK=0 HLDBACK=60
1993+"RTN","HLCSTCP",127,0)
1994+ S:HLDBSIZE=0 HLDBSIZE=245
1995+"RTN","HLCSTCP",128,0)
1996+ S:HLDRETR=0 HLDRETR=5
1997+"RTN","HLCSTCP",129,0)
1998+ S:HLTCPRET="" X=$P($$PARAM^HLCS2,U,12),HLTCPRET=$S(X:X,1:15)
1999+"RTN","HLCSTCP",130,0)
2000+ ;
2001+"RTN","HLCSTCP",131,0)
2002+ Q 1
2003+"RTN","HLCSTCP",132,0)
2004+ ;
2005+"RTN","HLCSTCP",133,0)
2006+ST1 ;record startup in 870 for single server
2007+"RTN","HLCSTCP",134,0)
2008+ ;4=status 9=Time Started, 10=Time Stopped, 11=Task Number
2009+"RTN","HLCSTCP",135,0)
2010+ ;14=Shutdown LLP, 3=LLP Online, 18=Gross Errors
2011+"RTN","HLCSTCP",136,0)
2012+ N HLJ,X
2013+"RTN","HLCSTCP",137,0)
2014+ F L +^HLCS(870,HLDP,0):2 Q:$T
2015+"RTN","HLCSTCP",138,0)
2016+ S X="HLJ(870,"""_HLDP_","")"
2017+"RTN","HLCSTCP",139,0)
2018+ S @X@(4)="Init",(@X@(10),@X@(18))="@",@X@(14)=0
2019+"RTN","HLCSTCP",140,0)
2020+ I HLTCPCS["C" S @X@(3)=$S(HLTCPLNK["Y":"PC",1:"NC")
2021+"RTN","HLCSTCP",141,0)
2022+ E S @X@(3)=$S(HLTCPCS["S":"SS",HLTCPCS["M":"MS",1:"")
2023+"RTN","HLCSTCP",142,0)
2024+ I @X@(3)'="NC" S @X@(9)=$$NOW^XLFDT
2025+"RTN","HLCSTCP",143,0)
2026+ S:$G(ZTSK) @X@(11)=ZTSK
2027+"RTN","HLCSTCP",144,0)
2028+ D FILE^HLDIE("","HLJ","","ST1","HLCSTCP") ;HL*1.6*109
2029+"RTN","HLCSTCP",145,0)
2030+ L -^HLCS(870,HLDP,0)
2031+"RTN","HLCSTCP",146,0)
2032+ Q
2033+"RTN","HLCSTCP",147,0)
2034+ ;
2035+"RTN","HLCSTCP",148,0)
2036+MON(Y) ;Display current state & check for shutdown
2037+"RTN","HLCSTCP",149,0)
2038+ ;don't display for multiple server
2039+"RTN","HLCSTCP",150,0)
2040+ Q:$G(HLLSTN)
2041+"RTN","HLCSTCP",151,0)
2042+ F L +^HLCS(870,HLDP,0):2 Q:$T
2043+"RTN","HLCSTCP",152,0)
2044+ S $P(^HLCS(870,HLDP,0),U,5)=Y
2045+"RTN","HLCSTCP",153,0)
2046+ L -^HLCS(870,HLDP,0)
2047+"RTN","HLCSTCP",154,0)
2048+ Q:'$D(HLTRACE)
2049+"RTN","HLCSTCP",155,0)
2050+ N X U IO(0)
2051+"RTN","HLCSTCP",156,0)
2052+ W !,"IN State: ",Y
2053+"RTN","HLCSTCP",157,0)
2054+ I '$$STOP D
2055+"RTN","HLCSTCP",158,0)
2056+ . R !,"Type Q to Quit: ",X#1:1
2057+"RTN","HLCSTCP",159,0)
2058+ . I $L(X),"Qq"[X S $P(^HLCS(870,HLDP,0),U,15)=1
2059+"RTN","HLCSTCP",160,0)
2060+ U IO
2061+"RTN","HLCSTCP",161,0)
2062+ Q
2063+"RTN","HLCSTCP",162,0)
2064+UPDT(Y) ;update job count for multiple servers,X=1 increment
2065+"RTN","HLCSTCP",163,0)
2066+ N HLJ,X
2067+"RTN","HLCSTCP",164,0)
2068+ F L +^HLCS(870,HLDP,0):2 Q:$T
2069+"RTN","HLCSTCP",165,0)
2070+ S X=+$P(^HLCS(870,HLDP,0),U,5),$P(^(0),U,5)=$S(Y:X+1,1:X-1)_" server"
2071+"RTN","HLCSTCP",166,0)
2072+ ;if incrementing, set the Device Type field to Multi-Server
2073+"RTN","HLCSTCP",167,0)
2074+ I X S HLJ(870,HLDP_",",3)="MS" D FILE^HLDIE("","HLJ","","UPDT","HLCSTCP") ;HL*1.6*109
2075+"RTN","HLCSTCP",168,0)
2076+ L -^HLCS(870,HLDP,0)
2077+"RTN","HLCSTCP",169,0)
2078+ Q
2079+"RTN","HLCSTCP",170,0)
2080+STOP() ;stop flag set
2081+"RTN","HLCSTCP",171,0)
2082+ N X
2083+"RTN","HLCSTCP",172,0)
2084+ F L +^HLCS(870,HLDP,0):2 Q:$T
2085+"RTN","HLCSTCP",173,0)
2086+ S X=+$P(^HLCS(870,HLDP,0),U,15)
2087+"RTN","HLCSTCP",174,0)
2088+ L -^HLCS(870,HLDP,0)
2089+"RTN","HLCSTCP",175,0)
2090+ Q X
2091+"RTN","HLCSTCP",176,0)
2092+ ;
2093+"RTN","HLCSTCP",177,0)
2094+LLCNT(DP,Y,Z) ;update Logical Link counters
2095+"RTN","HLCSTCP",178,0)
2096+ ;DP=ien of Logical Link in file 870
2097+"RTN","HLCSTCP",179,0)
2098+ ;Y: 1=msg rec, 2=msg proc, 3=msg to send, 4=msg sent
2099+"RTN","HLCSTCP",180,0)
2100+ ;Z: ""=add to counter, 1=subtract from counter
2101+"RTN","HLCSTCP",181,0)
2102+ Q:'$D(^HLCS(870,+$G(DP),0))!('$G(Y))
2103+"RTN","HLCSTCP",182,0)
2104+ N P,X
2105+"RTN","HLCSTCP",183,0)
2106+ S P=$S(Y<3:"IN",1:"OUT")_" QUEUE "_$S(Y#2:"BACK",1:"FRONT")_" POINTER"
2107+"RTN","HLCSTCP",184,0)
2108+ F L +^HLCS(870,DP,P):2 Q:$T
2109+"RTN","HLCSTCP",185,0)
2110+ S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1)
2111+"RTN","HLCSTCP",186,0)
2112+ L -^HLCS(870,DP,P)
2113+"RTN","HLCSTCP",187,0)
2114+ Q
2115+"RTN","HLCSTCP",188,0)
2116+SDFLD ; set Shutdown? field to yes
2117+"RTN","HLCSTCP",189,0)
2118+ Q:'$G(HLDP)
2119+"RTN","HLCSTCP",190,0)
2120+ N HLJ,X
2121+"RTN","HLCSTCP",191,0)
2122+ F L +^HLCS(870,HLDP,0):2 Q:$T
2123+"RTN","HLCSTCP",192,0)
2124+ ;14=Shutdown LLP?
2125+"RTN","HLCSTCP",193,0)
2126+ S HLJ(870,HLDP_",",14)=1
2127+"RTN","HLCSTCP",194,0)
2128+ D FILE^HLDIE("","HLJ","","SDFLD","HLCSTCP") ;HL*1.6*109
2129+"RTN","HLCSTCP",195,0)
2130+ L -^HLCS(870,HLDP,0)
2131+"RTN","HLCSTCP",196,0)
2132+ Q
2133+"RTN","HLCSTCP",197,0)
2134+ ;
2135+"RTN","HLCSTCP",198,0)
2136+EXITS(Y) ; Single service shutdown and cleans up
2137+"RTN","HLCSTCP",199,0)
2138+ N HLJ,X
2139+"RTN","HLCSTCP",200,0)
2140+ F L +^HLCS(870,HLDP,0):2 Q:$T
2141+"RTN","HLCSTCP",201,0)
2142+ ;4=status,10=Time Stopped,9=Time Started,11=Task Number
2143+"RTN","HLCSTCP",202,0)
2144+ S X="HLJ(870,"""_HLDP_","")"
2145+"RTN","HLCSTCP",203,0)
2146+ S @X@(4)=Y,@X@(11)="@"
2147+"RTN","HLCSTCP",204,0)
2148+ S:$G(HLCSOUT)'=2 @X@(10)=$$NOW^XLFDT,@X@(9)="@"
2149+"RTN","HLCSTCP",205,0)
2150+ D FILE^HLDIE("","HLJ","","EXITS","HLCSTCP") ; HL*1.6*109
2151+"RTN","HLCSTCP",206,0)
2152+ L -^HLCS(870,HLDP,0)
2153+"RTN","HLCSTCP",207,0)
2154+ I $D(ZTQUEUED) S ZTREQ="@"
2155+"RTN","HLCSTCP",208,0)
2156+ Q
2157+"RTN","HLCSTCP",209,0)
2158+ ;
2159+"RTN","HLCSTCP",210,0)
2160+EXITM ;Multiple service shutdown and clean up
2161+"RTN","HLCSTCP",211,0)
2162+ D UPDT(0)
2163+"RTN","HLCSTCP",212,0)
2164+ I $D(ZTQUEUED) S ZTREQ="@"
2165+"RTN","HLCSTCP",213,0)
2166+ Q
2167+"RTN","HLCSTCP1")
2168+0^16^B29662559
2169+"RTN","HLCSTCP1",1,0)
2170+HLCSTCP1 ;SFIRMFO/RSD MSC/JDA - BI-DIRECTIONAL TCP ;13APR2009
2171+"RTN","HLCSTCP1",2,0)
2172+ ;;1.6;HEALTH LEVEL SEVEN;**19,43,57,64,71,MSC**;JUL 17,1995
2173+"RTN","HLCSTCP1",3,0)
2174+ ;Receiver
2175+"RTN","HLCSTCP1",4,0)
2176+ ;connection is initiated by sender and listener accepts connection
2177+"RTN","HLCSTCP1",5,0)
2178+ ;and calls this routine
2179+"RTN","HLCSTCP1",6,0)
2180+ ;
2181+"RTN","HLCSTCP1",7,0)
2182+ N $ETRAP,$ESTACK S $ETRAP="D ERROR^HLCSTCP1"
2183+"RTN","HLCSTCP1",8,0)
2184+ N HLMIEN,HLASTMSG
2185+"RTN","HLCSTCP1",9,0)
2186+ D MON^HLCSTCP("Open")
2187+"RTN","HLCSTCP1",10,0)
2188+ K ^TMP("HLCSTCP",$J,0)
2189+"RTN","HLCSTCP1",11,0)
2190+ S HLMIEN=0,HLASTMSG=""
2191+"RTN","HLCSTCP1",12,0)
2192+ F D Q:$$STOP^HLCSTCP I 'HLMIEN D MON^HLCSTCP("Idle") H 3
2193+"RTN","HLCSTCP1",13,0)
2194+ . S HLMIEN=$$READ
2195+"RTN","HLCSTCP1",14,0)
2196+ . Q:'HLMIEN
2197+"RTN","HLCSTCP1",15,0)
2198+ . D PROCESS
2199+"RTN","HLCSTCP1",16,0)
2200+ Q
2201+"RTN","HLCSTCP1",17,0)
2202+ ;
2203+"RTN","HLCSTCP1",18,0)
2204+PROCESS ;check message and reply
2205+"RTN","HLCSTCP1",19,0)
2206+ ;HLDP=LL in 870, update monitor, received msg.
2207+"RTN","HLCSTCP1",20,0)
2208+ N HLTCP,HLTCPI,HLTCPO
2209+"RTN","HLCSTCP1",21,0)
2210+ S HLTCP="",HLTCPO=HLDP,HLTCPI=+HLMIEN
2211+"RTN","HLCSTCP1",22,0)
2212+ ;update monitor, msg. received
2213+"RTN","HLCSTCP1",23,0)
2214+ D LLCNT^HLCSTCP(HLDP,1)
2215+"RTN","HLCSTCP1",24,0)
2216+ D NEW^HLTP3(HLMIEN)
2217+"RTN","HLCSTCP1",25,0)
2218+ ;update monitor, msg. processed
2219+"RTN","HLCSTCP1",26,0)
2220+ D LLCNT^HLCSTCP(HLDP,2)
2221+"RTN","HLCSTCP1",27,0)
2222+ Q
2223+"RTN","HLCSTCP1",28,0)
2224+ ;
2225+"RTN","HLCSTCP1",29,0)
2226+READ() ;read 1 message, returns ien in 773^ien in 772 for message
2227+"RTN","HLCSTCP1",30,0)
2228+ D MON^HLCSTCP("Reading")
2229+"RTN","HLCSTCP1",31,0)
2230+ N HLDB,HLDT,HLDEND,HLACKWT,HLDSTRT,HLHDR,HLIND1,HLINE,HLMSG,HLRDOUT,HLRS,HLX,X
2231+"RTN","HLCSTCP1",32,0)
2232+ ;HLDSTRT=start char., HLDEND=end char., HLRS=record seperator
2233+"RTN","HLCSTCP1",33,0)
2234+ S HLDSTRT=$C(11),HLDEND=$C(28),HLRS=$C(13)
2235+"RTN","HLCSTCP1",34,0)
2236+ ;HLRDOUT=exit read loop, HLINE=line count, HLIND1=ien 773^ien 772
2237+"RTN","HLCSTCP1",35,0)
2238+ ;HLHDR=have a header, ^TMP(...)=excess from last read, HLACKWT=wait for ack
2239+"RTN","HLCSTCP1",36,0)
2240+ S (HLRDOUT,HLINE,HLIND1,HLHDR)=0,HLX=$G(^TMP("HLCSTCP",$J,0)),HLACKWT=HLDBACK
2241+"RTN","HLCSTCP1",37,0)
2242+ K ^TMP("HLCSTCP",$J,0)
2243+"RTN","HLCSTCP1",38,0)
2244+ F D RDBLK Q:HLRDOUT
2245+"RTN","HLCSTCP1",39,0)
2246+ ;save any excess for next time
2247+"RTN","HLCSTCP1",40,0)
2248+ S:$L(HLX) ^TMP("HLCSTCP",$J,0)=HLX
2249+"RTN","HLCSTCP1",41,0)
2250+ I +HLIND1,'$P(HLIND1,U,3) D DELMSG(HLIND1) S HLIND1=0
2251+"RTN","HLCSTCP1",42,0)
2252+ Q HLIND1
2253+"RTN","HLCSTCP1",43,0)
2254+ ;
2255+"RTN","HLCSTCP1",44,0)
2256+RDBLK S HLDB=HLDBSIZE-$L(HLX)
2257+"RTN","HLCSTCP1",45,0)
2258+ U IO D:$D ERROR R X#HLDB:HLDREAD ; MSC/JDA added check against $d
2259+"RTN","HLCSTCP1",46,0)
2260+ ; timedout or error, check ack timeout, clean up
2261+"RTN","HLCSTCP1",47,0)
2262+ I '$T,X="",HLX="" S HLACKWT=HLACKWT-HLDREAD D:HLACKWT<0&'HLHDR CLEAN Q
2263+"RTN","HLCSTCP1",48,0)
2264+ ;data stream: <sb>dddd<cr><eb><cr>
2265+"RTN","HLCSTCP1",49,0)
2266+ ;add incoming line to what wasn't processed in last read
2267+"RTN","HLCSTCP1",50,0)
2268+ S HLX=$G(HLX)_X
2269+"RTN","HLCSTCP1",51,0)
2270+ ; look for segment= <CR>
2271+"RTN","HLCSTCP1",52,0)
2272+ F Q:HLX'[HLRS D Q:HLRDOUT
2273+"RTN","HLCSTCP1",53,0)
2274+ . ; Get the first piece, save the rest of the line
2275+"RTN","HLCSTCP1",54,0)
2276+ . S HLINE=HLINE+1,HLMSG(HLINE,0)=$P(HLX,HLRS),HLX=$P(HLX,HLRS,2,999)
2277+"RTN","HLCSTCP1",55,0)
2278+ . ; check for start block, Quit if no ien
2279+"RTN","HLCSTCP1",56,0)
2280+ . I HLMSG(HLINE,0)[HLDSTRT!HLHDR D Q
2281+"RTN","HLCSTCP1",57,0)
2282+ .. D:HLMSG(HLINE,0)[HLDSTRT
2283+"RTN","HLCSTCP1",58,0)
2284+ ... S X=$L(HLMSG(HLINE,0),HLDSTRT)
2285+"RTN","HLCSTCP1",59,0)
2286+ ... S:X>2 HLMSG(HLINE,0)=HLDSTRT_$P(HLMSG(HLINE,0),HLDSTRT,X)
2287+"RTN","HLCSTCP1",60,0)
2288+ ... S HLMSG(HLINE,0)=$P(HLMSG(HLINE,0),HLDSTRT,2)
2289+"RTN","HLCSTCP1",61,0)
2290+ ... D RESET:(HLINE>1)
2291+"RTN","HLCSTCP1",62,0)
2292+ .. ;ping message
2293+"RTN","HLCSTCP1",63,0)
2294+ .. I $E(HLMSG(1,0),1,9)="MSH^PING^" D PING Q
2295+"RTN","HLCSTCP1",64,0)
2296+ .. ; get next ien to store
2297+"RTN","HLCSTCP1",65,0)
2298+ .. D MIEN
2299+"RTN","HLCSTCP1",66,0)
2300+ .. K HLMSG
2301+"RTN","HLCSTCP1",67,0)
2302+ .. S (HLINE,HLHDR)=0
2303+"RTN","HLCSTCP1",68,0)
2304+ . ; check for end block; HLMSG(HLINE) = <eb><cr>
2305+"RTN","HLCSTCP1",69,0)
2306+ . I HLMSG(HLINE,0)[HLDEND D
2307+"RTN","HLCSTCP1",70,0)
2308+ .. ;no msg. ien
2309+"RTN","HLCSTCP1",71,0)
2310+ .. Q:'HLIND1
2311+"RTN","HLCSTCP1",72,0)
2312+ .. ; Kill just the last line
2313+"RTN","HLCSTCP1",73,0)
2314+ .. K HLMSG(HLINE,0) S HLINE=HLINE-1
2315+"RTN","HLCSTCP1",74,0)
2316+ .. ; move into 772
2317+"RTN","HLCSTCP1",75,0)
2318+ .. D SAVE(.HLMSG,"^HL(772,"_+$P(HLIND1,U,2)_",""IN"")")
2319+"RTN","HLCSTCP1",76,0)
2320+ .. ;mark that end block has been received
2321+"RTN","HLCSTCP1",77,0)
2322+ .. ;HLIND1=ien in 773^ien in 772^1 if end block was received
2323+"RTN","HLCSTCP1",78,0)
2324+ .. S $P(HLIND1,U,3)=1
2325+"RTN","HLCSTCP1",79,0)
2326+ .. ;reset variables for next message
2327+"RTN","HLCSTCP1",80,0)
2328+ .. D CLEAN
2329+"RTN","HLCSTCP1",81,0)
2330+ . ;add blank line for carriage return
2331+"RTN","HLCSTCP1",82,0)
2332+ . I HLINE'=0,HLMSG(HLINE,0)]"" S HLINE=HLINE+1,HLMSG(HLINE,0)=""
2333+"RTN","HLCSTCP1",83,0)
2334+ Q:HLRDOUT
2335+"RTN","HLCSTCP1",84,0)
2336+ ;If the line is long and no <CR> move it into the array.
2337+"RTN","HLCSTCP1",85,0)
2338+ I ($L(HLX)=HLDBSIZE),(HLX'[HLRS),(HLX'[HLDEND),(HLX'[HLDSTRT) D Q
2339+"RTN","HLCSTCP1",86,0)
2340+ . S HLINE=HLINE+1,HLMSG(HLINE,0)=HLX,HLX=""
2341+"RTN","HLCSTCP1",87,0)
2342+ ;have start block but no record seperator
2343+"RTN","HLCSTCP1",88,0)
2344+ I HLX[HLDSTRT D Q
2345+"RTN","HLCSTCP1",89,0)
2346+ . ;check for more than 1 start block
2347+"RTN","HLCSTCP1",90,0)
2348+ . S X=$L(HLX,HLDSTRT) S:X>2 HLX=HLDSTRT_$P(HLX,HLDSTRT,X)
2349+"RTN","HLCSTCP1",91,0)
2350+ . S:$L($P(HLX,HLDSTRT,2))>8 HLINE=HLINE+1,HLMSG(HLINE,0)=$P(HLX,HLDSTRT,2),HLX="",HLHDR=1
2351+"RTN","HLCSTCP1",92,0)
2352+ . D RESET:(HLHDR&(HLINE>1))
2353+"RTN","HLCSTCP1",93,0)
2354+ ;if no ien, then we don't have start block, reset
2355+"RTN","HLCSTCP1",94,0)
2356+ I 'HLIND1 D CLEAN Q
2357+"RTN","HLCSTCP1",95,0)
2358+ ; big message-merge from local to global every 100 lines
2359+"RTN","HLCSTCP1",96,0)
2360+ I (HLINE-$O(HLMSG(0)))>100 D
2361+"RTN","HLCSTCP1",97,0)
2362+ . M ^HL(772,+$P(HLIND1,U,2),"IN")=HLMSG
2363+"RTN","HLCSTCP1",98,0)
2364+ . ; reset working array
2365+"RTN","HLCSTCP1",99,0)
2366+ . K HLMSG
2367+"RTN","HLCSTCP1",100,0)
2368+ Q
2369+"RTN","HLCSTCP1",101,0)
2370+ ;
2371+"RTN","HLCSTCP1",102,0)
2372+SAVE(SRC,DEST) ;save into global & set top node
2373+"RTN","HLCSTCP1",103,0)
2374+ ;SRC=source array (passed by ref.), DEST=destination global
2375+"RTN","HLCSTCP1",104,0)
2376+ M @DEST=SRC
2377+"RTN","HLCSTCP1",105,0)
2378+ S @DEST@(0)="^^"_HLINE_"^"_HLINE_"^"_DT_"^"
2379+"RTN","HLCSTCP1",106,0)
2380+ Q
2381+"RTN","HLCSTCP1",107,0)
2382+ ;
2383+"RTN","HLCSTCP1",108,0)
2384+DELMSG(HLMAMT) ;delete message from Message Administration/Message Text files.
2385+"RTN","HLCSTCP1",109,0)
2386+ N DIK,DA
2387+"RTN","HLCSTCP1",110,0)
2388+ S DA=+HLMAMT,DIK="^HLMA("
2389+"RTN","HLCSTCP1",111,0)
2390+ D ^DIK
2391+"RTN","HLCSTCP1",112,0)
2392+ S DA=$P(HLMAMT,U,2),DIK="^HL(772,"
2393+"RTN","HLCSTCP1",113,0)
2394+ D ^DIK
2395+"RTN","HLCSTCP1",114,0)
2396+ Q
2397+"RTN","HLCSTCP1",115,0)
2398+MIEN ; sets HLIND1=ien in 773^ien in 772 for message
2399+"RTN","HLCSTCP1",116,0)
2400+ N HLMID,X
2401+"RTN","HLCSTCP1",117,0)
2402+ I HLIND1 D
2403+"RTN","HLCSTCP1",118,0)
2404+ . S:'$G(^HLMA(+HLIND1,0)) HLIND1=0
2405+"RTN","HLCSTCP1",119,0)
2406+ . S:'$G(^HL(772,+$P(HLIND1,U,2),0)) HLIND1=0
2407+"RTN","HLCSTCP1",120,0)
2408+ ;msg. id is 10th of MSH & 11th for BSH or FSH
2409+"RTN","HLCSTCP1",121,0)
2410+ S X=10+($E(HLMSG(1,0),1,3)'="MSH"),HLMID=$$PMSH(.HLMSG,X)
2411+"RTN","HLCSTCP1",122,0)
2412+ ;if HLIND1 is set, kill old message, use HLIND1 for new
2413+"RTN","HLCSTCP1",123,0)
2414+ ;message, it means we never got end block for 1st msg.
2415+"RTN","HLCSTCP1",124,0)
2416+ I HLIND1 D Q
2417+"RTN","HLCSTCP1",125,0)
2418+ . ;get pointer to 772, kill header
2419+"RTN","HLCSTCP1",126,0)
2420+ . K ^HLMA(+HLIND1,"MSH")
2421+"RTN","HLCSTCP1",127,0)
2422+ . I $D(^HL(772,+$P(HLIND1,U,2),"IN")) K ^("IN")
2423+"RTN","HLCSTCP1",128,0)
2424+ . S X=$$MAID^HLTF(+HLIND1,HLMID)
2425+"RTN","HLCSTCP1",129,0)
2426+ . D SAVE(.HLMSG,"^HLMA("_+HLIND1_",""MSH"")")
2427+"RTN","HLCSTCP1",130,0)
2428+ . S:$P(HLIND1,U,3) $P(HLIND1,U,3)=""
2429+"RTN","HLCSTCP1",131,0)
2430+ D TCP^HLTF(.HLMID,.X,.HLDT)
2431+"RTN","HLCSTCP1",132,0)
2432+ I 'X D Q
2433+"RTN","HLCSTCP1",133,0)
2434+ . ;error - record and reset array
2435+"RTN","HLCSTCP1",134,0)
2436+ . ;killing HLLSTN will allow MON^HLCSTCP to work with multi-server
2437+"RTN","HLCSTCP1",135,0)
2438+ . D CLEAN K HLLSTN
2439+"RTN","HLCSTCP1",136,0)
2440+ . ;error 100=LLP Could not Enqueue the Message, reset array
2441+"RTN","HLCSTCP1",137,0)
2442+ . D MONITOR^HLCSDR2(100,19,HLDP),MON^HLCSTCP("ERROR") H 30
2443+"RTN","HLCSTCP1",138,0)
2444+ ;HLIND1=ien in 773^ien in 772
2445+"RTN","HLCSTCP1",139,0)
2446+ S HLIND1=X_U_+$G(^HLMA(X,0))
2447+"RTN","HLCSTCP1",140,0)
2448+ ;save MSH into 773
2449+"RTN","HLCSTCP1",141,0)
2450+ D SAVE(.HLMSG,"^HLMA("_+HLIND1_",""MSH"")")
2451+"RTN","HLCSTCP1",142,0)
2452+ Q
2453+"RTN","HLCSTCP1",143,0)
2454+ ;
2455+"RTN","HLCSTCP1",144,0)
2456+PMSH(MSH,P) ;get piece P from MSH array (passed by ref.)
2457+"RTN","HLCSTCP1",145,0)
2458+ N FS,I,L,L1,L2,X,Y
2459+"RTN","HLCSTCP1",146,0)
2460+ S FS=$E(MSH(1,0),4),(L2,Y)=0,X=""
2461+"RTN","HLCSTCP1",147,0)
2462+ F I=1:1 S L1=$L($G(MSH(I,0)),FS),L=L1+Y-1 D Q:$L(X)!'$D(MSH(I,0))
2463+"RTN","HLCSTCP1",148,0)
2464+ . S:L1=1 L=L+1
2465+"RTN","HLCSTCP1",149,0)
2466+ . S:P'>L X=$P($G(MSH(I-1,0)),FS,P-L2)_$P($G(MSH(I,0)),FS,(P-Y))
2467+"RTN","HLCSTCP1",150,0)
2468+ . S L2=Y,Y=L
2469+"RTN","HLCSTCP1",151,0)
2470+ Q X
2471+"RTN","HLCSTCP1",152,0)
2472+ ;
2473+"RTN","HLCSTCP1",153,0)
2474+PING ;process PING message
2475+"RTN","HLCSTCP1",154,0)
2476+ S X=HLMSG(1,0)
2477+"RTN","HLCSTCP1",155,0)
2478+ I X[HLDEND U IO W X,!
2479+"RTN","HLCSTCP1",156,0)
2480+CLEAN ;reset var. for next message
2481+"RTN","HLCSTCP1",157,0)
2482+ K HLMSG
2483+"RTN","HLCSTCP1",158,0)
2484+ S HLINE=0,HLRDOUT=1
2485+"RTN","HLCSTCP1",159,0)
2486+ Q
2487+"RTN","HLCSTCP1",160,0)
2488+ ;
2489+"RTN","HLCSTCP1",161,0)
2490+ERROR ; Error trap for disconnect error and return back to the read loop.
2491+"RTN","HLCSTCP1",162,0)
2492+ S $ETRAP="D UNWIND^%ZTER"
2493+"RTN","HLCSTCP1",163,0)
2494+ I $$EC^%ZOSV["READ"!($$EC^%ZOSV["NOTOPEN")!($$EC^%ZOSV["DEVNOTOPN") D UNWIND^%ZTER Q
2495+"RTN","HLCSTCP1",164,0)
2496+ I $$EC^%ZOSV["WRITE" D CC("Wr-err") D UNWIND^%ZTER Q
2497+"RTN","HLCSTCP1",165,0)
2498+ S HLCSOUT=1 D ^%ZTER,CC("Error")
2499+"RTN","HLCSTCP1",166,0)
2500+ D UNWIND^%ZTER
2501+"RTN","HLCSTCP1",167,0)
2502+ Q
2503+"RTN","HLCSTCP1",168,0)
2504+ ;
2505+"RTN","HLCSTCP1",169,0)
2506+CC(X) ;cleanup and close
2507+"RTN","HLCSTCP1",170,0)
2508+ D MON^HLCSTCP(X)
2509+"RTN","HLCSTCP1",171,0)
2510+ H 2
2511+"RTN","HLCSTCP1",172,0)
2512+ Q
2513+"RTN","HLCSTCP1",173,0)
2514+RESET ;reset info as a result of no end block
2515+"RTN","HLCSTCP1",174,0)
2516+ N %
2517+"RTN","HLCSTCP1",175,0)
2518+ S HLMSG(1,0)=HLMSG(HLINE,0)
2519+"RTN","HLCSTCP1",176,0)
2520+ F %=2:1:HLINE K HLMSG(%,0)
2521+"RTN","HLCSTCP1",177,0)
2522+ S HLINE=1
2523+"RTN","HLCSTCP1",178,0)
2524+ Q
2525+"RTN","HLZTCP")
2526+0^52^B44973921
2527+"RTN","HLZTCP",1,0)
2528+HLZTCP ;MILW/JMC MSC/JKT - HL7 TCP/IP Hybrid Lower Level Protocol Receiver/Sender ;28OCT2009
2529+"RTN","HLZTCP",2,0)
2530+ ;;1.5;HEALTH LEVEL SEVEN;**MSC**;JUL 09, 1993
2531+"RTN","HLZTCP",3,0)
2532+ ;
2533+"RTN","HLZTCP",4,0)
2534+INIT ;Initialize Variables
2535+"RTN","HLZTCP",5,0)
2536+ N HLZIO,HLZOS,HLZSTATE
2537+"RTN","HLZTCP",6,0)
2538+ S HLZOS=$G(^%ZOSF("OS"))
2539+"RTN","HLZTCP",7,0)
2540+ ;
2541+"RTN","HLZTCP",8,0)
2542+ I $D(ZTQUEUED) S ZTREQ="@"
2543+"RTN","HLZTCP",9,0)
2544+ ;
2545+"RTN","HLZTCP",10,0)
2546+ I $$NEWERR^%ZTER N $ETRAP S $ETRAP=""
2547+"RTN","HLZTCP",11,0)
2548+ S X="ERR^HLZTCP",@^%ZOSF("TRAP")
2549+"RTN","HLZTCP",12,0)
2550+ ;
2551+"RTN","HLZTCP",13,0)
2552+ I '$D(HLION) D Q:POP
2553+"RTN","HLZTCP",14,0)
2554+ . D HOME^%ZIS
2555+"RTN","HLZTCP",15,0)
2556+ . I POP Q
2557+"RTN","HLZTCP",16,0)
2558+ . S HLION=$S(ION']"":"UNKNOWN",1:ION)
2559+"RTN","HLZTCP",17,0)
2560+ ;
2561+"RTN","HLZTCP",18,0)
2562+ S HLZIO(0)=IO
2563+"RTN","HLZTCP",19,0)
2564+ ;
2565+"RTN","HLZTCP",20,0)
2566+ ; Figure out type of connection: 1=Server, 2=Client.
2567+"RTN","HLZTCP",21,0)
2568+ I HLZOS["DSM" S HLZTCP=$S(IOPAR["ADDRESS":2,1:1)
2569+"RTN","HLZTCP",22,0)
2570+ I HLZOS["OpenM" D
2571+"RTN","HLZTCP",23,0)
2572+ . N IP
2573+"RTN","HLZTCP",24,0)
2574+ . S IP=$P(IOPAR,"""",2) ; Extract IP address
2575+"RTN","HLZTCP",25,0)
2576+ . S HLZTCP=$S(IP?1.3N1P1.3N1P1.3N1P1.3N:2,1:1)
2577+"RTN","HLZTCP",26,0)
2578+ ;
2579+"RTN","HLZTCP",27,0)
2580+ ; IOPAR is not available to us because of the way we're setting up devices on
2581+"RTN","HLZTCP",28,0)
2582+ ; GT.M. This routine is only called from a few places, and always in "Client"
2583+"RTN","HLZTCP",29,0)
2584+ ; mode, so hard code a return value of 2. This entire routine should be
2585+"RTN","HLZTCP",30,0)
2586+ ; abandoned in the future, so it's an acceptable workaround for now.
2587+"RTN","HLZTCP",31,0)
2588+ ; See https://code.launchpad.net/~jontai/openvista-gtm-integration/bug430855/+merge/14088
2589+"RTN","HLZTCP",32,0)
2590+ I HLZOS["GT.M" S HLZTCP=2
2591+"RTN","HLZTCP",33,0)
2592+ ;
2593+"RTN","HLZTCP",34,0)
2594+ S IOP="NULL DEVICE" D ^%ZIS
2595+"RTN","HLZTCP",35,0)
2596+ I POP G EXIT
2597+"RTN","HLZTCP",36,0)
2598+ S HLZIO=IO K IOP
2599+"RTN","HLZTCP",37,0)
2600+ ;
2601+"RTN","HLZTCP",38,0)
2602+ S HLTIME=$$NOW^XLFDT
2603+"RTN","HLZTCP",39,0)
2604+ ;
2605+"RTN","HLZTCP",40,0)
2606+ U HLZIO(0)
2607+"RTN","HLZTCP",41,0)
2608+ ; If TCP client, send a "space" to initiate connection.
2609+"RTN","HLZTCP",42,0)
2610+ I HLZTCP=2 W " ",!
2611+"RTN","HLZTCP",43,0)
2612+ ;
2613+"RTN","HLZTCP",44,0)
2614+ K %,%H,%I,X
2615+"RTN","HLZTCP",45,0)
2616+ S DTIME=$P($G(HLNDAP0),"^",9),HLTRIES=$P($G(HLNDAP0),"^",5)
2617+"RTN","HLZTCP",46,0)
2618+ S:DTIME'>0 DTIME=60 S:HLTRIES'>0 HLTRIES=3
2619+"RTN","HLZTCP",47,0)
2620+ S HLLPC=^%ZOSF("LPC")
2621+"RTN","HLZTCP",48,0)
2622+ ;
2623+"RTN","HLZTCP",49,0)
2624+LOOP ; Infinite loop to check for HL7 messages to send/receive
2625+"RTN","HLZTCP",50,0)
2626+ F D I $$S^%ZTLOAD S ZTSTOP=1 Q
2627+"RTN","HLZTCP",51,0)
2628+ . S HLLOG=$S($D(^HL(770,"ALOG",HLION)):1,1:0)
2629+"RTN","HLZTCP",52,0)
2630+ . D CHKREC,CHKSEND
2631+"RTN","HLZTCP",53,0)
2632+EXIT Q
2633+"RTN","HLZTCP",54,0)
2634+ ;
2635+"RTN","HLZTCP",55,0)
2636+ERR ; Trap error
2637+"RTN","HLZTCP",56,0)
2638+ ; Reset current device to "NULL DEVICE".
2639+"RTN","HLZTCP",57,0)
2640+ U HLZIO
2641+"RTN","HLZTCP",58,0)
2642+ ; Reschedule task.
2643+"RTN","HLZTCP",59,0)
2644+ I $$EC^%ZOSV["WRITE"!($$EC^%ZOSV["READ") D
2645+"RTN","HLZTCP",60,0)
2646+ . N ZTDTH,ZTSK
2647+"RTN","HLZTCP",61,0)
2648+ . S ZTSK=ZTQUEUED,ZTDTH="60S",ZTREQ=""
2649+"RTN","HLZTCP",62,0)
2650+ . D REQ^%ZTLOAD ; Requeue task in 60 seconds.
2651+"RTN","HLZTCP",63,0)
2652+ K HLL(1),^TMP("HLR",$J),^TMP("HLS",$J)
2653+"RTN","HLZTCP",64,0)
2654+ Q
2655+"RTN","HLZTCP",65,0)
2656+ ;
2657+"RTN","HLZTCP",66,0)
2658+CHKREC ; Check if there are HL7 messages to receive
2659+"RTN","HLZTCP",67,0)
2660+ ; Set flag to receive state.
2661+"RTN","HLZTCP",68,0)
2662+ S HLZSTATE="recv"
2663+"RTN","HLZTCP",69,0)
2664+ D REC
2665+"RTN","HLZTCP",70,0)
2666+ ; Received "NAK" message don't know what it goes to.
2667+"RTN","HLZTCP",71,0)
2668+ I $G(HLZNAK) K HLERR Q
2669+"RTN","HLZTCP",72,0)
2670+ I '$D(HLDTOUT),'HLERR D SENDNAK G CHKREC
2671+"RTN","HLZTCP",73,0)
2672+ I '$D(HLDTOUT) U HLZIO K HLERR D ^HLCHK
2673+"RTN","HLZTCP",74,0)
2674+ U HLZIO
2675+"RTN","HLZTCP",75,0)
2676+ Q
2677+"RTN","HLZTCP",76,0)
2678+ ;
2679+"RTN","HLZTCP",77,0)
2680+CHKSEND ; Check if there are HL7 messages to send
2681+"RTN","HLZTCP",78,0)
2682+ ; Set flag to send state.
2683+"RTN","HLZTCP",79,0)
2684+ S HLZSTATE="send"
2685+"RTN","HLZTCP",80,0)
2686+ Q:'$D(HLNDAP)
2687+"RTN","HLZTCP",81,0)
2688+ I '$D(HLNDAP0) S HLNDAP0=$G(^HL(770,HLNDAP,0))
2689+"RTN","HLZTCP",82,0)
2690+ S HLDA=+$O(^HL(772,"AC","O",+$P(HLNDAP0,U,12),0)) G:'HLDA EX
2691+"RTN","HLZTCP",83,0)
2692+ S HLDA0=$G(^HL(772,HLDA,0)) G:HLDA0']"" EX
2693+"RTN","HLZTCP",84,0)
2694+ S HLXMZ=+$P(HLDA0,"^",5)
2695+"RTN","HLZTCP",85,0)
2696+ I 'HLXMZ D G EX
2697+"RTN","HLZTCP",86,0)
2698+ . D STATUS^HLTF0(HLDA,4,"","No pointer to Message file(#3.9)")
2699+"RTN","HLZTCP",87,0)
2700+ I '$D(^XMB(3.9,HLXMZ)) D G EX
2701+"RTN","HLZTCP",88,0)
2702+ . D STATUS^HLTF0(HLDA,4,"","No message found at #"_HLXMZ_" in Message file(#3.9)")
2703+"RTN","HLZTCP",89,0)
2704+ I '$O(^XMB(3.9,HLXMZ,2,0)) D G EX
2705+"RTN","HLZTCP",90,0)
2706+ . D STATUS^HLTF0(HLDA,4,"","No message contents at #"_HLXMZ_" in Message file(#3.9)")
2707+"RTN","HLZTCP",91,0)
2708+ S (HLI,HLTRIED)=0,HLSDT=+HLDA0
2709+"RTN","HLZTCP",92,0)
2710+ F HLJ=1:1 S HLI=$O(^XMB(3.9,HLXMZ,2,HLI)) Q:HLI'>0 S ^TMP("HLS",$J,HLSDT,HLJ)=$G(^XMB(3.9,HLXMZ,2,HLI,0))
2711+"RTN","HLZTCP",93,0)
2712+CS1 S HLTRIED=HLTRIED+1
2713+"RTN","HLZTCP",94,0)
2714+ K ^TMP("HLR",$J),HLSDATA
2715+"RTN","HLZTCP",95,0)
2716+ D SEND
2717+"RTN","HLZTCP",96,0)
2718+ ; Set flag to awaiting acknowledgement state.
2719+"RTN","HLZTCP",97,0)
2720+ S HLZSTATE="awaiting ack"
2721+"RTN","HLZTCP",98,0)
2722+ D REC
2723+"RTN","HLZTCP",99,0)
2724+ I HLTRIED'=HLTRIES G CS1:$D(HLDTOUT) G CS1:HLZNAK
2725+"RTN","HLZTCP",100,0)
2726+ G EX:$D(HLDTOUT)
2727+"RTN","HLZTCP",101,0)
2728+ I HLZNAK D G EX
2729+"RTN","HLZTCP",102,0)
2730+ . S HLAC=4,HLMSG="Lower Level Protocol Error - "_$S($E(HLL(1))="X":"Checksum",1:"Character Count")_" Did Not Match"
2731+"RTN","HLZTCP",103,0)
2732+ . D STATUS^HLTF0(HLDA,HLAC,HLMSG)
2733+"RTN","HLZTCP",104,0)
2734+ I $S('$D(HLL(1)):1,"BHS,MSH"'[$E(HLL(1),1,3):1,1:0) D G EX
2735+"RTN","HLZTCP",105,0)
2736+ . S HLAC=4,HLMSG="Application Level error - Header Segment Missing"
2737+"RTN","HLZTCP",106,0)
2738+ . D STATUS^HLTF0(HLDA,HLAC,HLMSG)
2739+"RTN","HLZTCP",107,0)
2740+ K HLXMZ
2741+"RTN","HLZTCP",108,0)
2742+ U HLZIO
2743+"RTN","HLZTCP",109,0)
2744+ D CHK^HLCHK,IN^HLTF(HLMTN,HLMID,HLTIME)
2745+"RTN","HLZTCP",110,0)
2746+ ;
2747+"RTN","HLZTCP",111,0)
2748+EX K HLAC,HLDA,HLDA0,HLERR,HLMSG,HLI,HLJ,HLSDATA,HLSDT,HLTRIED
2749+"RTN","HLZTCP",112,0)
2750+ K ^TMP("HLS",$J),^TMP("HLR",$J)
2751+"RTN","HLZTCP",113,0)
2752+ Q
2753+"RTN","HLZTCP",114,0)
2754+ ;
2755+"RTN","HLZTCP",115,0)
2756+CSUM ;Calculate Checksum
2757+"RTN","HLZTCP",116,0)
2758+ S HLC1=HLC1+$L(X),X=X_HLC2 X HLLPC S HLC2=$C(Y)
2759+"RTN","HLZTCP",117,0)
2760+ Q
2761+"RTN","HLZTCP",118,0)
2762+ ;
2763+"RTN","HLZTCP",119,0)
2764+REC ;Receive a Message
2765+"RTN","HLZTCP",120,0)
2766+ S %=$$NOW^XLFDT
2767+"RTN","HLZTCP",121,0)
2768+ I HLTIME<% S HLTIME=%
2769+"RTN","HLZTCP",122,0)
2770+ E S HLTIME=$$FMADD^XLFDT(HLTIME,0,0,0,1)
2771+"RTN","HLZTCP",123,0)
2772+ I HLLOG F Q:'$D(^TMP("HL",HLION,HLTIME)) S HLTIME=$$FMADD^XLFDT(HLTIME,0,0,0,1)
2773+"RTN","HLZTCP",124,0)
2774+ K HLL,^TMP("HLR",$J)
2775+"RTN","HLZTCP",125,0)
2776+ S (HLC2,X0)="",(HLC1,HLI,HLK,HLZEB,HLZNAK)=0
2777+"RTN","HLZTCP",126,0)
2778+ U HLZIO(0)
2779+"RTN","HLZTCP",127,0)
2780+ F R X1#1:DTIME Q:X1=$C(11) I '$T S HLDTOUT=1 Q
2781+"RTN","HLZTCP",128,0)
2782+ ; Did not find "Start of block" character.
2783+"RTN","HLZTCP",129,0)
2784+ I X1'=$C(11) Q
2785+"RTN","HLZTCP",130,0)
2786+ S X0=X1,HLZLEN=1
2787+"RTN","HLZTCP",131,0)
2788+REC1 U HLZIO(0) K HLDTOUT
2789+"RTN","HLZTCP",132,0)
2790+ R X1#1:DTIME I '$T S HLDTOUT=1
2791+"RTN","HLZTCP",133,0)
2792+ ; Timed out and buffer empty.
2793+"RTN","HLZTCP",134,0)
2794+ I $G(HLDTOUT),'$L(X1) Q
2795+"RTN","HLZTCP",135,0)
2796+ ;
2797+"RTN","HLZTCP",136,0)
2798+ S X0=X0_X1,HLZLEN=HLZLEN+1
2799+"RTN","HLZTCP",137,0)
2800+ ; Set "NAK" block type flag.
2801+"RTN","HLZTCP",138,0)
2802+ I X1="N",HLZLEN=2 S HLZNAK=1
2803+"RTN","HLZTCP",139,0)
2804+ ; Set "End Block" flag.
2805+"RTN","HLZTCP",140,0)
2806+ I X1=$C(28) S HLZEB=1
2807+"RTN","HLZTCP",141,0)
2808+ I X1'=$C(13) G REC1
2809+"RTN","HLZTCP",142,0)
2810+ I HLZEB,HLZNAK D RECNAK Q
2811+"RTN","HLZTCP",143,0)
2812+ ;
2813+"RTN","HLZTCP",144,0)
2814+ ; Process "End Block" if not a "NAK" record.
2815+"RTN","HLZTCP",145,0)
2816+ I HLZEB S HLC=+$E(X0,6,8),HLB=+$E(X0,1,5),X0=""
2817+"RTN","HLZTCP",146,0)
2818+ I $L(X0) D
2819+"RTN","HLZTCP",147,0)
2820+ . I HLLOG D ;Record Incoming Transmission in Log
2821+"RTN","HLZTCP",148,0)
2822+ . . S HLII=X0 S:$P(X0,$E(X0,5))="MSH" $P(X0,$E(X0,5),8)=""
2823+"RTN","HLZTCP",149,0)
2824+ . . S HLI=HLI+1,^TMP("HL",HLION,HLTIME,"REC",HLI)=$TR(X0,$C(11,13)),X0=HLII
2825+"RTN","HLZTCP",150,0)
2826+ . I HLK,HLK'>2 S HLL(HLK)=$TR(X0,$C(11,13))
2827+"RTN","HLZTCP",151,0)
2828+ . I HLK S ^TMP("HLR",$J,HLTIME,HLK)=$TR(X0,$C(11,13))
2829+"RTN","HLZTCP",152,0)
2830+ . S HLK=HLK+1,X=X0 D CSUM
2831+"RTN","HLZTCP",153,0)
2832+ . S X0=""
2833+"RTN","HLZTCP",154,0)
2834+ I 'HLZEB G REC1
2835+"RTN","HLZTCP",155,0)
2836+ S X=HLC2 X HLLPC S HLCSUM=Y,HLERR=$S(HLCSUM'=HLC:"X",HLC1'=HLB:"C",1:1)
2837+"RTN","HLZTCP",156,0)
2838+ I HLLOG S ^TMP("HL",HLION,HLTIME,"REC","CKS")="Our checksum="_HLCSUM_"/Their checksum="_HLC_"^Our character count="_HLC1_"/Their character count="_HLB
2839+"RTN","HLZTCP",157,0)
2840+ Q
2841+"RTN","HLZTCP",158,0)
2842+ ;
2843+"RTN","HLZTCP",159,0)
2844+RECNAK ; Process Received "NAK" message.
2845+"RTN","HLZTCP",160,0)
2846+ S HLTIME=$$FMADD^XLFDT(HLTIME,0,0,0,1)
2847+"RTN","HLZTCP",161,0)
2848+ S HLC=+$E(X0,7,9),HLB=+$E(X0,2,6),X=$E(X0,1) D CSUM
2849+"RTN","HLZTCP",162,0)
2850+ S X=HLC2 X HLLPC S HLCSUM=Y,HLERR=$S(HLCSUM'=HLC:"X",HLC1'=HLB:"C",1:1)
2851+"RTN","HLZTCP",163,0)
2852+ S HLL(1)=$TR(X0,$C(11,13,28)),^TMP("HLR",$J,HLTIME,1)=HLL(1)
2853+"RTN","HLZTCP",164,0)
2854+ I HLLOG D
2855+"RTN","HLZTCP",165,0)
2856+ . S ^TMP("HL",HLION,HLTIME,"REC",1)=HLL(1)
2857+"RTN","HLZTCP",166,0)
2858+ . S ^TMP("HL",HLION,HLTIME,"REC","CKS")="Our checksum="_HLCSUM_"/Their checksum="_HLC_"^Our character count="_HLC1_"/Their character count="_HLB
2859+"RTN","HLZTCP",167,0)
2860+ Q
2861+"RTN","HLZTCP",168,0)
2862+ ;
2863+"RTN","HLZTCP",169,0)
2864+SEND ;Send a Message
2865+"RTN","HLZTCP",170,0)
2866+ N X,Y
2867+"RTN","HLZTCP",171,0)
2868+ S %=$$NOW^XLFDT
2869+"RTN","HLZTCP",172,0)
2870+ I HLTIME<% S HLTIME=%
2871+"RTN","HLZTCP",173,0)
2872+ E S HLTIME=$$FMADD^XLFDT(HLTIME,0,0,0,1)
2873+"RTN","HLZTCP",174,0)
2874+ I HLLOG F Q:'$D(^TMP("HL",HLION,HLTIME)) S HLTIME=$$FMADD^XLFDT(HLTIME,0,0,0,1)
2875+"RTN","HLZTCP",175,0)
2876+ S (HLI,HLC1)=0,HLC2=""
2877+"RTN","HLZTCP",176,0)
2878+ D WRITE($C(11)_"D21"_$C(13))
2879+"RTN","HLZTCP",177,0)
2880+ I '$D(HLSDT) F S HLI=$O(HLSDATA(HLI)) Q:HLI="" D WRITE(HLSDATA(HLI)_$C(13))
2881+"RTN","HLZTCP",178,0)
2882+ I $D(HLSDT) F S HLI=$O(^TMP("HLS",$J,HLSDT,HLI)) Q:HLI="" S HLSDATA=^(HLI) D WRITE(HLSDATA_$C(13))
2883+"RTN","HLZTCP",179,0)
2884+ D FLUSH
2885+"RTN","HLZTCP",180,0)
2886+ Q
2887+"RTN","HLZTCP",181,0)
2888+ ;
2889+"RTN","HLZTCP",182,0)
2890+SENDNAK ; Send a "NAK" message.
2891+"RTN","HLZTCP",183,0)
2892+ S (HLC1,HLI)=0,HLC2="",HLTIME=$$FMADD^XLFDT(HLTIME,0,0,0,1)
2893+"RTN","HLZTCP",184,0)
2894+ D WRITE($C(11)_"N21"_$C(13)_HLERR)
2895+"RTN","HLZTCP",185,0)
2896+ D FLUSH
2897+"RTN","HLZTCP",186,0)
2898+ K HLSDATA,HLERR
2899+"RTN","HLZTCP",187,0)
2900+ Q
2901+"RTN","HLZTCP",188,0)
2902+ ;
2903+"RTN","HLZTCP",189,0)
2904+WRITE(X) ; Write data in buffer.
2905+"RTN","HLZTCP",190,0)
2906+ U HLZIO(0)
2907+"RTN","HLZTCP",191,0)
2908+ W X,!
2909+"RTN","HLZTCP",192,0)
2910+ I HLLOG S ^TMP("HL",HLION,HLTIME,"SEND",HLI)=$TR(X,$C(11,13))
2911+"RTN","HLZTCP",193,0)
2912+ D CSUM
2913+"RTN","HLZTCP",194,0)
2914+ Q
2915+"RTN","HLZTCP",195,0)
2916+ ;
2917+"RTN","HLZTCP",196,0)
2918+FLUSH ; Write checksum and flush buffer.
2919+"RTN","HLZTCP",197,0)
2920+ S X=HLC2 X HLLPC S X=$E("0000",1,(5-$L(HLC1)))_HLC1_$E("00",1,(3-$L(Y)))_Y_$C(28)_$C(13)
2921+"RTN","HLZTCP",198,0)
2922+ U HLZIO(0)
2923+"RTN","HLZTCP",199,0)
2924+ ; Do final write for this block and flush buffer.
2925+"RTN","HLZTCP",200,0)
2926+ W X,!
2927+"RTN","HLZTCP",201,0)
2928+ I HLLOG S ^TMP("HL",HLION,HLTIME,"SEND","CKS")=$TR(X,$C(11,13,28))
2929+"RTN","HLZTCP",202,0)
2930+ Q
2931+"RTN","MAGDMEDL")
2932+0^36^B3132920
2933+"RTN","MAGDMEDL",1,0)
2934+MAGDMEDL ;WOIFO/LB,MSC/JDA - Routine to look up entries in the Medicine files ;27APR2009
2935+"RTN","MAGDMEDL",2,0)
2936+ ;;3.0;IMAGING;**MSC**;Mar 01, 2002
2937+"RTN","MAGDMEDL",3,0)
2938+ ;; +---------------------------------------------------------------+
2939+"RTN","MAGDMEDL",4,0)
2940+ ;; | Property of the US Government. |
2941+"RTN","MAGDMEDL",5,0)
2942+ ;; | No permission to copy or redistribute this software is given. |
2943+"RTN","MAGDMEDL",6,0)
2944+ ;; | Use of unreleased versions of this software requires the user |
2945+"RTN","MAGDMEDL",7,0)
2946+ ;; | to execute a written test agreement with the VistA Imaging |
2947+"RTN","MAGDMEDL",8,0)
2948+ ;; | Development Office of the Department of Veterans Affairs, |
2949+"RTN","MAGDMEDL",9,0)
2950+ ;; | telephone (301) 734-0100. |
2951+"RTN","MAGDMEDL",10,0)
2952+ ;; | |
2953+"RTN","MAGDMEDL",11,0)
2954+ ;; | The Food and Drug Administration classifies this software as |
2955+"RTN","MAGDMEDL",12,0)
2956+ ;; | a medical device. As such, it may not be changed in any way. |
2957+"RTN","MAGDMEDL",13,0)
2958+ ;; | Modifications to this software may result in an adulterated |
2959+"RTN","MAGDMEDL",14,0)
2960+ ;; | medical device under 21CFR820, the use of which is considered |
2961+"RTN","MAGDMEDL",15,0)
2962+ ;; | to be a violation of US Federal Statutes. |
2963+"RTN","MAGDMEDL",16,0)
2964+ ;; +---------------------------------------------------------------+
2965+"RTN","MAGDMEDL",17,0)
2966+ ;;
2967+"RTN","MAGDMEDL",18,0)
2968+ Q
2969+"RTN","MAGDMEDL",19,0)
2970+SELECT(ITEM,ARRAY) ;
2971+"RTN","MAGDMEDL",20,0)
2972+ ;
2973+"RTN","MAGDMEDL",21,0)
2974+SELECT2
2975+"RTN","MAGDMEDL",22,0)
2976+ N CNT,DIR,DIROUT,DIRUT,ENTRY
2977+"RTN","MAGDMEDL",23,0)
2978+ S CNT=+ARRAY
2979+"RTN","MAGDMEDL",24,0)
2980+ I 'CNT Q 0
2981+"RTN","MAGDMEDL",25,0)
2982+ S DIR(0)="NO^1:"_CNT,DIR("A")="Select a Medicine Procedure"
2983+"RTN","MAGDMEDL",26,0)
2984+ S DIR("T")=600 D ^DIR
2985+"RTN","MAGDMEDL",27,0)
2986+ I $D(DIRUT)!($D(DIROUT)) Q 0
2987+"RTN","MAGDMEDL",28,0)
2988+ S ENTRY=+Y
2989+"RTN","MAGDMEDL",29,0)
2990+ I '$D(ARRAY(ENTRY)) D G SELECT2
2991+"RTN","MAGDMEDL",30,0)
2992+ . W !,"Please select an entry or use '^' to exit"
2993+"RTN","MAGDMEDL",31,0)
2994+ W !,"You have selected ",$P(ARRAY(ENTRY),"^"),"."
2995+"RTN","MAGDMEDL",32,0)
2996+ Q $P(ARRAY(ENTRY),"^",2)
2997+"RTN","MAGDMEDL",33,0)
2998+ ;
2999+"RTN","MAGDMEDL",34,0)
3000+LOOP(ARRAY,MAGPAT,SUB,CASEDT) ;
3001+"RTN","MAGDMEDL",35,0)
3002+ ; MAGPAT = patient's dfn
3003+"RTN","MAGDMEDL",36,0)
3004+ ; SUB = Medicine specialty
3005+"RTN","MAGDMEDL",37,0)
3006+ ; CASEDT = case date
3007+"RTN","MAGDMEDL",38,0)
3008+ ; array(0)= 1 or 0 ^ # entries found ^ message text
3009+"RTN","MAGDMEDL",39,0)
3010+ ; array(#)= formatted out dislay without delimeters
3011+"RTN","MAGDMEDL",40,0)
3012+ ; array(#,1) = internal stored values
3013+"RTN","MAGDMEDL",41,0)
3014+ ; Variable MAGDIMG
3015+"RTN","MAGDMEDL",42,0)
3016+ S ARRAY(0)="0^^No entries found"
3017+"RTN","MAGDMEDL",43,0)
3018+ Q:'MAGPAT
3019+"RTN","MAGDMEDL",44,0)
3020+ Q:'$D(MAGMC)#10 ;Array should be available.
3021+"RTN","MAGDMEDL",45,0)
3022+ N BEG,CDT,CNT,DATA,DIOCM,EN,END,IMG,IMAGEPTR,MAGDIMG,PATIENT,PATNME,PRCNM,SSN,THEDT,X1,X2,X
3023+"RTN","MAGDMEDL",46,0)
3024+ N IEN,II,IOUT,MAGMC,MEDFILE
3025+"RTN","MAGDMEDL",47,0)
3026+ Q:'$$FIND1^DIC(2,,"A",MAGPAT,"","")
3027+"RTN","MAGDMEDL",48,0)
3028+ S PATNME=$P(^DPT(MAGPAT,0),"^"),SSN=$P(^(0),"^",9)
3029+"RTN","MAGDMEDL",49,0)
3030+ S PATIENT=PATNME_" "_SSN
3031+"RTN","MAGDMEDL",50,0)
3032+ I 'CASEDT S CASEDT=DT
3033+"RTN","MAGDMEDL",51,0)
3034+ S X1=CASEDT,X2=-3 D C^%DTC S BEG=X
3035+"RTN","MAGDMEDL",52,0)
3036+ S END=CASEDT+.9999
3037+"RTN","MAGDMEDL",53,0)
3038+ S CNT=0,CDT=BEG-.001
3039+"RTN","MAGDMEDL",54,0)
3040+ F S CDT=$O(MAGMC(MAGPAT,SUB,CDT)) Q:'CDT!(CDT>END) D
3041+"RTN","MAGDMEDL",55,0)
3042+ . S EN=0 F S EN=$O(MAGMC(MAGPAT,SUB,CDT,EN)) Q:'EN D
3043+"RTN","MAGDMEDL",56,0)
3044+ . . S DATA=MAGMC(MAGPAT,SUB,CDT,EN)
3045+"RTN","MAGDMEDL",57,0)
3046+ . . S PRCNM=$P(DATA,"^",2),PRC=SUB
3047+"RTN","MAGDMEDL",58,0)
3048+ . . S THEDT=$P(DATA,"^"),IEN=$P(DATA,"^",5)
3049+"RTN","MAGDMEDL",59,0)
3050+ . . I $D(MAGMC(MAGPAT,SUB,CDT,EN,2005)) S (IOUT,II)=0 D
3051+"RTN","MAGDMEDL",60,0)
3052+ . . . F S II=$O(MAGMC(MAGPAT,SUB,CDT,EN,2005,II)) Q:'II!IOUT D
3053+"RTN","MAGDMEDL",61,0)
3054+ . . . . S IMAGEPTR=MAGMC(MAGPAT,SUB,CDT,EN,2005,II)
3055+"RTN","MAGDMEDL",62,0)
3056+ . . . . I '$D(^MAG(2005,IMAGEPTR)) S IMAGEPTR="" Q
3057+"RTN","MAGDMEDL",63,0)
3058+ . . . . I '$D(^MAG(2005,IMAGEPTR,"PACS")) S IMAGEPTR="",IOUT=1
3059+"RTN","MAGDMEDL",64,0)
3060+ . . S MEDFILE=$P(DATA,"^",4),MEDFILE=$P(MEDFILE,"MCAR(",2)
3061+"RTN","MAGDMEDL",65,0)
3062+ . . S DICOM="" D DICOMID^MAGDMEDI(.DICOM,MEDFILE,IEN,PRC,MAGPAT)
3063+"RTN","MAGDMEDL",66,0)
3064+ . . I DICOM'="" D
3065+"RTN","MAGDMEDL",67,0)
3066+ . . . S DICOM=$P(DICOM,":",2)
3067+"RTN","MAGDMEDL",68,0)
3068+ . . . S CNT=CNT+1
3069+"RTN","MAGDMEDL",69,0)
3070+ . . . S ARRAY(CNT)=DICOM_" "_PRCNM_", "_THEDT_" "_PATIENT
3071+"RTN","MAGDMEDL",70,0)
3072+ . . . S ARRAY(CNT,1)=DICOM_"^"_PATNME_"^"_SSN_"^"_EN_"^"_PRCNM_"^"_PRC_"^"_$G(IMAGEPTR)_"^"_MEDFILE
3073+"RTN","MAGDMEDL",71,0)
3074+ I CNT S ARRAY(0)="1^"_CNT_"^Medicine file entries for "_PATIENT
3075+"RTN","MAGDMEDL",72,0)
3076+ Q
3077+"RTN","MAGDMEDL",73,0)
3078+DISPLAY(ARRAY) ;
3079+"RTN","MAGDMEDL",74,0)
3080+ ; Call routine needs to pass array in the following sequence
3081+"RTN","MAGDMEDL",75,0)
3082+ ; ARRAY(0)= 1 or 0 ^ #entries ^ message
3083+"RTN","MAGDMEDL",76,0)
3084+ ; ARRAY(#)= Formatted output to be displayed.
3085+"RTN","MAGDMEDL",77,0)
3086+ ; Will set the RES variable for selected entry.
3087+"RTN","MAGDMEDL",78,0)
3088+ I '$D(ARRAY(0)) Q 0
3089+"RTN","MAGDMEDL",79,0)
3090+ ; If only one entry return the subscript variable.
3091+"RTN","MAGDMEDL",80,0)
3092+ I $P(ARRAY(0),"^",2)=1 Q 1
3093+"RTN","MAGDMEDL",81,0)
3094+ I $P(ARRAY(0),"^")'=1 Q 0
3095+"RTN","MAGDMEDL",82,0)
3096+ N ENTRY,ITEM,ITEMS,MSG,OUT,OUTPUT,RES
3097+"RTN","MAGDMEDL",83,0)
3098+ S RES=0,MSG=$P(ARRAY(0),"^",3)
3099+"RTN","MAGDMEDL",84,0)
3100+ S IOF="#,$C(27,91,72,27,91,74,8,8,8,8)",IO=0,IOSL=24,POP=0
3101+"RTN","MAGDMEDL",85,0)
3102+ D HEAD
3103+"RTN","MAGDMEDL",86,0)
3104+ S (ENTRY,OUT)=0,ITEMS=$P(ARRAY(0),"^",2)
3105+"RTN","MAGDMEDL",87,0)
3106+ F S ENTRY=$O(ARRAY(ENTRY)) Q:'ENTRY!OUT D
3107+"RTN","MAGDMEDL",88,0)
3108+ . S OUTPUT=$G(ARRAY(ENTRY))
3109+"RTN","MAGDMEDL",89,0)
3110+ . D:$Y+3>IOSL HEAD D LINE
3111+"RTN","MAGDMEDL",90,0)
3112+ . D:$Y+3>IOSL ASKQ
3113+"RTN","MAGDMEDL",91,0)
3114+ I 'OUT D ASKQ S RES=ITEM
3115+"RTN","MAGDMEDL",92,0)
3116+ Q RES
3117+"RTN","MAGDMEDL",93,0)
3118+HEAD ;
3119+"RTN","MAGDMEDL",94,0)
3120+ W:$Y+3>IOSL @IOF W !,MSG
3121+"RTN","MAGDMEDL",95,0)
3122+ Q
3123+"RTN","MAGDMEDL",96,0)
3124+LINE ;
3125+"RTN","MAGDMEDL",97,0)
3126+ W !,ENTRY,".) "_OUTPUT
3127+"RTN","MAGDMEDL",98,0)
3128+ Q
3129+"RTN","MAGDMEDL",99,0)
3130+ASKQ ;
3131+"RTN","MAGDMEDL",100,0)
3132+ N X,Y,DIR
3133+"RTN","MAGDMEDL",101,0)
3134+ S DIR(0)="L^1:"_$S('ENTRY:ITEMS,1:ENTRY)
3135+"RTN","MAGDMEDL",102,0)
3136+ S DIR("T")=600,DIR("A")="Select an entry: " D ^DIR
3137+"RTN","MAGDMEDL",103,0)
3138+ S ITEM=+Y
3139+"RTN","MAGDMEDL",104,0)
3140+ Q:$D(DIRUT)!($D(DIROUT))
3141+"RTN","MAGDMEDL",105,0)
3142+ Q:'ITEM
3143+"RTN","MAGDMEDL",106,0)
3144+ I '$D(ARRAY(ITEM)) W !,"Please select an entry or '^' to exit" G ASKQ
3145+"RTN","MAGDMEDL",107,0)
3146+ W !,"You have selected ",$P($G(ARRAY(ITEM)),"^")
3147+"RTN","MAGDMEDL",108,0)
3148+ S OUT=1
3149+"RTN","MAGDMEDL",109,0)
3150+ Q
3151+"RTN","MAGDMEDL",110,0)
3152+ASKMORE() ;
3153+"RTN","MAGDMEDL",111,0)
3154+ N DIR,DATE,X,XX,Y
3155+"RTN","MAGDMEDL",112,0)
3156+ Q:'$D(MAGPAT)
3157+"RTN","MAGDMEDL",113,0)
3158+ Q:'$D(SUB)
3159+"RTN","MAGDMEDL",114,0)
3160+ S DIR(0)="Y",DIR("B")="NO"
3161+"RTN","MAGDMEDL",115,0)
3162+ S DIR("A")="Search further"
3163+"RTN","MAGDMEDL",116,0)
3164+ D ^DIR K DIR
3165+"RTN","MAGDMEDL",117,0)
3166+ I 'Y Q 0
3167+"RTN","MAGDMEDL",118,0)
3168+ W !,"Search will include 3 days prior to the day specified."
3169+"RTN","MAGDMEDL",119,0)
3170+ S DIR(0)="D^::EXP" D ^DIR
3171+"RTN","MAGDMEDL",120,0)
3172+ ; Y2K compliance all calls to %DT must have either past or future date
3173+"RTN","MAGDMEDL",121,0)
3174+ I 'Y Q 0
3175+"RTN","MAGDMEDL",122,0)
3176+ S DATE=Y
3177+"RTN","MAGDMEDL",123,0)
3178+ D LOOP(.XX,MAGPAT,SUB,DATE)
3179+"RTN","MAGDMEDL",124,0)
3180+ I $D(XX(0)),$P(XX(0),"^")=0 D Q 0
3181+"RTN","MAGDMEDL",125,0)
3182+ . W "No entries found."
3183+"RTN","MAGDMEDL",126,0)
3184+ Q 1
3185+"RTN","MSCGUX53")
3186+0^^B360592
3187+"RTN","MSCGUX53",1,0)
3188+MSCGUX53 ;MSC/JDS - ENVIRONMENT CHECK ; ; 29 Apr 2009 1:47 PM
3189+"RTN","MSCGUX53",2,0)
3190+ ;;**MSC**;
3191+"RTN","MSCGUX53",3,0)
3192+ I $G(^%ZOSF("OS"))'["GT.M" Q ;Not GTM
3193+"RTN","MSCGUX53",4,0)
3194+ I $P($ZV,"V",2)<5.3 D MESS^XPDUL("GT.M version must be 5.3 or Greater") S XPDABORT=2
3195+"RTN","MSCGUX53",5,0)
3196+
3197+"RTN","MSCGUX53",6,0)
3198+
3199+"RTN","MSCGUX53",7,0)
3200+
3201+"RTN","MSCXUS3A")
3202+0^31^B8005003
3203+"RTN","MSCXUS3A",1,0)
3204+MSCXUS3A ;SF-ISC/STAFF MSC/JDS - CHANGE UCI'S ;30APR2009
3205+"RTN","MSCXUS3A",2,0)
3206+ ;;8.0;KERNEL;**13,282,MSC**;Jul 10, 1995
3207+"RTN","MSCXUS3A",3,0)
3208+ Q
3209+"RTN","MSCXUS3A",4,0)
3210+ ;PICK A UCI TO SWITCH TO
3211+"RTN","MSCXUS3A",5,0)
3212+SWITCH ;Allow users that have the UCI fIeld In there NP fIle to swItch UCI's.
3213+"RTN","MSCXUS3A",6,0)
3214+ W !!,"Switch UCI's optIon.",!
3215+"RTN","MSCXUS3A",7,0)
3216+ ;I $$PROGMODE^%ZOSV() W !,$C(7),"No switching UCI's In Programmer Mode." Q
3217+"RTN","MSCXUS3A",8,0)
3218+ N DIR,X,Y,PGM,%UCI,DEF,L,USERNAME
3219+"RTN","MSCXUS3A",9,0)
3220+ S DEF="ZU" ;DEF is default routine to swItch to.
3221+"RTN","MSCXUS3A",10,0)
3222+UCI Q:'$G(DUZ) S USERNAME=$P($G(^VA(200,DUZ,0)),U) Q:USERNAME=""
3223+"RTN","MSCXUS3A",11,0)
3224+ S DIR(0)="S^"_$$NSP(USERNAME) I DIR(0)'[";" W "YOU AREN'T A USER IN ANY OTHER NAMESPACE" Q
3225+"RTN","MSCXUS3A",12,0)
3226+ S DIR("A")="Select NAMESPACE"
3227+"RTN","MSCXUS3A",13,0)
3228+ D ^DIR K DIR I $D(DUOUT)!$D(DTOUT)!(U[X) Q
3229+"RTN","MSCXUS3A",14,0)
3230+SAME I X="" Q ;Didn't select anythIng.
3231+"RTN","MSCXUS3A",15,0)
3232+ ;D PM
3233+"RTN","MSCXUS3A",16,0)
3234+ S (X,%UCI)=Y(0) X ^%ZOSF("UCICHECK") I 0[Y G BAD
3235+"RTN","MSCXUS3A",17,0)
3236+ K XQY0 S Y=$O(^[%UCI]VA(200,"B",USERNAME,0))
3237+"RTN","MSCXUS3A",18,0)
3238+ I Y S DIR=$P($G(^[%UCI]VA(200,Y,201)),U)
3239+"RTN","MSCXUS3A",19,0)
3240+ I DIR,$P($G(^[%UCI]DIC(19,DIR,0)),U,4)="M" S DUZ=Y,XQY=DIR,(DEF,PGM)="%MSCXUCI" G NXT
3241+"RTN","MSCXUS3A",20,0)
3242+BAD W !,"UCI not found!" D SHOW G UCI
3243+"RTN","MSCXUS3A",21,0)
3244+ ;
3245+"RTN","MSCXUS3A",22,0)
3246+NXT ;Here we go.
3247+"RTN","MSCXUS3A",23,0)
3248+ D C^XUSCLEAN K ^XUTL("XQ",$J),^XUTL($J),^TMP($J),^UTILITY($J)
3249+"RTN","MSCXUS3A",24,0)
3250+ K DA G GO^%MSCXUCI
3251+"RTN","MSCXUS3A",25,0)
3252+ ;
3253+"RTN","MSCXUS3A",26,0)
3254+ ;
3255+"RTN","MSCXUS3A",27,0)
3256+SHOW W ! S I=0,UC="",X=$S($D(^VA(200,DUZ,201)):+^(201),1:0)
3257+"RTN","MSCXUS3A",28,0)
3258+ W !,"Enter ^ to return to your current menu, or select from:"
3259+"RTN","MSCXUS3A",29,0)
3260+ F I=0:0 S I=$O(^VA(200,DUZ,.2,I)) Q:I'>0 D
3261+"RTN","MSCXUS3A",30,0)
3262+ . W !,?5 S UC=$G(^VA(200,DUZ,.2,I,0)),X=$P(UC,U,1),UC=$P(UC,U,2,99)
3263+"RTN","MSCXUS3A",31,0)
3264+ . I UC'[":" W I
3265+"RTN","MSCXUS3A",32,0)
3266+ . D PM W ?10,X X ^%ZOSF("UCICHECK") I 0[Y W " -- Not currently a valId UCI!",$C(7) Q
3267+"RTN","MSCXUS3A",33,0)
3268+ . W:UC]"" ":"_UC
3269+"RTN","MSCXUS3A",34,0)
3270+ . Q
3271+"RTN","MSCXUS3A",35,0)
3272+ Q
3273+"RTN","MSCXUS3A",36,0)
3274+ ;
3275+"RTN","MSCXUS3A",37,0)
3276+PM I X="PROD"!(X="MGR") S X=^%ZOSF(X)
3277+"RTN","MSCXUS3A",38,0)
3278+ Q
3279+"RTN","MSCXUS3A",39,0)
3280+ ;
3281+"RTN","MSCXUS3A",40,0)
3282+ ;
3283+"RTN","MSCXUS3A",41,0)
3284+ ;
3285+"RTN","MSCXUS3A",42,0)
3286+NSP(USERNAME) ;LIST OTHER NAMESPACES WHERE THIS USER IS
3287+"RTN","MSCXUS3A",43,0)
3288+ N X,L,I,Y
3289+"RTN","MSCXUS3A",44,0)
3290+ X ^%ZOSF("UCI") S Y=$P(Y,",") I ^%ZOSF("OS")["GT.M" G GTMNSP
3291+"RTN","MSCXUS3A",45,0)
3292+ f I=1:1:$zu(90,0) s L($zu(90,2,0,I))="" ;***CACHE-SPECIFIC FROM %NSP
3293+"RTN","MSCXUS3A",46,0)
3294+ S (I,L,X)="" F S I=$O(L(I)) Q:I="" I I'=Y D ;NOT THE CURRENT ONE
3295+"RTN","MSCXUS3A",47,0)
3296+ .N DUZ S DUZ=$O(^[I]VA(200,"B",USERNAME,0)) Q:'DUZ
3297+"RTN","MSCXUS3A",48,0)
3298+ .I $P($G(^[I]VA(200,DUZ,0)),U,3)=""!'$G(^(201)) Q ;THEY MUST HAVE ACCESS CODE AND PRIMARY MENU OPTION OVER THERE
3299+"RTN","MSCXUS3A",49,0)
3300+ .S L=L+1,X=X_L_":"_I_";"
3301+"RTN","MSCXUS3A",50,0)
3302+ Q X
3303+"RTN","MSCXUS3A",51,0)
3304+GTMNSP ;
3305+"RTN","MSCXUS3A",52,0)
3306+ N CURRENT S CURRENT=Y
3307+"RTN","MSCXUS3A",53,0)
3308+ D LIST^ZCD()
3309+"RTN","MSCXUS3A",54,0)
3310+ S (I,L,X)="" F S I=$O(Y(I)) Q:'I S A=Y(I) I A'=CURRENT D ;NOT THE CURRENT ONE
3311+"RTN","MSCXUS3A",55,0)
3312+ .S A=$P($ZG,"/"_$$CURRENT^ZCD_"/")_"/"_A_"/"_$P($ZG,"/"_$$CURRENT^ZCD_"/",2)
3313+"RTN","MSCXUS3A",56,0)
3314+ .N DUZ S DUZ=$O(^[A]VA(200,"B",USERNAME,0)) Q:'DUZ
3315+"RTN","MSCXUS3A",57,0)
3316+ .I $P($G(^[A]VA(200,DUZ,0)),U,3)=""!'$G(^(201)) Q ;THEY MUST HAVE ACCESS CODE AND PRIMARY MENU OPTION OVER THERE
3317+"RTN","MSCXUS3A",58,0)
3318+ .S L=L+1,X=X_L_":"_A_";"
3319+"RTN","MSCXUS3A",59,0)
3320+ Q X
3321+"RTN","MSCZJOB")
3322+0^1^B12965530
3323+"RTN","MSCZJOB",1,0)
3324+MSCZJOB ;GFT,JDS,JKT/MSC;29OCT2009
3325+"RTN","MSCZJOB",2,0)
3326+ ;;8.0;KERNEL;**MSC**
3327+"RTN","MSCZJOB",3,0)
3328+ W !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3329+"RTN","MSCZJOB",4,0)
3330+ N MSC
3331+"RTN","MSCZJOB",5,0)
3332+DDS ;
3333+"RTN","MSCZJOB",6,0)
3334+ S DDSFILE=3.081,DR="[MSCZJOBEXAM]",DDSPARM="S"
3335+"RTN","MSCZJOB",7,0)
3336+ D ^DDS K ^TMP("MSCZJOB1",$J) Q
3337+"RTN","MSCZJOB",8,0)
3338+ ;
3339+"RTN","MSCZJOB",9,0)
3340+UNLOCK(D0) ;FROM FIELD 2, PAGE 3: UNLOCK THE LOCK
3341+"RTN","MSCZJOB",10,0)
3342+ N X,R,N S R=$G(@MSC@(MSCJOBID,"L",D0)) I R'["^" Q ;CAN'T SEE IT
3343+"RTN","MSCZJOB",11,0)
3344+ S R=$P(R," ",2),X="L "_R D ^DIM Q:'$D(X)
3345+"RTN","MSCZJOB",12,0)
3346+ S N=$$NSP(MSCJOBD0)
3347+"RTN","MSCZJOB",13,0)
3348+ D UNLOCK^MSCZJOBU(R,N)
3349+"RTN","MSCZJOB",14,0)
3350+ Q
3351+"RTN","MSCZJOB",15,0)
3352+ ;
3353+"RTN","MSCZJOB",16,0)
3354+KILL(J) ;FROM FIELD
3355+"RTN","MSCZJOB",17,0)
3356+ D KILL^MSCZJOBU(J)
3357+"RTN","MSCZJOB",18,0)
3358+ Q
3359+"RTN","MSCZJOB",19,0)
3360+ ;
3361+"RTN","MSCZJOB",20,0)
3362+COMPMUL ;COMPUTED MULTIPLE FOR MSCZJOBEXAM BLOCK
3363+"RTN","MSCZJOB",21,0)
3364+ N X,D0,J
3365+"RTN","MSCZJOB",22,0)
3366+ S MSC="^TMP(""MSCZJOB1"",$J)" D POLL
3367+"RTN","MSCZJOB",23,0)
3368+ D JOBEXAM^MSCZJOBU(MSC)
3369+"RTN","MSCZJOB",24,0)
3370+ F D0=0:0 S D0=$O(MSCZJOB(D0)) Q:'D0 D
3371+"RTN","MSCZJOB",25,0)
3372+ .S MSCZJOB(D0)=MSCZJOB(D0)_U_$$DEV(D0)_U_$$USER(D0)_U_$$NSP(D0)_U_U_U_U_U_$$ROUTINE(D0)
3373+"RTN","MSCZJOB",26,0)
3374+ .S X=MSCZJOB(D0) X DICMX
3375+"RTN","MSCZJOB",27,0)
3376+ Q
3377+"RTN","MSCZJOB",28,0)
3378+JOB(D0) Q $P(MSCZJOB(D0),U) ;***
3379+"RTN","MSCZJOB",29,0)
3380+DEV(D0) Q $$FIND(D0,"I","$PRINCIPAL")
3381+"RTN","MSCZJOB",30,0)
3382+NSP(D0) N N D Q N
3383+"RTN","MSCZJOB",31,0)
3384+ .N L,P S N=$$FIND(D0,"I","$ZGBLDIR"),L=$L(N,"/") I L<2 Q
3385+"RTN","MSCZJOB",32,0)
3386+ .F L=L-1:-1:2 S P=$P(N,"/",L) I P'[".",P'["globals" Q
3387+"RTN","MSCZJOB",33,0)
3388+ .S P=1 I $P(N,"/")="" S P=2
3389+"RTN","MSCZJOB",34,0)
3390+ .S N=$P(N,"/",L)
3391+"RTN","MSCZJOB",35,0)
3392+USER(D0) Q $P($G(^VA(200,+$$FIND(D0,"V","DUZ"),0)),U)
3393+"RTN","MSCZJOB",36,0)
3394+ROUTINE(D0) Q $$FIND(D0,"V","%ZPOS")
3395+"RTN","MSCZJOB",37,0)
3396+ ;
3397+"RTN","MSCZJOB",38,0)
3398+FIND(D0,ARR,KEY) N I,J,X S X="",J=+MSCZJOB(D0)
3399+"RTN","MSCZJOB",39,0)
3400+ F I=0:0 S I=$O(@MSC@(J,ARR,I)) Q:'I I $P(^(I),KEY_"=")="" S X=$TR($P(^(I),"=",2),"""") Q
3401+"RTN","MSCZJOB",40,0)
3402+ Q X
3403+"RTN","MSCZJOB",41,0)
3404+ ;
3405+"RTN","MSCZJOB",42,0)
3406+COMPSTK ;COMPUTED MULTIPLE FOR MSCZJOBSTACK BLOCK
3407+"RTN","MSCZJOB",43,0)
3408+ S MSC="^TMP(""MSCZJOB1"",$J)" K @MSC@(MSCJOBID) D POLL1
3409+"RTN","MSCZJOB",44,0)
3410+ D JOBEXAM^MSCZJOBU(MSC,MSCJOBID)
3411+"RTN","MSCZJOB",45,0)
3412+ N D0,J S J=MSCJOBID
3413+"RTN","MSCZJOB",46,0)
3414+ F D0=1:1:$O(@MSC@(J,"S",""),-1) S X="" X DICMX
3415+"RTN","MSCZJOB",47,0)
3416+ Q
3417+"RTN","MSCZJOB",48,0)
3418+ ;
3419+"RTN","MSCZJOB",49,0)
3420+STACK(D0) N X S X=$G(@MSC@(MSCJOBID,"S",D0))
3421+"RTN","MSCZJOB",50,0)
3422+ Q X
3423+"RTN","MSCZJOB",51,0)
3424+ ;
3425+"RTN","MSCZJOB",52,0)
3426+COMPVARS ;COMPUTED MULTIPLE FOR MSCZJOBVARS BLOCK
3427+"RTN","MSCZJOB",53,0)
3428+ S MSC="^TMP(""MSCZJOB1"",$J)" K @MSC@(MSCJOBID) D POLL1
3429+"RTN","MSCZJOB",54,0)
3430+ D JOBEXAM^MSCZJOBU(MSC,MSCJOBID)
3431+"RTN","MSCZJOB",55,0)
3432+ N D0,J S J=MSCJOBID
3433+"RTN","MSCZJOB",56,0)
3434+ F D0=1:1:$O(@MSC@(J,"V",""),-1) S X="" X DICMX
3435+"RTN","MSCZJOB",57,0)
3436+ Q
3437+"RTN","MSCZJOB",58,0)
3438+ ;
3439+"RTN","MSCZJOB",59,0)
3440+COMPLKS ;COMPUTED MULTIPLE FOR MSCZJOBLOCKS BLOCK
3441+"RTN","MSCZJOB",60,0)
3442+ S MSC="^TMP(""MSCZJOB1"",$J)" D POLL1
3443+"RTN","MSCZJOB",61,0)
3444+ D JOBEXAM^MSCZJOBU(MSC,MSCJOBID)
3445+"RTN","MSCZJOB",62,0)
3446+ N D0
3447+"RTN","MSCZJOB",63,0)
3448+ F D0=1:1:$$LOCKS S X="" X DICMX
3449+"RTN","MSCZJOB",64,0)
3450+ Q
3451+"RTN","MSCZJOB",65,0)
3452+ ;
3453+"RTN","MSCZJOB",66,0)
3454+LOCKS() Q +$O(@MSC@(MSCJOBID,"L",""),-1)
3455+"RTN","MSCZJOB",67,0)
3456+ ;
3457+"RTN","MSCZJOB",68,0)
3458+POLL K MSCZJOB ;D HLP^DDSUTL(" POLLING JOBS.....")
3459+"RTN","MSCZJOB",69,0)
3460+ I $G(^%ZOSF("OS"))["GT.M" D
3461+"RTN","MSCZJOB",70,0)
3462+ .K @MSC
3463+"RTN","MSCZJOB",71,0)
3464+ .D INTRPT^MSCZJOBU("*") ;SETS UP ^TMP
3465+"RTN","MSCZJOB",72,0)
3466+ .N MSCA,I D PIDS^MSCZJOBU(.MSCA)
3467+"RTN","MSCZJOB",73,0)
3468+ .S MSCA="" F I=1:1 S MSCA=$O(MSCA(MSCA)) Q:'MSCA S MSCZJOB(I)=MSCA ;SETS UP LOCAL ARRAY
3469+"RTN","MSCZJOB",74,0)
3470+ .H 1 ;WAIT FOR POLLING
3471+"RTN","MSCZJOB",75,0)
3472+ D TEST
3473+"RTN","MSCZJOB",76,0)
3474+ Q
3475+"RTN","MSCZJOB",77,0)
3476+ ;
3477+"RTN","MSCZJOB",78,0)
3478+POLL1 Q:'$G(MSCJOBID)
3479+"RTN","MSCZJOB",79,0)
3480+ I $G(^%ZOSF("OS"))["GT.M" D
3481+"RTN","MSCZJOB",80,0)
3482+ .K @MSC@(MSCJOBID)
3483+"RTN","MSCZJOB",81,0)
3484+ .D INTRPT^MSCZJOBU(MSCJOBID) ;SETS UP ^TMP(MSCZJOB)
3485+"RTN","MSCZJOB",82,0)
3486+ .H 1 ;WAIT FOR POLLING
3487+"RTN","MSCZJOB",83,0)
3488+ D TEST
3489+"RTN","MSCZJOB",84,0)
3490+ Q
3491+"RTN","MSCZJOB",85,0)
3492+ ;
3493+"RTN","MSCZJOB",86,0)
3494+TEST Q
3495+"RTN","MSCZJOB",87,0)
3496+COMPLK ;COMPUTED MULTIPLE FOR MSCZLOCK BLOCK
3497+"RTN","MSCZJOB",88,0)
3498+ N X,D0,J
3499+"RTN","MSCZJOB",89,0)
3500+ S MSC="^TMP(""MSCZJOB1"",$J)" K @MSC D POLL,JOBEXAM^MSCZJOBU(MSC) S D0=0
3501+"RTN","MSCZJOB",90,0)
3502+ F K=0:0 S K=$O(MSCZJOB(K)) Q:'K D
3503+"RTN","MSCZJOB",91,0)
3504+ .F J=0:0 S J=$O(^TMP("MSCZJOB1",$J,MSCZJOB(K),"L",J)) Q:'J S A=$TR(^(J),U,"~") D
3505+"RTN","MSCZJOB",92,0)
3506+ ..S D0=D0+1,MSCZLK(D0)=$P(A,"LOCK ",2,9)_U_$$USER(K)_U_$TR($$ROUTINE(K),U,"~")_"^^"_MSCZJOB(K)
3507+"RTN","MSCZJOB",93,0)
3508+ ..S X=MSCZLK(D0) X DICMX
3509+"RTN","MSCZJOB",94,0)
3510+ Q
3511+"RTN","MSCZJOB",95,0)
3512+LOCK ;
3513+"RTN","MSCZJOB",96,0)
3514+ S DDSFILE=3.081,DR="[MSCZLOCK]",DDSPARM="S"
3515+"RTN","MSCZJOB",97,0)
3516+ D ^DDS Q
3517+"RTN","MSCZJOB",98,0)
3518+UNL(D0) ;FROM FIELD 2, PAGE 3: UNLOCK THE LOCK
3519+"RTN","MSCZJOB",99,0)
3520+ N X,R,N S R=$P($G(MSCZLK(D0)),U),P=$P($G(MSCZLK(D0)),U,5) ;I R'["^" Q ;CAN'T SEE IT
3521+"RTN","MSCZJOB",100,0)
3522+ S R=$P(R,"~",2),R="^"_$S(R'["(":$P(R," "),1:$P(R,")")_")"),X="L "_R D ^DIM Q:'$D(X) ;GOOD SYNTAX?
3523+"RTN","MSCZJOB",101,0)
3524+ S N=$$NSP(D0)
3525+"RTN","MSCZJOB",102,0)
3526+ D UNLOCK^MSCZJOBU(R,N)
3527+"RTN","MSCZJOBS")
3528+0^46^B5731054
3529+"RTN","MSCZJOBS",1,0)
3530+MSCZJOBS ;JKT/MSC - OpenVista System status ;24AUG2009
3531+"RTN","MSCZJOBS",2,0)
3532+ ;;8.0;KERNEL;**MSC**
3533+"RTN","MSCZJOBS",3,0)
3534+ ;
3535+"RTN","MSCZJOBS",4,0)
3536+ALL D SS() Q
3537+"RTN","MSCZJOBS",5,0)
3538+THIS D SS(1) Q
3539+"RTN","MSCZJOBS",6,0)
3540+ ;
3541+"RTN","MSCZJOBS",7,0)
3542+SS(THIS) ;Print GT.M mumps processes
3543+"RTN","MSCZJOBS",8,0)
3544+ ; If THIS is true, only print processes associated with the current
3545+"RTN","MSCZJOBS",9,0)
3546+ ; OpenVista instance
3547+"RTN","MSCZJOBS",10,0)
3548+ ;
3549+"RTN","MSCZJOBS",11,0)
3550+ Q:$G(^%ZOSF("OS"))'["GT.M"
3551+"RTN","MSCZJOBS",12,0)
3552+ ;
3553+"RTN","MSCZJOBS",13,0)
3554+ D INTRPT^MSCZJOBU("*") H .5
3555+"RTN","MSCZJOBS",14,0)
3556+ ;
3557+"RTN","MSCZJOBS",15,0)
3558+ N DATETIME S DATETIME=$$HTE^XLFDT($H)
3559+"RTN","MSCZJOBS",16,0)
3560+ W #!,?28,"OpenVista System Status"
3561+"RTN","MSCZJOBS",17,0)
3562+ W !,?(40-($L(DATETIME)/2)\1),DATETIME
3563+"RTN","MSCZJOBS",18,0)
3564+ W !!,?1,"PID/$J",?9,"%CPU",?15,"Device",?32,"Instance",?42,"Routine",?52,"User",?66,"Identity"
3565+"RTN","MSCZJOBS",19,0)
3566+ ;
3567+"RTN","MSCZJOBS",20,0)
3568+ N MSC S MSC="^TMP(""MSCZJOB1"",$J)" K @MSC
3569+"RTN","MSCZJOBS",21,0)
3570+ D JOBEXAM^MSCZJOBU(MSC)
3571+"RTN","MSCZJOBS",22,0)
3572+ N PID S PID=""
3573+"RTN","MSCZJOBS",23,0)
3574+ F S PID=$O(@MSC@(PID)) Q:PID="" D
3575+"RTN","MSCZJOBS",24,0)
3576+ . I $G(THIS) Q:$$INSTANCE(PID)'=$$CURRENT^ZCD()
3577+"RTN","MSCZJOBS",25,0)
3578+ . W !,$$PID(PID)
3579+"RTN","MSCZJOBS",26,0)
3580+ . W ?9,$$PCPU(PID)
3581+"RTN","MSCZJOBS",27,0)
3582+ . W ?15,$$DEVICE(PID)
3583+"RTN","MSCZJOBS",28,0)
3584+ . W ?32,$$INSTANCE(PID)
3585+"RTN","MSCZJOBS",29,0)
3586+ . W ?42,$$ROUTINE(PID)
3587+"RTN","MSCZJOBS",30,0)
3588+ . W ?52,$$USER(PID)
3589+"RTN","MSCZJOBS",31,0)
3590+ . W ?66,$$IDENT(PID)
3591+"RTN","MSCZJOBS",32,0)
3592+ K @MSC
3593+"RTN","MSCZJOBS",33,0)
3594+ ;
3595+"RTN","MSCZJOBS",34,0)
3596+ W !! ZSY "uptime"
3597+"RTN","MSCZJOBS",35,0)
3598+ Q
3599+"RTN","MSCZJOBS",36,0)
3600+ ;
3601+"RTN","MSCZJOBS",37,0)
3602+PID(PID) ;Return process ID formatted for display
3603+"RTN","MSCZJOBS",38,0)
3604+ Q $J(PID,7)_$S($J=PID:"*",1:"")
3605+"RTN","MSCZJOBS",39,0)
3606+ ;
3607+"RTN","MSCZJOBS",40,0)
3608+PCPU(PID) ;Return CPU usage
3609+"RTN","MSCZJOBS",41,0)
3610+ Q $J($G(@MSC@(PID,"PCPU")),4)
3611+"RTN","MSCZJOBS",42,0)
3612+ ;
3613+"RTN","MSCZJOBS",43,0)
3614+DEVICE(PID) ;Return device
3615+"RTN","MSCZJOBS",44,0)
3616+ N PRI S PRI=$$FIND(PID,"I","$PRINCIPAL")
3617+"RTN","MSCZJOBS",45,0)
3618+ Q:PRI'="0" PRI ; FIXME: this could probably be more general
3619+"RTN","MSCZJOBS",46,0)
3620+ ;
3621+"RTN","MSCZJOBS",47,0)
3622+ ; look at devices for sockets
3623+"RTN","MSCZJOBS",48,0)
3624+ N SOCK S SOCK=$$FIND(PID,"D"," SOCKET[0]")
3625+"RTN","MSCZJOBS",49,0)
3626+ I $P(SOCK," ",3)="LISTENING" Q $P($P(SOCK," PORT=",2)," ")_",LISTENING"
3627+"RTN","MSCZJOBS",50,0)
3628+ I $P(SOCK," ",3)="CONNECTED" Q $P($P($P(SOCK," LOCAL=",2)," "),"@",2)_",CONNECTED"
3629+"RTN","MSCZJOBS",51,0)
3630+ Q ""
3631+"RTN","MSCZJOBS",52,0)
3632+ ;
3633+"RTN","MSCZJOBS",53,0)
3634+INSTANCE(PID) ;Return name of OpenVista instance
3635+"RTN","MSCZJOBS",54,0)
3636+ N ZG S ZG=$$FIND(PID,"I","$ZGBLDIR")
3637+"RTN","MSCZJOBS",55,0)
3638+ Q $P(ZG,"/",$L(ZG,"/")-2)
3639+"RTN","MSCZJOBS",56,0)
3640+ ;
3641+"RTN","MSCZJOBS",57,0)
3642+ROUTINE(PID) ;Return routine
3643+"RTN","MSCZJOBS",58,0)
3644+ Q $P($$FIND(PID,"V","%ZPOS"),"^",2)
3645+"RTN","MSCZJOBS",59,0)
3646+ ;
3647+"RTN","MSCZJOBS",60,0)
3648+USER(PID) ;Return Linux user
3649+"RTN","MSCZJOBS",61,0)
3650+ Q $G(@MSC@(PID,"USER"))
3651+"RTN","MSCZJOBS",62,0)
3652+ ;
3653+"RTN","MSCZJOBS",63,0)
3654+IDENT(PID) ;Return OpenVista user
3655+"RTN","MSCZJOBS",64,0)
3656+ N DUZ S DUZ=+$$FIND(PID,"V","DUZ")
3657+"RTN","MSCZJOBS",65,0)
3658+ N ZG S ZG=$$FIND(PID,"I","$ZGBLDIR")
3659+"RTN","MSCZJOBS",66,0)
3660+ Q $P($G(^|ZG|VA(200,DUZ,0)),"^")
3661+"RTN","MSCZJOBS",67,0)
3662+ ;
3663+"RTN","MSCZJOBS",68,0)
3664+FIND(PID,ARR,KEY) ;Return the value of a key in one of the ZSHOW arrays
3665+"RTN","MSCZJOBS",69,0)
3666+ N I,X S I="",X=""
3667+"RTN","MSCZJOBS",70,0)
3668+ F S I=$O(@MSC@(PID,ARR,I)) Q:'I I $P(@MSC@(PID,ARR,I),KEY_"=")="" S X=$TR($P(@MSC@(PID,ARR,I),"=",2,999),"""") Q
3669+"RTN","MSCZJOBS",71,0)
3670+ Q X
3671+"RTN","MSCZJOBU")
3672+0^4^B9589351
3673+"RTN","MSCZJOBU",1,0)
3674+MSCZJOBU ;RHL,JDS,JKT/MSC;29OCT2009
3675+"RTN","MSCZJOBU",2,0)
3676+ ;;8.0;KERNEL;**MSC**
3677+"RTN","MSCZJOBU",3,0)
3678+ ;
3679+"RTN","MSCZJOBU",4,0)
3680+ ; JOB EXAM UTILITIES FOR GT.M
3681+"RTN","MSCZJOBU",5,0)
3682+ Q
3683+"RTN","MSCZJOBU",6,0)
3684+PIDS(XARY) ; GET ARRAY OF ALL MUMPS PROCESS
3685+"RTN","MSCZJOBU",7,0)
3686+ ; XARY PASSED BY REFERENCE
3687+"RTN","MSCZJOBU",8,0)
3688+ ; RETURNS XARY(PID)=""
3689+"RTN","MSCZJOBU",9,0)
3690+ ; NOTE: Unix PID=$J for all mumps processes.
3691+"RTN","MSCZJOBU",10,0)
3692+ ;
3693+"RTN","MSCZJOBU",11,0)
3694+ N DEV
3695+"RTN","MSCZJOBU",12,0)
3696+ S DEV="psdev"
3697+"RTN","MSCZJOBU",13,0)
3698+ OPEN DEV:(COMM="ps -o pid=,pcpu=,user= -C mumps":READONLY)::"PIPE"
3699+"RTN","MSCZJOBU",14,0)
3700+ N %I S %I=$I
3701+"RTN","MSCZJOBU",15,0)
3702+ U DEV
3703+"RTN","MSCZJOBU",16,0)
3704+ ;
3705+"RTN","MSCZJOBU",17,0)
3706+ N LINE,PID,PCPU,USER
3707+"RTN","MSCZJOBU",18,0)
3708+ F R LINE Q:LINE="" D
3709+"RTN","MSCZJOBU",19,0)
3710+ . S PID=$E(LINE,1,5) F Q:$E(PID,1)'=" " S PID=$E(PID,2,999) ; strip leading spaces
3711+"RTN","MSCZJOBU",20,0)
3712+ . S PCPU=$E(LINE,6,10) F Q:$E(PCPU,1)'=" " S PCPU=$E(PCPU,2,999) ; strip leading spaces
3713+"RTN","MSCZJOBU",21,0)
3714+ . S USER=$E(LINE,12,999)
3715+"RTN","MSCZJOBU",22,0)
3716+ . S XARY(PID)=""
3717+"RTN","MSCZJOBU",23,0)
3718+ . S XARY(PID,"PCPU")=PCPU
3719+"RTN","MSCZJOBU",24,0)
3720+ . S XARY(PID,"USER")=USER
3721+"RTN","MSCZJOBU",25,0)
3722+ ;
3723+"RTN","MSCZJOBU",26,0)
3724+ U %I
3725+"RTN","MSCZJOBU",27,0)
3726+ C DEV
3727+"RTN","MSCZJOBU",28,0)
3728+ Q
3729+"RTN","MSCZJOBU",29,0)
3730+ ;
3731+"RTN","MSCZJOBU",30,0)
3732+JOBEXAM(XARY,ONEPID) ; GET ARRAY OF JOB EXAM DATA FOR ALL MUMPS PROCESSES
3733+"RTN","MSCZJOBU",31,0)
3734+ ; XARY is the name of a variable (or global) to merge job exam data into
3735+"RTN","MSCZJOBU",32,0)
3736+ ;
3737+"RTN","MSCZJOBU",33,0)
3738+ ; get a list of all OpenVista instances and look up their $ZG values
3739+"RTN","MSCZJOBU",34,0)
3740+ N Y D LIST^ZCD
3741+"RTN","MSCZJOBU",35,0)
3742+ N INSTANCE S INSTANCE=""
3743+"RTN","MSCZJOBU",36,0)
3744+ F S INSTANCE=$O(Y("B",INSTANCE)) Q:INSTANCE="" D
3745+"RTN","MSCZJOBU",37,0)
3746+ . N %ZG,%ZRO D NEWZGZRO^ZCD(INSTANCE)
3747+"RTN","MSCZJOBU",38,0)
3748+ . S Y("B",INSTANCE)=%ZG
3749+"RTN","MSCZJOBU",39,0)
3750+ ;
3751+"RTN","MSCZJOBU",40,0)
3752+ ; get a list of all mumps processes
3753+"RTN","MSCZJOBU",41,0)
3754+ N PIDS D PIDS(.PIDS)
3755+"RTN","MSCZJOBU",42,0)
3756+ N PID S PID=""
3757+"RTN","MSCZJOBU",43,0)
3758+ ;
3759+"RTN","MSCZJOBU",44,0)
3760+ ; clean up data in ^TMP("MSCZJOB") for processes that no longer exist
3761+"RTN","MSCZJOBU",45,0)
3762+ F S INSTANCE=$O(Y("B",INSTANCE)) Q:INSTANCE="" D
3763+"RTN","MSCZJOBU",46,0)
3764+ . F S PID=$O(^|Y("B",INSTANCE)|TMP("MSCZJOB",PID)) Q:PID="" D
3765+"RTN","MSCZJOBU",47,0)
3766+ . . I '$D(PIDS(PID)) K ^|Y("B",INSTANCE)|TMP("MSCZJOB",PID)
3767+"RTN","MSCZJOBU",48,0)
3768+ ;
3769+"RTN","MSCZJOBU",49,0)
3770+ ; consolidate data from ^TMP("MSCZJOB") into XARY
3771+"RTN","MSCZJOBU",50,0)
3772+ I $G(ONEPID) D GETJOB(ONEPID) Q
3773+"RTN","MSCZJOBU",51,0)
3774+ F S PID=$O(PIDS(PID)) Q:PID="" D GETJOB(PID)
3775+"RTN","MSCZJOBU",52,0)
3776+ Q
3777+"RTN","MSCZJOBU",53,0)
3778+GETJOB(PID) ; private, to be called from JOBEXAM only
3779+"RTN","MSCZJOBU",54,0)
3780+ ; search each OpenVista instance for the latest job exam data
3781+"RTN","MSCZJOBU",55,0)
3782+ ; for PID and merge it into XARY
3783+"RTN","MSCZJOBU",56,0)
3784+ N SORTDATE
3785+"RTN","MSCZJOBU",57,0)
3786+ F S INSTANCE=$O(Y("B",INSTANCE)) Q:INSTANCE="" D
3787+"RTN","MSCZJOBU",58,0)
3788+ . N H S H=$G(^|Y("B",INSTANCE)|TMP("MSCZJOB",PID,0)) Q:H=""
3789+"RTN","MSCZJOBU",59,0)
3790+ . S SORTDATE($$SEC^XLFDT(H))=INSTANCE
3791+"RTN","MSCZJOBU",60,0)
3792+ N MAXDATE S MAXDATE=$O(SORTDATE(""),-1) Q:MAXDATE=""
3793+"RTN","MSCZJOBU",61,0)
3794+ M @XARY@(PID)=^|Y("B",SORTDATE(MAXDATE))|TMP("MSCZJOB",PID)
3795+"RTN","MSCZJOBU",62,0)
3796+ S @XARY@(PID,"PCPU")=PIDS(PID,"PCPU")
3797+"RTN","MSCZJOBU",63,0)
3798+ S @XARY@(PID,"USER")=PIDS(PID,"USER")
3799+"RTN","MSCZJOBU",64,0)
3800+ Q
3801+"RTN","MSCZJOBU",65,0)
3802+ ;
3803+"RTN","MSCZJOBU",66,0)
3804+INTRPT(PID) ; SEND mupip intrpt to process with PID
3805+"RTN","MSCZJOBU",67,0)
3806+ ; WHICH CAUSES THE $ZINTERRUPT CODE TO BE EXECUTED.
3807+"RTN","MSCZJOBU",68,0)
3808+ ; PID PASSED BY VALUE
3809+"RTN","MSCZJOBU",69,0)
3810+ ; PID CAN BE A SINGLE PID, I.E. $J
3811+"RTN","MSCZJOBU",70,0)
3812+ ; PID CAN BE A "*" WHICH SENDS AN INTERRUPT TO ALL MUMPS PROCESSES
3813+"RTN","MSCZJOBU",71,0)
3814+ ;
3815+"RTN","MSCZJOBU",72,0)
3816+ Q:$G(PID)'?1N.N&($G(PID)'="*")
3817+"RTN","MSCZJOBU",73,0)
3818+ ;
3819+"RTN","MSCZJOBU",74,0)
3820+ N CMD,DEV
3821+"RTN","MSCZJOBU",75,0)
3822+ S CMD="gtmsignal -q "_$S(PID="*":"-a",1:PID)
3823+"RTN","MSCZJOBU",76,0)
3824+ S DEV="gtmsignaldev"
3825+"RTN","MSCZJOBU",77,0)
3826+ OPEN DEV:(COMM=CMD:READONLY)::"PIPE" U DEV C DEV
3827+"RTN","MSCZJOBU",78,0)
3828+ Q
3829+"RTN","MSCZJOBU",79,0)
3830+ ;
3831+"RTN","MSCZJOBU",80,0)
3832+KILL(PID) ; Send mupip stop to process with PID
3833+"RTN","MSCZJOBU",81,0)
3834+ ; PID PASSED BY VALUE
3835+"RTN","MSCZJOBU",82,0)
3836+ ; PID CAN BE A SINGLE PID, I.E. $J
3837+"RTN","MSCZJOBU",83,0)
3838+ ;
3839+"RTN","MSCZJOBU",84,0)
3840+ Q:$G(PID)'?1N.N
3841+"RTN","MSCZJOBU",85,0)
3842+ ;
3843+"RTN","MSCZJOBU",86,0)
3844+ N DEV
3845+"RTN","MSCZJOBU",87,0)
3846+ S DEV="gtmsignaldev"
3847+"RTN","MSCZJOBU",88,0)
3848+ OPEN DEV:(COMM="gtmsignal -q -s "_PID:READONLY)::"PIPE" U DEV C DEV
3849+"RTN","MSCZJOBU",89,0)
3850+ Q
3851+"RTN","MSCZJOBU",90,0)
3852+ ;
3853+"RTN","MSCZJOBU",91,0)
3854+UNLOCK(NODE,INSTANCE) ; Use lke to remove lock on NODE.
3855+"RTN","MSCZJOBU",92,0)
3856+ N %ZG,%ZRO
3857+"RTN","MSCZJOBU",93,0)
3858+ D:$G(INSTANCE)'="" NEWZGZRO^ZCD(INSTANCE)
3859+"RTN","MSCZJOBU",94,0)
3860+ N CMD,DEV
3861+"RTN","MSCZJOBU",95,0)
3862+ S CMD="lke clear -lock="""_NODE_""" -nointeractive -output=/dev/null"
3863+"RTN","MSCZJOBU",96,0)
3864+ S:$G(%ZG)'="" CMD="gtmgbldir="""_%ZG_""" "_CMD
3865+"RTN","MSCZJOBU",97,0)
3866+ S DEV="lkedev"
3867+"RTN","MSCZJOBU",98,0)
3868+ OPEN DEV:(SHELL="/bin/sh":COMM=CMD:READONLY)::"PIPE" U DEV C DEV
3869+"RTN","MSCZJOBU",99,0)
3870+ Q
3871+"RTN","PRCSEA")
3872+0^37^B66865498
3873+"RTN","PRCSEA",1,0)
3874+PRCSEA ;WISC/SAW/DXH/BM/SC/DAP,MSC/JDA - CONTROL POINT ACTIVITY EDITS ;27APR2009
3875+"RTN","PRCSEA",2,0)
3876+V ;;5.1;IFCAP;**81,MSC**;Oct 20, 2000
3877+"RTN","PRCSEA",3,0)
3878+ ;Per VHA Directive 10-93-142, this routine should not be modified.
3879+"RTN","PRCSEA",4,0)
3880+ ;
3881+"RTN","PRCSEA",5,0)
3882+ ;PRC*5.1*81 BMM 3/23/05 when a 2237 is canceled, in CT1, add code
3883+"RTN","PRCSEA",6,0)
3884+ ;to update Audit file (#414.02), and send update message to
3885+"RTN","PRCSEA",7,0)
3886+ ;DynaMed thru a call to rtn PRCVTCA.
3887+"RTN","PRCSEA",8,0)
3888+ ;
3889+"RTN","PRCSEA",9,0)
3890+ENRS ;ENTER REQ
3891+"RTN","PRCSEA",10,0)
3892+ S PRCSK=1,X3="H"
3893+"RTN","PRCSEA",11,0)
3894+ D EN1F^PRCSUT(1) ; ask site,FY,QRTR,CP & set up PRC array, PRCSIP variable ; prc*5*197
3895+"RTN","PRCSEA",12,0)
3896+ G W2:'$D(PRC("SITE")),EXIT:Y<0 ; unauthorized user or '^' entered
3897+"RTN","PRCSEA",13,0)
3898+ D W6 ; display help on transaction# format
3899+"RTN","PRCSEA",14,0)
3900+ENRS0 S DLAYGO=410,DIC="^PRCS(410,",DIC(0)="AELQ",D="H"
3901+"RTN","PRCSEA",15,0)
3902+ S DIC("A")="Select TRANSACTION: "
3903+"RTN","PRCSEA",16,0)
3904+ S DIC("S")="I '^(0),$P(^(0),U,3)'="""",$D(^PRCS(410,""H"",$P(^(0),U,3),+Y)),^(+Y)=DUZ!(^(+Y)="""")" ; only requests authored by user or unauthored will display on partial match
3905+"RTN","PRCSEA",17,0)
3906+ D ^PRCSDIC ; lookup & preliminary validity checking
3907+"RTN","PRCSEA",18,0)
3908+ K DLAYGO,DIC("A"),DIC("S")
3909+"RTN","PRCSEA",19,0)
3910+ G:Y<0 EXIT
3911+"RTN","PRCSEA",20,0)
3912+ I $P(Y,U,3)'=1 W $C(7)," Must be a new entry." G ENRS0
3913+"RTN","PRCSEA",21,0)
3914+ ;*81 Check site parameter to see if issue books are allowed
3915+"RTN","PRCSEA",22,0)
3916+ D CKPRM^PRCSEB
3917+"RTN","PRCSEA",23,0)
3918+ W !!,PRCVY,!
3919+"RTN","PRCSEA",24,0)
3920+ S (PDA,T1,DA)=+Y
3921+"RTN","PRCSEA",25,0)
3922+ L +^PRCS(410,DA):1 I $T=0 W !,"File is being accessed...try a different transaction number or try later" G ENRS0
3923+"RTN","PRCSEA",26,0)
3924+ S T(2)=$P(Y,U,2)
3925+"RTN","PRCSEA",27,0)
3926+ D EN2A^PRCSUT3 ; saves CP,sta,substa,txn name,user,BBFY,RB stat,acct data in new txn (nodes 0,3,6,11 of file 410)
3927+"RTN","PRCSEA",28,0)
3928+ S $P(^PRCS(410,DA,14),"^")=DUZ ; originator (entered by)
3929+"RTN","PRCSEA",29,0)
3930+ S $P(^PRCS(410,DA,7),"^")=DUZ,$P(^PRCS(410,DA,7),"^",2)=$P($G(^VA(200,DUZ,20)),"^",3) ; requestor default
3931+"RTN","PRCSEA",30,0)
3932+ I $G(PRCSIP) S $P(^PRCS(410,DA,0),"^",6)=PRCSIP,^PRCS(410,"AO",PRCSIP,DA)="" ; PRCSIP was set up in PRCSUT & is inventory distribution point
3933+"RTN","PRCSEA",31,0)
3934+ S PRCS="" ; set PRCS=1 if CP is automated, i.e. it uses IFCAP to send requests to A&MM
3935+"RTN","PRCSEA",32,0)
3936+ I $D(^PRC(420,PRC("SITE"),1,+PRC("CP"),0)) S:$P(^(0),"^",11)="Y" PRCS=1
3937+"RTN","PRCSEA",33,0)
3938+TYPE ;
3939+"RTN","PRCSEA",34,0)
3940+ W !!,"This transaction is assigned temporary transaction number: ",T(2)
3941+"RTN","PRCSEA",35,0)
3942+ S DIC("A")="FORM TYPE: ",DIC="^PRCS(410.5,",DIC(0)="AEQZ"
3943+"RTN","PRCSEA",36,0)
3944+ S DIC("S")=PRCVX ; only allow selection of 2237's
3945+"RTN","PRCSEA",37,0)
3946+ D ^DIC
3947+"RTN","PRCSEA",38,0)
3948+ S DA=PDA
3949+"RTN","PRCSEA",39,0)
3950+ ;if user didn't enter a form type, go ask whether to backout and act
3951+"RTN","PRCSEA",40,0)
3952+ ;accordingly: go let them re-enter a form type or exit
3953+"RTN","PRCSEA",41,0)
3954+ I Y<0 G:'$$BACKOUT(T(2),DA) TYPE L -^PRCS(420,DA) G EXIT
3955+"RTN","PRCSEA",42,0)
3956+ ;
3957+"RTN","PRCSEA",43,0)
3958+ I Y<2 W "??" G TYPE
3959+"RTN","PRCSEA",44,0)
3960+ K PRCVX,PRCVY
3961+"RTN","PRCSEA",45,0)
3962+ S $P(^PRCS(410,DA,0),"^",4)=+Y,X=+Y ; form type
3963+"RTN","PRCSEA",46,0)
3964+ ; if CP is not automated (file 420), user's response will be overwritten with non-recuring (type 2). Although user's selection is changed 'behind the scenes',
3965+"RTN","PRCSEA",47,0)
3966+ ; the scenario is unlikely to occur because full implementation of IFCAP was made mandatory and sites are now automated.
3967+"RTN","PRCSEA",48,0)
3968+ S:'PRCS&(X>2) $P(^PRCS(410,DA,0),"^",4)=2,X=2
3969+"RTN","PRCSEA",49,0)
3970+ K PRCSERR ; flag denoting item info is missing
3971+"RTN","PRCSEA",50,0)
3972+ S DIC(0)="AEMQ",(DIC,DIE)="^PRCS(410,"
3973+"RTN","PRCSEA",51,0)
3974+ S (PRCSDR,DR)="["_$S(X=2:"PRCSEN2237S",X=3:"PRCSENPRS",X=4:"PRCSENR&NRS",1:"PRCSENIBS")_"]"
3975+"RTN","PRCSEA",52,0)
3976+EN1 K DTOUT,DUOUT,Y
3977+"RTN","PRCSEA",53,0)
3978+ D ^DIE
3979+"RTN","PRCSEA",54,0)
3980+ S DA=PDA
3981+"RTN","PRCSEA",55,0)
3982+ I $D(Y)!($D(DTOUT)) D DOR L -^PRCS(410,DA) G EXIT
3983+"RTN","PRCSEA",56,0)
3984+ D RL^PRCSUT1 ; sets up 'IT' & '10' nodes
3985+"RTN","PRCSEA",57,0)
3986+ D ^PRCSCK I $D(PRCSERR),PRCSERR G EN1 ; missing required field ('item')
3987+"RTN","PRCSEA",58,0)
3988+ D DOR ; populate date of request field if it is nil
3989+"RTN","PRCSEA",59,0)
3990+ L -^PRCS(410,DA)
3991+"RTN","PRCSEA",60,0)
3992+ S T="enter" D W5 G EXIT:%'=1
3993+"RTN","PRCSEA",61,0)
3994+ W !! K PRCS("SUB")
3995+"RTN","PRCSEA",62,0)
3996+ G ENRS
3997+"RTN","PRCSEA",63,0)
3998+ ;
3999+"RTN","PRCSEA",64,0)
4000+EDRS ;EDIT REQ
4001+"RTN","PRCSEA",65,0)
4002+ ; following line commented out by PRC*5*140 - user responses not used to limit selection of txn and sometimes resulted in bad info being set into the selected txn
4003+"RTN","PRCSEA",66,0)
4004+ ; S PRCSK=1 D EN1F^PRCSUT(1) G W2:'$D(PRC("SITE")),EXIT:Y<0 ; ask sta,FY,QRTR,CP ; prc*5*197
4005+"RTN","PRCSEA",67,0)
4006+ ; if the above line is reactivated, programmer should note that the transaction selected may not be of the same FY,QRTR,sta, subst, and CP specified by the user
4007+"RTN","PRCSEA",68,0)
4008+ D W6 ; format doc for txn#
4009+"RTN","PRCSEA",69,0)
4010+ S X3="H" S DIC="^PRCS(410,",DIC(0)="AEQ",D="H"
4011+"RTN","PRCSEA",70,0)
4012+ S DIC("A")="Select TRANSACTION: "
4013+"RTN","PRCSEA",71,0)
4014+ S DIC("S")="I '^(0),$P(^(0),U,3)'="""",$P(^(0),U,4)'=1,^PRCS(410,""H"",$P(^(0),U,3),+Y)=DUZ!(^(+Y)="""")" ; request must be authored by user or unauthored & cannot be a 1358
4015+"RTN","PRCSEA",72,0)
4016+ D ^PRCSDIC G EXIT:Y<0 K DIC("A"),DIC("S")
4017+"RTN","PRCSEA",73,0)
4018+ S (PDA,DA,T1)=+Y
4019+"RTN","PRCSEA",74,0)
4020+ L +^PRCS(410,DA):1 I $T=0 W !,"File is being accessed...please try later" G EDRS
4021+"RTN","PRCSEA",75,0)
4022+ ; following line commented out in PRC*5*140 - PRCSUT3 needs PRC("SST") or MYY to do something, neither exists in this option
4023+"RTN","PRCSEA",76,0)
4024+ ; D EN2B^PRCSUT3
4025+"RTN","PRCSEA",77,0)
4026+ S PRC("SITE")=+$P(^PRCS(410,PDA,0),"^",5)
4027+"RTN","PRCSEA",78,0)
4028+ S PRC("CP")=$P(^PRCS(410,PDA,3),"^")
4029+"RTN","PRCSEA",79,0)
4030+ I $P(^PRCS(410,PDA,0),"^",6)="" D ; prc*5*197
4031+"RTN","PRCSEA",80,0)
4032+ . N PRCSIP D IP^PRCSUT
4033+"RTN","PRCSEA",81,0)
4034+ . I $D(PRCSIP) S $P(^PRC(410,DA,0),U,6)=PRCSIP
4035+"RTN","PRCSEA",82,0)
4036+ S X=+$P(^PRCS(410,DA,0),"^",4) I X<1 D FORM
4037+"RTN","PRCSEA",83,0)
4038+ ;*81 Check site parameter to see if Issue Books are allowed
4039+"RTN","PRCSEA",84,0)
4040+ D CKPRM
4041+"RTN","PRCSEA",85,0)
4042+ I PRCVD=1 S PRCVZ=1
4043+"RTN","PRCSEA",86,0)
4044+ I PRCVD'=1 S PRCVZ=0
4045+"RTN","PRCSEA",87,0)
4046+ W !,"The form type for this transaction is ",$P($G(^PRCS(410.5,X,0)),"^"),!
4047+"RTN","PRCSEA",88,0)
4048+ I PRCVZ=1,X=5 W !,"All Supply Warehouse requests must be processed in the new Inventory System.",!!,"Please cancel this IFCAP issue book order." S T="edit" D W5 G:%'=1 EXIT W !! K PRCS("SUB") G EDRS
4049+"RTN","PRCSEA",89,0)
4050+ ;
4051+"RTN","PRCSEA",90,0)
4052+ S DIC(0)="AEMQ",(DIC,DIE)="^PRCS(410,"
4053+"RTN","PRCSEA",91,0)
4054+ ;P182--Modified next 3 lines to use new templates if supply fund FCP
4055+"RTN","PRCSEA",92,0)
4056+ S (DR,PRCSDR)="["_$S(X=1:"PRCE NEW 1358S",X=2:"PRCSEN2237S",X=3:"PRCSENPRS",X=4:"PRCSENR&NRS",1:"PRCSENIBS")_"]"
4057+"RTN","PRCSEA",93,0)
4058+ED1 K DTOUT,DUOUT,Y
4059+"RTN","PRCSEA",94,0)
4060+ D ^DIE
4061+"RTN","PRCSEA",95,0)
4062+ S DA=PDA
4063+"RTN","PRCSEA",96,0)
4064+ I $D(Y)!($D(DTOUT)) L -^PRCS(410,DA) G EXIT
4065+"RTN","PRCSEA",97,0)
4066+ D RL^PRCSUT1
4067+"RTN","PRCSEA",98,0)
4068+ D ^PRCSCK I $D(PRCSERR),PRCSERR G ED1
4069+"RTN","PRCSEA",99,0)
4070+ K PRCSERR S $P(^PRCS(410,DA,14),"^")=DUZ
4071+"RTN","PRCSEA",100,0)
4072+ L -^PRCS(410,DA)
4073+"RTN","PRCSEA",101,0)
4074+ S T="edit" D W5 G EXIT:%'=1
4075+"RTN","PRCSEA",102,0)
4076+ W !! K PRCS("SUB")
4077+"RTN","PRCSEA",103,0)
4078+ G EDRS
4079+"RTN","PRCSEA",104,0)
4080+ ;
4081+"RTN","PRCSEA",105,0)
4082+CT ;CANCEL A (PERMANENT) TRANS
4083+"RTN","PRCSEA",106,0)
4084+ D EN3^PRCSUT
4085+"RTN","PRCSEA",107,0)
4086+ G W2:'$D(PRC("SITE")),EXIT:Y<0
4087+"RTN","PRCSEA",108,0)
4088+ S DIC="^PRCS(410,",DIC(0)="AEMQ"
4089+"RTN","PRCSEA",109,0)
4090+ ;S DIC("S")="I $P(^(0),""^"",4)=.5!($S('$D(^(7)):1,1:$P(^(7),""^"",6)="""")) I +^(0)>0,$D(^(3)),+^(3)=+PRC(""CP""),$P(^(0),""^"",5)=PRC(""SITE"") I $D(^PRC(420,""A"",DUZ,PRC(""SITE""),+PRC(""CP""),1))!($D(^(2)))"
4091+"RTN","PRCSEA",110,0)
4092+ S DIC("S")="I $P(^(0),U,2)=""O""!($P(^(0),U,2)=""A""&($P(^(0),U,4)=1)),$S('$D(^(7)):1,1:$P(^(7),""^"",6)=""""),$D(^(3)),+^(3)=+PRC(""CP""),$P(^(0),U,5)=PRC(""SITE"") I $D(^PRC(420,""A"",DUZ,PRC(""SITE""),+PRC(""CP""),1))!($D(^(2)))"
4093+"RTN","PRCSEA",111,0)
4094+ S DIC("A")="Select TRANSACTION: "
4095+"RTN","PRCSEA",112,0)
4096+ D ^PRCSDIC G EXIT:Y<0 K DIC("S"),DIC("A")
4097+"RTN","PRCSEA",113,0)
4098+CT1 W !,"Cancel this transaction" S %=2 D YN^DICN G CT1:%=0,EXIT:%'=1
4099+"RTN","PRCSEA",114,0)
4100+ S DA=+Y
4101+"RTN","PRCSEA",115,0)
4102+ L +^PRCS(410,DA):1 I $T=0 W !,"File is being accessed...please try later" G CT
4103+"RTN","PRCSEA",116,0)
4104+ S T=$P(^PRCS(410,DA,0),"^"),$P(^(11),"^",3)="",$P(^(0),"^",2)="CA",$P(^(5),"^")=0,$P(^(6),"^")=0
4105+"RTN","PRCSEA",117,0)
4106+ K ^PRCS(410,"F",+T_"-"_+PRC("CP")_"-"_$P(T,"-",5),DA),^PRCS(410,"F1",$P(T,"-",5)_"-"_+T_"-"_+PRC("CP"),DA),^PRCS(410,"AQ",1,DA)
4107+"RTN","PRCSEA",118,0)
4108+ K ZX
4109+"RTN","PRCSEA",119,0)
4110+ I $D(^PRCS(410,DA,4)) S ZX=^(4),X=$P(ZX,"^",8) F I=1,3,6,8 S $P(ZX,"^",I)=0
4111+"RTN","PRCSEA",120,0)
4112+ I $D(ZX) S ^PRCS(410,DA,4)=ZX K ZX
4113+"RTN","PRCSEA",121,0)
4114+ I $D(^PRCS(410,DA,12,0)) S N=0 F I=0:0 S N=$O(^PRCS(410,DA,12,N)) Q:N'>0 S X=$P(^(N,0),"^",2) I X S DA(1)=DA,DA=N D TRANK^PRCSEZZ S DA=DA(1)
4115+"RTN","PRCSEA",122,0)
4116+ D ERS410^PRC0G(DA_"^C")
4117+"RTN","PRCSEA",123,0)
4118+ W !,"Enter comments for this cancellation",!
4119+"RTN","PRCSEA",124,0)
4120+ S DIE=DIC,DR=60
4121+"RTN","PRCSEA",125,0)
4122+ D ^DIE
4123+"RTN","PRCSEA",126,0)
4124+ ;PRC*5.1*81 if DM trx, update Audit file and send msg to DM
4125+"RTN","PRCSEA",127,0)
4126+ D EN^PRCVTCA(DA)
4127+"RTN","PRCSEA",128,0)
4128+ L -^PRCS(410,DA)
4129+"RTN","PRCSEA",129,0)
4130+ I $D(^PRC(443,DA,0)) S DIK="^PRC(443," D ^DIK K DIK
4131+"RTN","PRCSEA",130,0)
4132+ S T="cancel" D W4 G EXIT:%'=1
4133+"RTN","PRCSEA",131,0)
4134+ W !! G CT
4135+"RTN","PRCSEA",132,0)
4136+ ;
4137+"RTN","PRCSEA",133,0)
4138+DT ;DELETE A (TEMPORARY) TRANS
4139+"RTN","PRCSEA",134,0)
4140+ S X3="H"
4141+"RTN","PRCSEA",135,0)
4142+ D W6 ; format doc for txn#
4143+"RTN","PRCSEA",136,0)
4144+ S DIC="^PRCS(410,",DIC(0)="AEQ",DIC("A")="Select TRANSACTION: ",D="H"
4145+"RTN","PRCSEA",137,0)
4146+ S DIC("S")="S W=$P(^(0),""^"",5),W(1)=+^(3) I '^(0),$P(^(0),""^"",3)'="""",^PRCS(410,""H"",$P(^(0),""^"",3),+Y)=DUZ!(^(+Y)="""")!($D(^PRC(420,""A"",DUZ,W,W(1),1)))!($D(^(2)))"
4147+"RTN","PRCSEA",138,0)
4148+ D ^PRCSDIC G EXIT:Y<0
4149+"RTN","PRCSEA",139,0)
4150+ K DIC("S"),DIC("A")
4151+"RTN","PRCSEA",140,0)
4152+ S DA=+Y
4153+"RTN","PRCSEA",141,0)
4154+ L +^PRCS(410,DA):5 I $T=0 W !,"File is being accessed...please try later" G DT
4155+"RTN","PRCSEA",142,0)
4156+DT1 W !,"Delete this transaction" S %=2 D YN^DICN G DT1:%=0,EXIT:%'=1
4157+"RTN","PRCSEA",143,0)
4158+ ;The following line was commented out in patch 182; should NOT manually
4159+"RTN","PRCSEA",144,0)
4160+ ;change or reset last assigned IEN # in node zero.
4161+"RTN","PRCSEA",145,0)
4162+ ;S PRCSDA=$P(^PRCS(410,0),U,3),DIK=DIC
4163+"RTN","PRCSEA",146,0)
4164+ S DIK=DIC
4165+"RTN","PRCSEA",147,0)
4166+ W !,"Okay....."
4167+"RTN","PRCSEA",148,0)
4168+ D ^DIK K DIK
4169+"RTN","PRCSEA",149,0)
4170+ L -^PRCS(410,DA)
4171+"RTN","PRCSEA",150,0)
4172+ ;The following line was commented out in patch 182; should NOT manually
4173+"RTN","PRCSEA",151,0)
4174+ ;change or reset last assigned IEN # in node zero.
4175+"RTN","PRCSEA",152,0)
4176+ ;S $P(^PRCS(410,0),U,3)=PRCSDA
4177+"RTN","PRCSEA",153,0)
4178+ K PRCSDA
4179+"RTN","PRCSEA",154,0)
4180+ W "It's deleted"
4181+"RTN","PRCSEA",155,0)
4182+ S T="delete" D W4 G EXIT:%'=1
4183+"RTN","PRCSEA",156,0)
4184+ W !! G DT
4185+"RTN","PRCSEA",157,0)
4186+ ;
4187+"RTN","PRCSEA",158,0)
4188+ ;
4189+"RTN","PRCSEA",159,0)
4190+DOR ; Date of Request
4191+"RTN","PRCSEA",160,0)
4192+ I $D(^PRCS(410,DA,1)),$P(^PRCS(410,DA,1),"^")'="" Q
4193+"RTN","PRCSEA",161,0)
4194+ S %DT="X",X="T" D ^%DT S $P(^PRCS(410,DA,1),"^")=Y
4195+"RTN","PRCSEA",162,0)
4196+ Q
4197+"RTN","PRCSEA",163,0)
4198+FORM ;*81 Allow user to change txn to a valid form and check site parameter to see if issue books are allowed
4199+"RTN","PRCSEA",164,0)
4200+ D CKPRM
4201+"RTN","PRCSEA",165,0)
4202+ I PRCVD=1 S PRCVX1="I Y>1&(Y<5)",PRCVY1="The Issue Book and NO FORM type are not valid in this option."
4203+"RTN","PRCSEA",166,0)
4204+ I PRCVD'=1 S PRCVX1="I Y>1",PRCVY1="The NO FORM type is not valid in this option."
4205+"RTN","PRCSEA",167,0)
4206+ W !,PRCVY1,!
4207+"RTN","PRCSEA",168,0)
4208+ W !,"Please enter another form type",!
4209+"RTN","PRCSEA",169,0)
4210+ S PRCSDAA=DA,DIC="^PRCS(410.5,",DIC("A")="FORM TYPE: ",DIC(0)="AEQZ"
4211+"RTN","PRCSEA",170,0)
4212+ S DIC("S")=PRCVX1
4213+"RTN","PRCSEA",171,0)
4214+ D ^DIC
4215+"RTN","PRCSEA",172,0)
4216+ S:Y=-1 Y=2
4217+"RTN","PRCSEA",173,0)
4218+ S DA=PRCSDAA,$P(^PRCS(410,DA,0),"^",4)=+Y,X=+Y
4219+"RTN","PRCSEA",174,0)
4220+ K DIC,PRCVX1,PRCVY1,PRCVD
4221+"RTN","PRCSEA",175,0)
4222+ Q
4223+"RTN","PRCSEA",176,0)
4224+ ;
4225+"RTN","PRCSEA",177,0)
4226+ ;Allow user the option of re entering a form type. If they decline,
4227+"RTN","PRCSEA",178,0)
4228+ ;kill off the transaction and return 1; else return 0
4229+"RTN","PRCSEA",179,0)
4230+BACKOUT(TRNNAME,TRNDA) ;
4231+"RTN","PRCSEA",180,0)
4232+ N DIK,Y,%,DA
4233+"RTN","PRCSEA",181,0)
4234+ F D Q:%'=0
4235+"RTN","PRCSEA",182,0)
4236+ . W !!,"WARNING: WITHOUT A FORM TYPE, TRANSACTION """,TRNNAME,""" WILL BE DELETED!",$C(7)
4237+"RTN","PRCSEA",183,0)
4238+ . W !,"Are you sure you want to delete this transaction" S %=2 D YN^DICN
4239+"RTN","PRCSEA",184,0)
4240+ . Q
4241+"RTN","PRCSEA",185,0)
4242+ I %=2 Q 0
4243+"RTN","PRCSEA",186,0)
4244+ S DIK="^PRCS(410,",DA=TRNDA
4245+"RTN","PRCSEA",187,0)
4246+ D ^DIK
4247+"RTN","PRCSEA",188,0)
4248+ Q 1
4249+"RTN","PRCSEA",189,0)
4250+ ;
4251+"RTN","PRCSEA",190,0)
4252+W2 W !!,"You are not an authorized control point user.",!,"Contact control point official" R X:5 G EXIT
4253+"RTN","PRCSEA",191,0)
4254+W3 Q ; can this subroutine be deleted? commented out in patch PRC*5*140
4255+"RTN","PRCSEA",192,0)
4256+ W !!,"This transaction is assigned temporary transaction number: ",X Q
4257+"RTN","PRCSEA",193,0)
4258+W4 W !!,"Would you like to ",T," another transaction" S %=2 D YN^DICN G W4:%=0 Q
4259+"RTN","PRCSEA",194,0)
4260+W5 W !!,"Would you like to ",T," another request" S %=1 D YN^DICN G W5:%=0 Q
4261+"RTN","PRCSEA",195,0)
4262+W6 W !!,"For the transaction number, use an uppercase alpha as the first character,",!," and then 2-15 alphanumerics, as in 'ADP1'.",! Q
4263+"RTN","PRCSEA",196,0)
4264+ ;*81 Site parameter pull
4265+"RTN","PRCSEA",197,0)
4266+CKPRM S PRCVD=$$GET^XPAR("SYS","PRCV COTS INVENTORY",1,"Q")
4267+"RTN","PRCSEA",198,0)
4268+ Q
4269+"RTN","PRCSEA",199,0)
4270+ ;
4271+"RTN","PRCSEA",200,0)
4272+EXIT K %,C,D,DA,DIC,DIE,DR,PRCS,PDA,PRCSL,T,X,Y,Z,T1,X3,TYPE,PRCVZ
4273+"RTN","PRCSEA",201,0)
4274+ I $D(PRCSERR) K PRCSERR
4275+"RTN","PRCSEA",202,0)
4276+ Q
4277+"RTN","PSBOMH1")
4278+0^38^B71152392
4279+"RTN","PSBOMH1",1,0)
4280+PSBOMH1 ;BIRMINGHAM/EFC,MSC/JDA - MAH ;27APR2009
4281+"RTN","PSBOMH1",2,0)
4282+ ;;3.0;BAR CODE MED ADMIN;**6,3,9,11,26,MSC**;Mar 2004
4283+"RTN","PSBOMH1",3,0)
4284+ ;
4285+"RTN","PSBOMH1",4,0)
4286+ ; Reference/IA
4287+"RTN","PSBOMH1",5,0)
4288+ ; ^DILF/2054
4289+"RTN","PSBOMH1",6,0)
4290+ ; File 200/10060
4291+"RTN","PSBOMH1",7,0)
4292+ ;
4293+"RTN","PSBOMH1",8,0)
4294+EN ;
4295+"RTN","PSBOMH1",9,0)
4296+ ; Load administrations
4297+"RTN","PSBOMH1",10,0)
4298+ S (PSBORD,PSBIEN,PSBR1,PSBADIEN,PSBABR)="",PSBDT=PSBSTRT
4299+"RTN","PSBOMH1",11,0)
4300+ K PSBTSA
4301+"RTN","PSBOMH1",12,0)
4302+ F S PSBDT=$O(^PSB(53.79,"AADT",DFN,PSBDT)) Q:'PSBDT!(PSBDT>PSBSTOP) D
4303+"RTN","PSBOMH1",13,0)
4304+ .F S PSBIEN=$O(^PSB(53.79,"AADT",DFN,PSBDT,PSBIEN)) Q:'PSBIEN Q:'$D(^PSB(53.79,PSBIEN)) L +^PSB(53.79,PSBIEN):3 I $P(^PSB(53.79,PSBIEN,0),U,9)]"" D L -^PSB(53.79,PSBIEN)
4305+"RTN","PSBOMH1",14,0)
4306+ ..Q:'$P($G(^PSB(53.79,PSBIEN,0)),U,6) ; Bad IEN -no evnt dt
4307+"RTN","PSBOMH1",15,0)
4308+ ..Q:$P(^PSB(53.79,PSBIEN,0),U,9)="N" ;NGiven
4309+"RTN","PSBOMH1",16,0)
4310+ ..S PSBORD=$P($G(^PSB(53.79,PSBIEN,.1)),U,1)
4311+"RTN","PSBOMH1",17,0)
4312+ ..; Continuous
4313+"RTN","PSBOMH1",18,0)
4314+ ..D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)="C"
4315+"RTN","PSBOMH1",19,0)
4316+ ...S X=PSBDT D H^%DTC S PSBWEEK=PSBAR(%H) D CLEAN^PSBVT,PSJ1^PSBVT($P(^PSB(53.79,PSBIEN,0),U,1),$P(^PSB(53.79,PSBIEN,.1),U,1))
4317+"RTN","PSBOMH1",20,0)
4318+ ...I $P(^PSB(53.79,PSBIEN,0),U,6)'=PSBDT,'$$IVPTAB^PSBVDLU3(PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,PSBMR) D D CLEAN^PSBVT Q ;chck IV audit
4319+"RTN","PSBOMH1",21,0)
4320+ ....S PSBSIEN=PSBIEN
4321+"RTN","PSBOMH1",22,0)
4322+ ....I $P(^PSB(53.79,PSBIEN,0),"^",10)]"" D BAGDTL^PSBRPC2(.PSBAUD,$P(^PSB(53.79,PSBIEN,0),U,10),$P(^PSB(53.79,PSBIEN,.1),U,1))
4323+"RTN","PSBOMH1",23,0)
4324+ ....S PSBIEN=PSBSIEN K PSBSIEN
4325+"RTN","PSBOMH1",24,0)
4326+ ....S X=0 F S X=$O(PSBAUD(X)) Q:X="" I $P(PSBAUD(X),U,3)="" K PSBAUD(X)
4327+"RTN","PSBOMH1",25,0)
4328+ ....S X=0 F S X=$O(PSBAUD(X)) Q:X="" Q:$P(PSBAUD(X),U,1)=PSBDT
4329+"RTN","PSBOMH1",26,0)
4330+ ....I X="" K PSBAUD Q
4331+"RTN","PSBOMH1",27,0)
4332+ ....I '$D(PSBAUD(X)) K PSBAUD Q
4333+"RTN","PSBOMH1",28,0)
4334+ ....S PSBS=$P(PSBAUD(X),U,3)
4335+"RTN","PSBOMH1",29,0)
4336+ ....I PSBS="GIVEN",$P($G(PSBAUD(X-1)),U,3)="NOT GIVEN" Q
4337+"RTN","PSBOMH1",30,0)
4338+ ....I PSBS="NOT GIVEN" Q
4339+"RTN","PSBOMH1",31,0)
4340+ ....S PSBS=$S(PSBS="INFUSING":"I",PSBS="GIVEN":"G",PSBS="COMPLETED":"C",PSBS="HELD":"H",PSBS="REFUSED":"R",PSBS="REMOVED":"RM",PSBS="STOPPED":"S",PSBS["MISSING":"M",1:"NOACTION")
4341+"RTN","PSBOMH1",32,0)
4342+ ....D PSBSTIV^PSBOMH2
4343+"RTN","PSBOMH1",33,0)
4344+ ....S X=PSBDT_U_$P(PSBAUD(X),U,2)_U_PSBS_U_PSBIEN
4345+"RTN","PSBOMH1",34,0)
4346+ ....S Y=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,""),-1)+1
4347+"RTN","PSBOMH1",35,0)
4348+ ....S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,Y)=X
4349+"RTN","PSBOMH1",36,0)
4350+ ....S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,0)=Y
4351+"RTN","PSBOMH1",37,0)
4352+ ....D PSBOUT($P((X),"^",1),$P((X),"^",2))
4353+"RTN","PSBOMH1",38,0)
4354+ ....K PSBAUD
4355+"RTN","PSBOMH1",39,0)
4356+ ...S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL")
4357+"RTN","PSBOMH1",40,0)
4358+ ...S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:NAME")
4359+"RTN","PSBOMH1",41,0)
4360+ ...I PSBINIT="" S PSBINIT=99
4361+"RTN","PSBOMH1",42,0)
4362+ ...;get instrc info - audt log
4363+"RTN","PSBOMH1",43,0)
4364+ ...I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D
4365+"RTN","PSBOMH1",44,0)
4366+ ....D INSTR^PSBOMH
4367+"RTN","PSBOMH1",45,0)
4368+ ....S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)=""
4369+"RTN","PSBOMH1",46,0)
4370+ ...I PSBINIT[99 S PSBINIT=""
4371+"RTN","PSBOMH1",47,0)
4372+ ...I $P(^PSB(53.79,PSBIEN,0),U,9)="G",PSBDT=$P(^PSB(53.79,PSBIEN,0),U,6) D PSBCK1^PSBOMH2("A")
4373+"RTN","PSBOMH1",48,0)
4374+ ...I $P(^PSB(53.79,PSBIEN,0),U,9)'="G",PSBDT=$P(^PSB(53.79,PSBIEN,0),U,6) D PSBCK1^PSBOMH2("B")
4375+"RTN","PSBOMH1",49,0)
4376+ ...I PSBDT'=$P(^PSB(53.79,PSBIEN,0),U,6),$P(^PSB(53.79,PSBIEN,0),U,9)="RM" D
4377+"RTN","PSBOMH1",50,0)
4378+ ....D DDAUD
4379+"RTN","PSBOMH1",51,0)
4380+ ....S I="" F S I=$O(PSBTAR(I),-1) Q:I="" I $P(PSBTAR(I),U,1)=PSBDT D
4381+"RTN","PSBOMH1",52,0)
4382+ .....S PSBS=$P(PSBTAR(I),U,3)
4383+"RTN","PSBOMH1",53,0)
4384+ .....I PSBS="GIVEN",$P($G(PSBTAR(I-1)),U,3)="NOT GIVEN" Q ; canceled - not given
4385+"RTN","PSBOMH1",54,0)
4386+ .....I PSBS="NOT GIVEN" Q
4387+"RTN","PSBOMH1",55,0)
4388+ .....S PSBS=$S(PSBS="INFUSING":"I",PSBS="GIVEN":"G",PSBS="COMPLETED":"C",PSBS="HELD":"H",PSBS="REFUSED":"R",PSBS="REMOVED":"RM",PSBS="STOPPED":"S",PSBS["MISSING":"M",1:"NO ACTION")
4389+"RTN","PSBOMH1",56,0)
4390+ .....D PSBCTAR^PSBOMH2
4391+"RTN","PSBOMH1",57,0)
4392+ .....S X=$P(PSBTAR(I),U,1,2)_U_PSBS_U_PSBIEN
4393+"RTN","PSBOMH1",58,0)
4394+ ...S Y=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,""),-1)+1
4395+"RTN","PSBOMH1",59,0)
4396+ ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,Y)=X
4397+"RTN","PSBOMH1",60,0)
4398+ ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,0)=Y
4399+"RTN","PSBOMH1",61,0)
4400+ ...D PSBOUT($P((X),"^",1),$P((X),"^",2))
4401+"RTN","PSBOMH1",62,0)
4402+ ...Q
4403+"RTN","PSBOMH1",63,0)
4404+ ..; 1-Time On Call or PRN
4405+"RTN","PSBOMH1",64,0)
4406+ ..D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)'="C"
4407+"RTN","PSBOMH1",65,0)
4408+ ...I PSBDT'=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I") Q
4409+"RTN","PSBOMH1",66,0)
4410+ ...S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL")
4411+"RTN","PSBOMH1",67,0)
4412+ ...S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:NAME")
4413+"RTN","PSBOMH1",68,0)
4414+ ...I PSBINIT="" S PSBINIT=99
4415+"RTN","PSBOMH1",69,0)
4416+ ...S (PSBXA,PSBM)=1,(PSBZ,PSBT,PSBFLG)=""
4417+"RTN","PSBOMH1",70,0)
4418+ ...I $$GET1^DIQ(53.79,PSBIEN_",",.09)="REMOVED" D
4419+"RTN","PSBOMH1",71,0)
4420+ ....F I=1:1 S PSBXA=$O(^PSB(53.79,PSBIEN,.9,PSBXA)) Q:PSBXA="" I PSBXA?1.3N S PSBZ=PSBZ+1,PSBT(PSBZ)=^PSB(53.79,PSBIEN,.9,PSBXA,0)
4421+"RTN","PSBOMH1",72,0)
4422+ ....F S=1:1 Q:PSBM<1 S PSBM=PSBZ-S I (PSBM>0) I (PSBT(PSBM)["GIVEN") S PSBFLG="1" S PRELINE1=$P(PSBT(PSBM),"'",2)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.04)_" "_$E($P(PSBT(PSBM),"'",4),1,3) Q
4423+"RTN","PSBOMH1",73,0)
4424+ ...I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D
4425+"RTN","PSBOMH1",74,0)
4426+ ....D INSTR^PSBOMH
4427+"RTN","PSBOMH1",75,0)
4428+ ....S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)=""
4429+"RTN","PSBOMH1",76,0)
4430+ ...I '$D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D PSBOUT(PSBDT,PSBINIT)
4431+"RTN","PSBOMH1",77,0)
4432+ ...S PSBLINE1=$$GET1^DIQ(53.79,PSBIEN_",",.09)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.06)_" "_PSBINIT_" "_$$GET1^DIQ(53.79,PSBIEN_",",.21),PSBLINE2=""
4433+"RTN","PSBOMH1",78,0)
4434+ ...I PSBINIT[99 S PSBINIT=""
4435+"RTN","PSBOMH1",79,0)
4436+ ...D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)="P"
4437+"RTN","PSBOMH1",80,0)
4438+ ....I $P($G(^PSB(53.79,PSBIEN,.2)),U,2)="" S PSBLINE2=" Results: <No PRN Results On File>"
4439+"RTN","PSBOMH1",81,0)
4440+ ....E D
4441+"RTN","PSBOMH1",82,0)
4442+ .....S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","PRN EFFECTIVENESS ENTERED BY:INITIAL")
4443+"RTN","PSBOMH1",83,0)
4444+ .....S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","PRN EFFECTIVENESS ENTERED BY:NAME")
4445+"RTN","PSBOMH1",84,0)
4446+ .....I PSBINIT="" S PSBINIT=99
4447+"RTN","PSBOMH1",85,0)
4448+ .....I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D
4449+"RTN","PSBOMH1",86,0)
4450+ ......S PSBINIT=PSBINIT_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."),0),U,3)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.24)
4451+"RTN","PSBOMH1",87,0)
4452+ ......S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)=""
4453+"RTN","PSBOMH1",88,0)
4454+ .....I '$D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D
4455+"RTN","PSBOMH1",89,0)
4456+ ......D:$D(^PSB(53.79,PSBIEN,.9,0))
4457+"RTN","PSBOMH1",90,0)
4458+ .......S (PSBXA2,PSBFG)=0,PSBEFFDT=$P(^PSB(53.79,PSBIEN,.2),U,4) F S PSBXA2=$O(^PSB(53.79,PSBIEN,.9,PSBXA2)) Q:+PSBXA2'>0 D Q:PSBFG=1
4459+"RTN","PSBOMH1",91,0)
4460+ ........D:($P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U)=PSBEFFDT)&($P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,3)["Instruct")&($P(^PSB(53.79,PSBIEN,.2),U,3)=$P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,2))
4461+"RTN","PSBOMH1",92,0)
4462+ .........S PSBINIT=PSBINIT_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,3)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.24)
4463+"RTN","PSBOMH1",93,0)
4464+ .........S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="",PSBFG=1
4465+"RTN","PSBOMH1",94,0)
4466+ .....S PSBLINE2=" Results: "_$$GET1^DIQ(53.79,PSBIEN_",",.22)
4467+"RTN","PSBOMH1",95,0)
4468+ .....S PSBRTXTW=" Entered By "_PSBINIT_" on "_$$GET1^DIQ(53.79,PSBIEN_",",.24)
4469+"RTN","PSBOMH1",96,0)
4470+ .....I PSBINIT[99 S PSBINIT=""
4471+"RTN","PSBOMH1",97,0)
4472+ ...S X=PSBDT D H^%DTC F PSBWEEK=PSBAR(%H):-7 Q:$D(^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",0))!('$D(PSBAR(PSBWEEK)))
4473+"RTN","PSBOMH1",98,0)
4474+ ...S X=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",""),-1)+1
4475+"RTN","PSBOMH1",99,0)
4476+ ...I PSBFLG="1" S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X)=PRELINE1
4477+"RTN","PSBOMH1",100,0)
4478+ ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+1)=PSBLINE1
4479+"RTN","PSBOMH1",101,0)
4480+ ...I $G(PSBLINE2)]"" D
4481+"RTN","PSBOMH1",102,0)
4482+ ....I $L(PSBLINE2)<90 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+2)=PSBLINE2 S:$$GET1^DIQ(53.79,PSBIEN_",",.24)'="" ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+3)=" "_PSBRTXTW
4483+"RTN","PSBOMH1",103,0)
4484+ ....I $L(PSBLINE2)>90 D
4485+"RTN","PSBOMH1",104,0)
4486+ .....S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+2)=$E(PSBLINE2,1,90)
4487+"RTN","PSBOMH1",105,0)
4488+ .....S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+3)=" "_$E(PSBLINE2,91,161)
4489+"RTN","PSBOMH1",106,0)
4490+ .....I $L(PSBLINE2)'>161 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+4)=" "_PSBRTXTW
4491+"RTN","PSBOMH1",107,0)
4492+ .....I $L(PSBLINE2)>161 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+4)=" "_$E(PSBLINE2,162,200),^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+5)=" "_PSBRTXTW
4493+"RTN","PSBOMH1",108,0)
4494+ Q
4495+"RTN","PSBOMH1",109,0)
4496+ ;
4497+"RTN","PSBOMH1",110,0)
4498+DDAUD ; audits for dispen drugs
4499+"RTN","PSBOMH1",111,0)
4500+ ;
4501+"RTN","PSBOMH1",112,0)
4502+ M PSBMLA=^PSB(53.79,PSBIEN)
4503+"RTN","PSBOMH1",113,0)
4504+ S PSBGA="" I $D(PSBMLA(.9,0)) D
4505+"RTN","PSBOMH1",114,0)
4506+ .F PSBX=1:1 Q:'$D(PSBMLA(.9,PSBX)) I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D Q
4507+"RTN","PSBOMH1",115,0)
4508+ ..I $D(PSBMLA(.9,PSBX-2,0)) D DT^DILF("ENPST",$P(PSBMLA(.9,PSBX-2,0),"'",2),.PSBDATE)
4509+"RTN","PSBOMH1",116,0)
4510+ ..I '$D(PSBMLA(.9,PSBX-2,0)) S PSBDATE=$P(^PSB(53.79,PSBIEN,0),U,6)
4511+"RTN","PSBOMH1",117,0)
4512+ ..S PSBTMP(10000000-PSBDATE,"B")=PSBDATE_U_$$INITIAL^PSBRPC2($P(PSBMLA(0),U,5))_U_$P(PSBMLA(.9,PSBX,0),"'",2)
4513+"RTN","PSBOMH1",118,0)
4514+ ..S PSBGA=1
4515+"RTN","PSBOMH1",119,0)
4516+ .F PSBX=1:1 Q:'$D(PSBMLA(.9,PSBX)) I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D
4517+"RTN","PSBOMH1",120,0)
4518+ ..S PSBTMP(10000000-$P(PSBMLA(.9,PSBX,0),U,1),"B")=$P(PSBMLA(.9,PSBX,0),U,1)_U_$$INITIAL^PSBRPC2($P(PSBMLA(.9,PSBX,0),U,2))_U_$P($P(PSBMLA(.9,PSBX,0),U,3),"'",2)
4519+"RTN","PSBOMH1",121,0)
4520+ ..S PSBGA=1
4521+"RTN","PSBOMH1",122,0)
4522+ I PSBGA'=1 S PSBTMP(10000000-$P(PSBMLA(0),U,6),"A")=$P(PSBMLA(0),U,6)_U_$$INITIAL^PSBRPC2($P(PSBMLA(0),U,7))
4523+"RTN","PSBOMH1",123,0)
4524+ S PSBQRY="PSBTMP",PSBCNT=1 F S PSBPQRY=PSBQRY S PSBQRY=$Q(@PSBQRY) Q:PSBQRY="" D ; does comment go with action
4525+"RTN","PSBOMH1",124,0)
4526+ .I PSBPQRY="PSBTMP" S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; no prev action
4527+"RTN","PSBOMH1",125,0)
4528+ .I $QS(PSBPQRY,2)="C" S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; prev line = comment
4529+"RTN","PSBOMH1",126,0)
4530+ .I $QS(PSBQRY,2)="C",$E($P(@PSBPQRY,U,1),1,12)=$E($P(@PSBQRY,U,1),1,12),$P(@PSBPQRY,U,2)=$P(@PSBQRY,U,2) D Q
4531+"RTN","PSBOMH1",127,0)
4532+ ..S X=$P(@PSBQRY,U,4) S:X[":" X=$P(X,":",2) S $P(PSBTAR(PSBCNT-1),U,4)=X Q
4533+"RTN","PSBOMH1",128,0)
4534+ .S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1
4535+"RTN","PSBOMH1",129,0)
4536+ Q
4537+"RTN","PSBOMH1",130,0)
4538+ ;
4539+"RTN","PSBOMH1",131,0)
4540+PSBOUT(PSBTET,PSBOT1) ;
4541+"RTN","PSBOMH1",132,0)
4542+ I '$D(^PSB(53.79,PSBIEN,.9,0)) D PSBENT^PSBOMH2(PSBOT1)
4543+"RTN","PSBOMH1",133,0)
4544+ S PSBIDA="" I $P(^PSB(53.79,PSBIEN,0),U,6)=PSBTET S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,7),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1)
4545+"RTN","PSBOMH1",134,0)
4546+ S PSBXA1=0
4547+"RTN","PSBOMH1",135,0)
4548+ F S PSBXA1=$O(^PSB(53.79,PSBIEN,.9,PSBXA1)) Q:+PSBXA1'>0 I PSBXA1'=0 D Q:$G(PSBOT1)["*"
4549+"RTN","PSBOMH1",136,0)
4550+ .I $L(PSBXA1)<4 D
4551+"RTN","PSBOMH1",137,0)
4552+ ..I $P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",1)=PSBTET D
4553+"RTN","PSBOMH1",138,0)
4554+ ...S:$G(PSBIDA)="" PSBIDA=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",2),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1)
4555+"RTN","PSBOMH1",139,0)
4556+ ...I (PSBIDA=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",2)),$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",3)["Instruct" D
4557+"RTN","PSBOMH1",140,0)
4558+ ....S INSDD=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",1),Y=INSDD D DD^%DT S INSDD=Y
4559+"RTN","PSBOMH1",141,0)
4560+ ....S PSBOT1=PSBOT1_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),U,3)_" "_INSDD
4561+"RTN","PSBOMH1",142,0)
4562+ I $G(PSBIDA)="",$P(^PSB(53.79,PSBIEN,0),U,4)=PSBTET D
4563+"RTN","PSBOMH1",143,0)
4564+ .S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,5),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1)
4565+"RTN","PSBOMH1",144,0)
4566+ I $G(PSBNAME)="" D
4567+"RTN","PSBOMH1",145,0)
4568+ . S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,5),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1)
4569+"RTN","PSBOMH1",146,0)
4570+ I $G(PSBOT1)]""&($G(PSBNAME)]"") S ^TMP("PSB",$J,"LEGEND",PSBOT1,PSBNAME)="" ;MSC
4571+"RTN","PSBOMH1",147,0)
4572+ Q
4573+"RTN","PSBOMH1",148,0)
4574+ ;
4575+"RTN","PSBRPC2")
4576+0^39^B44967923
4577+"RTN","PSBRPC2",1,0)
4578+PSBRPC2 ;BIRMINGHAM/EFC,MSC/JDA - BCMA RPC BROKER CALLS ;27APR2009
4579+"RTN","PSBRPC2",2,0)
4580+ ;;3.0;BAR CODE MED ADMIN;**6,3,16,MSC**;Mar 2004
4581+"RTN","PSBRPC2",3,0)
4582+ ;
4583+"RTN","PSBRPC2",4,0)
4584+ ; Reference/IA
4585+"RTN","PSBRPC2",5,0)
4586+ ; File 50/221
4587+"RTN","PSBRPC2",6,0)
4588+ ; File 52.6/436
4589+"RTN","PSBRPC2",7,0)
4590+ ; File 52.7/437
4591+"RTN","PSBRPC2",8,0)
4592+ ; File 200/10060
4593+"RTN","PSBRPC2",9,0)
4594+ ;
4595+"RTN","PSBRPC2",10,0)
4596+GETOHIST(RESULTS,DFN,PSBORD) ;
4597+"RTN","PSBRPC2",11,0)
4598+ S RESULTS=$NAME(^TMP("PSB",$J)),PSB=0
4599+"RTN","PSBRPC2",12,0)
4600+ S ^TMP("PSB",$J,0)=1,^TMP("PSB",$J,1)="-1^No History On File"
4601+"RTN","PSBRPC2",13,0)
4602+ D NOW^%DTC S PSBNOW=$P(%,".",1),PSBNOWZ=%
4603+"RTN","PSBRPC2",14,0)
4604+ D EN^PSBPOIV(DFN,PSBORD)
4605+"RTN","PSBRPC2",15,0)
4606+ S PSBUID=DFN_"V"_99999 F S PSBUID=$O(^TMP("PSBAR",$J,PSBUID),-1) Q:PSBUID="" D
4607+"RTN","PSBRPC2",16,0)
4608+ .S PSBUIDS=^TMP("PSBAR",$J,PSBUID)
4609+"RTN","PSBRPC2",17,0)
4610+ .I ((PSBOSTS="D")!(PSBOSTS="E")),$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" Q ; only want the infusing bag on a dc'ed order
4611+"RTN","PSBRPC2",18,0)
4612+ .I (PSBOSTS="A"),(PSBOSP<PSBNOWZ),$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" S PSBOSTS="E" Q ; only want the infusing bag on an expired order
4613+"RTN","PSBRPC2",19,0)
4614+ .I $P(PSBUIDS,U,2)'="" D Q ; get orders from med log (53.79)
4615+"RTN","PSBRPC2",20,0)
4616+ ..S PSBMLOR=$P(PSBUIDS,U,4),PSBIEN=$O(^PSB(53.79,"AUID",DFN,PSBMLOR,PSBUID,""))
4617+"RTN","PSBRPC2",21,0)
4618+ ..S PSBLADT=$P(^PSB(53.79,PSBIEN,0),U,6)
4619+"RTN","PSBRPC2",22,0)
4620+ ..S PSBLASTS=$P(^PSB(53.79,PSBIEN,0),U,9)
4621+"RTN","PSBRPC2",23,0)
4622+ ..I PSBLASTS="M",$P(PSBUIDS,U,8)'="" Q
4623+"RTN","PSBRPC2",24,0)
4624+ ..S PSBINJS=$P(^PSB(53.79,PSBIEN,.1),U,6)
4625+"RTN","PSBRPC2",25,0)
4626+ ..S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBORD_U_PSBUID_U_PSBIEN_U_PSBLADT_U_PSBLASTS_U_PSBINJS
4627+"RTN","PSBRPC2",26,0)
4628+ ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.6,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="ADD^"_^PSB(53.79,PSBIEN,.6,PSBL,0)
4629+"RTN","PSBRPC2",27,0)
4630+ ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.7,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="SOL^"_^PSB(53.79,PSBIEN,.7,PSBL,0)
4631+"RTN","PSBRPC2",28,0)
4632+ ..S PSB=PSB+1,^TMP("PSB",$J,PSB)="END"
4633+"RTN","PSBRPC2",29,0)
4634+ .I $P(PSBUIDS,U,1)="I" Q ; IV parameters say bag is invalid
4635+"RTN","PSBRPC2",30,0)
4636+ .I $P(PSBUIDS,U,8)'="",$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" Q ; label has been reprinted/distroyed etc. - bag is not infusing or stopped
4637+"RTN","PSBRPC2",31,0)
4638+ .S PSB=PSB+1,^TMP("PSB",$J,PSB)=$P(PSBUIDS,U,5)_U_PSBUID_U_U_PSBNOW_U_"A"
4639+"RTN","PSBRPC2",32,0)
4640+ .S PSBUIDP=$P(PSBUIDS,U,10,999)
4641+"RTN","PSBRPC2",33,0)
4642+ .F Y=3:1 S PSBMEDTY=$P(PSBUIDP,U,Y) Q:PSBMEDTY="" D
4643+"RTN","PSBRPC2",34,0)
4644+ ..D CLEAN^PSBVT,PSJ1^PSBVT(DFN,$P(PSBUIDS,U,5))
4645+"RTN","PSBRPC2",35,0)
4646+ ..I $P(PSBMEDTY,";",1)="ADD" F Z=1:1 S PSBAD=$G(PSBADA(Z)) Q:PSBAD="" I $P(PSBADA(Z),U,2)=$P(PSBMEDTY,";",2) S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBADA(Z) Q
4647+"RTN","PSBRPC2",36,0)
4648+ ..I $P(PSBMEDTY,";",1)="SOL" F Z=1:1 S PSBSOL=$G(PSBSOLA(Z)) Q:PSBSOL="" I $P(PSBSOLA(Z),U,2)=$P(PSBMEDTY,";",2) S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBSOLA(Z) Q
4649+"RTN","PSBRPC2",37,0)
4650+ .D CLEAN^PSBVT,PSJ1^PSBVT(DFN,PSBORD)
4651+"RTN","PSBRPC2",38,0)
4652+ .S PSB=PSB+1,^TMP("PSB",$J,PSB)="END"
4653+"RTN","PSBRPC2",39,0)
4654+ F II=1:1 S I=$P(PSBONXS,U,II) Q:I="" D ; get ward stocks
4655+"RTN","PSBRPC2",40,0)
4656+ .S PSBUID="" F S PSBUID=$O(^PSB(53.79,"AUID",DFN,I,PSBUID)) Q:PSBUID="" D
4657+"RTN","PSBRPC2",41,0)
4658+ ..I PSBUID'["WS" Q ; not a ward stock
4659+"RTN","PSBRPC2",42,0)
4660+ ..S PSBIEN=$O(^PSB(53.79,"AUID",DFN,I,PSBUID,""))
4661+"RTN","PSBRPC2",43,0)
4662+ ..S PSBLADT=$P(^PSB(53.79,PSBIEN,0),U,6)
4663+"RTN","PSBRPC2",44,0)
4664+ ..S PSBLASTS=$P(^PSB(53.79,PSBIEN,0),U,9)
4665+"RTN","PSBRPC2",45,0)
4666+ ..I PSBOSTS="D",PSBLASTS'="I",PSBLASTS'="S" Q ; want "not completed" on DC'ed orders
4667+"RTN","PSBRPC2",46,0)
4668+ ..I (PSBOSTS="A"),(PSBOSP<PSBNOWZ),PSBLASTS'="I",PSBLASTS'="S" Q
4669+"RTN","PSBRPC2",47,0)
4670+ ..S PSBINJS=$P(^PSB(53.79,PSBIEN,.1),U,6)
4671+"RTN","PSBRPC2",48,0)
4672+ ..S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBORD_U_PSBUID_U_PSBIEN_U_PSBLADT_U_PSBLASTS_U_PSBINJS
4673+"RTN","PSBRPC2",49,0)
4674+ ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.6,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="ADD^"_^PSB(53.79,PSBIEN,.6,PSBL,0)
4675+"RTN","PSBRPC2",50,0)
4676+ ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.7,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="SOL^"_^PSB(53.79,PSBIEN,.7,PSBL,0)
4677+"RTN","PSBRPC2",51,0)
4678+ ..S PSB=PSB+1,^TMP("PSB",$J,PSB)="END"
4679+"RTN","PSBRPC2",52,0)
4680+ S ^TMP("PSB",$J,0)=PSB
4681+"RTN","PSBRPC2",53,0)
4682+ K ^TMP("PSBAR",$J)
4683+"RTN","PSBRPC2",54,0)
4684+ Q
4685+"RTN","PSBRPC2",55,0)
4686+ ;
4687+"RTN","PSBRPC2",56,0)
4688+BAGDTL(RESULTS,PSBUID,PSBORD) ; bag detail
4689+"RTN","PSBRPC2",57,0)
4690+ I '$G(DFN)!PSBUID S DFN=+PSBUID ;**GFT/MSC
4691+"RTN","PSBRPC2",58,0)
4692+ S (PSBIEN,X)="" F S X=$O(^PSB(53.79,"AUID",DFN,X)) Q:X="" S:$D(^PSB(53.79,"AUID",DFN,X,PSBUID)) PSBIEN=$O(^PSB(53.79,"AUID",DFN,X,PSBUID,"")) Q:PSBIEN]""
4693+"RTN","PSBRPC2",59,0)
4694+ I PSBIEN'>0 S RESULTS(0)=1,RESULTS(1)="-1^No History On File" Q
4695+"RTN","PSBRPC2",60,0)
4696+ M PSBMLA=^PSB(53.79,PSBIEN)
4697+"RTN","PSBRPC2",61,0)
4698+ S X=$P(^PSB(53.79,PSBIEN,0),U,9)
4699+"RTN","PSBRPC2",62,0)
4700+ S PSBLAC=$S(X="I":"INFUSING",X="G":"GIVEN",X="C":"COMPLETE",X="H":"HELD",X="R":"REFUSED",X="RM":"REMOVED",X="S":"STOPPED",X="M":"MISSING",1:"NO ACTION")
4701+"RTN","PSBRPC2",63,0)
4702+ ; comments
4703+"RTN","PSBRPC2",64,0)
4704+ S PSBX="0" F S PSBX=$O(PSBMLA(.3,PSBX)) Q:PSBX="" S PSBTMP(10000000-$P(PSBMLA(.3,PSBX,0),U,3),"C")=$P(PSBMLA(.3,PSBX,0),U,3)_U_$$INITIAL($P(PSBMLA(.3,PSBX,0),U,2))_U_U_$P(PSBMLA(.3,PSBX,0),U,1)
4705+"RTN","PSBRPC2",65,0)
4706+ ; audit
4707+"RTN","PSBRPC2",66,0)
4708+ S PSBGA="" I $D(PSBMLA(.9,0)) D
4709+"RTN","PSBRPC2",67,0)
4710+ .S PSBX="0" F S PSBX=$O(PSBMLA(.9,PSBX)) Q:PSBX="" I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D Q
4711+"RTN","PSBRPC2",68,0)
4712+ ..S PSBDATE=$P(PSBMLA(0),U,4) I (PSBX-2)>0 D DT^DILF("ENPST",$P(PSBMLA(.9,PSBX-2,0),"'",2),.PSBDATE)
4713+"RTN","PSBRPC2",69,0)
4714+ ..S PSBTMP(10000000-PSBDATE,"B")=PSBDATE_U_$$INITIAL($P(PSBMLA(0),U,5))_U_$P(PSBMLA(.9,PSBX,0),"'",2)
4715+"RTN","PSBRPC2",70,0)
4716+ ..S PSBGA=1
4717+"RTN","PSBRPC2",71,0)
4718+ .S PSBX="0" F S PSBX=$O(PSBMLA(.9,PSBX)) Q:PSBX="" I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D
4719+"RTN","PSBRPC2",72,0)
4720+ ..S PSBTMP(10000000-$P(PSBMLA(.9,PSBX,0),U,1),"B")=$P(PSBMLA(.9,PSBX,0),U,1)_U_$$INITIAL($P(PSBMLA(.9,PSBX,0),U,2))_U_$P($P(PSBMLA(.9,PSBX,0),U,3),"'",2)
4721+"RTN","PSBRPC2",73,0)
4722+ ..S PSBGA=1
4723+"RTN","PSBRPC2",74,0)
4724+ I PSBGA'=1 S PSBTMP(10000000-$P(PSBMLA(0),U,6),"A")=$P(PSBMLA(0),U,6)_U_$$INITIAL($P(PSBMLA(0),U,7))_U_PSBLAC
4725+"RTN","PSBRPC2",75,0)
4726+ S PSBQRY="PSBTMP",PSBCNT=1 F S PSBPQRY=PSBQRY S PSBQRY=$Q(@PSBQRY) Q:PSBQRY="" D ; does comment go with action
4727+"RTN","PSBRPC2",76,0)
4728+ .I PSBPQRY="PSBTMP" S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; no previous action
4729+"RTN","PSBRPC2",77,0)
4730+ .I $QS(PSBPQRY,2)="C" S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; previous line is a comment
4731+"RTN","PSBRPC2",78,0)
4732+ .I $QS(PSBQRY,2)="C",$E($P(@PSBPQRY,U,1),1,12)=$E($P(@PSBQRY,U,1),1,12),$P(@PSBPQRY,U,2)=$P(@PSBQRY,U,2) S X=$P(@PSBQRY,U,4),$P(RESULTS(PSBCNT-1),U,4)=X Q
4733+"RTN","PSBRPC2",79,0)
4734+ .S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1
4735+"RTN","PSBRPC2",80,0)
4736+ S RESULTS(0)=PSBCNT-1
4737+"RTN","PSBRPC2",81,0)
4738+ K PSBMLA,PSBIEN,PSBTMP,PSBQRY
4739+"RTN","PSBRPC2",82,0)
4740+ Q
4741+"RTN","PSBRPC2",83,0)
4742+ ;
4743+"RTN","PSBRPC2",84,0)
4744+INITIAL(PSBDUZ) ;
4745+"RTN","PSBRPC2",85,0)
4746+ Q $$GET1^DIQ(200,PSBDUZ,"INITIAL")
4747+"RTN","PSBRPC2",86,0)
4748+SCANMED(RESULTS,PSBDIEN,PSBTAB) ; Lookup Medication
4749+"RTN","PSBRPC2",87,0)
4750+ ;
4751+"RTN","PSBRPC2",88,0)
4752+ ; RPC: PSB SCANMED
4753+"RTN","PSBRPC2",89,0)
4754+ ;
4755+"RTN","PSBRPC2",90,0)
4756+ ; Description:
4757+"RTN","PSBRPC2",91,0)
4758+ ; Does a lookup on file 50 returns -1 on invalid lookup or
4759+"RTN","PSBRPC2",92,0)
4760+ ; IEN^DrugName on success
4761+"RTN","PSBRPC2",93,0)
4762+ ;
4763+"RTN","PSBRPC2",94,0)
4764+ D NOW^%DTC S PSBDT=%
4765+"RTN","PSBRPC2",95,0)
4766+ S PSBCNT=0
4767+"RTN","PSBRPC2",96,0)
4768+ I $L(PSBDIEN)>40 S PSBDIEN=$E(PSBDIEN,1,40)
4769+"RTN","PSBRPC2",97,0)
4770+ S RESULTS(PSBCNT)=1
4771+"RTN","PSBRPC2",98,0)
4772+ S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)="-1^Invalid Medication Lookup"
4773+"RTN","PSBRPC2",99,0)
4774+ I $$GET^XPAR("DIV","PSB ROBOT RX"),PSBDIEN?1"3"15N!(PSBDIEN?1"3"17N),123[$E(PSBDIEN,12) S PSBDIEN=$E(PSBDIEN,2,11)
4775+"RTN","PSBRPC2",100,0)
4776+ I PSBTAB="UDTAB" D Q
4777+"RTN","PSBRPC2",101,0)
4778+ .S X=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C")
4779+"RTN","PSBRPC2",102,0)
4780+ .I X<1 Q
4781+"RTN","PSBRPC2",103,0)
4782+ .E S RESULTS(PSBCNT)="DD"_U_X_U_$$GET1^DIQ(50,X_",",.01)
4783+"RTN","PSBRPC2",104,0)
4784+ ;
4785+"RTN","PSBRPC2",105,0)
4786+ ; IV/IVPB ward stock scan
4787+"RTN","PSBRPC2",106,0)
4788+ ;
4789+"RTN","PSBRPC2",107,0)
4790+ S PSBDIEN=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C") I PSBDIEN<1 Q
4791+"RTN","PSBRPC2",108,0)
4792+ S PSBOIT=$$GET1^DIQ(50,PSBDIEN,"PHARMACY ORDERABLE ITEM","I")
4793+"RTN","PSBRPC2",109,0)
4794+ I $D(^PSDRUG("A527",PSBDIEN)) S X="" F S X=$O(^PSDRUG("A527",PSBDIEN,X)) Q:X="" D
4795+"RTN","PSBRPC2",110,0)
4796+ .S PSBINACT=$$GET1^DIQ(52.7,X,8,"I") I PSBINACT]"",PSBINACT'>PSBDT Q
4797+"RTN","PSBRPC2",111,0)
4798+ .S RESULTS(PSBCNT)="SOL"_U_X_U_$$GET1^DIQ(50,PSBDIEN_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1
4799+"RTN","PSBRPC2",112,0)
4800+ I $D(^PSDRUG("A526",PSBDIEN)) S X="" F S X=$O(^PSDRUG("A526",PSBDIEN,X)) Q:X="" D
4801+"RTN","PSBRPC2",113,0)
4802+ .S PSBINACT=$$GET1^DIQ(52.6,X,12,"I") I PSBINACT]"",PSBINACT'>PSBDT Q
4803+"RTN","PSBRPC2",114,0)
4804+ .S RESULTS(PSBCNT)="ADD"_U_X_U_$$GET1^DIQ(50,PSBDIEN_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1
4805+"RTN","PSBRPC2",115,0)
4806+ ;
4807+"RTN","PSBRPC2",116,0)
4808+ I PSBTAB="PBTAB",$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C")'<1 S X=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C"),RESULTS(PSBCNT)="DD"_U_X_U_$$GET1^DIQ(50,X_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1
4809+"RTN","PSBRPC2",117,0)
4810+ Q
4811+"RTN","PSBRPC2",118,0)
4812+ ;
4813+"RTN","PXRMTMED")
4814+0^40^B9970277
4815+"RTN","PXRMTMED",1,0)
4816+PXRMTMED ; SLC/PKR/PJH,MSC/JDA - Edit a reminder term. ;27APR2009
4817+"RTN","PXRMTMED",2,0)
4818+ ;;2.0;CLINICAL REMINDERS;**1,MSC**;Feb 04, 2005
4819+"RTN","PXRMTMED",3,0)
4820+ ;
4821+"RTN","PXRMTMED",4,0)
4822+ ;=======================================================
4823+"RTN","PXRMTMED",5,0)
4824+ N CS1,CS2,DA,DIC,DLAYGO,DTOUT,DUOUT,Y
4825+"RTN","PXRMTMED",6,0)
4826+GETNAME ;Get the name of the term to edit.
4827+"RTN","PXRMTMED",7,0)
4828+ K DA,DIC,DLAYGO,DTOUT,DUOUT,Y
4829+"RTN","PXRMTMED",8,0)
4830+ S DIC="^PXRMD(811.5,"
4831+"RTN","PXRMTMED",9,0)
4832+ S DIC(0)="AEMQL"
4833+"RTN","PXRMTMED",10,0)
4834+ S DIC("A")="Select Reminder Term: "
4835+"RTN","PXRMTMED",11,0)
4836+ S DLAYGO=811.5
4837+"RTN","PXRMTMED",12,0)
4838+ ;Set the starting place for additions.
4839+"RTN","PXRMTMED",13,0)
4840+ D SETSTART^PXRMCOPY(DIC)
4841+"RTN","PXRMTMED",14,0)
4842+ W !
4843+"RTN","PXRMTMED",15,0)
4844+ D ^DIC
4845+"RTN","PXRMTMED",16,0)
4846+ I ($D(DTOUT))!($D(DUOUT)) Q
4847+"RTN","PXRMTMED",17,0)
4848+ I Y=-1 G END
4849+"RTN","PXRMTMED",18,0)
4850+ S DA=$P(Y,U,1)
4851+"RTN","PXRMTMED",19,0)
4852+ S CS1=$$FILE^PXRMEXCS(811.5,DA)
4853+"RTN","PXRMTMED",20,0)
4854+ D EDIT(DIC,DA)
4855+"RTN","PXRMTMED",21,0)
4856+ I $G(DA)="" G GETNAME
4857+"RTN","PXRMTMED",22,0)
4858+ S CS2=$$FILE^PXRMEXCS(811.5,DA)
4859+"RTN","PXRMTMED",23,0)
4860+ I CS2=0 G GETNAME
4861+"RTN","PXRMTMED",24,0)
4862+ I CS2'=CS1 D SEHIST^PXRMUTIL(811.5,DIC,DA)
4863+"RTN","PXRMTMED",25,0)
4864+ G GETNAME
4865+"RTN","PXRMTMED",26,0)
4866+END ;
4867+"RTN","PXRMTMED",27,0)
4868+ Q
4869+"RTN","PXRMTMED",28,0)
4870+ ;
4871+"RTN","PXRMTMED",29,0)
4872+ ;=======================================================
4873+"RTN","PXRMTMED",30,0)
4874+EDIT(ROOT,DA) ;
4875+"RTN","PXRMTMED",31,0)
4876+ N CLASS,DIC,DIE,DR,DIDEL,PXRMTMD,RESULT,TCONT,Y
4877+"RTN","PXRMTMED",32,0)
4878+ ;PXRMTMD is set by a xref on the .01 as a flag that the entire
4879+"RTN","PXRMTMED",33,0)
4880+ ;entry is being deleted.
4881+"RTN","PXRMTMED",34,0)
4882+ S CLASS=$P($G(^PXRMD(811.5,DA,100)),U,1)
4883+"RTN","PXRMTMED",35,0)
4884+ S DIE=ROOT
4885+"RTN","PXRMTMED",36,0)
4886+ I CLASS'="N"!(($G(PXRMINST)=1)&($G(DUZ(0))="@")) D
4887+"RTN","PXRMTMED",37,0)
4888+ . S DR=".01"
4889+"RTN","PXRMTMED",38,0)
4890+ . D ^DIE
4891+"RTN","PXRMTMED",39,0)
4892+ . I $G(DA)'="" D CLASS(DA,DIE)
4893+"RTN","PXRMTMED",40,0)
4894+ I $G(DA)="" Q
4895+"RTN","PXRMTMED",41,0)
4896+ S TCONT=1
4897+"RTN","PXRMTMED",42,0)
4898+ F D FINDING(DIE,DA) Q:TCONT=0
4899+"RTN","PXRMTMED",43,0)
4900+ Q
4901+"RTN","PXRMTMED",44,0)
4902+ ;
4903+"RTN","PXRMTMED",45,0)
4904+ ;=======================================================
4905+"RTN","PXRMTMED",46,0)
4906+FINDING(DIE,DA,LIST) ;
4907+"RTN","PXRMTMED",47,0)
4908+ N CFIEN,GLOB,IEN,LIST,NODE,WPIEN
4909+"RTN","PXRMTMED",48,0)
4910+ N DEF,DEF1,DEF2,STATUS
4911+"RTN","PXRMTMED",49,0)
4912+ S STATUS=0
4913+"RTN","PXRMTMED",50,0)
4914+ D DEF^PXRMRUTL("811.52",.DEF,.DEF1,.DEF2)
4915+"RTN","PXRMTMED",51,0)
4916+ S NODE="^PXRMD(811.5)"
4917+"RTN","PXRMTMED",52,0)
4918+ D LIST^PXRMREDT(NODE,DA,.LIST)
4919+"RTN","PXRMTMED",53,0)
4920+ D DSPALL^PXRMREDF("T",NODE,DA,.LIST)
4921+"RTN","PXRMTMED",54,0)
4922+ S DA(1)=DA
4923+"RTN","PXRMTMED",55,0)
4924+ S IEN=DA
4925+"RTN","PXRMTMED",56,0)
4926+ S DIC=DIE_DA(1)_",20,"
4927+"RTN","PXRMTMED",57,0)
4928+ S DIC(0)="QEAL"
4929+"RTN","PXRMTMED",58,0)
4930+ S DIC("A")="Select Finding: "
4931+"RTN","PXRMTMED",59,0)
4932+ D ^DIC I Y=-1 S DTOUT=1,TCONT=0 Q
4933+"RTN","PXRMTMED",60,0)
4934+ S DIE=DIC
4935+"RTN","PXRMTMED",61,0)
4936+ S DA=+Y,GLOB=$P($P(Y,U,2),";",2) Q:GLOB=""
4937+"RTN","PXRMTMED",62,0)
4938+ I GLOB="PXRMD(811.4," S CFIEN=$P($P(Y,U,2),";",1) D
4939+"RTN","PXRMTMED",63,0)
4940+ .I $D(^PXRMD(811.4,CFIEN,1))>0 D
4941+"RTN","PXRMTMED",64,0)
4942+ ..W !!,"Computed Finding Description:" S WPIEN=0
4943+"RTN","PXRMTMED",65,0)
4944+ ..F S WPIEN=$O(^PXRMD(811.4,CFIEN,1,WPIEN)) Q:+WPIEN'>0 D
4945+"RTN","PXRMTMED",66,0)
4946+ ...W !,$G(^PXRMD(811.4,CFIEN,1,WPIEN,0))
4947+"RTN","PXRMTMED",67,0)
4948+ .E W !!,"No description defined for this computed finding"
4949+"RTN","PXRMTMED",68,0)
4950+ .W !
4951+"RTN","PXRMTMED",69,0)
4952+ W !,"Editing Finding Number: "_$G(DA)
4953+"RTN","PXRMTMED",70,0)
4954+ ;Finding record fields
4955+"RTN","PXRMTMED",71,0)
4956+ S DR=".01;9;12;17"
4957+"RTN","PXRMTMED",72,0)
4958+ S DR=DR_";14;15;18"
4959+"RTN","PXRMTMED",73,0)
4960+ I GLOB="PXRMD(811.4," S DR=DR_";26"
4961+"RTN","PXRMTMED",74,0)
4962+ ;Taxonomy - use inactive problems
4963+"RTN","PXRMTMED",75,0)
4964+ I GLOB="PXD(811.2," S DR=DR_";10",STATUS=1
4965+"RTN","PXRMTMED",76,0)
4966+ ;Health Factor - within category rank
4967+"RTN","PXRMTMED",77,0)
4968+ I GLOB="AUTTHF(" S DR=DR_";11"
4969+"RTN","PXRMTMED",78,0)
4970+ ;Mental Health - scale
4971+"RTN","PXRMTMED",79,0)
4972+ I GLOB="YTT(601," S DR=DR_";13"
4973+"RTN","PXRMTMED",80,0)
4974+ I GLOB="RAMIS(71,"!(GLOB="ORD(101.43,") S DR=DR_";16",STATUS=1
4975+"RTN","PXRMTMED",81,0)
4976+ ;Rx Type
4977+"RTN","PXRMTMED",82,0)
4978+ I GLOB="PSDRUG("!(GLOB="PS(50.605,")!(GLOB="PSNDF(50.6,") S DR=DR_";16",STATUS=1
4979+"RTN","PXRMTMED",83,0)
4980+ ;Condition
4981+"RTN","PXRMTMED",84,0)
4982+ ;
4983+"RTN","PXRMTMED",85,0)
4984+ ;Edit finding record
4985+"RTN","PXRMTMED",86,0)
4986+ D ^DIE
4987+"RTN","PXRMTMED",87,0)
4988+ I STATUS=1,$D(DA)>0 D STATUS^PXRMSTA1(.DA,"T")
4989+"RTN","PXRMTMED",88,0)
4990+ S $P(^PXRMD(811.5,IEN,20,0),U,3)=0
4991+"RTN","PXRMTMED",89,0)
4992+ Q
4993+"RTN","PXRMTMED",90,0)
4994+ ;
4995+"RTN","PXRMTMED",91,0)
4996+ ;=======================================================
4997+"RTN","PXRMTMED",92,0)
4998+CLASS(DA,DIE) ;
4999+"RTN","PXRMTMED",93,0)
5000+ F D Q:RESULT'=0
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches