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

LEXXGI2.m

Go to the documentation of this file.
  1. LEXXGI2 ;ISL/KER - Global Import (Protocol/Checksum/Misc) ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**25,26,28,29,46,49,50,73,80,103**;Sep 23, 1996;Build 2
  1. ;
  1. ; Global Variables
  1. ; ^LEXM N/A
  1. ; ^ORD(101, ICR 872
  1. ;
  1. ; External References
  1. ; $$FMDIFF^XLFDT ICR 10103
  1. ; $$FMTE^XLFDT ICR 10103
  1. ; $$NOW^XLFDT ICR 10103
  1. ; BMES^XPDUTL ICR 10141
  1. ; MES^XPDUTL ICR 10141
  1. ; EN^XQOR ICR 10101
  1. ;
  1. ; Local Variables NEWed or KILLed Elsewhere
  1. ; LEXCHG Post-Install
  1. ; LEXNOPRO Post-Install
  1. ; XPDNM KIDS install
  1. ;
  1. Q
  1. NOTIFY ; Notify by Protocol - LEXICAL SERVICES UPDATE
  1. ; Uses LEXSCHG() from the Post-Install
  1. ; Sets ^LEXM(0,"PRO")=$$NOW^XLFDT
  1. Q:$D(LEXNOPRO) Q:'$D(LEXSCHG("ICD"))&('$D(LEXSCHG("CPT")))&('$D(LEXSCHG("LEX")))
  1. S:$D(LEXSCHG("ICD")) LEXSCHG("ICD")=0,LEXSCHG("LEX")=0 S:$D(LEXSCHG("CPT")) LEXSCHG("CPT")=0,LEXSCHG("LEX")=0
  1. S:'$D(LEXSCHG("ICD"))&('$D(LEXSCHG("CPT")))&($D(LEXSCHG("LEX"))) LEXSCHG("ICD")=0,LEXSCHG("CPT")=0
  1. N X,LEXU,LEXF,LEXI,LEXL,LEX1,LEX2,LEX3,LEXN,LEXP,LEXUP,LEXPC S LEXUP="",LEXPC=0
  1. S:$D(LEXSCHG("ICD")) LEXUP=$G(LEXUP)_"ICD" S:$D(LEXSCHG("CPT")) LEXUP=$G(LEXUP)_"/CPT"
  1. S:$E(LEXUP,1)="/" LEXUP=$E(LEXUP,2,$L(LEXUP)) S:$L(LEXUP) LEXUP=LEXUP_" "
  1. S:$D(LEXSCHG("LEX")) LEXF="Lexicon" S:$D(LEXSCHG("ICD")) LEXF=$G(LEXF)_", ICD" S:$D(LEXSCHG("CPT")) LEXF=$G(LEXF)_", CPT"
  1. S:$E($G(LEXF),1,2)=", " LEXF=$E($G(LEXF),3,$L($G(LEXF))),LEXF=$$TRIM(LEXF)
  1. I $L(LEXF) D
  1. . S:$L(LEXF,", ")>1 LEXF=$P($G(LEXF),", ",1,($L($G(LEXF),", ")-1))_" and "_$P($G(LEXF),", ",$L($G(LEXF),", "))
  1. . S:$L($P(LEXF,", ",1)) LEXF=$G(LEXF)_" File"_$S(LEXF[", ":"s",LEXF[" and ":"s",1:"")_" Updated"
  1. S LEXL=78-($L(LEXF)+4),LEXU="Lexical Files Updated"
  1. Q:'$D(LEXSCHG) S LEXP=+($O(^ORD(101,"B","LEXICAL SERVICES UPDATE",0))) Q:LEXP=0 S X=LEXP_";ORD(101," D EN^XQOR
  1. S:$G(LEXSCHG("LEX"))>0!($G(LEXSCHG("ICD"))>0)!($G(LEXSCHG("CPT"))>0) ^LEXM(0,"PRO")=$$NOW^XLFDT
  1. S:$G(LEXSCHG("ICD"))>0!($G(LEXSCHG("CPT"))>0) LEXU="Lexicon/Code Sets Updated"
  1. Q:+($G(^LEXM(0,"PRO")))'>0 K LEXPROC D:$L($G(LEXU)) BL,TL($G(LEXU)),BL
  1. I +($G(LEXSCHG("LEX")))>0 D
  1. . N X,LEXED S X=" 'LEXICAL SERVICES UPDATE' ",X=X_$J(" ",(30-$L(X)))
  1. . S LEXED=$$EDT($G(LEXSCHG("LEX"))) S:$L(LEXED) X=X_" "_LEXED S LEXPC=+($G(LEXPC))+1 S:$L(LEXED) LEXPROC((LEXPC+1))=X
  1. I +($G(LEXSCHG("ICD")))>0 D
  1. . N X,LEXED S X=" 'ICD CODE UPDATE EVENT' ",X=X_$J(" ",(30-$L(X)))
  1. . S LEXED=$$EDT($G(LEXSCHG("ICD"))) S:$L(LEXED) X=X_" "_LEXED S LEXPC=+($G(LEXPC))+1 S:$L(LEXED) LEXPROC((LEXPC+1))=X
  1. I +($G(LEXSCHG("CPT")))>0 D
  1. . N X,LEXED S X=" 'CPT CODE UPDATE EVENT' ",X=X_$J(" ",(30-$L(X)))
  1. . S LEXED=$$EDT($G(LEXSCHG("CPT"))) S:$L(LEXED) X=X_" "_LEXED S LEXPC=+($G(LEXPC))+1 S:$L(LEXED) LEXPROC((LEXPC+1))=X
  1. S:$O(LEXPROC(" "),-1)>1 LEXPROC(1)="Protocol invoked:" S:$O(LEXPROC(" "),-1)>2 LEXPROC(1)="Protocols invoked:"
  1. S LEXPC=0 F S LEXPC=$O(LEXPROC(LEXPC)) Q:+LEXPC'>0 D
  1. . S X=$G(LEXPROC(LEXPC)) D TL(X) D:X["Protocol" BL
  1. S X="Subscribing applications were notified of the "_LEXUP_"update" D BL,TL(X),BL
  1. Q
  1. UPCHG ;
  1. Q:+($G(LEXFI))'>0 N LEXID S LEXID=$S($P(LEXFI,".",1)="757":"LEX",$P(LEXFI,".",1)="80":"ICD",$P(LEXFI,".",1)="81":"CPT",1:"") Q:'$L(LEXID)
  1. S LEXSCHG(LEXID)=+($G(LEXSCHG(LEXID)))
  1. Q
  1. SCHG ; Change Array LEXSCHG (Some or all, but never nothing)
  1. N LEXFI,LEXID K LEXSCHG S LEXCHG=0
  1. N LEXFI S LEXFI=0 F S LEXFI=$O(^LEXM(LEXFI)) Q:+LEXFI'>0 D
  1. . S LEXID=$S(LEXFI=80!(LEXFI=80.1):"ICD",LEXFI=81!(LEXFI=81.1)!(LEXFI=81.2)!(LEXFI=81.3):"CPT",$P(LEXFI,".",1)=757:"LEX",1:"UNK")
  1. . S LEXSCHG(LEXFI,0)=+($G(^LEXM(LEXFI,0))),LEXSCHG("B",LEXFI)="" S LEXSCHG("C",LEXID,LEXFI)=""
  1. S:$D(LEXSCHG("C","CPT"))!($D(LEXSCHG("C","ICD"))) LEXSCHG("D","PRO")=""
  1. S:$D(^LEXM(80))!($D(^LEXM(80.1)))!($D(^LEXM(81)))!($D(^LEXM(81.2)))!($D(^LEXM(81.3)))!($D(LEXSCHG("D","PRO"))) LEXCHG=1,LEXSCHG(0)=1
  1. D:$O(LEXSCHG(0))'>0 SALL S:$D(LEXSCHG("C","CPT"))!($D(LEXSCHG("C","ICD"))) LEXSCHG("D","PRO")=""
  1. Q
  1. SALL ; Set All (ICD/CPT/Lexicon)
  1. D SICD,SCPT,SLEX
  1. Q
  1. SICD ; Set ICD
  1. S (LEXSCHG("80",0),LEXSCHG("B","80"),LEXSCHG("C","ICD","80"))="",(LEXSCHG("80.1",0),LEXSCHG("B","80.1"),LEXSCHG("C","ICD","80.1"))="" D SLEX
  1. Q
  1. SCPT ; Set CPT
  1. S (LEXSCHG("81",0),LEXSCHG("B","81"),LEXSCHG("C","CPT","81"))="",(LEXSCHG("81.1",0),LEXSCHG("B","81.1"),LEXSCHG("C","CPT","81.1"))=""
  1. S (LEXSCHG("81.2",0),LEXSCHG("B","81.2"),LEXSCHG("C","CPT","81.2"))="",(LEXSCHG("81.3",0),LEXSCHG("B","81.3"),LEXSCHG("C","CPT","81.3"))="" D SLEX
  1. Q
  1. SLEX ; Set Lexicon
  1. S (LEXSCHG("757",0),LEXSCHG("B","757"),LEXSCHG("C","LEX","757"))="",(LEXSCHG("757.001",0),LEXSCHG("B","757.001"),LEXSCHG("C","LEX","757.001"))=""
  1. S (LEXSCHG("757.01",0),LEXSCHG("B","757.01"),LEXSCHG("C","LEX","757.01"))="",(LEXSCHG("757.02",0),LEXSCHG("B","757.02"),LEXSCHG("C","LEX","757.02"))=""
  1. S (LEXSCHG("757.1",0),LEXSCHG("B","757.1"),LEXSCHG("C","LEX","757.1"))=""
  1. Q
  1. CS ; Checksum for import global
  1. N LEXCHK,LEXNDS,LEXVER S LEXCHK=+($G(^LEXM(0,"CHECKSUM")))
  1. W !," Running checksum routine on the ^LEXM import global, please wait"
  1. S LEXNDS=+($G(^LEXM(0,"NODES"))),LEXVER=+($$VC(LEXCHK,LEXNDS)) W !
  1. W:LEXVER>0 !," Checksum is ok",! Q:LEXVER>0
  1. I LEXVER=0 W !!," Import global ^LEXM is missing. Please obtain a copy of ^LEXM before",!," continuing." Q
  1. I LEXVER<0 D Q
  1. . I LEXVER'=-3 W !," Unable to verify checksum for import global ^LEXM (possibly corrupt)"
  1. . I LEXVER=-3 W !," Import global ^LEXM failed checksum"
  1. . W !!," Please KILL the existing import global ^LEXM from your system and"
  1. . W !," obtain a new copy of ^LEXM before continuing with the installation."
  1. Q
  1. VC(X,Y) ; Verify Checksum for import global
  1. Q:'$D(^LEXM)!('$D(^LEXM(0)))!($O(^LEXM(0))'>0) 0 N LEXCHK,LEXNDS,LEXCNT,LEXLC,LEXL,LEXS,LEXNC,LEXD,LEXN,LEXC,LEXGCS,LEXP,LEXT
  1. S LEXCHK=+($G(X)),LEXNDS=+($G(Y)) Q:LEXCHK'>0!(LEXNDS'>0) -2 S LEXL=64,(LEXCNT,LEXLC)=0,LEXS=(+(LEXNDS\LEXL))
  1. S:LEXS=0 LEXS=1 W:+($O(^LEXM(0)))>0 ! S (LEXC,LEXN)="^LEXM",(LEXNC,LEXGCS)=0 W " "
  1. F S LEXN=$Q(@LEXN) Q:LEXN=""!(LEXN'[LEXC) D
  1. . Q:LEXN="^LEXM(0,""CHECKSUM"")" Q:LEXN="^LEXM(0,""NODES"")" S LEXCNT=LEXCNT+1
  1. . I LEXCNT'<LEXS S LEXLC=LEXLC+1 W:LEXLC'>LEXL "." S LEXCNT=0
  1. . S LEXNC=LEXNC+1,LEXD=@LEXN,LEXT=LEXN_"="_LEXD F LEXP=1:1:$L(LEXT) S LEXGCS=$A(LEXT,LEXP)*LEXP+LEXGCS
  1. Q:LEXNC'=LEXNDS -3 Q:LEXGCS'=LEXCHK -3
  1. Q 1
  1. ; Miscellaneous
  1. NF ; Import Global Not Found
  1. D PB(" Import Global ^LEXM not found, consult the installation instructions")
  1. D TL(" to install this global")
  1. Q
  1. IG ; Invalid Import Global
  1. D PB(" Invalid Import Global ^LEXM, please consult the installation")
  1. D TL(" instructions to reload this global")
  1. Q
  1. BL ; Blank Line
  1. N X S X="" W:'$D(XPDNM) ! D:$D(XPDNM) MES^XPDUTL(X) Q
  1. PB(X) ; Preceeding Blank Line
  1. S X=$G(X) Q:'$L(X) W:'$D(XPDNM) !!,X D:$D(XPDNM) BMES^XPDUTL(X) Q
  1. TL(X) ; Text Line
  1. S X=$G(X) Q:'$L(X) W:'$D(XPDNM) !,X D:$D(XPDNM) MES^XPDUTL(X) Q
  1. HACK(X) ; Time
  1. S X=$$NOW^XLFDT Q X
  1. ELAP(LEX1,LEX2) ; Elapsed Time
  1. N X S X=$$FMDIFF^XLFDT(+($G(LEX2)),+($G(LEX1)),3)
  1. S:X="" X="00:00:00" S X=$TR(X," ","0") S LEX1=X Q LEX1
  1. Q
  1. KLEXM ; Subscripted Kill of ^LEXM - files only
  1. N LEX S LEX=0 F S LEX=$O(^LEXM(LEX)) Q:+LEX'>0 K ^LEXM(LEX)
  1. Q
  1. KALL ; Subscripted Kill of ^LEXM - all
  1. K LEXPTYPE,LEXLREV,LEXREQP,LEXBUILD,LEXIGHF,LEXFY,LEXQTR,LEXB,LEXCD,LEXSTR,LEXLAST
  1. K DIC,DICR,DILOCKTM,DIW,XMDUN,XMZ,ZTSK
  1. N LEX S LEX=0 F S LEX=$O(^LEXM(LEX)) Q:+LEX'>0 K ^LEXM(LEX)
  1. K ^LEXM(0)
  1. Q
  1. ; Error Text
  1. ET(X) ; Save Text
  1. N LEXI S LEXI=+($G(LEXE(0))),LEXI=LEXI+1,LEXE(LEXI)=$G(X),LEXE(0)=LEXI Q
  1. ED ; Display Text
  1. N LEXI S LEXI=0 F S LEXI=$O(LEXE(LEXI)) Q:+LEXI=0 W !,LEXE(LEXI)
  1. W ! K LEXE
  1. Q
  1. ; Case
  1. MIX(X) ; Mixed Case
  1. S X=$G(X) N LEXT,LEXI S LEXT=""
  1. F LEXI=1:1:$L(X," ") S LEXT=LEXT_" "_$$UP($E($P(X," ",LEXI),1))_$$LO($E($P(X," ",LEXI),2,$L($P(X," ",LEXI))))
  1. F Q:$E(LEXT,1)'=" " S LEXT=$E(LEXT,2,$L(LEXT))
  1. S:$E(LEXT,1,3)="Cpt" LEXT="CPT"_$E(LEXT,4,$L(LEXT)) S:$E(LEXT,1,3)="Icd" LEXT="ICD"_$E(LEXT,4,$L(LEXT)) S X=LEXT
  1. Q X
  1. UP(X) ; Uppercase
  1. Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  1. LO(X) ; Lowercase
  1. Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
  1. CLR ; Clear
  1. K DIW,DIWF,DIWI,DIWL,DIWR,DIWT,DIWTC,DIWX,DN,DTOUT,DUOUT,LEX
  1. K LEX1,LEX2,LEX3,LEXC,LEXCHK,LEXCNT,LEXCT,LEXD,LEXE,LEXED
  1. K LEXF,LEXFI,LEXGCS,LEXI,LEXID,LEXL,LEXLC,LEXLEN,LEXN,LEXNC
  1. K LEXNDS,LEXP,LEXPC,LEXPROC,LEXS,LEXSCHG,LEXT,LEXTI,LEXU
  1. K LEXUP,LEXVER,X,Y
  1. Q
  1. EDT(LEX) ; External Date
  1. S LEX=$$FMTE^XLFDT($G(LEX),"1Z") S:LEX["@" LEX=$P(LEX,"@",1)_" "_$P(LEX,"@",2,4000)
  1. Q LEX
  1. TRIM(X) ; Trim Spaces
  1. N XPDNM S X=$G(X) Q:X="" X F Q:$E(X,1)'=" " S X=$E(X,2,$L(X))
  1. F Q:$E(X,$L(X))'=" " S X=$E(X,1,($L(X)-1))
  1. F Q:X'[" " S X=$P(X," ",1)_" "_$P(X," ",2,229)
  1. Q X