DDGLIBH ;SFISC/MKO-SCREEN EDITOR HELP ;08:00 AM 23 Feb 1995
;;22.0;VA FileMan;;Mar 30, 1999
;Per VHA Directive 10-93-142, this routine should not be modified.
;
HLP(DDGLHN1,DDGLHN2,DDGLSUB,DDGLPLN) ;
;DDGLHN1 = Entry number in Dialog file of first help screen
;DDGLHN2 = Entry number of last help screen
;DDGLSUB = Subscript in ^TMP to copy help to
;DDGLPLN = $Y to print prompt
;
N DX,DY,DDGLI,DDGLJ,DDGLSC,DDGLTX,DDGLX,DIHELP,DDGL0
S DDGL0=$C(31)
D:'$D(DDGLH) GETKEY
I $D(IOTM)[0 N IOTM S IOTM=1
I $D(IOBM)[0 N IOBM S IOBM=IOSL
I '$G(DDGLPLN) S DDGLPLN=IOBM-1
S DDGLSC=DDGLHN1
;
D DISP(DDGLHN1)
;
F S DDGLX=$$READ D @DDGLX Q:DDGLX=U
Q
;
UP I DDGLSC>DDGLHN1 S DDGLSC=DDGLSC-1 D DISP(DDGLSC)
Q
;
DN I DDGLSC<DDGLHN2 S DDGLSC=DDGLSC+1 D DISP(DDGLSC)
Q
;
TO W $C(7)
QT S DDGLX=U
Q
;
PT ;Prompt for device and print
;Clear screen
N POP
N %,%A,%B,%B1,%B2,%B3,%BA,%C,%E,%G,%H,%I,%J,%K,%M,%N
N %P,%S,%T,%W,%X,%Y
N %A0,%D1,%D2,%DT,%J1,%W0
;
S DY=IOTM-1,DX=0 X IOXY
W $P(DDGLVID,DDGLDEL)_"PRINT THE HELP SCREENS"_$P(DDGLVID,DDGLDEL,10)_$P(DDGLCLR,DDGLDEL)
F DDGLI=1:1:IOBM-IOTM W $C(13,10)_$P(DDGLCLR,DDGLDEL)
S DY=IOTM+1,DX=0 X IOXY
;
X DDGLZOSF("EON"),DDGLZOSF("TRMOFF")
S X=$G(IOM,80) X ^%ZOSF("RM")
W $P(DDGLVID,DDGLDEL,9)
;
DEVICE ;Device prompt
N IOF,IOSL
S IOF="#",IOSL=IOBM-IOTM+1 ;In case help frames are invoked
S %ZIS=$S($D(^%ZTSK):"Q",1:""),%ZIS("B")=""
D ^%ZIS K %ZIS
;
I POP D
. W !!,"Report canceled!"
. H 2
;
;Queue report
E I $D(IO("Q")),$D(^%ZTSK) D
. S ZTRTN="PRINT^DDGLIBH"
. S ZTDESC="Help screen printout."
. N I F I="DDGLHN1","DDGLHN2" S ZTSAVE(I)=""
. D ^%ZTLOAD
. I $D(ZTSK)#2 W !,"Report queued!",!,"Task number: "_ZTSK,!
. E W !,"Report canceled!",!
. K ZTSK
. S IOP="HOME" D ^%ZIS
;
E I $E(IOST,1,2)="C-" D G DEVICE
. W !,$C(7)_"You cannot print the help screens on a CRT.",!
;
;Non-queued report
E D
. W !,"Printing ..."
. U IO
. D PRINT
. X $G(^%ZIS("C"))
;
;Repaint help screen
X DDGLZOSF("EOFF"),DDGLZOSF("TRMON")
S X=0 X ^%ZOSF("RM")
W $P(DDGLVID,DDGLDEL,8)
D DISP(DDGLSC)
Q
;
PRINT ;
N DDGLJ,DDGLL,DDGLP
F DDGLI=DDGLHN1:1:DDGLHN2 D
. I DDGLI'=DDGLHN1 D
.. I $Y+$O(^DI(.84,DDGLI,2," "),-1)+2'<IOSL W @IOF
.. E W !!
. S DDGLJ=0
. F S DDGLJ=$O(^DI(.84,DDGLI,2,DDGLJ)) Q:'DDGLJ D
.. S DDGLL=$G(^DI(.84,DDGLI,2,DDGLJ,0))
.. F Q:DDGLL'["\" D
... S DDGLP=$F(DDGLL,"\") Q:$E(DDGLL,DDGLP)="\"
... S $E(DDGLL,DDGLP-1,DDGLP)=""
.. W !,DDGLL
;
S:$D(ZTQUEUED) ZTREQ="@"
Q
;
DISP(DDGLHN) ;Print help screen DDGLHN
N DDGLHARR
S DDGLHARR=$NA(^TMP(DDGLSUB,$J,DDGLHN))
D:'$D(@DDGLHARR) BLD^DIALOG(DDGLHN,"","",DDGLHARR)
;
S DY=IOTM-1,DX=0 X IOXY
F DDGLI=1:1 Q:'$D(@DDGLHARR@(DDGLI)) S DDGLTX=^(DDGLI) D
. I DDGLTX["\B" F S DDGLJ=$F(DDGLTX,"\B") Q:'DDGLJ D
.. S $E(DDGLTX,DDGLJ-2,DDGLJ-1)=$P(DDGLVID,DDGLDEL)
. I DDGLTX["\n" F S DDGLJ=$F(DDGLTX,"\n") Q:'DDGLJ D
.. S $E(DDGLTX,DDGLJ-2,DDGLJ-1)=$P(DDGLVID,DDGLDEL,10)
. W $S(DDGLI>1:$C(13,10),1:"")_DDGLTX_$P(DDGLCLR,DDGLDEL)
;
F DDGLI=DDGLI:1:IOBM-IOTM+1 W $C(13,10)_$P(DDGLCLR,DDGLDEL)
Q
;
READ() ;
S DY=DDGLPLN,DX=0 X IOXY
W $P(DDGLCLR,DDGLDEL)_"Press "
W:DDGLSC>DDGLHN1 $P(DDGLVID,DDGLDEL)_"<Up>"_$P(DDGLVID,DDGLDEL,10)_" for previous page, "
W:DDGLSC<DDGLHN2 $P(DDGLVID,DDGLDEL)_"<Down>"_$P(DDGLVID,DDGLDEL,10)_" for next page, "
W $P(DDGLVID,DDGLDEL)_"P"_$P(DDGLVID,DDGLDEL,10)_" to print, "
W $P(DDGLVID,DDGLDEL)_"^"_$P(DDGLVID,DDGLDEL,10)_" to exit: "
D GETCH(DTIME,.DDGLX)
S DY=DDGLPLN,DX=0 X IOXY W $P(DDGLCLR,DDGLDEL)
Q DDGLX
;
GETCH(DTIME,Y) ;Out: Y = Mnemonic
F D Q:Y'=-1
. R *Y:DTIME
. I Y<0 S Y="TO" Q
. D MNE(.Y)
Q
;
MNE(Y) ;Out: Y = Mnemonic, or -1 if invalid
N S,F
S S="",F=0
F D MNELOOP Q:F
Q
;
MNELOOP ;Read more
S S=S_$C(Y)
I DDGLH("IN")'[(DDGL0_S) D I Y=-1 D FLUSH Q
. I $C(Y)'?1L S Y=-1 Q
. S S=$E(S,1,$L(S)-1)_$C(Y-32)
. S:DDGLH("IN")'[(DDGL0_S_DDGL0) Y=-1
;
I DDGLH("IN")[(DDGL0_S_DDGL0),S'=$C(27) D Q
. S Y=$P(DDGLH("OUT"),DDGL0,$L($P(DDGLH("IN"),DDGL0_S_DDGL0),DDGL0)),F=1
;
R *Y:5 D:Y=-1 FLUSH
Q
;
FLUSH ;
N DDGLZ
S F=1 W $C(7) F R *DDGLZ:0 E Q
Q
;
GETKEY ;Get key sequences and defaults
N AU,AD,F1,PREVSC,NEXTSC
N I,K,N,T
S AU=$P(DDGLKEY,U,2)
S AD=$P(DDGLKEY,U,3)
S F1=$P(DDGLKEY,U,6)
S PREVSC=$P(DDGLKEY,U,14)
S NEXTSC=$P(DDGLKEY,U,15)
;
K DDGLH
S DDGLH("IN")="",DDGLH("OUT")=""
F I=1:1 S T=$P($T(MAP+I),";;",2,999) Q:T="" D
. S @("K="_$P(T,";",2))
. I DDGLH("IN")'[(DDGL0_K),K]"" D
.. S DDGLH("IN")=DDGLH("IN")_DDGL0_K
.. S DDGLH("OUT")=DDGLH("OUT")_$P(T,";")_DDGL0
S DDGLH("IN")=DDGLH("IN")_DDGL0
S DDGLH("OUT")=$E(DDGLH("OUT"),1,$L(DDGLH("OUT"))-1)
Q
;
MAP ;Keys
;;DN;$C(13)
;;DN;AD
;;DN;F1_AD
;;DN;NEXTSC
;;UP;AU
;;UP;F1_AU
;;UP;PREVSC
;;QT;F1_"E"
;;QT;F1_"Q"
;;QT;"^"
;;PT;"P"
DDGLIBH ;SFISC/MKO-SCREEN EDITOR HELP ;08:00 AM 23 Feb 1995
+1 ;;22.0;VA FileMan;;Mar 30, 1999
+2 ;Per VHA Directive 10-93-142, this routine should not be modified.
+3 ;
HLP(DDGLHN1,DDGLHN2,DDGLSUB,DDGLPLN) ;
+1 ;DDGLHN1 = Entry number in Dialog file of first help screen
+2 ;DDGLHN2 = Entry number of last help screen
+3 ;DDGLSUB = Subscript in ^TMP to copy help to
+4 ;DDGLPLN = $Y to print prompt
+5 ;
+6 NEW DX,DY,DDGLI,DDGLJ,DDGLSC,DDGLTX,DDGLX,DIHELP,DDGL0
+7 SET DDGL0=$CHAR(31)
+8 IF '$DATA(DDGLH)
DO GETKEY
+9 IF $DATA(IOTM)[0
NEW IOTM
SET IOTM=1
+10 IF $DATA(IOBM)[0
NEW IOBM
SET IOBM=IOSL
+11 IF '$GET(DDGLPLN)
SET DDGLPLN=IOBM-1
+12 SET DDGLSC=DDGLHN1
+13 ;
+14 DO DISP(DDGLHN1)
+15 ;
+16 FOR
SET DDGLX=$$READ
DO @DDGLX
IF DDGLX=U
QUIT
+17 QUIT
+18 ;
UP IF DDGLSC>DDGLHN1
SET DDGLSC=DDGLSC-1
DO DISP(DDGLSC)
+1 QUIT
+2 ;
DN IF DDGLSC<DDGLHN2
SET DDGLSC=DDGLSC+1
DO DISP(DDGLSC)
+1 QUIT
+2 ;
TO WRITE $CHAR(7)
QT SET DDGLX=U
+1 QUIT
+2 ;
PT ;Prompt for device and print
+1 ;Clear screen
+2 NEW POP
+3 NEW %,%A,%B,%B1,%B2,%B3,%BA,%C,%E,%G,%H,%I,%J,%K,%M,%N
+4 NEW %P,%S,%T,%W,%X,%Y
+5 NEW %A0,%D1,%D2,%DT,%J1,%W0
+6 ;
+7 SET DY=IOTM-1
SET DX=0
XECUTE IOXY
+8 WRITE $PIECE(DDGLVID,DDGLDEL)_"PRINT THE HELP SCREENS"_$PIECE(DDGLVID,DDGLDEL,10)_$PIECE(DDGLCLR,DDGLDEL)
+9 FOR DDGLI=1:1:IOBM-IOTM
WRITE $CHAR(13,10)_$PIECE(DDGLCLR,DDGLDEL)
+10 SET DY=IOTM+1
SET DX=0
XECUTE IOXY
+11 ;
+12 XECUTE DDGLZOSF("EON")
XECUTE DDGLZOSF("TRMOFF")
+13 SET X=$GET(IOM,80)
XECUTE ^%ZOSF("RM")
+14 WRITE $PIECE(DDGLVID,DDGLDEL,9)
+15 ;
DEVICE ;Device prompt
+1 NEW IOF,IOSL
+2 ;In case help frames are invoked
SET IOF="#"
SET IOSL=IOBM-IOTM+1
+3 SET %ZIS=$SELECT($DATA(^%ZTSK):"Q",1:"")
SET %ZIS("B")=""
+4 DO ^%ZIS
KILL %ZIS
+5 ;
+6 IF POP
Begin DoDot:1
+7 WRITE !!,"Report canceled!"
+8 HANG 2
End DoDot:1
+9 ;
+10 ;Queue report
+11 IF '$TEST
IF $DATA(IO("Q"))
IF $DATA(^%ZTSK)
Begin DoDot:1
+12 SET ZTRTN="PRINT^DDGLIBH"
+13 SET ZTDESC="Help screen printout."
+14 NEW I
FOR I="DDGLHN1","DDGLHN2"
SET ZTSAVE(I)=""
+15 DO ^%ZTLOAD
+16 IF $DATA(ZTSK)#2
WRITE !,"Report queued!",!,"Task number: "_ZTSK,!
+17 IF '$TEST
WRITE !,"Report canceled!",!
+18 KILL ZTSK
+19 SET IOP="HOME"
DO ^%ZIS
End DoDot:1
+20 ;
+21 IF '$TEST
IF $EXTRACT(IOST,1,2)="C-"
Begin DoDot:1
+22 WRITE !,$CHAR(7)_"You cannot print the help screens on a CRT.",!
End DoDot:1
GOTO DEVICE
+23 ;
+24 ;Non-queued report
+25 IF '$TEST
Begin DoDot:1
+26 WRITE !,"Printing ..."
+27 USE IO
+28 DO PRINT
+29 XECUTE $GET(^%ZIS("C"))
End DoDot:1
+30 ;
+31 ;Repaint help screen
+32 XECUTE DDGLZOSF("EOFF")
XECUTE DDGLZOSF("TRMON")
+33 SET X=0
XECUTE ^%ZOSF("RM")
+34 WRITE $PIECE(DDGLVID,DDGLDEL,8)
+35 DO DISP(DDGLSC)
+36 QUIT
+37 ;
PRINT ;
+1 NEW DDGLJ,DDGLL,DDGLP
+2 FOR DDGLI=DDGLHN1:1:DDGLHN2
Begin DoDot:1
+3 IF DDGLI'=DDGLHN1
Begin DoDot:2
+4 IF $Y+$ORDER(^DI(.84,DDGLI,2," "),-1)+2'<IOSL
WRITE @IOF
+5 IF '$TEST
WRITE !!
End DoDot:2
+6 SET DDGLJ=0
+7 FOR
SET DDGLJ=$ORDER(^DI(.84,DDGLI,2,DDGLJ))
IF 'DDGLJ
QUIT
Begin DoDot:2
+8 SET DDGLL=$GET(^DI(.84,DDGLI,2,DDGLJ,0))
+9 FOR
IF DDGLL'["\"
QUIT
Begin DoDot:3
+10 SET DDGLP=$FIND(DDGLL,"\")
IF $EXTRACT(DDGLL,DDGLP)="\"
QUIT
+11 SET $EXTRACT(DDGLL,DDGLP-1,DDGLP)=""
End DoDot:3
+12 WRITE !,DDGLL
End DoDot:2
End DoDot:1
+13 ;
+14 IF $DATA(ZTQUEUED)
SET ZTREQ="@"
+15 QUIT
+16 ;
DISP(DDGLHN) ;Print help screen DDGLHN
+1 NEW DDGLHARR
+2 SET DDGLHARR=$NAME(^TMP(DDGLSUB,$JOB,DDGLHN))
+3 IF '$DATA(@DDGLHARR)
DO BLD^DIALOG(DDGLHN,"","",DDGLHARR)
+4 ;
+5 SET DY=IOTM-1
SET DX=0
XECUTE IOXY
+6 FOR DDGLI=1:1
IF '$DATA(@DDGLHARR@(DDGLI))
QUIT
SET DDGLTX=^(DDGLI)
Begin DoDot:1
+7 IF DDGLTX["\B"
FOR
SET DDGLJ=$FIND(DDGLTX,"\B")
IF 'DDGLJ
QUIT
Begin DoDot:2
+8 SET $EXTRACT(DDGLTX,DDGLJ-2,DDGLJ-1)=$PIECE(DDGLVID,DDGLDEL)
End DoDot:2
+9 IF DDGLTX["\n"
FOR
SET DDGLJ=$FIND(DDGLTX,"\n")
IF 'DDGLJ
QUIT
Begin DoDot:2
+10 SET $EXTRACT(DDGLTX,DDGLJ-2,DDGLJ-1)=$PIECE(DDGLVID,DDGLDEL,10)
End DoDot:2
+11 WRITE $SELECT(DDGLI>1:$CHAR(13,10),1:"")_DDGLTX_$PIECE(DDGLCLR,DDGLDEL)
End DoDot:1
+12 ;
+13 FOR DDGLI=DDGLI:1:IOBM-IOTM+1
WRITE $CHAR(13,10)_$PIECE(DDGLCLR,DDGLDEL)
+14 QUIT
+15 ;
READ() ;
+1 SET DY=DDGLPLN
SET DX=0
XECUTE IOXY
+2 WRITE $PIECE(DDGLCLR,DDGLDEL)_"Press "
+3 IF DDGLSC>DDGLHN1
WRITE $PIECE(DDGLVID,DDGLDEL)_"<Up>"_$PIECE(DDGLVID,DDGLDEL,10)_" for previous page, "
+4 IF DDGLSC<DDGLHN2
WRITE $PIECE(DDGLVID,DDGLDEL)_"<Down>"_$PIECE(DDGLVID,DDGLDEL,10)_" for next page, "
+5 WRITE $PIECE(DDGLVID,DDGLDEL)_"P"_$PIECE(DDGLVID,DDGLDEL,10)_" to print, "
+6 WRITE $PIECE(DDGLVID,DDGLDEL)_"^"_$PIECE(DDGLVID,DDGLDEL,10)_" to exit: "
+7 DO GETCH(DTIME,.DDGLX)
+8 SET DY=DDGLPLN
SET DX=0
XECUTE IOXY
WRITE $PIECE(DDGLCLR,DDGLDEL)
+9 QUIT DDGLX
+10 ;
GETCH(DTIME,Y) ;Out: Y = Mnemonic
+1 FOR
Begin DoDot:1
+2 READ *Y:DTIME
+3 IF Y<0
SET Y="TO"
QUIT
+4 DO MNE(.Y)
End DoDot:1
IF Y'=-1
QUIT
+5 QUIT
+6 ;
MNE(Y) ;Out: Y = Mnemonic, or -1 if invalid
+1 NEW S,F
+2 SET S=""
SET F=0
+3 FOR
DO MNELOOP
IF F
QUIT
+4 QUIT
+5 ;
MNELOOP ;Read more
+1 SET S=S_$CHAR(Y)
+2 IF DDGLH("IN")'[(DDGL0_S)
Begin DoDot:1
+3 IF $CHAR(Y)'?1L
SET Y=-1
QUIT
+4 SET S=$EXTRACT(S,1,$LENGTH(S)-1)_$CHAR(Y-32)
+5 IF DDGLH("IN")'[(DDGL0_S_DDGL0)
SET Y=-1
End DoDot:1
IF Y=-1
DO FLUSH
QUIT
+6 ;
+7 IF DDGLH("IN")[(DDGL0_S_DDGL0)
IF S'=$CHAR(27)
Begin DoDot:1
+8 SET Y=$PIECE(DDGLH("OUT"),DDGL0,$LENGTH($PIECE(DDGLH("IN"),DDGL0_S_DDGL0),DDGL0))
SET F=1
End DoDot:1
QUIT
+9 ;
+10 READ *Y:5
IF Y=-1
DO FLUSH
+11 QUIT
+12 ;
FLUSH ;
+1 NEW DDGLZ
+2 SET F=1
WRITE $CHAR(7)
FOR
READ *DDGLZ:0
IF '$TEST
QUIT
+3 QUIT
+4 ;
GETKEY ;Get key sequences and defaults
+1 NEW AU,AD,F1,PREVSC,NEXTSC
+2 NEW I,K,N,T
+3 SET AU=$PIECE(DDGLKEY,U,2)
+4 SET AD=$PIECE(DDGLKEY,U,3)
+5 SET F1=$PIECE(DDGLKEY,U,6)
+6 SET PREVSC=$PIECE(DDGLKEY,U,14)
+7 SET NEXTSC=$PIECE(DDGLKEY,U,15)
+8 ;
+9 KILL DDGLH
+10 SET DDGLH("IN")=""
SET DDGLH("OUT")=""
+11 FOR I=1:1
SET T=$PIECE($TEXT(MAP+I),";;",2,999)
IF T=""
QUIT
Begin DoDot:1
+12 SET @("K="_$PIECE(T,";",2))
+13 IF DDGLH("IN")'[(DDGL0_K)
IF K]""
Begin DoDot:2
+14 SET DDGLH("IN")=DDGLH("IN")_DDGL0_K
+15 SET DDGLH("OUT")=DDGLH("OUT")_$PIECE(T,";")_DDGL0
End DoDot:2
End DoDot:1
+16 SET DDGLH("IN")=DDGLH("IN")_DDGL0
+17 SET DDGLH("OUT")=$EXTRACT(DDGLH("OUT"),1,$LENGTH(DDGLH("OUT"))-1)
+18 QUIT
+19 ;
MAP ;Keys
+1 ;;DN;$C(13)
+2 ;;DN;AD
+3 ;;DN;F1_AD
+4 ;;DN;NEXTSC
+5 ;;UP;AU
+6 ;;UP;F1_AU
+7 ;;UP;PREVSC
+8 ;;QT;F1_"E"
+9 ;;QT;F1_"Q"
+10 ;;QT;"^"
+11 ;;PT;"P"