LEXXM ;ISL/KER - Convert Text to Mix Case ;05/23/2017
 ;;2.0;General Lexicon Utilities;**80,103**;Sep 23, 1996;Build 2
 ;               
 ; Global Variables
 ;    None
 ;               
 ; External References
 ;    $$CODEN^ICDCODE     ICR   3990
 ;    $$ICDDX^ICDCODE     ICR   3990
 ;    $$ICDOP^ICDCODE     ICR   3990
 ;    ICDD^ICDCODE        ICR   3990
 ;    $$CPT^ICPTCOD       ICR   1995
 ;    CPTD^ICPTCOD        ICR   1995
 ;    $$MOD^ICPTMOD       ICR   1996
 ;    MODD^ICPTMOD        ICR   1996
 ;    $$DT^XLFDT          ICR  10103
 ;               
 Q
 ;                
 ; TXT                  General Text
 ;       Input    X     Text
 ;                L     Text Length (>19 & <80) (default $L(X))
 ;       Output   Y()   Mix case diagnosis
 ;               
 ; LEX                  Lexicon Text
 ;       Input    X     Lexicon IEN
 ;                L     Text Length (>19 & <80) (default $L(X))
 ;       Output   Y()   Mix case diagnosis
 ;               
 ; For the Entry Points ICDDX1, ICDDX2, ICDOP1, ICDOP2, ICPT1,
 ; ICPT2, MOD1, and MOD2 use:
 ;                   
 ;       Input    X     File IEN
 ;                V     Version date (default = TODAY)
 ;                L     Text Length (>19 & <80) (default $L(X))
 ;       Output   Y()   Mix case text
 ;                          
 ; Patch LEX*2.0*103 re-directs the calls to LEXXMC
 ; 
MIX(X) ; Mix Case any length
 N Y S X=$G(X) D FULL(X) S X=Y
 Q X
LEG(X) ; Mix Case (Legacy)
 N LEG S LEG="" S X=$$MIX($G(X))
 Q X
TXT(X,L) ; Convert Text to Mixed Case
 N LOW,LEN K LOW,Y S Y(1)=$$CASE($TR($G(X),"""","'")),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN D PR^LEXU(.Y,LEN)
 Q
FULL(X) ; Convert Text to Mixed Case
 N LOW,LEN K LOW,Y S Y=$$CASE($TR($G(X),"""","'"))
 Q
LEX(X,L) ; Convert Expression to Mixed Case
 K Y N I,IEN,VDT,LEN,LOW K LOW,Y S IEN=+($G(X)),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN Q:+IEN'>0  Q:'$D(^LEX(757.01,+IEN,0))
 S Y(1)=$$EXP(X) D PR^LEXU(.Y,LEN)
 Q
ICDDX1(X,V,L) ; Convert ICD Diagnosis to Mixed Case
 N CODE,IEN,VDT,LEN,ICDDX,LOW K LOW,Y S (CODE,IEN)=$G(X),VDT=$G(V),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN S:VDT'?7N VDT=$$DT^XLFDT
 S IEN=$P($$CODEN^ICDCODE(IEN,80),"~",1),X="",ICDDX=$P($$ICDDX^ICDCODE(+IEN,VDT,,0),"^",4) Q:'$L(ICDDX)  S Y(1)=$$CASE(ICDDX) D PR^LEXU(.Y,LEN)
 Q
ICDDX2(X,V,L) ; Convert ICD Diagnosis Description to Mixed Case
 N CODE,I,IEN,VDT,LEN,ND,LOW K LOW,Y S (CODE,IEN)=$G(X),VDT=$G(V),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN S:VDT'?7N VDT=$$DT^XLFDT
 S IEN=$P($$CODEN^ICDCODE(IEN,80),"~",1),CODE=$P($$ICDDX^ICDCODE(+IEN,,0),"^",2) D ICDD^ICDCODE(CODE,"ND",VDT)
 K Y S I=0 F  S I=$O(ND(I)) Q:+I'>0  Q:$$TRIM($G(ND(I)))=""  S:I>1 LOW=1 S Y(I)=$$CASE($G(ND(I))) K LOW
 D PR^LEXU(.Y,LEN)
 Q
ICDOP1(X,V,L) ; Convert ICD Procedure to Mixed Case
 N CODE,IEN,VDT,LEN,ICDOP,LOW K LOW,Y S (CODE,IEN)=$G(X),VDT=$G(V),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN S:VDT'?7N VDT=$$DT^XLFDT
 S IEN=$P($$CODEN^ICDCODE(IEN,80.1),"~",1),X="",ICDOP=$P($$ICDOP^ICDCODE(+IEN,VDT,,0),"^",5) Q:'$L(ICDOP)  S Y(1)=$$CASE(ICDOP) D PR^LEXU(.Y,LEN)
 Q
ICDOP2(X,V,L) ; Convert ICD Procedure Description to Mixed Case
 N CODE,I,IEN,VDT,LEN,ND,LOW K LOW,Y S (CODE,IEN)=$G(X),VDT=$G(V),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN S:VDT'?7N VDT=$$DT^XLFDT
 S IEN=$P($$CODEN^ICDCODE(IEN,80.1),"~",1),CODE=$P($$ICDOP^ICDCODE(+IEN,VDT,,0),"^",2) D ICDD^ICDCODE(CODE,"ND",VDT)
 K Y S I=0 F  S I=$O(ND(I)) Q:+I'>0  Q:$$TRIM($G(ND(I)))=""  S:I>1 LOW=1 S Y(I)=$$CASE($G(ND(I))) K LOW
 D PR^LEXU(.Y,LEN)
 Q
ICPT1(X,V,L) ; Convert CPT Procedure to Mixed Case
 N CODE,IEN,VDT,LEN,ICPT,LOW K LOW,Y S (CODE,IEN)=$G(X),VDT=$G(V),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN S:VDT'?7N VDT=$$DT^XLFDT
 S X="",ICPT=$$CPT^ICPTCOD(+IEN,VDT),IEN=+ICPT,CODE=$P(ICPT,"^",2),ICPT=$P(ICPT,"^",3) Q:'$L(ICPT)  S Y(1)=$$CASE(ICPT) D PR^LEXU(.Y,LEN)
 Q
ICPT2(X,V,L) ; Convert CPT Procedure Description to Mixed Case
 N CODE,I,IEN,VDT,LEN,ND,LOW K LOW,Y S (CODE,IEN)=$G(X),VDT=$G(V),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN S:VDT'?7N VDT=$$DT^XLFDT
 S CODE=$P($$CPT^ICPTCOD(+IEN,VDT),"^",2) D CPTD^ICPTCOD(CODE,"ND",,VDT)
 K Y S I=0 F  S I=$O(ND(I)) Q:+I'>0  Q:$$TRIM($G(ND(I)))=""  S:I>1 LOW=1 S Y(I)=$$CASE($G(ND(I))) K LOW
 D PR^LEXU(.Y,LEN)
 Q
MOD1(X,V,L) ; Convert CPT Modifier to Mixed Case
 N CODE,IEN,VDT,LEN,MOD,LOW K LOW,Y S (CODE,IEN)=$G(X),VDT=$G(V),LEN=+($G(L))
 K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN S:VDT'?7N VDT=$$DT^XLFDT
 S X="",MOD=$$MOD^ICPTMOD(IEN,"I",VDT,1) S MOD=$P(MOD,"^",3) Q:'$L(MOD)  S Y(1)=$$CASE(MOD) D PR^LEXU(.Y,LEN)
 Q
MOD2(X,V,L) ; Convert CPT Modifier Description to Mixed Case
 N CODE,I,IEN,VDT,LEN,ND,LOW K LOW,Y S (CODE,IEN)=$G(X),VDT=$G(V),LEN=+($G(L)) K:$G(LEN)'>19 LEN K:$G(LEN)'<80 LEN S:VDT'?7N VDT=$$DT^XLFDT
 S CODE=$P($$MOD^ICPTMOD(+IEN,"I",VDT,1),"^",2) D MODD^ICPTMOD(CODE,"ND",,VDT)
 K Y S I=0 F  S I=$O(ND(I)) Q:+I'>0  Q:$$TRIM($G(ND(I)))=""  S:I>1 LOW=1 S Y(I)=$$CASE($G(ND(I))) K LOW
 D PR^LEXU(.Y,LEN)
 Q
 ;             
EXP(X) ; Get Case for Expression            X = IEN in 757.01
 N IEN,IEN,TXT,IN S IEN=$G(X),(TXT,IN)=$G(^LEX(757.01,+IEN,0)) Q:'$L(TXT)  K PAR S (TXT,X)=$$CASE(TXT) S:'$L(X) X=IN
 Q X
CASE(X) ; Get Case for String                X = String of Text
 I '$D(LEG) S X=$$MIX^LEXXMC($G(X)) Q X
 K PAR N C,CHR,CT,LEXIN,LEXCTL,LEXCHR,I,L,PH,REM,STO,STR,TRL,TXT,W,WD,UIN,OIN,LEXPRE,LEXORG,LEXNXT,LEXUSE
 S OIN=$$TRIM($G(X)) S (UIN,STR)=$$UP(OIN) Q:'$L(STR) X  S STR=$$SW1(STR),L=$L(STR),PAR(0)=0,(LEXIN,PAR("T",1))=STR
 S TRL="" F  Q:$E(STR,$L(STR))'?1P  S TRL=$E(STR,$L(STR))_TRL,STR=$E(STR,1,($L(STR)-1))
 S PAR("TRL")=$G(TRL) S I=0 F  Q:I>L  Q:'$L(STR)  D  Q:'$L(STR)
 . S I=I+1 I I=$L(STR) D  Q
 . . S CT=$O(PAR(" "),-1)+1 S (STO,PAR(CT))=STR,PAR(0)=CT,STR=""
 . . S PH=$G(PAR((CT-1),"C"))_$G(PAR(CT))_$G(PAR(CT,"C")),PAR(CT,"A")=PH
 . . S LEXIN=$G(PAR("T",1)),LEXCTL=$G(PAR(CT,"A")),LEXCHR=$G(PAR(CT,"C"))
 . . F W=1:1:$L(STO," ") D
 . . . N NWD S WD=$P(STO," ",W),LEXORG=$G(PAR(CT,"W",(+($G(W))-1))),LEXPRE=$$UP(LEXORG)
 . . . S LEXNXT="",NWD=$$GETC(WD),PAR(CT,"W",W)=NWD
 . S C=$E(STR,I)
 . I C?1P&(C'=" ") D
 . . S:C="(" C=" (" S:C="[" C=" [" S:C="&" C=" &"
 . . N REM,STO S CT=$O(PAR(" "),-1)+1,(STO,PAR(CT))=$E(STR,1,(I-1)),PAR(0)=CT
 . . S PH=$G(PAR(CT-1,"C"))_$G(PAR(CT))_$G(PAR(CT,"C")),PAR(CT,"A")=PH
 . . S LEXIN=$G(PAR("T",1)),LEXCTL=$G(PAR(CT,"A")),LEXCHR=C
 . . F W=1:1:$L(STO," ") D
 . . . N NWD S WD=$P(STO," ",W),LEXPRE=$$UP($G(PAR(CT,"W",(+($G(W))-1))))
 . . . S NWD=$$GETC(WD),PAR(CT,"W",W)=NWD
 . . S (REM,STR)=$E(STR,I+1,$L(STR)),I=0
 . . F  Q:$E(STR,1)'=" "  S C=C_" " S (REM,STR)=$E(STR,2,$L(STR))
 . . S PAR(CT,"C")=C
 S TXT="",CT=0 F  S CT=$O(PAR(CT)) Q:+CT'>0  D
 . N STR,TR S STR="",TR=$G(PAR(CT,"C")),W=0 F  S W=$O(PAR(CT,"W",W)) Q:+W'>0  S STR=STR_" "_$G(PAR(CT,"W",W))
 . S STR=$$TRIM(STR)_TR,PAR(CT,"B")=STR
 . S TXT=TXT_STR K PAR(CT)
 S TXT=TXT_$G(PAR("TRL")),X=$$SW3(TXT) K PAR F CHR="-","+" D
 . I UIN[(" "_CHR),X[CHR,X'[(" "_CHR) D
 . . N TXT S TXT=$P(X,CHR,1) F I=2:1 Q:'$L($P(X,CHR,I))  S TXT=TXT_(" "_CHR)_$P(X,CHR,I)
 . . S X=TXT
 S X=$$FN(X),X=$$DBL(X) F CHR="~","!","@","#","$","^","&","*","_","-","+","=","|","\",";",":",",","." S X=$$TM(X,CHR)
 Q X
GETC(X) ; Set to Mixed/lower/UPPER case
 N LEXTAG,LEXRTN,LEXLEN,Y Q:$L($G(X))'>0 X  S X=$$UP($G(X)),Y="",LEXLEN=$L(X) S:LEXLEN>12 LEXLEN=12
 S LEXUSE=$$UP($$USE),LEXNXT=$$TP($$TM($P($G(UIN),LEXUSE,2,4000)))
 S LEXTAG="T"_$L(X),LEXRTN="LEXXM"_$L(X)
 S:$L($G(X))>9 LEXTAG="TM" S:$L($G(X))>5 LEXRTN="LEXXM6" S LEXRTN=LEXTAG_"^"_LEXRTN D @LEXRTN I $L(Y) S X=$$SW2(Y) Q X
 S X=$$MX(X)
 Q X
 ;             
SW1(X) ; Switch Text (before setting case)
 S X=$$SW1^LEXXMM($G(X)) Q X
SW2(X) ; Switch Text (after setting case)
 S X=$$SW2^LEXXMM($G(X)) Q X
SW3(X) ; Switch Text (after assembling string)
 S X=$$SW3^LEXXMM($G(X)) Q X
EW(X) ; Display Word Usage
 D EW^LEXXMM($G(X)) Q
 ;             
USE(X) ; Used
 N STR,SEG,CUR S STR="",SEG=0 F  S SEG=$O(PAR(SEG)) Q:+SEG'>0  D
 . N WC S WC=0  F  S WC=$O(PAR(SEG,"W",WC)) Q:+WC'>0  D
 . . N WD S WD=$$UP($G(PAR(SEG,"W",WC)))
 . . S:$E(STR,$L(STR))?1A!($E(STR,$L(STR))?1N) STR=$G(STR)_" "_WD
 . . S:$E(STR,$L(STR))'?1A&($E(STR,$L(STR))'?1N) STR=$G(STR)_WD
 . S:$L($G(PAR(SEG,"C"))) STR=STR_$G(PAR(SEG,"C"))
 S CUR=$G(WD) I $L(CUR) D
 . S:$E(STR,$L(STR))?1A!($E(STR,$L(STR))?1N) STR=$G(STR)_" "_CUR
 . S:$E(STR,$L(STR))'?1A&($E(STR,$L(STR))'?1N) STR=$G(STR)_CUR
 S X=$$TM(STR)
 Q X
 Q X
FN(X) ; Footnote Removed
 S X=$G(X) Q:X'[")" X  N ORG,FIR,LAS,TRM,L,NUM,OUT,REP,WTH S (OUT,ORG)=X,L=$L(X,")"),FIR=$P(X,")",1,(L-1))_")",LAS=$P(X,")",L),TRM=$$TRIM(LAS),X=ORG I TRM=LAS,$E(LAS,1)?1N,+LAS=LAS S OUT=FIR
 F NUM=1:1:9 S REP=")"_NUM_" ",WTH=") " I OUT[REP S OUT=$$SWAP^LEXXMM(OUT,REP,WTH)
 S X=OUT
 Q X
LO(X) ; Lower Case
 Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
UP(X) ; Upper Case
 Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
MX(X) ; Mixed Case
 Q $TR($E(X,1),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")_$TR($E(X,2,$L(X)),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
LD(X) ; Leading Character
 Q $TR($E(X,1),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")_$E(X,2,$L(X))
TRIM(X) ; Trim Spaces
 S X=$G(X) F  Q:$E(X,1)'=" "  S X=$E(X,2,$L(X))
 F  Q:$E(X,$L(X))'=" "  S X=$E(X,1,($L(X)-1))
 Q X
TP(X) ; Trim Punctuation
 S X=$G(X) Q:'$L(X) X  F  Q:$E(X,1)'?1P  S X=$E(X,2,$L(X))
 F  Q:$E(X,$L(X))'?1P  S X=$E(X,1,($L(X)-1))
 Q X
TM(X,Y) ; Trim Character Y - Default " "
 S X=$G(X),Y=$G(Y) Q:$L(Y)&(X'[Y) X  S X=$G(X) Q:X="" X  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
DBL(X) ; Double Spaces
 S X=$G(X) F  Q:X'["  "  S X=$P(X,"  ",1)_" "_$P(X,"  ",2,4000)
 S X=$$TRIM(X)
 Q X
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLEXXM   9931     printed  Sep 23, 2025@19:46:15                                                                                                                                                                                                       Page 2
LEXXM     ;ISL/KER - Convert Text to Mix Case ;05/23/2017
 +1       ;;2.0;General Lexicon Utilities;**80,103**;Sep 23, 1996;Build 2
 +2       ;               
 +3       ; Global Variables
 +4       ;    None
 +5       ;               
 +6       ; External References
 +7       ;    $$CODEN^ICDCODE     ICR   3990
 +8       ;    $$ICDDX^ICDCODE     ICR   3990
 +9       ;    $$ICDOP^ICDCODE     ICR   3990
 +10      ;    ICDD^ICDCODE        ICR   3990
 +11      ;    $$CPT^ICPTCOD       ICR   1995
 +12      ;    CPTD^ICPTCOD        ICR   1995
 +13      ;    $$MOD^ICPTMOD       ICR   1996
 +14      ;    MODD^ICPTMOD        ICR   1996
 +15      ;    $$DT^XLFDT          ICR  10103
 +16      ;               
 +17       QUIT 
 +18      ;                
 +19      ; TXT                  General Text
 +20      ;       Input    X     Text
 +21      ;                L     Text Length (>19 & <80) (default $L(X))
 +22      ;       Output   Y()   Mix case diagnosis
 +23      ;               
 +24      ; LEX                  Lexicon Text
 +25      ;       Input    X     Lexicon IEN
 +26      ;                L     Text Length (>19 & <80) (default $L(X))
 +27      ;       Output   Y()   Mix case diagnosis
 +28      ;               
 +29      ; For the Entry Points ICDDX1, ICDDX2, ICDOP1, ICDOP2, ICPT1,
 +30      ; ICPT2, MOD1, and MOD2 use:
 +31      ;                   
 +32      ;       Input    X     File IEN
 +33      ;                V     Version date (default = TODAY)
 +34      ;                L     Text Length (>19 & <80) (default $L(X))
 +35      ;       Output   Y()   Mix case text
 +36      ;                          
 +37      ; Patch LEX*2.0*103 re-directs the calls to LEXXMC
 +38      ; 
MIX(X)    ; Mix Case any length
 +1        NEW Y
           SET X=$GET(X)
           DO FULL(X)
           SET X=Y
 +2        QUIT X
LEG(X)    ; Mix Case (Legacy)
 +1        NEW LEG
           SET LEG=""
           SET X=$$MIX($GET(X))
 +2        QUIT X
TXT(X,L)  ; Convert Text to Mixed Case
 +1        NEW LOW,LEN
           KILL LOW,Y
           SET Y(1)=$$CASE($TRANSLATE($GET(X),"""","'"))
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           DO PR^LEXU(.Y,LEN)
 +2        QUIT 
FULL(X)   ; Convert Text to Mixed Case
 +1        NEW LOW,LEN
           KILL LOW,Y
           SET Y=$$CASE($TRANSLATE($GET(X),"""","'"))
 +2        QUIT 
LEX(X,L)  ; Convert Expression to Mixed Case
 +1        KILL Y
           NEW I,IEN,VDT,LEN,LOW
           KILL LOW,Y
           SET IEN=+($GET(X))
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if +IEN'>0
               QUIT 
           if '$DATA(^LEX(757.01,+IEN,0))
               QUIT 
 +2        SET Y(1)=$$EXP(X)
           DO PR^LEXU(.Y,LEN)
 +3        QUIT 
ICDDX1(X,V,L) ; Convert ICD Diagnosis to Mixed Case
 +1        NEW CODE,IEN,VDT,LEN,ICDDX,LOW
           KILL LOW,Y
           SET (CODE,IEN)=$GET(X)
           SET VDT=$GET(V)
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if VDT'?7N
               SET VDT=$$DT^XLFDT
 +2        SET IEN=$PIECE($$CODEN^ICDCODE(IEN,80),"~",1)
           SET X=""
           SET ICDDX=$PIECE($$ICDDX^ICDCODE(+IEN,VDT,,0),"^",4)
           if '$LENGTH(ICDDX)
               QUIT 
           SET Y(1)=$$CASE(ICDDX)
           DO PR^LEXU(.Y,LEN)
 +3        QUIT 
ICDDX2(X,V,L) ; Convert ICD Diagnosis Description to Mixed Case
 +1        NEW CODE,I,IEN,VDT,LEN,ND,LOW
           KILL LOW,Y
           SET (CODE,IEN)=$GET(X)
           SET VDT=$GET(V)
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if VDT'?7N
               SET VDT=$$DT^XLFDT
 +2        SET IEN=$PIECE($$CODEN^ICDCODE(IEN,80),"~",1)
           SET CODE=$PIECE($$ICDDX^ICDCODE(+IEN,,0),"^",2)
           DO ICDD^ICDCODE(CODE,"ND",VDT)
 +3        KILL Y
           SET I=0
           FOR 
               SET I=$ORDER(ND(I))
               if +I'>0
                   QUIT 
               if $$TRIM($GET(ND(I)))=""
                   QUIT 
               if I>1
                   SET LOW=1
               SET Y(I)=$$CASE($GET(ND(I)))
               KILL LOW
 +4        DO PR^LEXU(.Y,LEN)
 +5        QUIT 
ICDOP1(X,V,L) ; Convert ICD Procedure to Mixed Case
 +1        NEW CODE,IEN,VDT,LEN,ICDOP,LOW
           KILL LOW,Y
           SET (CODE,IEN)=$GET(X)
           SET VDT=$GET(V)
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if VDT'?7N
               SET VDT=$$DT^XLFDT
 +2        SET IEN=$PIECE($$CODEN^ICDCODE(IEN,80.1),"~",1)
           SET X=""
           SET ICDOP=$PIECE($$ICDOP^ICDCODE(+IEN,VDT,,0),"^",5)
           if '$LENGTH(ICDOP)
               QUIT 
           SET Y(1)=$$CASE(ICDOP)
           DO PR^LEXU(.Y,LEN)
 +3        QUIT 
ICDOP2(X,V,L) ; Convert ICD Procedure Description to Mixed Case
 +1        NEW CODE,I,IEN,VDT,LEN,ND,LOW
           KILL LOW,Y
           SET (CODE,IEN)=$GET(X)
           SET VDT=$GET(V)
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if VDT'?7N
               SET VDT=$$DT^XLFDT
 +2        SET IEN=$PIECE($$CODEN^ICDCODE(IEN,80.1),"~",1)
           SET CODE=$PIECE($$ICDOP^ICDCODE(+IEN,VDT,,0),"^",2)
           DO ICDD^ICDCODE(CODE,"ND",VDT)
 +3        KILL Y
           SET I=0
           FOR 
               SET I=$ORDER(ND(I))
               if +I'>0
                   QUIT 
               if $$TRIM($GET(ND(I)))=""
                   QUIT 
               if I>1
                   SET LOW=1
               SET Y(I)=$$CASE($GET(ND(I)))
               KILL LOW
 +4        DO PR^LEXU(.Y,LEN)
 +5        QUIT 
ICPT1(X,V,L) ; Convert CPT Procedure to Mixed Case
 +1        NEW CODE,IEN,VDT,LEN,ICPT,LOW
           KILL LOW,Y
           SET (CODE,IEN)=$GET(X)
           SET VDT=$GET(V)
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if VDT'?7N
               SET VDT=$$DT^XLFDT
 +2        SET X=""
           SET ICPT=$$CPT^ICPTCOD(+IEN,VDT)
           SET IEN=+ICPT
           SET CODE=$PIECE(ICPT,"^",2)
           SET ICPT=$PIECE(ICPT,"^",3)
           if '$LENGTH(ICPT)
               QUIT 
           SET Y(1)=$$CASE(ICPT)
           DO PR^LEXU(.Y,LEN)
 +3        QUIT 
ICPT2(X,V,L) ; Convert CPT Procedure Description to Mixed Case
 +1        NEW CODE,I,IEN,VDT,LEN,ND,LOW
           KILL LOW,Y
           SET (CODE,IEN)=$GET(X)
           SET VDT=$GET(V)
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if VDT'?7N
               SET VDT=$$DT^XLFDT
 +2        SET CODE=$PIECE($$CPT^ICPTCOD(+IEN,VDT),"^",2)
           DO CPTD^ICPTCOD(CODE,"ND",,VDT)
 +3        KILL Y
           SET I=0
           FOR 
               SET I=$ORDER(ND(I))
               if +I'>0
                   QUIT 
               if $$TRIM($GET(ND(I)))=""
                   QUIT 
               if I>1
                   SET LOW=1
               SET Y(I)=$$CASE($GET(ND(I)))
               KILL LOW
 +4        DO PR^LEXU(.Y,LEN)
 +5        QUIT 
MOD1(X,V,L) ; Convert CPT Modifier to Mixed Case
 +1        NEW CODE,IEN,VDT,LEN,MOD,LOW
           KILL LOW,Y
           SET (CODE,IEN)=$GET(X)
           SET VDT=$GET(V)
           SET LEN=+($GET(L))
 +2        if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if VDT'?7N
               SET VDT=$$DT^XLFDT
 +3        SET X=""
           SET MOD=$$MOD^ICPTMOD(IEN,"I",VDT,1)
           SET MOD=$PIECE(MOD,"^",3)
           if '$LENGTH(MOD)
               QUIT 
           SET Y(1)=$$CASE(MOD)
           DO PR^LEXU(.Y,LEN)
 +4        QUIT 
MOD2(X,V,L) ; Convert CPT Modifier Description to Mixed Case
 +1        NEW CODE,I,IEN,VDT,LEN,ND,LOW
           KILL LOW,Y
           SET (CODE,IEN)=$GET(X)
           SET VDT=$GET(V)
           SET LEN=+($GET(L))
           if $GET(LEN)'>19
               KILL LEN
           if $GET(LEN)'<80
               KILL LEN
           if VDT'?7N
               SET VDT=$$DT^XLFDT
 +2        SET CODE=$PIECE($$MOD^ICPTMOD(+IEN,"I",VDT,1),"^",2)
           DO MODD^ICPTMOD(CODE,"ND",,VDT)
 +3        KILL Y
           SET I=0
           FOR 
               SET I=$ORDER(ND(I))
               if +I'>0
                   QUIT 
               if $$TRIM($GET(ND(I)))=""
                   QUIT 
               if I>1
                   SET LOW=1
               SET Y(I)=$$CASE($GET(ND(I)))
               KILL LOW
 +4        DO PR^LEXU(.Y,LEN)
 +5        QUIT 
 +6       ;             
EXP(X)    ; Get Case for Expression            X = IEN in 757.01
 +1        NEW IEN,IEN,TXT,IN
           SET IEN=$GET(X)
           SET (TXT,IN)=$GET(^LEX(757.01,+IEN,0))
           if '$LENGTH(TXT)
               QUIT 
           KILL PAR
           SET (TXT,X)=$$CASE(TXT)
           if '$LENGTH(X)
               SET X=IN
 +2        QUIT X
CASE(X)   ; Get Case for String                X = String of Text
 +1        IF '$DATA(LEG)
               SET X=$$MIX^LEXXMC($GET(X))
               QUIT X
 +2        KILL PAR
           NEW C,CHR,CT,LEXIN,LEXCTL,LEXCHR,I,L,PH,REM,STO,STR,TRL,TXT,W,WD,UIN,OIN,LEXPRE,LEXORG,LEXNXT,LEXUSE
 +3        SET OIN=$$TRIM($GET(X))
           SET (UIN,STR)=$$UP(OIN)
           if '$LENGTH(STR)
               QUIT X
           SET STR=$$SW1(STR)
           SET L=$LENGTH(STR)
           SET PAR(0)=0
           SET (LEXIN,PAR("T",1))=STR
 +4        SET TRL=""
           FOR 
               if $EXTRACT(STR,$LENGTH(STR))'?1P
                   QUIT 
               SET TRL=$EXTRACT(STR,$LENGTH(STR))_TRL
               SET STR=$EXTRACT(STR,1,($LENGTH(STR)-1))
 +5        SET PAR("TRL")=$GET(TRL)
           SET I=0
           FOR 
               if I>L
                   QUIT 
               if '$LENGTH(STR)
                   QUIT 
               Begin DoDot:1
 +6                SET I=I+1
                   IF I=$LENGTH(STR)
                       Begin DoDot:2
 +7                        SET CT=$ORDER(PAR(" "),-1)+1
                           SET (STO,PAR(CT))=STR
                           SET PAR(0)=CT
                           SET STR=""
 +8                        SET PH=$GET(PAR((CT-1),"C"))_$GET(PAR(CT))_$GET(PAR(CT,"C"))
                           SET PAR(CT,"A")=PH
 +9                        SET LEXIN=$GET(PAR("T",1))
                           SET LEXCTL=$GET(PAR(CT,"A"))
                           SET LEXCHR=$GET(PAR(CT,"C"))
 +10                       FOR W=1:1:$LENGTH(STO," ")
                               Begin DoDot:3
 +11                               NEW NWD
                                   SET WD=$PIECE(STO," ",W)
                                   SET LEXORG=$GET(PAR(CT,"W",(+($GET(W))-1)))
                                   SET LEXPRE=$$UP(LEXORG)
 +12                               SET LEXNXT=""
                                   SET NWD=$$GETC(WD)
                                   SET PAR(CT,"W",W)=NWD
                               End DoDot:3
                       End DoDot:2
                       QUIT 
 +13               SET C=$EXTRACT(STR,I)
 +14               IF C?1P&(C'=" ")
                       Begin DoDot:2
 +15                       if C="("
                               SET C=" ("
                           if C="["
                               SET C=" ["
                           if C="&"
                               SET C=" &"
 +16                       NEW REM,STO
                           SET CT=$ORDER(PAR(" "),-1)+1
                           SET (STO,PAR(CT))=$EXTRACT(STR,1,(I-1))
                           SET PAR(0)=CT
 +17                       SET PH=$GET(PAR(CT-1,"C"))_$GET(PAR(CT))_$GET(PAR(CT,"C"))
                           SET PAR(CT,"A")=PH
 +18                       SET LEXIN=$GET(PAR("T",1))
                           SET LEXCTL=$GET(PAR(CT,"A"))
                           SET LEXCHR=C
 +19                       FOR W=1:1:$LENGTH(STO," ")
                               Begin DoDot:3
 +20                               NEW NWD
                                   SET WD=$PIECE(STO," ",W)
                                   SET LEXPRE=$$UP($GET(PAR(CT,"W",(+($GET(W))-1))))
 +21                               SET NWD=$$GETC(WD)
                                   SET PAR(CT,"W",W)=NWD
                               End DoDot:3
 +22                       SET (REM,STR)=$EXTRACT(STR,I+1,$LENGTH(STR))
                           SET I=0
 +23                       FOR 
                               if $EXTRACT(STR,1)'=" "
                                   QUIT 
                               SET C=C_" "
                               SET (REM,STR)=$EXTRACT(STR,2,$LENGTH(STR))
 +24                       SET PAR(CT,"C")=C
                       End DoDot:2
               End DoDot:1
               if '$LENGTH(STR)
                   QUIT 
 +25       SET TXT=""
           SET CT=0
           FOR 
               SET CT=$ORDER(PAR(CT))
               if +CT'>0
                   QUIT 
               Begin DoDot:1
 +26               NEW STR,TR
                   SET STR=""
                   SET TR=$GET(PAR(CT,"C"))
                   SET W=0
                   FOR 
                       SET W=$ORDER(PAR(CT,"W",W))
                       if +W'>0
                           QUIT 
                       SET STR=STR_" "_$GET(PAR(CT,"W",W))
 +27               SET STR=$$TRIM(STR)_TR
                   SET PAR(CT,"B")=STR
 +28               SET TXT=TXT_STR
                   KILL PAR(CT)
               End DoDot:1
 +29       SET TXT=TXT_$GET(PAR("TRL"))
           SET X=$$SW3(TXT)
           KILL PAR
           FOR CHR="-","+"
               Begin DoDot:1
 +30               IF UIN[(" "_CHR)
                       IF X[CHR
                           IF X'[(" "_CHR)
                               Begin DoDot:2
 +31                               NEW TXT
                                   SET TXT=$PIECE(X,CHR,1)
                                   FOR I=2:1
                                       if '$LENGTH($PIECE(X,CHR,I))
                                           QUIT 
                                       SET TXT=TXT_(" "_CHR)_$PIECE(X,CHR,I)
 +32                               SET X=TXT
                               End DoDot:2
               End DoDot:1
 +33       SET X=$$FN(X)
           SET X=$$DBL(X)
           FOR CHR="~","!","@","#","$","^","&","*","_","-","+","=","|","\",";",":",",","."
               SET X=$$TM(X,CHR)
 +34       QUIT X
GETC(X)   ; Set to Mixed/lower/UPPER case
 +1        NEW LEXTAG,LEXRTN,LEXLEN,Y
           if $LENGTH($GET(X))'>0
               QUIT X
           SET X=$$UP($GET(X))
           SET Y=""
           SET LEXLEN=$LENGTH(X)
           if LEXLEN>12
               SET LEXLEN=12
 +2        SET LEXUSE=$$UP($$USE)
           SET LEXNXT=$$TP($$TM($PIECE($GET(UIN),LEXUSE,2,4000)))
 +3        SET LEXTAG="T"_$LENGTH(X)
           SET LEXRTN="LEXXM"_$LENGTH(X)
 +4        if $LENGTH($GET(X))>9
               SET LEXTAG="TM"
           if $LENGTH($GET(X))>5
               SET LEXRTN="LEXXM6"
           SET LEXRTN=LEXTAG_"^"_LEXRTN
           DO @LEXRTN
           IF $LENGTH(Y)
               SET X=$$SW2(Y)
               QUIT X
 +5        SET X=$$MX(X)
 +6        QUIT X
 +7       ;             
SW1(X)    ; Switch Text (before setting case)
 +1        SET X=$$SW1^LEXXMM($GET(X))
           QUIT X
SW2(X)    ; Switch Text (after setting case)
 +1        SET X=$$SW2^LEXXMM($GET(X))
           QUIT X
SW3(X)    ; Switch Text (after assembling string)
 +1        SET X=$$SW3^LEXXMM($GET(X))
           QUIT X
EW(X)     ; Display Word Usage
 +1        DO EW^LEXXMM($GET(X))
           QUIT 
 +2       ;             
USE(X)    ; Used
 +1        NEW STR,SEG,CUR
           SET STR=""
           SET SEG=0
           FOR 
               SET SEG=$ORDER(PAR(SEG))
               if +SEG'>0
                   QUIT 
               Begin DoDot:1
 +2                NEW WC
                   SET WC=0
                   FOR 
                       SET WC=$ORDER(PAR(SEG,"W",WC))
                       if +WC'>0
                           QUIT 
                       Begin DoDot:2
 +3                        NEW WD
                           SET WD=$$UP($GET(PAR(SEG,"W",WC)))
 +4                        if $EXTRACT(STR,$LENGTH(STR))?1A!($EXTRACT(STR,$LENGTH(STR))?1N)
                               SET STR=$GET(STR)_" "_WD
 +5                        if $EXTRACT(STR,$LENGTH(STR))'?1A&($EXTRACT(STR,$LENGTH(STR))'?1N)
                               SET STR=$GET(STR)_WD
                       End DoDot:2
 +6                if $LENGTH($GET(PAR(SEG,"C")))
                       SET STR=STR_$GET(PAR(SEG,"C"))
               End DoDot:1
 +7        SET CUR=$GET(WD)
           IF $LENGTH(CUR)
               Begin DoDot:1
 +8                if $EXTRACT(STR,$LENGTH(STR))?1A!($EXTRACT(STR,$LENGTH(STR))?1N)
                       SET STR=$GET(STR)_" "_CUR
 +9                if $EXTRACT(STR,$LENGTH(STR))'?1A&($EXTRACT(STR,$LENGTH(STR))'?1N)
                       SET STR=$GET(STR)_CUR
               End DoDot:1
 +10       SET X=$$TM(STR)
 +11       QUIT X
 +12       QUIT X
FN(X)     ; Footnote Removed
 +1        SET X=$GET(X)
           if X'[")"
               QUIT X
           NEW ORG,FIR,LAS,TRM,L,NUM,OUT,REP,WTH
           SET (OUT,ORG)=X
           SET L=$LENGTH(X,")")
           SET FIR=$PIECE(X,")",1,(L-1))_")"
           SET LAS=$PIECE(X,")",L)
           SET TRM=$$TRIM(LAS)
           SET X=ORG
           IF TRM=LAS
               IF $EXTRACT(LAS,1)?1N
                   IF +LAS=LAS
                       SET OUT=FIR
 +2        FOR NUM=1:1:9
               SET REP=")"_NUM_" "
               SET WTH=") "
               IF OUT[REP
                   SET OUT=$$SWAP^LEXXMM(OUT,REP,WTH)
 +3        SET X=OUT
 +4        QUIT X
LO(X)     ; Lower Case
 +1        QUIT $TRANSLATE(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
UP(X)     ; Upper Case
 +1        QUIT $TRANSLATE(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
MX(X)     ; Mixed Case
 +1        QUIT $TRANSLATE($EXTRACT(X,1),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")_$TRANSLATE($EXTRACT(X,2,$LENGTH(X)),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
LD(X)     ; Leading Character
 +1        QUIT $TRANSLATE($EXTRACT(X,1),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")_$EXTRACT(X,2,$LENGTH(X))
TRIM(X)   ; Trim Spaces
 +1        SET X=$GET(X)
           FOR 
               if $EXTRACT(X,1)'=" "
                   QUIT 
               SET X=$EXTRACT(X,2,$LENGTH(X))
 +2        FOR 
               if $EXTRACT(X,$LENGTH(X))'=" "
                   QUIT 
               SET X=$EXTRACT(X,1,($LENGTH(X)-1))
 +3        QUIT X
TP(X)     ; Trim Punctuation
 +1        SET X=$GET(X)
           if '$LENGTH(X)
               QUIT X
           FOR 
               if $EXTRACT(X,1)'?1P
                   QUIT 
               SET X=$EXTRACT(X,2,$LENGTH(X))
 +2        FOR 
               if $EXTRACT(X,$LENGTH(X))'?1P
                   QUIT 
               SET X=$EXTRACT(X,1,($LENGTH(X)-1))
 +3        QUIT X
TM(X,Y)   ; Trim Character Y - Default " "
 +1        SET X=$GET(X)
           SET Y=$GET(Y)
           if $LENGTH(Y)&(X'[Y)
               QUIT X
           SET X=$GET(X)
           if X=""
               QUIT X
           SET Y=$GET(Y)
           if '$LENGTH(Y)
               SET Y=" "
           FOR 
               if $EXTRACT(X,1)'=Y
                   QUIT 
               SET X=$EXTRACT(X,2,$LENGTH(X))
 +2        FOR 
               if $EXTRACT(X,$LENGTH(X))'=Y
                   QUIT 
               SET X=$EXTRACT(X,1,($LENGTH(X)-1))
 +3        QUIT X
DBL(X)    ; Double Spaces
 +1        SET X=$GET(X)
           FOR 
               if X'["  "
                   QUIT 
               SET X=$PIECE(X,"  ",1)_" "_$PIECE(X,"  ",2,4000)
 +2        SET X=$$TRIM(X)
 +3        QUIT X