PSJORMA1 ;BIR/MV-COLLECT MAR DATA FOR U/D AND INPATIENT MED PENDINGS. ; 10 Mar 98 / 8:50 AM
;;5.0; INPATIENT MEDICATIONS ;**2**;16 DEC 97
BLANK(LEN) ;
NEW X
S $P(X," ",LEN)=" "
Q $G(X)
;
TXT(TXT,LEN) ;
;* Input: TXT = TXT string
;* LEN = format length
;* Output: MARX array.
;*
NEW OLD D SPLIT
S X=0,X1=1,Y="" F S X=$O(OLD(X)) Q:'X D
. I $L(Y_OLD(X))>LEN S MARX(X1)=Y,X1=X1+1,Y=""
. S Y=Y_OLD(X)
S:Y]"" MARX(X1)=Y
S MARX=X1
Q
;
SPLIT ;* Split a word string into individual words.
;* Output: OLD(X)
;*
NEW BSD,NEW,X,X1,Y
S OLD(1)=TXT Q:$L(TXT)<LEN
F BSD=" ","/","-" S:'$O(OLD(0)) OLD(1)=TXT D:TXT[BSD DELIM(BSD)
I '$O(OLD(1)),($L(TXT)>LEN) D LEN(1,TXT) K OLD D
. F X=0:0 S X=$O(NEW(X)) Q:'X S OLD(X)=NEW(X)
Q
LEN(X1,OLD) ;* Wrap word around if it doesn't fit the display lenght.
NEW X
Q:$L(OLD)'>LEN
S X=$E(OLD,1,($L(OLD)-1)) I X["/"!(X["-") Q
I $L(OLD)>LEN F X=1:1 S NEW(X1)=$E(OLD,((LEN*X)-LEN+1),(LEN*X)),X1=X1+1 Q:($L(OLD)'>(LEN*X))
Q
DELIM(BSD) ;* BSD=" ","/","-"
K NEW
S X=0,X1=0 F S X=$O(OLD(X)) Q:'X F Y=1:1:$L(OLD(X),BSD) D
. S X1=X1+1
. S NEW(X1)=$P(OLD(X),BSD,Y)
. I $L(OLD(X),BSD)>1,(Y<$L(OLD(X),BSD)) S NEW(X1)=NEW(X1)_BSD
. D LEN(.X1,NEW(X1))
K OLD F X=0:0 S X=$O(NEW(X)) Q:'X S OLD(X)=NEW(X)
Q
;
MARLB(LEN) ;
;;;LEN=LENGHT
NEW L,X,TXT K MARLB,DRUGNAME
S L=1
;I ON["P",(PSGLRN["___") S MARLB(L)=PSGLOD_" | P E N D I N G"
I ON["P",+NODE(4) S MARLB(L)=PSGLOD_" | P E N D I N G"
E S MARLB(L)=PSGLOD_" |"_PSGLSD_" |"_PSGLFD
S MARLB(L)=$$SETSTR^VALM1("("_PSGLBS5_")",MARLB(L),36,7)
S L=L+1
D DRGDISP^PSJLMUT1(DFN,PSGORD,LEN,39,.DRUGNAME,0)
F X=0:0 S X=$O(DRUGNAME(X)) Q:'X S MARLB(L)=DRUGNAME(X)_$S(X=1:$$BLANK(41-$L(DRUGNAME(X)))_PSGLST,1:""),L=L+1
D TXT^PSGMUTL(PSGLSI,LEN)
S X=0 F S X=$O(MARX(X)) Q:'X S MARLB(L)=MARX(X),L=L+1
K MARX
S X=$E("WS",1,PSGLWS*2)_$S(PSGLSM:$E("HSM",PSGLSM,3),1:"")_$E("NF",1,PSGLNF*2)
I TS<L,(X=""),($L(MARLB(L-1))<24),(L=6) S L=L-1 D
. S X=MARLB(L)_$$BLANK(23-$L(MARLB(L)))_"RPH: "_$S(PSGLRPH]""&(PSGLRPH'="0"):PSGLRPH,1:"_____")
. S X=X_$$BLANK(33-$L(X))_"RN: "_$S(PSGLRN]""&(PSGLRN'="0"):PSGLRN,1:"_____")
. S MARLB(L)=X
E D
. I L#5>0 F L=L:1:5 S MARLB(L)=""
.; S:L=4 MARLB(4)="",L=5
. S X=$E("WS",1,PSGLWS*2)
. S X=X_$$BLANK(4-$L(X))_$S(PSGLSM:$E("HSM",PSGLSM,3),1:"")
. S X=X_$$BLANK(8-$L(X))_$E("NF",1,PSGLNF*2)
. S X=X_$$BLANK(23-$L(X))_"RPH: "_$S(PSGLRPH]""&(PSGLRPH'="0"):PSGLRPH,1:"____")
. S X=X_$$BLANK(33-$L(X))_"RN: "_$S(PSGLRN]""&(PSGLRN'="0"):PSGLRN,1:"_____")
. S MARLB(L)=X
S MARLB=L
I MARLB>5!($G(TS)>5) D MARLB2
Q
;
MARLB2 ;Slit array into 2 labels.
;TS array must be defined. (TS^PSGMAR3(ADMIN TIMES))
NEW INIT,X,Y
S INIT=MARLB(MARLB),Y=5
F X=5:1:MARLB S X(X)=MARLB(X)
F X=5:1:($S(MARLB>TS:MARLB,1:TS)-1) D
. I (X#5)=0 S MARLB(X)="See next label for continuation" Q
. I Y<(MARLB) S MARLB(X)=X(Y),Y=Y+1 Q
. S MARLB(X)=""
S X=X+1 F Y=Y:1:MARLB-1 S MARLB(X)=$G(X(Y)),X=X+1
F X=X:0 Q:(X#5)=0 S MARLB(X)="",X=X+1
S MARLB(X)=INIT,MARLB=X
Q
N X F X=5:1:MARLB S X(X+1)=MARLB(X)
S MARLB(5)="See next label for continuation"
F X=7:1:MARLB S MARLB(X)=X(X)
F X=X+1:1:11 S MARLB(X)=""
S MARLB(10)=X(MARLB+1)
S MARLB=10
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSJORMA1 3287 printed Dec 13, 2024@02:08:17 Page 2
PSJORMA1 ;BIR/MV-COLLECT MAR DATA FOR U/D AND INPATIENT MED PENDINGS. ; 10 Mar 98 / 8:50 AM
+1 ;;5.0; INPATIENT MEDICATIONS ;**2**;16 DEC 97
BLANK(LEN) ;
+1 NEW X
+2 SET $PIECE(X," ",LEN)=" "
+3 QUIT $GET(X)
+4 ;
TXT(TXT,LEN) ;
+1 ;* Input: TXT = TXT string
+2 ;* LEN = format length
+3 ;* Output: MARX array.
+4 ;*
+5 NEW OLD
DO SPLIT
+6 SET X=0
SET X1=1
SET Y=""
FOR
SET X=$ORDER(OLD(X))
if 'X
QUIT
Begin DoDot:1
+7 IF $LENGTH(Y_OLD(X))>LEN
SET MARX(X1)=Y
SET X1=X1+1
SET Y=""
+8 SET Y=Y_OLD(X)
End DoDot:1
+9 if Y]""
SET MARX(X1)=Y
+10 SET MARX=X1
+11 QUIT
+12 ;
SPLIT ;* Split a word string into individual words.
+1 ;* Output: OLD(X)
+2 ;*
+3 NEW BSD,NEW,X,X1,Y
+4 SET OLD(1)=TXT
if $LENGTH(TXT)<LEN
QUIT
+5 FOR BSD=" ","/","-"
if '$ORDER(OLD(0))
SET OLD(1)=TXT
if TXT[BSD
DO DELIM(BSD)
+6 IF '$ORDER(OLD(1))
IF ($LENGTH(TXT)>LEN)
DO LEN(1,TXT)
KILL OLD
Begin DoDot:1
+7 FOR X=0:0
SET X=$ORDER(NEW(X))
if 'X
QUIT
SET OLD(X)=NEW(X)
End DoDot:1
+8 QUIT
LEN(X1,OLD) ;* Wrap word around if it doesn't fit the display lenght.
+1 NEW X
+2 if $LENGTH(OLD)'>LEN
QUIT
+3 SET X=$EXTRACT(OLD,1,($LENGTH(OLD)-1))
IF X["/"!(X["-")
QUIT
+4 IF $LENGTH(OLD)>LEN
FOR X=1:1
SET NEW(X1)=$EXTRACT(OLD,((LEN*X)-LEN+1),(LEN*X))
SET X1=X1+1
if ($LENGTH(OLD)'>(LEN*X))
QUIT
+5 QUIT
DELIM(BSD) ;* BSD=" ","/","-"
+1 KILL NEW
+2 SET X=0
SET X1=0
FOR
SET X=$ORDER(OLD(X))
if 'X
QUIT
FOR Y=1:1:$LENGTH(OLD(X),BSD)
Begin DoDot:1
+3 SET X1=X1+1
+4 SET NEW(X1)=$PIECE(OLD(X),BSD,Y)
+5 IF $LENGTH(OLD(X),BSD)>1
IF (Y<$LENGTH(OLD(X),BSD))
SET NEW(X1)=NEW(X1)_BSD
+6 DO LEN(.X1,NEW(X1))
End DoDot:1
+7 KILL OLD
FOR X=0:0
SET X=$ORDER(NEW(X))
if 'X
QUIT
SET OLD(X)=NEW(X)
+8 QUIT
+9 ;
MARLB(LEN) ;
+1 ;;;LEN=LENGHT
+2 NEW L,X,TXT
KILL MARLB,DRUGNAME
+3 SET L=1
+4 ;I ON["P",(PSGLRN["___") S MARLB(L)=PSGLOD_" | P E N D I N G"
+5 IF ON["P"
IF +NODE(4)
SET MARLB(L)=PSGLOD_" | P E N D I N G"
+6 IF '$TEST
SET MARLB(L)=PSGLOD_" |"_PSGLSD_" |"_PSGLFD
+7 SET MARLB(L)=$$SETSTR^VALM1("("_PSGLBS5_")",MARLB(L),36,7)
+8 SET L=L+1
+9 DO DRGDISP^PSJLMUT1(DFN,PSGORD,LEN,39,.DRUGNAME,0)
+10 FOR X=0:0
SET X=$ORDER(DRUGNAME(X))
if 'X
QUIT
SET MARLB(L)=DRUGNAME(X)_$SELECT(X=1:$$BLANK(41-$LENGTH(DRUGNAME(X)))_PSGLST,1:"")
SET L=L+1
+11 DO TXT^PSGMUTL(PSGLSI,LEN)
+12 SET X=0
FOR
SET X=$ORDER(MARX(X))
if 'X
QUIT
SET MARLB(L)=MARX(X)
SET L=L+1
+13 KILL MARX
+14 SET X=$EXTRACT("WS",1,PSGLWS*2)_$SELECT(PSGLSM:$EXTRACT("HSM",PSGLSM,3),1:"")_$EXTRACT("NF",1,PSGLNF*2)
+15 IF TS<L
IF (X="")
IF ($LENGTH(MARLB(L-1))<24)
IF (L=6)
SET L=L-1
Begin DoDot:1
+16 SET X=MARLB(L)_$$BLANK(23-$LENGTH(MARLB(L)))_"RPH: "_$SELECT(PSGLRPH]""&(PSGLRPH'="0"):PSGLRPH,1:"_____")
+17 SET X=X_$$BLANK(33-$LENGTH(X))_"RN: "_$SELECT(PSGLRN]""&(PSGLRN'="0"):PSGLRN,1:"_____")
+18 SET MARLB(L)=X
End DoDot:1
+19 IF '$TEST
Begin DoDot:1
+20 IF L#5>0
FOR L=L:1:5
SET MARLB(L)=""
+21 ; S:L=4 MARLB(4)="",L=5
+22 SET X=$EXTRACT("WS",1,PSGLWS*2)
+23 SET X=X_$$BLANK(4-$LENGTH(X))_$SELECT(PSGLSM:$EXTRACT("HSM",PSGLSM,3),1:"")
+24 SET X=X_$$BLANK(8-$LENGTH(X))_$EXTRACT("NF",1,PSGLNF*2)
+25 SET X=X_$$BLANK(23-$LENGTH(X))_"RPH: "_$SELECT(PSGLRPH]""&(PSGLRPH'="0"):PSGLRPH,1:"____")
+26 SET X=X_$$BLANK(33-$LENGTH(X))_"RN: "_$SELECT(PSGLRN]""&(PSGLRN'="0"):PSGLRN,1:"_____")
+27 SET MARLB(L)=X
End DoDot:1
+28 SET MARLB=L
+29 IF MARLB>5!($GET(TS)>5)
DO MARLB2
+30 QUIT
+31 ;
MARLB2 ;Slit array into 2 labels.
+1 ;TS array must be defined. (TS^PSGMAR3(ADMIN TIMES))
+2 NEW INIT,X,Y
+3 SET INIT=MARLB(MARLB)
SET Y=5
+4 FOR X=5:1:MARLB
SET X(X)=MARLB(X)
+5 FOR X=5:1:($SELECT(MARLB>TS:MARLB,1:TS)-1)
Begin DoDot:1
+6 IF (X#5)=0
SET MARLB(X)="See next label for continuation"
QUIT
+7 IF Y<(MARLB)
SET MARLB(X)=X(Y)
SET Y=Y+1
QUIT
+8 SET MARLB(X)=""
End DoDot:1
+9 SET X=X+1
FOR Y=Y:1:MARLB-1
SET MARLB(X)=$GET(X(Y))
SET X=X+1
+10 FOR X=X:0
if (X#5)=0
QUIT
SET MARLB(X)=""
SET X=X+1
+11 SET MARLB(X)=INIT
SET MARLB=X
+12 QUIT
+13 NEW X
FOR X=5:1:MARLB
SET X(X+1)=MARLB(X)
+14 SET MARLB(5)="See next label for continuation"
+15 FOR X=7:1:MARLB
SET MARLB(X)=X(X)
+16 FOR X=X+1:1:11
SET MARLB(X)=""
+17 SET MARLB(10)=X(MARLB+1)
+18 SET MARLB=10
+19 QUIT
+20 ;