| 1 | DIKCU1 ;SFISC/MKO-FILE/RECORD INFO ;11:21 AM  20 Aug 1999
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**12**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;===================
 | 
|---|
| 5 |  ; $$VDA([.]DA,Flag)
 | 
|---|
| 6 |  ;===================
 | 
|---|
| 7 |  ;Make sure elements DA array are positive canonic numbers.
 | 
|---|
| 8 |  ;In:
 | 
|---|
| 9 |  ; [.]DA = DA array
 | 
|---|
| 10 |  ; F   [ R : DA can't be 0 or null
 | 
|---|
| 11 |  ;     [ D : generate Dialog
 | 
|---|
| 12 |  ;Returns: 1 if valid; 0 if invalid
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 | VDA(DA,F) ;
 | 
|---|
| 15 |  N I,ERR
 | 
|---|
| 16 |  Q:$D(DA)[0 0
 | 
|---|
| 17 |  I $G(F)["R" D:0[DA
 | 
|---|
| 18 |  . S ERR=1 D:$G(F)["D" ERR^DIKCU2(202,"","","","RECORD")
 | 
|---|
| 19 |  I DA]"",DA<0!(DA'=+$P(DA,"E")) D
 | 
|---|
| 20 |  . S ERR=1 D:$G(F)["D" ERR^DIKCU2(202,"","","","RECORD")
 | 
|---|
| 21 |  E  F I=1:1 Q:'$D(DA(I))  I DA(I)'>0!(DA(I)'=+$P(DA(I),"E")) D  Q
 | 
|---|
| 22 |  . S ERR=1 D:$G(F)["D" ERR^DIKCU2(202,"","","","RECORD")
 | 
|---|
| 23 |  Q '$G(ERR)
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ;====================================
 | 
|---|
| 26 |  ; $$VFLAG(InputFlags,GoodFlags,Flag)
 | 
|---|
| 27 |  ;====================================
 | 
|---|
| 28 |  ;Makes sure Flags contain only Good Flags.
 | 
|---|
| 29 |  ;In:
 | 
|---|
| 30 |  ; FLAG   = flags
 | 
|---|
| 31 |  ; GDFLAG = good flags
 | 
|---|
| 32 |  ; F      [ D : generate Dialog
 | 
|---|
| 33 |  ;Returns: 1 if valid; 0 if invalid
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | VFLAG(FLAG,GDFLAG,F) ;
 | 
|---|
| 36 |  S FLAG=$G(FLAG)
 | 
|---|
| 37 |  I $TR($G(FLAG),$G(GDFLAG),"")'?.NP D  Q 0
 | 
|---|
| 38 |  . D:$G(F)["D" ERR^DIKCU2(301,"","","",FLAG)
 | 
|---|
| 39 |  Q 1
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  ;=====================
 | 
|---|
| 42 |  ; $$VFNUM(File#,Flag)
 | 
|---|
| 43 |  ;=====================
 | 
|---|
| 44 |  ;Check that File# exists and has a non-wp .01 field
 | 
|---|
| 45 |  ;In:
 | 
|---|
| 46 |  ; FIL = File or subfile #
 | 
|---|
| 47 |  ; F   [ D : generate Dialog
 | 
|---|
| 48 |  ;Returns: 1 if valid; 0 if invalid
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | VFNUM(FIL,F) ;
 | 
|---|
| 51 |  Q:$G(FIL)="" 0
 | 
|---|
| 52 |  I '$D(^DD(FIL)) D:$G(F)["D" ERR^DIKCU2(401,FIL) Q 0
 | 
|---|
| 53 |  I $P($G(^DD(FIL,.01,0)),U,2)="" D:$G(F)["D" ERR^DIKCU2(406,FIL) Q 0
 | 
|---|
| 54 |  I $P(^DD(FIL,.01,0),U,2)["W" D:$G(F)["D" ERR^DIKCU2(407,FIL) Q 0
 | 
|---|
| 55 |  Q 1
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  ;===========================
 | 
|---|
| 58 |  ; $$VFLD(File#,Field#,Flag)
 | 
|---|
| 59 |  ;===========================
 | 
|---|
| 60 |  ;Check that the Fil/Fld exists in the ^DD
 | 
|---|
| 61 |  ;In:
 | 
|---|
| 62 |  ; FIL = File or subfile #
 | 
|---|
| 63 |  ; FLD = Field #
 | 
|---|
| 64 |  ; F   [ D : generate Dialog
 | 
|---|
| 65 |  ;Returns: 1 if valid; 0 if invalid
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 | VFLD(FIL,FLD,F) ;
 | 
|---|
| 68 |  Q:$G(FIL)="" 0  Q:$G(FLD)="" 0
 | 
|---|
| 69 |  I '$D(^DD(FIL,FLD)) D:$G(F)["D" ERR^DIKCU2(501,FIL,"",FLD,FLD) Q 0
 | 
|---|
| 70 |  Q 1
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ;================================================
 | 
|---|
| 73 |  ; FRNAME(File#,[.]Rec,FileText,RecordTxt,.Level)
 | 
|---|
| 74 |  ;================================================
 | 
|---|
| 75 |  ;Return string that identifies (sub)file and (sub)record.
 | 
|---|
| 76 |  ;In:
 | 
|---|
| 77 |  ;  FIL  = File or subfile #
 | 
|---|
| 78 |  ; .REC  = DA array
 | 
|---|
| 79 |  ;Out:
 | 
|---|
| 80 |  ; .FTXT = Text that identifies file
 | 
|---|
| 81 |  ; .RTXT = Text that identifies record
 | 
|---|
| 82 |  ; .LEV  = Level
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | FRNAME(FIL,REC,FTXT,RTXT,LEV) ;
 | 
|---|
| 85 |  K FTXT,RTXT,LEV
 | 
|---|
| 86 |  Q:'$G(FIL)  Q:'$D(REC)
 | 
|---|
| 87 |  N FINFO
 | 
|---|
| 88 |  D FINFO(FIL,.FINFO) Q:'$D(FINFO)
 | 
|---|
| 89 |  D FILENAME("",.FTXT,.FINFO)
 | 
|---|
| 90 |  D RECNAME("",REC,.RTXT,.FINFO)
 | 
|---|
| 91 |  S LEV=FINFO
 | 
|---|
| 92 |  Q
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ;=================================
 | 
|---|
| 95 |  ; FILENAME(File#,.NameArr,.FINFO)
 | 
|---|
| 96 |  ;=================================
 | 
|---|
| 97 |  ;Get text that identifies the (sub)file
 | 
|---|
| 98 |  ;In:
 | 
|---|
| 99 |  ;  FIL   = File or subfile #
 | 
|---|
| 100 |  ;In/Out:
 | 
|---|
| 101 |  ; .FINFO = File info array (optional) (see FINFO below)
 | 
|---|
| 102 |  ;Out:
 | 
|---|
| 103 |  ;  N     = Text (undefined if error)
 | 
|---|
| 104 |  ;  N(n)  = Overflow text
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | FILENAME(FIL,N,FINFO) ;
 | 
|---|
| 107 |  K N
 | 
|---|
| 108 |  I '$D(FINFO) Q:'$G(FIL)  D FINFO(FIL,.FINFO) Q:'$D(FINFO)
 | 
|---|
| 109 |  N I,L,T
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 |  S L=FINFO,N=0,N(0)=""
 | 
|---|
| 112 |  F I=L:-1:0 D
 | 
|---|
| 113 |  . I I S T=$P(FINFO(I),U,3)_" (#"_$P(FINFO(I),U)_"), subfield #"_$P(FINFO(I),U,2)_" of "
 | 
|---|
| 114 |  . E  S T=$S(L:"the ",1:"")_$P(FINFO(I),U,3)_" File (#"_$P(FINFO(I),U)_")"
 | 
|---|
| 115 |  . I $L(N(N))+$L(T)>240 S N=N+1,N(N)=""
 | 
|---|
| 116 |  . S N(N)=N(N)_T
 | 
|---|
| 117 |  S N=N(0) K N(0)
 | 
|---|
| 118 |  Q
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  ;========================================
 | 
|---|
| 121 |  ; RECNAME(File#,.Record,.NameArr,.FINFO)
 | 
|---|
| 122 |  ;========================================
 | 
|---|
| 123 |  ;Get text that identifies the (sub)recird
 | 
|---|
| 124 |  ;In:
 | 
|---|
| 125 |  ;    FIL = File or subfile #
 | 
|---|
| 126 |  ; [.]REC = DA array or IENS
 | 
|---|
| 127 |  ;In/Out:
 | 
|---|
| 128 |  ; .FINFO = File info array (optional) (see FINFO below)
 | 
|---|
| 129 |  ;Out:
 | 
|---|
| 130 |  ;  NA    = Text (undefined if error)
 | 
|---|
| 131 |  ;  NA(n) = Overflow text
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 | RECNAME(FIL,REC,NA,FINFO) ;Return string that identifies the (sub)record
 | 
|---|
| 134 |  K NA
 | 
|---|
| 135 |  Q:'$G(REC)
 | 
|---|
| 136 |  I '$D(FINFO) Q:'$G(FIL)  D FINFO(FIL,.FINFO) Q:'$D(FINFO)
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |  N DA,DIERR,ERR,J,LV,LVI,MSG,NDA,ROOT,TX,V01
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  ;Set DA array
 | 
|---|
| 141 |  I REC'["," M DA=REC
 | 
|---|
| 142 |  E  D DA^DILF(REC,.DA)
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  S LV=FINFO,NA=0,NA(0)=""
 | 
|---|
| 145 |  F LVI=LV:-1:0 D  Q:$G(ERR)
 | 
|---|
| 146 |  . I LVI,$G(DA(LVI))'>0 S ERR=1 Q
 | 
|---|
| 147 |  . I 'LVI,$G(DA)'>0 S ERR=1 Q
 | 
|---|
| 148 |  . ;
 | 
|---|
| 149 |  . I '$D(DDS) D  Q:$G(ERR)
 | 
|---|
| 150 |  .. S ROOT=$P(FINFO(LVI),U,4,999)
 | 
|---|
| 151 |  .. S V01=$P($G(@ROOT@(0)),U) I V01="" S ERR=1 Q
 | 
|---|
| 152 |  .. S TX=$$EXTERNAL^DILFD($P(FINFO(LVI),U),.01,"",V01,"MSG")
 | 
|---|
| 153 |  .. I $G(DIERR) S TX=V01 K MSG,DIERR
 | 
|---|
| 154 |  . ;
 | 
|---|
| 155 |  . E  D
 | 
|---|
| 156 |  .. F J=LVI:-1:1 S NDA(J)=DA(J+LV-LVI)
 | 
|---|
| 157 |  .. S NDA=$S(LVI=LV:DA,1:DA(LV-LVI))
 | 
|---|
| 158 |  .. S TX=$$GET^DDSVAL($P(FINFO(LVI),U),.NDA,.01,"","E") K NDA
 | 
|---|
| 159 |  . ;
 | 
|---|
| 160 |  . I LV-LVI S TX="'"_TX_"' (#"_DA(LV-LVI)_")"
 | 
|---|
| 161 |  . E  S TX="'"_TX_"' (#"_DA_")"
 | 
|---|
| 162 |  . I LVI S TX=TX_" of "
 | 
|---|
| 163 |  . I $L(NA(NA))+$L(TX)>240 S NA=NA+1,NA(NA)=""
 | 
|---|
| 164 |  . S NA(NA)=NA(NA)_TX
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 |  I $G(ERR) K NA Q
 | 
|---|
| 167 |  S NA=NA(0) K NA(0)
 | 
|---|
| 168 |  Q
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 |  ;========================
 | 
|---|
| 171 |  ; FINFO(File#,.FileInfo)
 | 
|---|
| 172 |  ;========================
 | 
|---|
| 173 |  ;Get (sub)file info
 | 
|---|
| 174 |  ;In:
 | 
|---|
| 175 |  ; FIL = File or subfile #
 | 
|---|
| 176 |  ;Out:
 | 
|---|
| 177 |  ; FINFO    = n (level)
 | 
|---|
| 178 |  ; FINFO(0) = file#^^fileName^fileRootw/DA
 | 
|---|
| 179 |  ; FINFO(n) = subfile#^mfield#^mfieldName^^subfileRootw/DA
 | 
|---|
| 180 |  ;Example:
 | 
|---|
| 181 |  ; FINFO    = 3
 | 
|---|
| 182 |  ; FINFO(0) = 1000^^My File^^DIZ(1000,DA(3))
 | 
|---|
| 183 |  ; FINFO(1) = 1000.01^100^Mult1^^DIZ(1000,DA(3),10,DA(2))
 | 
|---|
| 184 |  ; FINFO(2) = 1000.02^200^Mult2^^DIZ(1000,DA(3),10,DA(2),20,DA(1))
 | 
|---|
| 185 |  ; FINFO(3) = 1000.03^300^Mult3^^DIZ(1000,DA(3),10,DA(2),20,DA(1),30,DA)
 | 
|---|
| 186 |  ;
 | 
|---|
| 187 | FINFO(FIL,FINFO) ;
 | 
|---|
| 188 |  Q:'$G(FIL)
 | 
|---|
| 189 |  K FINFO
 | 
|---|
| 190 |  ;
 | 
|---|
| 191 |  ;If top level, set FINFO and quit
 | 
|---|
| 192 |  I $D(^DIC(FIL,0,"GL"))#2 D  Q
 | 
|---|
| 193 |  . S FINFO=0,FINFO(0)=FIL_U_U_$P(^DIC(FIL,0),U)_U_^DIC(FIL,0,"GL")_"DA)"
 | 
|---|
| 194 |  ;
 | 
|---|
| 195 |  ;Must be a subfile level, get mult nodes, and level
 | 
|---|
| 196 |  N A,ERR,I,L,MFLD,ND,PAR,ROOT,SUB
 | 
|---|
| 197 |  S SUB=FIL
 | 
|---|
| 198 |  F L=0:1 S PAR=$G(^DD(SUB,0,"UP")) Q:'PAR  D  Q:$G(ERR)
 | 
|---|
| 199 |  . S MFLD=$O(^DD(PAR,"SB",SUB,"")) I 'MFLD S ERR=1 Q
 | 
|---|
| 200 |  . I $D(^DD(PAR,MFLD,0))[0 S ERR=1 Q
 | 
|---|
| 201 |  . S FINFO(L)=SUB_U_MFLD_U_$P(^DD(PAR,MFLD,0),U)
 | 
|---|
| 202 |  . ;
 | 
|---|
| 203 |  . S ND=$P($P(^DD(PAR,MFLD,0),U,4),";")
 | 
|---|
| 204 |  . S:ND'=+$P(ND,"E") ND=""""_ND_""""
 | 
|---|
| 205 |  . S ND(L+1)=ND
 | 
|---|
| 206 |  . S SUB=PAR
 | 
|---|
| 207 |  I $G(ERR) K FINFO,L Q
 | 
|---|
| 208 |  S FIL=SUB
 | 
|---|
| 209 |  I $D(^DIC(FIL,0))[0 K FINFO,L Q
 | 
|---|
| 210 |  S FINFO(L)=FIL_U_U_$P(^DIC(FIL,0),U)
 | 
|---|
| 211 |  ;
 | 
|---|
| 212 |  ;Build global roots
 | 
|---|
| 213 |  S ROOT=$G(^DIC(FIL,0,"GL")) I ROOT="" K FINFO,L Q
 | 
|---|
| 214 |  F I=L:-1:1 D
 | 
|---|
| 215 |  . S ROOT=ROOT_"DA("_I_")"
 | 
|---|
| 216 |  . S FINFO(I)=FINFO(I)_U_ROOT_")"
 | 
|---|
| 217 |  . S ROOT=ROOT_","_ND(I)_","
 | 
|---|
| 218 |  S FINFO(0)=FINFO(0)_U_ROOT_"DA)"
 | 
|---|
| 219 |  S FINFO=L
 | 
|---|
| 220 |  ;
 | 
|---|
| 221 |  ;Invert the FINFO array
 | 
|---|
| 222 |  K A M A=FINFO K FINFO S FINFO=A F A=0:1:FINFO S FINFO(A)=A(FINFO-A)
 | 
|---|
| 223 |  Q
 | 
|---|
| 224 |  ;
 | 
|---|
| 225 |  ;#202  The input parameter that identifies the |1| is missing or invalid.
 | 
|---|
| 226 |  ;#301  The passed flag(s) '|1|' are unknown or inconsistent.
 | 
|---|
| 227 |  ;#401  File #|FILE| does not exist.
 | 
|---|
| 228 |  ;#406  File #|FILE| has no .01 field definition.
 | 
|---|
| 229 |  ;#407  A word-processing field is not a file.
 | 
|---|
| 230 |  ;#501  File #|FILE| does not contain a field |1|.
 | 
|---|