Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: DILIBF

DILIBF.m

Go to the documentation of this file.
  1. DILIBF ;SFISC/STAFF-LIBRARY OF FUNCTIONS ;1:48 PM 20 Feb 2013
  1. ;;22.0;VA FileMan;**48,71,169**;Mar 30, 1999;Build 28
  1. ;Per VHA Directive 2004-038, this routine should not be modified.
  1. HTFM(%H,%F) ;$H to FM
  1. N X,%,%Y,%M,%D S:'$D(%F) %F=0
  1. S:%H[",0" %H=%H-1_",86400"
  1. S %=(%H>21608)+(%H>94657)+%H-.1,%Y=%\365.25+141,%=%#365.25\1
  1. S %D=%+306#(%Y#4=0+365)#153#61#31+1,%M=%-%D\29+1
  1. S X=%Y_"00"+%M_"00"+%D,%=$P(%H,",",2)
  1. S %=%#60/100+(%#3600\60)/100+(%\3600)/100
  1. S:%&('%F) X=X_% Q X
  1. ;
  1. FMTH(X,%F) ;FM to $H
  1. N %Y,%H S:'$D(%F) %F=0 D H S:%F %H=+%H Q %H
  1. H ;
  1. N %,%M,%D,%T I X<1410000 S %H=0,%Y=-1 Q
  1. S %Y=$E(X,1,3),%M=$E(X,4,5),%D=$E(X,6,7)
  1. S %T=$E(X_0,9,10)*60+$E(X_"000",11,12)*60+$E(X_"00000",13,14)
  1. N DILEAP D
  1. . N Y S Y=%Y+1700 S:%M<3 Y=Y-1
  1. . S DILEAP=(Y\4)-(Y\100)+(Y\400)-446 Q
  1. S %H=$P("^31^59^90^120^151^181^212^243^273^304^334","^",%M)+%D
  1. S %='%M!'%D,%Y=%Y-141
  1. S %H=%H+(%Y*365)+DILEAP+%
  1. S:%T=86400 %H=%H+1,%T=0
  1. S %H=%H_","_%T
  1. S %Y=$S(%:-1,1:%H+4#7)
  1. Q
  1. ;
  1. HTE(%H,%F) ;$H to external
  1. Q:%H'>0 %H N Y,%T,%R S %F=$G(%F) S Y=$$HTFM(%H,0) G T2
  1. FMTE(Y,%F) ;FM to external
  1. Q:'$G(Y) $G(Y) S %F=$G(%F) Q:($G(DUZ("LANG"))>1) $$OUT^DIALOGU(Y,"FMTE",%F)
  1. N %T,%R
  1. T2 S %T="."_$E($P(Y,".",2)_"000000",1,7) D @("F"_$S(%F<1:1,%F>7:1,1:+%F\1)) Q %R
  1. DOW(X,Y) ;Day of Week
  1. N %Y,%M,%D,%H,%T D H I $G(Y) Q %Y
  1. Q $P("Sun^Mon^Tues^Wednes^Thurs^Fri^Satur","^",%Y+1)_"day"
  1. ;
  1. FMDIFF(X1,X2,X3) ;FM diff in two dates in days if x3=1 seconds if x3=2.
  1. N %H,%Y,X S:'$D(X3) X3=1 S X=X1 D H S X1=+%H,X1(1)=$P(%H,",",2),X=X2 D H
  1. D2 S X=(X1-%H) S:X3>1 X=X*86400+(X1(1)-$P(%H,",",2))
  1. I X3=3 D
  1. . S %=X,X=""
  1. . I %'<86400 S X=(%\86400)
  1. . I %<0 S:(-%)'<86400 X=(%\86400) S %=-%
  1. . S:%#86400 X=X_" "_(%#86400\3600)_":"_$E(%#3600\60+100,2,3)_":"_$E(%#60+100,2,3)
  1. . Q
  1. Q X
  1. ;
  1. HDIFF(X1,X2,X3) ;$H diff in two dates, X3 same as FMDIFF.
  1. N X,%H,%T S:'$D(X3) X3=1 S X1(1)=$P(X1,",",2),X1=+X1,%H=X2
  1. G D2
  1. HADD(X,D,H,M,S) ;Add to $H date
  1. N %H,%T S %H=+X,%T=$P(X,",",2) D A2 Q %H_","_%T
  1. A2 S %H=%H+$G(D),%T=%T+($G(H)*3600)+($G(M)*60)+$G(S)
  1. S:%T'<86400 %H=%H+(%T\86400),%T=%T#86400 S:%T<0 %H=%H+(%T\86400)-1,%T=%T#86400
  1. Q
  1. ;
  1. FMADD(X,D,H,M,S) ;Add to FM date
  1. N %H,%T S %H=$$FMTH(X,0),%T=$P(%H,",",2) D A2 Q $$HTFM(%H_","_%T)
  1. ;
  1. CONVQQ(X) ; CONVERT SINGLE TO DOUBLE QUOTES IN STRING X
  1. N Q,F S Q=""""
  1. F F=0:0 S F=$F(X,Q,F) Q:F=0 S X=$E(X,1,F-2)_Q_Q_$E(X,F,256),F=F+1
  1. Q X
  1. ;
  1. CONVQ(X) ; CONVERT DOUBLE TO SINGLE QUOTES IN STRING X
  1. N Q,F,D S Q="""",D=""""""
  1. F F=0:0 S F=$F(X,D,F) Q:F=0 S X=$E(X,1,F-3)_Q_$E(X,F,256),F=F-1
  1. Q X
  1. ;
  1. QUOTE(X) ; PUT QUOTES AROUND STRING
  1. S X=""""_$G(X)_"""" Q X
  1. ;
  1. FNO(X) ; gets a subfile's top level file number
  1. N Y S X=+X
  1. I $G(^DIC(X,0))]"" Q X
  1. F S Y=+$G(^DD(X,0,"UP")) D Q:'$D(X)!(Y'>0)
  1. . I $G(^DIC(Y,0))]"" K X Q
  1. . S X=Y
  1. . Q
  1. Q Y
  1. ;
  1. GLO(Z) ; gets the file number from a global root
  1. I '$D(@(Z_"0)"))#2 Q 0
  1. N Y
  1. S Y=+$P($G(@(Z_"0)")),U,2)
  1. Q $$FNO(+Y)
  1. ;
  1. UP(X) ; convert string X to uppercase
  1. I X?.UNP Q X
  1. N A,L,B,C S C=""
  1. F A=1:1:$L(X) S L=$E(X,A),B=$C($A(L)-32) S C=C_$S(L'?1L:L,B?1L:"Z",1:B) ;$C(255) matches lower-case, and so does $C(255-32), so lamely return "Z"
  1. Q C
  1. ;
  1. ROUEXIST(X) ; Execute routine existence test
  1. G:X="" QRER I '$D(DISYS) N DISYS D OS^DII
  1. I $G(^%ZOSF("TEST"))]"" X ^("TEST") Q $T
  1. I $G(^DD("OS",DISYS,18))]"" X ^(18) Q $T
  1. QRER Q 0
  1. ;
  1. ;
  1. F5 ;
  1. F1 S %R=$P($S(%F'["U":$T(M),1:$T(MU))," ",$S($E(Y,4,5):$E(Y,4,5)+2,1:0))_$S($E(Y,4,5):" ",1:"")_$S($E(Y,6,7):$S((%F\1'=5):$E(Y,6,7),1:+$E(Y,6,7))_$E(", ",1,1+(%F\1'=5)),1:"")_($E(Y,1,3)+1700)
  1. TM Q:%T'>0!(%F["D")
  1. I %F'["P" S %R=%R_$S(%F\1'=6:"@",1:" @ ")_$E(%T,2,3)_":"_$E(%T,4,5)_$S($E(%T,6,7)!(%F["S"):":"_$E(%T,6,7),1:$S(%F\1'=6:"",1:" "))
  1. I %F["P" S %R=%R_" "_$S($E(%T,2,3)>12:$E(%T,2,3)-12,1:+$E(%T,2,3))_":"_$E(%T,4,5)_$S($E(%T,6,7)!(%F["S"):":"_$E(%T,6,7),1:"")_$S($E(%T,2,5)\1200=1:" pm",1:" am")
  1. Q
  1. M ;; Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
  1. MU ;; JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
  1. F2 S %R=+$E(Y,4,5)_"/"_(+$E(Y,6,7))_"/"_$E(Y,2,3)
  1. G TM
  1. F3 S %R=+$E(Y,6,7)_"/"_(+$E(Y,4,5))_"/"_$E(Y,2,3)
  1. G TM
  1. F4 S %R=$E(Y,2,3)_"/"_$E(Y,4,5)_"/"_$E(Y,6,7)
  1. G TM
  1. F6 S %R=$S($E(Y,4,5):$E(Y,4,5)_"-",1:"")_$S($E(Y,6,7):$E(Y,6,7)_"-",1:"")_(1700+$E(Y,1,3))
  1. G TM
  1. F7 S %R=$S($E(Y,4,5):+$E(Y,4,5)_"-",1:"")_$S($E(Y,6,7):+$E(Y,6,7)_"-",1:"")_(1700+$E(Y,1,3))
  1. G TM
  1. ;
  1. HKERR(DIFILE,DIIENS,DIFLD,DIHOOK) ;
  1. N DIEXT
  1. S DIEXT("FILE")=$G(DIFILE)
  1. S DIEXT("FIELD")=$G(DIFLD)
  1. S DIEXT("IENS")=$G(DIIENS)
  1. S DIEXT(1)=$G(DIHOOK)
  1. D BLD^DIALOG(120,DIHOOK,.DIEXT)
  1. Q
  1. ;
  1. FILENUM(DIGREF) ;Return file/subfile number from open global reference
  1. Q:$G(DIGREF)'?1"^".1"%"1U.UN1"(".E ""
  1. I $E(DIGREF,1,8)="^DIC(.2," Q .2
  1. N F,X,DIFILE,S
  1. S DIFILE=+$P($G(@(DIGREF_"0)")),U,2) I DIFILE Q DIFILE
  1. S DIGREF=$$CREF^DILF(DIGREF)
  1. F X=$QL($NA(@DIGREF)):-2:0 S X(X)=$QS(DIGREF,X),X(X,0)=$$CREF^DILF($NA(@DIGREF,X))
  1. S X=$O(X("")) I X="" Q ""
  1. I X(X)="^DIC" S F=1
  1. E I X(X)="^DD" S F=0
  1. E S S=$P($G(@X(X,0)@(0)),U,2),F=+S I S="" Q ""
  1. F X=X:0 S X=$O(X(X)) Q:X="" S DIFILE=$O(^DD(F,"GL",X(X),0,"")) Q:DIFILE="" S (F,DIFILE)=+$P($G(^DD(F,DIFILE,0)),U,2) Q:'F
  1. Q DIFILE
  1. ;