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

LEXXGP1.m

Go to the documentation of this file.
  1. LEXXGP1 ;ISL/KER - Global Post-Install (Repair Expressions) ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**80,86,103**;Sep 23, 1996;Build 2
  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("LEXAWRDK") SACC 2.3.2.5.1
  1. ; ^TMP("LEXAWRDU") SACC 2.3.2.5.1
  1. ; ^TMP("LEXSUB") 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("LEXXGPMSG") 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. ; HOME^%ZIS ICR 10086
  1. ; $$S^%ZTLOAD ICR 10063
  1. ; ^%ZTLOAD ICR 10063
  1. ; $$FMDIFF^XLFDT ICR 10103
  1. ; $$FMTE^XLFDT ICR 10103
  1. ; $$NOW^XLFDT ICR 10103
  1. ; $$UP^XLFSTR ICR 10104
  1. ; MES^XPDUTL ICR 10141
  1. ;
  1. ; Local Variables NEWed or KILLed Elsewhere
  1. ;
  1. ; LEXMAIL Set and Killed by the developer, used to
  1. ; report the timing of the task and
  1. ; send to the user by MailMan message
  1. ;
  1. ; LEXHOME Set and Killed by the developer in the
  1. ; post-install, used to send the timing
  1. ; message to G.LEXINS@FO-SLC.DOMAIN.EXT
  1. ; (see entry point POST2)
  1. ;
  1. ; FileMan LEXXGP
  1. ;
  1. ; Lexicon Lexicon
  1. ; Re-Index Time Available Time Available
  1. ; -------------- ---- --------- ---- ---------
  1. ; Build 'AWRD' 33.5 No 8.5 Yes
  1. ; Replace 'AWRD' -- -- 2.5 No
  1. ; Build 'ASL' 8.5 No 6.5 Yes
  1. ; Replace 'ASL' -- -- 0.5 No
  1. ; Build 'ASUB' 15.5 No 11.5 Yes
  1. ; Replace 'ASUB' -- -- 1.5 No
  1. ;
  1. ; Lexicon
  1. ; Unavailable: 57.5 4.5 Minutes
  1. ;
  1. Q
  1. EN ; Interactive Entry Point
  1. D ALL
  1. Q
  1. POST ; Entry Point from Post-Install
  1. N LEXMAIL,LEXHOME S LEXMAIL="" D POST3
  1. Q
  1. POST2 ; Entry Point from Post-Install (home)
  1. N LEXMAIL,LEXHOME S LEXHOME="",LEXMAIL="" D POST3
  1. Q
  1. POST3 ; Called by POST/POST2 starts task
  1. N Y,ZTRTN,ZTDESC,ZTIO,ZTDTH,ZTSAVE,ZTQUEUED,ZTREQ,LEXTN
  1. S ZTRTN="ALL^LEXXGP1"
  1. S (LEXTN,ZTDESC)="Repair indexes in files #757.01/757.21"
  1. I $D(LEXMAIL) S LEXMAIL=1,ZTSAVE("LEXMAIL")=""
  1. I $D(LEXHOME) S LEXHOME=1,ZTSAVE("LEXHOME")=""
  1. S ZTIO="",ZTDTH=$H D ^%ZTLOAD,HOME^%ZIS I $D(LEXLOUD) D
  1. . S LEXT=" "_$G(LEXTN)_" tasked"
  1. . S:+($G(ZTSK))>0 LEXT=LEXT_" (#"_+($G(ZTSK))_")"
  1. . D MES^XPDUTL(LEXT)
  1. Q
  1. ALL ; Index all Lookup Indexes
  1. S:$D(ZTQUEUED) ZTREQ="@"
  1. K ^TMP("LEXAWRD",$J),^TMP("LEXAWRDU",$J),^TMP("LEXAWRDK",$J),^TMP("LEXASL",$J),^TMP("LEXASLU",$J),^TMP("LEXSUB",$J)
  1. K ^TMP("LEXXGPTIM",$J) N DIC,DTOUT,DUOUT,LEX,LEX1,LEX2,LEX3,LEX4,LEXB,LEXBD,LEXBEG,LEXBEGD,LEXBEGT,LEXBT,LEXC,LEXCHR
  1. N LEXCHRS,LEXCMD,LEXCOM,LEXCTL,LEXD,LEXDF,LEXE,LEXEL,LEXELP,LEXELPT,LEXEND,LEXENDD,LEXENDT,LEXET,LEXEX,LEXEXP,LEXF
  1. N LEXFC,LEXFIR,LEXFUL,LEXHDR,LEXI,LEXID,LEXIDS,LEXIDX,LEXINAM,LEXIT,LEXJ,LEXLAST,LEXLN,LEXLOOK,LEXLOUD,LEXLWRD,LEXM
  1. N LEXMC,LEXMCEI,LEXMCI,LEXN,LEXNAM,LEXNEW,LEXNM,LEXNOD,LEXO,LEXO1,LEXO2,LEXP,LEXPDT,LEXPRE,LEXRI,LEXRT,LEXRT1,LEXRT2
  1. N LEXS,LEXSI,LEXSUB,LEXT,LEXTDAT,LEXTEXP,LEXTK,LEXTKC,LEXTKN,LEXTMP,LEXTWRD,LEXTX,LEXTXT,LEXV,LEXX,X,XCNP,XMDUZ
  1. N XMSCR,XMSUB,XMTEXT,XMY,XMZ,Y S:'$D(LEXQUIT) LEXQUIT="ALL" N LEXTXT,LEXFUL S LEXFUL="" D EXP,SUB^LEXXGP3
  1. I '$D(ZTQUEUED) D
  1. . N LEXTXT S LEXTXT=$$FMTT Q:'$L(LEXTXT) W !," ",LEXTXT
  1. I $G(LEXQUIT)="ALL" D
  1. . D:$D(LEXMAIL) XM^LEXXGP3 K LEXQUIT,ZTQUEUED,LEXMAIL,LEXHOME I '$D(LEXTEST) D
  1. . . K ^TMP("LEXASL",$J),^TMP("LEXASLU",$J),^TMP("LEXAWRD",$J),^TMP("LEXAWRDU",$J),^TMP("LEXAWRDK",$J)
  1. . . K ^TMP("LEXSUB",$J),^TMP("LEXTKN",$J),^TMP("LEXXGPDAT",$J),^TMP("LEXXGPTIM",$J),^TMP("LEXXGPRPT",$J)
  1. . . K:'$D(LEXMAIL) ^TMP("LEXXGPMSG",$J) N ZTQUEUED,LEXTEST
  1. Q
  1. ;
  1. EXP ; Expression file Main Indexes AWRD/ASL
  1. N LEXBEG,LEXBEGD,LEXBEGT,LEXDF,LEXELP,LEXEND,LEXENDD,LEXENDT
  1. N LEXTMP,LEXTXT S LEXTXT="Expression Indexes"
  1. S:'$D(LEXQUIT) LEXQUIT="EXP" K ^TMP("LEXAWRD",$J),^TMP("LEXAWRDU",$J),^TMP("LEXAWRDK",$J)
  1. K ^TMP("LEXASL",$J),^TMP("LEXASLU",$J) S LEXBEG=$$BEG
  1. D AWRDB,ASLB^LEXXGP2 H 1 S LEXEND=$$END D SAV^LEXXGP3(LEXBEG,LEXEND,LEXTXT)
  1. S LEXELP=$$ELP(LEXBEG,LEXEND),LEXBEGD=$$ED(LEXBEG)
  1. S LEXBEGT=$$ET(LEXBEG),LEXENDT=$$ET(LEXEND),LEXDF=$$DF(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 $G(LEXQUIT)="EXP" D
  1. . D:$D(LEXMAIL) XM^LEXXGP3 K LEXQUIT,ZTQUEUED,LEXMAIL,LEXHOME I '$D(LEXTEST) D
  1. . . K ^TMP("LEXASL",$J),^TMP("LEXASLU",$J),^TMP("LEXAWRD",$J),^TMP("LEXAWRDU",$J),^TMP("LEXAWRDK",$J)
  1. . . K ^TMP("LEXTKN",$J),^TMP("LEXXGPDAT",$J),^TMP("LEXXGPTIM",$J),^TMP("LEXXGPRPT",$J)
  1. . . K:'$D(LEXMAIL) ^TMP("LEXXGPMSG",$J) N ZTQUEUED,LEXTEST
  1. Q
  1. AWRDB ; AWRD Word Index Build 8.5 minutes
  1. ; Create the AWRD Index in the ^TMP global
  1. N LEX0P3,LEX0P4,LEXBEG,LEXBEGD,LEXBEGT,LEXCHK,LEXDF,LEXELP,LEXEND,LEXENDT,LEXEX
  1. N LEXEXP,LEXIDX,LEXMC,LEXMCEI,LEXMCI,LEXND,LEXRI,LEXSI,LEXTKC,LEXTKN,LEXTMP,LEXTXT
  1. K ^TMP("LEXAWRD",$J),^TMP("LEXAWRDU",$J),^TMP("LEXAWRDK",$J) S:'$D(LEXQUIT) LEXQUIT="AWRDB"
  1. S LEXBEG=$$BEG,LEXEX=0,LEXTXT="Build 'AWRD' Word Index"
  1. I +($G(ZTSK))>0 S LEXCHK=$$S^%ZTLOAD((LEXTXT_" in file 757.01"))
  1. S LEXEX=0 F S LEXEX=$O(^LEX(757.01,LEXEX)) Q:+LEXEX'>0 D
  1. . N X,LEXEXP,LEXIDX,LEXMC,LEXMCI,LEXMCEI,LEXRI,LEXSI,LEXTKN,LEXTKC,LEXTMP,LEXDEA,LEXTTYP
  1. . S LEX0P3=+LEXEX,LEX0P4=+($G(LEX0P4))+1
  1. . S LEXEXP=$$UP^XLFSTR($G(^LEX(757.01,LEXEX,0))) Q:'$L(LEXEXP)
  1. . S LEXMCI=$P($G(^LEX(757.01,LEXEX,1)),"^",1) Q:+LEXMCI'>0
  1. . S LEXDEA=$$DEA(+LEXEX) Q:LEXDEA>0
  1. . S LEXTTYP=$P($G(^LEX(757.01,+LEXEX,1)),"^",2) Q:LEXTTYP=8
  1. . S LEXMCEI=$P($G(^LEX(757,LEXMCI,0)),"^",1) Q:+LEXMCEI'>0
  1. . ; Words (main)
  1. . K ^TMP("LEXTKN",$J) S LEXIDX="",X=LEXEXP D PTX^LEXTOKN
  1. . I $D(^TMP("LEXTKN",$J,0)),^TMP("LEXTKN",$J,0)>0 D
  1. . . S LEXTKN="",LEXTKC=0
  1. . . F S LEXTKC=$O(^TMP("LEXTKN",$J,LEXTKC)) Q:+LEXTKC'>0 D
  1. . . . N LEXND,LEXTKN S LEXTKN=$O(^TMP("LEXTKN",$J,LEXTKC,"")) Q:'$L(LEXTKN)
  1. . . . I $L($G(LEXTKN)),+($G(LEXMCI))>0,+($G(LEXMCEI))>0,+($G(LEXEX))>0 D
  1. . . . . N LEXND S LEXND="^LEX(757.01,"_LEXEX_",4,""B"","_$$QQ(LEXTKN)_")" Q:$D(@LEXND)
  1. . . . . S LEXND="^TMP(""LEXAWRD"","_$J_","_$$QQ(LEXTKN)_","_+LEXMCEI_")" Q:$D(@LEXND)
  1. . . . . S LEXND="^TMP(""LEXAWRD"","_$J_","_$$QQ(LEXTKN)_","_+LEXMCEI_","_LEXEX_")" S @LEXND=""
  1. . K ^TMP("LEXTKN",$J)
  1. . ; Supplemental Words
  1. . S LEXSI=0 F S LEXSI=$O(^LEX(757.01,LEXEX,5,LEXSI)) Q:+LEXSI'>0 D
  1. . . N LEXND,LEXTKN S LEXTKN=$$UP^XLFSTR($G(^LEX(757.01,LEXEX,5,LEXSI,0))) Q:'$L(LEXTKN)
  1. . . S LEXND="^LEX(757.01,"_LEXEX_",4,""B"","_$$QQ(LEXTKN)_")" Q:$D(@LEXND)
  1. . . I $D(LEXUNQ) S LEXND="^TMP(""LEXAWRD"","_$J_","_$$QQ(LEXTKN)_","_+LEXEX_")" Q:$D(@LEXND)
  1. . . S LEXND="^TMP(""LEXAWRD"","_$J_","_$$QQ(LEXTKN)_","_+LEXEX_","_+LEXMCEI_","_LEXSI_")"
  1. . . S @LEXND="" N LEXUNQ
  1. . ; Linked Words
  1. . I $D(^LEX(757.05,"AEXP",LEXEX)) D
  1. . . N LEXRI S LEXRI=0
  1. . . F S LEXRI=$O(^LEX(757.05,"AEXP",LEXEX,LEXRI)) Q:+LEXRI=0 D
  1. . . . N LEXTKN,LEXMC,LEXND S LEXTKN=$$UP^XLFSTR($P(^LEX(757.05,LEXRI,0),U,1)) Q:'$L(LEXTKN)
  1. . . . S LEXND="^LEX(757.01,"_LEXEX_",4,""B"","_$$QQ(LEXTKN)_")" Q:$D(@LEXND)
  1. . . . S LEXMC=$P($G(^LEX(757.01,LEXEX,1)),U,1) Q:+LEXMC'>0
  1. . . . I $D(LEXUNQ) S LEXND="^TMP(""LEXAWRD"","_$J_","_$$QQ(LEXTKN)_","_LEXEX_")" Q:$D(@LEXND)
  1. . . . S LEXND="^TMP(""LEXAWRD"","_$J_","_$$QQ(LEXTKN)_","_LEXEX_",""LINKED"")"
  1. . . . S @LEXND="" N LEXUNQ
  1. K ^TMP("LEXTKN",$J) H 1 S LEXEND=$$END D SAV^LEXXGP3(LEXBEG,LEXEND,LEXTXT)
  1. S LEXELP=$$ELP(LEXBEG,LEXEND),LEXBEGD=$$ED(LEXBEG)
  1. S LEXBEGT=$$ET(LEXBEG),LEXENDT=$$ET(LEXEND),LEXDF=$$DF(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 AWRDR I $G(LEXQUIT)="AWRDB" D
  1. . D:$D(LEXMAIL) XM^LEXXGP3 I '$D(LEXTEST) D
  1. . . K ^TMP("LEXAWRD",$J),^TMP("LEXAWRDU",$J),^TMP("LEXAWRDK",$J),^TMP("LEXTKN",$J),^TMP("LEXXGPDAT",$J)
  1. . . K ^TMP("LEXXGPTIM",$J),^TMP("LEXXGPRPT",$J) N ZTQUEUED,LEXTEST
  1. Q
  1. AWRDR ; AWRD Word Index Replace 2.5 minutes
  1. N LEX1,LEX2,LEX3,LEXBEG,LEXBEGD,LEXBEGT,LEXCHK,LEXCHR,LEXCHRS,LEXCOM,LEXCTL,LEXDATA
  1. N LEXDF,LEXELP,LEXEND,LEXENDT,LEXEX,LEXIT,LEXLTKN,LEXMC,LEXND,LEXNOD,LEXSP,LEXTK
  1. N LEXTK1,LEXTK2,LEXTK3,LEXTK4,LEXTK5,LEXTKN,LEXTTKN,LEXTXT S (LEX1,LEX2,LEX3)=0
  1. Q:'$D(LEXQUIT) S LEXBEG=$$BEG,LEXTXT="Replace 'AWRD' Word Index"
  1. I +($G(ZTSK))>0 S LEXCHK=$$S^%ZTLOAD((LEXTXT_" in file 757.01"))
  1. K LEXCHRS D CHRS
  1. K ^TMP("LEXAWRDK",$J),^TMP("LEXAWRDU",$J)
  1. S LEXIT=0,LEXCHR="" F S LEXCHR=$O(LEXCHRS(LEXCHR)) Q:'$L(LEXCHR) D
  1. . N LEXLTKN,LEXTTKN,LEXTK1,LEXTK2,LEXTK3,LEXTK4,LEXTK5,LEXTK,LEXIT
  1. . ; For words beginning with a character
  1. . S (LEXTK1,LEXTK2,LEXTK3,LEXTK4,LEXTK5)="",LEXIT=0
  1. . S LEXTK1=$C($A(LEXCHR)-1)_"~",LEXTK2=LEXCHR,LEXTK3=LEXCHR_" "
  1. . S:LEXCHR?1N LEXTK4=LEXCHR-.00000001 S:LEXCHR="." LEXTK5=.00000001
  1. . F LEXTK=LEXTK1,LEXTK2,LEXTK3,LEXTK4,LEXTK5 D
  1. . . Q:'$L(LEXTK) N LEXIT S LEXIT=0 S (LEXLTKN,LEXTTKN)=LEXTK
  1. . . F S LEXLTKN=$O(^LEX(757.01,"AWRD",LEXLTKN)) D Q:LEXIT>0
  1. . . . S:'$L(LEXLTKN) LEXIT=1
  1. . . . S:LEXCHR'?1N&($E(LEXLTKN,1)'=LEXCHR) LEXIT=1
  1. . . . S:LEXCHR?1N&($E(LEXLTKN,1)'?1N) LEXIT=1
  1. . . . Q:LEXIT>0
  1. . . . N LEXND
  1. . . . ; Delete words from the ^LEX global
  1. . . . I $L(LEXLTKN) Q:$D(^TMP("LEXAWRDU",$J,LEXLTKN))
  1. . . . S:$L(LEXLTKN) ^TMP("LEXAWRDU",$J,LEXLTKN)=""
  1. . . . N LEXDATA,LEXND
  1. . . . I $D(LEXFUL) D
  1. . . . . N LEXNOD,LEXCTL,LEXIT,LEXND S LEXIT=0
  1. . . . . S LEXNOD="^LEX(757.01,""AWRD"","""_LEXLTKN_""")"
  1. . . . . S LEXCTL="^LEX(757.01,""AWRD"","""_LEXLTKN_""","
  1. . . . . F S LEXNOD=$Q(@LEXNOD) D Q:LEXIT>0
  1. . . . . . S:'$L(LEXNOD) LEXIT=1 S:LEXNOD'[LEXCTL LEXIT=1
  1. . . . . . Q:LEXIT>0 N LEXFUL S LEX2=LEX2+1
  1. . . . S LEXND="^LEX(757.01,""AWRD"","_$$QQ(LEXLTKN)_")"
  1. . . . K @LEXND S LEX1=LEX1+1
  1. . . S LEXIT=0 F S LEXTTKN=$O(^TMP("LEXAWRD",$J,LEXTTKN)) D Q:LEXIT>0
  1. . . . S:'$L(LEXTTKN) LEXIT=1
  1. . . . S:LEXCHR'?1N&($E(LEXTTKN,1)'=LEXCHR) LEXIT=1
  1. . . . S:LEXCHR?1N&($E(LEXTTKN,1)'?1N) LEXIT=1
  1. . . . Q:LEXIT>0
  1. . . . N LEXND,LEXNOD,LEXCTL,LEXKEY
  1. . . . S LEXNOD="^TMP(""LEXAWRD"","_$J_","_$$QQ(LEXTTKN)_")"
  1. . . . S LEXCTL="^TMP(""LEXAWRD"","_$J_","_$$QQ(LEXTTKN)_","
  1. . . . F S LEXNOD=$Q(@LEXNOD) Q:'$L(LEXNOD)!(LEXNOD'[LEXCTL) D
  1. . . . . ; Copy Index from ^TMP to ^LEX
  1. . . . . ; ^TMP("LEXAWRD",$J,WORD,MCIEN,EXIEN,SPIEN)
  1. . . . . ; ^LEX(757.01,"AWRD",WORD,MCIEN,EXIEN,SPIEN)
  1. . . . . N LEXND,LEXTKN,LEXMC,LEXEX,LEXSP,LEXTND,LEXKEY
  1. . . . . S LEXTND=$TR(LEXNOD,"""","")
  1. . . . . S LEXTKN=$P(LEXTND,",",3)
  1. . . . . S LEXMC=$P(LEXTND,",",4) Q:+LEXMC'>0
  1. . . . . S LEXEX=$P($P(LEXNOD,",",5),")",1) Q:'$L(LEXEX)
  1. . . . . S LEXSP=$P($P(LEXTND,",",6),")",1)
  1. . . . . S LEXND="^LEX(757.01,""AWRD"","_$$QQ(LEXTKN)
  1. . . . . S LEXND=LEXND_","_LEXMC_","_$$QQ(LEXEX)
  1. . . . . S:$L(LEXSP) LEXND=LEXND_","_$$QQ(LEXSP)
  1. . . . . S LEXND=LEXND_")",LEXKEY=$TR(LEXND,"""","")
  1. . . . . S @LEXND="" S:'$D(^TMP("LEXAWRDK",$J,LEXKEY)) LEX3=LEX3+1
  1. . . . . S ^TMP("LEXAWRDK",$J,LEXKEY)=""
  1. . ; Repeat for all characters
  1. K:'$D(LEXTEST)!($D(ZTQUEUED)) ^TMP("LEXAWRDK",$J),^TMP("LEXAWRDU",$J)
  1. H 1 S LEXEND=$$END D SAV^LEXXGP3(LEXBEG,LEXEND,LEXTXT)
  1. S LEXELP=$$ELP(LEXBEG,LEXEND),LEXBEGD=$$ED(LEXBEG)
  1. S LEXBEGT=$$ET(LEXBEG),LEXENDT=$$ET(LEXEND),LEXDF=$$DF(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 LEX1>0,$D(LEXFUL) D
  1. . S LEXCOM=LEX1_" Word"_$S(LEX1>1:"s",1:"")
  1. . D SAV^LEXXGP3(LEXBEG,"","",LEXCOM) W:'$D(ZTQUEUED) !," ",LEXCOM
  1. I LEX3>0,$D(LEXFUL) D
  1. . S LEXCOM=LEX3_" 'AWRD' 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
  1. FMTT(X) ; Format Total
  1. N LEXI,LEXTXT,LEXTMP,LEXBEG,LEXBEGD,LEXBEGT,LEXEND,LEXENDD,LEXENDT,LEXELP
  1. S LEXBEG=$G(^TMP("LEXXGPTIM",$J,"BEG")) Q:$P(LEXBEG,".",1)'?7N ""
  1. S LEXEND=$G(^TMP("LEXXGPTIM",$J,"END")) Q:$P(LEXEND,".",1)'?7N ""
  1. Q:LEXEND'>LEXBEG "" S LEXTXT="Total Time to Repair Indexes"
  1. S LEXELP=$$ELP(LEXBEG,LEXEND),LEXBEGD=$$ED(LEXBEG),LEXBEGT=$$ET(LEXBEG),LEXENDT=$$ET(LEXEND),LEXDF=$$DF(LEXBEG)
  1. Q:'$L(LEXBEGT) "" Q:'$L(LEXENDT) "" Q:'$L(LEXELP) ""
  1. S X=LEXTXT_$J(" ",(35-$L(LEXTXT)))_LEXBEGD_" "_LEXBEGT_" "_LEXENDT_" "_LEXELP
  1. Q X
  1. FMT(X,LEXBD,LEXBT,LEXET,LEXEL) ; Format Line
  1. N LEXTX S LEXTX=$G(X),LEXBD=$G(LEXBD),LEXBT=$G(LEXBT),LEXET=$G(LEXET),LEXEL=$G(LEXEL)
  1. Q:'$L(LEXTX)!('$L(LEXBD))!('$L(LEXBT))!('$L(LEXET))!('$L(LEXEL)) ""
  1. S X=$G(LEXTX)_$J(" ",(35-$L($G(LEXTX))))_LEXBD_" "_LEXBT_" "_LEXET_" "_LEXEL
  1. Q X
  1. DF(X) ; Date Display Format
  1. N LEXO,LEXD,LEXDF,LEXP,LEXC S (X,LEXD)=$P($G(X),".",1) Q:LEXD'?7N "--/--/----"
  1. S LEXP=$O(^TMP("LEXXGPDAT",$J,(LEXD_".001")),-1) S LEXC=1
  1. S:$L(LEXP) LEXC=$O(^TMP("LEXXGPDAT",$J,LEXP," "),-1)
  1. S LEXO=$$ED(LEXD) S:LEXP=LEXD&(LEXC>1) LEXO=" "" "" " S X=LEXO
  1. Q X
  1. ED(X) ; External Date from Fileman
  1. N LEX,LEXT,LEXBD S LEX=$G(X) Q:$P(LEX,".",1)'?7N ""
  1. S LEXT=$$FMTE^XLFDT($G(LEX),"5ZS"),X=$P(LEXT,"@",1)
  1. Q X
  1. ET(X) ; External Time from Fileman
  1. N LEX,LEXT,LEXBD S LEX=$G(X) Q:$P(LEX,".",1)'?7N ""
  1. S LEXT=$$FMTE^XLFDT($G(LEX),"5ZS"),X=$P(LEXT,"@",2)
  1. S:'$L(X) X="00:00:00" S:'$L($P(X,":",1)) $P(X,":",1)="00"
  1. S:'$L($P(X,":",2)) $P(X,":",2)="00" S:'$L($P(X,":",3)) $P(X,":",3)="00"
  1. Q X
  1. BEG(X) ; Begin Date/Time
  1. S X=$$NOW^XLFDT N Y S Y=$G(^TMP("LEXXGPTIM",$J,"BEG"))
  1. S:'$L(Y) Y=X S:+X<Y Y=X S:$P(Y,".",1)?7N ^TMP("LEXXGPTIM",$J,"BEG")=Y
  1. Q X
  1. END(X) ; End Date/Time
  1. S X=$$NOW^XLFDT N Y S Y=$G(^TMP("LEXXGPTIM",$J,"END"))
  1. S:'$L(Y) Y=X S:+X>Y Y=X S:$P(Y,".",1)?7N ^TMP("LEXXGPTIM",$J,"END")=Y
  1. Q X
  1. ELP(X,Y) ; Elapsed Time
  1. N LEXBEG,LEXEND,LEXELP S LEXBEG=$G(X),LEXEND=$G(Y)
  1. Q:$P(LEXBEG,".",1)'?7N " "
  1. Q:$P(LEXEND,".",1)'?7N " "
  1. S LEXELP=$TR($$FMDIFF^XLFDT(LEXEND,LEXBEG,3)," ","0")
  1. S X=LEXELP
  1. Q X
  1. CLR ; Clear Variables
  1. K LEXLOUD,LEXTEST,LEXJ,LEXMAIL,LEXHOME,LEXQUIT
  1. Q
  1. DEA(X) ; Expression/Concept Deactive
  1. N LEXA,LEXEA,LEXEIEN,LEXMA,LEXMIEN,LEXN S LEXEIEN=+($G(X)),LEXN=$G(^LEX(757.01,+LEXEIEN,1))
  1. S LEXEA=+($P(LEXN,"^",5)),LEXMIEN=+LEXN,LEXN=+($P(LEXN,"^",2)) Q:LEXN=1&(LEXEA>0) 1 Q:LEXN=1&(LEXEA'>0) 0
  1. S LEXMIEN=+($G(^LEX(757,+LEXMIEN,0))),LEXMA=+($P($G(^LEX(757.01,+LEXMIEN,1)),"^",5)) Q:(LEXEA+LEXMA)>0 1
  1. Q 0