Annotation of freem_fileman/DICF2.m, revision 1.1

1.1     ! snw         1: DICF2  ;SEA/TOAD-VA FileMan: Finder, Part 3 (All Indexes) ;11/17/94  11:25 ;
        !             2:        ;;21.0;VA FileMan;;Dec 28, 1994
        !             3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
        !             4:        
        !             5: CHKALL(DIFILE,DIEN,DIFLAGS,DIROOT,DIVALUE,DICOUNT,DISCREEN,DIFORCE,DIDENT,DILIST)      
        !             6:        ; FIND--central selection engine, check all indexes for matches
        !             7:        ; subroutine, DIFILE, DIFLAGS, & DIROOT passed by value
        !             8:        N DIFNODE,DIFPIECE,DINDEX
        !             9:        I DIFORCE S DINDEX=$P(DIFORCE(0),U),DIFNODE=0,DIFPIECE=1
        !            10:        E  S DINDEX="B"
        !            11:        N DIOUT S DIOUT=0
        !            12:        I DIFLAGS["O" S DIFLAGS=DIFLAGS_"X"
        !            13:        N DIALREDY,DISKIP
        !            14: 41     F  D  Q:DIFLAGS["q"!$G(DIERR)  I DIOUT D DECIDE(.DIFLAGS,.DINDEX,.DIFORCE,DICOUNT,.DIOUT,.DILIST) Q:DIOUT
        !            15:        . S DIALREDY=0,DISKIP=0
        !            16:        . D PREPIX(DIFILE,DIFLAGS,.DINDEX,.DIALREDY,.DISKIP,.DILIST)
        !            17:        . I 'DIALREDY D
        !            18:        . . I 'DISKIP D CHKONE^DICF3(DIFILE,.DIEN,.DIFLAGS,.DIROOT,DIVALUE,.DINDEX,.DICOUNT,.DISCREEN,.DIDENT,.DILIST)
        !            19:        . . I DIFLAGS["q" S DIOUT=1 Q
        !            20:        . . D CLEANIX(.DINDEX,.DILIST)
        !            21: 43     . . I DIFLAGS'["M" S DIOUT=1 Q
        !            22:        . D NXTINDX(.DIROOT,.DINDEX,.DIFORCE,.DIFNODE,.DIFPIECE)
        !            23:        . I DINDEX="" S DIOUT=1
        !            24:        Q
        !            25:        
        !            26: PREPIX(DIFILE,DIFLAGS,DINDEX,DIALREDY,DISKIP,DILIST)   
        !            27:        ; CHKALL--lookup index type, add transform values to LVA
        !            28:        ; proc, DINDEX passed by ref
        !            29:        K DINDEX(0,"GET")
        !            30:        S DINDEX(0,"COUNT")=0
        !            31:        S DINDEX(0,"TYPE")="F"
        !            32:        N DIXFILE S DIXFILE=$O(^DD(DIFILE,0,"IX",DINDEX,0))
        !            33:        I DIXFILE="" Q
        !            34:        S DINDEX(0,"FILE")=DIXFILE
        !            35:        N DIXFIELD S DIXFIELD=$O(^DD(DIFILE,0,"IX",DINDEX,DIXFILE,0))
        !            36: 50     I DIXFIELD="" Q
        !            37:        S DINDEX(0,"FIELD")=DIXFIELD
        !            38:        N DIVAL S DIVAL=@DILIST("LVA")@("V")
        !            39:        S DIALREDY=0
        !            40:        I DIALREDY,DIFLAGS["X"!$P(DIALREDY,U,2) Q
        !            41:        S DIALREDY=0
        !            42:        S DINDEX(0,"DEF")=$G(^DD(DIXFILE,DIXFIELD,0))
        !            43: 51     I DINDEX(0,"DEF")="" Q
        !            44:        I DIFLAGS["g" D
        !            45:        . S DINDEX(0,"GET")=$$FIELD^DICU1(DIXFILE,DIXFIELD,.DINDEX)
        !            46:        N DISOUNDX S DISOUNDX=DIFLAGS'["Q" I DISOUNDX D
        !            47:        . S DISOUNDX=$G(^DD(DIXFILE,0,"LOOK"))="SOUNDEX" Q:'DISOUNDX
        !            48:        . S DISOUNDX=$$ISSNDX^DICF4(DIXFILE,DIXFIELD,DINDEX) Q:'DISOUNDX
        !            49:        N DIXFLAG S DIXFLAG=$P(DINDEX(0,"DEF"),U,2)
        !            50:        I $S(DIFLAGS["Q":1,DISOUNDX:0,DIXFLAG["F":1,1:DIXFLAG["N") Q
        !            51:        S DINDEX(0,"FIRST")=10
        !            52:        S DINDEX(0,"LAST")=9
        !            53:        S DINDEX(0,"TYPE")=DIXFLAG
        !            54: 52     I DISOUNDX D  Q
        !            55:        . D ADDVAL($$SOUNDEX^DICF4(@DILIST("LVA")@("V")),.DINDEX,.DILIST)
        !            56:        I DIXFLAG["D" D PREPD(.DINDEX,.DILIST) Q
        !            57:        I DIXFLAG["S" D PREPS^DICF6(DIFLAGS,.DINDEX,.DILIST) Q
        !            58:        I DIXFLAG["P" D PREPP^DICF5(DIFLAGS,.DINDEX,"P",.DISKIP,.DILIST) Q
        !            59:        I DIXFLAG["V" D PREPP^DICF5(DIFLAGS,.DINDEX,"VP",.DISKIP,.DILIST) Q
        !            60:        Q
        !            61:        
        !            62: PREPD(DINDEX,DILIST)   
        !            63:        ; PREPIX--transform value for indexed date field
        !            64:        ; proc, DINDEX passed by ref
        !            65:        N DIFLAGS S DIFLAGS=$P($P(DINDEX(0,"DEF"),"%DT=""",2),"""")
        !            66:        N DIDATEFM
        !            67:        D DT^DILF($TR(DIFLAGS,"ER")_"Ne",@DILIST("LVA")@("V"),.DIDATEFM)
        !            68:        I DIDATEFM'>1 Q
        !            69:        D ADDVAL(DIDATEFM,.DINDEX,.DILIST)
        !            70:        Q
        !            71:        
        !            72: ADDVAL(DINEWVAL,DINDEX,DILIST) 
        !            73:        ; PREP*--add a new lookup value to the LVA
        !            74:        ; proc, DINDEX passed by ref
        !            75:        S DINDEX(0,"COUNT")=DINDEX(0,"COUNT")+1
        !            76:        S DINDEX(0,"LAST")=DINDEX(0,"LAST")+1
        !            77:        S @DILIST("LVA")@("V",DINDEX(0,"LAST"))=DINEWVAL
        !            78:        S @DILIST("LVA")@("V",DINDEX(0,"LAST"),1)=1
        !            79:        S @DILIST("LVA")@("S",DINDEX(0,"LAST"))=@DILIST("LVA")@("S")
        !            80:        Q
        !            81:        
        !            82: CLEANIX(DINDEX,DILIST) 
        !            83:        ; CHKALL--clear DINDEX & LVA of index data
        !            84:        ; proc, DINDEX passed by ref
        !            85:        I DINDEX(0,"TYPE")["P"!(DINDEX(0,"TYPE")["V") D
        !            86:        . K @DILIST("LVA")
        !            87:        . S DILIST("LVA")=DILIST("SAVE")
        !            88:        . K DILIST("SAVE")
        !            89:        I 'DINDEX(0,"COUNT") K DINDEX(0) Q
        !            90:        N DIKILL F DIKILL=DINDEX(0,"FIRST"):1:DINDEX(0,"LAST") D
        !            91:        . K @DILIST("LVA")@("V",DIKILL),@DILIST("LVA")@("S",DIKILL)
        !            92:        K DINDEX(0)
        !            93:        Q
        !            94:        
        !            95: NXTINDX(DIROOT,DINDEX,DIFORCE,DIFNODE,DIFPIECE)        
        !            96:        ; CHKALL--return next index to try
        !            97:        ; subroutine, DIROOT passed by value
        !            98:        I 'DIFORCE S DINDEX=$O(@DIROOT@(DINDEX)) Q
        !            99:        S DIFPIECE=DIFPIECE+1
        !           100:        S DINDEX=$P(DIFORCE(DIFNODE),U,DIFPIECE)
        !           101:        Q
        !           102:        
        !           103: DECIDE(DIFLAGS,DINDEX,DIFORCE,DICOUNT,DIOUT,DILIST)    
        !           104:        ; CHKALL--if O needs to repeat: reset flags, starting index, & exit flag
        !           105:        ; subroutine, DICOUNT passed by value
        !           106:        I DIFLAGS'["O" Q
        !           107:        I DICOUNT Q
        !           108:        S DIFLAGS=$TR(DIFLAGS,"OX")
        !           109:        N DINODE,DISCRPRT
        !           110:        S DINODE=0 F  S DINODE=$O(@DILIST("LVA")@("V",DINODE)) Q:DINODE=""  D
        !           111:        . S DISCRPRT=$G(@DILIST("LVA")@("S",DINODE,2))
        !           112:        . I DISCRPRT="" Q
        !           113: D1     . S @DILIST("LVA")@("S",DINODE)=DISCRPRT
        !           114:        I 'DIFORCE S DINDEX="B"
        !           115:        E  S DINDEX=$P(DIFORCE(0),U)
        !           116:        S DIOUT=0
        !           117:        Q

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