1 | KMPDU2 ;OAK/RAK - CM Tools Routine Utilities ;7/22/04 09:06
|
---|
2 | ;;2.0;CAPACITY MANAGEMENT TOOLS;**2**;Mar 22, 2002
|
---|
3 | ;
|
---|
4 | IRSRC(KMPDDA) ;-- extrinsic function - check for local mods in INSTALL file
|
---|
5 | ;-----------------------------------------------------------------------
|
---|
6 | ; KMPDDA... DA as defined in fileman programmers manual.
|
---|
7 | ;
|
---|
8 | ; Return: "NO" - no local mods.
|
---|
9 | ; "YES" - local mods.
|
---|
10 | ;
|
---|
11 | ; This extrinsic function is called from computed field #573099 (LOCAL
|
---|
12 | ; MODIFICATIONS) in file #9.7 (INSTALL).
|
---|
13 | ;-----------------------------------------------------------------------
|
---|
14 | ;
|
---|
15 | Q:'$G(KMPDDA) "NO"
|
---|
16 | ;
|
---|
17 | N I,RTN,RETURN
|
---|
18 | S I=0,RETURN="NO"
|
---|
19 | F S I=$O(^XPD(9.7,KMPDDA,"RTN",I)) Q:'I D Q:RETURN="YES"
|
---|
20 | .Q:'$D(^XPD(9.7,KMPDDA,"RTN",I,0)) S RTN=$P(^(0),U)
|
---|
21 | .S:$$ROUSRC1(RTN,"LOCAL MOD/") RETURN="YES"
|
---|
22 | .;S:$$ROUSRC1(RTN,"/LOCAL MOD/") RETURN="YES"
|
---|
23 | ;
|
---|
24 | Q RETURN
|
---|
25 | ;
|
---|
26 | ROUFIND(KMPDY,KMPDRNM,KMPDGBL) ;-- find routines.
|
---|
27 | ;-----------------------------------------------------------------------
|
---|
28 | ; KMPDRNM.. Routine name to search for.
|
---|
29 | ; KMPDGBL... Global to store data. Stored in format:
|
---|
30 | ; RoutineName^RoutineSize^Checksum
|
---|
31 | ;-----------------------------------------------------------------------
|
---|
32 | ;
|
---|
33 | K KMPDY
|
---|
34 | ;
|
---|
35 | S KMPDRNM=$G(KMPDRNM),KMPDGBL=$G(KMPDGBL)
|
---|
36 | ;
|
---|
37 | I KMPDGBL="" S KMPDY="[Global for storage is not defined]" Q
|
---|
38 | ;
|
---|
39 | N DATA,LN,ROU,RTN,X,Y
|
---|
40 | ;
|
---|
41 | ; kill global with check for ^tmp or ^utility.
|
---|
42 | D KILL^KMPDU(.DATA,KMPDGBL)
|
---|
43 | ; if error.
|
---|
44 | I $E(DATA)="[" S KMPDY=DATA Q
|
---|
45 | ;
|
---|
46 | S KMPDY=$NA(@KMPDGBL)
|
---|
47 | ;
|
---|
48 | ; if no asterisk (*) then look for routine.
|
---|
49 | I KMPDRNM'["*" D Q
|
---|
50 | .; if routine name greater than 8 characters
|
---|
51 | .I $L(KMPDRNM)>8 S @KMPDGBL@(0)="<"_KMPDRNM_" is greater than 8 characters>" Q
|
---|
52 | .; if routine not defined.
|
---|
53 | .I '$D(^$ROUTINE(KMPDRNM)) S @KMPDGBL@(0)="<Routine "_KMPDRNM_" not defined>" Q
|
---|
54 | .; if defined.
|
---|
55 | .S $P(@KMPDGBL@(0),U)=KMPDRNM
|
---|
56 | .; checksum
|
---|
57 | .S X=KMPDRNM X ^%ZOSF("RSUM") S $P(@KMPDGBL@(0),U,2)=Y
|
---|
58 | ;
|
---|
59 | ; remove "*" if any.
|
---|
60 | S:$E(KMPDRNM,$L(KMPDRNM))="*" KMPDRNM=$E(KMPDRNM,1,$L(KMPDRNM)-1)
|
---|
61 | S (ROU,RTN)=KMPDRNM,LN=0
|
---|
62 | S ROU=$E(ROU,1,$L(ROU)-1)
|
---|
63 | S ROU=ROU_$C(($A($E(KMPDRNM,$L(KMPDRNM)))-1))_"zz"
|
---|
64 | F S ROU=$O(^$ROUTINE(ROU)) Q:ROU=""!($E(ROU,1,$L(RTN))'=RTN) D
|
---|
65 | .S $P(@KMPDGBL@(LN),U)=ROU
|
---|
66 | .; checksum
|
---|
67 | .S X=ROU X ^%ZOSF("RSUM") S $P(@KMPDGBL@(LN),U,2)=Y
|
---|
68 | .S LN=LN+1
|
---|
69 | ;
|
---|
70 | S:'$D(@KMPDGBL) KMPDY(0)="<No Data To Report>"
|
---|
71 | ;
|
---|
72 | Q
|
---|
73 | ;
|
---|
74 | ROUINQ(KMPDY,KMPDROU) ;-- routine inquiry.
|
---|
75 | ;----------------------------------------------------------------------
|
---|
76 | ; KMPDROU.. Routine(s) to search (this may be a partial name.
|
---|
77 | ;----------------------------------------------------------------------
|
---|
78 | ;
|
---|
79 | K KMPDY
|
---|
80 | ;
|
---|
81 | S KMPDROU=$G(KMPDROU)
|
---|
82 | I KMPDROU="" S KMPDY(0)="[Routine name not defined]" Q
|
---|
83 | I '$D(^$ROUTINE(KMPDROU)) S KMPDY(0)="[Routine '"_KMPDROU_"' not defined]" Q
|
---|
84 | ;
|
---|
85 | N DIF,I,LN,ROU,X,XCNP
|
---|
86 | ;
|
---|
87 | S DIF="ROU(",XCNP=0
|
---|
88 | S X=KMPDROU X ^%ZOSF("TEST")
|
---|
89 | I '$T S KMPDY(0)="[Routine '"_KMPDROU_"' not defined]" Q
|
---|
90 | X ^%ZOSF("LOAD")
|
---|
91 | S (I,LN)=0
|
---|
92 | F S I=$O(ROU(I)) Q:'I I $D(ROU(I,0)) D
|
---|
93 | .S KMPDY(LN)=ROU(I,0),LN=LN+1
|
---|
94 | ;
|
---|
95 | S:'$D(KMPDY) KMPDY(0)="[Unable to load routine]"
|
---|
96 | ;
|
---|
97 | Q
|
---|
98 | ;
|
---|
99 | ROUSRC(KMPDY,KMPDROU,KMPDTXT) ;-- routine search
|
---|
100 | ;----------------------------------------------------------------------
|
---|
101 | ; KMPDROU.. Routine(s) to search (this may be a partial name.
|
---|
102 | ; KMPDTXT.. Text to search for in routine.
|
---|
103 | ;----------------------------------------------------------------------
|
---|
104 | ;
|
---|
105 | K KMPDY
|
---|
106 | ;
|
---|
107 | S KMPDROU=$G(KMPDROU),KMPDTXT=$$UP^XLFSTR($G(KMPDTXT))
|
---|
108 | ;
|
---|
109 | I KMPDROU="" S KMPDY(0)="[Routine(s) not defined]" Q
|
---|
110 | ;
|
---|
111 | I KMPDTXT="" S KMPDY(0)="[Search Text not defined]" Q
|
---|
112 | ;
|
---|
113 | N LN,RN,RTN,STAR
|
---|
114 | ;
|
---|
115 | S RTN=KMPDROU,STAR=$E(RTN,$L(RTN))
|
---|
116 | S:STAR="*" RTN=$E(RTN,1,$L(RTN)-1)
|
---|
117 | ;
|
---|
118 | ; if just one routine.
|
---|
119 | I STAR'="*" D Q
|
---|
120 | .; if match.
|
---|
121 | .I $$ROUSRC1(RTN,KMPDTXT) S KMPDY(0)=RTN Q
|
---|
122 | .; else no match.
|
---|
123 | .S KMPDY(0)="<No Matches Found>"
|
---|
124 | ;
|
---|
125 | S RN=RTN,LN=0
|
---|
126 | F S RN=$O(^$ROUTINE(RN)) Q:RN=""!($E(RN,1,$L(RTN))'=RTN) D
|
---|
127 | .; if match.
|
---|
128 | .I $$ROUSRC1(RN,KMPDTXT) S KMPDY(LN)=RN,LN=LN+1 Q
|
---|
129 | ;
|
---|
130 | S:'$D(KMPDY) KMPDY(0)="<No Matches Found>"
|
---|
131 | ;
|
---|
132 | Q
|
---|
133 | ;
|
---|
134 | ROUSRC1(KMPDROU,KMPDTXT) ;-- extrinsic function - check for text.
|
---|
135 | ;----------------------------------------------------------------------
|
---|
136 | ; KMPDROU.. Routine(s) to search (this may be a partial name.
|
---|
137 | ; KMPDTXT.. Text to search for in routine.
|
---|
138 | ;
|
---|
139 | ; Return: 0 - no match.
|
---|
140 | ; 1 - match.
|
---|
141 | ;----------------------------------------------------------------------
|
---|
142 | ;
|
---|
143 | S KMPDROU=$G(KMPDROU),KMPDTXT=$$UP^XLFSTR($G(KMPDTXT))
|
---|
144 | ;
|
---|
145 | Q:KMPDROU="" 0
|
---|
146 | Q:KMPDTXT="" 0
|
---|
147 | ;
|
---|
148 | N DIF,I,RETURN,ROU,X,XCNP
|
---|
149 | ;
|
---|
150 | S DIF="ROU(",(I,RETURN,XCNP)=0,RETURN=0
|
---|
151 | S X=KMPDROU X ^%ZOSF("TEST")
|
---|
152 | Q:'$T 0
|
---|
153 | X ^%ZOSF("LOAD")
|
---|
154 | F S I=$O(ROU(I)) Q:'I I $D(ROU(I,0)) D Q:RETURN
|
---|
155 | .I $$UP^XLFSTR(ROU(I,0))[KMPDTXT S RETURN=1
|
---|
156 | ;
|
---|
157 | Q RETURN
|
---|
158 | ;
|
---|
159 | ROUSRC2(KMPDY,KMPDROU,KMPDTXT,KMPDGBL) ;-- search for text in routine.
|
---|
160 | ;----------------------------------------------------------------------
|
---|
161 | ; KMPDROU.. Routine(s) to search.
|
---|
162 | ; KMPDTXT.. Text to search for in routine.
|
---|
163 | ; KMPDGBL... Global to store data.
|
---|
164 | ;-----------------------------------------------------------------------
|
---|
165 | ;
|
---|
166 | K KMPDY
|
---|
167 | ;
|
---|
168 | S KMPDROU=$G(KMPDROU),KMPDGBL=$G(KMPDGBL)
|
---|
169 | ;
|
---|
170 | I KMPDGBL="" S KMPDY="[Global for storage is not defined]" Q
|
---|
171 | ;
|
---|
172 | N DATA,DIF,I,LABEL,LN,OFFSET,ONE,ROU,RTN,X,XCNP
|
---|
173 | ;
|
---|
174 | ; kill global with check for ^tmp or ^utility.
|
---|
175 | D KILL^KMPDU(.DATA,KMPDGBL)
|
---|
176 | ; if error.
|
---|
177 | I $E(DATA)="[" S KMPDY=DATA Q
|
---|
178 | ;
|
---|
179 | S KMPDY=$NA(@KMPDGBL)
|
---|
180 | ;
|
---|
181 | S KMPDROU=$G(KMPDROU),KMPDTXT=$$UP^XLFSTR($G(KMPDTXT))
|
---|
182 | ;
|
---|
183 | I KMPDROU="" S @KMPDGBL@(0)="[Routine(s) name not defined]" Q
|
---|
184 | I KMPDTXT="" S @KMPDGBL@(0)="[Search text not defined]" Q
|
---|
185 | ;
|
---|
186 | S ONE=1
|
---|
187 | ; remove "*" if any.
|
---|
188 | I $E(KMPDROU,$L(KMPDROU))="*" D
|
---|
189 | .S KMPDROU=$E(KMPDROU,1,$L(KMPDROU)-1)
|
---|
190 | .S ONE=0
|
---|
191 | ; get ready to $order.
|
---|
192 | S RTN=KMPDROU
|
---|
193 | S DATA=KMPDROU
|
---|
194 | S DATA=$E(DATA,1,$L(DATA)-1)
|
---|
195 | S DATA=DATA_$C(($A($E(KMPDROU,$L(KMPDROU)))-1))_"zz"
|
---|
196 | S KMPDROU=DATA
|
---|
197 | ;
|
---|
198 | S ROU=KMPDROU,LN=0
|
---|
199 | F S ROU=$O(^$ROUTINE(ROU)) Q:ROU=""!($E(ROU,1,$L(RTN))'=RTN) D Q:ONE
|
---|
200 | .K ROUT
|
---|
201 | .S DIF="ROUT(",(I,OFFSET,XCNP)=0,LABEL=ROU
|
---|
202 | .S X=ROU X ^%ZOSF("TEST") Q:'$T
|
---|
203 | .X ^%ZOSF("LOAD")
|
---|
204 | .F S I=$O(ROUT(I)) Q:'I I $D(ROUT(I,0)) D
|
---|
205 | ..S OFFSET=OFFSET+1
|
---|
206 | ..; if new label.
|
---|
207 | ..I $E(ROUT(I,0))'=" " S LABEL=$$ROULABEL^KMPDU2(ROUT(I,0)),OFFSET=0
|
---|
208 | ..; quit if no match.
|
---|
209 | ..Q:$$UP^XLFSTR(ROUT(I,0))'[KMPDTXT
|
---|
210 | ..S @KMPDGBL@(LN)=ROU_"^"_LABEL_$S(OFFSET:"+"_OFFSET,1:"")_" "_ROUT(I,0)
|
---|
211 | ..S LN=LN+1
|
---|
212 | ;
|
---|
213 | S:'$D(@KMPDGBL) @KMPDGBL@(0)="<No Match Found>"
|
---|
214 | ;
|
---|
215 | Q
|
---|
216 | ;
|
---|
217 | ROULABEL(TEXT) ;-- routine label.
|
---|
218 | Q:$G(TEXT)="" ""
|
---|
219 | N I,LABEL
|
---|
220 | S LABEL=""
|
---|
221 | F I=1:1 Q:$E(TEXT,I)=" "!($E(TEXT,I)="(") S LABEL=$E(TEXT,0,I)
|
---|
222 | Q LABEL
|
---|