DIDU2 ;SEA/TOAD-VA FileMan: DD Tools, Header Nodes ;1:17 PM 12 Jan 2001 [ 04/02/2003 8:25 AM ]
;;22.0;VA FileMan;**1001**;APR 1, 2003
;;22.0;VA FileMan;**72**;Mar 30, 1999
;Per VHA Directive 10-93-142, this routine should not be modified.
;
;ENTRY POINT--return the value a file's Header Node should have
;extrinsic function, DIENS passed by reference
I '$D(DIQUIET) N DIQUIET S DIQUIET=1
I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
N DIROOT D HINPUT(.DIFILE,.DIENS,.DIMSGA,.DIROOT) I $G(DIERR) D Q ""
. D CLOSE
N DIHEADER S DIHEADER=$$PIECES12(DIFILE,DIROOT) I $G(DIERR) D Q ""
. D CLOSE
N DIRECENT S DIRECENT=$O(@DIROOT@(" "),-1) I DIRECENT="" S DIRECENT=0
N DICOUNT,DIRECORD S DIRECORD=0
F DICOUNT=0:1 S DIRECORD=$O(@DIROOT@(DIRECORD)) Q:'DIRECORD I DICOUNT>10000 S DICOUNT=$P($G(@DIROOT@(0)),U,4) Q
Q DIHEADER_U_DIRECENT_U_DICOUNT
;
HINPUT(DIFILE,DIENS,DIMSGA,DIROOT) ;
;evaluate input variables for HEADER call
I $G(DIMSGA)'="" D
. K @DIMSGA@("DIERR"),@DIMSGA@("DIHELP"),@DIMSGA@("DIMSG")
S DIFILE=$G(DIFILE) I DIFILE="" D ERR(202,"","","","FILE") Q
I $G(^DD(DIFILE,.01,0))="" D Q
. I '$D(^DD(DIFILE)) D ERR(401,DIFILE) Q
. I '$D(^DD(DIFILE,.01)) D ERR(406,DIFILE) Q
. E D ERR(502,DIFILE,"",.01)
S DIENS=$G(DIENS) I DIENS="" S DIENS=","
I '$$IEN^DIDU1(DIENS) D Q
. I '$$IEN^DIDU1(DIENS_",") D ERR(202,"","","","IENS") Q
. E D ERR(304,"",DIENS)
S DIROOT=$G(DIFILE("ROOT")) I DIROOT="" D
. S DIROOT=$$ROOT^DILFD(DIFILE,DIENS,1,1) Q:DIROOT'=""!$G(DIERR)
. I '$D(^DD(DIFILE)) D ERR(401,DIFILE) Q
. E D ERR(402,DIFILE,DIENS)
Q
;
PIECES12(DIFILE,DIROOT) ;
;return pieces 1 & 2 of the Header node
N DIPIECE1,DIPIECE2
N DINAME S DINAME=$O(^DD(DIFILE,0,"NM","")) I DINAME="" D Q ""
. D ERR(408,DIFILE)
N DIPARENT S DIPARENT=$G(^DD(DIFILE,0,"UP"))
;
P1 I DIPARENT'="" D ;subfile
. S DIPIECE1=""
. I $P(^DD(DIFILE,.01,0),U,2)["W" D Q
. . D ERR(407,DIFILE)
. N DIFIELD S DIFIELD=$O(^DD(DIPARENT,"B",DINAME,""))
. I DIFIELD="" D Q
. . D ERR(501,DIFILE,"","",DINAME)
. N DINODE S DINODE=$G(^DD(DIPARENT,DIFIELD,0)) I DINODE="" D Q
. . D ERR(502,DIFILE,"",DIFIELD)
. S DIPIECE2=$P(DINODE,U,2) I DIPIECE2="" D Q
. . D ERR(502,DIFILE,"",DIFIELD)
;
P2 E D ;root file
. S DIPIECE1=DINAME
. S DIPIECE2=DIFILE_$$CODES(DIFILE,DIROOT) I $G(DIERR) Q
I $G(DIERR) Q ""
Q DIPIECE1_U_DIPIECE2
;
CODES(DIFILE,DIROOT) ;
;collect the file characteristics codes
N DIFIELD S DIFIELD=$P($G(^DD(DIFILE,.01,0)),U,2) I DIFIELD="" D Q ""
. I '$D(^DD(DIFILE,.01)) D ERR(501,DIFILE,"","",.01) Q
. E D ERR(510,DIFILE,"",DIFIELD)
N DICODES S DICODES=""
N DITYPE F DITYPE="D","S","P","V" I DIFIELD[DITYPE S DICODES=DITYPE Q
I $D(^DD(DIFILE,0,"ID")) S DICODES=DICODES_"I"
I $D(^DD(DIFILE,0,"SCR"))#2 S DICODES=DICODES_"s"
N DINODE S DINODE=$G(@DIROOT@(0))
I $P(DINODE,U,2)["A" S DICODES=DICODES_"A"
I $P(DINODE,U,2)["O" S DICODES=DICODES_"O"
Q DICODES
;
CLOSE D CALLOUT^DIEFU($G(DIMSGA)):$G(DIMSGA)'="" Q
;
ERR(DIERN,DIFILE,DIIENS,DIFIELD,DI1,DI2,DI3) ;
;log an error
N DIPE
N DI F DI="FILE","IENS","FIELD",1:1:3 S DIPE(DI)=$G(@("DI"_DI))
D BLD^DIALOG(DIERN,.DIPE,.DIPE)
Q
DIDU2 ;SEA/TOAD-VA FileMan: DD Tools, Header Nodes ;1:17 PM 12 Jan 2001 [ 04/02/2003 8:25 AM ]
+1 ;;22.0;VA FileMan;**1001**;APR 1, 2003
+2 ;;22.0;VA FileMan;**72**;Mar 30, 1999
+3 ;Per VHA Directive 10-93-142, this routine should not be modified.
+4 ;
+1 ;ENTRY POINT--return the value a file's Header Node should have
+2 ;extrinsic function, DIENS passed by reference
+3 IF '$DATA(DIQUIET)
NEW DIQUIET
SET DIQUIET=1
+4 IF '$DATA(DIFM)
NEW DIFM
SET DIFM=1
DO INIZE^DIEFU
+5 NEW DIROOT
DO HINPUT(.DIFILE,.DIENS,.DIMSGA,.DIROOT)
IF $GET(DIERR)
Begin DoDot:1
+6 DO CLOSE
End DoDot:1
QUIT ""
+7 NEW DIHEADER
SET DIHEADER=$$PIECES12(DIFILE,DIROOT)
IF $GET(DIERR)
Begin DoDot:1
+8 DO CLOSE
End DoDot:1
QUIT ""
+9 NEW DIRECENT
SET DIRECENT=$ORDER(@DIROOT@(" "),-1)
IF DIRECENT=""
SET DIRECENT=0
+10 NEW DICOUNT,DIRECORD
SET DIRECORD=0
+11 FOR DICOUNT=0:1
SET DIRECORD=$ORDER(@DIROOT@(DIRECORD))
IF 'DIRECORD
QUIT
IF DICOUNT>10000
SET DICOUNT=$PIECE($GET(@DIROOT@(0)),U,4)
QUIT
+12 QUIT DIHEADER_U_DIRECENT_U_DICOUNT
+13 ;
HINPUT(DIFILE,DIENS,DIMSGA,DIROOT) ;
+1 ;evaluate input variables for HEADER call
+2 IF $GET(DIMSGA)'=""
Begin DoDot:1
+3 KILL @DIMSGA@("DIERR"),@DIMSGA@("DIHELP"),@DIMSGA@("DIMSG")
End DoDot:1
+4 SET DIFILE=$GET(DIFILE)
IF DIFILE=""
DO ERR(202,"","","","FILE")
QUIT
+5 IF $GET(^DD(DIFILE,.01,0))=""
Begin DoDot:1
+6 IF '$DATA(^DD(DIFILE))
DO ERR(401,DIFILE)
QUIT
+7 IF '$DATA(^DD(DIFILE,.01))
DO ERR(406,DIFILE)
QUIT
+8 IF '$TEST
DO ERR(502,DIFILE,"",.01)
End DoDot:1
QUIT
+9 SET DIENS=$GET(DIENS)
IF DIENS=""
SET DIENS=","
+10 IF '$$IEN^DIDU1(DIENS)
Begin DoDot:1
+11 IF '$$IEN^DIDU1(DIENS_",")
DO ERR(202,"","","","IENS")
QUIT
+12 IF '$TEST
DO ERR(304,"",DIENS)
End DoDot:1
QUIT
+13 SET DIROOT=$GET(DIFILE("ROOT"))
IF DIROOT=""
Begin DoDot:1
+14 SET DIROOT=$$ROOT^DILFD(DIFILE,DIENS,1,1)
IF DIROOT'=""!$GET(DIERR)
QUIT
+15 IF '$DATA(^DD(DIFILE))
DO ERR(401,DIFILE)
QUIT
+16 IF '$TEST
DO ERR(402,DIFILE,DIENS)
End DoDot:1
+17 QUIT
+18 ;
PIECES12(DIFILE,DIROOT) ;
+1 ;return pieces 1 & 2 of the Header node
+2 NEW DIPIECE1,DIPIECE2
+3 NEW DINAME
SET DINAME=$ORDER(^DD(DIFILE,0,"NM",""))
IF DINAME=""
Begin DoDot:1
+4 DO ERR(408,DIFILE)
End DoDot:1
QUIT ""
+5 NEW DIPARENT
SET DIPARENT=$GET(^DD(DIFILE,0,"UP"))
+6 ;
P1 ;subfile
IF DIPARENT'=""
Begin DoDot:1
+1 SET DIPIECE1=""
+2 IF $PIECE(^DD(DIFILE,.01,0),U,2)["W"
Begin DoDot:2
+3 DO ERR(407,DIFILE)
End DoDot:2
QUIT
+4 NEW DIFIELD
SET DIFIELD=$ORDER(^DD(DIPARENT,"B",DINAME,""))
+5 IF DIFIELD=""
Begin DoDot:2
+6 DO ERR(501,DIFILE,"","",DINAME)
End DoDot:2
QUIT
+7 NEW DINODE
SET DINODE=$GET(^DD(DIPARENT,DIFIELD,0))
IF DINODE=""
Begin DoDot:2
+8 DO ERR(502,DIFILE,"",DIFIELD)
End DoDot:2
QUIT
+9 SET DIPIECE2=$PIECE(DINODE,U,2)
IF DIPIECE2=""
Begin DoDot:2
+10 DO ERR(502,DIFILE,"",DIFIELD)
End DoDot:2
QUIT
End DoDot:1
+11 ;
P2 ;root file
IF '$TEST
Begin DoDot:1
+1 SET DIPIECE1=DINAME
+2 SET DIPIECE2=DIFILE_$$CODES(DIFILE,DIROOT)
IF $GET(DIERR)
QUIT
End DoDot:1
+3 IF $GET(DIERR)
QUIT ""
+4 QUIT DIPIECE1_U_DIPIECE2
+5 ;
CODES(DIFILE,DIROOT) ;
+1 ;collect the file characteristics codes
+2 NEW DIFIELD
SET DIFIELD=$PIECE($GET(^DD(DIFILE,.01,0)),U,2)
IF DIFIELD=""
Begin DoDot:1
+3 IF '$DATA(^DD(DIFILE,.01))
DO ERR(501,DIFILE,"","",.01)
QUIT
+4 IF '$TEST
DO ERR(510,DIFILE,"",DIFIELD)
End DoDot:1
QUIT ""
+5 NEW DICODES
SET DICODES=""
+6 NEW DITYPE
FOR DITYPE="D","S","P","V"
IF DIFIELD[DITYPE
SET DICODES=DITYPE
QUIT
+7 IF $DATA(^DD(DIFILE,0,"ID"))
SET DICODES=DICODES_"I"
+8 IF $DATA(^DD(DIFILE,0,"SCR"))#2
SET DICODES=DICODES_"s"
+9 NEW DINODE
SET DINODE=$GET(@DIROOT@(0))
+10 IF $PIECE(DINODE,U,2)["A"
SET DICODES=DICODES_"A"
+11 IF $PIECE(DINODE,U,2)["O"
SET DICODES=DICODES_"O"
+12 QUIT DICODES
+13 ;
CLOSE IF $GET(DIMSGA)'=""
DO CALLOUT^DIEFU($GET(DIMSGA))
QUIT
+1 ;
ERR(DIERN,DIFILE,DIIENS,DIFIELD,DI1,DI2,DI3) ;
+1 ;log an error
+2 NEW DIPE
+3 NEW DI
FOR DI="FILE","IENS","FIELD",1:1:3
SET DIPE(DI)=$GET(@("DI"_DI))
+4 DO BLD^DIALOG(DIERN,.DIPE,.DIPE)
+5 QUIT