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

LEXAS5.m

Go to the documentation of this file.
  1. LEXAS5 ;ISL/KER - Look-up Check Input (SPLIT) ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; ^LEX( N/A
  1. ;
  1. ; External References
  1. ; $$UP^XLFSTR ICR 10103
  1. ;
  1. SPLIT(LEXX) ; 2 tolkens/no space
  1. ;
  1. ; LEXI Incremental counter
  1. ; LEXOK Flag - tolken found
  1. ; LEXF First segment
  1. ; LEXFR Remainder of First segment
  1. ; LEXTT 2 Tolkens
  1. ; LEXP1 First piece
  1. ; LEXP2 Second piect
  1. ; LEXX Value returned
  1. ;
  1. Q:$D(^LEX(757.01,"ASL",LEXX)) LEXX
  1. Q:$L(LEXX)<6 LEXX
  1. N LEXF,LEXFR,LEXTT,LEXP1,LEXP2
  1. ;
  1. S LEXF=$$FS(LEXX)
  1. S LEXFR="" S:$L($G(LEXF)) LEXFR=$$FR(LEXX,.LEXF)
  1. S (LEXTT,LEXP1,LEXP2)=""
  1. S LEXP1=LEXF
  1. ;S:$L(LEXF)>2 LEXP1=$$REP(LEXF)
  1. G:LEXP1="" END
  1. S:$L(LEXFR)>3 LEXP2=LEXFR
  1. G:LEXP2="" END
  1. S LEXTT=LEXP1_"^"_LEXP2
  1. END ; Resolve first to a string, second to a tolken
  1. K LEXKEY Q:$G(LEXTT)'["^" LEXX
  1. S:$L(LEXTT) LEXX=LEXTT Q LEXX
  1. FS(LEXX) ; First segment
  1. N LEXN,LEXE,LEXF,LEXT,LEXI,LEXOK S LEXN=$$TRIM^LEXAS6(LEXX),LEXOK=0
  1. Q:'$L(LEXN) LEXX
  1. F LEXI=2:1:$L(LEXN) D Q:LEXOK
  1. . S LEXF=$E(LEXX,1,LEXI) I $L(LEXF)>2,$D(^LEX(757.01,"ASL",LEXF)) S LEXX=LEXF,LEXOK=1 Q
  1. . N LEXFI F LEXFI="757.04","757.041","757.05" D
  1. . . Q:'$L(LEXF) Q:'$L($P(LEXX,LEXF,2))
  1. . . I $D(^LEX(LEXFI,"B",LEXF)) D
  1. . . . I $D(^LEX(757.01,"AWRD",$P(LEXX,LEXF,2))) S LEXX=LEXF,LEXOK=1 Q
  1. Q LEXX
  1. REP(LEXX) ; Replacement
  1. N LEXR Q:'$D(^LEX(757.05,"B",LEXX)) LEXX
  1. S LEXR=$O(^LEX(757.05,"B",LEXX,0)) Q:'$D(^LEX(757.05,LEXR,0)) LEXX
  1. I $P(^LEX(757.05,LEXR,0),"^",3)="R" S LEXX=$P(^LEX(757.05,LEXR,0),"^",2)
  1. Q LEXX
  1. FR(LEXX,LEXF) ; Remainder of first segment
  1. N LEXFR,LEXN,LEXOK S LEXFR=$P(LEXX,LEXF,2)
  1. I $L(LEXFR),'$D(^LEX(757.01,"AWRD",LEXFR)) D
  1. . N LEXI,LEXT S LEXT=LEXFR,LEXOK=0 F LEXI=1:1:$L(LEXFR) D Q:LEXOK
  1. . . S LEXT=$E(LEXFR,LEXI,$L(LEXFR))
  1. . . I $D(^LEX(757.01,"AWRD",LEXT)) D
  1. . . . S LEXFR=LEXT,LEXOK=1
  1. . . . I $P(LEXX,LEXFR,1)'="",$D(^LEX(757.01,"ASL",$P(LEXX,LEXFR,1))) S LEXF=$P(LEXX,LEXFR,1)
  1. I $L(LEXFR),'$D(^LEX(757.01,"AWRD",LEXFR)) S LEXFR=$$COMP(LEXF,LEXFR)
  1. Q:'$L(LEXFR) ""
  1. I '$D(^LEX(757.01,"AWRD",LEXFR)),$L(LEXFR)>4 D
  1. . S LEXN=$E(LEXFR,1,4)
  1. . I $L(LEXN),$D(^LEX(757.01,"AWRD",LEXN)) S LEXFR=LEXN
  1. I $L(LEXFR),$D(^LEX(757.01,"AWRD",LEXFR)) S LEXX=LEXFR Q LEXX
  1. I $L(LEXFR),'$D(^LEX(757.01,"AWRD",LEXFR)) S LEXX="" Q LEXX
  1. I '$L(LEXFR) S LEXX=""
  1. Q LEXX
  1. COMP(LEXF,LEXS) ; Compare first segment to second segment
  1. N LEXN,LEXT,LEXO S LEXO=LEXS
  1. S LEXN=$$TP^LEXAS6(LEXO)
  1. I $D(^LEX(757.01,"AWRD",LEXN)),+($$CHK(LEXF,LEXN)) S LEXS=LEXN Q LEXS
  1. S LEXT=$$SHIFT^LEXAS3(LEXO)
  1. I $D(^LEX(757.01,"AWRD",LEXT)),+($$CHK(LEXF,LEXT)) S LEXS=LEXT Q LEXS
  1. S LEXN=$$TP^LEXAS6(LEXN)
  1. I $D(^LEX(757.01,"AWRD",LEXN)),+($$CHK(LEXF,LEXN)) S LEXS=LEXN Q LEXS
  1. S LEXN=$$ONE^LEXAS2(LEXN)
  1. I $L(LEXN)>3,$D(^LEX(757.01,"AWRD",LEXN)),+($$CHK(LEXF,LEXN)) S LEXS=LEXN Q LEXS
  1. Q ""
  1. CHK(LEX1,LEX2) ; Check first segment used with second segment
  1. I '$L($G(LEX1))!('$L($G(LEX1))) Q 0
  1. I '$D(^LEX(757.01,"ASL",LEX1))!('$D(^LEX(757.01,"ASL",LEX2))) Q 0
  1. N LEXF1,LEXF2,LEXO,LEXC,LEXS,LEXOK S LEXOK=0
  1. S LEXF1=$O(^LEX(757.01,"ASL",LEX1,0))
  1. S LEXF2=$O(^LEX(757.01,"ASL",LEX2,0))
  1. S:LEXF1<LEXF2 LEXO=$$SCH^LEXAS6(LEX1),LEXC=LEX2,LEXS=LEX1
  1. S:LEXF1'<LEXF2 LEXO=$$SCH^LEXAS6(LEX2),LEXC=LEX1,LEXS=LEX2
  1. F S LEXO=$O(^LEX(757.01,"AWRD",LEXO)) Q:LEXO=""!(LEXO'[LEXS)!(LEXOK) D
  1. . N LEXR S LEXR=0
  1. . F S LEXR=$O(^LEX(757.01,"AWRD",LEXO,LEXR)) Q:+LEXR=0!(LEXOK) D
  1. . . N LEXE S LEXE=$$UP^XLFSTR($G(^LEX(757.01,LEXR,0)))
  1. . . I LEXE[(" "_$$UP^XLFSTR(LEXC)) S LEXOK=1 Q
  1. . . I $E(LEXE,1,$L(LEXC))=$$UP^XLFSTR(LEXC) S LEXOK=1
  1. S LEX1=LEXOK
  1. Q LEX1