DIEF ;SFISC/DPC-FILER DRIVER ;11/9/94 13:10
;;21.0;VA FileMan;;Dec 28, 1994
;Per VHA Directive 10-93-142, this routine should not be modified.
FILE(DIEFFLAG,DIEFAR,DIEFOUT,DIEFADAR) ;
FILEX ;
N DIEFF,DIEFCNOD,DIEFNODE,DIEFSPOT,DIEFDAS,DIEFIEN,DIEFRFLD,DIEFFLD,DIEFFVAL,DIEFOVAL,DIEFNVAL,DIEFTSRC,DIEFLOCK,DIEFECNT
S DIEFFLAG=$G(DIEFFLAG)
I '$D(DIQUIET) N DIQUIET S DIQUIET=1
I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
I '$$VERFLG^DIEFU(DIEFFLAG,"ISKEO") G OUT
I '$$VROOT^DIEFU(DIEFAR) G OUT
I '($D(@DIEFAR)\10) D BLD^DIALOG(305,DIEFAR,DIEFAR) G OUT
I DIEFFLAG["K" N DIEFNOLK,DIEFLCKS D LOCK I DIEFNOLK D:$D(DIEFLOCK) UNLOCK G OUT
D DRIVER
I $D(DIEFLOCK) D UNLOCK
I DIEFFLAG'["S",'$G(DIERR) K @DIEFAR
OUT I $G(DIEFOUT)]"" D CALLOUT^DIEFU(DIEFOUT)
Q
LOCK ;
S (DIEFNOLK,DIEFLCKS)=0,DIEFF=""
F S DIEFF=$O(@DIEFAR@(DIEFF)) Q:DIEFF="" D Q:DIEFNOLK
. I '$$VFILE^DIEFU(DIEFF,"D") S DIEFNOLK=1 Q
. S DIEFDAS=""
. F S DIEFDAS=$O(@DIEFAR@(DIEFF,DIEFDAS)) Q:DIEFDAS="" D Q:DIEFNOLK
. . I '$$GOODIEN(DIEFDAS) S DIEFNOLK=1 Q
. . N DIEFDA D DA^DIEFU(DIEFDAS,.DIEFDA)
. . S DIEFLCKS=DIEFLCKS+1
. . S DIEFLOCK(DIEFLCKS)=$$ROOT^DIQGU(DIEFF,.DIEFDA)_DIEFDA_")"
. . L +@DIEFLOCK(DIEFLCKS):1 E D
. . . S DIEFNOLK=1
. . . N E S E("FILE")=DIEFF,E("IENS")=DIEFDAS D BLD^DIALOG(110,"",.E)
Q
UNLOCK ;
N I
F I=1:1:DIEFLCKS L -@DIEFLOCK(I)
Q
DRIVER ;
S DIEFF=""
F S DIEFF=$O(@DIEFAR@(DIEFF)) Q:DIEFF="" D
. I DIEFFLAG'["K",'$$VFILE^DIEFU(DIEFF,"D") Q
. S DIEFDAS=""
. F S DIEFDAS=$O(@DIEFAR@(DIEFF,DIEFDAS)) Q:DIEFDAS="" D
. . S DIEFIEN=DIEFDAS
. . I ($E(DIEFIEN)="?"!($E(DIEFIEN)="+")),$G(DIEFADAR)]"" S DIEFIEN=$$ADDCONV^DIEF1(DIEFIEN,DIEFADAR)
. . I '$$GOODIEN(DIEFIEN) Q
. . N DA,I,DEPTH,D
. . S DEPTH=$L(DIEFIEN,",")-1
. . F I=1:1:DEPTH S D="D"_(DEPTH-I) N @D S (DA(I-1),@D)=$P(DIEFIEN,",",I)
. . S DA=DA(0) K DA(0)
. . I '$$VENTRY^DIEFU(DIEFF,DIEFIEN,"D") Q
. . N DOREPL S DIEFRFLD="",DOREPL=0
. . F S DIEFRFLD=$O(@DIEFAR@(DIEFF,DIEFDAS,DIEFRFLD)) Q:DIEFRFLD="" D
. . . N DIEFNG
. . . S DIEFFLD=$$CHKFLD^DIEFU(DIEFF,DIEFRFLD) I 'DIEFFLD Q
. . . I DIEFFLD=.001 D BLD^DIALOG(520,".001",".001") Q
. . . S DIEFNVAL=@DIEFAR@(DIEFF,DIEFDAS,DIEFRFLD)
. . . I DIEFFLAG["E" D VAL Q:$D(DIEFNG)
. . . I DIEFFLD=.01,"@"[DIEFNVAL D PT01DEL Q
. . . S DIEFSPOT=" " D GLRF^DIOU(DIEFF,DIEFFLD,.DIEFNODE,.DIEFSPOT)
. . . I DIEFNODE'=$G(DIEFCNOD) D:DOREPL REPLACE S DIEFCNOD=DIEFNODE D RETRIEVE
. . . I DIEFNVAL="@" S DIEFNVAL=""
. . . D PUTDATA^DIEF1 Q:$D(DIEFNG)
. . . I DIEFNVAL'=$G(DIEFOVAL) D XRFAUD
. . D REPLACE:DOREPL K DIEFCNOD
Q
PT01DEL ;
I '$D(^DD(DIEFF,0,"UP")) D Q
. N INT,EXT
. S INT(1)=$$FLDNM^DIEFU(DIEFF,DIEFFLD),INT(2)=$$FILENM^DIEFU(DIEFF),EXT("FILE")=DIEFF,EXT("FIELD")=DIEFFLD
. D BLD^DIALOG(712,.INT,.EXT)
S DIEFECNT=$G(DIERR)
N DIK S DIK=$$ROOT^DIQGU(DIEFF,.DA) D ^DIK
I DIEFECNT'=$G(DIERR) D HKERR^DILIBF(DIEFF,DIEFIEN,DIEFFLD,"cross reference")
Q
VAL ;
N DIEFTYPE,DIEFINT
D DTYP^DIOU(DIEFF,DIEFFLD,.DIEFTYPE) Q:DIEFTYPE=5
D VAL^DIEV(DIEFF,DIEFIEN,DIEFFLD,"",DIEFNVAL,.DIEFINT)
I DIEFINT'=U S DIEFNVAL=DIEFINT Q
S DIEFNG=1
Q
REPLACE ;
S @DIEFCNOD=DIEFFVAL,DOREPL=0
Q
RETRIEVE ;
S DIEFFVAL=$G(@DIEFCNOD)
Q
;
XRFAUD ;
I $D(^DD(DIEFF,"IX",DIEFFLD)) D REPLACE:$G(DOREPL),IX,RETRIEVE:$D(DOREPL)
I $D(^DD(DIEFF,"AUDIT",DIEFFLD)) D AUDIT
Q
IX ;
N X,DIEFSORK
I DIEFOVAL'="" S DIEFSORK=2 D FIRE
I "@"'[DIEFNVAL S DIEFSORK=1 D FIRE
Q
FIRE ;
N DIEFI S DIEFI=0
F S DIEFI=$O(^DD(DIEFF,DIEFFLD,1,DIEFI)) Q:DIEFI="" D
. N I,Y,DIG,DIH,DIU,DIV,XMB,XMY
. S X=$S(DIEFSORK=1:DIEFNVAL,1:DIEFOVAL)
. N DIEFECNT S DIEFECNT=$G(DIERR)
. X ^(DIEFI,DIEFSORK) ;Naked indicator set in For loop, FIRE+2
. I DIEFECNT'=$G(DIERR) D HKERR^DILIBF(DIEFF,DIEFIEN,DIEFFLD,"cross reference")
Q
AUDIT ;
N X,DP,DG,DIIX N DIANUM,C,Y
S DP=DIEFF,DG=1
I DIEFOVAL]"" S X=DIEFOVAL,DIIX="2^"_DIEFFLD D AUDIT^DIET
I "@"'[DIEFNVAL,(DIEFOVAL]""!(^DD(DIEFF,DIEFFLD,"AUDIT")'="e")) S X=DIEFNVAL,DIIX="3^"_DIEFFLD D AUDIT^DIET
Q
;
GOODIEN(DIEFIEN) ;
I '+DIEFIEN!($E(DIEFIEN,$L(DIEFIEN))'=",") D Q 0
. D BLD^DIALOG(203,"IENS","IENS")
Q 1
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>