Annotation of freem_fileman/DICF4.m, revision 1.1.1.1
1.1 snw 1: DICF4 ;SEA/TOAD-VA FileMan: Finder, Part 4 (No Index) ;10/14/94 12:29 ;
2: ;;21.0;VA FileMan;;Dec 28, 1994
3: ;Per VHA Directive 10-93-142, this routine should not be modified.
4:
5: UPRIGHT(DIFILE,DIEN,DIFLAGS,DIROOT,DIVALUE,DICOUNT,DISCREEN,DIDENT,DILIST)
6: ; FIND--manual selection engine, check upright file for matches
7: ; proc, DIFILE & DIROOT by value
8: N DINDEX,DIFNODE,DIFPIECE,DIOUT
9: I DIFLAGS["O" S DIFLAGS=DIFLAGS_"X"
10: S DIDA=0,DIOUT=0
11: D PREP(DIFILE,.DIFLAGS,.DIVALUE,.DINDEX,.DISCREEN,.DIOUT)
12: I DIOUT Q
13: 41 F D I DIOUT D DECIDE^DICF2(.DIFLAGS,.DINDEX,DICOUNT,.DIOUT) Q:DIOUT S DIDA=0
14: . S DIDA=$O(@DIROOT@(DIDA))
15: . I 'DIDA S DIOUT=1 Q
16: . S $P(DIEN,",")=DIDA
17: . D CHECK(DIFILE,.DIEN,.DIFLAGS,.DIVALUE,.DIROOT,.DINDEX,.DICOUNT,.DISCREEN,.DIDENT,.DILIST)
18: . S $P(DIEN,",")=""
19: . I DIFLAGS["q" S DIOUT=1 Q
20: Q
21:
22: PREP(DIFILE,DIFLAGS,DIVALUE,DINDEX,DISCREEN,DIOUT)
23: ; UPRIGHT--lookup .01 type, add transform values to DIVALUE
24: ; proc, DIFILE & DIFLAGS by value
25: N DIFFLAG
26: S DINDEX(0,"COUNT")=0
27: S DINDEX(0,"DEF")=$G(^DD(DIFILE,.01,0))
28: 51 I DINDEX(0,"DEF")="" S DIOUT=1 Q
29: S DIFFLAG=$P(DINDEX(0,"DEF"),U,2)
30: I DIFFLAG["P"!(DIFFLAG["V") S DIFLAGS=DIFLAGS_"p"
31: S DINDEX(0,"TRANSFORM")=DIFFLAG'["F"&(DIFFLAG'["N")
32: I 'DINDEX(0,"TRANSFORM") Q
33: S DINDEX(0,"FIRST")=10
34: S DINDEX(0,"LAST")=9
35: 52 I DIFFLAG["D" D PREPD^DICF2(.DIVALUE,.DINDEX,.DISCREEN) Q
36: I DIFFLAG["S" D PREPS^DICF6(DIFLAGS,.DIVALUE,.DINDEX,.DISCREEN) Q
37: Q
38:
39: CHECK(DIFILE,DIEN,DIFLAGS,DIVALUE,DIROOT,DINDEX,DICOUNT,DISCREEN,DIDENT,DILIST)
40: ; UPRIGHT--check one record for possible matches
41: ; proc, DIFILE, DIFLAGS, & DIROOT by value
42: N DIKEY,DITRY,DIXFORM
43: S DIKEY=$P($G(@DIROOT@(+DIEN,0)),U)
44: I DIKEY="" Q
45: S DIXFORM=0
46: F D I DIXFORM="" Q
47: . S DIXFORM=$O(@DILIST("LVA")@("V")) I DIXFORM="" Q
48: . S DIVALUE=@DILIST("LVA")@("V")
49: . S DISCREEN=@DILIST("LVA")@("S")
50: . S DITRY=1
51: . I DIVALUE?.NP,+DIVALUE=DIVALUE S DITRY=DIFLAGS'["p"
52: . I DITRY,$P(DIKEY,DIVALUE)="" D
53: . . S DINDEX="#"
54: . . D ENTRY^DICF3(DIFILE,.DIEN,.DIFLAGS,.DIROOT,.DIVALUE,DINDEX,.DICOUNT,.DISCREEN)
55: . . I DIFLAGS["q" S DIXFORM="" Q
56: Q
57:
58: SOUNDEX(DIVALUE)
59: ; func, convert value to soundex value
60: N DICODE S DICODE="01230129022455012623019202"
61: N DISOUND S DISOUND=$C($A(DIVALUE)-(DIVALUE?1L.E*32))
62: N DIPREV S DIPREV=$E(DICODE,$A(DIVALUE)-64)
63: N DICHAR,DIPOS
64: F DIPOS=2:1 S DICHAR=$E(DIVALUE,DIPOS) Q:","[DICHAR D Q:$L(DISOUND)=4
65: . Q:DICHAR'?1A
66: . N DITRANS S DITRANS=$E(DICODE,$A(DICHAR)-$S(DICHAR?1U:64,1:96))
67: . Q:DITRANS=DIPREV Q:DITRANS=9
68: . S DIPREV=DITRANS
69: . I DITRANS'=0 S DISOUND=DISOUND_DITRANS
70: Q $E(DISOUND_"000",1,4)
71:
72: ISSNDX(DIFILE,DIFIELD,DINDEX)
73: ; func, return whether DINDEX is a soundex index
74: N DIDEF,DIEN,DINAME S DIDEF="",DIEN=0
75: F S DIEN=$O(^DD(DIFILE,DIFIELD,1,DIEN)) Q:'DIEN D Q:DINDEX=DINAME
76: . S DIDEF=$G(^DD(DIFILE,DIFIELD,1,DIEN,0))
77: . S DINAME=$P(DIDEF,U,2)
78: Q $P(DIDEF,U,3)="SOUNDEX"
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>