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

LEX10PLS.m

Go to the documentation of this file.
  1. LEX10PLS ;ISL/KER - ICD-10 Procedure Lookup Selection ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; ^LEX(757.033 N/A
  1. ; ^UTILITY($J ICR 10011
  1. ;
  1. ; External References
  1. ; ENDR^%ZISS ICR 10088
  1. ; KILL^%ZISS ICR 10088
  1. ; ^DIR ICR 10026
  1. ; ^DIWP ICR 10011
  1. ;
  1. ; Local Variables NEWed or KILLed Elsewhere
  1. ; LEXPCDAT
  1. ;
  1. SEL(X) ; Select from List
  1. ;
  1. ; Input
  1. ;
  1. ; X Origninal Value
  1. ;
  1. ; Needs LEXPCDAT array
  1. ;
  1. ; LEXPCDAT=1
  1. ; LEXPCDAT("NEXLEV","6","DESC")="Cerebral Ventricle"
  1. ; LEXPCDAT("NEXLEV","U","DESC")="Spinal Canal"
  1. ; LEXPCDAT("LEXLEV",<character>,"DESC")=Description of Character
  1. ;
  1. ; Output
  1. ;
  1. ; $$SEL Next Character or -1
  1. ;
  1. ; Creates Selection Array LEX
  1. ;
  1. ; LEX(0)=3
  1. ; LEX(1)="6^ 1. ("_$c(27)_"[1m6"_$c(27)_"[m) Cerebral Ventricle"
  1. ; LEX(2)="U^ 2. ("_$c(27)_"[1mU"_$c(27)_"[m) Spinal Canal"
  1. ; LEX(2)=<character>^<menu text>
  1. ; LEX("B",1)=1
  1. ; LEX("B",2)=2
  1. ; LEX("B",<menu item>)=<menu item>
  1. ; LEX("B",6)=1
  1. ; LEX("B","U")=2
  1. ; LEX("B",<character>)=<menu item>
  1. ;
  1. N DIR,DIRB,LEX,LEXCUR,LEXE,LEXFI,LEXHLP,LEXI,LEXIT,LEXL,LEXLAST
  1. N LEXMAX,LEXOUT,LEXS,LEXSS,LEXTOT,LEXTXT,LEXX K DTOUT,DUOUT,DIROUT,DIRUT
  1. N LEXIT,LEXL,LEXTOT,LEX S LEXTXT=$G(X),LEXIT=0,LEXTOT=$$FND Q:+LEXTOT'>0 "^"
  1. K X S:+LEXTOT=1 X=$$ONE S:+LEXTOT>1 X=$$MUL(LEXTXT) N LEXTEST
  1. Q X
  1. ONE(X) ; One Entry Found
  1. Q:+($G(LEXIT))>0 "^^" S X=$$GETO
  1. Q X
  1. MUL(X) ; Multiple Entries Found
  1. Q:+($G(LEXIT))>0 "^^" N LEX,LEXE,LEXI,LEXL,LEXMAX,LEXP,LEXSS,LEXX
  1. S LEXTXT=$G(X) D BUILD
  1. S LEXMAX=$G(LEXTOT),(LEXSS,LEXIT)=0,U="^" G:LEXMAX'>1 MULQ
  1. D:$L($G(LEXTXT)) CUR^LEX10PL(LEXTXT) W !
  1. W:$D(LEXTEST) !," Next character: ",!
  1. S LEXI=0 F S LEXI=$O(LEX(LEXI)) Q:+LEXI'>0 D
  1. . W !,?1,$G(LEX(+LEXI))
  1. W ! S LEXSS=$$MULS S:LEXSS["^" LEXIT=1
  1. S X=LEXSS
  1. MULQ ; Multiple Entries - Quit
  1. K LEX
  1. Q X
  1. MULS(X) ; Multiple Entries - Select
  1. K DTOUT,DUOUT,DIROUT,DIRUT
  1. N DIR,DIRB,LEXFI,LEXHLP,LEXLAST,LEXS S LEXMAX=+($G(LEXMAX)),LEXTXT=$G(LEXTXT)
  1. Q:+($G(LEXIT))>0 "^^" Q:LEXMAX'>1 ""
  1. S DIR("A")=" Select Next Character 1-"_LEXMAX_": "
  1. S LEXHLP=" Answer must be from 1 to "_LEXMAX_" or a character."
  1. S DIR("PRE")="S X=$$MULSP^LEX10PLS(X)"
  1. S (DIR("?"),DIR("??"))="^D MULSH^LEX10PLS"
  1. S DIR(0)="FAO^1:3" D ^DIR I X["^^"!($D(DTOUT))!($D(DIROUT)) S LEXIT=1,X="^^" Q X
  1. Q:X["^"!($D(DIRUT))!($D(DUOUT)) "^" Q:'$L(X) ""
  1. I +Y>0,$L($G(LEX("E",+Y))) S X=$G(LEX("E",+Y)) Q X
  1. Q X
  1. MULSH ; Multiple Entries - Selection Help
  1. I $L($G(LEXHLP)) W !,$G(LEXHLP) Q
  1. Q
  1. MULSP(X) ; Multiple Entries - Pre-Process
  1. N LEXM,LEXP1,LEXP2,LEXO,LEXN,LEXA S (LEXM,X)=$$UP^XLFSTR($G(X)) Q:'$L(X) X
  1. S LEXP1=$E(LEXM,1),LEXP2=$E(LEXM,2,$L(LEXM)),LEXA="" S:$L(LEXP2) LEXA=$G(LEX("E",LEXP2))
  1. I $D(LEX("B",LEXM)) S X=LEXM Q X
  1. I $D(LEX("C",LEXM)) S X=$G(LEX("C",LEXM)) Q X
  1. S:$L(LEXM)=1 LEXO=$C($A(LEXM)-1)_"~"
  1. S:$L(LEXM)>1 LEXO=$E(LEXM,1,($L(LEXM)-1))_$C($A($E(LEXM,$L(LEXM)))-1)_"~"
  1. S LEXN="" S:$L(LEXO) LEXN=$O(LEX("D",LEXO)) S:$E(LEXN,1,$L(LEXM))'=LEXM LEXN=""
  1. I $L(LEXN) I $L($G(LEX("D",LEXN))) S X=$G(LEX("D",LEXN)) Q X
  1. I LEXP1="?",$L(LEXP2),$L(LEXA)=1 I $D(LEX("F",LEXA)) D MULSEH S X="??" Q X
  1. Q:LEXM["?" "??" Q:'$L(LEXM) "" Q:LEXM["^^" "^^" Q:LEXM["^" "^"
  1. S:'$D(LEX("B",X)) X="??"
  1. Q X
  1. MULSEH ; Extended Help
  1. N LEXT,LEXD,LEXE,LEXI,LEXP,LEXII,LEXIC S LEXA=$G(LEXA) Q:$L(LEXA)'=1 Q:'$D(LEX("F",LEXA))
  1. S LEXT=$G(LEX("F",LEXA,"DESC"))
  1. S LEXD=$G(LEX("F",LEXA,"META","Definition"))
  1. S LEXE=$G(LEX("F",LEXA,"META","Explanation"))
  1. S LEXY=$G(LEX("F",LEXA,"META","Includes/Examples",1))
  1. S LEXC=0 I $L(LEXT) S LEXC=LEXC+1 W:LEXC=1 ! W !," ",LEXT
  1. K LEXT S LEXT(1)=LEXD I $L(LEXT(1)) D
  1. . N LEXI D PR(.LEXT,(79-15)) Q:'$L($G(LEXT(1)))
  1. . W !!," Definition:",?15,$G(LEXT(1)) S LEXC=LEXC+1
  1. . S I=1 F S I=$O(LEXT(I)) Q:+I'>0 W !,?15,$G(LEXT(I))
  1. K LEXT S LEXT(1)=LEXE I $L(LEXT(1)) D
  1. . N LEXI D PR(.LEXT,(79-15)) Q:'$L($G(LEXT(1)))
  1. . W !!," Explanation:",?15,$G(LEXT(1)) S LEXC=LEXC+1
  1. . S I=1 F S I=$O(LEXT(I)) Q:+I'>0 W !,?15,$G(LEXT(I))
  1. S (LEXII,LEXIC)=0
  1. F S LEXII=$O(LEX("F",LEXA,"META","Includes/Examples",LEXII)) Q:+LEXII'>0 D
  1. . N LEXY,LEXT,LEXI S LEXY=$G(LEX("F",LEXA,"META","Includes/Examples",LEXII))
  1. . S LEXT(1)=LEXY D PR(.LEXT,(79-15)) Q:'$L($G(LEXT(1)))
  1. . S LEXIC=LEXIC+1 W:LEXIC=1 !!," Include(s):" W:LEXIC'=1 ! W ?15,$G(LEXT(1))
  1. . S LEXI=1 F S LEXI=$O(LEXT(LEXI)) Q:+LEXI'>0 W !,?15,$G(LEXT(LEXI))
  1. I LEXC>0 S LEXC=$$CONT W !
  1. W:$L($G(IOF)) @IOF
  1. D:$L($G(LEXTXT)) CUR^LEX10PL(LEXTXT) W !
  1. W:$D(LEXTEST) !," Next character: ",!
  1. S LEXI=0 F S LEXI=$O(LEX(LEXI)) Q:+LEXI'>0 D
  1. . W !,?1,$G(LEX(+LEXI))
  1. Q
  1. ;
  1. ; Miscellaneous
  1. CUR(X) ; Current Array
  1. K CUR N INP,PSN
  1. S INP=$G(X) Q:'$L(INP) Q:'$D(^LEX(757.033,"AFRAG",31,(INP_" ")))
  1. S CUR=INP F PSN=1:1:$L(INP) D
  1. . N SEC,CHR S SEC=$E(INP,1,PSN),CHR=$E(INP,PSN)
  1. Q
  1. CL ; Clear
  1. K LEXIT
  1. Q
  1. BUILD ; Build Selection Array
  1. D ATTR I LEXTOT'>15 D
  1. . K LEX N LEXI,LEXC S LEXC=0,LEXI=""
  1. . F S LEXI=$O(LEXPCDAT("NEXLEV",LEXI)) Q:'$L(LEXI) D
  1. . . N LEXT,LEXH S LEXT=$G(LEXPCDAT("NEXLEV",LEXI,"DESC"))
  1. . . Q:$L(LEXI)'=1 Q:'$L(LEXT)
  1. . . S LEXH=$S($D(LEXPCDAT("NEXLEV",LEXI,"META")):" *",1:"")
  1. . . S LEXC=LEXC+1 S LEX(LEXC)=$J(LEXC,4)_". ("_BOLD_LEXI_NORM_") "_LEXT_LEXH
  1. . . S:$L(LEXI) LEX("C",$$UP^XLFSTR(LEXI))=LEXC
  1. . . S:$L(LEXT) LEX("D",$$UP^XLFSTR(LEXT))=LEXC
  1. . . S LEX("B",LEXC)=LEXI
  1. . . S LEX("E",LEXC)=$$UP^XLFSTR(LEXI)
  1. . . S LEX(0)=LEXC
  1. . . I $D(LEXPCDAT("NEXLEV",LEXI,"META")) M LEX("F",LEXC)=LEXPCDAT("NEXLEV",LEXI)
  1. I LEXTOT>15 D
  1. . K LEX N LEXI,LEXN,LEXC,LEXD,LEXOFF,LEXXE,LEXXC S LEXOFF=(LEXTOT\2)+(LEXTOT#2) S LEXC=0,LEXI=""
  1. . S LEXXE=36+($L($G(BOLD)))+($L($G(NORM))),LEXXC=38+($L($G(BOLD)))+($L($G(NORM)))
  1. . F LEXN=1:1:LEXOFF D
  1. . . N LEXT,LEXN1,LEXN2,LEXC1,LEXC2,LEXT1,LEXT2,LEXP1,LEXP2,LEXH1,LEXH2
  1. . . S LEXN1=LEXN,LEXN2=LEXN+LEXOFF,(LEXP1,LEXP2)=""
  1. . . S LEXC1=$$CD(LEXN1),LEXC2=$$CD((LEXN2))
  1. . . S LEXT1=$P(LEXC1,"^",2),LEXT2=$P(LEXC2,"^",2)
  1. . . S:$L(LEXT1)>28 LEXT1=$$SH^LEX10PLA(LEXT1,28)
  1. . . S:$L(LEXT2)>28 LEXT2=$$SH^LEX10PLA(LEXT2,28)
  1. . . S LEXC1=$P(LEXC1,"^",1),LEXC2=$P(LEXC2,"^",1)
  1. . . S LEXP1="" I LEXN1>0,$L(LEXC1),$L(LEXT1) D
  1. . . . S LEXH1="" S:$D(LEXPCDAT("NEXLEV",LEXC1,"META")) LEXH1=" *"
  1. . . . S LEXP1=$J(LEXN1,2)_". ("_$G(BOLD)_LEXC1_$G(NORM)_") "_LEXT1_LEXH1
  1. . . S LEXP2="" I LEXN2>0,$L(LEXC2),$L(LEXT2) D
  1. . . . S LEXH2="" S:$D(LEXPCDAT("NEXLEV",LEXC2,"META")) LEXH2=" *"
  1. . . . S LEXP2=$J(LEXN2,2)_". ("_$G(BOLD)_LEXC2_$G(NORM)_") "_LEXT2_LEXH1
  1. . . S LEXT=$E(LEXP1,1,LEXXE),LEXT=LEXT_$J(" ",(LEXXC-$L(LEXT)))_$E(LEXP2,1,LEXXE)
  1. . . S LEXC=LEXC+1 S LEX(LEXC)=LEXT
  1. . . ; Column 1
  1. . . I +($G(LEXN1))>0,$L(LEXC1)=1 D
  1. . . . S LEX("B",LEXN1)=LEXN1
  1. . . . S:$L(LEXC1) LEX("C",$$UP^XLFSTR(LEXC1))=LEXN1,LEX("E",LEXN1)=$$UP^XLFSTR(LEXC1)
  1. . . . S:$L(LEXT1) LEX("D",$$UP^XLFSTR(LEXT1))=LEXN1
  1. . . I $L(LEXC1),LEXN1>0 I $D(LEXPCDAT("NEXLEV",LEXC1,"META")) M LEX("F",LEXC1)=LEXPCDAT("NEXLEV",LEXC1)
  1. . . ; Column 2
  1. . . I +($G(LEXN2))>0,$L(LEXC2)=1 D
  1. . . . S LEX("B",LEXN2)=LEXN2
  1. . . . S:$L(LEXC2) LEX("C",$$UP^XLFSTR(LEXC2))=LEXN2,LEX("E",LEXN2)=$$UP^XLFSTR(LEXC2)
  1. . . . S:$L(LEXT2) LEX("D",$$UP^XLFSTR(LEXT2))=LEXN2
  1. . . . ;S LEX("B",LEXN2)=LEXC2,LEX("B",LEXC2)=LEXC2
  1. . . I $L(LEXC2),LEXN2>0 I $D(LEXPCDAT("NEXLEV",LEXC2,"META")) M LEX("F",LEXC2)=LEXPCDAT("NEXLEV",LEXC2)
  1. . . S LEX(0)=LEXC
  1. D KATTR
  1. Q
  1. CD(X) ; Character/Description
  1. N LEXN,LEXI,LEXC,LEXC,LEXE S LEXN=$G(X) Q:+LEXN'>0 S LEXE=0,LEXC="",LEXD="",X=""
  1. F LEXI=1:1:LEXN Q:LEXE D Q:LEXE
  1. . S LEXC=$O(LEXPCDAT("NEXLEV",LEXC)) I '$L(LEXC) S LEXD="",LEXE=1 Q
  1. . S LEXD=$G(LEXPCDAT("NEXLEV",LEXC,"DESC"))
  1. S X=LEXC_"^"_LEXD
  1. Q X
  1. SH(X) ; Shorten Text
  1. S X=$G(X) N LEXR,LEXW
  1. S LEXR=" and ",LEXW=" & " S:X[LEXR X=$P(X,LEXR,1)_LEXW_$P(X,LEXR,2,299)
  1. S LEXR=" Systems",LEXW=" Sys" S:X[LEXR X=$P(X,LEXR,1)_LEXW_$P(X,LEXR,2,299)
  1. S LEXR=" System",LEXW=" Sys" S:X[LEXR X=$P(X,LEXR,1)_LEXW_$P(X,LEXR,2,299)
  1. ;S LEXR=" Upper ",LEXW=" Up " S:X[LEXR X=$P(X,LEXR,1)_LEXW_$P(X,LEXR,2,299)
  1. S LEXR="Anatomical ",LEXW="Anat. " S:X[LEXR X=$P(X,LEXR,1)_LEXW_$P(X,LEXR,2,299)
  1. S LEXR="Subcutaneous",LEXW="Subcut." S:X[LEXR X=$P(X,LEXR,1)_LEXW_$P(X,LEXR,2,299)
  1. S LEXR="Extremities",LEXW="Extrem." S:X[LEXR X=$P(X,LEXR,1)_LEXW_$P(X,LEXR,2,299)
  1. Q X
  1. ATTR ; Screen Attributes
  1. N X,IOINHI,IOINORM S X="IOINHI;IOINORM" D ENDR^%ZISS S BOLD=$G(IOINHI),NORM=$G(IOINORM)
  1. Q
  1. KATTR ; Kill Screen Attributes
  1. D KILL^%ZISS K BOLD,NORM
  1. Q
  1. TEST ; Test Array Building
  1. K LEX N LEXC,LEXDT,LEXHLP,LEXI,LEXIT,LEXM,LEXMAX,LEXP1,LEXP1,LEXPCDAT,LEXSS,LEXTOT,LEXTXT,LEXUP,LEXY,LEXCHR,LEXIT
  1. S LEXTXT="0CDXXZ",LEXDT=3141010
  1. S LEXTXT="0C",LEXDT=3141010
  1. D LOOK^LEX10PL
  1. Q
  1. FND(X) ; Found
  1. N LEXI S X=0,LEXI="" F S LEXI=$O(LEXPCDAT("NEXLEV",LEXI)) Q:'$L(LEXI) S X=X+1
  1. Q X
  1. GETO(X) ; Get One
  1. S X=$O(LEXPCDAT("NEXLEV",""))
  1. Q X
  1. PR(LEX,X) ; Parse Array
  1. N DIW,DIWF,DIWI,DIWL,DIWR,DIWT,DIWTC,DIWX,DN,Z,LEXC,LEXI,LEXL
  1. K ^UTILITY($J,"W") Q:'$D(LEX) S LEXL=+($G(X)) S:+LEXL'>0 LEXL=79
  1. S LEXC=+($G(LEX)) S:+($G(LEXC))'>0 LEXC=$O(LEX(" "),-1) Q:+LEXC'>0
  1. S DIWL=1,DIWF="C"_+LEXL S LEXI=0
  1. F S LEXI=$O(LEX(LEXI)) Q:+LEXI=0 S X=$G(LEX(LEXI)) D ^DIWP
  1. K LEX S (LEXC,LEXI)=0
  1. F S LEXI=$O(^UTILITY($J,"W",1,LEXI)) Q:+LEXI=0 D
  1. . S LEX(LEXI)=$$TM($G(^UTILITY($J,"W",1,LEXI,0))," "),LEXC=LEXC+1
  1. S:$L(LEXC) LEX=LEXC K ^UTILITY($J,"W")
  1. Q
  1. TM(X,Y) ; Trim Character Y - Default " "
  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. CONT(X) ; Ask to Continue
  1. N DIR,DIROUT,DIRUT,DUOUT,DTOUT,Y S DIR(0)="EAO",DIR("A")=" Press Enter to continue"
  1. S DIR("PRE")="S:X[""?"" X=""??"" S:X[""^"" X=""^""",(DIR("?"),DIR("??"))="^D CONTH^LEX10PLS"
  1. W ! D ^DIR
  1. Q ""
  1. CONTH ; Ask to Continue Help
  1. W !," Press Enter to continue" Q