Annotation of freem_fileman/DDS10.m, revision 1.1.1.1
1.1 snw 1: DDS10 ;SFISC/MKO-BLOCK SETUP ;09:48 AM 18 Nov 1994
2: ;;21.0;VA FileMan;;Dec 28, 1994
3: ;Per VHA Directive 10-93-142, this routine should not be modified.
4: ;
5: SET(DDS1B,DDS1E,DA,DDP,DIE,DL,DDSDA) ;Get values for pointed-to block
6: ;In:
7: ; DDS1B = Block number or [Block name] (by ref)
8: ; DDS1E = 1, if we're loading a pointed-to block and we want
9: ; interactive dialog (DIC(0)["E") in the lookup
10: ; DA = Record array
11: ;Returns:
12: ; DDS1B = Block number
13: ; DDP = File number of block
14: ; DIE = Global root based on DDP and DA
15: ; DL = Level number (top=0)
16: ; DDSDA = DA,DA(1),...,
17: ;
18: D BK(.DDS1B,.DDP) Q:$G(DIERR)
19: D GDA(DDS1B,DDS1E,.DA) Q:$G(DIERR)
20: D GL(DDP,.DA,.DIE,.DL,.DDSDA,1) Q:$G(DIERR)
21: Q
22: ;
23: BK(DDSBK,DDP) ;Lookup block, get file number
24: ;Input:
25: ; DDSBK = Block number or [Block name] (by ref)
26: ;Returns:
27: ; DDSBK = Block number
28: ; DDP = File number
29: ; DIERR
30: ;
31: I DDSBK=+$P(DDSBK,"E") D Q
32: . I $D(^DIST(.404,DDSBK,0))[0 D BLD^DIALOG(3051,"#"_DDSBK) Q
33: . S DDP=+$P(^DIST(.404,DDSBK,0),U,2)
34: I DDSBK?1"["1.E1"]" D Q
35: . N X,Y,DIC
36: . S X=$E(DDSBK,2,$L(DDSBK)-1),DIC="^DIST(.404,",DIC(0)="FZ"
37: . D ^DIC I Y<0 D BLD^DIALOG(3051,"named "_X) Q
38: . S DDSBK=+Y,DDP=+$P(Y(0),U,2)
39: D BLD^DIALOG(3051,"#"_DDSBK)
40: Q
41: ;
42: GDA(DDS1B,DDS1E,DA) ;Find new DA
43: ;Input:
44: ; DDS1B = Block number
45: ; DDS1E = 1:Interactive lookup
46: ; DDSDAORG = Original DA array
47: ; DDSDLORG = Original DL
48: ; DDSPG
49: ;Returns:
50: ; DA = Record number
51: ; DIERR
52: ;
53: N DDSDA,DDSI,X
54: ;
55: ;Set DA array to its original value
56: S DA=DDSDAORG
57: F DDSI=1:1:DDSDLORG S DA(DDSI)=DDSDAORG(DDSI)
58: D DDSDA(.DA,DDSDLORG,.DDSDA)
59: ;
60: ;Xecute each PTB node
61: F DDSI=1:1 Q:DA=""!'$D(@DDSREFS@(DDSPG,DDS1B,"PTB",DDSI)) X ^(DDSI) S:$G(X)'>0 DA=""
62: ;
63: ;Kill descendants of DA
64: I '$G(DIERR) S DDSI=DA K DA S DA=DDSI
65: S:DA'>0!$G(DIERR) DA=""
66: Q
67: ;
68: GL(F,DA,DIE,DL,DDSDA,DDSL) ;Get global root, level, and IEN
69: ;Input variables:
70: ; F = file #
71: ; DA = array
72: ; DDSL = flag to lock record
73: ;Returns:
74: ; DIE = global root of file (null if error)
75: ; DL = level (top=0) (null if error)
76: ; DDSDA = IEN
77: ; DIERR = Error flag
78: ;
79: I '$D(^DD(F)) D BLD^DIALOG(401,F) S (DIE,DL)="" Q
80: I $D(^DIC(F,0,"GL"))#2 S DIE=^("GL"),DL=0
81: E D SUBGL Q:$G(DIERR)
82: ;
83: Q:'$G(DA)
84: D DDSDA(.DA,DL,.DDSDA)
85: ;
86: N DDSP S DDSP("FILE")=F,DDSP("IEN")=DDSDA
87: ;
88: I $D(@(DIE_DA_",0)"))[0 D BLD^DIALOG(601,"",.DDSP)
89: I $D(@(DIE_DA_",-9)")) D BLD^DIALOG(602,"",.DDSP)
90: ;
91: I $G(DDSL),$D(^TMP("DDS",$J,"LOCK",DIE_DA_")"))[0 D Q:$G(DIERR)
92: . L +@(DIE_DA_")"):0 E D BLD^DIALOG(110,"",.DDSP) Q
93: . S ^TMP("DDS",$J,"LOCK",DIE_DA_")")=""
94: Q
95: ;
96: SUBGL ;Get root and level for subfile
97: N D,I,S,U1
98: S D=F
99: F DL=0:1 Q:$D(^DD(D,0,"UP"))[0 S U1=^("UP") G:'$D(^DD(U1,"SB",D)) SUBER G:$D(^DD(U1,$O(^(D,"")),0))[0 SUBER S S(DL+1)=""""_$P($P(^(0),U,4),";")_"""",D=U1
100: G:$D(^DIC(D,0,"GL"))[0 SUBER S DIE=^("GL")
101: F I=DL:-1:1 G:$D(DA(I))[0 SUBER S DIE=DIE_DA(I)_","_S(I)_","
102: Q
103: ;
104: SUBER ;Come here if an error is encountered in GL
105: S (DIE,DL)=""
106: D BLD^DIALOG(309)
107: Q
108: ;
109: DDSDA(DA,DL,DDSDA) ;Determine DDSDA
110: ;Input:
111: ; DA = Record array
112: ; DL = Level number (top=0)
113: ;Output:
114: ; DDSDA = DA,DA(1),...,
115: ;
116: N I
117: I DA="" S DDSDA="" Q
118: S DDSDA=DA_"," F I=1:1:DL S DDSDA=DDSDA_DA(I)_","
119: Q
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>