1 | XQ6 ;SEA/AMF,SLC/CJS- BULK KEY DISTRIBUTION ;2/14/95 12:47
|
---|
2 | ;;8.0;KERNEL;;Jul 10, 1995
|
---|
3 | EN1 S XQAL=1,XQDA=0 G INIT ; ENTRY POINT TO ACTIVATE KEY (XUKEYALL)
|
---|
4 | EN2 S XQAL=0,XQDA=0 G INIT ; DE-ALLOCATE ACTIVE KEY (XUKEYDEALL)
|
---|
5 | EN3 S XQAL=1,XQDA=1 G INIT ; DELEGATE KEYS (XQKEYDEL)
|
---|
6 | EN4 S XQAL=0,XQDA=1 ;REMOVE DELEGATED KEYS (XQKEYRDEL)
|
---|
7 | INIT ;
|
---|
8 | K XQKEY,XQHOLD S (XQKEY(0),XQHOLD(0),XQBOSS)=0
|
---|
9 | KEY ;
|
---|
10 | S:'$D(XQDA) XQDA=0 S XQBOSS=0 S:(DUZ(0)="@"!($D(^XUSEC("XUMGR",DUZ)))) XQBOSS=1
|
---|
11 | I 'XQBOSS,$O(^VA(200,DUZ,52,0))'>0 W !,"You've nothing to allocate. See your package coordinator or site manager." G OUT
|
---|
12 | W !!,$S($O(XQKEY(0))>0:"Another",XQAL&XQDA:"Delegate",XQAL:"Allocate",'XQAL&XQDA:"Remove delegated",1:"De-allocate")," key: " R X:DTIME S:'$T X=U G:X[U OUT
|
---|
13 | I '$L(X) G:($O(XQKEY(0))'>0) OUT G HOLDER
|
---|
14 | I X["?" S XQH="XQKEYALLOCATE-KEY" D:X="?" EN^XQH D:X="??" LSTKEY^XQ6A D:X="???" KEYFIL^XQ6A G KEY
|
---|
15 | S XQM=0 S:"-"[$E(X,1) X=$E(X,2,999),XQM=1
|
---|
16 | S DIC=19.1,DIC(0)="EZM" S:'XQBOSS DIC("S")="I $D(^VA(200,DUZ,52,+Y,0))" D ^DIC K DIC I Y<0 W " ??",*7 G KEY
|
---|
17 | I XQM W $S($D(XQKEY(+Y)):" Deleted from current list",1:$C(7)_" ?? Key not on list") K XQKEY(+Y) G KEY
|
---|
18 | S XQKEY(+Y)="" I $D(^DIC(19.1,+Y,3,0)),$P(^(0),U,4)>0 D MORE
|
---|
19 | G KEY
|
---|
20 | ;
|
---|
21 | MORE ;Handles subordinate or exploding keys
|
---|
22 | W !!,"There are subordinate keys, do you wish to add them" S %=2 D YN^DICN I %=-1!(%=2) Q
|
---|
23 | I %=0 W !!,"If you answer 'YES', the subordinate keys will be listed and added." G MORE
|
---|
24 | F XQI=0:0 S XQI=$O(^DIC(19.1,+Y,3,XQI)) Q:XQI'>0 S XQJ=+^(XQI,0),XQKEY(XQJ)="" W !,$P(^DIC(19.1,XQJ,0),"^")," ",$P(^(0),U,2)
|
---|
25 | Q
|
---|
26 | HOLDER ;Continue in next routine
|
---|
27 | G HOLDER^XQ6A
|
---|
28 | ;
|
---|
29 | OUT K %,DA,DIC,DIE,DR,XMDUZ,XQBOSS,XQKEY,XQAL,XQHOLD,XQI,XQJ,XQK,XQDA,XQSBNFDT,XQH,XQM,XQNM,X,Y
|
---|
30 | Q
|
---|
31 | SHOW ;Show the users of a particular key
|
---|
32 | K ^TMP($J) S XQL=1,DIC="^DIC(19.1,",DIC(0)="AEQMZ",DIC("A")=" Which key? " W ! D ^DIC I Y'>0 K DIC,XQL Q
|
---|
33 | S XQKEY=$P(Y,U,2) I '$D(^XUSEC(XQKEY)) W !!,"There are no holders of this key." K DIC,XQKEY Q
|
---|
34 | W @IOF,?15,"Current holders of the key ",XQKEY,!!
|
---|
35 | S %=0 F XQI=0:0 S %=$O(^XUSEC(XQKEY,%)) Q:%="" I $D(^VA(200,+%,0)) S ^TMP($J,$P(^VA(200,+%,0),U))=""
|
---|
36 | S %="" F XQI=1:1 S %=$O(^TMP($J,%)) Q:%="" W !,% D:'(XQI#16) PAUSE Q:X[U
|
---|
37 | K ^TMP($J),%,DIC,XQI,XQL,XQKEY
|
---|
38 | Q
|
---|
39 | PAUSE ;Hold the screen
|
---|
40 | W !!?5,"Hit RETURN to continue or '^' to stop: " R X:DTIME S:'$T X=U
|
---|
41 | I X'[U,XQL W @IOF,?15,"Current holders of the key ",XQKEY,!!
|
---|
42 | Q
|
---|
43 | LIST ;List all the keys of a given user
|
---|
44 | K ^TMP($J) S XQL=0,DIC="^VA(200,",DIC(0)="AEQMZ",DIC("A")=" User's name: " W ! D ^DIC I Y'>0 K DIC Q
|
---|
45 | S %=$P(Y,U,2),XQUSER=$P(%,",",2)_" "_$P(%,","),XQU=+Y
|
---|
46 | I $D(^VA(200,XQU,52,0)),$P(^(0),U,2)["200.051" S $P(^(0),U,2)="200.052PA" D MESS ;This corrects a Kv7 problem can be removed after Kv8
|
---|
47 | S %=0 F XQI=0:1 S %=$O(^VA(200,XQU,51,"B",%)) Q:%="" S:$D(^DIC(19.1,%,0)) ^TMP($J,$P(^DIC(19.1,%,0),U))=""
|
---|
48 | W @IOF S XQK=5 I XQI=0 W !!,XQUSER," does not currently hold any keys."
|
---|
49 | I XQI>0 W !!,XQUSER," currently holds:",! S %="" F XQI=0:1 S %=$O(^TMP($J,%)) Q:%="" W:'(XQI#XQK) ! W ?(XQI#XQK*16),%
|
---|
50 | K ^TMP($J) S %=0 F XQI=0:1 S %=$O(^VA(200,XQU,52,"B",%)) Q:%="" S:$D(^DIC(19.1,%,0)) ^TMP($J,$P(^DIC(19.1,%,0),U))=""
|
---|
51 | I XQI>0 W !!!,XQUSER," may delegate the following keys:",! S %="" F XQI=0:1 S %=$O(^TMP($J,%)) Q:%="" W:'(XQI#XQK) ! W ?(XQI#XQK*16),%
|
---|
52 | K ^TMP($J),%,DIC,XQI,XQK,XQL,XQU,XQUSER
|
---|
53 | Q
|
---|
54 | ;
|
---|
55 | ATOD ;Convert all of a users allocated keys to delegated keys
|
---|
56 | S DIC="^VA(200,",DIC(0)="AEQMZ",DIC("A")=" User's name: " W ! D ^DIC I Y'>0 K DIC Q
|
---|
57 | S %=$P(Y,U,2),XQUSER=$P(%,",",2)_" "_$P(%,","),XQU=+Y
|
---|
58 | S %=$P($G(^VA(200,XQU,51,0)),U,4) I %'>0 W !!,XQUSER," does not hold any keys to transfer." K XQUSER,XQU,Y G ATOD
|
---|
59 | I $D(^VA(200,XQU,52,0)),$P(^(0),U,4)>0 W !!,XQUSER," already has some delegated keys." S DIR(0)="YA",DIR("A")=" Shall I merge the two sets? Y/N ",DIR("B")="N" D ^DIR I Y=0!$D(DIRUT) K DIR,DIRUT,XQUSER,XQU,Y G ATOD
|
---|
60 | S %X="^VA(200,"_XQU_",51,",%Y="^VA(200,"_XQU_",52," D %XY^%RCR
|
---|
61 | S $P(^VA(200,XQU,52,0),U,2)="200.052PA"
|
---|
62 | S DIK="^VA(200,"_XQU_",52,",DIK(1)=".01^B",DA=52,DA(1)=XQU D ENALL^DIK
|
---|
63 | K %,%X,%Y,DA,DIC,DIK,DIR,XQU,XQUSER,X,Y
|
---|
64 | Q
|
---|
65 | ;
|
---|
66 | MESS ;Correct problems with key cross-references from 7.0 %RCR above.
|
---|
67 | S DA(1)=XQU F XQFIL=51,52 D
|
---|
68 | .K ^VA(200,DA(1),XQFIL,"B")
|
---|
69 | .S DA=0,DIK="^VA(200,"_DA(1)_","_XQFIL_","
|
---|
70 | .F S DA=$O(^VA(200,DA(1),XQFIL,DA)) Q:DA'=+DA D IX^DIK
|
---|
71 | .Q
|
---|
72 | K DA,DIC,DIK,XQDUZ,XQFIL
|
---|
73 | Q
|
---|