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

LEXXGP2.m

Go to the documentation of this file.
  1. LEXXGP2 ;ISL/KER - Global Post-Install (Repair Expressions) ;12/19/2014
  1. ;;2.0;LEXICON UTILITY;**80,86**;Sep 23, 1996;Build 1
  1. ;
  1. ; Global Variables
  1. ; ^TMP("LEXASL") SACC 2.3.2.5.1
  1. ; ^TMP("LEXASLU") SACC 2.3.2.5.1
  1. ; ^TMP("LEXAWRD") SACC 2.3.2.5.1
  1. ; ^TMP("LEXAWRDU") SACC 2.3.2.5.1
  1. ; ^TMP("LEXTKN") SACC 2.3.2.5.1
  1. ; ^TMP("LEXXGPDAT") SACC 2.3.2.5.1
  1. ; ^TMP("LEXXGPRPT") SACC 2.3.2.5.1
  1. ; ^TMP("LEXXGPTIM") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; $$S^%ZTLOAD ICR 10063
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; Local Variables NEWed or KILLed in LEXXGP1
  1. ; LEXFIR,LEXFUL,LEXMAIL,LEXQUIT,ZTQUEUED,ZTSK
  1. ;
  1. Q
  1. ASLB ; ASL String Length Index Build 6.5 minutes
  1. N LEXA,LEXBEG,LEXBEGD,LEXBEGT,LEXC,LEXCHK,LEXDF,LEXE,LEXELP,LEXEND,LEXENDT,LEXM
  1. N LEXN,LEXO,LEXP,LEXRT,LEXS,LEXT,LEXTK,LEXTKN,LEXTXT S LEXBEG=$$BEG^LEXXGP1
  1. S:'$D(LEXQUIT) LEXQUIT="ASLB" S LEXTXT="Build 'ASL' String Length Index"
  1. I +($G(ZTSK))>0 S LEXCHK=$$S^%ZTLOAD((LEXTXT_" in file 757.01"))
  1. S LEXRT="" S:$D(^LEX(757.01,"AWRD")) LEXRT="^LEX(757.01,""AWRD"","
  1. S:$D(^TMP("LEXAWRD",$J)) LEXRT="^TMP(""LEXAWRD"","_$J_"," Q:'$L(LEXRT)
  1. ; For each Word
  1. S (LEXFIR,LEXFC,LEXTK)=""
  1. F S LEXTK=$O(@(LEXRT_""""_LEXTK_""")")) Q:'$L(LEXTK) D
  1. . N LEXP,LEXS,LEXC,LEXF,LEXTKN S LEXTKN=LEXTK
  1. . F Q:$E(LEXTKN,1)'=" " S LEXTKN=$E(LEXTKN,2,$L(LEXTKN))
  1. . F Q:$E(LEXTKN,$L(LEXTKN))'=" " S LEXTKN=$E(LEXTKN,1,($L(LEXTKN)-1))
  1. . S LEXF=$E(LEXTKN,1)
  1. . S LEXFIR=LEXF S:LEXFC'[LEXF LEXFC=LEXFC_LEXF
  1. . ; Count the occurrences of each string
  1. . F LEXP=1:1:$L(LEXTKN) S LEXS=$$UP^XLFSTR($E(LEXTKN,1,LEXP)) D
  1. . . Q:'$L($G(LEXS)) I '$D(^TMP("LEXASLU",$J,LEXS)) D
  1. . . . N LEXE,LEXM,LEXO,LEXT,LEXA,LEXN S (LEXA,LEXN,LEXT)=0
  1. . . . S LEXT=$$SCT(LEXS) I +($G(LEXT))>0 D
  1. . . . . K ^TMP("LEXASL",$J,LEXS)
  1. . . . . S ^TMP("LEXASL",$J,LEXS,LEXT)=""
  1. . . S ^TMP("LEXASLU",$J,LEXS)=""
  1. H 1 S LEXEND=$$END^LEXXGP1 D SAV^LEXXGP3(LEXBEG,LEXEND,LEXTXT)
  1. S LEXELP=$$ELP^LEXXGP1(LEXBEG,LEXEND),LEXBEGD=$$ED^LEXXGP1(LEXBEG)
  1. S LEXBEGT=$$ET^LEXXGP1(LEXBEG),LEXENDT=$$ET^LEXXGP1(LEXEND),LEXDF=$$DF^LEXXGP1(LEXBEG)
  1. S LEXTXT=$G(LEXTXT)_$J(" ",(35-$L($G(LEXTXT))))
  1. S LEXTXT=LEXTXT_LEXDF_" "_LEXBEGT_" "_LEXENDT_" "_LEXELP
  1. S LEXTXT=" "_LEXTXT W:'$D(ZTQUEUED) !,LEXTXT
  1. D ASLR I $G(LEXQUIT)="ASLB" D
  1. . D:$D(LEXMAIL) XM^LEXXGP3
  1. . K ^TMP("LEXASL",$J),^TMP("LEXASLU",$J),^TMP("LEXAWRD",$J),^TMP("LEXAWRDU",$J)
  1. . K ^TMP("LEXTKN",$J),^TMP("LEXXGPDAT",$J),^TMP("LEXXGPTIM",$J),^TMP("LEXXGPRPT",$J)
  1. Q
  1. ASLR ; ASL String Length Index Replace 0.5 minutes
  1. N LEX1,LEX2,LEX3,LEXBEG,LEXBEGD,LEXBEGT,LEXC,LEXCHK,LEXCHR,LEXCHRS,LEXCOM,LEXCTL
  1. N LEXDF,LEXELP,LEXEND,LEXENDT,LEXIT,LEXLTKN,LEXND,LEXNOD,LEXSTR,LEXTK,LEXTK1
  1. N LEXTK2,LEXTK3,LEXTK4,LEXTK5,LEXTMP,LEXTTKN,LEXTXT,LEXVAL S (LEX1,LEX2,LEX3)=0
  1. Q:'$D(LEXQUIT) S LEXBEG=$$BEG^LEXXGP1,LEXTXT="Replace 'ASL' String Length Index"
  1. I +($G(ZTSK))>0 S LEXCHK=$$S^%ZTLOAD((LEXTXT_" in file 757.01"))
  1. N LEXCHR,LEXCHRS D CHRS S LEXCHR=""
  1. F S LEXCHR=$O(LEXCHRS(LEXCHR)) Q:'$L(LEXCHR) D
  1. . ; For strings beginning with character
  1. . N LEXLTKN,LEXTTKN,LEXTK1,LEXTK2,LEXTK3,LEXTK4,LEXTK5,LEXTK,LEXIT
  1. . ; Delete strings from the ^LEX global
  1. . S (LEXTK1,LEXTK2,LEXTK3,LEXTK4,LEXTK5)=""
  1. . S LEXTK1=$C($A(LEXCHR)-1)_"~",LEXTK2=LEXCHR,LEXTK3=LEXCHR_" "
  1. . S:LEXCHR?1N LEXTK4=LEXCHR-.00000001
  1. . S:LEXCHR="." LEXTK5=.00000001
  1. . F LEXTK=LEXTK1,LEXTK2,LEXTK3,LEXTK4,LEXTK5 D
  1. . . Q:'$L(LEXTK) S (LEXLTKN,LEXTTKN)=LEXTK S LEXIT=0
  1. . . F S LEXLTKN=$O(^LEX(757.01,"ASL",LEXLTKN)) D Q:LEXIT>0
  1. . . . S:'$L(LEXLTKN) LEXIT=1 S:$E(LEXLTKN,1)'=LEXCHR LEXIT=1
  1. . . . Q:LEXIT>0 N LEXNOD,LEXCTL
  1. . . . S LEXNOD="^LEX(757.01,""ASL"","_$$QQ(LEXLTKN)_")"
  1. . . . S LEXCTL="^LEX(757.01,""ASL"","_$$QQ(LEXLTKN)_","
  1. . . . F S LEXNOD=$Q(@LEXNOD) Q:'$L(LEXNOD)!(LEXNOD'[LEXCTL) D
  1. . . . . N LEXTMP,LEXND S LEXTMP=$TR(LEXLTKN,"""","")
  1. . . . . S LEXND="^LEX(757.01,""ASL"","_$$QQ(LEXLTKN)_")"
  1. . . . . K @LEXND S LEX1=+($G(LEX1))+1
  1. . ; Add strings to the ^LEX global
  1. . F LEXTTKN=LEXTK1,LEXTK2,LEXTK3,LEXTK4,LEXTK5 D
  1. . . Q:'$L(LEXTTKN) N LEXC,LEXIT S LEXIT=0,LEXC=LEXTTKN
  1. . . F S LEXTTKN=$O(^TMP("LEXASL",$J,LEXTTKN)) Q:'$L(LEXTTKN) D Q:LEXIT>0
  1. . . . Q:$E(LEXTTKN,1)'=LEXCHR
  1. . . . N LEXNOD,LEXCTL S LEXNOD="^TMP(""LEXASL"","_$J_","_$$QQ(LEXTTKN)_")"
  1. . . . S LEXCTL="^TMP(""LEXASL"","_$J_","_$$QQ(LEXTTKN)_","
  1. . . . F S LEXNOD=$Q(@LEXNOD) Q:'$L(LEXNOD)!(LEXNOD'[LEXCTL) D
  1. . . . . N LEXSTR,LEXVAL,LEXND,LEXTMP S LEXSTR=$P($P(LEXNOD,(","_$J_","),2),",",1)
  1. . . . . S LEXVAL=+$P($P(LEXNOD,(","_$J_","),2),",",2) Q:'$L(LEXSTR) Q:+LEXVAL'>0
  1. . . . . S LEXTMP=$TR(LEXSTR,"""",""),LEXND="^LEX(757.01,""ASL"","_$$QQ(LEXTMP)_")" K @LEXND
  1. . . . . S LEXND="^LEX(757.01,""ASL"","_$$QQ(LEXTMP)_","_LEXVAL_")"
  1. . . . . S @LEXND="" S LEX3=+($G(LEX3))+1
  1. . ; Repeat for all characters
  1. H 1 S LEXEND=$$END^LEXXGP1 D SAV^LEXXGP3(LEXBEG,LEXEND,LEXTXT)
  1. S LEXELP=$$ELP^LEXXGP1(LEXBEG,LEXEND),LEXBEGD=$$ED^LEXXGP1(LEXBEG)
  1. S LEXBEGT=$$ET^LEXXGP1(LEXBEG),LEXENDT=$$ET^LEXXGP1(LEXEND),LEXDF=$$DF^LEXXGP1(LEXBEG)
  1. S LEXTXT=$G(LEXTXT)_$J(" ",(35-$L($G(LEXTXT))))
  1. S LEXTXT=LEXTXT_LEXDF_" "_LEXBEGT_" "_LEXENDT_" "_LEXELP
  1. S LEXTXT=" "_LEXTXT W:'$D(ZTQUEUED) !,LEXTXT
  1. I LEX3>0,$D(LEXFUL) D
  1. . S LEXCOM=LEX3_" 'ASL' Index Node"_$S(LEX3>1:"s",1:"")
  1. . D SAV^LEXXGP3(LEXBEG,"","",LEXCOM) W:'$D(ZTQUEUED) !," ",LEXCOM
  1. Q
  1. ;
  1. ; Miscellaneous
  1. QQ(X) ; Set Quotes
  1. N LEXS,LEXT S LEXS=$TR($G(X),"""",""),LEXT=0
  1. S:$TR(LEXS,".","")'?1N.N LEXT=1 I $TR(LEXS,".","")?1N.N S:$L(+LEXS)'=$L(LEXS) LEXT=1
  1. S X=LEXS S:LEXT=1 X=""""_LEXS_""""
  1. Q X
  1. SCT(X) ; String Count (exact string)
  1. N LEX,LEXA,LEXE,LEXIT,LEXM,LEXN,LEXO,LEXOUT,LEXP,LEXRT,LEXRT2,LEXS,LEXT,LEXTKN
  1. S LEXS=$$UP^XLFSTR($G(X)) Q:'$L(LEXS) 0 S LEXRT="" S:$D(^LEX(757.01,"AWRD")) LEXRT="^LEX(757.01,""AWRD"","
  1. S:$D(^TMP("LEXAWRD",$J)) LEXRT="^TMP(""LEXAWRD"","_$J_"," Q:'$L(LEXRT) 0 S (LEXA,LEXN,LEXT)=0
  1. S:$L(LEXS)>1 LEXO=$E(LEXS,1,($L(LEXS)-1))_$C(($A($E(LEXS,$L(LEXS)))-1))_"~"
  1. S:$L(LEXS)=1 LEXO=$C(($A(LEXS)-1))_"~" S LEXIT=0
  1. F S LEXO=$O(@(LEXRT_""""_LEXO_""")")) D Q:LEXIT>0
  1. . S:'$L(LEXO) LEXIT=1 S:$E(LEXO,1,$L(LEXS))'=LEXS LEXIT=1
  1. . Q:LEXIT>0 N LEXM S LEXM=0 F S LEXM=$O(@(LEXRT_""""_LEXO_""","_LEXM_")")) Q:+LEXM'>0 D
  1. . . N LEXE,LEXRT2 S LEXE=0,LEXRT2=LEXRT_""""_LEXO_""","_LEXM_","
  1. . . F S LEXE=$O(@(LEXRT2_LEXE_")")) Q:+LEXE'>0 S LEXT=LEXT+1,LEXA=LEXA+1
  1. I $TR(LEXS,".","")?1N.N,$L(LEXS,".")'>2 I +LEXS=LEXS D
  1. . N LEXFC S LEXFC=$E(LEXS,1) S:$E(LEXS,1)?1N LEXO=LEXS-.000000001
  1. . S:$E(LEXS,1)="." LEXO=.000000001 S LEXIT=0
  1. . F S LEXO=$O(@(LEXRT_+LEXO_")")) D Q:LEXIT>0 Q:'$L(LEXO)
  1. . . S:LEXFC?1N&($E(LEXO,1)'?1N) LEXIT=1
  1. . . S:LEXFC?1P&($E(LEXO,1)'?1P) LEXIT=1 Q:LEXIT>0
  1. . . Q:'$L(LEXO) Q:$E(LEXO,1,$L(LEXS))'=LEXS N LEXM S LEXM=0
  1. . . F S LEXM=$O(@(LEXRT_+LEXO_","_LEXM_")")) Q:+LEXM'>0 D
  1. . . . N LEXE,LEXRT2 S LEXE=0,LEXRT2=LEXRT_+LEXO_","_LEXM_","
  1. . . . F S LEXE=$O(@(LEXRT2_LEXE_")")) Q:+LEXE'>0 S LEXT=LEXT+1,LEXN=LEXN+1
  1. S X=LEXT
  1. Q X
  1. CHRS ; Get Characters - Sets LEXCHRS
  1. N LEXCHR,LEXRT,LEXRT1,LEXRT2,LEXTK K LEXCHRS S LEXRT1="^LEX(757.01,""AWRD"","
  1. S LEXRT2="^TMP(""LEXAWRD"","_$J_"," F LEXRT=LEXRT1,LEXRT2 D
  1. . N LEXTK S LEXTK="#" F S LEXTK=$O(@(LEXRT_""""_LEXTK_""")")) Q:'$L(LEXTK) D
  1. . . N LEXCHR S LEXCHR=$E($TR(LEXTK," ",""),1) S LEXTK=$E(LEXTK,1)_"~"
  1. . . S:$L(LEXCHR) LEXCHRS(LEXCHR)=""
  1. Q