- LEXAS5 ;ISL/KER - Look-up Check Input (SPLIT) ;04/21/2014
- ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
- ;
- ; Global Variables
- ; ^LEX( N/A
- ;
- ; External References
- ; $$UP^XLFSTR ICR 10103
- ;
- SPLIT(LEXX) ; 2 tolkens/no space
- ;
- ; LEXI Incremental counter
- ; LEXOK Flag - tolken found
- ; LEXF First segment
- ; LEXFR Remainder of First segment
- ; LEXTT 2 Tolkens
- ; LEXP1 First piece
- ; LEXP2 Second piect
- ; LEXX Value returned
- ;
- Q:$D(^LEX(757.01,"ASL",LEXX)) LEXX
- Q:$L(LEXX)<6 LEXX
- N LEXF,LEXFR,LEXTT,LEXP1,LEXP2
- ;
- S LEXF=$$FS(LEXX)
- S LEXFR="" S:$L($G(LEXF)) LEXFR=$$FR(LEXX,.LEXF)
- S (LEXTT,LEXP1,LEXP2)=""
- S LEXP1=LEXF
- ;S:$L(LEXF)>2 LEXP1=$$REP(LEXF)
- G:LEXP1="" END
- S:$L(LEXFR)>3 LEXP2=LEXFR
- G:LEXP2="" END
- S LEXTT=LEXP1_"^"_LEXP2
- END ; Resolve first to a string, second to a tolken
- K LEXKEY Q:$G(LEXTT)'["^" LEXX
- S:$L(LEXTT) LEXX=LEXTT Q LEXX
- FS(LEXX) ; First segment
- N LEXN,LEXE,LEXF,LEXT,LEXI,LEXOK S LEXN=$$TRIM^LEXAS6(LEXX),LEXOK=0
- Q:'$L(LEXN) LEXX
- F LEXI=2:1:$L(LEXN) D Q:LEXOK
- . S LEXF=$E(LEXX,1,LEXI) I $L(LEXF)>2,$D(^LEX(757.01,"ASL",LEXF)) S LEXX=LEXF,LEXOK=1 Q
- . N LEXFI F LEXFI="757.04","757.041","757.05" D
- . . Q:'$L(LEXF) Q:'$L($P(LEXX,LEXF,2))
- . . I $D(^LEX(LEXFI,"B",LEXF)) D
- . . . I $D(^LEX(757.01,"AWRD",$P(LEXX,LEXF,2))) S LEXX=LEXF,LEXOK=1 Q
- Q LEXX
- REP(LEXX) ; Replacement
- N LEXR Q:'$D(^LEX(757.05,"B",LEXX)) LEXX
- S LEXR=$O(^LEX(757.05,"B",LEXX,0)) Q:'$D(^LEX(757.05,LEXR,0)) LEXX
- I $P(^LEX(757.05,LEXR,0),"^",3)="R" S LEXX=$P(^LEX(757.05,LEXR,0),"^",2)
- Q LEXX
- FR(LEXX,LEXF) ; Remainder of first segment
- N LEXFR,LEXN,LEXOK S LEXFR=$P(LEXX,LEXF,2)
- I $L(LEXFR),'$D(^LEX(757.01,"AWRD",LEXFR)) D
- . N LEXI,LEXT S LEXT=LEXFR,LEXOK=0 F LEXI=1:1:$L(LEXFR) D Q:LEXOK
- . . S LEXT=$E(LEXFR,LEXI,$L(LEXFR))
- . . I $D(^LEX(757.01,"AWRD",LEXT)) D
- . . . S LEXFR=LEXT,LEXOK=1
- . . . I $P(LEXX,LEXFR,1)'="",$D(^LEX(757.01,"ASL",$P(LEXX,LEXFR,1))) S LEXF=$P(LEXX,LEXFR,1)
- I $L(LEXFR),'$D(^LEX(757.01,"AWRD",LEXFR)) S LEXFR=$$COMP(LEXF,LEXFR)
- Q:'$L(LEXFR) ""
- I '$D(^LEX(757.01,"AWRD",LEXFR)),$L(LEXFR)>4 D
- . S LEXN=$E(LEXFR,1,4)
- . I $L(LEXN),$D(^LEX(757.01,"AWRD",LEXN)) S LEXFR=LEXN
- I $L(LEXFR),$D(^LEX(757.01,"AWRD",LEXFR)) S LEXX=LEXFR Q LEXX
- I $L(LEXFR),'$D(^LEX(757.01,"AWRD",LEXFR)) S LEXX="" Q LEXX
- I '$L(LEXFR) S LEXX=""
- Q LEXX
- COMP(LEXF,LEXS) ; Compare first segment to second segment
- N LEXN,LEXT,LEXO S LEXO=LEXS
- S LEXN=$$TP^LEXAS6(LEXO)
- I $D(^LEX(757.01,"AWRD",LEXN)),+($$CHK(LEXF,LEXN)) S LEXS=LEXN Q LEXS
- S LEXT=$$SHIFT^LEXAS3(LEXO)
- I $D(^LEX(757.01,"AWRD",LEXT)),+($$CHK(LEXF,LEXT)) S LEXS=LEXT Q LEXS
- S LEXN=$$TP^LEXAS6(LEXN)
- I $D(^LEX(757.01,"AWRD",LEXN)),+($$CHK(LEXF,LEXN)) S LEXS=LEXN Q LEXS
- S LEXN=$$ONE^LEXAS2(LEXN)
- I $L(LEXN)>3,$D(^LEX(757.01,"AWRD",LEXN)),+($$CHK(LEXF,LEXN)) S LEXS=LEXN Q LEXS
- Q ""
- CHK(LEX1,LEX2) ; Check first segment used with second segment
- I '$L($G(LEX1))!('$L($G(LEX1))) Q 0
- I '$D(^LEX(757.01,"ASL",LEX1))!('$D(^LEX(757.01,"ASL",LEX2))) Q 0
- N LEXF1,LEXF2,LEXO,LEXC,LEXS,LEXOK S LEXOK=0
- S LEXF1=$O(^LEX(757.01,"ASL",LEX1,0))
- S LEXF2=$O(^LEX(757.01,"ASL",LEX2,0))
- S:LEXF1<LEXF2 LEXO=$$SCH^LEXAS6(LEX1),LEXC=LEX2,LEXS=LEX1
- S:LEXF1'<LEXF2 LEXO=$$SCH^LEXAS6(LEX2),LEXC=LEX1,LEXS=LEX2
- F S LEXO=$O(^LEX(757.01,"AWRD",LEXO)) Q:LEXO=""!(LEXO'[LEXS)!(LEXOK) D
- . N LEXR S LEXR=0
- . F S LEXR=$O(^LEX(757.01,"AWRD",LEXO,LEXR)) Q:+LEXR=0!(LEXOK) D
- . . N LEXE S LEXE=$$UP^XLFSTR($G(^LEX(757.01,LEXR,0)))
- . . I LEXE[(" "_$$UP^XLFSTR(LEXC)) S LEXOK=1 Q
- . . I $E(LEXE,1,$L(LEXC))=$$UP^XLFSTR(LEXC) S LEXOK=1
- S LEX1=LEXOK
- Q LEX1
- LEXAS5 ;ISL/KER - Look-up Check Input (SPLIT) ;04/21/2014
- +1 ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
- +2 ;
- +3 ; Global Variables
- +4 ; ^LEX( N/A
- +5 ;
- +6 ; External References
- +7 ; $$UP^XLFSTR ICR 10103
- +8 ;
- SPLIT(LEXX) ; 2 tolkens/no space
- +1 ;
- +2 ; LEXI Incremental counter
- +3 ; LEXOK Flag - tolken found
- +4 ; LEXF First segment
- +5 ; LEXFR Remainder of First segment
- +6 ; LEXTT 2 Tolkens
- +7 ; LEXP1 First piece
- +8 ; LEXP2 Second piect
- +9 ; LEXX Value returned
- +10 ;
- +11 IF $DATA(^LEX(757.01,"ASL",LEXX))
- QUIT LEXX
- +12 IF $LENGTH(LEXX)<6
- QUIT LEXX
- +13 NEW LEXF,LEXFR,LEXTT,LEXP1,LEXP2
- +14 ;
- +15 SET LEXF=$$FS(LEXX)
- +16 SET LEXFR=""
- IF $LENGTH($GET(LEXF))
- SET LEXFR=$$FR(LEXX,.LEXF)
- +17 SET (LEXTT,LEXP1,LEXP2)=""
- +18 SET LEXP1=LEXF
- +19 ;S:$L(LEXF)>2 LEXP1=$$REP(LEXF)
- +20 IF LEXP1=""
- GOTO END
- +21 IF $LENGTH(LEXFR)>3
- SET LEXP2=LEXFR
- +22 IF LEXP2=""
- GOTO END
- +23 SET LEXTT=LEXP1_"^"_LEXP2
- END ; Resolve first to a string, second to a tolken
- +1 KILL LEXKEY
- IF $GET(LEXTT)'["^"
- QUIT LEXX
- +2 IF $LENGTH(LEXTT)
- SET LEXX=LEXTT
- QUIT LEXX
- FS(LEXX) ; First segment
- +1 NEW LEXN,LEXE,LEXF,LEXT,LEXI,LEXOK
- SET LEXN=$$TRIM^LEXAS6(LEXX)
- SET LEXOK=0
- +2 IF '$LENGTH(LEXN)
- QUIT LEXX
- +3 FOR LEXI=2:1:$LENGTH(LEXN)
- Begin DoDot:1
- +4 SET LEXF=$EXTRACT(LEXX,1,LEXI)
- IF $LENGTH(LEXF)>2
- IF $DATA(^LEX(757.01,"ASL",LEXF))
- SET LEXX=LEXF
- SET LEXOK=1
- QUIT
- +5 NEW LEXFI
- FOR LEXFI="757.04","757.041","757.05"
- Begin DoDot:2
- +6 IF '$LENGTH(LEXF)
- QUIT
- IF '$LENGTH($PIECE(LEXX,LEXF,2))
- QUIT
- +7 IF $DATA(^LEX(LEXFI,"B",LEXF))
- Begin DoDot:3
- +8 IF $DATA(^LEX(757.01,"AWRD",$PIECE(LEXX,LEXF,2)))
- SET LEXX=LEXF
- SET LEXOK=1
- QUIT
- End DoDot:3
- End DoDot:2
- End DoDot:1
- IF LEXOK
- QUIT
- +9 QUIT LEXX
- REP(LEXX) ; Replacement
- +1 NEW LEXR
- IF '$DATA(^LEX(757.05,"B",LEXX))
- QUIT LEXX
- +2 SET LEXR=$ORDER(^LEX(757.05,"B",LEXX,0))
- IF '$DATA(^LEX(757.05,LEXR,0))
- QUIT LEXX
- +3 IF $PIECE(^LEX(757.05,LEXR,0),"^",3)="R"
- SET LEXX=$PIECE(^LEX(757.05,LEXR,0),"^",2)
- +4 QUIT LEXX
- FR(LEXX,LEXF) ; Remainder of first segment
- +1 NEW LEXFR,LEXN,LEXOK
- SET LEXFR=$PIECE(LEXX,LEXF,2)
- +2 IF $LENGTH(LEXFR)
- IF '$DATA(^LEX(757.01,"AWRD",LEXFR))
- Begin DoDot:1
- +3 NEW LEXI,LEXT
- SET LEXT=LEXFR
- SET LEXOK=0
- FOR LEXI=1:1:$LENGTH(LEXFR)
- Begin DoDot:2
- +4 SET LEXT=$EXTRACT(LEXFR,LEXI,$LENGTH(LEXFR))
- +5 IF $DATA(^LEX(757.01,"AWRD",LEXT))
- Begin DoDot:3
- +6 SET LEXFR=LEXT
- SET LEXOK=1
- +7 IF $PIECE(LEXX,LEXFR,1)'=""
- IF $DATA(^LEX(757.01,"ASL",$PIECE(LEXX,LEXFR,1)))
- SET LEXF=$PIECE(LEXX,LEXFR,1)
- End DoDot:3
- End DoDot:2
- IF LEXOK
- QUIT
- End DoDot:1
- +8 IF $LENGTH(LEXFR)
- IF '$DATA(^LEX(757.01,"AWRD",LEXFR))
- SET LEXFR=$$COMP(LEXF,LEXFR)
- +9 IF '$LENGTH(LEXFR)
- QUIT ""
- +10 IF '$DATA(^LEX(757.01,"AWRD",LEXFR))
- IF $LENGTH(LEXFR)>4
- Begin DoDot:1
- +11 SET LEXN=$EXTRACT(LEXFR,1,4)
- +12 IF $LENGTH(LEXN)
- IF $DATA(^LEX(757.01,"AWRD",LEXN))
- SET LEXFR=LEXN
- End DoDot:1
- +13 IF $LENGTH(LEXFR)
- IF $DATA(^LEX(757.01,"AWRD",LEXFR))
- SET LEXX=LEXFR
- QUIT LEXX
- +14 IF $LENGTH(LEXFR)
- IF '$DATA(^LEX(757.01,"AWRD",LEXFR))
- SET LEXX=""
- QUIT LEXX
- +15 IF '$LENGTH(LEXFR)
- SET LEXX=""
- +16 QUIT LEXX
- COMP(LEXF,LEXS) ; Compare first segment to second segment
- +1 NEW LEXN,LEXT,LEXO
- SET LEXO=LEXS
- +2 SET LEXN=$$TP^LEXAS6(LEXO)
- +3 IF $DATA(^LEX(757.01,"AWRD",LEXN))
- IF +($$CHK(LEXF,LEXN))
- SET LEXS=LEXN
- QUIT LEXS
- +4 SET LEXT=$$SHIFT^LEXAS3(LEXO)
- +5 IF $DATA(^LEX(757.01,"AWRD",LEXT))
- IF +($$CHK(LEXF,LEXT))
- SET LEXS=LEXT
- QUIT LEXS
- +6 SET LEXN=$$TP^LEXAS6(LEXN)
- +7 IF $DATA(^LEX(757.01,"AWRD",LEXN))
- IF +($$CHK(LEXF,LEXN))
- SET LEXS=LEXN
- QUIT LEXS
- +8 SET LEXN=$$ONE^LEXAS2(LEXN)
- +9 IF $LENGTH(LEXN)>3
- IF $DATA(^LEX(757.01,"AWRD",LEXN))
- IF +($$CHK(LEXF,LEXN))
- SET LEXS=LEXN
- QUIT LEXS
- +10 QUIT ""
- CHK(LEX1,LEX2) ; Check first segment used with second segment
- +1 IF '$LENGTH($GET(LEX1))!('$LENGTH($GET(LEX1)))
- QUIT 0
- +2 IF '$DATA(^LEX(757.01,"ASL",LEX1))!('$DATA(^LEX(757.01,"ASL",LEX2)))
- QUIT 0
- +3 NEW LEXF1,LEXF2,LEXO,LEXC,LEXS,LEXOK
- SET LEXOK=0
- +4 SET LEXF1=$ORDER(^LEX(757.01,"ASL",LEX1,0))
- +5 SET LEXF2=$ORDER(^LEX(757.01,"ASL",LEX2,0))
- +6 IF LEXF1<LEXF2
- SET LEXO=$$SCH^LEXAS6(LEX1)
- SET LEXC=LEX2
- SET LEXS=LEX1
- +7 IF LEXF1'<LEXF2
- SET LEXO=$$SCH^LEXAS6(LEX2)
- SET LEXC=LEX1
- SET LEXS=LEX2
- +8 FOR
- SET LEXO=$ORDER(^LEX(757.01,"AWRD",LEXO))
- IF LEXO=""!(LEXO'[LEXS)!(LEXOK)
- QUIT
- Begin DoDot:1
- +9 NEW LEXR
- SET LEXR=0
- +10 FOR
- SET LEXR=$ORDER(^LEX(757.01,"AWRD",LEXO,LEXR))
- IF +LEXR=0!(LEXOK)
- QUIT
- Begin DoDot:2
- +11 NEW LEXE
- SET LEXE=$$UP^XLFSTR($GET(^LEX(757.01,LEXR,0)))
- +12 IF LEXE[(" "_$$UP^XLFSTR(LEXC))
- SET LEXOK=1
- QUIT
- +13 IF $EXTRACT(LEXE,1,$LENGTH(LEXC))=$$UP^XLFSTR(LEXC)
- SET LEXOK=1
- End DoDot:2
- End DoDot:1
- +14 SET LEX1=LEXOK
- +15 QUIT LEX1