1 | LEXALK ; ISL/KER Look-up by Words ; 05/14/2003
|
---|
2 | ;;2.0;LEXICON UTILITY;**2,3,6,25**;Sep 23, 1996;Build 1
|
---|
3 | ;
|
---|
4 | ; External References
|
---|
5 | ; DBIA 10103 $$DT^XLFDT
|
---|
6 | ; DBIA 1571 ^LEX(
|
---|
7 | ;
|
---|
8 | ; Special Lookup variables
|
---|
9 | ;
|
---|
10 | ; LEXSUB Vocabulary
|
---|
11 | ; LEXSHCT Shortcuts
|
---|
12 | ; LEXDICS Screen - DIC("S") Format
|
---|
13 | ; LEXSHOW Displayable codes
|
---|
14 | ; LEXLKFL File Number
|
---|
15 | ; LEXLKGL Global Root
|
---|
16 | ; LEXLKMD Use Modifiers
|
---|
17 | ; LEXLKIX Index to use during lookup
|
---|
18 | ; LEXLKSH User Input (Search String)
|
---|
19 | ; LEXTKN( Tolkens in order of frequency of use
|
---|
20 | ; LEXTKNS( Tolkens in order of entry
|
---|
21 | ;
|
---|
22 | EN ; Look-up user input
|
---|
23 | N LEXSUB,LEXSHCT,LEXDICS,LEXSHOW,LEXLKFL,LEXLKGL,LEXLKMD
|
---|
24 | N LEXLKIX,LEXLKSH,LEXVDT S LEXVDT=$$DT^XLFDT
|
---|
25 | S LEXLKSH=$G(^TMP("LEXSCH",$J,"SCH",0)) I $L(LEXLKSH)<2 D Q
|
---|
26 | . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1,LEX("ERR",LEX("ERR",0))="User input missing or invalid"
|
---|
27 | S LEXSUB=$G(^TMP("LEXSCH",$J,"VOC",0)) S:LEXSUB="" LEXSUB="WRD"
|
---|
28 | S LEXLKMD=+($G(^TMP("LEXSCH",$J,"MOD",0)))
|
---|
29 | S LEXLKIX=$G(^TMP("LEXSCH",$J,"IDX",0)) S:LEXLKIX="" LEXLKIX="AWRD"
|
---|
30 | S LEXLKFL=$G(^TMP("LEXSCH",$J,"FLN",0)) I LEXLKFL'["757." D Q
|
---|
31 | . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1,LEX("ERR",LEX("ERR",0))="File number missing or invalid"
|
---|
32 | S LEXLKGL=$G(^TMP("LEXSCH",$J,"GBL",0)) I LEXLKGL'["LEX(757." D Q
|
---|
33 | . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1,LEX("ERR",LEX("ERR",0))="Global location missing or invalid"
|
---|
34 | S LEXSHOW=$G(^TMP("LEXSCH",$J,"DIS",0))
|
---|
35 | D TOLKEN^LEXAM(LEXLKSH)
|
---|
36 | N LEXOK,LEXDES,LEXDSP,LEXT,LEXO,LEXI,LEXE,LEXM,LEXME
|
---|
37 | N LEXSS Q:$G(LEXLKFL)'["757."
|
---|
38 | S LEXSS="" I $D(LEXTKNS(0)) D
|
---|
39 | . N LEXI F LEXI=1:1:LEXTKNS(0) S LEXSS=LEXSS_" "_LEXTKNS(LEXI)
|
---|
40 | . S LEXSS=$E(LEXSS,2,$L(LEXSS))
|
---|
41 | S ^TMP("LEXSCH",$J,"SCH",0)=$G(LEXSS)
|
---|
42 | S LEXT=$G(LEXTKN(1)),LEXO=$$SCH(LEXT)
|
---|
43 | I $G(LEXSHCT)="",$G(LEXTKN(0))=1,$D(^LEX(LEXLKFL,LEXLKIX,LEXT)) D G END
|
---|
44 | . D EXACT
|
---|
45 | . I +($O(^LEX(757.01,"ASL",LEXT,0)))>500 Q
|
---|
46 | . D TOLKEN
|
---|
47 | D TOLKEN
|
---|
48 | END ; End look-up by word
|
---|
49 | I $D(^TMP("LEXFND",$J)) D BEG^LEXAL
|
---|
50 | I '$D(^TMP("LEXFND",$J)) D
|
---|
51 | . K LEX,^TMP("LEXFND",$J),^TMP("LEXHIT",$J) S LEX=0
|
---|
52 | S:+($G(^TMP("LEXSCH",$J,"UNR",0)))>0&($L($G(^TMP("LEXSCH",$J,"NAR",0)))) LEX("NAR")=$G(^TMP("LEXSCH",$J,"NAR",0))
|
---|
53 | Q
|
---|
54 | EXACT ; Main loop throuth TOLKENS that equal LEXT
|
---|
55 | F S LEXO=$O(^LEX(LEXLKFL,LEXLKIX,LEXO)) Q:LEXO'=LEXT D IEN
|
---|
56 | Q
|
---|
57 | TOLKEN ; Main loop though TOLKENS containing LEXT
|
---|
58 | F S LEXO=$O(^LEX(LEXLKFL,LEXLKIX,LEXO)) Q:LEXO'[LEXT!(LEXO="") D IEN
|
---|
59 | Q
|
---|
60 | IEN ; Loop throuth Internal Entry Numbers
|
---|
61 | S LEXI=0
|
---|
62 | F S LEXI=$O(^LEX(LEXLKFL,LEXLKIX,LEXO,LEXI)) Q:+LEXI=0 D CHK
|
---|
63 | Q
|
---|
64 | CHK ; Check each tolken
|
---|
65 | N LEXOK,LEXO S LEXE=LEXI,LEXOK=1
|
---|
66 | S:LEXLKGL'["757.01" LEXE=+($G(^LEX(LEXLKFL,LEXI,0))) Q:LEXE=0
|
---|
67 | ; Filter
|
---|
68 | S LEXFILR=$$EN^LEXAFIL($G(LEXFIL),LEXE) Q:LEXFILR=0
|
---|
69 | ; Deactivated
|
---|
70 | Q:+($P($G(^LEX(757.01,LEXE,1)),"^",5))=1
|
---|
71 | ; Expression has Modifiers
|
---|
72 | N LEXEMOD S LEXEMOD=+($P($G(^LEX(757.01,LEXE,1)),"^",6))
|
---|
73 | S LEXM=+($G(^LEX(757.01,LEXE,1)))
|
---|
74 | S LEXME=+($G(^LEX(757,LEXM,0)))
|
---|
75 | ; Check not exact match
|
---|
76 | I $L($G(^TMP("LEXSCH",$J,"EXM",0))),+(^TMP("LEXSCH",$J,"EXM",0))=LEXE Q
|
---|
77 | I $L($G(^TMP("LEXSCH",$J,"EXC",0))),+(^TMP("LEXSCH",$J,"EXC",0))=LEXE Q
|
---|
78 | ; Check tolkens
|
---|
79 | S LEXOK=1 D CHKTKNS(LEXE)
|
---|
80 | ; If the expression failed the search, and the expression has
|
---|
81 | ; modifiers then check the modifiers
|
---|
82 | D:+LEXOK=0&(+($G(LEXEMOD))>0)&(+($G(LEXTKN(0)))>1) CHKMOD^LEXAMD2
|
---|
83 | Q:'LEXOK
|
---|
84 | ; Description (*)
|
---|
85 | S LEXDES=$$DES^LEXASC(LEXE)
|
---|
86 | ; Display of codes
|
---|
87 | S LEXDSP=$$SO^LEXASO(LEXE,$G(LEXSHOW),1,$G(LEXVDT))
|
---|
88 | D ADDL^LEXAL(LEXE,LEXDES,LEXDSP)
|
---|
89 | Q
|
---|
90 | CHKTKNS(LEXE) ; Check tolkens
|
---|
91 | N LEXM S LEXM=+($G(^LEX(757.01,LEXE,1))) Q:LEXM=0
|
---|
92 | N LEXI,LEXOE,LEXC S LEXOE=LEXE,LEXI=1
|
---|
93 | F S LEXI=$O(LEXTKN(LEXI)) Q:+LEXI=0!('LEXOK) D Q:'LEXOK
|
---|
94 | . N LEXT,LEXE S LEXT=LEXTKN(LEXI),LEXE=0,LEXOK=0
|
---|
95 | . S LEXC=$$UP(^LEX(757.01,LEXOE,0))
|
---|
96 | . I LEXC[(" "_LEXT) S LEXOK=1 Q
|
---|
97 | . I LEXC[("-"_LEXT) S LEXOK=1 Q
|
---|
98 | . I LEXC[("("_LEXT) S LEXOK=1 Q
|
---|
99 | . I LEXC[("/"_LEXT) S LEXOK=1 Q
|
---|
100 | . I $E(LEXC,1,$L(LEXT))=LEXT S LEXOK=1 Q
|
---|
101 | . I $L(LEXT),$D(^LEX(757.01,LEXOE,5,"B",LEXT)) S LEXOK=1 Q
|
---|
102 | . I $L(LEXT),$E($O(^LEX(757.01,LEXOE,5,"B",($E(LEXT,1,($L(LEXT)-1))_$C($A($E(LEXT,$L(LEXT)))-1)_"~"))),1,$L(LEXT))=LEXT S LEXOK=1 Q
|
---|
103 | . F S LEXE=$O(^LEX(757.01,"AMC",LEXM,LEXE)) Q:+LEXE=0!(LEXOK) D Q:LEXOK
|
---|
104 | . . Q:+($P($G(^LEX(757.01,LEXE,1)),"^",2))>3
|
---|
105 | . . S LEXC=$$UP(^LEX(757.01,LEXE,0))
|
---|
106 | . . I LEXC[(" "_LEXT) S LEXOK=1 Q
|
---|
107 | . . I LEXC[("-"_LEXT) S LEXOK=1 Q
|
---|
108 | . . I LEXC[("("_LEXT) S LEXOK=1 Q
|
---|
109 | . . I LEXC[("/"_LEXT) S LEXOK=1 Q
|
---|
110 | . . I $E(LEXC,1,$L(LEXT))=LEXT S LEXOK=1 Q
|
---|
111 | Q
|
---|
112 | DES(LEXX) ; Get description flag
|
---|
113 | N LEXDES,LEXE,LEXM S LEXDES="",LEXE=+LEXX
|
---|
114 | S LEXM=$P($G(^LEX(757.01,+($G(LEXX)),1)),"^",1)
|
---|
115 | S LEXM=+($G(^LEX(757,+($G(LEXM)),0)))
|
---|
116 | S:$D(^LEX(757.01,LEXM,3)) LEXDES="*"
|
---|
117 | S LEXX=$G(LEXDES) Q LEXX
|
---|
118 | SCH(LEXX) ; Search for LEXX a $Orderable variable
|
---|
119 | S LEXX=$E(LEXX,1,($L(LEXX)-1))_$C($A($E(LEXX,$L(LEXX)))-1)_"~" Q LEXX
|
---|
120 | Q
|
---|
121 | UP(X) ; Uppercase
|
---|
122 | Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
---|