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