[613] | 1 | LEXAS7 ; ISL Look-up Check Input (LC,TC) ; 09-23-96
|
---|
| 2 | ;;2.0;LEXICON UTILITY;;Sep 23, 1996;Build 1
|
---|
| 3 | ;
|
---|
| 4 | LC(LEXX) ; Leading characters
|
---|
| 5 | ;
|
---|
| 6 | ; LEXX Return string
|
---|
| 7 | ; LEXL Letter
|
---|
| 8 | ; LEXG Group of letters
|
---|
| 9 | ; LEXI Incremental counter
|
---|
| 10 | ; LEXT Temporary tolken
|
---|
| 11 | ; LEXOK Flag - found tolken
|
---|
| 12 | ; LEXS Swap character
|
---|
| 13 | ; LEXA Add character
|
---|
| 14 | ;
|
---|
| 15 | N LEXT
|
---|
| 16 | S LEXT=$$LCS(LEXX) I LEXT'=LEXX,$D(^LEX(757.01,"ASL",LEXT)) S LEXX=LEXT Q LEXT
|
---|
| 17 | I $L(LEXT)'>5 Q LEXX
|
---|
| 18 | S LEXT=$$LCR(LEXX) I $D(^LEX(757.01,"AWRD",LEXT)) S LEXX=LEXT Q LEXX
|
---|
| 19 | I $L(LEXT)'>4 Q LEXX
|
---|
| 20 | S LEXT=$$LCR(LEXX) I $D(^LEX(757.01,"AWRD",LEXT)) S LEXX=LEXT Q LEXX
|
---|
| 21 | Q LEXX
|
---|
| 22 | ;
|
---|
| 23 | LCS(LEXX) ; Swap
|
---|
| 24 | N LEXI,LEXF,LEXL,LEXG,LEXOK,LEXS,LEXA S LEXOK=0
|
---|
| 25 | S LEXF=$$FIRST(LEXX),LEXS=$$SECOND(LEXX)
|
---|
| 26 | I $D(^LEX(757.01,"ASL",LEXS)) S LEXX=LEXS Q LEXX
|
---|
| 27 | I $D(^LEX(757.01,"ASL",LEXF)) S LEXX=LEXF Q LEXX
|
---|
| 28 | S LEXF=$$FIRST(LEXS)
|
---|
| 29 | I $D(^LEX(757.01,"ASL",LEXF)) S LEXX=LEXF Q LEXX
|
---|
| 30 | Q LEXX
|
---|
| 31 | LCR(LEXX) ; Remove/Shift
|
---|
| 32 | N LEXT
|
---|
| 33 | S LEXX=$E(LEXX,2,$L(LEXX))
|
---|
| 34 | S LEXT=$$SHIFT^LEXAS3(LEXX)
|
---|
| 35 | I $D(^LEX(757.01,"ASL",LEXT)) S LEXX=LEXT Q LEXX
|
---|
| 36 | Q LEXX
|
---|
| 37 | SECOND(LEXX) ; Second letter (Swap)
|
---|
| 38 | N LEXL,LEXG,LEXOK,LEXI,LEXA,LEXS
|
---|
| 39 | S LEXL=$E(LEXX,2),LEXG=$$GRP(LEXL),LEXOK=0
|
---|
| 40 | F LEXI=1:1:$L(LEXG) D Q:LEXOK
|
---|
| 41 | . S LEXS=$E(LEXX,1)_$E(LEXG,LEXI)_$E(LEXX,3,$L(LEXX))
|
---|
| 42 | . I $D(^LEX(757.01,"ASL",LEXS)) S LEXX=LEXS,LEXOK=1 Q
|
---|
| 43 | . S LEXS=$$TP^LEXAS6(LEXS)
|
---|
| 44 | . I $D(^LEX(757.01,"ASL",LEXS)),$L(LEXS)=$L(LEXX) S LEXX=LEXS,LEXOK=1 Q
|
---|
| 45 | . S LEXS=$$ONE^LEXAS2(LEXS) Q:LEXS=""
|
---|
| 46 | . I $D(^LEX(757.01,"ASL",LEXS)),$L(LEXS)=$L(LEXX) S LEXX=LEXS,LEXOK=1 Q
|
---|
| 47 | Q:LEXOK LEXX
|
---|
| 48 | ; Second letter (Add)
|
---|
| 49 | S LEXOK=0 F LEXI=65:1:90 D Q:LEXOK
|
---|
| 50 | . S LEXA=$E(LEXX,1)_$C(LEXI)_$E(LEXX,2,$L(LEXX))
|
---|
| 51 | . I $D(^LEX(757.01,"ASL",LEXA)) S LEXX=LEXA,LEXOK=1 Q
|
---|
| 52 | Q LEXX
|
---|
| 53 | ;
|
---|
| 54 | FIRST(LEXX) ; First letter (Swap)
|
---|
| 55 | N LEXL,LEXG,LEXOK,LEXI,LEXA,LEXS
|
---|
| 56 | S LEXL=$E(LEXX,1),LEXG=$$GRP(LEXL),LEXOK=0
|
---|
| 57 | F LEXI=1:1:$L(LEXG) D Q:LEXOK
|
---|
| 58 | . S LEXS=$E(LEXG,LEXI)_$E(LEXX,2,$L(LEXX))
|
---|
| 59 | . I $D(^LEX(757.01,"ASL",LEXS)) S LEXX=LEXS,LEXOK=1 Q
|
---|
| 60 | . S LEXS=$$LF(LEXS)
|
---|
| 61 | . I $D(^LEX(757.01,"ASL",LEXS)) S LEXX=LEXS,LEXOK=1 Q
|
---|
| 62 | Q:LEXOK LEXX
|
---|
| 63 | ;
|
---|
| 64 | ; First letter (Add)
|
---|
| 65 | S LEXOK=0 F LEXI=65:1:90 D Q:LEXOK
|
---|
| 66 | . S LEXA=$C(LEXI)_LEXX
|
---|
| 67 | . I $D(^LEX(757.01,"ASL",LEXA)) S LEXX=LEXA,LEXOK=1 Q
|
---|
| 68 | Q LEXX
|
---|
| 69 | LF(LEXX) ;
|
---|
| 70 | Q:$L($G(LEXX))'>7 LEXX
|
---|
| 71 | N LEXN,LEXC,LEXT,LEXF,LEXO,LEXOK
|
---|
| 72 | S (LEXN,LEXC)=$E(LEXX,1,4) Q:'$D(^LEX(757.01,"ASL",LEXN)) LEXX
|
---|
| 73 | S LEXT=$P(LEXX,LEXN,2) Q:$L(LEXT)<4 LEXX
|
---|
| 74 | S LEXOK=0,LEXO=$$SCH^LEXAS6(LEXN)
|
---|
| 75 | S LEXT=$E(LEXT,($L(LEXT)-6),$L(LEXT))
|
---|
| 76 | F S LEXO=$O(^LEX(757.01,"AWRD",LEXO)) Q:LEXO=""!(LEXO'[LEXC)!(LEXOK) D
|
---|
| 77 | . S LEXF=$E(LEXO,($L(LEXO)-($L(LEXT)-1)),$L(LEXO))
|
---|
| 78 | . I LEXF=LEXT S LEXT=LEXO,LEXOK=1
|
---|
| 79 | I LEXOK S LEXX=LEXT
|
---|
| 80 | Q LEXX
|
---|
| 81 | TC(LEXX) ; Trailing character
|
---|
| 82 | Q:$L(LEXX)<6 LEXX
|
---|
| 83 | N LEXC,LEXT,LEXLC,LEXO,LEXOK,LEXCL
|
---|
| 84 | S LEXCL=$L(LEXX),LEXC=$$TRIM^LEXAS6(LEXX),LEXC=$E(LEXC,1,($L(LEXC)-1))
|
---|
| 85 | S LEXLC=$E(LEXX,$L(LEXX)),LEXO=$$SCH^LEXAS6(LEXC),LEXOK=0,LEXT=""
|
---|
| 86 | ;
|
---|
| 87 | F S LEXO=$O(^LEX(757.01,"AWRD",LEXO)) Q:LEXO=""!(LEXO'[LEXC)!(LEXOK) D
|
---|
| 88 | . Q:$E(LEXO,$L(LEXO))'=LEXLC
|
---|
| 89 | . ; Exact
|
---|
| 90 | . I $E(LEXO,LEXCL)=LEXLC S LEXT=LEXO,LEXOK=1 Q
|
---|
| 91 | . ; 1 Less
|
---|
| 92 | . I $E(LEXO,(LEXCL-1))=LEXLC S LEXT=LEXO,LEXOK=1 Q
|
---|
| 93 | I LEXT'="",LEXOK S LEXX=LEXT
|
---|
| 94 | Q LEXX
|
---|
| 95 | ;
|
---|
| 96 | GRP(LEXX) ; Letter groups (off the home row QWERTY)
|
---|
| 97 | N LEXG S LEXG=LEXX
|
---|
| 98 | S:LEXX="A" LEXG="QZOWSX" S:LEXX="B" LEXG="VGHNF"
|
---|
| 99 | S:LEXX="C" LEXG="XDVFS" S:LEXX="D" LEXG="ECXRFSWV"
|
---|
| 100 | S:LEXX="E" LEXG="RWIDFS" S:LEXX="F" LEXG="GBVDRCET"
|
---|
| 101 | S:LEXX="G" LEXG="FBTVRHYN" S:LEXX="H" LEXG="JGNYBUMT"
|
---|
| 102 | S:LEXX="I" LEXG="UOYEKJL" S:LEXX="J" LEXG="HNKUMYI"
|
---|
| 103 | S:LEXX="K" LEXG="IJLMOU" S:LEXX="L" LEXG="OKPI"
|
---|
| 104 | S:LEXX="M" LEXG="NJKH" S:LEXX="N" LEXG="MBJH"
|
---|
| 105 | S:LEXX="O" LEXG="LIPAK" S:LEXX="P" LEXG="OL"
|
---|
| 106 | S:LEXX="Q" LEXG="AWS" S:LEXX="R" LEXG="TEGFD"
|
---|
| 107 | S:LEXX="S" LEXG="XWADZE" S:LEXX="T" LEXG="RGFYH"
|
---|
| 108 | S:LEXX="U" LEXG="YHIJK" S:LEXX="V" LEXG="CBFDG"
|
---|
| 109 | S:LEXX="W" LEXG="QESAD" S:LEXX="X" LEXG="ZSACD"
|
---|
| 110 | S:LEXX="Y" LEXG="UHIJGT" S:LEXX="Z" LEXG="ASX"
|
---|
| 111 | S:LEXG'=LEXX LEXX=LEXG
|
---|
| 112 | Q LEXX
|
---|
| 113 | Q
|
---|