Annotation of freem_fileman/DICA.m, revision 1.1

1.1     ! snw         1: DICA   ;SEA/TOAD-VA FileMan, Updater, Engine ;12/1/94  08:52 ;
        !             2:        ;;21.0;VA FileMan;;Dec 28, 1994
        !             3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
        !             4:        
        !             5: ADD(DIFLAGS,DIFDA,DIEN,DIMSGA) 
        !             6:        
        !             7: ADDX   ; Branch in from UPDATE^DIE
        !             8:        ; ENTRY POINT--add a new entry to a file
        !             9:        ; subroutine, DIEN passed by reference
        !            10:        I '$D(DIQUIET) N DIQUIET S DIQUIET=1
        !            11:        I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
        !            12:        K ^TMP("DIADD",$J)
        !            13: INPUT  
        !            14:        ; initialize input parameters & check
        !            15:        N DIRULE S DIRULE="^TMP(""DICA"",$J)"
        !            16:        N DIFDAO
        !            17:        I $G(DIMSGA)'="" D
        !            18:        . K @DIMSGA@("DIERR"),@DIMSGA@("DIHELP"),@DIMSGA@("DIMSG")
        !            19:        S DIFLAGS=$G(DIFLAGS)
        !            20:        I $TR(DIFLAGS,"ESY")'="" D  Q
        !            21:        . D ERR^DICA3(301,"","","",DIFLAGS),CLOSE
        !            22:        S DIFDA=$G(DIFDA) I $D(@DIFDA)<10 D  Q
        !            23:        . D ERR^DICA3(202,"","","","FDA"),CLOSE
        !            24:        S DIFDAO=DIFDA
        !            25:        S DIEN=$G(DIEN) I DIEN="" S DIEN="DIDUMMY" N DIDUMMY
        !            26: PRE    
        !            27:        N DIOK S DIOK=1 D CHECK^DICA1(DIFLAGS,.DIFDA,DIEN,DIRULE,.DIOK)
        !            28:        I $G(DIERR) D CLOSE Q
        !            29:        I 'DIOK D ERR^DICA3(202,"","","","FDA"),CLOSE Q
        !            30: SEQ    
        !            31:        N DIENTRY,DIFILE,DIOUT1,DINEXT
        !            32:        S (DIOUT1,DINEXT)="" F  D  Q:DIOUT1
        !            33:        . S DINEXT=$O(@DIRULE@("NEXT",DINEXT)) I DINEXT="" S DIOUT1=1 Q
        !            34:        . X @DIRULE@("NEXT",DINEXT)
        !            35: FILES  . 
        !            36:        . I $P($G(^DD($$FNO^DILIBF(DIFILE),0,"DI")),U,2)["Y" D  Q
        !            37:        . . S DIOUT1=DIFLAGS'["Y"&'$D(DIOVRD)
        !            38:        . . I DIOUT1 D ERR^DICA3(405,DIFILE,"","",DIFILE)
        !            39: ENTRIES        . 
        !            40:        . N DIDA,DIENP,DIOP,DIROOT,DISEQ
        !            41:        . S DIDA=$P(DIENTRY,",") I +DIDA=DIDA Q
        !            42:        . S DIENP=$$IEN(DIENTRY,"",DIRULE)
        !            43:        . S DIOP=$E(DIDA,1,2) I DIOP'="?+" S DIOP=$E(DIOP)
        !            44:        . S DISEQ=$P(DIDA,DIOP,2)
        !            45: FINDING        .
        !            46:        . I DIOP["?" S DIOUT2=0 D  I DIOUT2 Q
        !            47:        . . N DIFIND,DIFORMAT,DIGET,DIVALUE
        !            48:        . . S DIFORMAT=$S(DIFLAGS["E":"",1:"Q")
        !            49:        . . S DIGET=DIFDA
        !            50:        . . I DIFLAGS["E",DIOP="?" S DIGET=DIFDAO
        !            51:        . . S DIVALUE=$G(@DIGET@(DIFILE,DIENTRY,.01))
        !            52:        . . S DIFIND=$$FIND1^DIC(DIFILE,DIENP,DIFORMAT,DIVALUE)
        !            53:        . . I $D(DIERR) S DIOUT1=1,DIOUT2=1 Q
        !            54:        . . I DIOP="?+",'DIFIND Q
        !            55:        . . I 'DIFIND S DIOUT1=1,DIOUT2=1 D  Q
        !            56:        . . . D ERR^DICA3(703,DIFILE,DIENTRY,"",DIVALUE)
        !            57:        . . S @DIEN@(DISEQ)=DIFIND
        !            58:        . . S @DIRULE@("IEN",DISEQ)=DIFIND
        !            59:        . . D SAVE S DIOUT2=1
        !            60: ADDING . 
        !            61:        . N DIENEW,DIKEY
        !            62:        . I $L(DIENP,",")>2 S DIOK=$$VMINUS9^DIEFU(DIFILE,DIENP) I 'DIOK D  Q
        !            63:        . . S DIOUT1=1
        !            64:        . . D ERR^DICA3(602,DIFILE,$P(DIENP,",",$L(DIENP,",")-1))
        !            65:        . S DIROOT=$$ROOT^DIQGU(DIFILE,DIENP)
        !            66:        . D DA^DILF(DIENTRY,.DIENEW)
        !            67: A1     . S DIENEW=$$IEN(DIENTRY,$G(@DIEN@(DISEQ)),DIRULE)
        !            68:        . S DIKEY=$G(@DIFDA@(DIFILE,DIENTRY,.01)) I DIKEY="" D  Q
        !            69:        . . S DIOUT1=1 D ERR^DICA3(202,"","","","FDA")
        !            70:        . S DIOK=$$LAYGO(DIFILE,.DIENEW,DIKEY)
        !            71:        . I 'DIOK S DIOUT1=1 D  Q
        !            72:        . . I '$G(DIERR) D ERR^DICA3(405,DIFILE,"","",DIFILE) Q
        !            73:        . . N DIENS S DIENS="New entry"
        !            74:        . . I $L(DIENEW,",")>2 S DIENS=DIENS_" under record: "_DIENEW
        !            75:        . . N DI1 S DI1="LAYGO Node on the new value '"_DIKEY_"'"
        !            76:        . . D ERR^DICA3(120,DIFILE,DIENS,.01,DI1)
        !            77:        . D CREATE^DICA3(DIFILE,.DIENEW,DIROOT,DIKEY)
        !            78:        . S DIENEW=+DIENEW
        !            79:        . I 'DIENEW S DIOUT1=1 Q
        !            80:        . L -@(DIROOT_"DIENEW)")
        !            81:        . S @DIEN@(DISEQ)=DIENEW
        !            82:        . S @DIRULE@("IEN",DISEQ)=DIENEW
        !            83:        . D SAVE
        !            84:        
        !            85: FILER  ; file the data for the new records
        !            86:        I '$D(DIERR),$D(@DIFDA) D
        !            87:        . D FILE^DIEF($S(DIFLAGS["S":"S",1:""),DIFDA,"",DIEN)
        !            88:        I '$D(DIERR),DIFLAGS'["S" K @DIFDAO
        !            89:        I $D(DIERR)!(DIFLAGS["S"),DIFLAGS'["E" D
        !            90:        . M @DIFDA=^TMP("DIADD",$J) K ^TMP("DIADD",$J)
        !            91:        D CLOSE
        !            92:        Q
        !            93:        
        !            94: LAYGO(DIFILE,DIEN,DIKEY)       
        !            95:        ; ADDING--return if LAYGO permitted
        !            96:        ; function, all by value
        !            97:        N DA,DIOK,DINODE,DIOUTS,X,Y,Y1
        !            98:        S DIOK=1,DINODE="",DIOUTS=0 F  D  I DIOUTS!'DIOK Q
        !            99:        . S DINODE=$O(^DD(DIFILE,.01,"LAYGO",DINODE))
        !           100:        . I DINODE'>0 S DIOUTS=1 Q
        !           101:        . I $D(^DD(DIFILE,.01,"LAYGO",DINODE,0))[0 Q
        !           102:        . S X=DIKEY M DA=DIEN S Y=$P(DA,","),Y1=DA,DA=$P(DA,",")
        !           103:        . I 1 X ^DD(DIFILE,.01,"LAYGO",DINODE,0) S DIOK=$T&'$G(DIERR)
        !           104:        Q DIOK
        !           105:        
        !           106: SAVE   I DIFLAGS'["E" D
        !           107:        . S ^TMP("DIADD",$J,DIFILE,DIENTRY,.01)=@DIFDA@(DIFILE,DIENTRY,.01)
        !           108:        K @DIFDA@(DIFILE,DIENTRY,.01)
        !           109:        Q
        !           110:        
        !           111: IEN(DIENTRY,DIENF,DIRULE)      
        !           112:        ; ADDING/FINDING--return translated IEN String
        !           113:        ; function, DIENTRY passed by value
        !           114:        N DIC,DIENEW,DIOP,DIP,DIPNEW,DISEQ
        !           115:        S DIENEW=""
        !           116:        S DIENF=$G(DIENF)
        !           117:        S DIP="" F DIC=1:1 D  I DIP="" Q
        !           118:        . S DIP=$P(DIENTRY,",",DIC) I DIP="" Q
        !           119:        . D
        !           120:        . . I +DIP=DIP S DIPNEW=DIP Q
        !           121: IEN1   . . I DIC=1 S DIPNEW=DIENF Q
        !           122:        . . S DIOP=$E(DIP,1,2) I DIOP'="?+" S DIOP=$E(DIOP)
        !           123:        . . S DISEQ=$P(DIP,DIOP,2,9999)
        !           124:        . . S DIPNEW=@DIRULE@("IEN",DISEQ)
        !           125:        . S $P(DIENEW,",",DIC)=DIPNEW
        !           126:        I DIENEW'="" S DIENEW=DIENEW_","
        !           127:        Q DIENEW
        !           128:        
        !           129: CLOSE  I $G(DIMSGA)'="" D CALLOUT^DIEFU(DIMSGA)
        !           130:        K @DIRULE
        !           131:        Q

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>