Annotation of freem_fileman/DICA2.m, revision 1.1

1.1     ! snw         1: DICA2  ;SEA/TOAD-VA FileMan: Updater, Pre-Processor Part 2 ;11/15/94  16:20 ;
        !             2:        ;;21.0;VA FileMan;;Dec 28, 1994
        !             3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
        !             4:        
        !             5: IEN(DIFILE,DIEN,DIDA,DIRULE,DIOK)      
        !             6:        ; ENTRY POINT--return whether the IEN String is valid
        !             7:        ; proc, DIEN passed by value
        !             8:        I $G(DIFILE("C"))'=DIFILE D PARENTS^DIDU1(.DIFILE,DIRULE)
        !             9:        I $E(DIEN,$L(DIEN))'="," D ERR^DICA3(304,"",DIEN) Q
        !            10:        I DIFILE("L")+1'=$L(DIEN,",") D ERR^DICA3(205,"",DIEN,"",DIFILE) Q
        !            11:        I $E(DIEN)=","!(DIEN[",,") D ERR^DICA3(307,"",DIEN) Q
        !            12:        K @DIRULE@("TEMP")
        !            13: PIECES 
        !            14:        K DIDA N DICRSR,DIOUT S DIOUT=0 F DICRSR=1:1 D  Q:DIOUT!$G(DIERR)
        !            15:        . N DIPIECE S DIPIECE=$P(DIEN,",",DICRSR)
        !            16:        . N DIRIGHT S DIRIGHT=$P(DIEN,",",DICRSR+1,99999)
        !            17:        . I DIPIECE="" S DIOUT=1,DIOK=1 Q
        !            18:        . D PIECE(.DIFILE,DIFDA,DIRULE,DICRSR,DIPIECE,.DIDA,DIRIGHT,.DIOK)
        !            19:        . I $G(DIERR) S DIOK=0 Q
        !            20:        . I 'DIOK D ERR^DICA3($S(DIOK=0:308,1:310),"",DIEN) Q
        !            21:        . Q
        !            22:        I $G(DIERR) Q
        !            23: ALLGOOD        
        !            24:        M @DIRULE@("SEQ")=@DIRULE@("TEMP")
        !            25:        N DIN S DIN="S DIFILE="_DIFILE_",DIENTRY="""_DIEN_""""
        !            26:        S @DIRULE@("ORDER",@DIRULE@("OP"),DIFILE("L"),DIFILE,@DIRULE@("NUM"))=DIN
        !            27:        Q
        !            28:        
        !            29: PIECE(DIFILE,DIFDA,DIRULE,DICRSR,DIPIECE,DIDA,DIRIGHT,DIOK)    
        !            30:        ; IEN--return whether a piece of the IEN String is valid
        !            31:        ; proc, DIF, DIOK, & DIRULE passed by ref
        !            32:        N DICHECK,DIF,DIPREFIX,DIR,DISEQ
        !            33:        S DIF=DIFILE(DICRSR)
        !            34:        I DIPIECE'["+",DIRIGHT["+" S DIOK=0 Q
        !            35: FILING I +DIPIECE=DIPIECE,$E(DIPIECE)'="+" D  Q
        !            36:        . S DIOK=DIPIECE>0 I 'DIOK Q
        !            37:        . S DIOK=DIRIGHT'["+"&(DIRIGHT'["?") I 'DIOK Q
        !            38:        . S DIR=$G(@DIRULE@("ROOT",DIF,","_DIRIGHT))
        !            39:        . I DIR="" D
        !            40:        . . S DIR=$$ROOT^DIQGU(DIF,","_DIRIGHT,1,1)
        !            41:        . . S @DIRULE@("ROOT",DIF,","_DIRIGHT)=DIR
        !            42:        . S DIOK=$P($G(@DIR@(DIPIECE,0)),U)'=""
        !            43:        . I 'DIOK D ERR^DICA3(601,DIFILE,DIPIECE_","_DIRIGHT) Q
        !            44:        . I DICRSR=1 S DIDA=DIPIECE
        !            45:        . E  S DIDA(DICRSR-1)=DIPIECE
        !            46:        . I DICRSR'=1 Q
        !            47:        . S @DIRULE@("OP")=4
        !            48:        . S @DIRULE@("NUM")=DIPIECE
        !            49: PREFIX S DIPREFIX=$E(DIPIECE,1,2) I DIPREFIX'="?+" S DIPREFIX=$E(DIPREFIX)
        !            50:        I DIPREFIX'="+",DIPREFIX'="?",DIPREFIX'="?+" S DIOK=0 Q
        !            51:        
        !            52: GOODPC I $P(DIPIECE,DIPREFIX,2,9999)?1N.N S DIOK=1 D  Q
        !            53:        . S DISEQ=$P(DIPIECE,DIPREFIX,2,999)
        !            54:        . I +DISEQ'=DISEQ S DIOK=0 Q
        !            55: FIRSTPC        . I DICRSR=1 D
        !            56:        . . S @DIRULE@("OP")=$S(DIPREFIX="?":1,DIPREFIX="+":2,1:3)
        !            57:        . . S @DIRULE@("NUM")=DISEQ
        !            58: WHEREPC        . S DICHECK=""
        !            59:        . I $D(@DIRULE@("SEQ",DISEQ)) S DICHECK=$NA(@DIRULE@("SEQ"))
        !            60:        . E  I $D(@DIRULE@("TEMP",DISEQ)) S DICHECK=$NA(@DIRULE@("TEMP"))
        !            61: ILLEGAL        . I DICHECK'="" D  I 'DIOK Q
        !            62:        . . I $O(@DICHECK@(DISEQ,""))'=DIPREFIX S DIOK="C" Q
        !            63:        . . I $O(@DICHECK@(DISEQ,DIPREFIX,""))'=DIF S DIOK="C" Q
        !            64:        . . I $G(@DICHECK@(DISEQ,DIPREFIX,DIF))'=DIRIGHT S DIOK="C" Q
        !            65:        . I DICHECK="",'$D(@DIFDA@(DIF,DIPIECE_","_DIRIGHT)) S DIOK="C" Q
        !            66: LEARN  . S @DIRULE@("TEMP",DISEQ,DIPREFIX,DIF)=DIRIGHT
        !            67:        . I DICRSR=1 S DIDA=DIPREFIX
        !            68:        . E  S DIDA(DICRSR-1)=DIPREFIX
        !            69:        
        !            70: BADPIEC        S DIOK=0 Q

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