1 | C0QUTIL ;JJOH/ZAG/GPL - Utilities for C0Q Package ; 7/31/12 7:42am
|
---|
2 | ;;1.0;C0Q;;May 21, 2012;Build 63
|
---|
3 | ;
|
---|
4 | ;2011 Licensed under the terms of the GNU General Public License
|
---|
5 | ;See attached copy of the License.
|
---|
6 | ;
|
---|
7 | ;This program is free software; you can redistribute it and/or modify
|
---|
8 | ;it under the terms of the GNU General Public License as published by
|
---|
9 | ;the Free Software Foundation; either version 2 of the License, or
|
---|
10 | ;(at your option) any later version.
|
---|
11 | ;
|
---|
12 | ;This program is distributed in the hope that it will be useful,
|
---|
13 | ;but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
14 | ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
15 | ;GNU General Public License for more details.
|
---|
16 | ;
|
---|
17 | ;You should have received a copy of the GNU General Public License along
|
---|
18 | ;with this program; if not, write to the Free Software Foundation, Inc.,
|
---|
19 | ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
---|
20 | ;
|
---|
21 | AGE(DFN) ; return current age in years and months
|
---|
22 | ;
|
---|
23 | Q:'$G(DFN) ;quit if no there is no patient
|
---|
24 | N DOB S DOB=$P(^DPT(+DFN,0),U,3) ;date of birth
|
---|
25 | N YRS
|
---|
26 | N DOD S DOD=+$G(^DPT(9,.35)) ;check for date of death
|
---|
27 | I 'DOD D
|
---|
28 | . N CDTE S CDTE=DT ;current date
|
---|
29 | . S YRS=$E(CDTE,1,3)-$E(DOB,1,3)-($E(CDTE,4,7)<$E(DOB,4,7))
|
---|
30 | E D
|
---|
31 | . S YRS=$E(DOD,1,3)-$E(DOB,1,3)-($E(DOD,4,7)<$E(DOB,4,7))
|
---|
32 | ;
|
---|
33 | ;Come back here and fix MONTHS and DAYS
|
---|
34 | ;N CM S CM=+$E(DT,4,5) ;current month
|
---|
35 | ;N CD S CD=+$E(DT,6,7) ;current day
|
---|
36 | ;N BM S BM=+$E(DOB,4,5) ;birth month
|
---|
37 | ;N BD S BD=+$E(DOB,6,7) ;birth day
|
---|
38 | ;
|
---|
39 | ;N DAYS S DAYS=""
|
---|
40 | ;
|
---|
41 | Q YRS ;_"y" gpl ..just want the number
|
---|
42 | ;
|
---|
43 | ;
|
---|
44 | DTDIFF(ZD1,ZT1,ZD2,ZT2,SHOW) ; extrinsic which returns the number of minutes
|
---|
45 | ; between 2 dates. ZD1 and ZD2 are fileman dates
|
---|
46 | ; ZT1 AND ZT2 are valid times (military time) ie 20:10
|
---|
47 | ; IF SHOW=1 DEBUGGING INTERMEDIATE VALUES WILL BE DISPLAYED
|
---|
48 | I '$D(SHOW) S SHOW=0
|
---|
49 | N GT1,GT2,GDT1,GDT2
|
---|
50 | I ZT1[":" D ;
|
---|
51 | . S GT1=($P(ZT1,":",1)*3600)+($P(ZT1,":",2)*60) ; SECONDS
|
---|
52 | . S GT2=($P(ZT2,":",1)*3600)+($P(ZT2,":",2)*60) ; SECONDS
|
---|
53 | E D ;
|
---|
54 | . S GT1=($E(ZT1,1,2)*3600)+($E(ZT1,3,4)*60)
|
---|
55 | . S GT2=($E(ZT2,1,2)*3600)+($E(ZT2,3,4)*60)
|
---|
56 | ;W:SHOW !,"SECONDS: ",GT1," ",GT2
|
---|
57 | ;S %=GT1 D S^%DTC ; FILEMAN TIME
|
---|
58 | ;S GDT1=ZD1_% ; FILEMAN DATE AND TIME
|
---|
59 | ;S %=GT2 D S^%DTC ; FILEMAN TIME
|
---|
60 | ;S GDT2=ZD2_% ; FILEMAN DATE AND TIME
|
---|
61 | S GDT1=ZD1_"."_ZT1
|
---|
62 | S GDT2=ZD2_"."_ZT2
|
---|
63 | W:SHOW !,"FILEMAN: ",GDT1," ",GDT2
|
---|
64 | N ZH1,ZH2
|
---|
65 | S ZH1=$$FMTH^XLFDT(GDT1) ; $H FORMAT
|
---|
66 | S ZH2=$$FMTH^XLFDT(GDT2) ; $H FORMAT
|
---|
67 | W:SHOW !,"$H: ",ZH1," ",ZH2
|
---|
68 | N ZSECS,ZMIN
|
---|
69 | S ZSECS=$$HDIFF^XLFDT(ZH1,ZH2,2) ; DIFFERENCE IN $H
|
---|
70 | W:SHOW !,"DIFF: ",ZSECS
|
---|
71 | S ZMIN=ZSECS/60 ; DIFFERENCE IN MINUTES
|
---|
72 | W:SHOW !,"MIN: ",ZMIN
|
---|
73 | Q ZMIN
|
---|
74 | ;
|
---|
75 | DT(X) ; -- Returns FM date for X
|
---|
76 | N Y,%DT S %DT="T",Y="" D:X'="" ^%DT
|
---|
77 | Q Y
|
---|
78 | ;
|
---|
79 | ZWRITE(NAME) ; Replacement for ZWRITE ; Public Proc
|
---|
80 | ; Pass NAME by name as a closed reference. lvn and gvn are both supported.
|
---|
81 | ; : syntax is not supported (yet)
|
---|
82 | N L S L=$L(NAME) ; Name length
|
---|
83 | I $E(NAME,L-2,L)=",*)" S NAME=$E(NAME,1,L-3)_")" ; If last sub is *, remove it and close the ref
|
---|
84 | N ORIGLAST S ORIGLAST=$QS(NAME,$QL(NAME)) ; Get last subscript upon which we can't loop further
|
---|
85 | N ORIGQL S ORIGQL=$QL(NAME) ; Number of subscripts in the original name
|
---|
86 | I $D(@NAME)#2 W NAME,"=",$$FORMAT(@NAME),! ; Write base if it exists
|
---|
87 | ; $QUERY through the name.
|
---|
88 | ; Stop when we are out.
|
---|
89 | ; Stop when the last subscript of the original name isn't the same as
|
---|
90 | ; the last subscript of the Name.
|
---|
91 | F S NAME=$Q(@NAME) Q:NAME="" Q:$QS(NAME,ORIGQL)'=ORIGLAST W NAME,"=",$$FORMAT(@NAME),!
|
---|
92 | QUIT
|
---|
93 | FORMAT(V) ; Add quotes, replace control characters if necessary; Public $$
|
---|
94 | ;If numeric, nothing to do.
|
---|
95 | ;If no encoding required, then return as quoted string.
|
---|
96 | ;Otherwise, return as an expression with $C()'s and strings.
|
---|
97 | I +V=V Q V ; If numeric, just return the value.
|
---|
98 | N QT S QT="""" ; Quote
|
---|
99 | I $F(V,QT) D ;chk if V contains any Quotes
|
---|
100 | . S P=0 ;position pointer into V
|
---|
101 | . F S P=$F(V,QT,P) Q:'P D ;find next "
|
---|
102 | . . S $E(V,P-1)=QT_QT ;double each "
|
---|
103 | . . S P=P+1 ;skip over new "
|
---|
104 | I $$CCC(V) D Q V ; If control character is present do this and quit
|
---|
105 | . S V=$$RCC(QT_V_QT) ; Replace control characters in "V"
|
---|
106 | . S:$E(V,1,3)="""""_" $E(V,1,3)="" ; Replace doubled up quotes at start
|
---|
107 | . S L=$L(V) S:$E(V,L-2,L)="_""""" $E(V,L-2,L)="" ; Replace doubled up quotes at end
|
---|
108 | Q QT_V_QT ; If no control charactrrs, quit with "V"
|
---|
109 | ;
|
---|
110 | CCC(S) ;test if S Contains a Control Character or $C(255); Public $$
|
---|
111 | Q:S?.E1C.E 1
|
---|
112 | Q:$F(S,$C(255)) 1
|
---|
113 | Q 0
|
---|
114 | RCC(NA) ;Replace control chars in NA with $C( ). Returns encoded string; Public $$
|
---|
115 | Q:'$$CCC(NA) NA ;No embedded ctrl chars
|
---|
116 | N OUT S OUT="" ;holds output name
|
---|
117 | N CC S CC=0 ;count ctrl chars in $C(
|
---|
118 | N C ;temp hold each char
|
---|
119 | F I=1:1:$L(NA) S C=$E(NA,I) D ;for each char C in NA
|
---|
120 | . I C'?1C,C'=C255 D S OUT=OUT_C Q ;not a ctrl char
|
---|
121 | . . I CC S OUT=OUT_")_""",CC=0 ;close up $C(... if one is open
|
---|
122 | . I CC D
|
---|
123 | . . I CC=256 S OUT=OUT_")_$C("_$A(C),CC=0 ;max args in one $C(
|
---|
124 | . . E S OUT=OUT_","_$A(C) ;add next ctrl char to $C(
|
---|
125 | . E S OUT=OUT_"""_$C("_$A(C)
|
---|
126 | . S CC=CC+1
|
---|
127 | . Q
|
---|
128 | Q OUT
|
---|
129 | END ;end of C0QUTIL
|
---|