[613] | 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
|
---|