| [613] | 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 | 
|---|