1 | XTLKKWL2 ; IHS/OHPRD/ACC,ALB/JLU,SFISC/JC- PART 3 OF LOOKUP CONTROL PROGRAM FOR "AND"ING INVERTED SEARCH ;07/22/93 15:47
|
---|
2 | ;;7.3;TOOLKIT;;Apr 25, 1995
|
---|
3 | ; XTLKKWCT,XTLKREF,XTLKREF2 ARE PASSED IN AND SHOULD NOT BE KILLED
|
---|
4 | ; THE FOLLOWING ARE PASSED OUT AND SHOULD NOT BE KILLED:
|
---|
5 | ; ^TMP($J,"ADFN"),^TMP($J,"AWRD"),XTLKDFN(),XTLKNUSE(),XTLKNWDS,
|
---|
6 | ; XTLKPRTL(),XTLKWORD()
|
---|
7 | ;
|
---|
8 | PREPSCH ; PREPARE FOR SEARCH BY BUILDING WORD/DFN TABLES
|
---|
9 | S XTLKNWDS=0
|
---|
10 | G:$O(XTLKWT(""))="" PREPSCHX
|
---|
11 | S XTLKNWS=^DD("KWIC")_"^IN^OF^AN^IS^AS^AT^IF^IT^ON^OR^BY^"
|
---|
12 | W:XTLKSAY=1 "("
|
---|
13 | S XTLKWD=""=0
|
---|
14 | F XTLKQ=0:0 S XTLKWD=$O(XTLKWT(XTLKWD)) Q:XTLKWD="" D WDCHK
|
---|
15 | W:XTLKSAY=1 " )",!
|
---|
16 | PREPSCHX K XTLKWT,XTLKNWS,XTLKWD,XTLKQ
|
---|
17 | K XTLKEXAC,XTLKPART,XTLKSYN,XTLKINCR
|
---|
18 | Q
|
---|
19 | ;
|
---|
20 | WDCHK ; DETERMINE IF PARTIAL OR EXACT MATCH
|
---|
21 | S XTLKWSAV=XTLKWD
|
---|
22 | S (XTLKISNT,XTLKFXAC)=0
|
---|
23 | RECHK I $E(XTLKWD)="'" S XTLKISNT=1,XTLKWD=$E(XTLKWD,2,255) G RECHK
|
---|
24 | I $E(XTLKWD)="~" S XTLKFXAC=1,XTLKWD=$E(XTLKWD,2,255) G RECHK
|
---|
25 | I XTLKWD?1N.E!(XTLKNWS[("^"_XTLKWD_"^")) S XTLKNUSE=XTLKNUSE+1,XTLKNUSE(XTLKWD)="" G WDCHKX
|
---|
26 | S XTLKINCR=0,XTLKSYN=$D(^XT(8984.3,"AC",$P(XTLKREF1,U,2),XTLKWD))
|
---|
27 | I 'XTLKSYN D CKWD G WDCHKX
|
---|
28 | S XTLKWDTX=$O(^XT(8984.3,"AC",$P(XTLKREF1,U,2),XTLKWD,0))
|
---|
29 | S XTLKWX=XTLKWD,XTLKWDSX=0 F XTLKQ=0:0 S XTLKWDSX=$O(^XT(8984.3,XTLKWDTX,1,XTLKWDSX)) Q:'XTLKWDSX S XTLKWD=^(XTLKWDSX,0) D CKWD
|
---|
30 | WDCHKX ;
|
---|
31 | S XTLKWD=XTLKWSAV
|
---|
32 | K XTLKWSAV,XTLKWX,XTLKISNT,XTLKFXAC,XTLKWDTX,XTLKWDSX
|
---|
33 | K XTLKI,XTLKJ
|
---|
34 | Q
|
---|
35 | CK ;
|
---|
36 | Q
|
---|
37 | CKWD ;
|
---|
38 | S XTLKEXAC=$S($D(@XTLKREF):1,1:0)
|
---|
39 | S XTLKWD2=$O(@XTLKREF)
|
---|
40 | S XTLKPART=('XTLKFXAC)&($L(XTLKWD)>2)&($S($E(XTLKWD2,1,$L(XTLKWD))=XTLKWD:1,1:0))
|
---|
41 | I 'XTLKEXAC&('XTLKPART)&($L(XTLKWD)>2) S XTLKWD=$E(XTLKWD,1,($L(XTLKWD)-1)) G CKWD
|
---|
42 | I 'XTLKEXAC,'XTLKPART S XTLKNUSE=XTLKNUSE+1,XTLKNUSE(XTLKWD)="" K XTLKWD2 Q
|
---|
43 | CKNOT I XTLKISNT S XTLKINCX=XTLKINCR,XTLKNWDX=XTLKNWDS,XTLKINCR=1,XTLKNWDS=0 D CKWD2 S XTLKINCR=XTLKINCX,XTLKNWDS=XTLKNWDX K XTLKISNT,XTLKINCX,XTLKNWDX Q
|
---|
44 | CKWD2 W:XTLKSAY=1 $S(XTLKSYN&XTLKINCR:"|",1:" ")_$S(XTLKFXAC:"~",1:"")_$S(XTLKISNT:"'",1:"")_XTLKWD ;W:PART&('FEXACT)&($E($O(@REF),1,$L(WD))=WD) "=>"
|
---|
45 | I 'XTLKSYN,XTLKEXAC,'XTLKPART,'XTLKISNT S XTLKNWDS=XTLKNWDS+1,XTLKPRTL(XTLKNWDS)=0,XTLKWORD(XTLKNWDS)=XTLKWD,XTLKDFN(XTLKNWDS)=$O(@XTLKREF2) Q
|
---|
46 | S:'XTLKINCR XTLKNWDS=XTLKNWDS+1,XTLKPRTL(XTLKNWDS)=1,XTLKWORD(XTLKNWDS)=XTLKWD
|
---|
47 | S XTLKWD2=XTLKWD
|
---|
48 | S XTLKN=0 S XTLKJ="" F XTLKQ=0:0 S XTLKJ=$O(^TMP($J,"AWRD",XTLKNWDS,XTLKJ)) Q:XTLKJ="" S XTLKN=XTLKJ
|
---|
49 | S XTLKN=XTLKN+1
|
---|
50 | I XTLKEXAC S ^TMP($J,"AWRD",XTLKNWDS,XTLKN)=XTLKWD,^TMP($J,"ADFN",XTLKNWDS,XTLKN)=$O(@XTLKREF2),XTLKN=XTLKN+1
|
---|
51 | CKWD3 I 'XTLKFXAC F XTLKN=XTLKN:1 S XTLKWD=$O(@XTLKREF) Q:$E(XTLKWD,1,$L(XTLKWD2))'=XTLKWD2 S ^TMP($J,"AWRD",XTLKNWDS,XTLKN)=XTLKWD,^TMP($J,"ADFN",XTLKNWDS,XTLKN)=$O(@XTLKREF2) W:XTLKSAY=1 "/",XTLKWD
|
---|
52 | S XTLKWD=XTLKWD2
|
---|
53 | S XTLKN=XTLKN-1
|
---|
54 | S XTLKD=^TMP($J,"ADFN",XTLKNWDS,1) F XTLKI=1:1:XTLKN S:^TMP($J,"ADFN",XTLKNWDS,XTLKI)<XTLKD XTLKD=^TMP($J,"ADFN",XTLKNWDS,XTLKI)
|
---|
55 | S XTLKDFN(XTLKNWDS)=XTLKD
|
---|
56 | I 'XTLKSYN,XTLKN=1 S XTLKPRTL(XTLKNWDS)=0,XTLKWORD(XTLKNWDS)=^TMP($J,"AWRD",XTLKNWDS,1),XTLKDFN(XTLKNWDS)=^TMP($J,"ADFN",XTLKNWDS,1)
|
---|
57 | S XTLKINCR=1
|
---|
58 | K XTLKN,XTLKWD2,XTLKD
|
---|
59 | Q
|
---|