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

LEX10DU.m

Go to the documentation of this file.
  1. LEX10DU ;ISL/KER - ICD-10 Diagnosis Utilities ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 1
  1. ;
  1. ; Global Variables
  1. ; ^LEX(757.033 N/A
  1. ; ^TMP("DIAGSRCH" SACC 2.3.2.5.1
  1. ; ^TMP("LEXDX") SACC 2.3.2.5.1
  1. ; ^TMP("LEXTKN" SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; ^DIM ICR 10016
  1. ; $$ICDDX^ICDEX ICR 5747
  1. ; $$LD^ICDEX ICR 5747
  1. ; $$SD^ICDEX ICR 5747
  1. ; $$DT^XLFDT ICR 10103
  1. ;
  1. ; Local Variables NEWed or KILLed by calling
  1. ; routine LEX10DBT, LEX10DBC or LEX10CS
  1. ; LEXA
  1. ; LEXCS
  1. ; LEXDATA
  1. ; LEXFI
  1. ; LEXINC
  1. ; LEXVDT
  1. ;
  1. Q
  1. REDUCE(X) ; Reduce List
  1. N LEXC,LEXIT,LEXLEN,LEXMAX,LEXPRE,LEXUSE
  1. S LEXUSE=0,LEXLEN=8,LEXPRE=7,LEXMAX=+($G(X))
  1. S:LEXMAX'>0 LEXMAX=30 S LEXCT=+($G(LEXCT)) Q:+LEXCT'>0
  1. S LEXIT=0 F Q:LEXCT'>LEXMAX!(LEXIT) D Q:LEXIT
  1. . S:LEXPRE=LEXLEN LEXIT=1 Q:LEXIT
  1. . N LEXC S LEXC="",LEXCT=0
  1. . F S LEXC=$O(^TMP("LEXDX",$J,LEXC)) Q:'$L(LEXC) D
  1. . . I $L(LEXC)=(LEXLEN+1) D Q
  1. . . . N LEXCAT,LEXIS,LEXNCT,LEXNCD,LEXNPR,LEXCE,LEXTX
  1. . . . S LEXCAT=$$CAT(LEXC),LEXCE=$P(LEXCAT,"^",2)
  1. . . . S LEXTX=$P(LEXCAT,"^",3),LEXCAT=$P(LEXCAT,"^",1)
  1. . . . K ^TMP("LEXDX",$J,LEXC) S LEXUSE=1
  1. . . . Q:$D(^TMP("LEXDX",$J,(LEXCAT_" ")))
  1. . . . S LEXIS=$$ISCAT(LEXCAT)
  1. . . . S LEXNCT=$P(LEXIS,"^",2)
  1. . . . S LEXNCD=$P(LEXIS,"^",3)
  1. . . . S LEXNPR=$P(LEXIS,"^",4)
  1. . . . I $L(LEXCAT),LEXCE?7N,$L(LEXTX) D
  1. . . . . N LEX S LEX=LEXCE_"^"_LEXTX
  1. . . . . S:+($G(LEXNCD))>0 $P(LEX,"^",3)=+($G(LEXNCD))
  1. . . . . S ^TMP("LEXDX",$J,(LEXCAT_" "))="^"_LEX S LEXCT=LEXCT+1
  1. . . S LEXCT=LEXCT+1
  1. . I LEXPRE>3 S LEXLEN=LEXPRE,LEXPRE=LEXPRE-1 Q
  1. . S:LEXPRE=3 LEXIT=1
  1. S LEXC="" F S LEXC=$O(^TMP("LEXDX",$J,LEXC)) Q:'$L(LEXC) D
  1. . S LEXCT=$P($G(^TMP("LEXDX",$J,LEXC)),"^",4) Q:LEXCT'>0
  1. . N LEXCTL,LEXNXT,LEXCT S LEXCTL=$TR(LEXC," ") Q:'$L(LEXCTL)
  1. . S LEXNXT=$O(^TMP("LEXDX",$J,(LEXCTL_" "))) Q:'$L(LEXNXT)
  1. . K:$E(LEXNXT,1,$L(LEXCTL))=LEXCTL ^TMP("LEXDX",$J,(LEXCTL_" "))
  1. Q
  1. ARY ; Build Local Array
  1. N LEXC,LEXACT S LEXC="",LEXACT=0
  1. F S LEXC=$O(^TMP("LEXDX",$J,LEXC)) Q:'$L(LEXC) D
  1. . N LEXSIEN,LEXEIEN,LEXEXP,LEXCAT,LEXND,LEXD,LEXSO,LEXNC
  1. . S LEXND=$G(^TMP("LEXDX",$J,LEXC))
  1. . S LEXSIEN=+LEXND,LEXD=$P($P(LEXND,"^",2),".",1)
  1. . S LEXCAT=$P(LEXND,"^",3),LEXNC=$P(LEXND,"^",4)
  1. . S LEXEIEN=+($G(^LEX(757.02,+LEXSIEN,0)))
  1. . S LEXEXP=$G(^LEX(757.01,+LEXEIEN,0)),LEXSO=$$TM(LEXC)
  1. . I '$L(LEXCAT) Q:LEXSIEN'>0 Q:LEXEIEN'>0 Q:'$L(LEXEXP)
  1. . Q:($G(LEXCDT)?7N)&(LEXD'?7N) Q:'$D(LEXCDT)&(LEXD'?7N) Q:'$L(LEXSO)
  1. . I +LEXSIEN>0 D
  1. . . S LEXACT=LEXACT+1 S LEXA(LEXACT)=LEXSIEN_"^"_LEXSO_"^"_LEXD
  1. . . S LEXA(LEXACT,0)=+LEXEIEN_"^"_LEXEXP
  1. . I +LEXSIEN'>0,$L(LEXCAT) D
  1. . . N LEX S LEX="^"_LEXSO_"^"_LEXD
  1. . . S:+($G(LEXNC))>0 $P(LEX,"^",4)=+($G(LEXNC))
  1. . . S LEXACT=LEXACT+1 S LEXA(LEXACT)=LEX
  1. . . S LEXA(LEXACT,0)="^"_LEXCAT
  1. . S LEXA(0)=LEXACT
  1. S:+($G(LEXA(0)))'>0 LEXA(0)=-1 Q:+($G(LEXA(0)))'>0
  1. S:+($G(LEXUSE))>0&($G(LEXA(0))>0) $P(LEXA(0),"^",2)=1
  1. Q
  1. DXARY ; Build Output Array from Search Results
  1. N LEXOI,LEXC,LEXCO,LEXCT S LEXFI=+($G(LEXFI)) Q:"^80^"'[("^"_LEXFI_"^")
  1. S LEXCS=+($G(LEXCS)) Q:+LEXCS'>0 Q:"^1^30^"'[("^"_LEXCS_"^")
  1. K ^TMP("DIAGSRCH",$J) S (LEXCT,LEXOI)=0
  1. F S LEXOI=$O(LEXOUT(LEXOI)) Q:+LEXOI'>0 D
  1. . N LEXC,LEXI S LEXC=$P($G(LEXOUT(LEXOI)),"^",2) Q:'$L(LEXC)
  1. . S ^TMP("DIAGSRCH",$J,(LEXC_" "))=$G(LEXOUT(LEXOI))
  1. . S ^TMP("DIAGSRCH",$J,(LEXC_" "),0)=$G(LEXOUT(LEXOI,0))
  1. . Q:+($G(LEXCS))'=30 F LEXI=1:1:$L(LEXC) D
  1. . . Q
  1. . . N LEXS,LEXSD,LEXSI,LEXSN,LEXF,LEXFA S LEXS=$E(LEXC,1,($L(LEXC)-LEXI))
  1. . . Q:'$D(^LEX(757.033,"AFRAG",30,(LEXS_" ")))
  1. . . S LEXSD=$O(^LEX(757.033,"AFRAG",30,(LEXS_" "),0))
  1. . . Q:LEXSD'?7N Q:+($G(LEXVDT))<LEXSD
  1. . . S LEXSI=$O(^LEX(757.033,"AFRAG",30,(LEXS_" "),LEXSD,0))
  1. . . Q:+LEXSI'>0 S LEXSN=$$LN(+LEXSI)
  1. . . S:'$L(LEXSN) LEXSN=$$SN(+LEXSI) Q:'$L(LEXSN)
  1. . . S ^TMP("DIAGSRCH",$J,(LEXS_" "))="-^"_LEXS_"^"_LEXSD
  1. . . S ^TMP("DIAGSRCH",$J,(LEXS_" "),0)="-^"_LEXSN
  1. K LEXOUT S LEXCO="" F S LEXCO=$O(^TMP("DIAGSRCH",$J,LEXCO)) Q:'$L(LEXCO) D
  1. . N LEXC,LEXEFF,LEXEIEN,LEXEXP,LEXI,LEXICD,LEXICDT,LEXLD,LEXLDE
  1. . N LEXN1,LEXN2,LEXND,LEXO,LEXP1,LEXP2,LEXP3,LEXPF,LEXPR,LEXS
  1. . N LEXSD,LEXSDE,LEXSIEN,LEXSY,LEXMSG
  1. . S LEXN1=$G(^TMP("DIAGSRCH",$J,LEXCO))
  1. . S LEXN2=$G(^TMP("DIAGSRCH",$J,LEXCO,0))
  1. . S LEXSIEN=+LEXN1,LEXEIEN=+LEXN2
  1. . S LEXC=$P(LEXN1,"^",2),LEXEFF=$P(LEXN1,"^",3)
  1. . S LEXMSG=$$MSG(LEXC)
  1. . S LEXEXP=$P(LEXN2,"^",2)
  1. . I LEXSIEN'>0,LEXEIEN'>0 D Q
  1. . . N LEXO,LEXC,LEXE,LEXT,LEXN,LEXNC,LEXMSG
  1. . . S LEXC=$P(LEXN1,"^",2) Q:'$L(LEXC)
  1. . . S LEXE=$P(LEXN1,"^",3) Q:LEXE'?7N
  1. . . S LEXNC=$P(LEXN1,"^",4)
  1. . . S LEXNC=$S(+LEXNC>0:+LEXNC,1:"")
  1. . . S LEXN=$P(LEXN2,"^",2) Q:'$L(LEXN)
  1. . . S LEXT="CAT"
  1. . . S LEXO=$O(LEXDATA(" "),-1)+1
  1. . . S LEXDATA(LEXO,0)=LEXC_$S($G(LEXEFF)?7N:("^"_LEXEFF),1:"")
  1. . . S:+LEXNC>0 $P(LEXDATA(LEXO,0),"^",3)=+LEXNC
  1. . . S LEXDATA(LEXO,LEXT)=LEXN
  1. . . S LEXDATA(LEXO,"MENU")=LEXN
  1. . . S:$L($G(LEXMSG)) LEXDATA(LEXO,"MSG")=$G(LEXMSG)
  1. . I LEXCS=1!(LEXCS=30) D
  1. . . S LEXICD=$$ICDDX^ICDEX(LEXC,LEXVDT,LEXCS,"E") S (LEXSD,LEXLD)=""
  1. . . S:+LEXICD>0 LEXSD=$$SD^ICDEX(80,+LEXICD,LEXVDT,.LEXSD)
  1. . . I LEXVDT'?7N,$P(LEXSD,"^",1)="-1" D
  1. . . . N LEXSH,LEXT,LEXE S LEXT=$$SDH^ICDEX(80,+LEXICD,.LEXSH)
  1. . . . S LEXE=$O(LEXSH(9999999),-1),LEXS=$G(LEXSH(+LEXE)) S:$L(LEXS) LEXSD=LEXS
  1. . . . S:+($G(LEXSH(0)))>0 LEXSD(0)=$P($G(LEXSH(0)),"^",1,2)
  1. . . S LEXSDE=$P($G(LEXSD(0)),"^",2) S:LEXSDE'?7N LEXSDE="" S LEXLD=""
  1. . . S:+LEXICD>0 LEXLD=$$LD^ICDEX(80,+LEXICD,LEXVDT,.LEXLD)
  1. . . I LEXVDT'?7N,$P(LEXLD,"^",1)="-1" D
  1. . . . N LEXLH,LEXT,LEXE S LEXT=$$LDH^ICDEX(80,+LEXICD,.LEXLH)
  1. . . . S LEXE=$O(LEXLH(9999999),-1),LEXS=$G(LEXLH(+LEXE)) S:$L(LEXS) LEXLD=LEXS
  1. . . . S:+($G(LEXLH(0)))>0 LEXLD(0)=$P($G(LEXLH(0)),"^",1,2)
  1. . . S LEXLDE=$P($G(LEXLD(0)),"^",2) S:LEXLDE'?7N LEXLDE=""
  1. . . S:$E(LEXLD,1,2)="-1" LEXLD=""
  1. . S:LEXSIEN>0&(+LEXEIEN>0) LEXCT=+($G(LEXCT))+1
  1. . S LEXO=$O(LEXDATA(" "),-1)+1,LEXDATA(LEXO,0)=LEXC
  1. . I $D(LEXINC) D
  1. . . S:+LEXSIEN>0 $P(LEXDATA(LEXO,0),"^",2)=+LEXSIEN
  1. . . S:+LEXSIEN>0&(LEXEFF?7N) $P(LEXDATA(LEXO,0),"^",3)=LEXEFF
  1. . I '$D(LEXINC) D
  1. . . S:+LEXSIEN>0&(LEXEFF?7N) $P(LEXDATA(LEXO,0),"^",2)=LEXEFF
  1. . S (LEXDATA(LEXO,"LEX"),LEXDATA(LEXO,"MENU"))=LEXEXP
  1. . S:$L($G(LEXMSG)) LEXDATA(LEXO,"MSG")=$G(LEXMSG)
  1. . S:+LEXEIEN>0 LEXDATA(LEXO,"LEX",1)=+LEXEIEN
  1. . S:+LEXEIEN>0&(LEXEFF?7N) $P(LEXDATA(LEXO,"LEX",1),"^",2)=LEXEFF
  1. . S LEXICDT="" S:$L($G(LEXSD)) LEXDATA(LEXO,"IDS")=LEXSD
  1. . S:$L($G(LEXSD))&(+LEXICD>0) $P(LEXICDT,"^",1)=+LEXICD
  1. . S:$L($G(LEXSD))&(+LEXICD>0)&(LEXSDE?7N) $P(LEXICDT,"^",2)=+LEXSDE
  1. . S:$L(LEXICDT) LEXDATA(LEXO,"IDS",1)=LEXICDT
  1. . S LEXICDT="" S:$L($G(LEXLD)) LEXDATA(LEXO,"IDL")=LEXLD
  1. . S:$L($G(LEXLD))&(+LEXICD>0) $P(LEXICDT,"^",1)=+LEXICD
  1. . S:$L($G(LEXLD))&(+LEXICD>0)&(LEXLDE?7N) $P(LEXICDT,"^",2)=+LEXLDE
  1. . S:$L(LEXICDT) LEXDATA(LEXO,"IDL",1)=LEXICDT
  1. . S LEXDATA(0)=+($G(LEXCT))
  1. . S:+($G(LEXPR))>0 $P(LEXDATA(0),"^",2)=+($G(LEXPR))
  1. . S LEXSY="" D GETSYN^LEXTRAN1("10D",LEXC,LEXVDT,"LEXSY",1)
  1. . S LEXPF=$G(LEXSY("P")),LEXP1=$P(LEXPF,"^",1),LEXP2=$P(LEXPF,"^",2)
  1. . S LEXP3=$P(LEXPF,"^",3) I $L(LEXP1),+LEXP2>0 D
  1. . . S LEXDATA(LEXO,"LEX")=$P(LEXPF,"^",1)
  1. . . S:LEXP2>0 $P(LEXDATA(LEXO,"LEX",1),"^",1)=LEXP2
  1. . . S:LEXP3>0 $P(LEXDATA(LEXO,"LEX",1),"^",2)=LEXP3
  1. . S LEXI=0 F S LEXI=$O(LEXSY("S",LEXI)) Q:+LEXI'>0 D
  1. . . N LEXS,LEXND,LEXP1,LEXP2 S LEXND=$G(LEXSY("S",LEXI))
  1. . . S LEXP1=$P(LEXND,"^",1),LEXP2=+($P(LEXND,"^",2)) Q:LEXP2'>0
  1. . . Q:'$L(LEXP1) S LEXS=$O(LEXDATA(LEXO,"SYN"," "),-1)+1
  1. . . S LEXDATA(LEXO,"SYN",LEXS)=LEXND
  1. . . S LEXDATA(LEXO,"SYN",0)=+LEXS
  1. S:$O(LEXDATA(" "),-1)>0 LEXDATA(0)=$O(LEXDATA(" "),-1)
  1. K ^TMP("DIAGSRCH",$J)
  1. Q
  1. ;
  1. ; Miscellaneous
  1. ISCAT(CODE) ; Is Code a Category
  1. ;
  1. ; Input
  1. ;
  1. ; CODE Code or Category
  1. ;
  1. ; Output
  1. ;
  1. ; $$ISCAT 4 Piece "^" Delimited String
  1. ;
  1. ; 1 Category flag
  1. ; 1 CODE is a Category
  1. ; 0 CODE is not a Category
  1. ;
  1. ; 2 Number of Sub-Categories belonging
  1. ; to the Category
  1. ;
  1. ; 3 Number of Codes belonging to the
  1. ; Category
  1. ;
  1. ; 4 Parent Category
  1. ; Parent Category
  1. ; Null if no Parent Category
  1. ;
  1. N CATS,PAR S CODE=$P($G(CODE),"^",1) Q:'$L(CODE) 0
  1. S:$L(CODE)=3&(CODE'[".") CODE=CODE_"."
  1. Q:$L(CODE)>3&(CODE'[".") 0
  1. S CATS=$$INC(CODE),PAR=$$PAR(CODE)
  1. Q:$D(^LEX(757.033,"AFRAG",30,(CODE_" "))) ("1^"_CATS_"^"_PAR)
  1. Q 0
  1. INC(X) ; Category includes Cat/Codes
  1. ;
  1. ; Input
  1. ;
  1. ; CODE Code or Category
  1. ;
  1. ; Output
  1. ;
  1. ; $$INC 2 Piece "^" Delimited String
  1. ;
  1. ; 1 Number of Sub-Categories belonging
  1. ; to the Category
  1. ;
  1. ; 2 Number of Codes belonging to the
  1. ; Category
  1. ;
  1. Q ($$CATS($G(X))_"^"_$$CODES($G(X)))
  1. CATS(X) ; Number of Categories in a Category
  1. ;
  1. ; Input
  1. ;
  1. ; X Category
  1. ;
  1. ; Output
  1. ;
  1. ; $$CATS Number of Sub-Categories belonging to a Category
  1. ;
  1. N CODE,ORG,ORD,CTL S (CTL,CODE)=$G(X),(ORG,ORD)=$E(CODE,1,($L(CODE)-1))_$C($A($E(CODE,$L(CODE)))-1)_"~"
  1. S X=0 F S ORD=$O(^LEX(757.033,"AFRAG",30,ORD)) Q:'$L(ORD)!(ORD'[CTL) S:ORD'=(CODE_" ") X=X+1
  1. Q X
  1. PAR(X) ; Parent Category
  1. N INP,PSN,EXIT,PAR S INP=$G(X),EXIT=0,PAR=""
  1. F PSN=$L(INP):-1:4 D Q:EXIT Q:$L($G(PAR))
  1. . N STR S STR=$E(INP,1,PSN) Q:$L(STR)'<$L(INP) Q:$L(STR)'>3
  1. . Q:'$D(^LEX(757.033,"AFRAG",30,(STR_" ")))
  1. . S PAR=STR,EXIT=1
  1. S X=$S($L(PAR):PAR,1:"")
  1. Q X
  1. CODES(X) ; Number of Codes in a Category
  1. ;
  1. ; Input
  1. ;
  1. ; X Category
  1. ;
  1. ; Output
  1. ;
  1. ; $$CODES Number of codes belonging to a Category
  1. ;
  1. N CODE,ORG,ORD,CTL S (CTL,CODE)=$G(X),(ORG,ORD)=$E(CODE,1,($L(CODE)-1))_$C($A($E(CODE,$L(CODE)))-1)_"~"
  1. S X=0 F S ORD=$O(^LEX(757.02,"ADX",ORD)) Q:'$L(ORD)!(ORD'[CTL) S:ORD'=(CODE_" ") X=X+1
  1. Q X
  1. CAT(CODE) ; Get Category for Code
  1. ;
  1. ; Input
  1. ;
  1. ; CODE Code or Category
  1. ;
  1. ; Output
  1. ;
  1. ; $$CAT 3 Piece "^" Delimited String
  1. ;
  1. ; 1 Category
  1. ; 2 Effective Date
  1. ; 3 Category Name
  1. ;
  1. ; Null on error
  1. ;
  1. S CODE=$G(CODE) Q:'$L(CODE) "" N FRAG,MAX,OUT,TDT,LEN S FRAG=$TR(CODE," ","")
  1. S OUT="",TDT=$P($G(LEXVDT),".",1),MAX=$L(FRAG) F LEN=MAX:-1:3 D Q:$L(OUT)
  1. . N EFF,NAM,IEN S FRAG=$E(FRAG,1,(LEN-1))
  1. . S:$L(FRAG)=3&(FRAG'[".") FRAG=FRAG_"." Q:$L(FRAG)'>3
  1. . S EFF=$O(^LEX(757.033,"AFRAG",30,(FRAG_" ")," "),-1)
  1. . S:TDT?7N EFF=$O(^LEX(757.033,"AFRAG",30,(FRAG_" "),(TDT+.0001)),-1)
  1. . S EFF=$P(EFF,".",1) Q:EFF'?7N I TDT?7N Q:EFF>TDT
  1. . S IEN=$O(^LEX(757.033,"AFRAG",30,(FRAG_" "),+EFF," "),-1)
  1. . S NAM=$$LN(IEN,+EFF) S:'$L(NAM) NAM=$$SN(IEN,+EFF) Q:'$L(NAM)
  1. . S:$L(FRAG)&(EFF?7N)&($L(NAM)) OUT=(FRAG_"^"_EFF_"^"_NAM)
  1. Q OUT
  1. MSG(X) ; Message for Unversioned Search
  1. N LEXCODE,LEXIA,LEXAC,LEXPD,LEXTD S LEXTD=$$DT^XLFDT,LEXCODE=$TR(X," ","")
  1. S:$G(LEXCDT)?7N&($G(LEXCDT)'=LEXTD) LEXTD=$G(LEXCDT)
  1. I $G(LEXCDT)="" S:$G(LEXVDT)?7N&($G(LEXVDT)'=LEXTD) LEXTD=$G(LEXVDT)
  1. Q:'$L(LEXCODE) "" Q:'$D(^LEX(757.02,"ACT",(LEXCODE_" "))) ""
  1. S LEXIA=$O(^LEX(757.02,"ACT",(LEXCODE_" "),2,(LEXTD+.0001)),-1)
  1. S LEXAC=$O(^LEX(757.02,"ACT",(LEXCODE_" "),3,(LEXTD-.0001)),-1)
  1. S LEXPD=$O(^LEX(757.02,"ACT",(LEXCODE_" "),3,(LEXTD)))
  1. I LEXIA?7N,LEXAC?7N,LEXIA>LEXAC D Q X
  1. . S X="Inactive "_$$FMTE^XLFDT(LEXIA,"5Z")
  1. I LEXAC'=LEXTD,LEXPD?7N,LEXPD>LEXTD D Q X
  1. . S X="Pending "_$$FMTE^XLFDT(LEXPD,"5Z")
  1. Q ""
  1. SN(X,EFF) ; Short Name
  1. N IEN,CDT,IMP,EFF,HIS S IEN=+($G(X)),CDT=$G(LEXVDT) S:$G(EFF)?7N CDT=$G(EFF)
  1. S IMP=$$IMPDATE^LEXU(30) S:CDT'?7N CDT=$$DT^XLFDT
  1. S:CDT'>IMP&(IMP?7N) CDT=IMP
  1. S EFF=$O(^LEX(757.033,+IEN,2,"B",(CDT+.001)),-1)
  1. S HIS=$O(^LEX(757.033,+IEN,2,"B",+EFF," "),-1)
  1. S X=$G(^LEX(757.033,+IEN,2,+HIS,1))
  1. Q X
  1. LN(X,EFF) ; Long Name
  1. N IEN,CDT,IMP,EFF,HIS S IEN=+($G(X)),CDT=$G(LEXVDT) S:$G(EFF)?7N CDT=$G(EFF)
  1. S IMP=$$IMPDATE^LEXU(30) S:CDT'?7N CDT=$$DT^XLFDT
  1. S:CDT'>IMP&(IMP?7N) CDT=IMP
  1. S EFF=$O(^LEX(757.033,+IEN,3,"B",(CDT+.001)),-1)
  1. S HIS=$O(^LEX(757.033,+IEN,3,"B",+EFF," "),-1)
  1. S X=$G(^LEX(757.033,+IEN,3,+HIS,1))
  1. Q X
  1. SCR(X,Y) ; Screen
  1. S Y=+($G(Y)) Q:+Y'>0 0 Q:'$D(^LEX(757.01,+Y,0)) 0
  1. N LEXFIL S LEXFIL=$G(X) Q:'$L(LEXFIL) 1 D ^DIM Q:'$D(X) 1
  1. X LEXFIL S X=$T
  1. Q X
  1. SH ; Show TMP
  1. N LEXNN,LEXNC S LEXNN="^TMP(""LEXDX"","_$J_")",LEXNC="^TMP(""LEXDX"","_$J_","
  1. W !!,"3",! F S LEXNN=$q(@LEXNN) Q:'$L(LEXNN)!(LEXNN'[LEXNC) W !,LEXNN,"=",@LEXNN
  1. Q
  1. PT ; Entry point where DA is defined and X is unknown
  1. Q:'$D(DA) S X=^LEX(757.01,DA,0)
  1. PTX ; Entry point to parse string (X must exist)
  1. N LEXOK,LEXTOKS,LEXTOKS2,LEXTOKI,LEXTOKW,LEXTOLKN,LEXOKC,LEXOKN,LEXOKP,LEXTOKAA,LEXTOKAB,LEXTOKAC K ^TMP("LEXTKN",$J) N DA
  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