Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LEXAMD

LEXAMD.m

Go to the documentation of this file.
  1. LEXAMD ;ISL/KER - Look-up Modifiers ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**6,25,80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; ^TMP("LEXFND" SACC 2.3.2.5.1
  1. ; ^TMP("LEXHIT" SACC 2.3.2.5.1
  1. ; ^TMP("LEXSCH" SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; LEXX IEN file 757.01 of an expression w/Modifiers
  1. ; LEXVDT Date to screen against
  1. ;
  1. EN(LEXX,LEXVDT) ; Look-up Modifiers
  1. S LEXX=+($G(LEXX)) Q:+($G(^TMP("LEXSCH",$J,"MOD",0)))=0
  1. Q:+($G(LEXX))'>2 Q:'$D(^LEX(757.01,+($G(LEXX)),0))
  1. Q:+($P($G(^LEX(757.01,+LEXX,1)),"^",6))=0
  1. Q:'$D(^LEX(757.01,"APAR",LEXX)) N LEXXN D ARY
  1. Q
  1. ARY ; Build Array of Modified Terms
  1. N LEXLVL,LEXO,LEXI,LEXN,LEXA,LEXT,LEXDSP,LEXDES,LEXL
  1. S LEXI=0,LEXXN=$G(^LEX(757.01,LEXX,0)),LEXA(0)=1
  1. S LEXA(1,LEXX)=LEXXN,LEXLVL=+($G(LEX("LVL"))) S:LEXLVL=0 LEXLVL=1
  1. F S LEXI=$O(^LEX(757.01,"APAR",LEXX,LEXI)) Q:+LEXI=0 D
  1. . S LEXN=$G(^LEX(757.01,LEXI,1)) Q:LEXN="" S LEXT=+($P(LEXN,"^",2)) Q:LEXT'=7
  1. . S LEXO=+($P(LEXN,"^",10)) S:LEXO'=0 LEXO=LEXO+1 S:LEXO=0 LEXO=99999 I $D(LEXA(LEXO)) F Q:'$D(LEXA(LEXO)) S LEXO=LEXO+1
  1. . S LEXA(LEXO,LEXI)=$G(^LEX(757.01,LEXI,0)),LEXA(0)=+($G(LEXA(0)))+1
  1. ; Quit if no Modified Terms Found
  1. Q:+($G(LEXA(0)))'>1 S (LEXO,LEXI)=0 D FND
  1. Q
  1. FND ; Build List of Modifiers Found (LEXFND)
  1. K ^TMP("LEXSCH",$J,"EXM"),^TMP("LEXSCH",$J,"NAR"),^TMP("LEXSCH",$J,"SCH"),^TMP("LEXSCH",$J,"TOL"),^TMP("LEXSCH",$J,"NUM"),^TMP("LEXFND",$J)
  1. F S LEXO=$O(LEXA(LEXO)) Q:+LEXO=0 D
  1. . S LEXI=0 F S LEXI=$O(LEXA(LEXO,LEXI)) Q:+LEXI=0 D
  1. . . I LEXO=1 S LEXDES=$$DES(LEXI),LEXDSP=$$SO^LEXASO(LEXI,$G(LEXSHOW),1,$G(LEXVDT))
  1. . . I LEXO>1 S (LEXDES,LEXDSP)=""
  1. . . S LEXT=$G(LEXA(LEXO,LEXI)) Q:'$L(LEXT)
  1. . . S:$L(LEXDES) LEXT=LEXT_" "_LEXDES
  1. . . S:$L(LEXDSP) LEXT=LEXT_" "_LEXDSP
  1. . . S LEXN=-999999999+($G(LEXO))
  1. . . S ^TMP("LEXFND",$J,LEXN,LEXI)=LEXT
  1. . . S ^TMP("LEXSCH",$J,"NUM",0)=$G(^TMP("LEXSCH",$J,"NUM",0))+1
  1. HIT ; Build HIT list
  1. I $D(^TMP("LEXFND",$J)) D Q
  1. . K LEX,^TMP("LEXHIT",$J)
  1. . S LEX=+($G(LEXA(0)))
  1. . S LEX("LVL")=+($G(LEXLVL))+1
  1. . I +LEX>0 D
  1. . . N LEXMAT S LEXMAT=+LEX_" match"_$S(+LEX>1:"es",1:"")_" found for """_LEXXN_""""
  1. . . S:$$UP^XLFSTR($G(LEXSUG))["SUGGEST" LEXMAT=+LEX_" suggestion"_$S(+LEX>1:"s",1:"")_" found for """_LEXXN_""""
  1. . . S (^TMP("LEXSCH",$J,"MAT",0),LEX("MAT"))=LEXMAT D SCH,BEG,NAR N LEXSUG
  1. I '$D(^TMP("LEXFND",$J)) D NOM
  1. Q
  1. SCH ; Search Conditions/Results
  1. K ^TMP("LEXSCH",$J,"EXM")
  1. S ^TMP("LEXSCH",$J,"NAR",0)=$$UP(LEXXN)
  1. S ^TMP("LEXSCH",$J,"SCH",0)=$$UP(LEXXN)
  1. S ^TMP("LEXSCH",$J,"TOL",0)=1
  1. S ^TMP("LEXSCH",$J,"NUM",0)=+($G(^TMP("LEXSCH",$J,"NUM",0)))
  1. Q
  1. NOM ; No Modifiers
  1. K LEX,^TMP("LEXFND",$J),^TMP("LEXHIT",$J),^TMP("LEXSCH",$J,"EXM"),^TMP("LEXSCH",$J,"NAR"),^TMP("LEXSCH",$J,"SCH"),^TMP("LEXSCH",$J,"TOL")
  1. S ^TMP("LEXSCH",$J,"NUM",0)=0 S:$L($G(LEXXN)) ^TMP("LEXSCH",$J,"NAR",0)=$$UP(LEXXN) S:$L($G(LEXXN)) ^TMP("LEXSCH",$J,"SCH",0)=$$UP(LEXXN)
  1. Q
  1. NAR ; Narrative
  1. S:+($G(^TMP("LEXSCH",$J,"UNR",0)))>0&($L($G(^TMP("LEXSCH",$J,"NAR",0)))) LEX("NAR")=$G(^TMP("LEXSCH",$J,"NAR",0))
  1. Q
  1. DES(LEXX) ; Get description flag
  1. N LEXDES,LEXE,LEXM S LEXDES="",LEXE=+LEXX
  1. S LEXM=$P($G(^LEX(757.01,+($G(LEXX)),1)),"^",1),LEXM=+($G(^LEX(757,+($G(LEXM)),0))) S:$D(^LEX(757.01,LEXM,3)) LEXDES="*" S LEXX=$G(LEXDES) Q LEXX
  1. BEG ; Begin List
  1. S:+($G(^TMP("LEXSCH",$J,"UNR",0)))>0&($L($G(^TMP("LEXSCH",$J,"NAR",0)))) LEX("NAR")=$G(^TMP("LEXSCH",$J,"NAR",0))
  1. Q:'$D(^TMP("LEXFND",$J))
  1. N LEXRL,LEXJ,LEXI,LEXA,LEXSTR,LEXDP,LEXLL
  1. S LEXRL=0,LEXLL=+($G(^TMP("LEXSCH",$J,"LEN",0)))
  1. S:+LEXLL=0 (LEXRL,LEXLL)=5 S LEXJ=0,LEXI=-9999999999
  1. ; Hit List ^TMP("LEXHIT",$J,#)
  1. F S LEXI=$O(^TMP("LEXFND",$J,LEXI)) Q:+LEXI=0 D
  1. . S LEXA=0
  1. . F S LEXA=$O(^TMP("LEXFND",$J,LEXI,LEXA)) Q:+LEXA=0!(LEXJ=LEXLL) D Q:+LEXA=0!(LEXJ=LEXLL)
  1. . . S LEXJ=LEXJ+1,LEXDP=^TMP("LEXFND",$J,LEXI,LEXA)
  1. . . S ^TMP("LEXHIT",$J,0)=LEXJ
  1. . . S ^TMP("LEXHIT",$J,LEXJ)=LEXA_"^"_LEXDP
  1. . . S:+($G(^TMP("LEXSCH",$J,"EXM",0)))=+LEXA ^TMP("LEXSCH",$J,"EXM",2)=LEXJ_"^"_$G(^LEX(757.01,+LEXA,0))
  1. . . S:+($G(^TMP("LEXSCH",$J,"EXC",0)))=+LEXA ^TMP("LEXSCH",$J,"EXC",2)=LEXJ_"^"_$G(^LEX(757.01,+LEXA,0))
  1. . . K ^TMP("LEXFND",$J,LEXI,LEXA)
  1. ; List LEX("LIST")
  1. I $D(^TMP("LEXSCH",$J,"NUM",0)) S LEX=+($G(^TMP("LEXSCH",$J,"NUM",0)))
  1. I LEXLL>0 D
  1. . N LEXI,LEXJ S (LEXJ,LEXI)=0
  1. . F S LEXJ=$O(^TMP("LEXHIT",$J,LEXJ)) Q:+LEXJ=0!(+LEXI=LEXLL) D Q:+LEXI=LEXLL
  1. . . S LEXI=LEXI+1,LEX("LIST",LEXI)=^TMP("LEXHIT",$J,LEXJ)
  1. . . S LEX("LIST",0)=LEXI_"^"_LEXI
  1. . . S (LEX("MAX"),^TMP("LEXSCH",$J,"LST",0))=LEXI
  1. S ^TMP("LEXSCH",$J,"TOL",0)=0 S:$D(LEX("LIST",1)) ^TMP("LEXSCH",$J,"TOL",0)=1
  1. S LEX=+($G(^TMP("LEXSCH",$J,"NUM",0)))
  1. S:^TMP("LEXSCH",$J,"TOL",0)=1&(+($G(LEX))>0) LEX("MAT")=+LEX_" match"_$S(+LEX>1:"es",1:"")_" found"
  1. S:+($G(LEX("MAX")))>0 LEX("MIN")=1
  1. I $L($G(^TMP("LEXSCH",$J,"EXM",2))) S LEX("EXM")=^TMP("LEXSCH",$J,"EXM",2)
  1. I $L($G(^TMP("LEXSCH",$J,"EXC",2))) S LEX("EXC")=^TMP("LEXSCH",$J,"EXC",2)
  1. S:+($G(^TMP("LEXSCH",$J,"UNR",0)))>0&($L($G(^TMP("LEXSCH",$J,"NAR",0)))) LEX("NAR")=$G(^TMP("LEXSCH",$J,"NAR",0))
  1. Q:'$D(^TMP("LEXFND",$J)) K:+($G(LEXRL))>0 LEXLL
  1. Q
  1. UP(X) Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  1. CLR K X,Y,LEXLL,LEXSHOW,LEX,^TMP("LEXSCH"),^TMP("LEXHIT"),^TMP("LEXFND") Q