XPDKEY ;SFISC/RWF,RSD - Tools to work on KEYS ;9/21/95  13:47
 ;;8.0;KERNEL;**5**;Jul 10, 1995
 Q
 ;XPDOLD=current Key name,  XPDNEW=new Key name
 ;return 1 for success, 0 for failure
RENAME(XPDOLD,XPDNEW) ;EF. Rename a Security Key
 Q:$D(XPDOLD)+$D(XPDNEW)'=2 0
 N DA,DIERR,DIK,XPD,XPDKEY,XPDI
 S XPDKEY=$O(^DIC(19.1,"B",XPDOLD,0)) Q:XPDKEY'>0 0
 S XPD(19.1,XPDKEY_",",.01)=XPDNEW D UPDATE^DIE("","XPD")
 I $D(DIERR) Q 0
 S XPDI=0,DA=XPDKEY,DIK="^VA(200,XPDI,51,",DIK(1)=.01
 F  S XPDI=$O(^VA(200,"AB",XPDKEY,XPDI)) Q:'XPDI  S DA(1)=XPDI D EN1^DIK
 D LOCKS(XPDOLD,XPDNEW)
 Q 1
 ;
LOCKS(XPDOLD,XPDNEW) ;check file 19 for LOCKS and REVERSE/LOCK fields
 N XPD,XPDI,X,Y
 Q:$D(XPDOLD)+$D(XPDNEW)'=2
 S XPDI=0
 F  S XPDI=$O(^DIC(19,XPDI)) Q:'XPDI  S X=$G(^(XPDI,0)),Y=$G(^(3)) D:$L(X)
 .K XPD
 .S:$P(X,"^",6)=XPDOLD XPD(19,XPDI_",",3)=XPDNEW
 .S:$P(Y,"^")=XPDOLD XPD(19,XPDI_",",3.01)=XPDNEW
 .D:$D(XPD) UPDATE^DIE("","XPD")
 Q
 ;
DEL(XPDA) ; Delete a key.
 N DA,DIK,XPD,XPDKEY,XPDI
 Q:'$D(^DIC(19.1,+$G(XPDA),0))  S XPDKEY=$P(^(0),"^")
 S XPDI=0,DA=XPDA
 F  S XPDI=$O(^VA(200,"AB",XPDA,XPDI)) Q:'XPDI  D
 . S DA(1)=XPDI,DIK="^VA(200,XPDI,51," D ^DIK
 . S DIK="^VA(200,XPDI,52," D ^DIK
 K DA S DA=XPDA,DIK="^DIC(19.1,"
 D ^DIK,LOCKS(XPDKEY,"@")
 Q
 ;
LKUP(X) ;Lookup a in the KEY file.
 Q:'$L(X) ""
 I X?1N.NP Q $P($G(^DIC(19.1,X,0)),"^")
 Q $O(^DIC(19.1,"B",X,0))
