1 | LEXAS4 ; ISL Look-up Check Input (DBL,REM) ; 09-23-96
|
---|
2 | ;;2.0;LEXICON UTILITY;;Sep 23, 1996;Build 1
|
---|
3 | ;
|
---|
4 | DBL(LEXX) ; Excessive Double Characters
|
---|
5 | ;
|
---|
6 | ; LEXI Incremental counter
|
---|
7 | ; LEXOK Flag - found word yes/no
|
---|
8 | ; LEXT Temporary word
|
---|
9 | ; LEXD Temporary word (Double doubles)
|
---|
10 | ; LEXX Return string
|
---|
11 | ;
|
---|
12 | N LEXI,LEXOK,LEXT,LEXD S LEXOK=0,LEXD=""
|
---|
13 | F LEXI=1:1:$L(LEXX) D Q:LEXOK
|
---|
14 | . S LEXT=LEXX I $E(LEXX,LEXI)=$E(LEXX,(LEXI+1)) D
|
---|
15 | . . S LEXT=$E(LEXX,1,LEXI)_$E(LEXX,(LEXI+2),$L(LEXX))
|
---|
16 | . . I $D(^LEX(757.01,"ASL",LEXT)) S LEXX=LEXT,LEXOK=1 Q
|
---|
17 | . . Q:LEXI=1
|
---|
18 | . . S LEXT=$E(LEXX,1,(LEXI-1))_$E(LEXX,(LEXI+2),$L(LEXX))
|
---|
19 | . . I $D(^LEX(757.01,"ASL",LEXT)) S LEXX=LEXT,LEXOK=1 Q
|
---|
20 | I LEXOK Q LEXX
|
---|
21 | F LEXI=1:1:$L(LEXX) D
|
---|
22 | . I $E(LEXX,LEXI)'=$E(LEXX,(LEXI+1)) D
|
---|
23 | . . S LEXD=LEXD_$E(LEXX,LEXI)
|
---|
24 | I $D(^LEX(757.01,"ASL",LEXD)) S LEXX=LEXD
|
---|
25 | Q LEXX
|
---|
26 | ;
|
---|
27 | REM(LEXX) ; Remove character
|
---|
28 | ;
|
---|
29 | ; LEXI Incremental counter
|
---|
30 | ; LEXOK Flag - found word yes/no
|
---|
31 | ; LEXF First segment
|
---|
32 | ; LEXT Trailing segment
|
---|
33 | ; LEXN Altered tolken
|
---|
34 | ; LEXTN Temporary altered tolken
|
---|
35 | ; LEXX Return string
|
---|
36 | ;
|
---|
37 | N LEXI,LEXO,LEXCS,LEXCA,LEXTN,LEXOK,LEXF,LEXT,LEXN,LEXL
|
---|
38 | S LEXOK=0,LEXO=LEXX
|
---|
39 | F LEXI=2:1:$L(LEXO) D Q:LEXOK
|
---|
40 | . S LEXF=$E(LEXO,1,(LEXI-1)),LEXT=$E(LEXO,(LEXI+1),$L(LEXO))
|
---|
41 | . I $D(^LEX(757.01,"AWRD",(LEXF_LEXT))),$O(^LEX(757.01,"ASL",(LEXF_LEXT),0))>1 D Q
|
---|
42 | . . S LEXX=LEXF_LEXT,LEXOK=1
|
---|
43 | . S LEXN=$$REM2(LEXO,LEXI) I $D(^LEX(757.01,"AWRD",LEXN)) S LEXX=LEXN,LEXOK=1 Q
|
---|
44 | . Q:$D(^LEX(757.01,"ASL",$E(LEXO,1,LEXI)))
|
---|
45 | . S LEXF=$E(LEXO,1,(LEXI-1)),LEXT=$E(LEXO,(LEXI+1),$L(LEXO))
|
---|
46 | . I '$D(^LEX(757.01,"ASL",LEXF)),$O(^LEX(757.01,"ASL",LEXF,0))>1 D Q
|
---|
47 | . . S LEXX=$E(LEXF,1,($L(LEXF)-1)),LEXOK=1
|
---|
48 | . S LEXCA=LEXF_LEXT
|
---|
49 | . S LEXCS=LEXF_$E(LEXT,1)
|
---|
50 | . I $D(^LEX(757.01,"ASL",LEXCS)),$O(^LEX(757.01,"ASL",LEXCS,0))>1 D
|
---|
51 | . . S LEXO=LEXCA,LEXI=LEXI+1 S:LEXI=$L(LEXO) LEXOK=1
|
---|
52 | . S LEXTN=$$SHIFT^LEXAS3(LEXO)
|
---|
53 | . I $D(^LEX(757.01,"AWRD",LEXTN)),$O(^LEX(757.01,"ASL",LEXTN,0))>1 S LEXX=LEXTN,LEXOK=1 Q
|
---|
54 | . I $D(^LEX(757.01,"ASL",LEXO)),$O(^LEX(757.01,"ASL",LEXO,0))>1 S LEXX=LEXO,LEXOK=1
|
---|
55 | Q LEXX
|
---|
56 | REM2(LEXO,LEXI) ; Remove character at position LEXI
|
---|
57 | N LEXOK S LEXOK=0
|
---|
58 | S LEXF=$E(LEXO,1,LEXI)_$E(LEXO,(LEXI+2),(LEXI+3))
|
---|
59 | I $L(LEXF)>3 D
|
---|
60 | . N LEXT,LEXN,LEXP1,LEXP2 S LEXT=$E(LEXX,($L(LEXX)-4),$L(LEXX))
|
---|
61 | . S LEXN=$E(LEXF,1,($L(LEXF)-1))_$C($A($E(LEXF,$L(LEXF)))-1)_"~"
|
---|
62 | . F S LEXN=$O(^LEX(757.01,"AWRD",LEXN)) Q:LEXN=""!($E(LEXN,1,$L(LEXF))'=LEXF)!(LEXOK) D
|
---|
63 | . . S LEXP1=$E(LEXN,($L(LEXN)-($L(LEXT)-1)),$L(LEXN))
|
---|
64 | . . I $E(LEXN,($L(LEXN)-($L(LEXT)-1)),$L(LEXN))=LEXT S LEXO=LEXN,LEXOK=1
|
---|
65 | Q LEXO
|
---|