[641] | 1 | XBFORM ; IHS/ADC/GTH - BUILD ARRAY FROM WP FORMAT ; [ 07/08/1999 3:53 PM ]
|
---|
| 2 | ;;4.0;XB;;Jul 20, 2009;Build 2
|
---|
| 3 | ;
|
---|
| 4 | ; Please refer to routine XBFORM0 for documentation.
|
---|
| 5 | ;
|
---|
| 6 | Q
|
---|
| 7 | ;
|
---|
| 8 | EDIT(XBFORM,XBWPDIC,XBWPFLD) ;EP Edit a Form
|
---|
| 9 | EDIT2 ;
|
---|
| 10 | KILL ^TMP($J,"XBFORM",XBFORM)
|
---|
| 11 | S XBLLINE=0,XBFMT=1
|
---|
| 12 | I $D(XBLMMRK) S XBLMMARK=XBLMMRK
|
---|
| 13 | I '$D(XBLMMARK) S XBLMMARK=$$DIR^XBDIR("Y","MARKERS ","N")
|
---|
| 14 | S XBLMMRK=XBLMMARK
|
---|
| 15 | D EDITWP,WPGET,BUILD,ZBUILD
|
---|
| 16 | ;** add RV markers
|
---|
| 17 | I '$D(XBLMMARK) S XBLMMARK=$$DIR^XBDIR("Y","MARKERS ","N")
|
---|
| 18 | I $D(DIRUT) D EXIT KILL XBLLINE Q
|
---|
| 19 | MARK ;
|
---|
| 20 | I $G(XBLMMARK) F XBRVL=5:5 Q:'$D(XBZ(XBRVL)) S:'(XBRVL#10) $E(XBZ(XBRVL,0),80)=$E(XBRVL)
|
---|
| 21 | KILL XBRVL
|
---|
| 22 | D ARRAY^XBLM("XBZ(",XBFORM),CLEAR^VALM1
|
---|
| 23 | I $$DIR^XBDIR("S^R:Re-Edit;Q:Quit")="R" KILL XBZ G EDIT2
|
---|
| 24 | D EXIT
|
---|
| 25 | KILL XBLLINE
|
---|
| 26 | Q
|
---|
| 27 | ;
|
---|
| 28 | GEN(XBFORM,XBWPDIC,XBWPFLD,XBREF,XBFMT,XBLAST) ;EP ** generate array
|
---|
| 29 | NEW XBLLINE
|
---|
| 30 | S XBLLINE=$G(XBLAST)
|
---|
| 31 | I $D(^TMP($J,"XBFORM",XBFORM)) D ZBUILD,REFBUILD,EXIT Q XBLLINE
|
---|
| 32 | D WPGET,BUILD,ZBUILD,REFBUILD,EXIT
|
---|
| 33 | Q XBLLINE
|
---|
| 34 | ;
|
---|
| 35 | EDITWP ;** edit WP array
|
---|
| 36 | KILL DIE,DIC,DA,DR
|
---|
| 37 | S DIC=XBWPDIC,DR=XBWPFLD,DIC(0)="AEQMLZ"
|
---|
| 38 | I $L($G(XBFORM))>0 S X=XBFORM,DIC(0)="XL"
|
---|
| 39 | D ^DIC
|
---|
| 40 | I Y'>0 S XBQUIT=1 Q
|
---|
| 41 | S DIE=$$DIC^XBDIQ1(XBWPDIC),DA=+Y,DR=XBWPFLD
|
---|
| 42 | D ^DIE
|
---|
| 43 | Q
|
---|
| 44 | ;
|
---|
| 45 | WPGET ;** get WP array
|
---|
| 46 | KILL XBWP,XBL,XBOUT,XBVAR,XBWWP,DIC,DR,DIE,DA
|
---|
| 47 | S X=XBFORM,DIC=XBWPDIC,DR=XBWPFLD,DIC(0)="X"
|
---|
| 48 | D ^DIC
|
---|
| 49 | I Y'>0 S XBWP(1)=XBFORM_" NOT FOUND",XBQUIT=1
|
---|
| 50 | S DA=+Y
|
---|
| 51 | D ENP^XBDIQ1(XBWPDIC,DA,XBWPFLD,"XBWWP(")
|
---|
| 52 | S %X="XBWWP("_XBWPFLD_",",%Y="XBWP("
|
---|
| 53 | D %XY^%RCR
|
---|
| 54 | KILL XBWWP
|
---|
| 55 | Q
|
---|
| 56 | ;
|
---|
| 57 | BUILD ;** scan WP array to build XBL
|
---|
| 58 | S XBWPL="",XBLINE=0
|
---|
| 59 | Q:$D(^TMP($J,"XBFORM",XBFORM))
|
---|
| 60 | F S XBWPL=$O(XBWP(XBWPL)) Q:XBWPL'>0 D LINE
|
---|
| 61 | Q
|
---|
| 62 | ;
|
---|
| 63 | LINE ;** process one line of the WP array
|
---|
| 64 | S Z=XBWP(XBWPL),XBLINE=XBLINE+1
|
---|
| 65 | F I=1:1:$L(Z) S A=$E(Z,I) D Q:$G(XBQUIT)
|
---|
| 66 | . I I=1,A="#" D MAP S I=$L(Z),XBLINE=XBLINE-1,XBQUIT=1 Q
|
---|
| 67 | . I I=1,A="*" D OUT S I=$L(Z),XBLINE=XBLINE-1,XBQUIT=1 Q
|
---|
| 68 | . I I=1,A=";" S I=$L(Z),XBLINE=XBLINE-1,XBQUIT=1 Q
|
---|
| 69 | . I A'=" ",A'="|" D TEXT Q
|
---|
| 70 | . I A="|" D VAR Q
|
---|
| 71 | .Q
|
---|
| 72 | KILL XBQUIT
|
---|
| 73 | Q
|
---|
| 74 | ;
|
---|
| 75 | ZBUILD ;** build Z array from XBL
|
---|
| 76 | KILL Z
|
---|
| 77 | I '$G(XBFMT) F XBL=1:1 D Q:('$O(^TMP($J,"XBFORM",XBFORM,XBL)))
|
---|
| 78 | . I '$D(^TMP($J,"XBFORM",XBFORM,XBL)),$O(^TMP($J,"XBFORM",XBFORM,XBL)) S XBZ(XBL+XBLLINE)=" " Q
|
---|
| 79 | . D FILL
|
---|
| 80 | .Q
|
---|
| 81 | I $G(XBFMT)=1 F XBL=1:1 D Q:('$O(^TMP($J,"XBFORM",XBFORM,XBL)))
|
---|
| 82 | . I '$D(^TMP($J,"XBFORM",XBFORM,XBL)),$O(^TMP($J,"XBFORM",XBFORM,XBL)) S XBZ(XBL+XBLLINE,0)=" " Q
|
---|
| 83 | . D FILL
|
---|
| 84 | .Q
|
---|
| 85 | Q
|
---|
| 86 | ;
|
---|
| 87 | REFBUILD ; %RCR BACK TO CALL
|
---|
| 88 | S %Y=XBREF,%X="XBZ("
|
---|
| 89 | D %XY^%RCR
|
---|
| 90 | S XBLLINE=XBLLINE+XBL
|
---|
| 91 | Q
|
---|
| 92 | ;
|
---|
| 93 | FILL ;** fill one line
|
---|
| 94 | S XBCOL=0,T=""
|
---|
| 95 | F S XBCOL=$O(^TMP($J,"XBFORM",XBFORM,XBL,XBCOL)) Q:XBCOL'>0 D
|
---|
| 96 | . S X=^TMP($J,"XBFORM",XBFORM,XBL,XBCOL)
|
---|
| 97 | . S XBCOLX=XBCOL
|
---|
| 98 | . I XBCOL#1 S XBCOLX=XBCOL\1,X="S X="_X X X
|
---|
| 99 | . S XBXL=$L(X)
|
---|
| 100 | . Q:X=""
|
---|
| 101 | . S T=$$SETSTR^VALM1(X,T,XBCOLX,XBXL)
|
---|
| 102 | .Q
|
---|
| 103 | I T="" S XBLLINE=$G(XBLLINE)-1 Q
|
---|
| 104 | S:'$G(XBFMT) XBZ(XBL+XBLLINE)=T
|
---|
| 105 | S:($G(XBFMT)=1) XBZ(XBL+XBLLINE,0)=T
|
---|
| 106 | Q
|
---|
| 107 | ;
|
---|
| 108 | TEXT ;**
|
---|
| 109 | NEW W
|
---|
| 110 | S XBCOL=I
|
---|
| 111 | F W=I:1:$L(Z) S A=$E(Z,W) Q:A="|"
|
---|
| 112 | I W'=$L(Z) S W=W-1
|
---|
| 113 | S XBT=$E(Z,I,W),^TMP($J,"XBFORM",XBFORM,XBLINE,XBCOL)=XBT,I=W
|
---|
| 114 | Q
|
---|
| 115 | ;
|
---|
| 116 | VAR ;** add .5 to column count to indicate a variable vs text
|
---|
| 117 | S XBCOL=I
|
---|
| 118 | F W=I+1:1:$L(Z) S A=$E(Z,W) I A="|" Q
|
---|
| 119 | S XBT=$E(Z,I+1,W-1)
|
---|
| 120 | I XBT="" S XBT="""|"""
|
---|
| 121 | S ^TMP($J,"XBFORM",XBFORM,XBLINE,XBCOL+.5)=XBT,I=W
|
---|
| 122 | I XBT'["@" D Q
|
---|
| 123 | . Q:'$D(XBOUT(XBT))
|
---|
| 124 | . I $E(XBOUT(XBT))=";" S XBOUT(XBT)=$$FMSUB(XBOUT(XBT))
|
---|
| 125 | . S O=XBOUT(XBT),XBT=$$SUB^XBFORM1(XBT,O)
|
---|
| 126 | . S ^TMP($J,"XBFORM",XBFORM,XBLINE,XBCOL+.5)=XBT
|
---|
| 127 | .Q
|
---|
| 128 | S XBV=$P(XBT,"@"),XBV=XBVAR(XBV),XBS=$P(XBT,"@",2)
|
---|
| 129 | I $L(XBS) S XBS="("_XBS_")"
|
---|
| 130 | S ^TMP($J,"XBFORM",XBFORM,XBLINE,XBCOL+.5)=XBV_XBS
|
---|
| 131 | I $D(XBOUT(XBT)) D
|
---|
| 132 | . I $E(XBOUT(XBT))=";" S XBOUT(XBT)=$$FMSUB(XBOUT(XBT))
|
---|
| 133 | . S O=XBOUT(XBT),XBT=XBV_XBS,XBT=$$SUB^XBFORM1(XBT,O)
|
---|
| 134 | . S ^TMP($J,"XBFORM",XBFORM,XBLINE,XBCOL+.5)=XBT
|
---|
| 135 | .Q
|
---|
| 136 | Q
|
---|
| 137 | ;
|
---|
| 138 | MAP ;** map shorthand for variables
|
---|
| 139 | ;#xx1=yyy1|xx2=yyy2|
|
---|
| 140 | S Z=$E(Z,2,999)
|
---|
| 141 | I Z'["|" S XBVSUB=$P(Z,"="),XBVAL=$P(Z,"=",2),XBVAR(XBVSUB)=XBVAL Q
|
---|
| 142 | F I=1:1 S P=$P(Z,"|",I) Q:P="" S XBVSUB=$P(P,"="),XBVAL=$P(P,"=",2),XBVAR(XBVSUB)=XBVAL
|
---|
| 143 | Q
|
---|
| 144 | ;
|
---|
| 145 | OUT ;** output transform of data field
|
---|
| 146 | ;*field:mumps output transform f(x)|
|
---|
| 147 | S Z=$E(Z,2,999)
|
---|
| 148 | I Z'["|" S XBVSUB=$P(Z,":"),XBVAL=$P(Z,":",2,99),XBOUT(XBVSUB)=XBVAL Q
|
---|
| 149 | F I=1:1 S P=$P(Z,"|",I) Q:P="" S XBVSUB=$P(P,":"),XBVAL=$P(P,":",2,99),XBOUT(XBVSUB)=XBVAL
|
---|
| 150 | Q
|
---|
| 151 | ;
|
---|
| 152 | TABS ;
|
---|
| 153 | S XBF="|....^...."
|
---|
| 154 | W #
|
---|
| 155 | F I=0:1:7 W ?I*10,I*10
|
---|
| 156 | F L=1:1:66 W !?1,L,?3,"..^...." F X=1:1:7 W XBF
|
---|
| 157 | Q
|
---|
| 158 | ;
|
---|
| 159 | EXIT ;
|
---|
| 160 | KILL XBZ,XBFMT,XBCOL,XBCOLX,XBF,XBL,XBLINE,XBLN,XBLOAD,XBOUT,XBQUIT,XBROU,XBS,XBT,XBTAG,XBTAGE,XBV,XBVAL,XBVAR,XBVSUB,XBWP,XBWPDA,XBWPDIC,XBWPFLD,XBWPL,XBWPNODE,XBWPSUB,XBWWP,XBX,XBXL,XBRVL,XBLWP,XBLMMRK
|
---|
| 161 | KILL XBLIN,XBLIN0,XBLIN1,XBLINX
|
---|
| 162 | Q
|
---|
| 163 | ;
|
---|
| 164 | MDY(X) ;external date to mm/dd/yy x :: var or ~"NOW"~ or ~"TODAY"~
|
---|
| 165 | S %DT="TS"
|
---|
| 166 | D ^%DT
|
---|
| 167 | ;begin Y2K fix block
|
---|
| 168 | ;S X=$E(Y,4,5)_"/"_$E(Y,6,7)_"/"_$E(Y,2,3)
|
---|
| 169 | S X=$E(Y,4,5)_"/"_$E(Y,6,7)_"/"_($E(Y,1,3)+1700) ;Y2000
|
---|
| 170 | ;end Y2K fix block
|
---|
| 171 | Q X
|
---|
| 172 | ;
|
---|
| 173 | WP(X) ;build wp entry X #:: WP(FLD,n)=TEXTn
|
---|
| 174 | NEW I,W
|
---|
| 175 | S XBLWP=$G(XBLLINE),W=$P(X,")")
|
---|
| 176 | F I=0:1 S X=$Q(@X) Q:X="" Q:(W'=$P(X,",")) D
|
---|
| 177 | . S T=@X,XBLLINE=XBLWP+I
|
---|
| 178 | . S:'$G(XBFMT) XBZ(XBL+XBLLINE)=T
|
---|
| 179 | . S:($G(XBFMT)=1) XBZ(XBL+XBLLINE,0)=T
|
---|
| 180 | .Q
|
---|
| 181 | Q ""
|
---|
| 182 | ;
|
---|
| 183 | FL(X) ; FL fill lines until line X
|
---|
| 184 | NEW I,W
|
---|
| 185 | S XBLWP=$G(XBLLINE)
|
---|
| 186 | Q:((XBLLINE+XBL)'<X) ""
|
---|
| 187 | F XBLLINE=XBLLINE:1:X-XBL D
|
---|
| 188 | . S T=" "
|
---|
| 189 | . S:'$G(XBFMT) XBZ(XBL+XBLLINE)=T
|
---|
| 190 | . S:($G(XBFMT)=1) XBZ(XBL+XBLLINE,0)=T
|
---|
| 191 | .Q
|
---|
| 192 | Q ""
|
---|
| 193 | ;
|
---|
| 194 | FMSUB(X) ;process popular ;D8 ;L20 ;R20
|
---|
| 195 | NEW BARC,BARP
|
---|
| 196 | S BARC=$E(X,2),BARP=$E(X,3,999)
|
---|
| 197 | I BARC="D" S X="$J(X,"_BARP_",2)" Q X
|
---|
| 198 | I BARC="L" S X="$E(X,1,"_BARP_")" Q X
|
---|
| 199 | I BARC="R" S X="$J(X,"_BARP_")" Q X
|
---|
| 200 | S X="X"
|
---|
| 201 | Q X
|
---|
| 202 | ;
|
---|