UTIL ;JSH; 29 Oct 96 18:46;Function library part 1
;;3.01;BHL IHS Interfaces with GIS;;JUL 01, 2001
;COPYRIGHT 1991-2000 SAIC
;
SOC(P1,P2,SOC,T) ;EP - Set of Codes front end to readers
;P1,P2 same as reader
;SOC = code string
;T = type of reader (0 = scrolling, 1 = screen)
N P21,I,J,X,DIC,Y,J1 S T=+$G(T)
S $P(P1,";",9)="D TRANS^UTIL("_T_")",$P(P1,";",10)=""
K ^UTILITY("UTSOC",$J)
S P21="Choose from: " F I=1:1:$L(SOC,"^") S J=$P(SOC,"^",I),J1=$$CASECONV(J) S:I>1 P21=P21_", " S P21=P21_J,^UTILITY("UTSOC",$J,I,0)=J1,^UTILITY("UTSOC",$J,"B",J1,I)=""
S ^UTILITY("UTSOC",$J,0)="CHOICE^1N^"_I_"^"_I S:$G(P2)="" P2=P21
D @("^UT"_$S($G(T):"W",1:"S")_"RD(P1,P2)") K ^UTILITY("UTSOC",$J) Q X
TRANS(%E) ;input transform for reader
;%E = manipulate echo (0=no, 1=yes)
Q:$E(X)="?" X:%E $G(DIJC("EON"))
S DIC="^UTILITY(""UTSOC"",$J,",DIC(0)="EM" D ^DIC K:+Y<0 X I +Y>0 S X=$P(Y,U,2)
X:%E $G(DIJC("EOFF")) Q
;
AGE(DFN,S) ;Returns age of patient with entry # DFN as:
; years^months^days
;Returns -1 if patient # invalid or date of birth invalid
;Returns -1^-1 if no date of birth, -1^1 if patient is dead
;If S parameter is passed with call by reference, it will have
; a formatted age as either Ny, Nm, Nd, or <1d.
Q:'$D(^DPT(DFN)) -1
Q:$P($G(^DPT(DFN,0)),U,3)="" "-1^-1"
Q:$P($G(^DPT(DFN,0)),U,10)]"" "-1^1"
N BD,M,X,XY,D
S BD=$P(^DPT(DFN,0),"^",3),%DAT=$$CDATF2H^UTDT(BD) S X=+$H-%DAT,XY=X\365.25,M=X-(XY*365.25)\30.4375,D=X-(XY*365.25)-(M*30.4375)
S S=$S(X<0:"unk",XY>1:XY,X>30:X\30.4375_"m",X:X_"d",1:"<1d") S:X="24m" X=2
Q XY_U_M_U_D
;
CENTER(S,L) ;center text S in field of length L
S S=$J("",L-$L(S)\2)_S Q S_$J("",L-$L(S))
;
CB(L) ;open window and clear to bottom
Q:$G(L)="" I '$D(IOXY)!'$D(DIJC("SR")) D VAR^DWUTL Q:POP
N IOX,IOY,IOSR
S IOSR=L+1_"^24",IOX=0,IOY=IOSR-1 X DIJC("SR"),IOXY,DIJC("EOP"),IOXY Q
;
;ENTRY POINT TO CLEAR LINES
CL(X) Q:'$D(IOXY)
S:$G(X)="" X=23
X "F I="_X_" S IOX=0,IOY=I X IOXY W "_DIJC("EOL")
Q
;
LB(X) ;EP - Returns X with leading spaces stripped
N I,Y S Y=X F I=1:1:$L(X) S:$E(X,I)=" " Y=$E(X,I+1,$L(X)) Q:$E(X,I)'=" "
Q Y
;
TB(X) ;EP - Returns X with trailing spaces stripped
N I,Y S Y=X F I=$L(X):-1:0 S:$E(X,I)=" " Y=$E(X,1,I-1) Q:$E(X,I)'=" "
Q Y
;
LBTB(X) ;EP - Returns X with both leading and trailing spaces removed
Q $$LB($$TB(X))
;
NOCTRL(X) ;Returns X with all control characters removed
;Control characters are $A values from 0-31,127
Q $TR(X,$C(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127))
;
INITIAL(DUZ) ;Returns INITIALS of user # DUZ
Q $P($G(^DIC(3,DUZ,0)),U,2)
;
SETSCRL(Y1,Y2,C) ;Set scrolling region from Y1 to Y2 ($Y+1 values)
;C = Clear region or not (0:default = no, 1 = yes)
Q:'$D(DIJTT)
N IOSR,IOX,IOY S IOSR=Y1+1_"^"_(Y2+1) D:$G(C) CL(Y1_":1:"_Y2) X $G(DIJC("SR"))
S IOX=0,IOY=Y1 X IOXY Q
;
NOSCROLL ;Remove scrolling region and leave cursor in current postition
N IOX,IOY,IOSR S IOX=$X,IOY=$Y,IOSR="1^24" X DIJC("SR"),IOXY Q
;
PRIVBAN ;Display Privacy Act banner on 25th line
D XUPR^DWUTL Q
;
CASECONV(STRING,CODE) ;EP - Returns STRING case converted according to CODE
;CODE = U (to upper case)
;CODE = L (to lower case)
S:'$D(CODE) CODE="U"
Q:CODE="U" $TR(STRING,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
Q:CODE="L" $TR(STRING,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
Q STRING
;
NAME(NAME,F) ;Returns NAME (in FileMan storage form LAST,FIRST MIDDLE)
;formatted according to format string F.
N %F,%M,%L,%N,I S %L=$P(NAME,","),%F=$P($P(NAME,",",2)," "),%M=$P($P(NAME,",",2)," ",2)
S %N="" F I=1:1:$L(F) D
. I "FML"[$E(F,I) S %N=%N_@("%"_$E(F,I)) Q
. S %N=%N_$E(F,I) Q
Q %N
;
REPLACE(STRING,ST1,ST2) ;EP - Replace all occurrences of ST1 in STRING with ST2
;Returns modified string.
N %1,%S S %S=""
F S %1=$F(STRING,ST1) Q:'%1 S %S=%S_$E(STRING,1,%1-$L(ST1)-1)_ST2,STRING=$E(STRING,%1,999)
Q %S_STRING
;
DUP(C,L) ;Returns a string of length L made by duplicating
;character(s) in C
N %,I,S S %=L\$L(C)+1,$P(S,C,%+1)="" Q $E(S,1,L)
;
FORMAT(S,W,D) ;EP - Formats string S into an array referenced by D with a
;maximum length of W in each array subscript
N S1,I,% S %=1 K @D
F D Q:S=""!($TR(S," ")="")
. I $L(S)'>W S @D@(%)=S,S="" Q
. F I=W:-1:1 Q:$E(S,I)=" "
. S:I=1 I=W+1 S @D@(%)=$E(S,1,I-1),%=%+1,S=$E(S,I+(I'=(W+1)),999)
Q
;
JUST(S,W,T,P) ;EP - returns string S in a field of width W
;T = "L" for left justify, = "R" for right justify
;P = 0 for pad with spaces, 1 = pad with zeros
N %P
S $P(%P,$S('P:" ",1:"0"),W-$L(S)+1)="",%P=$G(%P)
Q:T="L" $E(S,1,W)_%P Q %P_$E(S,1,W)
;
ENV ;EP - Set up programming environment
N X,%H,%,XQMTYPE,Y,DIC,Z
I '$D(IOST) S (%ZIS,IOP)="" D ^%ZIS
I '$G(DIJTT),$O(^%ZIS(2,IOST(0),"KEY1",0)) S X="DIJS"_IOST(0) S:$T(^@X)]"" DIJTT=IOST(0)
;IHS call differs from CHCS call. Assume IHS if DUZ("AG" not defined
;because user may usedthe programmer entry point without setting DUZ.
;This code must be hard coded differetly for the two systems.
I '$D(DUZ("AG"))!($G(DUZ("AG"))="I") D DT^DICRW
I $$SC^INHUTIL1 D VAR^DWUTL,SETLOG^%ZIS:'$D(IOHOME)
;**JSH 10/29/96 - SRS#961105002
ASKDUZ I '$G(DUZ) K DUZ S DIC(0)="QAEM",DIC="^DIC(3,",Y=-1 I $O(^DIC(3,0)) D ^DIC G:($E(X)'[U&(Y<0)) ASKDUZ S:Y>0 DUZ=+Y
D:$$SC^INHUTIL1 IMODE^XQ1
S:'$D(DUZ) DUZ=0
I '$$SC^INHUTIL1,DUZ D DUZ^XUP(DUZ) Q
D:DUZ DVARS^XQ1
Q
;