Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LEXAS4

LEXAS4.m

Go to the documentation of this file.
  1. LEXAS4 ;ISL/KER - Look-up Check Input (DBL,REM) ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 1
  1. ;
  1. DBL(LEXX) ; Excessive Double Characters
  1. ;
  1. ; LEXI Incremental counter
  1. ; LEXOK Flag - found word yes/no
  1. ; LEXT Temporary word
  1. ; LEXD Temporary word (Double doubles)
  1. ; LEXX Return string
  1. ;
  1. N LEXI,LEXOK,LEXT,LEXD S LEXOK=0,LEXD=""
  1. F LEXI=1:1:$L(LEXX) D Q:LEXOK
  1. . S LEXT=LEXX I $E(LEXX,LEXI)=$E(LEXX,(LEXI+1)) D
  1. . . S LEXT=$E(LEXX,1,LEXI)_$E(LEXX,(LEXI+2),$L(LEXX))
  1. . . I $D(^LEX(757.01,"ASL",LEXT)) S LEXX=LEXT,LEXOK=1 Q
  1. . . Q:LEXI=1
  1. . . S LEXT=$E(LEXX,1,(LEXI-1))_$E(LEXX,(LEXI+2),$L(LEXX))
  1. . . I $D(^LEX(757.01,"ASL",LEXT)) S LEXX=LEXT,LEXOK=1 Q
  1. I LEXOK Q LEXX
  1. F LEXI=1:1:$L(LEXX) D
  1. . I $E(LEXX,LEXI)'=$E(LEXX,(LEXI+1)) D
  1. . . S LEXD=LEXD_$E(LEXX,LEXI)
  1. I $D(^LEX(757.01,"ASL",LEXD)) S LEXX=LEXD
  1. Q LEXX
  1. ;
  1. REM(LEXX) ; Remove character
  1. ;
  1. ; LEXI Incremental counter
  1. ; LEXOK Flag - found word yes/no
  1. ; LEXF First segment
  1. ; LEXT Trailing segment
  1. ; LEXN Altered tolken
  1. ; LEXTN Temporary altered tolken
  1. ; LEXX Return string
  1. ;
  1. N LEXI,LEXO,LEXCS,LEXCA,LEXTN,LEXOK,LEXF,LEXT,LEXN,LEXL
  1. S LEXOK=0,LEXO=LEXX
  1. F LEXI=2:1:$L(LEXO) D Q:LEXOK
  1. . S LEXF=$E(LEXO,1,(LEXI-1)),LEXT=$E(LEXO,(LEXI+1),$L(LEXO))
  1. . I $D(^LEX(757.01,"AWRD",(LEXF_LEXT))),$O(^LEX(757.01,"ASL",(LEXF_LEXT),0))>1 D Q
  1. . . S LEXX=LEXF_LEXT,LEXOK=1
  1. . S LEXN=$$REM2(LEXO,LEXI) I $D(^LEX(757.01,"AWRD",LEXN)) S LEXX=LEXN,LEXOK=1 Q
  1. . Q:$D(^LEX(757.01,"ASL",$E(LEXO,1,LEXI)))
  1. . S LEXF=$E(LEXO,1,(LEXI-1)),LEXT=$E(LEXO,(LEXI+1),$L(LEXO))
  1. . I '$D(^LEX(757.01,"ASL",LEXF)),$O(^LEX(757.01,"ASL",LEXF,0))>1 D Q
  1. . . S LEXX=$E(LEXF,1,($L(LEXF)-1)),LEXOK=1
  1. . S LEXCA=LEXF_LEXT
  1. . S LEXCS=LEXF_$E(LEXT,1)
  1. . I $D(^LEX(757.01,"ASL",LEXCS)),$O(^LEX(757.01,"ASL",LEXCS,0))>1 D
  1. . . S LEXO=LEXCA,LEXI=LEXI+1 S:LEXI=$L(LEXO) LEXOK=1
  1. . S LEXTN=$$SHIFT^LEXAS3(LEXO)
  1. . I $D(^LEX(757.01,"AWRD",LEXTN)),$O(^LEX(757.01,"ASL",LEXTN,0))>1 S LEXX=LEXTN,LEXOK=1 Q
  1. . I $D(^LEX(757.01,"ASL",LEXO)),$O(^LEX(757.01,"ASL",LEXO,0))>1 S LEXX=LEXO,LEXOK=1
  1. Q LEXX
  1. REM2(LEXO,LEXI) ; Remove character at position LEXI
  1. N LEXOK S LEXOK=0
  1. S LEXF=$E(LEXO,1,LEXI)_$E(LEXO,(LEXI+2),(LEXI+3))
  1. I $L(LEXF)>3 D
  1. . N LEXT,LEXN,LEXP1,LEXP2 S LEXT=$E(LEXX,($L(LEXX)-4),$L(LEXX))
  1. . S LEXN=$E(LEXF,1,($L(LEXF)-1))_$C($A($E(LEXF,$L(LEXF)))-1)_"~"
  1. . F S LEXN=$O(^LEX(757.01,"AWRD",LEXN)) Q:LEXN=""!($E(LEXN,1,$L(LEXF))'=LEXF)!(LEXOK) D
  1. . . S LEXP1=$E(LEXN,($L(LEXN)-($L(LEXT)-1)),$L(LEXN))
  1. . . I $E(LEXN,($L(LEXN)-($L(LEXT)-1)),$L(LEXN))=LEXT S LEXO=LEXN,LEXOK=1
  1. Q LEXO