File:  [Coherent Logic Development] / freem_fileman / USER / DICF4.m
Revision 1.1: download - view: text, annotated - select for diffs
Mon Apr 28 14:13:19 2025 UTC (5 weeks, 5 days ago) by snw
Branches: MAIN
CVS tags: HEAD
Restructure repository

DICF4	;SEA/TOAD-VA FileMan: Finder, Part 4 (No Index) ;10/14/94  12:29 ;
	;;21.0;VA FileMan;;Dec 28, 1994
	;Per VHA Directive 10-93-142, this routine should not be modified.
	
UPRIGHT(DIFILE,DIEN,DIFLAGS,DIROOT,DIVALUE,DICOUNT,DISCREEN,DIDENT,DILIST)	
	; FIND--manual selection engine, check upright file for matches
	; proc, DIFILE & DIROOT by value
	N DINDEX,DIFNODE,DIFPIECE,DIOUT
	I DIFLAGS["O" S DIFLAGS=DIFLAGS_"X"
	S DIDA=0,DIOUT=0
	D PREP(DIFILE,.DIFLAGS,.DIVALUE,.DINDEX,.DISCREEN,.DIOUT)
	I DIOUT Q
41	F  D  I DIOUT D DECIDE^DICF2(.DIFLAGS,.DINDEX,DICOUNT,.DIOUT) Q:DIOUT  S DIDA=0
	. S DIDA=$O(@DIROOT@(DIDA))
	. I 'DIDA S DIOUT=1 Q
	. S $P(DIEN,",")=DIDA
	. D CHECK(DIFILE,.DIEN,.DIFLAGS,.DIVALUE,.DIROOT,.DINDEX,.DICOUNT,.DISCREEN,.DIDENT,.DILIST)
	. S $P(DIEN,",")=""
	. I DIFLAGS["q" S DIOUT=1 Q
	Q
	
PREP(DIFILE,DIFLAGS,DIVALUE,DINDEX,DISCREEN,DIOUT)	
	; UPRIGHT--lookup .01 type, add transform values to DIVALUE
	; proc, DIFILE & DIFLAGS by value
	N DIFFLAG
	S DINDEX(0,"COUNT")=0
	S DINDEX(0,"DEF")=$G(^DD(DIFILE,.01,0))
51	I DINDEX(0,"DEF")="" S DIOUT=1 Q
	S DIFFLAG=$P(DINDEX(0,"DEF"),U,2)
	I DIFFLAG["P"!(DIFFLAG["V") S DIFLAGS=DIFLAGS_"p"
	S DINDEX(0,"TRANSFORM")=DIFFLAG'["F"&(DIFFLAG'["N")
	I 'DINDEX(0,"TRANSFORM") Q
	S DINDEX(0,"FIRST")=10
	S DINDEX(0,"LAST")=9
52	I DIFFLAG["D" D PREPD^DICF2(.DIVALUE,.DINDEX,.DISCREEN) Q
	I DIFFLAG["S" D PREPS^DICF6(DIFLAGS,.DIVALUE,.DINDEX,.DISCREEN) Q
	Q
	
CHECK(DIFILE,DIEN,DIFLAGS,DIVALUE,DIROOT,DINDEX,DICOUNT,DISCREEN,DIDENT,DILIST)	
	; UPRIGHT--check one record for possible matches
	; proc, DIFILE, DIFLAGS, & DIROOT by value
	N DIKEY,DITRY,DIXFORM
	S DIKEY=$P($G(@DIROOT@(+DIEN,0)),U)
	I DIKEY="" Q
	S DIXFORM=0
	F  D  I DIXFORM="" Q
	. S DIXFORM=$O(@DILIST("LVA")@("V")) I DIXFORM="" Q
	. S DIVALUE=@DILIST("LVA")@("V")
	. S DISCREEN=@DILIST("LVA")@("S")
	. S DITRY=1
	. I DIVALUE?.NP,+DIVALUE=DIVALUE S DITRY=DIFLAGS'["p"
	. I DITRY,$P(DIKEY,DIVALUE)="" D
	. . S DINDEX="#"
	. . D ENTRY^DICF3(DIFILE,.DIEN,.DIFLAGS,.DIROOT,.DIVALUE,DINDEX,.DICOUNT,.DISCREEN)
	. . I DIFLAGS["q" S DIXFORM="" Q
	Q
	
SOUNDEX(DIVALUE)	
	; func, convert value to soundex value
	N DICODE S DICODE="01230129022455012623019202"
	N DISOUND S DISOUND=$C($A(DIVALUE)-(DIVALUE?1L.E*32))
	N DIPREV S DIPREV=$E(DICODE,$A(DIVALUE)-64)
	N DICHAR,DIPOS
	F DIPOS=2:1 S DICHAR=$E(DIVALUE,DIPOS) Q:","[DICHAR  D  Q:$L(DISOUND)=4
	. Q:DICHAR'?1A
	. N DITRANS S DITRANS=$E(DICODE,$A(DICHAR)-$S(DICHAR?1U:64,1:96))
	. Q:DITRANS=DIPREV  Q:DITRANS=9
	. S DIPREV=DITRANS
	. I DITRANS'=0 S DISOUND=DISOUND_DITRANS
	Q $E(DISOUND_"000",1,4)
	
ISSNDX(DIFILE,DIFIELD,DINDEX)	
	; func, return whether DINDEX is a soundex index
	N DIDEF,DIEN,DINAME S DIDEF="",DIEN=0
	F  S DIEN=$O(^DD(DIFILE,DIFIELD,1,DIEN)) Q:'DIEN  D  Q:DINDEX=DINAME
	. S DIDEF=$G(^DD(DIFILE,DIFIELD,1,DIEN,0))
	. S DINAME=$P(DIDEF,U,2)
	Q $P(DIDEF,U,3)="SOUNDEX"

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