LEXALK ;ISL/KER - Look-up by Words ;04/21/2014
;;2.0;LEXICON UTILITY;**2,3,6,25,51,80**;Sep 23, 1996;Build 10
;
; Global Variables
; ^LEX( N/A
; ^TMP("LEXFND") SACC 2.3.2.5.1
; ^TMP("LEXHIT") SACC 2.3.2.5.1
; ^TMP("LEXSCH") SACC 2.3.2.5.1
;
; External References
; $$DT^XLFDT ICR 10103
; ^LEX( ICR 1571
;
; Local Variables NEWed or KILLed Elsewhere
; LEXFIL NEWed in LEXA
; LEXFILR NEWed in LEXA
; LEXTKN KILLed in LEXA
; LEXTKNS KILLed in LEXA
; LEXVDT NEWed in LEXA
;
; Special Lookup variables
;
; LEXSUB Vocabulary
; LEXSHCT Shortcuts
; LEXDICS Screen - DIC("S") Format
; LEXSHOW Displayable codes
; LEXLKFL File Number
; LEXLKGL Global Root
; LEXLKMD Use Modifiers
; LEXLKIX Index to use during lookup
; LEXLKSH User Input (Search String)
; LEXTKN( Tokens in order of frequency of use
; LEXTKNS( Tokens in order of entry
;
EN ; Look-up user input
N LEXSUB,LEXSHCT,LEXDICS,LEXSHOW,LEXLKFL,LEXLKGL,LEXLKMD,LEXLKIX,LEXLKSH
D VDT^LEXU S LEXLKSH=$G(^TMP("LEXSCH",$J,"SCH",0)) I $L(LEXLKSH)<2 D Q
. S LEX("ERR",0)=+($G(LEX("ERR",0)))+1,LEX("ERR",LEX("ERR",0))="User input missing or invalid"
S LEXSUB=$G(^TMP("LEXSCH",$J,"VOC",0)) S:LEXSUB="" LEXSUB="WRD"
S LEXLKMD=+($G(^TMP("LEXSCH",$J,"MOD",0)))
S LEXLKIX=$G(^TMP("LEXSCH",$J,"IDX",0)) S:LEXLKIX="" LEXLKIX="AWRD"
S LEXLKFL=$G(^TMP("LEXSCH",$J,"FLN",0)) I LEXLKFL'["757." D Q
. S LEX("ERR",0)=+($G(LEX("ERR",0)))+1,LEX("ERR",LEX("ERR",0))="File number missing or invalid"
S LEXLKGL=$G(^TMP("LEXSCH",$J,"GBL",0)) I LEXLKGL'["LEX(757." D Q
. S LEX("ERR",0)=+($G(LEX("ERR",0)))+1,LEX("ERR",LEX("ERR",0))="Global location missing or invalid"
S LEXSHOW=$G(^TMP("LEXSCH",$J,"DIS",0))
D TOKEN^LEXAM(LEXLKSH)
N LEXOK,LEXDES,LEXDSP,LEXT,LEXO,LEXI,LEXE,LEXM,LEXME
N LEXSS Q:$G(LEXLKFL)'["757."
S LEXSS="" I $D(LEXTKNS(0)) D
. N LEXI F LEXI=1:1:LEXTKNS(0) S LEXSS=LEXSS_" "_LEXTKNS(LEXI)
. S LEXSS=$E(LEXSS,2,$L(LEXSS))
S ^TMP("LEXSCH",$J,"SCH",0)=$G(LEXSS)
S LEXT=$G(LEXTKN(1)),LEXO=$$SCH(LEXT)
I $G(LEXSHCT)="",$G(LEXTKN(0))=1,$D(^LEX(LEXLKFL,LEXLKIX,LEXT)) D EXACT
I $G(LEXSHCT)="",$G(LEXTKN(0))=1,$D(^LEX(LEXLKFL,LEXLKIX,LEXT)) D G END
. D EXACT
. I +($O(^LEX(757.01,"ASL",LEXT,0)))>6000 Q
. D TOKEN
D TOKEN
END ; End look-up by word
I $D(^TMP("LEXFND",$J)) D BEG^LEXAL
I '$D(^TMP("LEXFND",$J)) D
. K LEX,^TMP("LEXFND",$J),^TMP("LEXHIT",$J) S LEX=0
S:+($G(^TMP("LEXSCH",$J,"UNR",0)))>0&($L($G(^TMP("LEXSCH",$J,"NAR",0)))) LEX("NAR")=$G(^TMP("LEXSCH",$J,"NAR",0))
Q
EXACT ; Main loop throuth TOKENS that equal LEXT
S LEXO=$$SCH(LEXT) F S LEXO=$O(^LEX(LEXLKFL,LEXLKIX,LEXO)) Q:LEXO'=LEXT D IEN
Q
TOKEN ; Main loop though TOKENS containing LEXT
S LEXO=$$SCH(LEXT) F S LEXO=$O(^LEX(LEXLKFL,LEXLKIX,LEXO)) Q:LEXO'[LEXT!(LEXO="") D IEN
Q
IEN ; Loop throuth Internal Entry Numbers
S LEXI=0 F S LEXI=$O(^LEX(LEXLKFL,LEXLKIX,LEXO,LEXI)) Q:+LEXI=0 D
. I +($G(LEXNOKEY))>0 N LEXK S LEXK=$$KWO($G(LEXO),$G(LEXI)) Q:LEXK>0
. D CHK
Q
CHK ; Check each token
N LEXOK,LEXO,LEXLKT S LEXLKT="ALK",LEXE=LEXI,LEXOK=1
S:LEXLKGL'["757.01" LEXE=+$G(^LEX(LEXLKFL,LEXI,0)) Q:LEXE=0
; Filter
S LEXFILR=$$EN^LEXAFIL($G(LEXFIL),LEXE) Q:LEXFILR=0
; Deactivated
Q:'$D(LEXIGN)&(+($P($G(^LEX(757.01,LEXE,1)),"^",5))=1)
; Expression has Modifiers
N LEXEMOD S LEXEMOD=+($P($G(^LEX(757.01,LEXE,1)),"^",6))
S LEXM=+($G(^LEX(757.01,LEXE,1)))
S LEXME=+($G(^LEX(757,LEXM,0)))
; Check not exact match
I $L($G(^TMP("LEXSCH",$J,"EXM",0))),+(^TMP("LEXSCH",$J,"EXM",0))=LEXE Q
I $L($G(^TMP("LEXSCH",$J,"EXC",0))),+(^TMP("LEXSCH",$J,"EXC",0))=LEXE Q
; Check tokens
S LEXOK=1 D CHKTKNS(LEXE)
; If the expression failed the search, and the expression has
; modifiers then check the modifiers
D:+LEXOK=0&(+($G(LEXEMOD))>0)&(+($G(LEXTKN(0)))>1) CHKMOD^LEXAMD2
Q:'LEXOK
; Description (*)
S LEXDES=$$DES^LEXASC(LEXE)
; Display of codes
S LEXDSP=$$SO^LEXASO(LEXE,$G(LEXSHOW),1,$G(LEXVDT))
D ADDL^LEXAL(LEXE,LEXDES,LEXDSP)
Q
CHKTKNS(LEXE) ; Check tokens
N LEXM,LEXNOKEY S LEXM=+($G(^LEX(757.01,LEXE,1))) Q:LEXM=0
N LEXI,LEXOE,LEXC S LEXOE=LEXE,LEXI=1
F S LEXI=$O(LEXTKN(LEXI)) Q:+LEXI=0!('LEXOK) D Q:'LEXOK
. N LEXT,LEXE,LEXORD S LEXT=LEXTKN(LEXI),LEXE=0,LEXOK=0
. S LEXC=$$UP(^LEX(757.01,LEXOE,0))
. I LEXC[(" "_LEXT) S LEXOK=1 Q
. I LEXC[("-"_LEXT) S LEXOK=1 Q
. I LEXC[("("_LEXT) S LEXOK=1 Q
. I LEXC[("/"_LEXT) S LEXOK=1 Q
. I $E(LEXC,1,$L(LEXT))=LEXT S LEXOK=1 Q
. S LEXORD=$$SCH(LEXT)
. I $L(LEXT),$D(^LEX(757.01,LEXOE,5,"B",LEXT)) S LEXOK=1 Q
. I $L(LEXT),$E($O(^LEX(757.01,LEXOE,5,"B",($E(LEXT,1,($L(LEXT)-1))_$C($A($E(LEXT,$L(LEXT)))-1)_"~"))),1,$L(LEXT))=LEXT S LEXOK=1 Q
. I $L(LEXT),$L(LEXORD) D I $E(LEXORD,1,$L(LEXT))=LEXT S LEXOK=1 Q
. . S LEXORD=$O(^LEX(757.01,LEXOE,5,"B",LEXORD))
. F S LEXE=$O(^LEX(757.01,"AMC",LEXM,LEXE)) Q:+LEXE=0!(LEXOK) D Q:LEXOK
. . Q:+($P($G(^LEX(757.01,LEXE,1)),"^",2))>3
. . S LEXC=$$UP(^LEX(757.01,LEXE,0))
. . I LEXC[(" "_LEXT) S LEXOK=1 Q
. . I LEXC[("-"_LEXT) S LEXOK=1 Q
. . I LEXC[("("_LEXT) S LEXOK=1 Q
. . I LEXC[("/"_LEXT) S LEXOK=1 Q
. . I $E(LEXC,1,$L(LEXT))=LEXT S LEXOK=1 Q
Q
DES(LEXX) ; Get description flag
N LEXDES,LEXE,LEXM S LEXDES="",LEXE=+LEXX
S LEXM=$P($G(^LEX(757.01,+($G(LEXX)),1)),"^",1)
S LEXM=+($G(^LEX(757,+($G(LEXM)),0)))
S:$D(^LEX(757.01,LEXM,3)) LEXDES="*"
S LEXX=$G(LEXDES) Q LEXX
SCH(LEXX) ; Search for LEXX a $Orderable variable
S:$G(LEXX)'?1N.N LEXX=$E(LEXX,1,($L(LEXX)-1))_$C($A($E(LEXX,$L(LEXX)))-1)_"~"
S:$G(LEXX)?1N.N LEXX=LEXX-.0000000000000009 N LEXIGN
Q LEXX
Q
KWO(X,Y) ; Keyword only (SW)
N LEXS,LEXI,LEXE,LEXK,LEXEC,LEXKC S LEXS=$G(X) Q:$L(LEXS)<6 -1
Q:'$D(^LEX(757.01,"AWRD",LEXS)) -2
S LEXI=+($G(Y)) Q:+LEXI'>0 -3
Q:'$D(^LEX(757.01,"AWRD",LEXS,LEXI)) -4
Q:"^757.01^"'[("^"_$G(LEXLKFL)_"^") -5
S (LEXEC,LEXKC,LEXE)=0 F S LEXE=$O(^LEX(757.01,"AWRD",LEXS,LEXI,LEXE)) Q:+LEXE=0 D
. N LEXD S LEXD=$D(^LEX(757.01,"AWRD",LEXS,LEXI,LEXE))
. S:LEXD#10>0 LEXEC=+($G(LEXEC))+1 Q:LEXD=1
. S LEXK="" F S LEXK=$O(^LEX(757.01,"AWRD",LEXS,LEXI,LEXE,LEXK)) Q:'$L(LEXK) D
. . S LEXEC=+($G(LEXEC))+1 S:LEXK?1N.N LEXKC=+($G(LEXKC))+1
Q:+($G(LEXKC))>0&($G(LEXKC)=$G(LEXEC)) 1
Q 0
UP(X) ; Uppercase
Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
LEXALK ;ISL/KER - Look-up by Words ;04/21/2014
+1 ;;2.0;LEXICON UTILITY;**2,3,6,25,51,80**;Sep 23, 1996;Build 10
+2 ;
+3 ; Global Variables
+4 ; ^LEX( N/A
+5 ; ^TMP("LEXFND") SACC 2.3.2.5.1
+6 ; ^TMP("LEXHIT") SACC 2.3.2.5.1
+7 ; ^TMP("LEXSCH") SACC 2.3.2.5.1
+8 ;
+9 ; External References
+10 ; $$DT^XLFDT ICR 10103
+11 ; ^LEX( ICR 1571
+12 ;
+13 ; Local Variables NEWed or KILLed Elsewhere
+14 ; LEXFIL NEWed in LEXA
+15 ; LEXFILR NEWed in LEXA
+16 ; LEXTKN KILLed in LEXA
+17 ; LEXTKNS KILLed in LEXA
+18 ; LEXVDT NEWed in LEXA
+19 ;
+20 ; Special Lookup variables
+21 ;
+22 ; LEXSUB Vocabulary
+23 ; LEXSHCT Shortcuts
+24 ; LEXDICS Screen - DIC("S") Format
+25 ; LEXSHOW Displayable codes
+26 ; LEXLKFL File Number
+27 ; LEXLKGL Global Root
+28 ; LEXLKMD Use Modifiers
+29 ; LEXLKIX Index to use during lookup
+30 ; LEXLKSH User Input (Search String)
+31 ; LEXTKN( Tokens in order of frequency of use
+32 ; LEXTKNS( Tokens in order of entry
+33 ;
EN ; Look-up user input
+1 NEW LEXSUB,LEXSHCT,LEXDICS,LEXSHOW,LEXLKFL,LEXLKGL,LEXLKMD,LEXLKIX,LEXLKSH
+2 DO VDT^LEXU
SET LEXLKSH=$GET(^TMP("LEXSCH",$JOB,"SCH",0))
IF $LENGTH(LEXLKSH)<2
Begin DoDot:1
+3 SET LEX("ERR",0)=+($GET(LEX("ERR",0)))+1
SET LEX("ERR",LEX("ERR",0))="User input missing or invalid"
End DoDot:1
QUIT
+4 SET LEXSUB=$GET(^TMP("LEXSCH",$JOB,"VOC",0))
IF LEXSUB=""
SET LEXSUB="WRD"
+5 SET LEXLKMD=+($GET(^TMP("LEXSCH",$JOB,"MOD",0)))
+6 SET LEXLKIX=$GET(^TMP("LEXSCH",$JOB,"IDX",0))
IF LEXLKIX=""
SET LEXLKIX="AWRD"
+7 SET LEXLKFL=$GET(^TMP("LEXSCH",$JOB,"FLN",0))
IF LEXLKFL'["757."
Begin DoDot:1
+8 SET LEX("ERR",0)=+($GET(LEX("ERR",0)))+1
SET LEX("ERR",LEX("ERR",0))="File number missing or invalid"
End DoDot:1
QUIT
+9 SET LEXLKGL=$GET(^TMP("LEXSCH",$JOB,"GBL",0))
IF LEXLKGL'["LEX(757."
Begin DoDot:1
+10 SET LEX("ERR",0)=+($GET(LEX("ERR",0)))+1
SET LEX("ERR",LEX("ERR",0))="Global location missing or invalid"
End DoDot:1
QUIT
+11 SET LEXSHOW=$GET(^TMP("LEXSCH",$JOB,"DIS",0))
+12 DO TOKEN^LEXAM(LEXLKSH)
+13 NEW LEXOK,LEXDES,LEXDSP,LEXT,LEXO,LEXI,LEXE,LEXM,LEXME
+14 NEW LEXSS
IF $GET(LEXLKFL)'["757."
QUIT
+15 SET LEXSS=""
IF $DATA(LEXTKNS(0))
Begin DoDot:1
+16 NEW LEXI
FOR LEXI=1:1:LEXTKNS(0)
SET LEXSS=LEXSS_" "_LEXTKNS(LEXI)
+17 SET LEXSS=$EXTRACT(LEXSS,2,$LENGTH(LEXSS))
End DoDot:1
+18 SET ^TMP("LEXSCH",$JOB,"SCH",0)=$GET(LEXSS)
+19 SET LEXT=$GET(LEXTKN(1))
SET LEXO=$$SCH(LEXT)
+20 IF $GET(LEXSHCT)=""
IF $GET(LEXTKN(0))=1
IF $DATA(^LEX(LEXLKFL,LEXLKIX,LEXT))
DO EXACT
+21 IF $GET(LEXSHCT)=""
IF $GET(LEXTKN(0))=1
IF $DATA(^LEX(LEXLKFL,LEXLKIX,LEXT))
Begin DoDot:1
+22 DO EXACT
+23 IF +($ORDER(^LEX(757.01,"ASL",LEXT,0)))>6000
QUIT
+24 DO TOKEN
End DoDot:1
GOTO END
+25 DO TOKEN
END ; End look-up by word
+1 IF $DATA(^TMP("LEXFND",$JOB))
DO BEG^LEXAL
+2 IF '$DATA(^TMP("LEXFND",$JOB))
Begin DoDot:1
+3 KILL LEX,^TMP("LEXFND",$JOB),^TMP("LEXHIT",$JOB)
SET LEX=0
End DoDot:1
+4 IF +($GET(^TMP("LEXSCH",$JOB,"UNR",0)))>0&($LENGTH($GET(^TMP("LEXSCH",$JOB,"NAR",0))))
SET LEX("NAR")=$GET(^TMP("LEXSCH",$JOB,"NAR",0))
+5 QUIT
EXACT ; Main loop throuth TOKENS that equal LEXT
+1 SET LEXO=$$SCH(LEXT)
FOR
SET LEXO=$ORDER(^LEX(LEXLKFL,LEXLKIX,LEXO))
IF LEXO'=LEXT
QUIT
DO IEN
+2 QUIT
TOKEN ; Main loop though TOKENS containing LEXT
+1 SET LEXO=$$SCH(LEXT)
FOR
SET LEXO=$ORDER(^LEX(LEXLKFL,LEXLKIX,LEXO))
IF LEXO'[LEXT!(LEXO="")
QUIT
DO IEN
+2 QUIT
IEN ; Loop throuth Internal Entry Numbers
+1 SET LEXI=0
FOR
SET LEXI=$ORDER(^LEX(LEXLKFL,LEXLKIX,LEXO,LEXI))
IF +LEXI=0
QUIT
Begin DoDot:1
+2 IF +($GET(LEXNOKEY))>0
NEW LEXK
SET LEXK=$$KWO($GET(LEXO),$GET(LEXI))
IF LEXK>0
QUIT
+3 DO CHK
End DoDot:1
+4 QUIT
CHK ; Check each token
+1 NEW LEXOK,LEXO,LEXLKT
SET LEXLKT="ALK"
SET LEXE=LEXI
SET LEXOK=1
+2 IF LEXLKGL'["757.01"
SET LEXE=+$GET(^LEX(LEXLKFL,LEXI,0))
IF LEXE=0
QUIT
+3 ; Filter
+4 SET LEXFILR=$$EN^LEXAFIL($GET(LEXFIL),LEXE)
IF LEXFILR=0
QUIT
+5 ; Deactivated
+6 IF '$DATA(LEXIGN)&(+($PIECE($GET(^LEX(757.01,LEXE,1)),"^",5))=1)
QUIT
+7 ; Expression has Modifiers
+8 NEW LEXEMOD
SET LEXEMOD=+($PIECE($GET(^LEX(757.01,LEXE,1)),"^",6))
+9 SET LEXM=+($GET(^LEX(757.01,LEXE,1)))
+10 SET LEXME=+($GET(^LEX(757,LEXM,0)))
+11 ; Check not exact match
+12 IF $LENGTH($GET(^TMP("LEXSCH",$JOB,"EXM",0)))
IF +(^TMP("LEXSCH",$JOB,"EXM",0))=LEXE
QUIT
+13 IF $LENGTH($GET(^TMP("LEXSCH",$JOB,"EXC",0)))
IF +(^TMP("LEXSCH",$JOB,"EXC",0))=LEXE
QUIT
+14 ; Check tokens
+15 SET LEXOK=1
DO CHKTKNS(LEXE)
+16 ; If the expression failed the search, and the expression has
+17 ; modifiers then check the modifiers
+18 IF +LEXOK=0&(+($GET(LEXEMOD))>0)&(+($GET(LEXTKN(0)))>1)
DO CHKMOD^LEXAMD2
+19 IF 'LEXOK
QUIT
+20 ; Description (*)
+21 SET LEXDES=$$DES^LEXASC(LEXE)
+22 ; Display of codes
+23 SET LEXDSP=$$SO^LEXASO(LEXE,$GET(LEXSHOW),1,$GET(LEXVDT))
+24 DO ADDL^LEXAL(LEXE,LEXDES,LEXDSP)
+25 QUIT
CHKTKNS(LEXE) ; Check tokens
+1 NEW LEXM,LEXNOKEY
SET LEXM=+($GET(^LEX(757.01,LEXE,1)))
IF LEXM=0
QUIT
+2 NEW LEXI,LEXOE,LEXC
SET LEXOE=LEXE
SET LEXI=1
+3 FOR
SET LEXI=$ORDER(LEXTKN(LEXI))
IF +LEXI=0!('LEXOK)
QUIT
Begin DoDot:1
+4 NEW LEXT,LEXE,LEXORD
SET LEXT=LEXTKN(LEXI)
SET LEXE=0
SET LEXOK=0
+5 SET LEXC=$$UP(^LEX(757.01,LEXOE,0))
+6 IF LEXC[(" "_LEXT)
SET LEXOK=1
QUIT
+7 IF LEXC[("-"_LEXT)
SET LEXOK=1
QUIT
+8 IF LEXC[("("_LEXT)
SET LEXOK=1
QUIT
+9 IF LEXC[("/"_LEXT)
SET LEXOK=1
QUIT
+10 IF $EXTRACT(LEXC,1,$LENGTH(LEXT))=LEXT
SET LEXOK=1
QUIT
+11 SET LEXORD=$$SCH(LEXT)
+12 IF $LENGTH(LEXT)
IF $DATA(^LEX(757.01,LEXOE,5,"B",LEXT))
SET LEXOK=1
QUIT
+13 IF $LENGTH(LEXT)
IF $EXTRACT($ORDER(^LEX(757.01,LEXOE,5,"B",($EXTRACT(LEXT,1,($LENGTH(LEXT)-1))_$CHAR($ASCII($EXTRACT(LEXT,$LENGTH(LEXT)))-1)_"~"))),1,$LENGTH(LEXT))=LEXT
SET LEXOK=1
QUIT
+14 IF $LENGTH(LEXT)
IF $LENGTH(LEXORD)
Begin DoDot:2
+15 SET LEXORD=$ORDER(^LEX(757.01,LEXOE,5,"B",LEXORD))
End DoDot:2
IF $EXTRACT(LEXORD,1,$LENGTH(LEXT))=LEXT
SET LEXOK=1
QUIT
+16 FOR
SET LEXE=$ORDER(^LEX(757.01,"AMC",LEXM,LEXE))
IF +LEXE=0!(LEXOK)
QUIT
Begin DoDot:2
+17 IF +($PIECE($GET(^LEX(757.01,LEXE,1)),"^",2))>3
QUIT
+18 SET LEXC=$$UP(^LEX(757.01,LEXE,0))
+19 IF LEXC[(" "_LEXT)
SET LEXOK=1
QUIT
+20 IF LEXC[("-"_LEXT)
SET LEXOK=1
QUIT
+21 IF LEXC[("("_LEXT)
SET LEXOK=1
QUIT
+22 IF LEXC[("/"_LEXT)
SET LEXOK=1
QUIT
+23 IF $EXTRACT(LEXC,1,$LENGTH(LEXT))=LEXT
SET LEXOK=1
QUIT
End DoDot:2
IF LEXOK
QUIT
End DoDot:1
IF 'LEXOK
QUIT
+24 QUIT
DES(LEXX) ; Get description flag
+1 NEW LEXDES,LEXE,LEXM
SET LEXDES=""
SET LEXE=+LEXX
+2 SET LEXM=$PIECE($GET(^LEX(757.01,+($GET(LEXX)),1)),"^",1)
+3 SET LEXM=+($GET(^LEX(757,+($GET(LEXM)),0)))
+4 IF $DATA(^LEX(757.01,LEXM,3))
SET LEXDES="*"
+5 SET LEXX=$GET(LEXDES)
QUIT LEXX
SCH(LEXX) ; Search for LEXX a $Orderable variable
+1 IF $GET(LEXX)'?1N.N
SET LEXX=$EXTRACT(LEXX,1,($LENGTH(LEXX)-1))_$CHAR($ASCII($EXTRACT(LEXX,$LENGTH(LEXX)))-1)_"~"
+2 IF $GET(LEXX)?1N.N
SET LEXX=LEXX-.0000000000000009
NEW LEXIGN
+3 QUIT LEXX
+4 QUIT
KWO(X,Y) ; Keyword only (SW)
+1 NEW LEXS,LEXI,LEXE,LEXK,LEXEC,LEXKC
SET LEXS=$GET(X)
IF $LENGTH(LEXS)<6
QUIT -1
+2 IF '$DATA(^LEX(757.01,"AWRD",LEXS))
QUIT -2
+3 SET LEXI=+($GET(Y))
IF +LEXI'>0
QUIT -3
+4 IF '$DATA(^LEX(757.01,"AWRD",LEXS,LEXI))
QUIT -4
+5 IF "^757.01^"'[("^"_$GET(LEXLKFL)_"^")
QUIT -5
+6 SET (LEXEC,LEXKC,LEXE)=0
FOR
SET LEXE=$ORDER(^LEX(757.01,"AWRD",LEXS,LEXI,LEXE))
IF +LEXE=0
QUIT
Begin DoDot:1
+7 NEW LEXD
SET LEXD=$DATA(^LEX(757.01,"AWRD",LEXS,LEXI,LEXE))
+8 IF LEXD#10>0
SET LEXEC=+($GET(LEXEC))+1
IF LEXD=1
QUIT
+9 SET LEXK=""
FOR
SET LEXK=$ORDER(^LEX(757.01,"AWRD",LEXS,LEXI,LEXE,LEXK))
IF '$LENGTH(LEXK)
QUIT
Begin DoDot:2
+10 SET LEXEC=+($GET(LEXEC))+1
IF LEXK?1N.N
SET LEXKC=+($GET(LEXKC))+1
End DoDot:2
End DoDot:1
+11 IF +($GET(LEXKC))>0&($GET(LEXKC)=$GET(LEXEC))
QUIT 1
+12 QUIT 0
UP(X) ; Uppercase
+1 QUIT $TRANSLATE(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")