| 1 | DIKCBLD ;SFISC/MKO-AUTOBUILD A ROUTINE THAT CALLS CREIXN^DDMOD ;11:30 AM  9 Jul 2002
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**95**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | MAIN ;Main process
 | 
|---|
| 6 |  N DIKCRTN,DIKCNMSP,DIKCITL,DIKCXR,%
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ;Check save code
 | 
|---|
| 9 |  D:'$D(DISYS) OS^DII
 | 
|---|
| 10 |  I '$D(^DD("OS",DISYS,"ZS")) W $C(7),$$EZBLD^DIALOG(820) Q
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ;Gather information from user
 | 
|---|
| 13 | Q1 S DIKCRTN=$$ASKRTN Q:U[DIKCRTN
 | 
|---|
| 14 | Q2 S DIKCITL=$$ASKITL Q:DIKCITL[U  I DIKCITL="" W ! G Q1
 | 
|---|
| 15 | Q3 S DIKCNMSP=$$ASKNMSP Q:DIKCNMSP[U  I DIKCNMSP="" W ! G Q2
 | 
|---|
| 16 | Q4 S DIKCXR=$$ASKXR() I 'DIKCXR W ! G Q3
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  ;Build and save routine
 | 
|---|
| 19 |  D BUILD(DIKCRTN,DIKCITL,DIKCNMSP,DIKCXR)
 | 
|---|
| 20 |  D SAVE(DIKCRTN)
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  ;Final message and clean up
 | 
|---|
| 23 |  W !!,"  Done!"
 | 
|---|
| 24 |  W !!,"  Be sure to edit the routine to fill in the missing details,"
 | 
|---|
| 25 |  W !,"  and to customize the call to CREIXN^DDMOD."
 | 
|---|
| 26 |  W !
 | 
|---|
| 27 |  K ^UTILITY($J)
 | 
|---|
| 28 |  Q
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | BUILD(DIKCRTN,DIKCITL,NS,XR) ;Build routine DIKCRTN
 | 
|---|
| 31 |  N CV
 | 
|---|
| 32 |  K ^UTILITY($J)
 | 
|---|
| 33 |  D AD(DIKCRTN_" ;xxxx/"_DIKCITL_"-CREATE NEW-STYLE XREF ;")
 | 
|---|
| 34 |  D AD(" ;;1.0")
 | 
|---|
| 35 |  D AD(" ;")
 | 
|---|
| 36 |  D AD(" N "_NS_"XR,"_NS_"RES,"_NS_"OUT")
 | 
|---|
| 37 |  D BC(NS,XR,"FILE",0,1)
 | 
|---|
| 38 |  D:$P($G(^DD("IX",XR,0)),U,8)="W" BC(NS,XR,"ROOT FILE",0,9)
 | 
|---|
| 39 |  D BC(NS,XR,"NAME",0,2)
 | 
|---|
| 40 |  D BC(NS,XR,"TYPE",0,4)
 | 
|---|
| 41 |  D BC(NS,XR,"USE",0,14)
 | 
|---|
| 42 |  D BC(NS,XR,"EXECUTION",0,6)
 | 
|---|
| 43 |  D BC(NS,XR,"ACTIVITY",0,7)
 | 
|---|
| 44 |  D BC(NS,XR,"SHORT DESCR",0,3)
 | 
|---|
| 45 |  D BCW(NS,XR,"DESCR",.1)
 | 
|---|
| 46 |  D:$P($G(^DD("IX",XR,0)),U,4)="MU"
 | 
|---|
| 47 |  . D BC(NS,XR,"SET",1)
 | 
|---|
| 48 |  . D BC(NS,XR,"KILL",2)
 | 
|---|
| 49 |  . D BC(NS,XR,"WHOLE KILL",2.5)
 | 
|---|
| 50 |  D BC(NS,XR,"SET CONDITION",1.4)
 | 
|---|
| 51 |  D BC(NS,XR,"KILL CONDITION",2.4)
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  S CV=0 F  S CV=$O(^DD("IX",XR,11.1,CV)) Q:'CV  D
 | 
|---|
| 54 |  . N ON,TP,VAL
 | 
|---|
| 55 |  . S ON=$P($G(^DD("IX",XR,11.1,CV,0)),U) Q:'ON
 | 
|---|
| 56 |  . S TP=$P($G(^DD("IX",XR,11.1,CV,0)),U,2)
 | 
|---|
| 57 |  . I TP="F" D
 | 
|---|
| 58 |  .. S VAL=$P($G(^DD("IX",XR,11.1,CV,0)),U,4) Q:'VAL
 | 
|---|
| 59 |  .. D AD(" S "_NS_"XR(""VAL"","_ON_")="_VAL)
 | 
|---|
| 60 |  . E  D
 | 
|---|
| 61 |  .. S VAL=$G(^DD("IX",XR,11.1,CV,1.5)) Q:VAL=""
 | 
|---|
| 62 |  .. D AD(" S "_NS_"XR(""VAL"","_ON_")="_$$QT(VAL))
 | 
|---|
| 63 |  . D BCC(NS,XR,CV,ON,"SUBSCRIPT",0,6)
 | 
|---|
| 64 |  . D BCC(NS,XR,CV,ON,"LENGTH",0,5)
 | 
|---|
| 65 |  . D BCC(NS,XR,CV,ON,"COLLATION",0,7)
 | 
|---|
| 66 |  . D BCC(NS,XR,CV,ON,"LOOKUP PROMPT",0,8)
 | 
|---|
| 67 |  . D:TP="F"
 | 
|---|
| 68 |  .. D BCC(NS,XR,CV,ON,"XFORM FOR STORAGE",2)
 | 
|---|
| 69 |  .. D BCC(NS,XR,CV,ON,"XFORM FOR LOOKUP",4)
 | 
|---|
| 70 |  .. D BCC(NS,XR,CV,ON,"XFORM FOR DISPLAY",3)
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  D AD(" D CREIXN^DDMOD(."_NS_"XR,""SW"",."_NS_"RES,"""_NS_"OUT"")")
 | 
|---|
| 73 |  D AD(" Q")
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 | BC(NS,XR,SUB,ND,PC) ;Build code that sets an array element
 | 
|---|
| 77 |  N VAL
 | 
|---|
| 78 |  I $G(PC)="" S VAL=$G(^DD("IX",XR,ND))
 | 
|---|
| 79 |  E  S VAL=$P($G(^DD("IX",XR,ND)),U,PC)
 | 
|---|
| 80 |  Q:VAL=""
 | 
|---|
| 81 |  D AD(" S "_NS_"XR("""_SUB_""")="_$$QT(VAL))
 | 
|---|
| 82 |  Q
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | BCW(NS,XR,SUB,ND) ;Build code that sets array for wp field
 | 
|---|
| 85 |  N I,VAL
 | 
|---|
| 86 |  S I=0 F  S I=$O(^DD("IX",XR,ND,I)) Q:'I  D
 | 
|---|
| 87 |  . S VAL=$G(^DD("IX",XR,ND,I,0)) S:VAL="" VAL=" "
 | 
|---|
| 88 |  . D AD(" S "_NS_"XR("""_SUB_""","_I_")="_$$QT(VAL))
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 | BCC(NS,XR,CV,ON,SUB,ND,PC) ;Build code that sets an array element
 | 
|---|
| 92 |  N VAL
 | 
|---|
| 93 |  I $G(PC)="" S VAL=$G(^DD("IX",XR,11.1,CV,ND))
 | 
|---|
| 94 |  E  S VAL=$P($G(^DD("IX",XR,11.1,CV,ND)),U,PC)
 | 
|---|
| 95 |  Q:VAL=""
 | 
|---|
| 96 |  D AD(" S "_NS_"XR(""VAL"","_ON_","""_SUB_""")="_$$QT(VAL))
 | 
|---|
| 97 |  Q
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 | QT(X) ;Return string X quoted, if noncanonic
 | 
|---|
| 100 |  Q:$G(X)="" """"""
 | 
|---|
| 101 |  Q:X=+$E($P(X,"E"),1,15) X
 | 
|---|
| 102 |  S X(X)="",X=$Q(X(""))
 | 
|---|
| 103 |  Q $E(X,3,$L(X)-1)
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 | AD(X) ;Add a routine line to ^UTILITY
 | 
|---|
| 106 |  N LN
 | 
|---|
| 107 |  S LN=$O(^UTILITY($J,0," "),-1)+1
 | 
|---|
| 108 |  S ^UTILITY($J,0,LN)=X
 | 
|---|
| 109 |  Q
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 | SAVE(DIKCRTN) ;Save routine DIKCRTN
 | 
|---|
| 112 |  N X,%Y
 | 
|---|
| 113 |  S ^UTILITY($J,0,1)=^UTILITY($J,0,1)_$$NOW
 | 
|---|
| 114 |  S X=DIKCRTN X ^DD("OS",DISYS,"ZS")
 | 
|---|
| 115 |  W !!,$$EZBLD^DIALOG(8025,DIKCRTN)
 | 
|---|
| 116 |  Q
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | ASKRTN() ;Prompt for routine name; return ^ if timeout, null, or ^
 | 
|---|
| 119 |  N DIR,X,Y,DIROUT,DIRUT,DTOUT,DUOUT
 | 
|---|
| 120 |  S DIR(0)="FO^1:8^K:X?.E1.C.E!'(X?1""%""1.7AN!(X?1A1.7AN)) X"
 | 
|---|
| 121 |  S DIR("A")="Routine name"
 | 
|---|
| 122 |  S DIR("?",1)="  Enter the name of the routine, without the leading up-arrow, that"
 | 
|---|
| 123 |  S DIR("?",2)="  should be built."
 | 
|---|
| 124 |  S DIR("?",3)=""
 | 
|---|
| 125 |  S DIR("?",4)="  Answer must be 1-8 characters in length. It must begin with % or a"
 | 
|---|
| 126 |  S DIR("?")="  letter, followed by a combination of letters and numbers."
 | 
|---|
| 127 |  F  D  Q:$G(DIKCRTN)]""
 | 
|---|
| 128 |  . D ^DIR I $D(DIRUT) S DIKCRTN=U Q
 | 
|---|
| 129 |  . S DIKCRTN=X
 | 
|---|
| 130 |  . X ^%ZOSF("TEST") E  Q
 | 
|---|
| 131 |  . Q:$$ASKREPL(DIKCRTN)
 | 
|---|
| 132 |  . S DIKCRTN=""
 | 
|---|
| 133 |  Q $G(DIKCRTN)
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | ASKREPL(DIKCRTN) ;Ask whether to replace the existing routine
 | 
|---|
| 136 |  N DIR,X,Y,DIROUT,DIRUT,DTOUT,DUOUT
 | 
|---|
| 137 |  S DIR(0)="YO"
 | 
|---|
| 138 |  S DIR("A")="  Do you wish to replace routine "_DIKCRTN
 | 
|---|
| 139 |  S DIR("B")="NO"
 | 
|---|
| 140 |  S DIR("?")="    Answer yes if you wish to replace routine "_DIKCRTN_" with a new version."
 | 
|---|
| 141 |  W !!,"  Routine "_DIKCRTN_" already exists."
 | 
|---|
| 142 |  D ^DIR W !
 | 
|---|
| 143 |  Q Y
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 | ASKITL() ;Ask for programmer initials
 | 
|---|
| 146 |  N DIR,X,Y,DIROUT,DIRUT,DTOUT,DUOUT
 | 
|---|
| 147 |  S DIR(0)="FO^1:15"
 | 
|---|
| 148 |  S DIR("A")="Programmer initials"
 | 
|---|
| 149 |  S DIR("?",1)="  Enter your initials, which will appear on the first line of the"
 | 
|---|
| 150 |  S DIR("?")="  routine."
 | 
|---|
| 151 |  D ^DIR
 | 
|---|
| 152 |  Q Y
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 | ASKNMSP() ;Prompt for a namespace
 | 
|---|
| 155 |  N DIR,X,Y,DIROUT,DIRUT,DTOUT,DUOUT
 | 
|---|
| 156 |  S DIR(0)="FO^1:4^K:X?.E1.C.E!'(X?1""%""1.3AN!(X?1A1.3AN)) X"
 | 
|---|
| 157 |  S DIR("A")="Namespace to use for local variables"
 | 
|---|
| 158 |  S DIR("?",1)="  All variables used in the generated routine will start with the namespace"
 | 
|---|
| 159 |  S DIR("?",2)="  you choose."
 | 
|---|
| 160 |  S DIR("?",3)=""
 | 
|---|
| 161 |  S DIR("?",4)="  Answer must be 1-4 characters in length. It must begin with % or a"
 | 
|---|
| 162 |  S DIR("?")="  letter, followed by a combination of letters and numbers."
 | 
|---|
| 163 |  D ^DIR
 | 
|---|
| 164 |  Q Y
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 | ASKXR() ;Prompt for file/xref
 | 
|---|
| 167 |  N DIKCCNT,DIKCROOT,DIKCTOP,DIKCFILE,DDS1,D,DIC,X,Y
 | 
|---|
| 168 |  S DDS1="CROSS-REFERENCE FROM" D W^DICRW Q:Y<0 ""
 | 
|---|
| 169 |  S DIKCTOP=+$P($G(@(DIC_"0)")),U,2) Q:'DIKCTOP ""
 | 
|---|
| 170 |  S DIKCFILE=$$SUB^DIKCU(DIKCTOP)
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  D GETXR^DIKCUTL2(DIKCFILE,.DIKCCNT)
 | 
|---|
| 173 |  W ! D LIST^DIKCUTL2(.DIKCCNT)
 | 
|---|
| 174 |  Q $$CHOOSE^DIKCUTL2(.DIKCCNT,"to build a routine for")
 | 
|---|
| 175 |  ;
 | 
|---|
| 176 | NOW() ;Return current time in external form
 | 
|---|
| 177 |  N %,%I,%H,AP,HR,MIN,MON,TIM,X
 | 
|---|
| 178 |  D NOW^%DTC
 | 
|---|
| 179 |  S TIM=$P(%,".",2)
 | 
|---|
| 180 |  S HR=$E(TIM,1,2)
 | 
|---|
| 181 |  S AP=$S(HR<12:"AM",1:"PM")
 | 
|---|
| 182 |  S HR=$S(HR<13:+HR,1:HR#12)
 | 
|---|
| 183 |  S MIN=$E(TIM_"0000",3,4)
 | 
|---|
| 184 |  ;
 | 
|---|
| 185 |  S MON=$P("Jan^Feb^Mar^Apr^May^Jun^Jul^Aug^Sep^Oct^Nov^Dec",U,%I(1))
 | 
|---|
| 186 |  Q HR_":"_MIN_" "_AP_"  "_%I(2)_" "_MON_" "_(%I(3)+1700)
 | 
|---|