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>