| 1 | LEXALK ; ISL/KER Look-up by Words ; 05/14/2003 | 
|---|
| 2 | ;;2.0;LEXICON UTILITY;**2,3,6,25**;Sep 23, 1996 | 
|---|
| 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") | 
|---|