DDGLIB0 ;SFISC/MKO - SETUP AND CLEANUP FOR WINDOWS ;14JUN2016
;;22.2;VA FileMan;**3**;Jan 05, 2016;Build 17
;;Per VA Directive 6402, this routine should not be modified.
;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
;;Licensed under the terms of the Apache License, Version 2.0.
;
INIT(DDGLBROW) ;Setup required variables
;Set margin to 0
;Turn autowrap off
;Turn type-ahead on
;Variables set:
; DDGLDEL = delimiter for other DDGL variables
; DDGLVID = codes that turn on/off video attributes
; DDGLED = codes for editing
; DDGLCLR = codes to erase characters
; DDGLGRA = codes for graphics characters
; DDGLZOSF = array of code from %ZOSF (as of V22.2 - array comes from OS file)
; DDGLREF = global where window image is stored
; DDGLKEY = codes for non-alphanumeric keys
; DDGLSCR = array containing list of visible windows on screen
;
N X
I $D(DDGLDEL)[0 D SET Q:$G(DIERR)
S X=0 X DDGLZOSF("RM"),DDGLZOSF("TYPE-AHEAD")
W $P(DDGLVID,DDGLDEL,8)
Q
;
SET ;Setup screen handling variables
K DIERR,DDGLSCR
S U="^",DDGLDEL=$C(127)
;
; VEN/SMH - remove reliance on %ZOSF node -- next 3 lines changed v 22.2
D:'$D(DISYS) OS^DII ; garb OS from %ZOSF or Fileman in this sequence
F X="EOFF","EON","TRMOFF","TRMON","TRMRD","RM","TYPE-AHEAD","NO-TYPE-AHEAD" D G:$G(DIERR) ABT
. S DDGLZOSF(X)=$G(^DD("OS",DISYS,X))
;
ZIS N %ZIS,IOP S IOP="HOME" D ^%ZIS I POP D BLD^DIALOG(845) G ABT
I $D(^%ZIS(2)),'$O(^%ZIS(2,+$G(IOST(0)),0)) D BLD^DIALOG(840,"#"_+$G(IOST(0))) G ABT
;
D:$G(IOXY)="" TRMERR("Cursor positioning (XY CRT)")
;
S X="IORVON;IORVOFF;IOELEOL;IOEDEOP;IOUON;IOUOFF;IOSGR0;IOINHI;IOINLOW;IOINORM;IOCUU;IOCUD;IOCUF;IOCUB;IODL;IOIL;IODCH;IOICH;IOEDALL;IOELALL;IORI;IOAWM1;IOAWM0;IOSTBM;IOPF1;IOPF2;IOPF3;IOPF4;IOFIND;IOSELECT;IOINSERT;IOREMOVE;IOPREVSC;IONEXTSC"
N @$TR(X,";",",")
N IOBLC,IOBRC,IOBT,IOG1,IOG0,IOHL,IOLT,IOMT,IORT,IOTLC,IOTRC,IOTT,IOVL
D ENDR^%ZISS,GSET^%ZISS
I $G(IOPREVSC)="" D ;"^C-VT220^C-VT320^"[(U_IOST_U) D IOST MIGHT BE VT-100
. S IOPREVSC=$C(27)_"[5~"
. S IONEXTSC=$C(27)_"[6~"
;
ATT ;GET COLOR ATTRIBUTES FOR SCREENMAN...
N A,B I '$D(DDGLBROW) D ;...BUT NOT FOR THE BROWSER (see INIT+1^DDBR)
.S A(1)=$C(27,91)_"40m",A(2)=$C(27,91)_"41m",A(3)=$C(27,91)_"45m" ;Defaults
.I $G(^XTV(8989.5,0))?1"PARAM".E F X=1,2,3 S A=$$GET^XPAR("ALL","DI SCREENMAN COLORS",X),B=$$GET^XPAR("ALL","DI SCREENMAN COLORS",X+3) S:B]"" A(X)=$C(27,91)_(10+B)_"m" S:A]"" A(X)=A(X)_$C(27,91)_+A_"m"
.S IOUON=IOINHI_A(1) ;REQ CAPTION BACKGROUND (BLACK)
.S IOINHI=IOINHI_A(2) ;DATA BACKGROUND (RED)
.S IORVON=IOINHI_A(3) ;CLICKABLE BACKGROUND (MAGENTA)
.S (IORVOFF,IOUOFF)=IOINORM
S DDGLVID=IOINHI_DDGLDEL_IOINLOW_DDGLDEL_IOINORM_DDGLDEL_IOUON_DDGLDEL_IOUOFF_DDGLDEL_IORVON_DDGLDEL_IORVOFF_DDGLDEL_IOAWM0_DDGLDEL_IOAWM1_DDGLDEL_$G(IOSGR0)
S DDGLED=$G(IORI)_DDGLDEL_$G(IOSTBM)_DDGLDEL_$G(IOIL)_DDGLDEL_$G(IODL)_DDGLDEL_$G(IOICH)_DDGLDEL_$G(IODCH)
S DDGLCLR=IOELEOL_DDGLDEL_IOEDALL_DDGLDEL_IOEDEOP_DDGLDEL_$G(IOELALL)
S DDGLKEY=U_IOCUU_U_IOCUD_U_IOCUF_U_IOCUB_U_IOPF1_U_IOPF2_U_IOPF3_U_IOPF4_U_$G(IOFIND)_U_$G(IOSELECT)_U_$G(IOINSERT)_U_$G(IOREMOVE)_U_$G(IOPREVSC)_U_$G(IONEXTSC)_U
S DDGLGRA=IOG1_DDGLDEL_IOG0_DDGLDEL_IOHL_DDGLDEL_IOVL_DDGLDEL_IOTLC_DDGLDEL_IOTRC_DDGLDEL_IOBLC_DDGLDEL_IOBRC
S:DDGLDEL_$P(DDGLGRA,DDGLDEL,3,999)_DDGLDEL[(DDGLDEL_DDGLDEL) DDGLGRA=DDGLDEL_DDGLDEL_"-"_DDGLDEL_"|"_DDGLDEL_"+"_DDGLDEL_"+"_DDGLDEL_"+"_DDGLDEL_"+"
;
D:$P(DDGLKEY,U,1,5)_U[(U_U) TRMERR("Cursor keys")
D:U_$P(DDGLKEY,U,6,9)_U[(U_U) TRMERR("PF keys")
D:IOELEOL="" TRMERR("Erase to End of Line")
D:IOEDALL="" TRMERR("Erase Entire Page")
D:IOEDEOP="" TRMERR("Erase to End of Page")
G:$G(DIERR) ABT
;
S DDGLREF="^TMP(""DDGL"",$J,""W"")" K @DDGLREF
;
I "^C-QUME^C-QVT102^C-WYSE75^"[(U_$TR(IOST," ","")_U) D
. S DDGLVAN=1
. S $P(DDGLVID,DDGLDEL,4,7)=$S($TR(IOST," ","")="C-WYSE75":IOINHI_DDGLDEL_IOINLOW_DDGLDEL_IOINHI_DDGLDEL_IOINLOW,1:IOINLOW_DDGLDEL_IOINHI_DDGLDEL_IOINLOW_DDGLDEL_IOINHI)
. S $P(DDGLVID,DDGLDEL,10)=IOINORM
;
D:'$D(^%ZTSK)!($D(^%ZOSF("MGR"))[0) KILL^%ZISS
MOUSEON ;I $G(DDS)>0 W *27,"[?1000h" NOW DONE IN DDS0
Q
;
;
ASKIOSL ; not used
;N X
;X ^%ZOSF("EOFF")
R X:0 S XX=""
W $C(27)_7_$C(27)_"[r"_$C(27)_"[999;999H"_$C(27)_"[6n" R X ; R *X:1 R:$T XX S X=$C(X)_XX
;S X=+$E(X,3,5) I X S IOSL=X
Q
;
;
;
TRMERR(DDGLCH) ;Terminal type errors
N P
S P(1)=DDGLCH,P(2)=IOST
D BLD^DIALOG(842,.P)
Q
;
;
;
KILL(DDGLPARM) ;Cleanup variables
;Set margin to IOM
;Turn off type-ahead if New Person file so indicates
;Turn autowrap on
;Reset character attributes
;Turn echo on
;Turn terminators off
N X
D:'$D(DISYS) OS^DII ; garb OS from %ZOSF or Fileman in this sequence
I $G(DDGLPARM)'["W" D
. S X=$S($D(IOM)#2:IOM,1:80) X $G(DDGLZOSF("RM"))
. I $D(DUZ)#2,$D(^VA(200,DUZ,0))#2,$P($G(^(200)),U,9)'="Y" D
.. I '$G(DUZ("BUF"),1) X $G(DDGLZOSF("NO-TYPE-AHEAD"))
. W $P($G(DDGLVID),$G(DDGLDEL),9),$P($G(DDGLVID),$G(DDGLDEL),10)
;
I $G(DDGLPARM)'["T" D
. X $G(DDGLZOSF("EON")),$G(DDGLZOSF("TRMOFF"))
E X $G(DDGLZOSF("EOFF")),$G(DDGLZOSF("TRMON"))
;
MOUSEOFF ;W *27,"[?1000l" NOW DONE IN DDS0
ABT K DX,DY,POP
I '$G(DIERR),$G(DDGLPARM)["K" Q
K:$G(DDGLREF)]"" @DDGLREF
D:'$D(^%ZTSK)!($D(^%ZOSF("MGR"))[0) KILL^%ZISS
;
K DDGLDEL,DDGLVID,DDGLED,DDGLCLR,DDGLGRA,DDGLZOSF,DDGLREF
K DDGLKEY,DDGLSCR,DDGLVAN,DDGLH
;
K DIR0
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDDGLIB0 5544 printed Nov 22, 2024@17:52:31 Page 2
DDGLIB0 ;SFISC/MKO - SETUP AND CLEANUP FOR WINDOWS ;14JUN2016
+1 ;;22.2;VA FileMan;**3**;Jan 05, 2016;Build 17
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
+4 ;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
+5 ;;Licensed under the terms of the Apache License, Version 2.0.
+6 ;
INIT(DDGLBROW) ;Setup required variables
+1 ;Set margin to 0
+2 ;Turn autowrap off
+3 ;Turn type-ahead on
+4 ;Variables set:
+5 ; DDGLDEL = delimiter for other DDGL variables
+6 ; DDGLVID = codes that turn on/off video attributes
+7 ; DDGLED = codes for editing
+8 ; DDGLCLR = codes to erase characters
+9 ; DDGLGRA = codes for graphics characters
+10 ; DDGLZOSF = array of code from %ZOSF (as of V22.2 - array comes from OS file)
+11 ; DDGLREF = global where window image is stored
+12 ; DDGLKEY = codes for non-alphanumeric keys
+13 ; DDGLSCR = array containing list of visible windows on screen
+14 ;
+15 NEW X
+16 IF $DATA(DDGLDEL)[0
DO SET
if $GET(DIERR)
QUIT
+17 SET X=0
XECUTE DDGLZOSF("RM")
XECUTE DDGLZOSF("TYPE-AHEAD")
+18 WRITE $PIECE(DDGLVID,DDGLDEL,8)
+19 QUIT
+20 ;
SET ;Setup screen handling variables
+1 KILL DIERR,DDGLSCR
+2 SET U="^"
SET DDGLDEL=$CHAR(127)
+3 ;
+4 ; VEN/SMH - remove reliance on %ZOSF node -- next 3 lines changed v 22.2
+5 ; garb OS from %ZOSF or Fileman in this sequence
if '$DATA(DISYS)
DO OS^DII
+6 FOR X="EOFF","EON","TRMOFF","TRMON","TRMRD","RM","TYPE-AHEAD","NO-TYPE-AHEAD"
Begin DoDot:1
+7 SET DDGLZOSF(X)=$GET(^DD("OS",DISYS,X))
End DoDot:1
if $GET(DIERR)
GOTO ABT
+8 ;
ZIS NEW %ZIS,IOP
SET IOP="HOME"
DO ^%ZIS
IF POP
DO BLD^DIALOG(845)
GOTO ABT
+1 IF $DATA(^%ZIS(2))
IF '$ORDER(^%ZIS(2,+$GET(IOST(0)),0))
DO BLD^DIALOG(840,"#"_+$GET(IOST(0)))
GOTO ABT
+2 ;
+3 if $GET(IOXY)=""
DO TRMERR("Cursor positioning (XY CRT)")
+4 ;
+5 SET X="IORVON;IORVOFF;IOELEOL;IOEDEOP;IOUON;IOUOFF;IOSGR0;IOINHI;IOINLOW;IOINORM;IOCUU;IOCUD;IOCUF;IOCUB;IODL;IOIL;IODCH;IOICH;IOEDALL;IOELALL;IORI;IOAWM1;IOAWM0;IOSTBM;IOPF1;IOPF2;IOPF3;IOPF4;IOFIND;IOSELECT;IOINSERT;IOREMOVE;IOPREVSC;IONEXTSC
"
+6 NEW @$TRANSLATE(X,";",",")
+7 NEW IOBLC,IOBRC,IOBT,IOG1,IOG0,IOHL,IOLT,IOMT,IORT,IOTLC,IOTRC,IOTT,IOVL
+8 DO ENDR^%ZISS
DO GSET^%ZISS
+9 ;"^C-VT220^C-VT320^"[(U_IOST_U) D IOST MIGHT BE VT-100
IF $GET(IOPREVSC)=""
Begin DoDot:1
+10 SET IOPREVSC=$CHAR(27)_"[5~"
+11 SET IONEXTSC=$CHAR(27)_"[6~"
End DoDot:1
+12 ;
ATT ;GET COLOR ATTRIBUTES FOR SCREENMAN...
+1 ;...BUT NOT FOR THE BROWSER (see INIT+1^DDBR)
NEW A,B
IF '$DATA(DDGLBROW)
Begin DoDot:1
+2 ;Defaults
SET A(1)=$CHAR(27,91)_"40m"
SET A(2)=$CHAR(27,91)_"41m"
SET A(3)=$CHAR(27,91)_"45m"
+3 IF $GET(^XTV(8989.5,0))?1"PARAM".E
FOR X=1,2,3
SET A=$$GET^XPAR("ALL","DI SCREENMAN COLORS",X)
SET B=$$GET^XPAR("ALL","DI SCREENMAN COLORS",X+3)
if B]""
SET A(X)=$CHAR(27,91)_(10+B)_"m"
if A]""
SET A(X)=A(X)_$CHAR(27,91)_+A_"m"
+4 ;REQ CAPTION BACKGROUND (BLACK)
SET IOUON=IOINHI_A(1)
+5 ;DATA BACKGROUND (RED)
SET IOINHI=IOINHI_A(2)
+6 ;CLICKABLE BACKGROUND (MAGENTA)
SET IORVON=IOINHI_A(3)
+7 SET (IORVOFF,IOUOFF)=IOINORM
End DoDot:1
+8 SET DDGLVID=IOINHI_DDGLDEL_IOINLOW_DDGLDEL_IOINORM_DDGLDEL_IOUON_DDGLDEL_IOUOFF_DDGLDEL_IORVON_DDGLDEL_IORVOFF_DDGLDEL_IOAWM0_DDGLDEL_IOAWM1_DDGLDEL_$GET(IOSGR0)
+9 SET DDGLED=$GET(IORI)_DDGLDEL_$GET(IOSTBM)_DDGLDEL_$GET(IOIL)_DDGLDEL_$GET(IODL)_DDGLDEL_$GET(IOICH)_DDGLDEL_$GET(IODCH)
+10 SET DDGLCLR=IOELEOL_DDGLDEL_IOEDALL_DDGLDEL_IOEDEOP_DDGLDEL_$GET(IOELALL)
+11 SET DDGLKEY=U_IOCUU_U_IOCUD_U_IOCUF_U_IOCUB_U_IOPF1_U_IOPF2_U_IOPF3_U_IOPF4_U_$GET(IOFIND)_U_$GET(IOSELECT)_U_$GET(IOINSERT)_U_$GET(IOREMOVE)_U_$GET(IOPREVSC)_U_$GET(IONEXTSC)_U
+12 SET DDGLGRA=IOG1_DDGLDEL_IOG0_DDGLDEL_IOHL_DDGLDEL_IOVL_DDGLDEL_IOTLC_DDGLDEL_IOTRC_DDGLDEL_IOBLC_DDGLDEL_IOBRC
+13 if DDGLDEL_$PIECE(DDGLGRA,DDGLDEL,3,999)_DDGLDEL[(DDGLDEL_DDGLDEL)
SET DDGLGRA=DDGLDEL_DDGLDEL_"-"_DDGLDEL_"|"_DDGLDEL_"+"_DDGLDEL_"+"_DDGLDEL_"+"_DDGLDEL_"+"
+14 ;
+15 if $PIECE(DDGLKEY,U,1,5)_U[(U_U)
DO TRMERR("Cursor keys")
+16 if U_$PIECE(DDGLKEY,U,6,9)_U[(U_U)
DO TRMERR("PF keys")
+17 if IOELEOL=""
DO TRMERR("Erase to End of Line")
+18 if IOEDALL=""
DO TRMERR("Erase Entire Page")
+19 if IOEDEOP=""
DO TRMERR("Erase to End of Page")
+20 if $GET(DIERR)
GOTO ABT
+21 ;
+22 SET DDGLREF="^TMP(""DDGL"",$J,""W"")"
KILL @DDGLREF
+23 ;
+24 IF "^C-QUME^C-QVT102^C-WYSE75^"[(U_$TRANSLATE(IOST," ","")_U)
Begin DoDot:1
+25 SET DDGLVAN=1
+26 SET $PIECE(DDGLVID,DDGLDEL,4,7)=$SELECT($TRANSLATE(IOST," ","")="C-WYSE75":IOINHI_DDGLDEL_IOINLOW_DDGLDEL_IOINHI_DDGLDEL_IOINLOW,1:IOINLOW_DDGLDEL_IOINHI_DDGLDEL_IOINLOW_DDGLDEL_IOINHI)
+27 SET $PIECE(DDGLVID,DDGLDEL,10)=IOINORM
End DoDot:1
+28 ;
+29 if '$DATA(^%ZTSK)!($DATA(^%ZOSF("MGR"))[0)
DO KILL^%ZISS
MOUSEON ;I $G(DDS)>0 W *27,"[?1000h" NOW DONE IN DDS0
+1 QUIT
+2 ;
+3 ;
ASKIOSL ; not used
+1 ;N X
+2 ;X ^%ZOSF("EOFF")
+3 READ X:0
SET XX=""
+4 ; R *X:1 R:$T XX S X=$C(X)_XX
WRITE $CHAR(27)_7_$CHAR(27)_"[r"_$CHAR(27)_"[999;999H"_$CHAR(27)_"[6n"
READ X
+5 ;S X=+$E(X,3,5) I X S IOSL=X
+6 QUIT
+7 ;
+8 ;
+9 ;
TRMERR(DDGLCH) ;Terminal type errors
+1 NEW P
+2 SET P(1)=DDGLCH
SET P(2)=IOST
+3 DO BLD^DIALOG(842,.P)
+4 QUIT
+5 ;
+6 ;
+7 ;
KILL(DDGLPARM) ;Cleanup variables
+1 ;Set margin to IOM
+2 ;Turn off type-ahead if New Person file so indicates
+3 ;Turn autowrap on
+4 ;Reset character attributes
+5 ;Turn echo on
+6 ;Turn terminators off
+7 NEW X
+8 ; garb OS from %ZOSF or Fileman in this sequence
if '$DATA(DISYS)
DO OS^DII
+9 IF $GET(DDGLPARM)'["W"
Begin DoDot:1
+10 SET X=$SELECT($DATA(IOM)#2:IOM,1:80)
XECUTE $GET(DDGLZOSF("RM"))
+11 IF $DATA(DUZ)#2
IF $DATA(^VA(200,DUZ,0))#2
IF $PIECE($GET(^(200)),U,9)'="Y"
Begin DoDot:2
+12 IF '$GET(DUZ("BUF"),1)
XECUTE $GET(DDGLZOSF("NO-TYPE-AHEAD"))
End DoDot:2
+13 WRITE $PIECE($GET(DDGLVID),$GET(DDGLDEL),9),$PIECE($GET(DDGLVID),$GET(DDGLDEL),10)
End DoDot:1
+14 ;
+15 IF $GET(DDGLPARM)'["T"
Begin DoDot:1
+16 XECUTE $GET(DDGLZOSF("EON"))
XECUTE $GET(DDGLZOSF("TRMOFF"))
End DoDot:1
+17 IF '$TEST
XECUTE $GET(DDGLZOSF("EOFF"))
XECUTE $GET(DDGLZOSF("TRMON"))
+18 ;
MOUSEOFF ;W *27,"[?1000l" NOW DONE IN DDS0
ABT KILL DX,DY,POP
+1 IF '$GET(DIERR)
IF $GET(DDGLPARM)["K"
QUIT
+2 if $GET(DDGLREF)]""
KILL @DDGLREF
+3 if '$DATA(^%ZTSK)!($DATA(^%ZOSF("MGR"))[0)
DO KILL^%ZISS
+4 ;
+5 KILL DDGLDEL,DDGLVID,DDGLED,DDGLCLR,DDGLGRA,DDGLZOSF,DDGLREF
+6 KILL DDGLKEY,DDGLSCR,DDGLVAN,DDGLH
+7 ;
+8 KILL DIR0