Annotation of freem_fileman/USER/DICA1.m, revision 1.1
1.1 ! snw 1: DICA1 ;SEA/TOAD-VA FileMan: Updater, Pre-Processor ;11/15/94 16:37 ;
! 2: ;;21.0;VA FileMan;;Dec 28, 1994
! 3: ;Per VHA Directive 10-93-142, this routine should not be modified.
! 4:
! 5: CHECK(DIFLAGS,DIFDA,DINUMS,DIRULE,DIOK)
! 6: ; ENTRY POINT--check out the FDA
! 7: ; subroutine, DIFLAGS passed by value
! 8: N DIC,DIEN,DIFILE,DIFLD,DIN,DINODE,DINT,DINUM,DIOP
! 9: N DIOUT1,DIOUT2,DIOUT3,DIRID,DIRIGHT,DISEQ,DITYPE,DIVAL
! 10: FILES
! 11: S DIFILE=0,DIOUT1=0 F D Q:DIOUT1!$G(DIERR)
! 12: . S DIFILE=$O(@DIFDA@(DIFILE))
! 13: . I 'DIFILE S DIOUT1=1 Q
! 14: . S DINODE=$G(^DD(DIFILE,.01,0))
! 15: . I DINODE="" D Q
! 16: . . D ERR^DICA3($S('$D(^DD(DIFILE)):401,1:406),DIFILE)
! 17: . I $P(DINODE,U,2)["W" D Q
! 18: . . D ERR^DICA3(407,DIFILE)
! 19: . S DIRID=$$RID^DICU(DIFILE)
! 20: IENS .
! 21: . S DIEN="",DIOUT2=0 F D Q:DIOUT2!$G(DIERR)
! 22: . . S DIEN=$O(@DIFDA@(DIFILE,DIEN))
! 23: . . I DIEN="" S DIOUT2=1 Q
! 24: . . N DIDA D IEN^DICA2(.DIFILE,DIEN,.DIDA,DIRULE,.DIOK) Q:$G(DIERR)
! 25: . . I 'DIOK S DIOUT1=1,DIOUT2=1 D Q
! 26: . . . I $E(DIEN,$L(DIEN))'="," D ERR^DICA3(304,"",DIEN) Q
! 27: . . . D ERR^DICA3(202,"","","","IENS")
! 28: . . S DIOK=$$RID(DIFILE,DIEN,DIFDA,DIRID)
! 29: . . I 'DIOK D Q
! 30: . . . I $P(DIEN,U)["+" D ERR^DICA3(311,"",DIEN) Q
! 31: . . . I $E(DIEN)="?",$P(DIOK,U,2)=".01" D ERR^DICA3(351,DIFILE,DIEN) Q
! 32: . . . D ERR712(DIFILE,$P(DIOK,U,2)) Q
! 33: . . I $D(@DIFDA@(DIFILE,DIEN,.001))#2 D
! 34: . . . N DIENS S DIENS=@DIFDA@(DIFILE,DIEN,.001)
! 35: . . . I $D(@DINUMS@(@DIRULE@("NUM")))[0 D
! 36: . . . . S @DINUMS@(@DIRULE@("NUM"))=DIENS
! 37: . . . S ^TMP("DIADD",$J,DIFILE,DIEN,.001)=DIENS
! 38: . . . K @DIFDA@(DIFILE,DIEN,.001)
! 39: VALUES . .
! 40: . . I DIFLAGS'["E" Q
! 41: . . S DIFLD="",DIOUT3=0 F D Q:DIOUT3!$G(DIERR)
! 42: . . . S DIFLD=$O(@DIFDA@(DIFILE,DIEN,DIFLD))
! 43: . . . I DIFLD="" S DIOUT3=1 Q
! 44: . . . I DIFLD=.01,$E(DIEN)="?",$E(DIEN,2)'="+" Q
! 45: . . . S DIVAL=$G(@DIFDA@(DIFILE,DIEN,DIFLD))
! 46: . . . D DTYP^DIOU(DIFILE,DIFLD,.DITYPE)
! 47: . . . I DITYPE=5 S DINT=DIVAL
! 48: CONVERT . . .
! 49: . . . I DITYPE'=5 D Q:$G(DIERR)
! 50: . . . . I DIEN["?"!(DIEN["+") D Q:$G(DIERR)
! 51: . . . . . I "@"[DIVAL D Q
! 52: . . . . . . I $P($G(^DD(DIFILE,DIFLD,0)),U,2)["R" D Q
! 53: . . . . . . . D ERR712(DIFILE,DIFLD)
! 54: . . . . . . S DINT=DIVAL
! 55: . . . . . N DA M DA=DIDA
! 56: . . . . . N DIARG S DIARG="D0"
! 57: . . . . . N DIMAX S DIMAX=$O(DA(""),-1)
! 58: . . . . . N DIVAR F DIVAR=1:1:DIMAX S DIARG=DIARG_",D"_DIVAR
! 59: . . . . . N @DIARG F DIVAR=0:1:DIMAX-1 S @("D"_DIVAR)=DA(DIMAX-DIVAR)
! 60: . . . . . S @("D"_DIMAX)=DA
! 61: . . . . . D CHK^DIE(DIFILE,DIFLD,"",DIVAL,.DINT)
! 62: . . . . E D Q:$G(DIERR)
! 63: . . . . . D VAL^DIE(DIFILE,DIEN,DIFLD,"R",DIVAL,.DINT)
! 64: . . . . Q:$D(DINUM)[0
! 65: . . . . S @DINUMS@(@DIRULE@("NUM"))=DINUM K DINUM
! 66: . . . S @DIRULE@("FDA",DIFILE,DIEN,DIFLD)=DINT
! 67: CLEANUP
! 68: I $G(DIERR)!'DIOK K @DIRULE Q
! 69: K @DIRULE@("L"),@DIRULE@("NUM"),@DIRULE@("OP"),@DIRULE@("ROOT")
! 70: K @DIRULE@("SEQ"),@DIRULE@("TEMP"),@DIRULE@("UP")
! 71: S DIN=$NA(@DIRULE@("ORDER")),DIC=0
! 72: F S DIN=$Q(@DIN) Q:DIN=""!($P(DIN,",",3)'="""ORDER""") D
! 73: . S DIC=DIC+1,@DIRULE@("NEXT",DIC)=@DIN
! 74: K @DIRULE@("ORDER")
! 75: I DIFLAGS["E" S DIFDA=$NA(@DIRULE@("FDA"))
! 76: Q
! 77:
! 78: RID(DIFILE,DIEN,DIFDA,DIOK)
! 79: ; CHECK--return whether FDA entry sets all required identifiers
! 80: ; func, all passed by value
! 81: N DIP S DIP=$P(DIEN,",")
! 82: I $E(DIP)="?","@"[$G(@DIFDA@(DIFILE,DIEN,.01)) Q "0^.01"
! 83: N DIOK S DIOK=1
! 84: N DIC,DIR F DIC=1:1 S DIR=$P(DIRID,U,DIC) Q:DIR="" D I 'DIOK Q
! 85: . I DIP'["+",$D(@DIFDA@(DIFILE,DIEN,DIR))[0 Q
! 86: . S DIOK="@"'[$G(@DIFDA@(DIFILE,DIEN,DIR)) I 'DIOK S DIOK=DIOK_U_DIR
! 87: Q DIOK
! 88:
! 89: ERR712(DIFILE,DIFIELD)
! 90: N DIFILNAM S DIFILNAM=$$GET1^DID(DIFILE,"","","NAME")
! 91: N DIFLDNAM S DIFLDNAM=$$GET1^DID(DIFILE,DIFIELD,"","LABEL")
! 92: D ERR^DICA3(712,DIFILE,"",DIFIELD,DIFLDNAM,DIFILNAM)
! 93: Q
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>