1 | %ZISH ;IHS\PR,SFISC/AC - Host File Control for MSM ;01/04/2005 08:44
|
---|
2 | ;;8.0;KERNEL;**24,36,49,65,84,104,306**;JUL 10, 1995
|
---|
3 | ;
|
---|
4 | OPEN(X1,X2,X3,X4,X5,X6) ;SR. Open Host File
|
---|
5 | ;X1=handle name
|
---|
6 | ;X2=directory name \dir\
|
---|
7 | ;X3=file name
|
---|
8 | ;X4=file access mode e.g.: W for write, R for read, A for append, B for block.
|
---|
9 | ;X5=Max record size for a new file, X6=Subtype
|
---|
10 | N %,%1,%2,%I,%P1,%P2,%P6,%T,%ZA,%ZISHIO
|
---|
11 | S %I=$I,%T=0,POP=0,X2=$$DEFDIR($G(X2)),%Q=$C(34) M %ZISHIO=IO
|
---|
12 | S %P2=$S(X4["RW":"RW",X4["W":"W",X4["N":"W",X4["A":"A",1:"R")
|
---|
13 | S %P1=X2_X3,%P6=$S(X4["B":%Q_%Q,1:$C(13,10))
|
---|
14 | F %2=51:1:54 I '$D(IO(1,%2)) O %2:(%P1:%P2::::%P6):0 I $T S %T=%2 Q
|
---|
15 | I '%T S POP=1 Q
|
---|
16 | ;S %1=$$MODE^%ZISF(X2_X3,X4)
|
---|
17 | U %2 S %ZA=$ZA
|
---|
18 | I %ZA=-1 U:%I]"" %I C %2 S POP=1 Q
|
---|
19 | S IO=%2,IO(1,IO)="",IOT="HFS",POP=0 D SUBTYPE^%ZIS3($G(X6))
|
---|
20 | I $G(X1)]"" D SAVDEV^%ZISUTL(X1)
|
---|
21 | Q
|
---|
22 | ;
|
---|
23 | CLOSE(X) ;SR. Close HFS device not opened by %ZIS.
|
---|
24 | ;X=HANDLE NAME, IO=Device
|
---|
25 | N %
|
---|
26 | I $G(IO)]"" C IO K IO(1,IO)
|
---|
27 | I $G(X)]"" D RMDEV^%ZISUTL(X)
|
---|
28 | D HOME^%ZIS
|
---|
29 | Q
|
---|
30 | ;
|
---|
31 | OPENERR ;
|
---|
32 | Q 0
|
---|
33 | ;
|
---|
34 | DEL(%ZX1,%ZX2) ;ef,SR. Del fl(s)
|
---|
35 | ;S Y=$$DEL^ZOSHMSM("\dir\","fl")
|
---|
36 | ; ,.array)
|
---|
37 | ;Changed %ZX2 to a $NAME string
|
---|
38 | N %,%ZH,%ZXDEL,ZOSHDA,ZOSHF,ZOSHX,ZOSHDF,ZOSHC
|
---|
39 | S %ZX1=$$DEFDIR($G(%ZX1)) S:$D(@%ZX2)=1 @%ZX2(@%ZX2)=""
|
---|
40 | ;Get fls to act on
|
---|
41 | ;No '*' allowed
|
---|
42 | S %ZH="",%ZXDEL=1
|
---|
43 | F S %ZH=$O(@%ZX2@(%ZH)) Q:%ZH="" D
|
---|
44 | . I %ZH["*" S %ZXDEL=0 Q ; Wild card not allowed.
|
---|
45 | .;S ZOSHC="rm "_X1_%
|
---|
46 | .S ZOSHC=$ZOS(2,%ZX1_%ZH) ;Use system function to delete file
|
---|
47 | Q %ZXDEL
|
---|
48 | ;
|
---|
49 | LIST(%ZX1,%ZX2,%ZX3) ;ef,SR. Create a local array holding fl names
|
---|
50 | ;S Y=$$LIST^ZOSHDOS("\dir\","fl",".return array")
|
---|
51 | ; "fl*",
|
---|
52 | ; .array,
|
---|
53 | ;
|
---|
54 | ;Change X2 = $NAME OF CLOSE ROOT
|
---|
55 | ;Change X3 = $NAME OF CLOSE ROOT
|
---|
56 | ;
|
---|
57 | N %ZISH,%ZISHN,%ZX,%ZISHY
|
---|
58 | S %ZISHN=0,%ZX1=$$DEFDIR($G(%ZX1)) S:$D(@%ZX2)=1 @%ZX2(@%ZX2)=""
|
---|
59 | ;Get fls to act on
|
---|
60 | S %ZISH="" F S %ZISH=$O(@%ZX2@(%ZISH)) Q:%ZISH="" D
|
---|
61 | .S %ZX=%ZX1_%ZISH
|
---|
62 | .F %ZISHN=1:1 D Q:$P(%ZISHY,"^")=""!(%ZISHY<0) S @%ZX3@($P(%ZISHY,"^"))="" ;S @%ZX3@(%ZISHN)=$P(%ZISHY,"^")
|
---|
63 | ..I %ZISHN>1 S %ZISHY=$ZOS(13,%ZISHY)
|
---|
64 | ..E S %ZISHY=$ZOS(12,%ZX,0)
|
---|
65 | Q $O(@%ZX3@(""))]""
|
---|
66 | ;
|
---|
67 | MV(X1,X2,Y1,Y2) ;ef,SR. Rename a fl
|
---|
68 | ;S Y=$$MV^ZOSHDOS("\dir\","fl","\dir\","fl")
|
---|
69 | ;
|
---|
70 | N %ZB,%ZC,%ZISHDV1,%ZISHDV2,%ZISHFN1,%ZISHFN2,%ZISHPCT,%ZISHSIZ,%ZISHX,X,Y
|
---|
71 | S X1=$$DEFDIR($G(X1)),Y1=$$DEFDIR($G(Y1))
|
---|
72 | I X1=Y1 Q $ZOS(3,X2,Y2)'<0
|
---|
73 | S X=X1_X2,Y=Y1_Y2
|
---|
74 | ;
|
---|
75 | S %ZISHDV1=51,%ZISHDV2=52,%ZISHFN1=X,%ZISHFN2=Y
|
---|
76 | O %ZISHDV1:(%ZISHFN1)
|
---|
77 | O %ZISHDV2:(%ZISHFN2:"W")
|
---|
78 | U %ZISHDV1:(::0:2) S %ZISHSIZ=$ZB U %ZISHDV1:(::0:0) S (%ZISHPCT,%ZB,%ZC)=0
|
---|
79 | D SLOWCOPY S %ZISHX(X2)="" S Y=$$DEL^%ZISH(X1,$NA(%ZISHX))
|
---|
80 | Q 1
|
---|
81 | ;
|
---|
82 | SLOWCOPY ; Copy without view buffer
|
---|
83 | N X,Y
|
---|
84 | O %ZISHDV1:(%ZISHFN1:"R"::::""),%ZISHDV2:(%ZISHFN2:"W"::::"")
|
---|
85 | FOR DO Q:%ZC!(%ZB=%ZISHSIZ)
|
---|
86 | . U %ZISHDV1 R X#1024 Q:$L(X)=0
|
---|
87 | . U %ZISHDV2 W X S %ZB=$ZB,%ZC=$ZC Q:%ZC
|
---|
88 | . I %ZB=%ZISHSIZ C %ZISHDV2 S %ZC=($ZA=-1)
|
---|
89 | . S X=%ZB/%ZISHSIZ*100\1 ; %done
|
---|
90 | . Q:X=%ZISHPCT S %ZISHPCT=X
|
---|
91 | . Q ;U 0 W $J(%ZISHPCT,3),*13
|
---|
92 | Q
|
---|
93 | ;
|
---|
94 | PWD() ;ef,SR. Print working directory
|
---|
95 | N Y
|
---|
96 | S Y=$$DEFDIR("") I $L(Y) Q Y
|
---|
97 | S Y=$ZOS(11,$ZOS(14))
|
---|
98 | Q:Y<0 ""
|
---|
99 | S Y=Y_$S($E(Y,$L(Y))'="\":"\",1:"")
|
---|
100 | Q $ZOS(14)_":"_Y
|
---|
101 | ;
|
---|
102 | JW ;Call dos $ZOS
|
---|
103 | S ZOSHX=$ZOS(ZOSHNUM,ZOSHC)
|
---|
104 | Q
|
---|
105 | DEFDIR(DF) ;ef. Default Dir and frmt
|
---|
106 | Q:DF="." "" ;Special way to get current dir.
|
---|
107 | S:DF="" DF=$G(^XTV(8989.3,1,"DEV")) S DF=$TR(DF,"/","\")
|
---|
108 | I $E(DF,$L(DF))'="\" S DF=DF_"\"
|
---|
109 | Q DF
|
---|
110 | FL(X) ;Fl len
|
---|
111 | N ZOSHP1,ZOSHP2
|
---|
112 | S ZOSHP1=$P(X,"."),ZOSHP2=$P(X,".",2)
|
---|
113 | I $L(ZOSHP1)>8 S X=4 Q
|
---|
114 | I $L(ZOSHP2)>3 S X=4 Q
|
---|
115 | Q
|
---|
116 | READNXT(REC) ;Read any sized record into array.
|
---|
117 | N T,I,X,LB
|
---|
118 | U IO S LB=$ZB R REC#255 S %ZA=$ZA,%ZB=$ZB,%ZC=$ZC,%ZL=%ZA Q:$$EOF(%ZC)
|
---|
119 | Q:%ZA<255
|
---|
120 | F I=1:1 S LB=LB+%ZA Q:LB<%ZB R X#255 S %ZA=$ZA,%ZB=$ZB,%ZC=$ZC Q:$$EOF(%ZC)!('$L(X)) S REC(I)=X
|
---|
121 | Q
|
---|
122 | STATUS() ;ef,SR. Return EOF status
|
---|
123 | U $I
|
---|
124 | Q $$EOF($ZC)
|
---|
125 | ;
|
---|
126 | EOF(X) ;Eof flag, pass in $ZC
|
---|
127 | Q (X=-1)
|
---|
128 | ;
|
---|
129 | READREC(X) ;Read record from host file.
|
---|
130 | N Y
|
---|
131 | U IO R X S Y=$ZC
|
---|
132 | U $P
|
---|
133 | Q Y
|
---|
134 | MAKEREF(HF,IX,OVF) ;Internal call to rebuild global ref.
|
---|
135 | ;Return %ZISHF,%ZISHO,%ZISHI,%ZISUB
|
---|
136 | N I,F,MX
|
---|
137 | S OVF=$G(OVF,"%ZISHOF")
|
---|
138 | S %ZISHI=$QS(HF,IX),MX=$QL(HF) ;
|
---|
139 | S F=$NA(@HF,IX-1) ;Get first part
|
---|
140 | I IX=1 S %ZISHF=F_"(%ZISHI" ;Build root, IX=1
|
---|
141 | I IX>1 S %ZISHF=$E(F,1,$L(F)-1)_",%ZISHI" ;Build root
|
---|
142 | S %ZISHO=%ZISHF_","_OVF_",%OVFCNT)" ;Make overflow
|
---|
143 | F I=IX+1:1:MX S %ZISHF=%ZISHF_",%ZISUB("_I_")",%ZISUB(I)=$QS(HF,I)
|
---|
144 | S %ZISHF=%ZISHF_")"
|
---|
145 | Q
|
---|
146 | FTG(%ZX1,%ZX2,%ZX3,%ZX4,%ZX5) ;ef,SR. Unload contents of host file into global
|
---|
147 | ;p1=host file directory
|
---|
148 | ;p2=host file name
|
---|
149 | ;p3= $NAME REFERENCE INCLUDING STARTING SUBSCRIPT
|
---|
150 | ;p4=INCREMENT SUBSCRIPT
|
---|
151 | ;p5=Overflow subscript, defaults to "OVF"
|
---|
152 | N %ZA,%ZB,%ZC,%ZL,%OVFCNT,%CONT,%XX
|
---|
153 | N I,%ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHOF,%ZISHOX,%ZISHS,%ZX,%ZISHY,POP,%ZISUB
|
---|
154 | S %ZX1=$$DEFDIR($G(%ZX1)),%ZISHOF=$G(%ZX5,"OVF")
|
---|
155 | D MAKEREF(%ZX3,%ZX4,"%ZISHOF")
|
---|
156 | D OPEN^%ZISH(,%ZX1,%ZX2,"R")
|
---|
157 | I POP Q 0
|
---|
158 | S X="ERREOF^%ZISH",@^%ZOSF("TRAP")
|
---|
159 | U IO F K %XX D READNXT(.%XX) D Q:$$EOF(%ZC)
|
---|
160 | . S I=('$$EOF(%ZC))!($$EOF(%ZC)&$L(%XX)) Q:'I
|
---|
161 | . S @%ZISHF=%XX
|
---|
162 | . I $D(%XX)>2 F %OVFCNT=1:1 Q:'$D(%XX(%OVFCNT)) S @%ZISHO=%XX(%OVFCNT)
|
---|
163 | . S %ZISHI=%ZISHI+1
|
---|
164 | . Q
|
---|
165 | D CLOSE() ;Normal exit
|
---|
166 | Q 1
|
---|
167 | ;
|
---|
168 | ERREOF D CLOSE() ;Error close and exit
|
---|
169 | Q 0
|
---|
170 | ;
|
---|
171 | GTF(%ZX1,%ZX2,%ZX3,%ZX4) ;ef,SR. Load contents of global to host file.
|
---|
172 | ;Previously name LOAD
|
---|
173 | ;p1=$NAME of global reference
|
---|
174 | ;p2=incrementing subscript
|
---|
175 | ;p3=host file directory, p4=host file name
|
---|
176 | N %ZISHY,%ZISHOX
|
---|
177 | S %ZISHY=$$MGTF(%ZX1,%ZX2,$G(%ZX3),%ZX4,"W")
|
---|
178 | Q %ZISHY
|
---|
179 | ;
|
---|
180 | GATF(%ZX1,%ZX2,%ZX3,%ZX4) ;ef,SR. Append to host file.
|
---|
181 | ;
|
---|
182 | ;p1=$NAME of global reference
|
---|
183 | ;p2=incrementing subscript
|
---|
184 | ;p3=host file directory
|
---|
185 | ;p4=host file name
|
---|
186 | N %ZISHY
|
---|
187 | S %ZISHY=$$MGTF(%ZX1,%ZX2,$G(%ZX3),%ZX4,"A")
|
---|
188 | Q %ZISHY
|
---|
189 | MGTF(%ZX1,%ZX2,%ZX3,%ZX4,%ZX5) ;
|
---|
190 | ;p1=$NAME of global reference
|
---|
191 | ;p2=incrementing subscript
|
---|
192 | ;p3=host file directory
|
---|
193 | ;p4=host file name
|
---|
194 | N %ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHS,%ZISHOX,IO,%ZX,Y
|
---|
195 | D MAKEREF(%ZX1,%ZX2)
|
---|
196 | D OPEN^%ZISH(,%ZX3,%ZX4,%ZX5) ;Default dir set in open
|
---|
197 | I POP Q 0
|
---|
198 | N X
|
---|
199 | S X="ERREOF^%ZISH",@^%ZOSF("TRAP")
|
---|
200 | F Q:'($D(@%ZISHF)#2) S %ZX=@%ZISHF,%ZISHI=%ZISHI+1 U IO W %ZX,!
|
---|
201 | D CLOSE()
|
---|
202 | Q 1
|
---|
203 | ;
|
---|