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

LEXA3.m

Go to the documentation of this file.
  1. LEXA3 ;ISL/KER - Look-up (Loud) Functions ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**1,4,80**;Sep 23, 1996;Build 10
  1. ;
  1. DH ; Display Help LEX("HLP")
  1. Q:'$D(LEX("HLP")) N LEXI S LEXI=0
  1. W ! F S LEXI=$O(LEX("HLP",LEXI)) Q:+LEXI=0 D
  1. . W !," ",LEX("HLP",LEXI)
  1. Q
  1. DL ; Display List LEX("LIST")
  1. I +($G(LEX))=1,$D(LEX("LIST",1)) D ONE Q
  1. D MULTI Q
  1. DP ; Display Prompt Select 1-LEX("MAX") or Ok?
  1. N LEXPRMT
  1. I +($G(LEX))>1 D
  1. . S LEXPRMT="Type ""^"" to STOP or Select: "
  1. . S:+($G(LEX("MAX")))>0 LEXPRMT="Type ""^"" to STOP or Select 1-"_LEX("MAX")_": "
  1. I +($G(LEX))=1 S LEXPRMT=" Ok? YES// ",DIC("B")="YES" W:+($G(LEX))>1 !
  1. W !!,LEXPRMT Q
  1. ;
  1. MULTI ; Multiple entries PCH 4 - LEXTP,LEXCT
  1. N LEXI,LEXT,LEXTP,LEXCT,LEXL,LEXP
  1. S (LEXCT,LEXI)=0,LEXL=70,LEXP=7 D MATCH
  1. W ! F S LEXI=$O(LEX("LIST",LEXI)) Q:+LEXI=0 D
  1. . S LEXCT=LEXCT+1,LEXT=$P(LEX("LIST",LEXI),"^",2)
  1. . S LEXTP=$P($G(LEX("LIST",(LEXI-1))),"^",2)
  1. . ;W:LEXCT>1&($E(LEXT,1)=" ")&($E(LEXTP,1)'=" ")&($E(LEXTP,1)'="") !
  1. . ;W:LEXCT>1&($E(LEXT,1)'=" ")&($E(LEXTP,1)=" ") !
  1. . W !,$J(LEXI,4),?6
  1. . N Y S Y=+($G(LEX("LIST",LEXI))),Y(0)=$G(^LEX(757.01,+Y,0)),Y(0,0)=$P($G(^LEX(757.01,+Y,0)),"^",1)
  1. . I $D(DIC("W")),DIC("W")'="" X DIC("W") Q
  1. . I $D(DIC("W")),DIC("W")="" W Y(0,0) Q
  1. . W:$L(LEXT)<(LEXL+1) ?LEXP,LEXT D:$L(LEXT)>LEXL LONG
  1. Q
  1. MATCH ; Matches found
  1. I $D(LEX("MAT")) W !!,LEX("MAT") K LEX("MAT")
  1. Q
  1. ONE ; One entry
  1. N LEXI,LEXT,LEXL,LEXP
  1. S LEXI=0,LEXL=75,LEXP=2,LEXT=$P(LEX("LIST",1),"^",2) W !!
  1. N Y S Y=+($G(LEX("LIST",LEXI))),Y(0)=$G(^LEX(757.01,+Y,0)),Y(0,0)=$P($G(^LEX(757.01,+Y,0)),"^",1)
  1. I $D(DIC("W")),DIC("W")'="" W ?LEXP X DIC("W") Q
  1. I $D(DIC("W")),DIC("W")="" W ?LEXP,Y(0,0) Q
  1. I '$D(DIC("W")) W:$L(LEXT)<(LEXL+1) ?LEXP,LEXT D:$L(LEXT)>LEXL LONG
  1. Q
  1. LONG ; Handle a long string PCH 4 -> LEXD1,LEXD1
  1. N LEXOK,LEXCHR,LEXPSN,LEXSTO,LEXREM,LEXLNN,LEXOLD,LEXC
  1. N LEXWW,LEXD1,LEXD2
  1. S LEXLNN=0,LEXOLD=LEXT,LEXL=70,LEXP=+($G(LEXP))
  1. S LEXD1="" F LEXPSN=1:1 Q:$E(LEXT,LEXPSN)'=" "!(LEXPSN>$L(LEXT)) S LEXD1=LEXD1_" "
  1. S LEXD2=LEXD1 S:LEXT[": "&($L(LEXD1)) LEXD2=LEXD2_" "
  1. D PARSE(LEXT,LEXL,LEXD1,LEXD2)
  1. I $D(LEXWW),$O(LEXWW(0))>0 F LEXC=1:1 Q:'$D(LEXWW(LEXC)) D
  1. . W:LEXC>1 ! W ?LEXP,LEXWW(LEXC)
  1. Q
  1. PARSE(LEXT,LEXL,LEXD1,LEXD2) ; Parse string
  1. S LEXT=$G(LEXT),LEXL=+($G(LEXL)),LEXD1=$G(LEXD1),LEXD2=$G(LEXD2)
  1. Q:LEXT="" S:LEXL=0 LEXL=70 S LEXL=LEXL-$L(LEXD1)
  1. N LEXC S LEXC=0 F Q:$L(LEXT)<(LEXL+1) D
  1. . S LEXOK=0,LEXCHR=""
  1. . F LEXPSN=LEXL:-1:0 Q:+LEXOK=1 D Q:+LEXOK=1
  1. . . I $E(LEXT,LEXPSN)=" " S LEXCHR=" ",LEXOK=1 Q
  1. . . I $E(LEXT,LEXPSN)="," S LEXCHR=",",LEXOK=1 Q
  1. . . I $E(LEXT,LEXPSN)="/"!($E(LEXT,LEXPSN)="-")!($E(LEXT,LEXPSN)=")") S LEXCHR=$E(LEXT,LEXPSN),LEXOK=1 Q
  1. . S LEXL=LEXL-($L(LEXD2)-$L(LEXD1)) D:LEXCHR=" " SPL1
  1. . D:LEXCHR="/"!(LEXCHR=",")!(LEXCHR="-")!(LEXCHR=")") SPL2
  1. . D:'LEXOK SPL4,SPC
  1. . S LEXT=LEXREM I $L(LEXSTO) S LEXC=LEXC+1 S:LEXC=1 LEXWW(LEXC)=(LEXD1_LEXSTO) S:LEXC>1 LEXWW(LEXC)=(LEXD2_LEXSTO)
  1. I $L(LEXT) S LEXC=LEXC+1 S:LEXC=1 LEXWW(LEXC)=(LEXD1_LEXT) S:LEXC>1 LEXWW(LEXC)=(LEXD2_LEXT)
  1. Q
  1. SPL1 ; Split after character position
  1. S LEXSTO=$E(LEXT,1,LEXPSN-1),LEXREM=$E(LEXT,LEXPSN+1,$L(LEXT)) D SPL3,SPC Q
  1. SPL2 ; Split at character position
  1. S LEXSTO=$E(LEXT,1,LEXPSN),LEXREM=$E(LEXT,(LEXPSN+1),$L(LEXT)) D SPL3,SPC Q
  1. SPL3 ; Re-Split if STO<REM
  1. D:$L(LEXSTO)<$L(LEXREM)&($L(LEXL)-$L(LEXSTO)>15) SPL4 Q
  1. SPL4 ; Split at string length LEXL
  1. S LEXSTO=$E(LEXT,1,LEXL),LEXREM=$E(LEXT,(LEXL+1),$L(LEXT)) Q
  1. SPC ; Remove Spaces
  1. S LEXSTO=$$TRIM(LEXSTO),LEXREM=$$TRIM(LEXREM) S LEXOK=1 Q
  1. TRIM(LEXX) ; Trim Spaces
  1. S LEXX=$G(LEXX) Q:LEXX'[" " LEXX Q:LEXX="" LEXX
  1. F Q:$E(LEXX,1)'=" " S LEXX=$E(LEXX,2,$L(LEXX))
  1. I $L(LEXX) F Q:$E(LEXX,$L(LEXX))'=" " S LEXX=$E(LEXX,1,($L(LEXX)-1))
  1. Q LEXX