| 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) | 
|---|