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

LEXLK2.m

Go to the documentation of this file.
  1. LEXLK2 ;ISL/KER - Look Up - Expression Attributes ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**6,19,80,103**;Sep 23, 1996;Build 2
  1. ;
  1. ; Global Variables
  1. ; ^LEX(757.13) N/A
  1. ;
  1. ; External References
  1. ; ^DIR ICR 10026
  1. ;
  1. GET(Y) ; Build list in array LEX
  1. N LEXSPC,LEXSPCR,LEXSTR,LEXDIS,LEXMC,LEXMCE,LEXEXP,LEXAI
  1. S $E(LEXSPC,42)=" " S LEXMC=+($G(^LEX(757.01,+($G(Y)),1))),LEXMCE=+($G(Y)),LEXMEX=+($G(^LEX(757,+LEXMC,0)))
  1. K LEX
  1. ; PCH 6 add MD and CLC
  1. D MC,SY,FS,LV,MD,DEF,STY,CLC,SRC,SUB
  1. K LEXC,LEXCODE,LEXCT,LEXDEF,LEXDIS,LEXEXP,LEXF
  1. K LEXFORM,LEXMC,LEXMCE,LEXNOM,LEXSCP,LEXSO,LEXSPC,LEXSPCR
  1. K LEXSR,LEXSRC,LEXSTR
  1. Q
  1. MC ; Major Concept
  1. N LEXMEX,LEXA,LEXI S LEXMC=+($G(^LEX(757.01,+($G(Y)),1))),LEXMCE=+($G(Y)),LEXMEX=+($G(^LEX(757,+LEXMC,0)))
  1. S LEXAI(+LEXMEX)="" D BL,BL S LEXSTR="TERMS:" D TL,BL S LEXA(1)=$G(^LEX(757.01,LEXMEX,0)) D PR^LEXU(.LEXA,64)
  1. S LEXSTR=" Concept:" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXA(1)) D TL
  1. S LEXI=1 F S LEXI=$O(LEXA(LEXI)) Q:+LEXI'>0 D
  1. . S LEXSTR="" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXA(LEXI)) D TL
  1. S LEXDIS=$$T(+LEXMEX) S LEXSTR="" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_LEXDIS D TL
  1. Q
  1. SY ; Synonyms
  1. N LEXEXP S LEXEXP=0 F S LEXEXP=$O(^LEX(757.01,"AMC",+LEXMC,LEXEXP)) Q:+LEXEXP=0 D
  1. . I $P(^LEX(757.01,LEXEXP,1),U,2)=2 D
  1. . . N LEXA,LEXSTR,LEXI S LEXAI(+LEXEXP)="" S LEXA(1)=$G(^LEX(757.01,LEXEXP,0)) D PR^LEXU(.LEXA,64) D BL
  1. . . S LEXSTR=" Synonym:" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXA(1)) D TL
  1. . . S LEXI=1 F S LEXI=$O(LEXA(LEXI)) Q:+LEXI'>0 D
  1. . . . S LEXSTR="" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXA(LEXI)) D TL
  1. . . S LEXDIS=$$T(+LEXEXP) S LEXSTR="" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_LEXDIS D TL
  1. Q
  1. LV ; Lexical Variants
  1. N LEXEXP S LEXEXP=0 F S LEXEXP=$O(^LEX(757.01,"AMC",+LEXMC,LEXEXP)) Q:+LEXEXP=0 D
  1. . I $P(^LEX(757.01,LEXEXP,1),U,2)=3 D
  1. . . N LEXA,LEXSTR,LEXI S LEXAI(+LEXEXP)="" S LEXA(1)=$G(^LEX(757.01,LEXEXP,0)) D PR^LEXU(.LEXA,64) D BL
  1. . . S LEXSTR=" Variant:" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXA(1)) D TL
  1. . . S LEXI=1 F S LEXI=$O(LEXA(LEXI)) Q:+LEXI'>0 D
  1. . . . S LEXSTR="" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXA(LEXI)) D TL
  1. . . S LEXDIS=$$T(+LEXEXP) S LEXSTR="" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_LEXDIS D TL
  1. Q
  1. FS ; Fully Specified
  1. N LEXEXP S LEXEXP=0 F S LEXEXP=$O(^LEX(757.01,"AMC",+LEXMC,LEXEXP)) Q:+LEXEXP=0 D
  1. . I $P(^LEX(757.01,LEXEXP,1),U,2)=8 D
  1. . . N LEXA,LEXSTR,LEXI S LEXAI(+LEXEXP)="" S LEXA(1)=$G(^LEX(757.01,LEXEXP,0)) D PR^LEXU(.LEXA,64) D BL
  1. . . S LEXSTR=" Specified:" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXA(1)) D TL
  1. . . S LEXI=1 F S LEXI=$O(LEXA(LEXI)) Q:+LEXI'>0 D
  1. . . . S LEXSTR="" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXA(LEXI)) D TL
  1. . . S LEXDIS=$$T(+LEXEXP) S LEXSTR="" S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_LEXDIS D TL
  1. Q
  1. MD ; Modifiers/Descendants PCH 6 added
  1. Q:'$D(^LEX(757.01,"APAR",LEXMCE))
  1. D BL
  1. N LEXCHD,LEXORD,LEXSTR,LEXNO,LEXE,LEXCT,LEXTY,LEXL
  1. S (LEXCHD,LEXCT)=0
  1. S LEXSTR=" Modified/Descendant Terms" D TL,BL
  1. F S LEXCHD=$O(^LEX(757.01,"APAR",LEXMCE,LEXCHD)) Q:+LEXCHD=0 D
  1. . S LEXE=$P($G(^LEX(757.01,LEXCHD,0)),"^") Q:'$L(LEXE)
  1. . S LEXTY=+$P($G(^LEX(757.01,LEXCHD,1)),"^",2) Q:LEXTY=0
  1. . S LEXCT=LEXCT+1
  1. . S LEXORD=+$P($G(^LEX(757.01,LEXCHD,1)),"^",10)
  1. . S LEXNO=$S(LEXORD>0:LEXORD,1:(9999+LEXCT))
  1. . S LEXL(LEXTY,LEXNO)=LEXE
  1. S LEXTY=0 F S LEXTY=$O(LEXL(LEXTY)) Q:+LEXTY=0 D
  1. . S LEXNO=0 F S LEXNO=$O(LEXL(LEXTY,LEXNO)) Q:+LEXNO=0 D
  1. . . S LEXSTR=" "_LEXL(LEXTY,LEXNO) D TL
  1. Q
  1. DEF ; Definition
  1. D BL
  1. I $D(^LEX(757.01,+Y,3)) D D BL
  1. . S LEXSTR="DEFINITION:" D TL,BL
  1. . N LEXDEF S LEXDEF=0
  1. . F S LEXDEF=$O(^LEX(757.01,+Y,3,LEXDEF)) Q:+LEXDEF=0 D
  1. . . S LEXSTR=" "_^LEX(757.01,+Y,3,LEXDEF,0) D TL
  1. Q
  1. STY ; Semantic Classes/Types
  1. S LEXSTR="SEMANTICS:" D TL,BL
  1. S LEXSTR=" CLASS TYPE" D TL
  1. N LEXC,LEXT,LEXCT,LEXTT S LEXC="",LEXT=0
  1. F S LEXC=$O(^LEX(757.1,"AMCC",LEXMC,LEXC)) Q:LEXC="" D
  1. . S LEXCT=$E($P(^LEX(757.11,+$O(^LEX(757.11,"B",LEXC,0)),0),U,2),1,38)
  1. . S LEXSTR=" "_LEXCT,LEXT=0 F S LEXT=$O(^LEX(757.1,"AMCC",LEXMC,LEXC,LEXT)) Q:+LEXT=0 D
  1. . . S LEXTT=$E($P(^LEX(757.12,+$P(^LEX(757.1,LEXT,0),U,3),0),U,2),1,38)
  1. . . S LEXSPCR=$E(LEXSPC,1,(40-$L(LEXSTR)))
  1. . . S LEXSTR=LEXSTR_LEXSPCR_LEXTT D TL S LEXSTR=""
  1. Q
  1. CLC ; Clinical Class PCH 6 added
  1. N LEXCL,LEXGP,LEXSTR,LEXFM,LEXIND,LEXP,LEXMEM,LEXT,LEXTC
  1. S LEXCL=+$P($G(^LEX(757.01,+Y,1)),"^",11)
  1. S:LEXCL=0 LEXCL=+$P($G(^LEX(757.01,LEXMCE,1)),"^",11)
  1. Q:LEXCL=0 Q:'$D(^LEX(757.13,LEXCL,0))
  1. S LEXGP=$G(^LEX(757.13,LEXCL,5)) Q:'$L(LEXGP)
  1. D BL S LEXSTR="SOURCE CATEGORY: "_LEXGP D TL,BL
  1. S LEXFM=$P($G(^LEX(757.13,LEXCL,3)),"^") Q:'$L(LEXFM)
  1. S LEXIND=" "
  1. F LEXP=1:1:$L(LEXFM,"~") D
  1. . S LEXMEM=+$P(LEXFM,"~",LEXP) Q:LEXMEM=0 Q:'$D(^LEX(757.13,LEXMEM,0))
  1. . S LEXT=$P($G(^LEX(757.13,LEXMEM,0)),"^") Q:LEXT=""
  1. . S LEXTC=$P($G(^LEX(757.13,LEXMEM,0)),"^",2)
  1. . S LEXIND=LEXIND_" "
  1. . S LEXSTR=LEXIND_LEXT D TL
  1. Q
  1. SRC ; Classification Systems/Codes
  1. N LEXSR,LEXSO,LEXSPC
  1. K LEXSRC
  1. S LEXSO=0
  1. F S LEXSO=$O(^LEX(757.02,"AMC",LEXMC,LEXSO)) Q:+LEXSO=0 D
  1. . Q:$P(^LEX(757.02,LEXSO,0),"^",6)=1
  1. . S LEXNOM=$P(^LEX(757.03,+$P(^LEX(757.02,LEXSO,0),U,3),0),U,2)
  1. . S LEXSR=$P(^LEX(757.03,+$P(^LEX(757.02,LEXSO,0),U,3),0),U,3)
  1. . S:LEXSR[" Edition" LEXSR=$P(LEXSR," Edition",1)_" Ed"_$P(LEXSR," Edition",2,299)
  1. . S $P(LEXSPC," ",16)=" ",LEXSPC=$E(LEXSPC,1,$L(LEXSPC)-$L(LEXNOM))
  1. . S LEXSR=LEXNOM_LEXSPC_LEXSR
  1. . S LEXCODE=$P(^LEX(757.02,LEXSO,0),U,2)
  1. . S LEXSRC(LEXSR,LEXCODE)=""
  1. I $D(LEXSRC) D K LEXSRC
  1. . D BL S LEXSTR="CLASSIFICATION SYSTEMS/CODES:" D TL,BL
  1. . S LEXSR="" F S LEXSR=$O(LEXSRC(LEXSR)) Q:LEXSR="" D
  1. . . D BL S LEXSTR=" "_LEXSR D TL
  1. . . S (LEXSTR,LEXCODE)=""
  1. . . F S LEXCODE=$O(LEXSRC(LEXSR,LEXCODE)) Q:LEXCODE="" D
  1. . . . S LEXSTR=LEXSTR_"/"_LEXCODE
  1. . . S:$E(LEXSTR)="/" LEXSTR=$E(LEXSTR,2,$L(LEXSTR))
  1. . . S LEXSTR=" "_LEXSTR
  1. . . D:$L(LEXSTR)>18 TL
  1. Q
  1. SUB ;
  1. Q:$O(LEXAI(0))'>0
  1. N LEXEIEN,LEXAS S LEXEIEN=0 F S LEXEIEN=$O(LEXAI(LEXEIEN)) Q:+LEXEIEN'>0 D
  1. . N LEXSIEN S LEXSIEN=0 F S LEXSIEN=$O(^LEX(757.21,"B",+LEXEIEN,LEXSIEN)) Q:+LEXSIEN'>0 D
  1. . . N LEXSUB,LEXSUN S LEXSUB=$P($G(^LEX(757.21,+LEXSIEN,0)),"^",2),LEXSUN=$$MIX^LEXXM($P($G(^LEXT(757.2,+LEXSUB,0)),"^",1))
  1. . . S LEXAS(+LEXSUB)=LEXSUN
  1. I +($O(LEXAS(0)))>0 D
  1. . N LEXSTR,LEXS S LEXSTR="SUBSETS:" D BL S LEXS=0 F S LEXS=$O(LEXAS(LEXS)) Q:+LEXS'>0 D
  1. . . S LEXSTR=LEXSTR_$J(" ",(14-$L(LEXSTR)))_$G(LEXAS(+LEXS)) D TL S LEXSTR=""
  1. D BL
  1. Q
  1. T(X) ; Get Term Type
  1. N LEXSCP,LEXF,LEXFL,LEXTY,LEXTN
  1. S LEXF="",LEXFORM="",LEXEXP=+X,X=""
  1. S LEXTY=$P(^LEX(757.01,LEXEXP,1),U,2)
  1. S LEXTN=$S(LEXTY=1:"Concept",LEXTY=8:"Fully Specified Name",1:"Synonym")
  1. S LEXFL=$P(^LEX(757.01,LEXEXP,1),U,5)
  1. S LEXSCP=$P(^LEX(757.01,LEXEXP,1),U,3)
  1. S LEXSCP=$S(LEXSCP="D":"Directly Linked to Concept",LEXSCP="I":"Indirectly Linked (via Synonym)",LEXSCP="B":"Broader View of Concept",LEXSCP="N":"Narrower View of Concept",LEXSCP="O":"Other View of Concept",1:"")
  1. S LEXSCP="",LEXF=$P(^LEX(757.01,LEXEXP,1),U,4) S:+LEXF=0 LEXF=""
  1. S:+LEXF>0 LEXF=$P($G(^LEX(757.014,+LEXF,0)),U,2)
  1. S X=LEXSCP_"/"_LEXF S:$P(X,"/",2)="" X=$P(X,"/",1)
  1. S:$E(X)="/" X=$E(X,2,$L(X))
  1. S:LEXTY>1&(LEXFL>0)&($l(LEXTN)) X="Retired "_LEXTN
  1. K LEXSCP,LEXF
  1. Q X
  1. TM(X,Y) ; Trim Character
  1. S X=$G(X) Q:X="" X S Y=$G(Y) S:'$L(Y) Y=" "
  1. F Q:$E(X,1)'=Y S X=$E(X,2,$L(X))
  1. F Q:$E(X,$L(X))'=Y S X=$E(X,1,($L(X)-1))
  1. Q X
  1. TL ; Create a Text Line
  1. Q:'$L($G(LEXSTR))
  1. N LEXC
  1. S LEXC=+$G(LEX(0)),LEXC=LEXC+1
  1. S LEX(LEXC)=LEXSTR
  1. S LEX(0)=LEXC
  1. Q
  1. BL ; Create a Blank Line
  1. N LEXC
  1. S LEXC=+$G(LEX(0)),LEXC=LEXC+1
  1. S LEX(LEXC)="",LEX(0)=LEXC
  1. Q
  1. LIST ; List the contents of the LEX array
  1. Q:'$G(LEX(0)) N LEXLC,LEXLN,LEXCONT,LEXCL,LEXE,LEXB
  1. S (LEXLN,LEXLC)=0,LEXCONT=""
  1. F Q:LEXLN=LEX(0)!(LEXCONT["^") D Q:LEXLN=LEX(0)!(LEXCONT["^")
  1. . S LEXB=LEXLN+1,LEXE=LEXB+(IOSL-3)
  1. . F LEXCL=LEXB:1:LEXE D
  1. . . I $D(LEX(LEXCL)) W !,LEX(LEXCL) S LEXLN=LEXCL,LEXLC=LEXLC+1
  1. . I LEXLN'=LEX(0) D CONT Q
  1. W ! S LEXLC=LEXLC+1 I LEXLC=(IOSL-3) D CONT
  1. K LEXLC,LEXLN,LEXCONT,LEXCL,LEXE,LEXB
  1. Q
  1. ; Device
  1. DEV ; Select a device
  1. N %ZIS,LEXE,LEXCF,LEXCONT,LEXDNC,LEXEOP,LEXI,LEXLC,ZTDESC,ZTDTH,ZTIO,ZTQUEUED,ZTREQ,ZTRTN,ZTSAVE,ZTSK
  1. S %ZIS("A")="Device: ",ZTRTN="DSPI^LEXLK2",ZTDESC="Display Lexicon Entry"
  1. S ZTIO=ION,ZTDTH=$H,%ZIS="Q",ZTSAVE("LEX(")="" W ! D ^%ZIS I POP S LEXEXIT=1 Q
  1. S ZTIO=ION I $D(IO("Q")) D QUE,^%ZISC,HOME^%ZIS Q
  1. D NOQUE Q
  1. NOQUE ; Do not que task
  1. W:$L($G(IOF)) @IOF W:IOST["P-" !,"< Not queued, printing code lookup >",! U:IOST["P-" IO D @ZTRTN,^%ZISC,HOME^%ZIS Q
  1. QUE ; Task queued to print user defaults
  1. K IO("Q") D ^%ZTLOAD W !,$S($D(ZTSK):"Request Queued",1:"Request Cancelled"),! H 2 Q
  1. Q
  1. ;
  1. DSPI ; Display
  1. Q:'$D(LEX) N LEXEXIT,LEXI,LEXIS S (LEXI,LEXEXIT)=0
  1. W:'$D(ZTQUEUED)&($G(IOST)'["P-")&($L($G(IOF))) @IOF W:$O(LEX(0))'>0 !,"Text not Found"
  1. U:IOST["P-" IO G:$O(LEX(0))'>0 DSPQ N LEXCONT,LEXI,LEXLC,LEXEOP,LEXCF
  1. S LEXCONT="",(LEXCF,LEXIS,LEXLC,LEXI)=0,LEXEOP=+($G(IOSL))
  1. S:LEXEOP=0 LEXEOP=24 F S LEXI=$O(LEX(LEXI)) Q:+LEXI=0!(LEXCONT["^") Q:+($G(LEXEXIT))>0 D Q:+($G(LEXEXIT))>0
  1. . I '$L($$TM($G(LEX(LEXI)))),'$L($$TM($G(LEX((LEXI+1))))) Q
  1. . S:$G(LEX(LEXI))["TERMS:" LEXIS=1 Q:LEXIS'>0
  1. . W !,$G(LEX(LEXI)) S LEXCF=0 D LF Q:+($G(LEXEXIT))>0 Q:LEXCONT["^"
  1. S:$D(ZTQUEUED) ZTREQ="@" I +($G(LEXEXIT))>0 K LEX Q
  1. D:'LEXCF EOP K LEX W ! W:$G(IOST)["P-"&($L($G(IOF))) @IOF
  1. DSPQ ; Quit Display
  1. Q
  1. LF ; Line Feed
  1. S LEXLC=LEXLC+1 D:IOST["P-"&(LEXLC>(LEXEOP-5)) EOP D:IOST'["P-"&(LEXLC>(LEXEOP-4)) EOP
  1. Q
  1. EOP ; End of Page
  1. S LEXCF=1 S LEXLC=0 W:'$D(LEXCAP)&(IOST["P-")&($L($G(IOF))) @IOF Q:IOST["P-" S LEXCONT=$$CONT2
  1. Q
  1. CONT2(X) ; Ask to Continue
  1. Q:$D(LEXCAP) "" Q:+($G(LEXEXIT))>0 "^^" N DIR,DIROUT,DIRUT,DUOUT,DTOUT,Y S DIR(0)="EAO",DIR("A")=" Enter RETURN to continue or '^' to exit: "
  1. S DIR("PRE")="S:X[""?"" X=""??"" S:X[""^"" X=""^""",(DIR("?"),DIR("??"))="^D CONTH^LEXLK2"
  1. W ! D ^DIR S:X["^^"!($D(DTOUT)) X="^^",LEXEXIT=1 Q:X["^^"!(+($G(LEXEXIT))>0) "^^" Q:$D(DIROUT)!($D(DIRUT))!($D(DUOUT))!($D(DTOUT)) "^"
  1. Q:X["^^" "^^" Q:X["^" "^"
  1. Q ""
  1. CONTH ; Ask to Continue Help
  1. W:'$D(LEXCAP) !," Enter either RETURN or '^'."
  1. Q
  1. CONT ; Continue listing - Press <Return> to Continue
  1. W ! N DIR,DTOUT,DUOUT,DIRUT,DIROUT,X,Y S DIR(0)="E" D ^DIR
  1. S LEXLC=0,LEXCONT=X K DIR,DTOUT,DUOUT,DIRUT,DIROUT W !
  1. Q