Annotation of freem_fileman/DICF2.m, revision 1.1.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>