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

DIEZ.m

Go to the documentation of this file.
  1. DIEZ ;SFISC/GFT - COMPILE INPUT TEMPLATE ; Nov 30, 2012
  1. ;;22.2;VA FileMan;**14,18**;Jan 05, 2016;Build 2
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
  1. ;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
  1. ;;Licensed under the terms of the Apache License, Version 2.0.
  1. ;
  1. I $G(DUZ(0))'="@" W:$D(^DI(.84,0)) $C(7),$$EZBLD^DIALOG(101) G K
  1. EN1 D:'$D(DISYS) OS^DII
  1. I '$D(^DD("OS",DISYS,"ZS")) W $$EZBLD^DIALOG(820),$C(7) G K
  1. S U="^" S:'$G(DTIME) DTIME=300 N L,DNM
  1. D SIZ^DIPZ0(8033) G:$D(DTOUT)!($D(DUOUT))!('X) K S DMAX=X Q:$D(DIX)
  1. TEM K DIC S DIC="^DIE(",DIC(0)="AEQ",DIC("W")="W ?40,""FILE #"",$P(^(0),U,4) W:$D(^(""ROU"")) ?60,^(""ROU"")",DIC("S")="I Y'<1" D ^DIC G:'$D(^DIE(+Y,"DR")) K S DIPZ=+Y
  1. D RNM^DIPZ0(8033) G:$D(DTOUT)!($D(DUOUT))!(X="") K S DNM=X K DIC
  1. W ! S DIR(0)="Y",DIR("A")=$$EZBLD^DIALOG(8020) D ^DIR K DIR G:'Y!($D(DIRUT)) K
  1. S X=DNM,Y=DIPZ K DIPZ
  1. EN ; compile INPUT template
  1. ;INPUT: X=name of routine for compiling, Y=ien of INPUT template
  1. D:'$D(DISYS) OS^DII ;p18
  1. W:'$G(DIEZS) ! K ^UTILITY($J),DRN
  1. N L,DIEZQ,DIR S DMAX=DMAX-2150,DNM=X,DIEZ=+Y,DRN="",DRD=0,DIEZQ=0
  1. D DT^DICRW,DELETROU(DNM) S X=-1 ;p14
  1. S DP=$P(^DIE(DIEZ,0),U,4),DIE=^DIC(DP,0,"GL")
  1. I '$D(^DIE(DIEZ,"DR",1,DP)) S ^DIE(DIEZ,"DR",1,DP)=^DIE(DIEZ,"DR")
  1. ;D DT^DICRW S X=-1 ;p14 move this line before DELETROU to define DISYS
  1. K T S T(1)=$P(^DIE(DIEZ,0),U),T(2)=$$EZBLD^DIALOG(8033),T(3)=DP D BLD^DIALOG(8024,.T,"","DIR") W:'$G(DIEZS) !,DIR K T
  1. D UNCAF(DIEZ)
  1. K DOV,^DIE(DIEZ,"RD"),DR S DR=^("DR",1,DP),(DIER,DL)=1,DIEZL=0,DIEZAB=U
  1. D NEWROU F %=0:0 S %=$O(^DIE(DIEZ,"DR",99,%)) Q:%="" F %Y=0:0 S %Y=$O(^DIE(DIEZ,"DR",99,%,%Y)) Q:%Y="" S F=0,Q=^DIE(DIEZ,"DR",99,%,%Y) D QFF^DIEZ2 S X=" S DR(99,"_%_","_%Y_")="_Q D L^DIEZ2
  1. S X=" N DIEZTMP,DIEZAR,DIEZRXR,DIIENS,DIXR K DIEFIRE,DIEBADK S DIEZTMP=$$GETTMP^DIKC1(""DIEZ"")" D L^DIEZ2
  1. S X=" M DIEZAR=^DIE("_DIEZ_",""AR"") S DICRREC=""TRIG^DIE17""" D L^DIEZ2
  1. N DIEZTMP S DIEZTMP=$$GETTMP^DIKC1("DIEZ")
  1. S X=" S:$D(DTIME)[0 DTIME=300 S D0=DA,DIIENS=DA_"","",DIEZ="_DIEZ_",U=""^""" G ^DIEZ0
  1. ;
  1. NEWROU ;
  1. K ^UTILITY($J,0) S DQ=0,T=99,L=3
  1. S ^UTILITY($J,0,1)=DNM_DRN_" ; "_$P("GENERATED FROM '"_$P(^DIE(DIEZ,0),U,1)_"' INPUT TEMPLATE(#"_DIEZ_"), FILE "_DP,U,DRN="")_";"_$E(DT,4,5)_"/"_$E(DT,6,7)_"/"_$E(DT,2,3)
  1. S ^UTILITY($J,0,2)=" D DE G BEGIN"
  1. S ^UTILITY($J,0,3)="BEGIN S DNM="""_DNM_DRN_""",DQ=1"
  1. I '$D(DRN(+DRN)) S DRN(+DRN)=U
  1. Q
  1. ;
  1. EN2(Y,DIEZFLGS,X,DMAX,DIEZRLA,DIEZZMSG) ;Silent or Talking with parameter passing
  1. ;and optionally return list of routines built and if successful
  1. ;IEN,FLAGS,ROUTINE,RTNMAXSIZE,RTNLISTARRAY,MSGARRAY
  1. ;Y=TEMPLATE IEN (required)
  1. ;FLAGS="T"alk (optional)
  1. ;X=ROUTINE NAME (required)
  1. ;DMAX=ROUTINE SIZE (optional)
  1. ;DIEZRLA=ROUTINE LIST ARRAY, by value (optional)
  1. ;DIEZZMSG=MESSAGE ARRAY (optional) (default ^TMP)
  1. ;*
  1. ;DIEZS will be used to indicate "silent" if set to 1
  1. ;Write statements are made conditional, if not "silent"
  1. ;*
  1. N DIEZS,DNM,DIQUIET,DIEZRIEN,DIEZRLAZ,DIEZRLAF
  1. N DIK,DIC,%I,DICS
  1. S DIEZS=$G(DIEZFLGS)'["T"
  1. S:DIEZS DIQUIET=1
  1. I '$D(DIFM) N DIFM S DIFM=1 D
  1. .N Y,DIEZFLGS,X,DMAX,DIEZRLA,DIEZS
  1. .D INIZE^DIEFU
  1. I $G(Y)'>0 D BLD^DIALOG(1700,"IEN for Edit Template missing or invalid") G EN2E
  1. I '$D(^DIE(Y,0)) D BLD^DIALOG(1700,"No Edit Template on file with IEN="_Y) G EN2E
  1. I $G(X)']"" D BLD^DIALOG(1700,"Routine name missing this Edit Template, IEN="_Y) G EN2E
  1. I X'?1U.NU&(X'?1"%"1U.NU) D BLD^DIALOG(1700,"Routine name invalid") G EN2E
  1. I $L(X)>7 D BLD^DIALOG(1700,"Routine name too long") G EN2E
  1. S DIEZRLA=$G(DIEZRLA,"DIEZRLAZ"),DIEZRIEN=Y
  1. S:DIEZRLA="" DIEZRLA="DIEZRLAZ" S:$G(DMAX)<2500!($G(DMAX)>^DD("ROU")) DMAX=^DD("ROU")
  1. S DIEZRLAF=""
  1. K @DIEZRLA
  1. D EN
  1. G:'DIEZS!(DIEZRLAF) EN2E
  1. D BLD^DIALOG(1700,"Compiling Edit Template (IEN="_DIEZRIEN_")"_$S(DIEZRLAF=0:", routine name too long",1:""))
  1. EN2E I 'DIEZS D MSG^DIALOG() Q
  1. I $G(DIEZZMSG)]"" D CALLOUT^DIEFU(DIEZZMSG)
  1. Q
  1. ;
  1. RECOMP S DIX=1 D DIEZ Q:'$D(DIX) N DIMAX S DIMAX=DMAX
  1. F DIX=0:0 S DIX=$O(^DIE(DIX)) Q:DIX'>0 I $D(^(DIX,0)),$D(^("ROU")) S %=$P(^(0),"^",1),X=$E(^("ROU"),2,99) I X]"" S Y=DIX,DMAX=DIMAX D EN
  1. ;
  1. K K %,DDH,DIC,DIX,DIPZ,DMAX,DNM,DTOUT,DIRUT,DIROUT,DUOUT,X,Y Q
  1. ;DIALOG #101 'only those with programmer's access'
  1. ; #820 'no way to save routines on the system'
  1. ; #8020 'Should the compilation run now?'
  1. ; #8024 'Compiling template name Input template of file n'
  1. ; #8033 'Input template'
  1. UNCAF(DIEZ) ;
  1. ; for one compiled input template (DIEZ), delete its "AF" entries
  1. N %,X S X=""
  1. F S X=$O(^DIE("AF",X)) Q:X="" K:'X ^(X,DIEZ) S %=0 F S %=$O(^DIE("AF",X,%)) Q:%'>0 K:$D(^(%,DIEZ)) ^(DIEZ)
  1. Q
  1. ;
  1. UNC(DIEZ,DIFLAGS) ;
  1. ; DBS: silent entry point to uncompile an input template
  1. ; DIEZ = IEN of input template to uncompile
  1. ; DIFLAGS = flags:
  1. ; D = compiled routines are also deleted
  1. K ^DIE(DIEZ,"ROU")
  1. D UNCAF(DIEZ)
  1. I $G(DIFLAGS)["D" D
  1. . N DINAME S DINAME=$G(^DIE(DIEZ,"ROUOLD")) Q:DINAME=""
  1. . N DIROU,DISUF F DISUF="",1:1 D Q:DIROU=""
  1. . . S DIROU=DINAME_DISUF I '$$ROUEXIST^DILIBF(DIROU) S DIROU="" Q
  1. . . N X S X=DIROU X $G(^DD("OS",DISYS,"DEL"))
  1. Q
  1. ;
  1. ;
  1. DELETROU(DIEZNAME) ;DELETE THE ROUTINES NAMED 'DIEZNAME' CONCATENATED WITH NUMBER
  1. Q:DIEZNAME="" Q:$L($T(+2^@DIEZNAME),";")>2 ;TRY TO KEEP FROM BLOWING AWAY A REAL ROUTINE!
  1. N DIEZ,DIEZDEL,X,DIEZEXST,C
  1. S C=0,DIEZEXST="I $L($T(^@X))",DIEZDEL=$G(^DD("OS",DISYS,"DEL")) Q:DIEZDEL=""
  1. F DIEZ=1:1:1000 D Q:C>20 ;STOP IF THERE IS A GAP OF 20
  1. .S X=DIEZNAME_DIEZ X DIEZEXST I X DIEZDEL S C=0 Q
  1. .S C=C+1
  1. S X=DIEZNAME X DIEZEXST I X DIEZDEL
  1. Q