1 | %ZISUTL ;Device Handler Utility routine ;01/08/2007
|
---|
2 | ;;8.0;KERNEL;**18,24,34,69,118,127,199,275,425**;JUL 10, 1995;Build 18
|
---|
3 | Q ;No entry from top
|
---|
4 | GETDEV(X) ;Return IO variables
|
---|
5 | I '$D(^TMP("XUDEVICE",$J,X)) S POP=1 Q
|
---|
6 | ;Cleanup first
|
---|
7 | N % K IO("S")
|
---|
8 | D SYMBOL("K") ;Kill first
|
---|
9 | D SYMBOL(1,$NA(^TMP("XUDEVICE",$J,X)))
|
---|
10 | Q
|
---|
11 | ;
|
---|
12 | SAVDEV(NM) ;Save IO variables
|
---|
13 | ;NM=Handle name
|
---|
14 | N %,Y,R
|
---|
15 | I $G(IO)="" Q
|
---|
16 | S Y=$$FINDEV(NM) I 'Y S Y=$$NEXTDEV(NM)
|
---|
17 | S R=$NA(^TMP("XUDEVICE",$J,Y)) K @R ;Clear
|
---|
18 | S @R@(0)=NM
|
---|
19 | D SYMBOL(0,R)
|
---|
20 | Q
|
---|
21 | ;
|
---|
22 | SYMBOL(MODE,ROOT) ;0=Save, 1=Restore, K=Kill IO variables
|
---|
23 | N %
|
---|
24 | ;Handle IO as special case. Don't want to kill all of IO.
|
---|
25 | I MODE=0 S:$D(IO)#2 @ROOT@("IO")=IO
|
---|
26 | I MODE=1 S:$D(@ROOT@("IO")) IO=@ROOT@("IO")
|
---|
27 | F %="IO(""DOC"")","IO(""HFSIO"")","IO(""Q"")","IO(""S"")","IO(""SPOOL"")","IO(""ZIO"")","IOBS","IOCPU","IOF","IOHG","IOM","ION","IOPAR","IOUPAR","IOS","IOSL","IOST","IOST(0)","IOT","IOXY" D
|
---|
28 | . I MODE=0 S:$D(@%)#2 @ROOT@(%)=@% Q
|
---|
29 | . I MODE=1 S:$D(@ROOT@(%)) @%=@ROOT@(%) Q
|
---|
30 | . I MODE="K" K @%
|
---|
31 | . Q
|
---|
32 | Q
|
---|
33 | ;
|
---|
34 | RMDEV(X) ;Remove saved IO variables.
|
---|
35 | N Y
|
---|
36 | S Y=$$FINDEV(X)
|
---|
37 | Q:'Y
|
---|
38 | K ^TMP("XUDEVICE",$J,"B",X),^TMP("XUDEVICE",$J,+Y)
|
---|
39 | Q
|
---|
40 | ;
|
---|
41 | RMALLDEV() ;Remove saved IO variables for all devices saved in table.
|
---|
42 | K ^TMP("XUDEVICE",$J)
|
---|
43 | Q 1
|
---|
44 | ;
|
---|
45 | FINDEV(NM) ;Find Device name and return IEN.
|
---|
46 | Q $O(^TMP("XUDEVICE",$J,"B",NM,0))
|
---|
47 | ;
|
---|
48 | NEXTDEV(NM) ;Return next available device.
|
---|
49 | N Y
|
---|
50 | F Y=1:1 Q:'$D(^TMP("XUDEVICE",$J,Y))
|
---|
51 | S ^TMP("XUDEVICE",$J,"B",NM,Y)=""
|
---|
52 | Q Y
|
---|
53 | ;
|
---|
54 | OPEN(HNDL,IOP,%ZIS) ;Open extrinsic function
|
---|
55 | ;Parameters
|
---|
56 | ;HNDL=Handle name
|
---|
57 | ;IOP string--optional
|
---|
58 | ;%ZIS string--optional
|
---|
59 | N %
|
---|
60 | I $G(IOP)="" K IOP ;Remove IOP if null.
|
---|
61 | D ^%ZIS,SAVDEV(HNDL):POP=0
|
---|
62 | Q
|
---|
63 | ;
|
---|
64 | CLOSE(X1) ;Close extrinsic functionsl
|
---|
65 | ;X1=Handle
|
---|
66 | N %,Y
|
---|
67 | S Y=$$FINDEV(X1)
|
---|
68 | Q:'Y
|
---|
69 | D GETDEV(Y)
|
---|
70 | D ^%ZISC,RMDEV(X1)
|
---|
71 | Q
|
---|
72 | ;
|
---|
73 | USE(X1) ;Restore IO* variables pertaining to the device.
|
---|
74 | ;X1=Handle name
|
---|
75 | N %,Y
|
---|
76 | S Y=$$FINDEV^%ZISUTL(X1)
|
---|
77 | Q:'Y
|
---|
78 | D GETDEV^%ZISUTL(Y)
|
---|
79 | I $G(IOT)'="RES" U $S($D(IO(1,IO)):IO,1:IO(0))
|
---|
80 | K IO("CLOSE")
|
---|
81 | Q
|
---|
82 | ;
|
---|
83 | LINEPORT() ;Return device name for line port.
|
---|
84 | ;
|
---|
85 | N %,%1,Y
|
---|
86 | S Y=0
|
---|
87 | S %=$$LNPRTIEN^%ZISUTL($$LNPRTNAM^%ZISUTL)
|
---|
88 | S Y=+$P($G(^%ZIS(3.23,+%,0)),"^",3)
|
---|
89 | Q Y
|
---|
90 | LNPRTSUB() ;Return line port subtype pointer.
|
---|
91 | N %
|
---|
92 | S %=$$LNPRTIEN^%ZISUTL($$LNPRTNAM^%ZISUTL)
|
---|
93 | Q +$P($G(^%ZIS(3.23,+%,0)),"^",4)
|
---|
94 | ;
|
---|
95 | LNPRTNAM() ;Return Line port name
|
---|
96 | N Y,%
|
---|
97 | S Y="",%=$G(^%ZOSF("OS"))
|
---|
98 | I %["VAX DSM"!(%["OpenM-NT") D
|
---|
99 | .S Y=$ZIO
|
---|
100 | E I %["MSM" X "S Y=$ZDEV($I)"
|
---|
101 | Q Y
|
---|
102 | LNPRTIEN(X) ;Return internal entry number of Line/port
|
---|
103 | Q:X'?1AN.29ANP 0
|
---|
104 | Q $O(^%ZIS(3.23,"B",X,0))
|
---|
105 | LNPRTADR(X) ;Returns Line/Port name of a fixed device.
|
---|
106 | N %,Y
|
---|
107 | S Y=""
|
---|
108 | S %=$O(^%ZIS(1,"B",X,0))
|
---|
109 | S %=$O(^%ZIS(3.23,"C",+%,0))
|
---|
110 | I %,$G(^%ZIS(3.23,+%,0))]"" S Y=$P(^(0),"^")
|
---|
111 | Q Y
|
---|
112 | ;
|
---|
113 | FIND(IOP) ;e.f. Get the IEN of a device
|
---|
114 | N %XX,%YY,%ZIS,%ZISV
|
---|
115 | S %ZISV=^%ZOSF("VOL"),%XX=$$UP^%ZIS1(IOP) D 1^%ZIS5
|
---|
116 | Q %YY
|
---|
117 | NOQ(IOP) ;e.f. Return queueing status
|
---|
118 | ;Call with Device name, Return 1 if NO QUEUE, Else 0.
|
---|
119 | N %X,%Y S %X=$$FIND(IOP) Q:%X'>0 0
|
---|
120 | S %Y=$P($G(^%ZIS(1,%X,0)),U,12)
|
---|
121 | Q %Y=2
|
---|
122 | ;
|
---|
123 | UNIQUE(ZISNA) ;Build a unque number to add to a device name
|
---|
124 | ;If passed a name put the number before the last dot.
|
---|
125 | N %,%1
|
---|
126 | S %=$H,%=$H_"-"_$J,%=$$CRC32^XLFCRC(%)
|
---|
127 | I '$L($G(ZISNA)) Q %
|
---|
128 | S %1=$L(ZISNA,"."),%="_"_%
|
---|
129 | S:%1=1 %=ZISNA_% S:%1>1 %=$P(ZISNA,".",1,%1-1)_%_"."_$P(ZISNA,".",%1)
|
---|
130 | Q %
|
---|