[613] | 1 | DIDU ;SEA/TOAD-VA FileMan: DD Tools, External Format ;6/15/00 13:29
|
---|
| 2 | ;;22.0;VA FileMan;**31,48**;Mar 30, 1999
|
---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;11960;7754722;5858;
|
---|
| 5 | ;
|
---|
| 6 | EXTERNAL(DIFILE,DIFIELD,DIFLAGS,DINTERNL,DIMSGA) ;
|
---|
| 7 | ;
|
---|
| 8 | ; convert a value from internal to external format
|
---|
| 9 | ; used all over lookup routines
|
---|
| 10 | ;
|
---|
| 11 | XTRNLX ;
|
---|
| 12 | ;
|
---|
| 13 | ; support for documented entry point $$EXTERNAL^DILFD
|
---|
| 14 | ; branch from DILFD or DIQGU
|
---|
| 15 | ;
|
---|
| 16 | E1 ; set up DBS environment variables
|
---|
| 17 | ;
|
---|
| 18 | I '$D(DIQUIET) N DIQUIET S DIQUIET=1
|
---|
| 19 | I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
|
---|
| 20 | N DICLERR S DICLERR=$G(DIERR) K DIERR
|
---|
| 21 | ;
|
---|
| 22 | E2 ; handle bad input variables
|
---|
| 23 | ;
|
---|
| 24 | I $G(DINTERNL)="" Q ""
|
---|
| 25 | S DIMSGA=$G(DIMSGA)
|
---|
| 26 | S DIFLAGS=$G(DIFLAGS)
|
---|
| 27 | I DIFLAGS'?.1(1"F",1"L",1"U",1"i",1"h") D ERR(DIMSGA,301,"","","",DIFLAGS) Q ""
|
---|
| 28 | I $G(DIFIELD)'>0 D ERR(DIMSGA,202,"","","","FIELD") Q ""
|
---|
| 29 | ;
|
---|
| 30 | E3 ; get field definition and type, handle bad file or field
|
---|
| 31 | ;
|
---|
| 32 | I $G(DIFILE)<0 D ERR(DIMSGA,202,"","","","FILE") Q ""
|
---|
| 33 | N DINODE S DINODE=$G(^DD(DIFILE,DIFIELD,0))
|
---|
| 34 | I DINODE="" D Q ""
|
---|
| 35 | . I '$D(^DD(DIFILE)) D ERR(DIMSGA,401,DIFILE)
|
---|
| 36 | . E D ERR(DIMSGA,501,DIFILE,"",DIFIELD,DIFIELD)
|
---|
| 37 | N DITYPE S DITYPE=$P(DINODE,U,2)
|
---|
| 38 | ;
|
---|
| 39 | E4 ; initialize loop control, transform code, pointer chain window,
|
---|
| 40 | ; pointer file info, and resolved value variables
|
---|
| 41 | ;
|
---|
| 42 | N DICHAIN,DIDONE,DIOUT S (DICHAIN,DIDONE,DIOUT)=0
|
---|
| 43 | N DIXFORM S DIXFORM=""
|
---|
| 44 | N DINEXT,DIPREV,DIPREVF S (DINEXT,DIPREV,DIPREVF)=""
|
---|
| 45 | N DIEN,DIHEAD,DIROOT S DIEN=""
|
---|
| 46 | N DIEXTRNL S DIEXTRNL=""
|
---|
| 47 | ;
|
---|
| 48 | E5 ; handle output transforms (see docs for effects of flags)
|
---|
| 49 | ; under right conditions, execute output transform on value & quit
|
---|
| 50 | ;
|
---|
| 51 | F D I DIDONE!$G(DIERR)!DIOUT Q
|
---|
| 52 | . I DIFLAGS["U",DIXFORM'="",DITYPE'["P",DITYPE'["V" S DITYPE=DITYPE_"O"
|
---|
| 53 | . I DITYPE["O",DIFLAGS'["i",DIFLAGS'["h" D I DIDONE!$G(DIERR) Q
|
---|
| 54 | . . I DIFLAGS["F",DICHAIN Q
|
---|
| 55 | . . I DIFLAGS["L",DITYPE["P"!(DITYPE["V") Q
|
---|
| 56 | . . I DIXFORM=""!(DIFLAGS'["U") S DIXFORM=$G(^DD(DIFILE,DIFIELD,2))
|
---|
| 57 | . . I DIXFORM="" Q
|
---|
| 58 | . . I DIFLAGS["U",DITYPE["P"!(DITYPE["V") Q
|
---|
| 59 | . . N Y S Y=DINTERNL X DIXFORM
|
---|
| 60 | . . I $G(DIERR) D ERR^DICF4(120,DIFILE,DIEN,"","Output Transform") Q
|
---|
| 61 | . . S DIEXTRNL=Y,DIDONE=1
|
---|
| 62 | .
|
---|
| 63 | E6 . ; continue with loop only for pointers or variable pointers
|
---|
| 64 | .
|
---|
| 65 | . I DITYPE S DIOUT=1 Q
|
---|
| 66 | . I DITYPE'["P",DITYPE'["V" S DIOUT=1 Q
|
---|
| 67 | .
|
---|
| 68 | E7 . ; if the value's not numeric, it's not valid; note that throughout
|
---|
| 69 | . ; module we return two different errors depending on whether the
|
---|
| 70 | . ; value passed in is bad, or one found in the pointer chain is
|
---|
| 71 | .
|
---|
| 72 | . I 'DINTERNL D Q
|
---|
| 73 | . . I 'DICHAIN D ERR(DIMSGA,330,"","","",DINTERNL,"pointer") Q
|
---|
| 74 | . . D ERR(DIMSGA,630,DIFILE,"",DIFIELD,DIEN,DINTERNL,"pointer")
|
---|
| 75 | .
|
---|
| 76 | E8 . ; get pointed to file's root and #
|
---|
| 77 | .
|
---|
| 78 | . I DITYPE["P" S DIROOT=$P(DINODE,U,3),DINEXT=+$P($P(DINODE,U,2),"P",2) D Q:$G(DIERR)
|
---|
| 79 | . . I DIROOT="DIC(.2," S DINEXT=.2
|
---|
| 80 | . . I 'DINEXT!(DIROOT="") D ERR(DIMSGA,537,DIFILE,,DIFIELD)
|
---|
| 81 | . . Q
|
---|
| 82 | . I DITYPE["V" S DIROOT=$P(DINTERNL,";",2),DINEXT="" D Q:$G(DIERR)
|
---|
| 83 | . . I DIROOT="" D ERR(DIMSGA,348,,,,DINTERNL) Q
|
---|
| 84 | . . S DIHEAD=$G(@(U_DIROOT_"0)"))
|
---|
| 85 | . . I DIHEAD="" D Q
|
---|
| 86 | . . . D HEADER(DIFILE,DIEN,DIFIELD,DITYPE,DICHAIN,DINTERNL,DINEXT)
|
---|
| 87 | . . S DINEXT=+$P(DIHEAD,U,2) I 'DINEXT D Q
|
---|
| 88 | . . . D ERR(DIMSGA,404,"","","",$$CREF^DILF(U_DIROOT))
|
---|
| 89 | .
|
---|
| 90 | E9 . ; ensure pointed to data file exists, and advance file #s
|
---|
| 91 | .
|
---|
| 92 | . I '$D(@(U_DIROOT_"+DINTERNL)")) D Q
|
---|
| 93 | . . N DI S DI="pointer to File #"
|
---|
| 94 | . . I 'DICHAIN D ERR(DIMSGA,330,"","","",DINTERNL,DI_DINEXT) Q
|
---|
| 95 | . . D ERR(DIMSGA,630,DIFILE,DIFIELD,"",DIEN,DINTERNL,DI_DINEXT)
|
---|
| 96 | . S DIPREV=DIFILE,DIFILE=DINEXT
|
---|
| 97 | .
|
---|
| 98 | E10 . ; advance pointer value, file characteristics, & pointer window
|
---|
| 99 | . ; ensure pointed to record exists, & its .01 has a DD
|
---|
| 100 | . ; set flag that we are now in the pointer chain
|
---|
| 101 | .
|
---|
| 102 | . S DIEN=+DINTERNL
|
---|
| 103 | . S DINTERNL=$P($G(^(DIEN,0)),U) ;***** Naked *****
|
---|
| 104 | . I DINTERNL="" D ERR(DIMSGA,603,DIFILE,"",.01,DIEN) Q
|
---|
| 105 | . S DINODE=$G(^DD(DIFILE,.01,0))
|
---|
| 106 | . S DITYPE=$P(DINODE,U,2)
|
---|
| 107 | . I DITYPE="" D ERR(DIMSGA,510,DIFILE,"",.01) Q
|
---|
| 108 | . S DIPREVF=DIFIELD,DIFIELD=.01
|
---|
| 109 | . S DICHAIN=1
|
---|
| 110 | . S:DIFILE=.2 DIDONE=1 Q
|
---|
| 111 | ;
|
---|
| 112 | E11 ; exit if we executed an output transform or ran into an error
|
---|
| 113 | ;
|
---|
| 114 | ; Special "i" flag returns internal value at end of pointer chain
|
---|
| 115 | I DIFLAGS["i" Q DINTERNL
|
---|
| 116 | I DIFILE=.2 Q DINTERNL
|
---|
| 117 | I DIDONE Q DIEXTRNL
|
---|
| 118 | I $G(DIERR) Q ""
|
---|
| 119 | ;
|
---|
| 120 | E12 ; handle illegal data types (pointers, word processings, and multiples)
|
---|
| 121 | ;
|
---|
| 122 | I DITYPE["C" D ERRPTR("Computed") Q ""
|
---|
| 123 | I DITYPE["W" D ERRPTR("Word Processing") Q ""
|
---|
| 124 | I DITYPE S DITYPE=$P($G(^DD(+DITYPE,.01,0)),U,2) D Q ""
|
---|
| 125 | . I DITYPE["W" D ERRPTR("Word Processing") Q
|
---|
| 126 | . D ERRPTR("Multiple") Q
|
---|
| 127 | ;
|
---|
| 128 | E13 ; handle sets of codes
|
---|
| 129 | ;
|
---|
| 130 | I DITYPE["S" D Q DIEXTRNL
|
---|
| 131 | . N DICODES S DICODES=";"_$P(DINODE,U,3)
|
---|
| 132 | . N DISTART S DISTART=$F(DICODES,";"_DINTERNL_":")
|
---|
| 133 | . I 'DISTART S DIEXTRNL="" D Q
|
---|
| 134 | . . I 'DICHAIN D ERR(DIMSGA,730,DIFILE,"",DIFIELD,DINTERNL,"code") Q
|
---|
| 135 | . . D ERR(DIMSGA,630,DIFILE,DIFIELD,"",DIEN,DINTERNL,"code")
|
---|
| 136 | . S DIEXTRNL=$P($E(DICODES,DISTART,$L(DICODES)),";")
|
---|
| 137 | ;
|
---|
| 138 | E14 ; handle dates, and return all others as they are
|
---|
| 139 | ;
|
---|
| 140 | I DITYPE["D",DINTERNL D Q DIEXTRNL
|
---|
| 141 | . S DIEXTRNL=$$FMTE^DILIBF(DINTERNL,"1U")
|
---|
| 142 | . I DIEXTRNL'="" Q
|
---|
| 143 | . I 'DICHAIN D ERR(DIMSGA,330,"","","",DINTERNL,"date") Q
|
---|
| 144 | . D ERR(DIMSGA,630,DIFILE,"",DIFIELD,DIEN,DINTERNL,"date")
|
---|
| 145 | I DICLERR'=""!$G(DIERR) D
|
---|
| 146 | . S DIERR=$G(DIERR)+DICLERR_U_($P($G(DIERR),U,2)+$P(DICLERR,U,2))
|
---|
| 147 | Q DINTERNL
|
---|
| 148 | ;
|
---|
| 149 | HEADER(DIFILE,DIEN,DIFIELD,DITYPE,DICHAIN,DINTERNL,DINEXT) ;
|
---|
| 150 | ;
|
---|
| 151 | ; pick a header error and log it
|
---|
| 152 | ; EXTERNAL
|
---|
| 153 | ;
|
---|
| 154 | I DITYPE["P" D ; pointer
|
---|
| 155 | . I 'DINEXT!'$D(^DD(DINEXT)) D ERR(DIMSGA,537,DIFILE,"",DIFIELD) Q
|
---|
| 156 | . D ERR(DIMSGA,403,DINEXT)
|
---|
| 157 | ;
|
---|
| 158 | E D ; variable pointer
|
---|
| 159 | . I DICHAIN D ERR(DIMSGA,648,DIFILE,"",DIFIELD,DIEN,DINTERNL) Q
|
---|
| 160 | . D ERR(DIMSGA,348,"","","",DINTERNL)
|
---|
| 161 | Q
|
---|
| 162 | ;
|
---|
| 163 | ERR(DIMSGA,DIERN,DIFILE,DIIENS,DIFIELD,DI1,DI2,DI3) ;
|
---|
| 164 | ;
|
---|
| 165 | ; error logging procedure
|
---|
| 166 | ; EXTERNAL
|
---|
| 167 | ;
|
---|
| 168 | N DIPE,DI F DI="FILE","IENS","FIELD",1:1:3 S DIPE(DI)=$G(@("DI"_DI))
|
---|
| 169 | D BLD^DIALOG(DIERN,.DIPE,.DIPE,DIMSGA,"F")
|
---|
| 170 | S DIERR=$G(DIERR)+DICLERR_U_($P($G(DIERR),U,2)+$P(DICLERR,U,2))
|
---|
| 171 | Q
|
---|
| 172 | ;
|
---|
| 173 | ERRPTR(DITYPE) ;
|
---|
| 174 | ;
|
---|
| 175 | ; error logging shell for errors 520 & 537
|
---|
| 176 | ; EXTERNAL
|
---|
| 177 | ;
|
---|
| 178 | I DICHAIN D ERR(DIMSGA,537,DIPREV,"",DIPREVF) Q
|
---|
| 179 | D ERR(DIMSGA,520,DIFILE,"",DIFIELD,DITYPE)
|
---|
| 180 | Q
|
---|
| 181 | ;
|
---|
| 182 | ; 202 The input parameter that identifies the |1
|
---|
| 183 | ; 301 The passed flag(s) '|1|' are unknown or in
|
---|
| 184 | ; 330 The value '|1|' is not a valid |2|.
|
---|
| 185 | ; 348 The passed value '|1|' points to a file th
|
---|
| 186 | ; 401 File #|FILE| does not exist.
|
---|
| 187 | ; 403 File #|FILE| lacks a Header Node.
|
---|
| 188 | ; 404 The File Header node of the file stored at
|
---|
| 189 | ; 501 File #|FILE| does not contain a field |1|.
|
---|
| 190 | ; 510 The data type for Field #|FIELD| in File #
|
---|
| 191 | ; 520 A |1| field cannot be processed by this ut
|
---|
| 192 | ; 537 Field #|FIELD| in File #|FILE| has a corru
|
---|
| 193 | ; 603 Entry #|1| in File #|FILE| lacks the requi
|
---|
| 194 | ; 630 In Entry #|1| of File #|FILE|, the value '
|
---|
| 195 | ; 648 In Entry #|1| of File #|FILE|, the value '
|
---|
| 196 | ; 730 The value '|1|' is not a valid |2| accordi
|
---|
| 197 | ;
|
---|