LEX10CX5 ;ISL/KER - ICD-10 Cross-Over - Misc ;04/21/2014
;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
;
; Global Variables
; None
;
; External References
; $$DT^XLFDT ICR 10103
; $$UP^XLFSTR ICR 10104
;
; Local Variables NEWed or KILLed Elsewhere
; None
;
; Parse Expression into Segments
SEG(X,LEXS) ; Get Segment Array
N LEXA,LEXI,LEXSG,LEXSI,LEXT S LEXT=$G(X)
S:'$L(LEXT) LEXT=$G(LEXS("SOURCE","EXP"))
Q:'$L(LEXT) D SEGS(LEXT,1,.LEXA) S LEXI=0
F S LEXI=$O(LEXA(LEXI)) Q:+LEXI'>0 D
. N LEXSG,LEXSI S LEXSG=$G(LEXA(LEXI)) Q:'$L(LEXSG)
. S LEXSI=$O(LEXS("SEG"," "),-1)+1
. S LEXS("SEG",LEXSI)=LEXSG
Q
SEGS(X,Y,LEXA) ; Parse Text into Segments
N LEXBEG,LEXC,LEXCHR,LEXEND,LEXFRE,LEXI,LEXNUM,LEXORD,LEXSEG
N LEXTMP,LEXTXT,LEXVAL,LEXFLG S LEXTXT=$$UP^XLFSTR(X)
S LEXFLG=$G(Y) K LEXA,LEXTMP
S LEXBEG=1 F LEXEND=1:1:$L(LEXTXT)+1 D
. S LEXCHR=$E(LEXTXT,LEXEND)
. I "~!@#$%&*()_+`-=[]{};'\:|,./?<> """[LEXCHR D
. . S LEXSEG=$E(LEXTXT,LEXBEG,LEXEND-1),LEXBEG=LEXEND+1
. . I $L(LEXSEG)>1,$L(LEXSEG)<31,$$EXC(LEXSEG) D
. . . N LEXI,LEXNUM S LEXNUM=(246-$L(LEXSEG))
. . . S LEXI=$O(LEXTMP(" "),-1)+1,LEXTMP(LEXI)=LEXSEG
I +($G(LEXFLG))'>0 S LEXI="" D
. F S LEXI=$O(LEXTMP(LEXI)) Q:'$L(LEXI) D
. . S LEXA(LEXI)=LEXTMP(LEXI)
I +($G(LEXFLG))>0 D
. N LEXORD,LEXI,LEXC K LEXORD
. S LEXI="" F S LEXI=$O(LEXTMP(LEXI)) Q:'$L(LEXI) D
. . N LEXFRE,LEXVAL S LEXVAL=$G(LEXTMP(LEXI))
. . I LEXVAL="0" S LEXORD(0)=LEXVAL Q
. . S LEXFRE=$$FREQ^LEXU(LEXVAL) Q:+LEXFRE'>0
. . S LEXORD(LEXFRE)=LEXVAL
. S LEXI="" F S LEXI=$O(LEXORD(LEXI)) Q:'$L(LEXI) D
. . S LEXVAL=$G(LEXORD(LEXI))
. . I LEXI="0" S LEXA(LEXI)=LEXVAL Q
. . S LEXC=$O(LEXA(" "),-1)+1,LEXA(LEXC)=LEXVAL
Q
EXC(X) ; Exclude from Lookup
Q:$L($G(X))'>1 0
Q:"^AS^ABOUT^AFTER^ALMOST^ALSO^ALTHOUGH^AND^"[("^"_$G(X)_"^") 0
Q:"^ANOTHER^ANY^ARE^AREA^AREAS^AT^BE^BEEN^"[("^"_$G(X)_"^") 0
Q:"^BEFORE^BEST^BUT^BY^CAN^CONTROLLED^COULD^"[("^"_$G(X)_"^") 0
Q:"^COMPLICATINS^DONE^DUE^EACH^EVEN^FAR^FOR^FORM^"[("^"_$G(X)_"^") 0
Q:"^FORMS^FORTH^FROM^GIVEN^HAD^^"[("^"_$G(X)_"^") 0
Q:"^HAVE^HER^HERE^HERSELF^HIM^"[("^"_$G(X)_"^") 0
Q:"^HIMSELF^HIS^HOW^IN^INTO^IS^IT^IT'S^ITS^^"[("^"_$G(X)_"^") 0
Q:"^ITS'^ITSELF^KIND^LIKE^LOST^MANY^MAY^MERE^"[("^"_$G(X)_"^") 0
Q:"^MORE^MOST^MUST^NEW^NOT^NOTE^NOW^OF^OFTEN^"[("^"_$G(X)_"^") 0
Q:"^ON^ONESELF^ONLY^OR^OUR^OURS^OUT^OTHER^OWN^PUT^"[("^"_$G(X)_"^") 0
Q:"^SAME^SET^SHOULD^SOME^STATED^SUCH^SURE^"[("^"_$G(X)_"^") 0
Q:"^THAN^THAT^THE^THEN^THERE^THEREBY^THESE^"[("^"_$G(X)_"^") 0
Q:"^THEY^THIS^THUS^TO^TOO^UPON^UNSPECIFIED^"[("^"_$G(X)_"^") 0
Q:"^UNCONTROLLED^W/^W/O^WAS^WHAT^WHEN^WHERE^"[("^"_$G(X)_"^") 0
Q:"^WHICH^WHO^WHOSE^WITH^WITHIN^WITHOUT^WO^"[("^"_$G(X)_"^") 0
Q:"^WOULD^"[("^"_$G(X)_"^") 0
Q 1
;
; Miscellaneous
RN(X,Y) ; Common Roman Numerals
N LEX1,LEX2,LEXI,LEXK,LEXP,LEXS,LEXS2,LEXSG,LEXSGI,LEXX,LEXCT,LEXTX
S LEXSG=$G(X),LEXX=$G(Y)
S LEXS="I;1^II;2^III;3^IV;4^V;5^VI;6^VII;7"
S LEXS=LEXS_"^VIII;8^IX;9^X;10^XI;11^XII;12"
S LEXS2=("^"_$TR(LEXS,";","^")_"^")
Q:LEXS2'[("^"_LEXSG_"^") 0
S LEXK=0 F LEXP=1:1 Q:'$L($P(LEXS,"^",LEXP)) D Q:LEXK
. S LEX1=$P($P(LEXS,"^",LEXP),";",1),LEX2=$P($P(LEXS,"^",LEXP),";",2)
. I $E(LEXX,1,($L(LEX1)+1))=(LEX1_" ") S LEXK=1 Q
. I $E(LEXX,1,($L(LEX2)+1))=(LEX2_" ") S LEXK=1 Q
. I (LEXX[(" "_LEX1_" ")!(LEXX[(" "_LEX1_","))) S LEXK=1 Q
. I (LEXX[(" "_LEX2_" ")!(LEXX[(" "_LEX2_","))) S LEXK=1 Q
. I $E(LEXX,($L(LEXX)-($L(LEX1))),($L(LEXX)+1))=(" "_LEX1) S LEXK=1 Q
. I $E(LEXX,($L(LEXX)-($L(LEX2))),($L(LEXX)+1))=(" "_LEX2) S LEXK=1 Q
Q LEXK
TY(X,Y) ; Common Types
Q 0
N LEXOR,LEXTX,LEXI,LEXS,LEXS2,LEX1,LEX2,LEXOK,LEXP,LEXT1,LEXT2,LEXSG,LEXSGI,LEXCT
S LEXOR=$G(X),LEXTX=$G(Y)
S LEXS="I;1^II;2^III;3^IV;4^V;5^VI;6^VII;7"
S LEXS=LEXS_"^VIII;8^IX;9^X;10^XI;11^XII;12"
S LEXT1=LEXOR_" ",LEXT2=LEXTX_" ",LEXOK=0
Q:(LEXT1_LEXT2)'["TYPE"&((LEXT1_LEXT2)'["OTH") 0
F LEXP=1:1 Q:'$L($P(LEXS,"^",LEXP)) D Q:LEXOK'=0
. S LEX1=$P($P(LEXS,"^",LEXP),";",1),LEX2=$P($P(LEXS,"^",LEXP),";",2)
. I LEXT1[("TYPE "_LEX1_" "),LEXT2[("TYPE "_LEX1_" ") S LEXOK=1 Q
. I LEXT1[("TYPE "_LEX1_","),LEXT2[("TYPE "_LEX1_",") S LEXOK=1 Q
. I LEXT1[("TYPE "_LEX1_" "),LEXT2[("TYPE "_LEX2_" ") S LEXOK=1 Q
. I LEXT1[("TYPE "_LEX1_","),LEXT2[("TYPE "_LEX2_",") S LEXOK=1 Q
. I LEXT1[("TYPE "_LEX2_" "),LEXT2[("TYPE "_LEX2_" ") S LEXOK=1 Q
. I LEXT1[("TYPE "_LEX2_","),LEXT2[("TYPE "_LEX2_",") S LEXOK=1 Q
. I LEXT1[("TYPE "_LEX2_" "),LEXT2[("TYPE "_LEX1_" ") S LEXOK=1 Q
. I LEXT1[("TYPE "_LEX2_","),LEXT2[("TYPE "_LEX1_",") S LEXOK=1 Q
. I LEXT1[LEX1 D
. . I LEXTX'[("TYPE "_LEX2_" ")&(LEXTX'[("TYPE "_LEX1_" ")) D
. . . I LEXTX'[("TYPE "_LEX2_",")&(LEXTX'[("TYPE "_LEX1_",")) D
. . . . I LEXT2["OTHER"!(LEXT2["OTH ") S LEXOK=1 Q
. I LEXT1[("TYPE "_LEX2_" ") D
. . I LEXTX'[("TYPE "_LEX2_" ")&(LEXTX'[("TYPE "_LEX1_" ")) D
. . . I LEXTX'[("TYPE "_LEX2_",")&(LEXTX'[("TYPE "_LEX1_",")) D
. . . . I LEXT2["OTHER"!(LEXT2["OTH ") S LEXOK=1 Q
Q LEXOK
TM(X,Y) ; Trim Y
S Y=$G(Y) S:'$L(Y) Y=" "
F Q:$E(X,1)'=Y S X=$E(X,2,$L(X))
F Q:$E(X,$L(X))'=Y S X=$E(X,1,($L(X)-1))
Q X
SO(X,Y,Z) ; Source Code
N LEXEF,LEXHI,LEXHIS,LEXPER,LEXS,LEXSO,LEXSRI,LEXE,LEXSAB
N LEXCDT,LEXSTA,LEXTSO S LEXE=+($G(X))
S LEXSAB=$G(Y),LEXCDT=$G(Z) Q:LEXE'>0 ""
Q:'$D(^LEX(757.01,+LEXE,0)) "" Q:$L(LEXSAB)'=3 ""
Q:'$D(^LEX(757.03,"ASAB",LEXSAB)) ""
S:LEXCDT'?7N LEXCDT=$$DT^XLFDT
S LEXSRI=$O(^LEX(757.03,"ASAB",LEXSAB,0)) Q:LEXSRI'>0 ""
Q:'$D(^LEX(757.03,LEXSRI,0)) "" S LEXS=0,LEXSO=""
F S LEXS=$O(^LEX(757.02,"B",LEXE,LEXS)) Q:+LEXS'>0 D Q:$L(LEXSO)
. Q:$P($G(^LEX(757.02,LEXS,0)),"^",3)'=LEXSRI
. S LEXEF=$O(^LEX(757.02,LEXS,4,"B",(LEXCDT+.001)),-1) Q:LEXEF'?7N
. S LEXHI=$O(^LEX(757.02,LEXS,4,"B",+LEXEF," "),-1) Q:LEXHI'>0
. S LEXHIS=$G(^LEX(757.02,LEXS,4,LEXHI,0))
. S LEXSTA=$P(LEXHIS,"^",2),LEXPER=$P($G(^LEX(757.02,LEXS,0)),"^",5)
. I LEXSTA>0,LEXPER>0 S LEXSO=$P($G(^LEX(757.02,LEXS,0)),"^",2)
. I LEXSTA>0 S LEXTSO=$P($G(^LEX(757.02,LEXS,0)),"^",2)
S:'$L(LEXSO) LEXSO=$G(LEXTSO) S X=LEXSO
Q X
LA(X,Y,Z) ; Last Activation
N LEX,LEXD,LEXSRI,LEXT,LEXTD,LEXS,LEXSAB,LEXCDT S LEXTD=$$DT^XLFDT
S LEXS=$G(X),LEXSAB=$G(Y),LEXCDT=$G(Z) Q:'$L(LEXSAB) LEXTD+1
S LEXSRI=$O(^LEX(757.03,"ASAB",LEXSAB,0))
Q:+LEXSRI'>0 (LEXTD+2) S LEXD=" ",LEXT=""
S:$P($G(LEXCDT),".",1)?7N LEXD=($P($G(LEXCDT),".",1))+.001
F S LEXD=$O(^LEX(757.02,"ACT",(LEXS_" "),3,LEXD),-1) Q:LEXD'?7N D
. S LEX=0
. F S LEX=$O(^LEX(757.02,"ACT",(LEXS_" "),3,LEXD,LEX)) Q:+LEX'>0 D
. . I $P($G(^LEX(757.02,LEX,0)),"^",3)=LEXSRI D
. . . S LEXT=LEXD,LEX=$O(^LEX(757.02," "),-1)+1,LEXD=0
I $L(LEXT) D
. S LEXD=" ",LEXT=""
. F S LEXD=$O(^LEX(757.02,"ACT",(LEXS_" "),1,LEXD),-1) Q:LEXD'?7N D
. . S LEX=0
. . F S LEX=$O(^LEX(757.02,"ACT",(LEXS_" "),1,LEXD,LEX)) Q:+LEX'>0 D
. . . I $P($G(^LEX(757.02,LEX,0)),"^",3)=LEXSRI D
. . . . S LEXT=LEXD,LEX=$O(^LEX(757.02," "),-1)+1,LEXD=0
S:LEXT'?7N LEXT=LEXTD
Q LEXT
SA(LEXA) ; Show Array
S LEXA=$G(LEXA) Q:'$L(LEXA) Q:$L(LEXA)>8
F S LEXA=$Q(@LEXA) Q:'$L(LEXA) D
. W !,LEXA,"=",@LEXA
Q
LEX10CX5 ;ISL/KER - ICD-10 Cross-Over - Misc ;04/21/2014
+1 ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
+2 ;
+3 ; Global Variables
+4 ; None
+5 ;
+6 ; External References
+7 ; $$DT^XLFDT ICR 10103
+8 ; $$UP^XLFSTR ICR 10104
+9 ;
+10 ; Local Variables NEWed or KILLed Elsewhere
+11 ; None
+12 ;
+13 ; Parse Expression into Segments
SEG(X,LEXS) ; Get Segment Array
+1 NEW LEXA,LEXI,LEXSG,LEXSI,LEXT
SET LEXT=$GET(X)
+2 IF '$LENGTH(LEXT)
SET LEXT=$GET(LEXS("SOURCE","EXP"))
+3 IF '$LENGTH(LEXT)
QUIT
DO SEGS(LEXT,1,.LEXA)
SET LEXI=0
+4 FOR
SET LEXI=$ORDER(LEXA(LEXI))
IF +LEXI'>0
QUIT
Begin DoDot:1
+5 NEW LEXSG,LEXSI
SET LEXSG=$GET(LEXA(LEXI))
IF '$LENGTH(LEXSG)
QUIT
+6 SET LEXSI=$ORDER(LEXS("SEG"," "),-1)+1
+7 SET LEXS("SEG",LEXSI)=LEXSG
End DoDot:1
+8 QUIT
SEGS(X,Y,LEXA) ; Parse Text into Segments
+1 NEW LEXBEG,LEXC,LEXCHR,LEXEND,LEXFRE,LEXI,LEXNUM,LEXORD,LEXSEG
+2 NEW LEXTMP,LEXTXT,LEXVAL,LEXFLG
SET LEXTXT=$$UP^XLFSTR(X)
+3 SET LEXFLG=$GET(Y)
KILL LEXA,LEXTMP
+4 SET LEXBEG=1
FOR LEXEND=1:1:$LENGTH(LEXTXT)+1
Begin DoDot:1
+5 SET LEXCHR=$EXTRACT(LEXTXT,LEXEND)
+6 IF "~!@#$%&*()_+`-=[]{};'\:|,./?<> """[LEXCHR
Begin DoDot:2
+7 SET LEXSEG=$EXTRACT(LEXTXT,LEXBEG,LEXEND-1)
SET LEXBEG=LEXEND+1
+8 IF $LENGTH(LEXSEG)>1
IF $LENGTH(LEXSEG)<31
IF $$EXC(LEXSEG)
Begin DoDot:3
+9 NEW LEXI,LEXNUM
SET LEXNUM=(246-$LENGTH(LEXSEG))
+10 SET LEXI=$ORDER(LEXTMP(" "),-1)+1
SET LEXTMP(LEXI)=LEXSEG
End DoDot:3
End DoDot:2
End DoDot:1
+11 IF +($GET(LEXFLG))'>0
SET LEXI=""
Begin DoDot:1
+12 FOR
SET LEXI=$ORDER(LEXTMP(LEXI))
IF '$LENGTH(LEXI)
QUIT
Begin DoDot:2
+13 SET LEXA(LEXI)=LEXTMP(LEXI)
End DoDot:2
End DoDot:1
+14 IF +($GET(LEXFLG))>0
Begin DoDot:1
+15 NEW LEXORD,LEXI,LEXC
KILL LEXORD
+16 SET LEXI=""
FOR
SET LEXI=$ORDER(LEXTMP(LEXI))
IF '$LENGTH(LEXI)
QUIT
Begin DoDot:2
+17 NEW LEXFRE,LEXVAL
SET LEXVAL=$GET(LEXTMP(LEXI))
+18 IF LEXVAL="0"
SET LEXORD(0)=LEXVAL
QUIT
+19 SET LEXFRE=$$FREQ^LEXU(LEXVAL)
IF +LEXFRE'>0
QUIT
+20 SET LEXORD(LEXFRE)=LEXVAL
End DoDot:2
+21 SET LEXI=""
FOR
SET LEXI=$ORDER(LEXORD(LEXI))
IF '$LENGTH(LEXI)
QUIT
Begin DoDot:2
+22 SET LEXVAL=$GET(LEXORD(LEXI))
+23 IF LEXI="0"
SET LEXA(LEXI)=LEXVAL
QUIT
+24 SET LEXC=$ORDER(LEXA(" "),-1)+1
SET LEXA(LEXC)=LEXVAL
End DoDot:2
End DoDot:1
+25 QUIT
EXC(X) ; Exclude from Lookup
+1 IF $LENGTH($GET(X))'>1
QUIT 0
+2 IF "^AS^ABOUT^AFTER^ALMOST^ALSO^ALTHOUGH^AND^"[("^"_$GET(X)_"^")
QUIT 0
+3 IF "^ANOTHER^ANY^ARE^AREA^AREAS^AT^BE^BEEN^"[("^"_$GET(X)_"^")
QUIT 0
+4 IF "^BEFORE^BEST^BUT^BY^CAN^CONTROLLED^COULD^"[("^"_$GET(X)_"^")
QUIT 0
+5 IF "^COMPLICATINS^DONE^DUE^EACH^EVEN^FAR^FOR^FORM^"[("^"_$GET(X)_"^")
QUIT 0
+6 IF "^FORMS^FORTH^FROM^GIVEN^HAD^^"[("^"_$GET(X)_"^")
QUIT 0
+7 IF "^HAVE^HER^HERE^HERSELF^HIM^"[("^"_$GET(X)_"^")
QUIT 0
+8 IF "^HIMSELF^HIS^HOW^IN^INTO^IS^IT^IT'S^ITS^^"[("^"_$GET(X)_"^")
QUIT 0
+9 IF "^ITS'^ITSELF^KIND^LIKE^LOST^MANY^MAY^MERE^"[("^"_$GET(X)_"^")
QUIT 0
+10 IF "^MORE^MOST^MUST^NEW^NOT^NOTE^NOW^OF^OFTEN^"[("^"_$GET(X)_"^")
QUIT 0
+11 IF "^ON^ONESELF^ONLY^OR^OUR^OURS^OUT^OTHER^OWN^PUT^"[("^"_$GET(X)_"^")
QUIT 0
+12 IF "^SAME^SET^SHOULD^SOME^STATED^SUCH^SURE^"[("^"_$GET(X)_"^")
QUIT 0
+13 IF "^THAN^THAT^THE^THEN^THERE^THEREBY^THESE^"[("^"_$GET(X)_"^")
QUIT 0
+14 IF "^THEY^THIS^THUS^TO^TOO^UPON^UNSPECIFIED^"[("^"_$GET(X)_"^")
QUIT 0
+15 IF "^UNCONTROLLED^W/^W/O^WAS^WHAT^WHEN^WHERE^"[("^"_$GET(X)_"^")
QUIT 0
+16 IF "^WHICH^WHO^WHOSE^WITH^WITHIN^WITHOUT^WO^"[("^"_$GET(X)_"^")
QUIT 0
+17 IF "^WOULD^"[("^"_$GET(X)_"^")
QUIT 0
+18 QUIT 1
+19 ;
+20 ; Miscellaneous
RN(X,Y) ; Common Roman Numerals
+1 NEW LEX1,LEX2,LEXI,LEXK,LEXP,LEXS,LEXS2,LEXSG,LEXSGI,LEXX,LEXCT,LEXTX
+2 SET LEXSG=$GET(X)
SET LEXX=$GET(Y)
+3 SET LEXS="I;1^II;2^III;3^IV;4^V;5^VI;6^VII;7"
+4 SET LEXS=LEXS_"^VIII;8^IX;9^X;10^XI;11^XII;12"
+5 SET LEXS2=("^"_$TRANSLATE(LEXS,";","^")_"^")
+6 IF LEXS2'[("^"_LEXSG_"^")
QUIT 0
+7 SET LEXK=0
FOR LEXP=1:1
IF '$LENGTH($PIECE(LEXS,"^",LEXP))
QUIT
Begin DoDot:1
+8 SET LEX1=$PIECE($PIECE(LEXS,"^",LEXP),";",1)
SET LEX2=$PIECE($PIECE(LEXS,"^",LEXP),";",2)
+9 IF $EXTRACT(LEXX,1,($LENGTH(LEX1)+1))=(LEX1_" ")
SET LEXK=1
QUIT
+10 IF $EXTRACT(LEXX,1,($LENGTH(LEX2)+1))=(LEX2_" ")
SET LEXK=1
QUIT
+11 IF (LEXX[(" "_LEX1_" ")!(LEXX[(" "_LEX1_",")))
SET LEXK=1
QUIT
+12 IF (LEXX[(" "_LEX2_" ")!(LEXX[(" "_LEX2_",")))
SET LEXK=1
QUIT
+13 IF $EXTRACT(LEXX,($LENGTH(LEXX)-($LENGTH(LEX1))),($LENGTH(LEXX)+1))=(" "_LEX1)
SET LEXK=1
QUIT
+14 IF $EXTRACT(LEXX,($LENGTH(LEXX)-($LENGTH(LEX2))),($LENGTH(LEXX)+1))=(" "_LEX2)
SET LEXK=1
QUIT
End DoDot:1
IF LEXK
QUIT
+15 QUIT LEXK
TY(X,Y) ; Common Types
+1 QUIT 0
+2 NEW LEXOR,LEXTX,LEXI,LEXS,LEXS2,LEX1,LEX2,LEXOK,LEXP,LEXT1,LEXT2,LEXSG,LEXSGI,LEXCT
+3 SET LEXOR=$GET(X)
SET LEXTX=$GET(Y)
+4 SET LEXS="I;1^II;2^III;3^IV;4^V;5^VI;6^VII;7"
+5 SET LEXS=LEXS_"^VIII;8^IX;9^X;10^XI;11^XII;12"
+6 SET LEXT1=LEXOR_" "
SET LEXT2=LEXTX_" "
SET LEXOK=0
+7 IF (LEXT1_LEXT2)'["TYPE"&((LEXT1_LEXT2)'["OTH")
QUIT 0
+8 FOR LEXP=1:1
IF '$LENGTH($PIECE(LEXS,"^",LEXP))
QUIT
Begin DoDot:1
+9 SET LEX1=$PIECE($PIECE(LEXS,"^",LEXP),";",1)
SET LEX2=$PIECE($PIECE(LEXS,"^",LEXP),";",2)
+10 IF LEXT1[("TYPE "_LEX1_" ")
IF LEXT2[("TYPE "_LEX1_" ")
SET LEXOK=1
QUIT
+11 IF LEXT1[("TYPE "_LEX1_",")
IF LEXT2[("TYPE "_LEX1_",")
SET LEXOK=1
QUIT
+12 IF LEXT1[("TYPE "_LEX1_" ")
IF LEXT2[("TYPE "_LEX2_" ")
SET LEXOK=1
QUIT
+13 IF LEXT1[("TYPE "_LEX1_",")
IF LEXT2[("TYPE "_LEX2_",")
SET LEXOK=1
QUIT
+14 IF LEXT1[("TYPE "_LEX2_" ")
IF LEXT2[("TYPE "_LEX2_" ")
SET LEXOK=1
QUIT
+15 IF LEXT1[("TYPE "_LEX2_",")
IF LEXT2[("TYPE "_LEX2_",")
SET LEXOK=1
QUIT
+16 IF LEXT1[("TYPE "_LEX2_" ")
IF LEXT2[("TYPE "_LEX1_" ")
SET LEXOK=1
QUIT
+17 IF LEXT1[("TYPE "_LEX2_",")
IF LEXT2[("TYPE "_LEX1_",")
SET LEXOK=1
QUIT
+18 IF LEXT1[LEX1
Begin DoDot:2
+19 IF LEXTX'[("TYPE "_LEX2_" ")&(LEXTX'[("TYPE "_LEX1_" "))
Begin DoDot:3
+20 IF LEXTX'[("TYPE "_LEX2_",")&(LEXTX'[("TYPE "_LEX1_","))
Begin DoDot:4
+21 IF LEXT2["OTHER"!(LEXT2["OTH ")
SET LEXOK=1
QUIT
End DoDot:4
End DoDot:3
End DoDot:2
+22 IF LEXT1[("TYPE "_LEX2_" ")
Begin DoDot:2
+23 IF LEXTX'[("TYPE "_LEX2_" ")&(LEXTX'[("TYPE "_LEX1_" "))
Begin DoDot:3
+24 IF LEXTX'[("TYPE "_LEX2_",")&(LEXTX'[("TYPE "_LEX1_","))
Begin DoDot:4
+25 IF LEXT2["OTHER"!(LEXT2["OTH ")
SET LEXOK=1
QUIT
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
IF LEXOK'=0
QUIT
+26 QUIT LEXOK
TM(X,Y) ; Trim Y
+1 SET Y=$GET(Y)
IF '$LENGTH(Y)
SET Y=" "
+2 FOR
IF $EXTRACT(X,1)'=Y
QUIT
SET X=$EXTRACT(X,2,$LENGTH(X))
+3 FOR
IF $EXTRACT(X,$LENGTH(X))'=Y
QUIT
SET X=$EXTRACT(X,1,($LENGTH(X)-1))
+4 QUIT X
SO(X,Y,Z) ; Source Code
+1 NEW LEXEF,LEXHI,LEXHIS,LEXPER,LEXS,LEXSO,LEXSRI,LEXE,LEXSAB
+2 NEW LEXCDT,LEXSTA,LEXTSO
SET LEXE=+($GET(X))
+3 SET LEXSAB=$GET(Y)
SET LEXCDT=$GET(Z)
IF LEXE'>0
QUIT ""
+4 IF '$DATA(^LEX(757.01,+LEXE,0))
QUIT ""
IF $LENGTH(LEXSAB)'=3
QUIT ""
+5 IF '$DATA(^LEX(757.03,"ASAB",LEXSAB))
QUIT ""
+6 IF LEXCDT'?7N
SET LEXCDT=$$DT^XLFDT
+7 SET LEXSRI=$ORDER(^LEX(757.03,"ASAB",LEXSAB,0))
IF LEXSRI'>0
QUIT ""
+8 IF '$DATA(^LEX(757.03,LEXSRI,0))
QUIT ""
SET LEXS=0
SET LEXSO=""
+9 FOR
SET LEXS=$ORDER(^LEX(757.02,"B",LEXE,LEXS))
IF +LEXS'>0
QUIT
Begin DoDot:1
+10 IF $PIECE($GET(^LEX(757.02,LEXS,0)),"^",3)'=LEXSRI
QUIT
+11 SET LEXEF=$ORDER(^LEX(757.02,LEXS,4,"B",(LEXCDT+.001)),-1)
IF LEXEF'?7N
QUIT
+12 SET LEXHI=$ORDER(^LEX(757.02,LEXS,4,"B",+LEXEF," "),-1)
IF LEXHI'>0
QUIT
+13 SET LEXHIS=$GET(^LEX(757.02,LEXS,4,LEXHI,0))
+14 SET LEXSTA=$PIECE(LEXHIS,"^",2)
SET LEXPER=$PIECE($GET(^LEX(757.02,LEXS,0)),"^",5)
+15 IF LEXSTA>0
IF LEXPER>0
SET LEXSO=$PIECE($GET(^LEX(757.02,LEXS,0)),"^",2)
+16 IF LEXSTA>0
SET LEXTSO=$PIECE($GET(^LEX(757.02,LEXS,0)),"^",2)
End DoDot:1
IF $LENGTH(LEXSO)
QUIT
+17 IF '$LENGTH(LEXSO)
SET LEXSO=$GET(LEXTSO)
SET X=LEXSO
+18 QUIT X
LA(X,Y,Z) ; Last Activation
+1 NEW LEX,LEXD,LEXSRI,LEXT,LEXTD,LEXS,LEXSAB,LEXCDT
SET LEXTD=$$DT^XLFDT
+2 SET LEXS=$GET(X)
SET LEXSAB=$GET(Y)
SET LEXCDT=$GET(Z)
IF '$LENGTH(LEXSAB)
QUIT LEXTD+1
+3 SET LEXSRI=$ORDER(^LEX(757.03,"ASAB",LEXSAB,0))
+4 IF +LEXSRI'>0
QUIT (LEXTD+2)
SET LEXD=" "
SET LEXT=""
+5 IF $PIECE($GET(LEXCDT),".",1)?7N
SET LEXD=($PIECE($GET(LEXCDT),".",1))+.001
+6 FOR
SET LEXD=$ORDER(^LEX(757.02,"ACT",(LEXS_" "),3,LEXD),-1)
IF LEXD'?7N
QUIT
Begin DoDot:1
+7 SET LEX=0
+8 FOR
SET LEX=$ORDER(^LEX(757.02,"ACT",(LEXS_" "),3,LEXD,LEX))
IF +LEX'>0
QUIT
Begin DoDot:2
+9 IF $PIECE($GET(^LEX(757.02,LEX,0)),"^",3)=LEXSRI
Begin DoDot:3
+10 SET LEXT=LEXD
SET LEX=$ORDER(^LEX(757.02," "),-1)+1
SET LEXD=0
End DoDot:3
End DoDot:2
End DoDot:1
+11 IF $LENGTH(LEXT)
Begin DoDot:1
+12 SET LEXD=" "
SET LEXT=""
+13 FOR
SET LEXD=$ORDER(^LEX(757.02,"ACT",(LEXS_" "),1,LEXD),-1)
IF LEXD'?7N
QUIT
Begin DoDot:2
+14 SET LEX=0
+15 FOR
SET LEX=$ORDER(^LEX(757.02,"ACT",(LEXS_" "),1,LEXD,LEX))
IF +LEX'>0
QUIT
Begin DoDot:3
+16 IF $PIECE($GET(^LEX(757.02,LEX,0)),"^",3)=LEXSRI
Begin DoDot:4
+17 SET LEXT=LEXD
SET LEX=$ORDER(^LEX(757.02," "),-1)+1
SET LEXD=0
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+18 IF LEXT'?7N
SET LEXT=LEXTD
+19 QUIT LEXT
SA(LEXA) ; Show Array
+1 SET LEXA=$GET(LEXA)
IF '$LENGTH(LEXA)
QUIT
IF $LENGTH(LEXA)>8
QUIT
+2 FOR
SET LEXA=$QUERY(@LEXA)
IF '$LENGTH(LEXA)
QUIT
Begin DoDot:1
+3 WRITE !,LEXA,"=",@LEXA
End DoDot:1
+4 QUIT