- XPDKEY ;SFISC/RWF,RSD - Tools to work on KEYS ;9/21/95 13:47 [ 04/02/2003 8:29 AM ]
- ;;8.0;KERNEL;**1002,1003,1004,1005,1007**;APR 1, 2003
- ;;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))
- XPDKEY ;SFISC/RWF,RSD - Tools to work on KEYS ;9/21/95 13:47 [ 04/02/2003 8:29 AM ]
- +1 ;;8.0;KERNEL;**1002,1003,1004,1005,1007**;APR 1, 2003
- +2 ;;8.0;KERNEL;**5**;Jul 10, 1995
- +3 QUIT
- +4 ;XPDOLD=current Key name, XPDNEW=new Key name
- +5 ;return 1 for success, 0 for failure
- RENAME(XPDOLD,XPDNEW) ;EF. Rename a Security Key
- +1 IF $DATA(XPDOLD)+$DATA(XPDNEW)'=2
- QUIT 0
- +2 NEW DA,DIERR,DIK,XPD,XPDKEY,XPDI
- +3 SET XPDKEY=$ORDER(^DIC(19.1,"B",XPDOLD,0))
- IF XPDKEY'>0
- QUIT 0
- +4 SET XPD(19.1,XPDKEY_",",.01)=XPDNEW
- DO UPDATE^DIE("","XPD")
- +5 IF $DATA(DIERR)
- QUIT 0
- +6 SET XPDI=0
- SET DA=XPDKEY
- SET DIK="^VA(200,XPDI,51,"
- SET DIK(1)=.01
- +7 FOR
- SET XPDI=$ORDER(^VA(200,"AB",XPDKEY,XPDI))
- IF 'XPDI
- QUIT
- SET DA(1)=XPDI
- DO EN1^DIK
- +8 DO LOCKS(XPDOLD,XPDNEW)
- +9 QUIT 1
- +10 ;
- LOCKS(XPDOLD,XPDNEW) ;check file 19 for LOCKS and REVERSE/LOCK fields
- +1 NEW XPD,XPDI,X,Y
- +2 IF $DATA(XPDOLD)+$DATA(XPDNEW)'=2
- QUIT
- +3 SET XPDI=0
- +4 FOR
- SET XPDI=$ORDER(^DIC(19,XPDI))
- IF 'XPDI
- QUIT
- SET X=$GET(^(XPDI,0))
- SET Y=$GET(^(3))
- IF $LENGTH(X)
- Begin DoDot:1
- +5 KILL XPD
- +6 IF $PIECE(X,"^",6)=XPDOLD
- SET XPD(19,XPDI_",",3)=XPDNEW
- +7 IF $PIECE(Y,"^")=XPDOLD
- SET XPD(19,XPDI_",",3.01)=XPDNEW
- +8 IF $DATA(XPD)
- DO UPDATE^DIE("","XPD")
- End DoDot:1
- +9 QUIT
- +10 ;
- DEL(XPDA) ; Delete a key.
- +1 NEW DA,DIK,XPD,XPDKEY,XPDI
- +2 IF '$DATA(^DIC(19.1,+$GET(XPDA),0))
- QUIT
- SET XPDKEY=$PIECE(^(0),"^")
- +3 SET XPDI=0
- SET DA=XPDA
- +4 FOR
- SET XPDI=$ORDER(^VA(200,"AB",XPDA,XPDI))
- IF 'XPDI
- QUIT
- Begin DoDot:1
- +5 SET DA(1)=XPDI
- SET DIK="^VA(200,XPDI,51,"
- DO ^DIK
- +6 SET DIK="^VA(200,XPDI,52,"
- DO ^DIK
- End DoDot:1
- +7 KILL DA
- SET DA=XPDA
- SET DIK="^DIC(19.1,"
- +8 DO ^DIK
- DO LOCKS(XPDKEY,"@")
- +9 QUIT
- +10 ;
- LKUP(X) ;Lookup a in the KEY file.
- +1 IF '$LENGTH(X)
- QUIT ""
- +2 IF X?1N.NP
- QUIT $PIECE($GET(^DIC(19.1,X,0)),"^")
- +3 QUIT $ORDER(^DIC(19.1,"B",X,0))