| 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")
 | 
|---|