BPSOSU8 ;BHAM ISC/FCS/DRS/FLS - utilities ;06/01/2004
;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
;;Per VHA Directive 2004-038, this routine should not be modified.
;*** Collection of FSI UTILITIES ***
;
;EOPQ(LINES,PARAM,Xcode) - Return 0 to continue, 1 to quit.
;PAUSE() Return 1 to continue, 0 to stop.
;ENDRPT()
;DEVICE(DEV,RTN,TITLE,MULTI) S up a device, 1 if successful, 0 not.
;HEADER(PROGRAM,TITLE1,TITLE2,RUNTIME,NOFF,UL) Procedure call
;CENTER
;UNDERLINE
;REPLICATE
;FMPAGE() Handle the screen or printer for an FM print report.
;PAGE0
;STANDBY
;======================================================================
EOPQ(LINESBOT,PARAM,EOPXCODE) ;EP -
; IN: LINESBOT = (optional) # of LINES from bottom (IOSL) before
; determining what to do next. I this is a CRT, we
; will ask user whether to continue; for printers, just
; continue. DEFAULT=6
; PARAM = List of parameter codes (each may occur):
; "M" - Will display "-- More --" at bottom.
; EOPXCODE = xecutable code that will occur if this is the
; end of the page (like, D HEADER^ROU).
;
; OUT: 0 if not end of page, OR if we're EOP but we're continuing;
; 1 if user wants to quit.
; May call this as DO in some cases (like a little trailer on report)
;
N X,Y,%,DIR
;
I '$G(IOSL) Q 0 ;if we don't know page length, then not at end
S LINESBOT=$S($G(LINESBOT):LINESBOT,1:6)
I ($Y+LINESBOT)<IOSL Q 0 ;not at end of page
; -- Okay, we're at end of page
I $G(PARAM)["M" W !,?($S($G(IOM):IOM,1:80)-12),"-- More --"
;
I '$$PAUSE Q 1 ;user wants out
X $G(EOPXCODE)
;
Q 0
;======================================================================
PAUSE() ;3/31/93
;END of screen... should we continue?
;I $E(IOST,1)'="C"
I '$$TOSCREEN^BPSOSU5 Q 1
K DIR
S DIR(0)="E" D ^DIR
Q Y ;Y=1 to continue, 0 to quit.
;===================================================================
ENDRPT() ;EP - end of report. Pause until user presses return (or timeout)
I '$$TOSCREEN^BPSOSU5 W:$Y @IOF Q 1
I $G(FLGSTOP) W !," <escape>"
N DIR,X,Y
S DIR(0)="E"
S DIR("A")=" -- END OF REPORT -- (Press <ENTER> to return to menu)"
D ^DIR
Q Y
;===================================================================
DEVICE(DEV,RTN,TITLE,MULTI) ;EP
;Select an output device.
;No parameters are required. DEV can be set alone, or if queuing
; set to variables needed for queuing.
; DEV - DEFAULT device, "HOME" if undefined.
; RTN - Routine name if queuing is selected.
; TITLE - Description for the task log if queuing is selected.
; MULTI - I then ask NUMBER OF COPIES, which sets the variable
; DCOPIES that the calling routine should use.
;Return 1 if successful, 0 if not. Also returns DCOPIES to number of
; copies if MULTI parameter is set.
;Examples: Q:'$$DEVICE^ABSBUU01("STANDARD")
;
; Q:'$$DEVICE^ABSBUU01("PC;132;66","EN^WSHLC","CORRECTION LIST")
; note: D ^%ZISC to close the device after printing is done.
N I,Y,%ZIS,POP,ZTRTN,ZTIO,ZTDESC,ZTSAVE,ZTQUEUED,PAGE
W !!
S ZTSAVE("PAGE")=""
I $D(RTN) S %ZIS="QM" ; Ask if queuing is allowed only if RTN is set.
S %ZIS("A")="Send report to device: " ;PROMPT
S %ZIS("B")=$S($D(DEV):DEV,1:"HOME") ;DEFAULT device
D ^%ZIS ;Input/Output variables.
I POP W " try again later" S Y=0 G DEVQ ;Device success flag
S PAGE=0
I '$D(IO("Q")) U IO S Y=1 G DEVQ ;Queuing not selected
S ZTRTN=RTN ;Routine entry point for queuing.
S ZTIO=ION ;Output device for queuing.
S ZTDESC=$G(TITLE) ;Report title if queuing is selected.
S ZTSAVE("*")="" ;All variables in memory for queuing.
D ^%ZTLOAD ;Entry point for queuing.
W !,$S($D(ZTQUEUED):"Request queued!",1:"Request cancelled!") ;flag
S Y='$D(ZTQUEUED)
D HOME^%ZIS ;S IO variables back to device = screen.
U IO ;Use the currently open IO device
DEVQ I +$G(MULTI)>0 D USE IO
. USE $P
. N Y
. S DCOPIES=0
. K DIR
. S DIR(0)="NO^0:99999",DIR("A")="NUMBER OF COPIES TO OUTPUT"
. S DIR("B")=1
. D ^DIR K DIR
. I +Y>0 S DCOPIES=Y
. I Y["^" S DCOPIES=-1
I $G(DCOPIES)<0 S Y=0
Q Y
;===================================================================
; This PROCEDURE accepts the routine name and titles and prints out a
; standard header with the run date and time,page and increments
; the page counter by 1. Page is initialized in function DEVICE.
; W @IOF if (to SCREEN) OR (to PRINTER after page 1)
; TITLE variable has special uses. I the calling routine
; send-in the TITLE-array (by setting TITLE(1)="LINE 1", TITLE(n)=
; "LINE n of title", and then D HEADER^WSHUTL("ROUTINE",.TITLE),"."),
; then the entire array of TITLE will be used (and TITLE2 will be
; ignored). You must send-in TITLE2="."
; RUNTIME has been added so that all pages of the report can
; have the same date.time. The calling report must send it in.
; NOFF (optional) - if it exists, then do NOT issue a FormFeed.
; This is necessary for reports that are controlled as a FileMan
; template... since FM issues its own FF, this routine should not.
; UL (opt) - is flag to print a 1-IOSL dashes after the header.
; DEFAULT is no-underline. S UL to 1 to print the underline.
;
; Note: PAGE is assumed to exist even though it is not passed in
N X,N
S $Y=0,PAGE=$G(PAGE)
I $E(IOST,1)="C"!($E(IOST,1)="P"&(PAGE>0)) I '$D(NOFF) W @IOF
S PAGE=PAGE+1
I $G(RUNTIME)="" D NOW^%DTC S Y=$E(%,1,12) X ^DD("DD") S RUNTIME=Y
W !,"RUN DATE: ",RUNTIME
W ?(IOM-10),"PAGE: ",$J(PAGE,3,0)
I $D(PROGRAM),PROGRAM'="" W !,"PGM: ",PROGRAM
I $G(TITLE2)'="." DO
. I $D(TITLE1) D WCENTER^BPSOSU9(TITLE1)
. I $D(TITLE2) D WCENTER^BPSOSU9(TITLE2)
I $G(TITLE2)="." DO
. S N=""
. F S N=$O(TITLE1(N)) Q:N="" D WCENTER^BPSOSU9($G(TITLE1(N)))
I $G(UL)=1 D ;print dashes across the page
. W !
. FOR I=1:1:$S($G(IOM)>0:IOM,1:80) W "-"
W !
Q
;===================================================================
FMPAGE ;at end of page
I $$TOSCREEN^BPSOSU5 D Q
. D PRESSANY^BPSOSU5()
I IOST["P-" W @IOF Q
; should we fall through to PAGE0?
Q
;===================================================================
PAGE0 ; This checks the IO device and issues a pagefeed if $Y>0
Q:'$G(IO)
;OPEN IO USE IO I $Y>0 USE IO W #
U IO I $Y>0 U IO W #
Q
;===================================================================
STANDBY ; W a message to screen to "Please Wait"
USE $P D WAIT^DICD USE +$G(IO)
Q
;===================================================================
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HBPSOSU8 6745 printed Dec 13, 2024@01:52:14 Page 2
BPSOSU8 ;BHAM ISC/FCS/DRS/FLS - utilities ;06/01/2004
+1 ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
+2 ;;Per VHA Directive 2004-038, this routine should not be modified.
+3 ;*** Collection of FSI UTILITIES ***
+4 ;
+5 ;EOPQ(LINES,PARAM,Xcode) - Return 0 to continue, 1 to quit.
+6 ;PAUSE() Return 1 to continue, 0 to stop.
+7 ;ENDRPT()
+8 ;DEVICE(DEV,RTN,TITLE,MULTI) S up a device, 1 if successful, 0 not.
+9 ;HEADER(PROGRAM,TITLE1,TITLE2,RUNTIME,NOFF,UL) Procedure call
+10 ;CENTER
+11 ;UNDERLINE
+12 ;REPLICATE
+13 ;FMPAGE() Handle the screen or printer for an FM print report.
+14 ;PAGE0
+15 ;STANDBY
+16 ;======================================================================
EOPQ(LINESBOT,PARAM,EOPXCODE) ;EP -
+1 ; IN: LINESBOT = (optional) # of LINES from bottom (IOSL) before
+2 ; determining what to do next. I this is a CRT, we
+3 ; will ask user whether to continue; for printers, just
+4 ; continue. DEFAULT=6
+5 ; PARAM = List of parameter codes (each may occur):
+6 ; "M" - Will display "-- More --" at bottom.
+7 ; EOPXCODE = xecutable code that will occur if this is the
+8 ; end of the page (like, D HEADER^ROU).
+9 ;
+10 ; OUT: 0 if not end of page, OR if we're EOP but we're continuing;
+11 ; 1 if user wants to quit.
+12 ; May call this as DO in some cases (like a little trailer on report)
+13 ;
+14 NEW X,Y,%,DIR
+15 ;
+16 ;if we don't know page length, then not at end
IF '$GET(IOSL)
QUIT 0
+17 SET LINESBOT=$SELECT($GET(LINESBOT):LINESBOT,1:6)
+18 ;not at end of page
IF ($Y+LINESBOT)<IOSL
QUIT 0
+19 ; -- Okay, we're at end of page
+20 IF $GET(PARAM)["M"
WRITE !,?($SELECT($GET(IOM):IOM,1:80)-12),"-- More --"
+21 ;
+22 ;user wants out
IF '$$PAUSE
QUIT 1
+23 XECUTE $GET(EOPXCODE)
+24 ;
+25 QUIT 0
+26 ;======================================================================
PAUSE() ;3/31/93
+1 ;END of screen... should we continue?
+2 ;I $E(IOST,1)'="C"
+3 IF '$$TOSCREEN^BPSOSU5
QUIT 1
+4 KILL DIR
+5 SET DIR(0)="E"
DO ^DIR
+6 ;Y=1 to continue, 0 to quit.
QUIT Y
+7 ;===================================================================
ENDRPT() ;EP - end of report. Pause until user presses return (or timeout)
+1 IF '$$TOSCREEN^BPSOSU5
if $Y
WRITE @IOF
QUIT 1
+2 IF $GET(FLGSTOP)
WRITE !," <escape>"
+3 NEW DIR,X,Y
+4 SET DIR(0)="E"
+5 SET DIR("A")=" -- END OF REPORT -- (Press <ENTER> to return to menu)"
+6 DO ^DIR
+7 QUIT Y
+8 ;===================================================================
DEVICE(DEV,RTN,TITLE,MULTI) ;EP
+1 ;Select an output device.
+2 ;No parameters are required. DEV can be set alone, or if queuing
+3 ; set to variables needed for queuing.
+4 ; DEV - DEFAULT device, "HOME" if undefined.
+5 ; RTN - Routine name if queuing is selected.
+6 ; TITLE - Description for the task log if queuing is selected.
+7 ; MULTI - I then ask NUMBER OF COPIES, which sets the variable
+8 ; DCOPIES that the calling routine should use.
+9 ;Return 1 if successful, 0 if not. Also returns DCOPIES to number of
+10 ; copies if MULTI parameter is set.
+11 ;Examples: Q:'$$DEVICE^ABSBUU01("STANDARD")
+12 ;
+13 ; Q:'$$DEVICE^ABSBUU01("PC;132;66","EN^WSHLC","CORRECTION LIST")
+14 ; note: D ^%ZISC to close the device after printing is done.
+15 NEW I,Y,%ZIS,POP,ZTRTN,ZTIO,ZTDESC,ZTSAVE,ZTQUEUED,PAGE
+16 WRITE !!
+17 SET ZTSAVE("PAGE")=""
+18 ; Ask if queuing is allowed only if RTN is set.
IF $DATA(RTN)
SET %ZIS="QM"
+19 ;PROMPT
SET %ZIS("A")="Send report to device: "
+20 ;DEFAULT device
SET %ZIS("B")=$SELECT($DATA(DEV):DEV,1:"HOME")
+21 ;Input/Output variables.
DO ^%ZIS
+22 ;Device success flag
IF POP
WRITE " try again later"
SET Y=0
GOTO DEVQ
+23 SET PAGE=0
+24 ;Queuing not selected
IF '$DATA(IO("Q"))
USE IO
SET Y=1
GOTO DEVQ
+25 ;Routine entry point for queuing.
SET ZTRTN=RTN
+26 ;Output device for queuing.
SET ZTIO=ION
+27 ;Report title if queuing is selected.
SET ZTDESC=$GET(TITLE)
+28 ;All variables in memory for queuing.
SET ZTSAVE("*")=""
+29 ;Entry point for queuing.
DO ^%ZTLOAD
+30 ;flag
WRITE !,$SELECT($DATA(ZTQUEUED):"Request queued!",1:"Request cancelled!")
+31 SET Y='$DATA(ZTQUEUED)
+32 ;S IO variables back to device = screen.
DO HOME^%ZIS
+33 ;Use the currently open IO device
USE IO
DEVQ IF +$GET(MULTI)>0
Begin DoDot:1
+1 USE $PRINCIPAL
+2 NEW Y
+3 SET DCOPIES=0
+4 KILL DIR
+5 SET DIR(0)="NO^0:99999"
SET DIR("A")="NUMBER OF COPIES TO OUTPUT"
+6 SET DIR("B")=1
+7 DO ^DIR
KILL DIR
+8 IF +Y>0
SET DCOPIES=Y
+9 IF Y["^"
SET DCOPIES=-1
End DoDot:1
USE IO
+10 IF $GET(DCOPIES)<0
SET Y=0
+11 QUIT Y
+12 ;===================================================================
+1 ; This PROCEDURE accepts the routine name and titles and prints out a
+2 ; standard header with the run date and time,page and increments
+3 ; the page counter by 1. Page is initialized in function DEVICE.
+4 ; W @IOF if (to SCREEN) OR (to PRINTER after page 1)
+5 ; TITLE variable has special uses. I the calling routine
+6 ; send-in the TITLE-array (by setting TITLE(1)="LINE 1", TITLE(n)=
+7 ; "LINE n of title", and then D HEADER^WSHUTL("ROUTINE",.TITLE),"."),
+8 ; then the entire array of TITLE will be used (and TITLE2 will be
+9 ; ignored). You must send-in TITLE2="."
+10 ; RUNTIME has been added so that all pages of the report can
+11 ; have the same date.time. The calling report must send it in.
+12 ; NOFF (optional) - if it exists, then do NOT issue a FormFeed.
+13 ; This is necessary for reports that are controlled as a FileMan
+14 ; template... since FM issues its own FF, this routine should not.
+15 ; UL (opt) - is flag to print a 1-IOSL dashes after the header.
+16 ; DEFAULT is no-underline. S UL to 1 to print the underline.
+17 ;
+18 ; Note: PAGE is assumed to exist even though it is not passed in
+19 NEW X,N
+20 SET $Y=0
SET PAGE=$GET(PAGE)
+21 IF $EXTRACT(IOST,1)="C"!($EXTRACT(IOST,1)="P"&(PAGE>0))
IF '$DATA(NOFF)
WRITE @IOF
+22 SET PAGE=PAGE+1
+23 IF $GET(RUNTIME)=""
DO NOW^%DTC
SET Y=$EXTRACT(%,1,12)
XECUTE ^DD("DD")
SET RUNTIME=Y
+24 WRITE !,"RUN DATE: ",RUNTIME
+25 WRITE ?(IOM-10),"PAGE: ",$JUSTIFY(PAGE,3,0)
+26 IF $DATA(PROGRAM)
IF PROGRAM'=""
WRITE !,"PGM: ",PROGRAM
+27 IF $GET(TITLE2)'="."
Begin DoDot:1
+28 IF $DATA(TITLE1)
DO WCENTER^BPSOSU9(TITLE1)
+29 IF $DATA(TITLE2)
DO WCENTER^BPSOSU9(TITLE2)
End DoDot:1
+30 IF $GET(TITLE2)="."
Begin DoDot:1
+31 SET N=""
+32 FOR
SET N=$ORDER(TITLE1(N))
if N=""
QUIT
DO WCENTER^BPSOSU9($GET(TITLE1(N)))
End DoDot:1
+33 ;print dashes across the page
IF $GET(UL)=1
Begin DoDot:1
+34 WRITE !
+35 FOR I=1:1:$SELECT($GET(IOM)>0:IOM,1:80)
WRITE "-"
End DoDot:1
+36 WRITE !
+37 QUIT
+38 ;===================================================================
FMPAGE ;at end of page
+1 IF $$TOSCREEN^BPSOSU5
Begin DoDot:1
+2 DO PRESSANY^BPSOSU5()
End DoDot:1
QUIT
+3 IF IOST["P-"
WRITE @IOF
QUIT
+4 ; should we fall through to PAGE0?
+5 QUIT
+6 ;===================================================================
PAGE0 ; This checks the IO device and issues a pagefeed if $Y>0
+1 if '$GET(IO)
QUIT
+2 ;OPEN IO USE IO I $Y>0 USE IO W #
+3 USE IO
IF $Y>0
USE IO
WRITE #
+4 QUIT
+5 ;===================================================================
STANDBY ; W a message to screen to "Please Wait"
+1 USE $PRINCIPAL
DO WAIT^DICD
USE +$GET(IO)
+2 QUIT
+3 ;===================================================================