DDW6 ;SFISC/MKO-JOIN ;10:41 AM 16 Jun 2000
;;22.2;VA FileMan;;Jan 05, 2016;Build 42
;;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.
;
REFMT ;Reformat
N DDWRFMT
I $D(DDWMARK),DDWRW+DDWA'>$P(DDWMARK,U,3) D UNMARK^DDW7
D POS(DDWRW,DDWLMAR,"R")
S DDWRFMT=0 F D JOIN Q:DDWRFMT
Q
;
JOIN ;Join
N DDWI,DDWSCR,DDWNSV,DDWLL,DDWTXT,DDWTXT0
I $D(DDWMARK),DDWRW+DDWA'>$P(DDWMARK,U,3) D UNMARK^DDW7
;
;Get current line
S (DDWTXT(1),DDWNSV)=DDWN
;
;Get next line
I DDWRW=DDWMR S:DDWSTB DDWTXT(2)=^TMP("DDW1",$J,DDWSTB)
E S:DDWA+DDWRW<DDWCNT DDWTXT(2)=DDWL(DDWRW+1)
;
I $G(DDWTXT(2))?." " D Q:$G(DDWRFMT)
. I $L(DDWN)>DDWRMAR S:$D(DDWTXT(2))#2 DDWLL=DDWTXT(2)
. E I $D(DDWRFMT) S DDWRFMT=1
;
;Adjust
S DDWTXT0=$O(DDWTXT(""),-1)
D ADJMAR(.DDWTXT,"","I")
S:$D(DDWLL) DDWTXT=DDWTXT+1,DDWTXT(DDWTXT)=DDWLL
S (DDWN,DDWL(DDWRW))=DDWTXT(1)
;
;Delete next line
I DDWTXT0>1,DDWTXT=1 D
. I DDWRW=DDWMR S DDWSTB=DDWSTB-1,DDWCNT=DDWCNT-1,$E(DDWBF,1,3)=111
. E D POS(DDWRW+1,DDWC,"RN"),XLINE^DDW5(1),POS(DDWRW-1,DDWC,"RN")
;
;DDWSCR: curr scr = final scr
I DDWTXT=1,'$D(DDWRFMT) S DDWSCR=$L(DDWTXT(1))+1-DDWOFS
E S DDWSCR=DDWLMAR-DDWOFS
S DDWSCR=DDWSCR'<1&(DDWSCR'>IOM)
;
I DDWSCR,DDWNSV'=DDWN D
. I DDWNSV]"",$P(DDWNSV,DDWN)="" D
.. D CUP(DDWRW,$$MAX($L(DDWN)+1-DDWOFS,1))
.. W $P(DDGLCLR,DDGLDEL)
. E I DDWN]"",$P(DDWN,DDWNSV)="" D
.. D CUP(DDWRW,$$MAX($L(DDWNSV)+1-DDWOFS,1))
.. W $E(DDWN,$$MAX($L(DDWNSV),DDWOFS)+1,IOM+DDWOFS)
. E D
.. D CUP(DDWRW,DDWOFS+1)
.. W $P(DDGLCLR,DDGLDEL)_$E(DDWN,DDWOFS+1,IOM+DDWOFS)
;
I DDWTXT=1 D
. I '$D(DDWRFMT) D
.. D POS(DDWRW,"E","RN")
. E D POS(DDWRW,DDWLMAR,"RN")
E D JOIN2
Q
;
JOIN2 ;Join produced >1 lines
D POS(DDWRW,DDWLMAR,"R")
;
I DDWTXT0=2 D
. I DDWRW<DDWMR D
.. S DDWL(DDWRW+1)=DDWTXT(2)
.. S DDWRW=DDWRW+1
.. I DDWSCR D
... D CUP(DDWRW,1)
... W $P(DDGLCLR,DDGLDEL)_$E(DDWL(DDWRW),1+DDWOFS,IOM+DDWOFS)
. E D
.. S ^TMP("DDW1",$J,DDWSTB)=DDWTXT(2)
.. D MVFWD^DDW3(1)
;
F DDWI=DDWTXT0+1:1:DDWTXT D
. D ILINE^DDW5
. S (DDWN,DDWL(DDWRW))=DDWTXT(DDWI)
. D CUP(DDWRW,1)
. W $P(DDGLCLR,DDGLDEL)_$E(DDWN,1+DDWOFS,IOM+DDWOFS)
;
D POS(DDWRW-($D(DDWLL)#2),DDWLMAR,"RN")
Q
;
ADJMAR(DDWT,DDWW,DDWFLG) ;Adjust length of text in DDWT array
; DDWT = Text array
; DDWW = Width
;DDWFLG = I:First line $L=DDWRMAR, subsequent $L=DDWRMAR-DDWLMAR+1
;
N DDWJ
S DDWJ=1
I $G(DDWFLG)["I" S DDWW=DDWRMAR
E I '$D(DDWW) S DDWW=DDWRMAR-DDWLMAR+1
;
F Q:'$D(DDWT(DDWJ)) D AMLOOP
S DDWT=$O(DDWT(""),-1)
I DDWLMAR>1 F DDWJ=$G(DDWFLG)["I"+1:1:DDWT D
. S DDWT(DDWJ)=$J("",DDWLMAR-1)_DDWT(DDWJ)
Q
;
AMLOOP ;Process DDWT(DDWJ)
I $E(DDWT(DDWJ),1,DDWW)=$J("",DDWW) S DDWT(DDWJ)=$$LD(DDWT(DDWJ))
;
E I $L(DDWT(DDWJ))>DDWW F D Q:$L(DDWT(DDWJ))'>DDWW
. N DDWK,DDWFST,DDWLST
. F DDWK=$O(DDWT(""),-1)+1:-1:DDWJ+2 S DDWT(DDWK)=DDWT(DDWK-1)
. D SLICE(DDWT(DDWJ),DDWW,.DDWFST,.DDWLST)
. S DDWT(DDWJ)=DDWFST,DDWT(DDWJ+1)=DDWLST
. D AMINCJ
;
E I $L(DDWT(DDWJ))=DDWW!'$D(DDWT(DDWJ+1)) D
. I DDWRAP,$D(DDWT(DDWJ+1)) S DDWT(DDWJ+1)=$$LD(DDWT(DDWJ+1))
. D AMINCJ
;
E I 'DDWRAP D
. N DDWK S DDWK=DDWW-$L(DDWT(DDWJ))
. S DDWT(DDWJ)=DDWT(DDWJ)_$E(DDWT(DDWJ+1),1,DDWK)
. S DDWT(DDWJ+1)=$E(DDWT(DDWJ+1),DDWK+1,999)
. D:DDWT(DDWJ+1)="" AMSHIFT(.DDWT,DDWJ+1)
;
E D
. N DDWD,DDWI,DDWNXT,DDWSP,DDWX1,DDWX2
. S DDWD=0 F D Q:DDWD
.. S DDWX1=DDWT(DDWJ),(DDWX2,DDWT(DDWJ+1))=$$LD(DDWT(DDWJ+1))
.. I DDWX2="" S DDWD=1 Q
.. S DDWNXT=$P(DDWX2," "),DDWI=$L(DDWNXT)
.. I $E(DDWX2,DDWI+2)=" ",$E(DDWX2,DDWI+3,999)'?." " D
... F DDWI=DDWI+2:1 Q:$E(DDWX2,DDWI+1)'=" "
.. S DDWSP=DDWX1'?.E1" "
.. I $L(DDWX1)+DDWSP+$L($E(DDWX2,1,DDWI))>DDWW S DDWD=1 Q
.. S DDWT(DDWJ)=DDWX1_$E(" ",DDWSP)_$E(DDWX2,1,DDWI)
.. S DDWT(DDWJ+1)=$$LD($E(DDWX2,DDWI+1,999))
. ;
. I DDWT(DDWJ+1)="" D
.. D AMSHIFT(.DDWT,DDWJ+1)
. E D AMINCJ
Q
;
AMSHIFT(DDWT,DDWJ) ;Delete DDWT(DDWJ) and shift up
N DDWI
F DDWI=DDWJ:1:$O(DDWT(""),-1)-1 S DDWT(DDWI)=DDWT(DDWI+1)
K DDWT($O(DDWT(""),-1))
Q
;
AMINCJ ;Incr DDWJ
I DDWJ=1,$G(DDWFLG)["I" S DDWW=DDWRMAR-DDWLMAR+1
S DDWJ=DDWJ+1
Q
;
SLICE(DDWN,DDWW,DDWFST,DDWRST) ;
;Out: DDWFST=first part of text, $L<=DDWRMAR
; DDWRST=remaining part (lead blanks removed)
N DDWI,DDWP,DDWX
S:'$G(DDWW) DDWW=DDWRMAR
I 'DDWRAP S DDWFST=$E(DDWN,1,DDWW),DDWLST=$E(DDWN,DDWW+1,999) Q
;
;Set DDWI to column # at which to break
S DDWX=$E(DDWN,1,DDWW),DDWI=DDWW
I DDWX'[" "
E I DDWX?." "
E I $E(DDWX,DDWW)=" ",$E(DDWN,DDWW+1)'=" "
E D
. F DDWP=$L(DDWX," "):-1:0 Q:$P(DDWX," ",DDWP)]""
. Q:DDWP=1
. S DDWI=$L($P(DDWX," ",1,DDWP-1))+1
. S:DDWI'>$S(DDWW=DDWRMAR:DDWLMAR,1:1) DDWI=DDWW
;
S DDWFST=$E(DDWN,1,DDWI),DDWRST=$$LD($E(DDWN,DDWI+1,999))
Q
;
TR(X) Q:$G(X)="" X
N I
F I=$L(X):-1:0 Q:$E(X,I)'=" "
Q $E(X,1,I)
;
LD(X) Q:$G(X)="" X
N I
F I=1:1:$L(X)+1 Q:$E(X,I)'=" "
Q $E(X,I,999)
;
CUP(Y,X) ;
S DY=IOTM+Y-2,DX=X-1 X IOXY
Q
;
POS(R,C,F) ;Pos cursor
N DDWX
S:$G(C)="E" C=$L($G(DDWL(R)))+1
S:$G(F)["N" DDWN=$G(DDWL(R))
S:$G(F)["R" DDWRW=R,DDWC=C
;
S DDWX=C-DDWOFS
I DDWX>IOM!(DDWX<1) D SHIFT^DDW3(C,.DDWOFS)
S DY=IOTM+R-2,DX=C-DDWOFS-1 X IOXY
Q
;
SCR(C) ;Screen number
Q C-$P(DDWOFS,U,2)-1\$P(DDWOFS,U,3)+1
;
MIN(X,Y) ;
Q $S(X<Y:X,1:Y)
MAX(X,Y) ;
Q $S(X>Y:X,1:Y)
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDDW6 5628 printed Dec 13, 2024@02:43:57 Page 2
DDW6 ;SFISC/MKO-JOIN ;10:41 AM 16 Jun 2000
+1 ;;22.2;VA FileMan;;Jan 05, 2016;Build 42
+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 ;
REFMT ;Reformat
+1 NEW DDWRFMT
+2 IF $DATA(DDWMARK)
IF DDWRW+DDWA'>$PIECE(DDWMARK,U,3)
DO UNMARK^DDW7
+3 DO POS(DDWRW,DDWLMAR,"R")
+4 SET DDWRFMT=0
FOR
DO JOIN
if DDWRFMT
QUIT
+5 QUIT
+6 ;
JOIN ;Join
+1 NEW DDWI,DDWSCR,DDWNSV,DDWLL,DDWTXT,DDWTXT0
+2 IF $DATA(DDWMARK)
IF DDWRW+DDWA'>$PIECE(DDWMARK,U,3)
DO UNMARK^DDW7
+3 ;
+4 ;Get current line
+5 SET (DDWTXT(1),DDWNSV)=DDWN
+6 ;
+7 ;Get next line
+8 IF DDWRW=DDWMR
if DDWSTB
SET DDWTXT(2)=^TMP("DDW1",$JOB,DDWSTB)
+9 IF '$TEST
if DDWA+DDWRW<DDWCNT
SET DDWTXT(2)=DDWL(DDWRW+1)
+10 ;
+11 IF $GET(DDWTXT(2))?." "
Begin DoDot:1
+12 IF $LENGTH(DDWN)>DDWRMAR
if $DATA(DDWTXT(2))#2
SET DDWLL=DDWTXT(2)
+13 IF '$TEST
IF $DATA(DDWRFMT)
SET DDWRFMT=1
End DoDot:1
if $GET(DDWRFMT)
QUIT
+14 ;
+15 ;Adjust
+16 SET DDWTXT0=$ORDER(DDWTXT(""),-1)
+17 DO ADJMAR(.DDWTXT,"","I")
+18 if $DATA(DDWLL)
SET DDWTXT=DDWTXT+1
SET DDWTXT(DDWTXT)=DDWLL
+19 SET (DDWN,DDWL(DDWRW))=DDWTXT(1)
+20 ;
+21 ;Delete next line
+22 IF DDWTXT0>1
IF DDWTXT=1
Begin DoDot:1
+23 IF DDWRW=DDWMR
SET DDWSTB=DDWSTB-1
SET DDWCNT=DDWCNT-1
SET $EXTRACT(DDWBF,1,3)=111
+24 IF '$TEST
DO POS(DDWRW+1,DDWC,"RN")
DO XLINE^DDW5(1)
DO POS(DDWRW-1,DDWC,"RN")
End DoDot:1
+25 ;
+26 ;DDWSCR: curr scr = final scr
+27 IF DDWTXT=1
IF '$DATA(DDWRFMT)
SET DDWSCR=$LENGTH(DDWTXT(1))+1-DDWOFS
+28 IF '$TEST
SET DDWSCR=DDWLMAR-DDWOFS
+29 SET DDWSCR=DDWSCR'<1&(DDWSCR'>IOM)
+30 ;
+31 IF DDWSCR
IF DDWNSV'=DDWN
Begin DoDot:1
+32 IF DDWNSV]""
IF $PIECE(DDWNSV,DDWN)=""
Begin DoDot:2
+33 DO CUP(DDWRW,$$MAX($LENGTH(DDWN)+1-DDWOFS,1))
+34 WRITE $PIECE(DDGLCLR,DDGLDEL)
End DoDot:2
+35 IF '$TEST
IF DDWN]""
IF $PIECE(DDWN,DDWNSV)=""
Begin DoDot:2
+36 DO CUP(DDWRW,$$MAX($LENGTH(DDWNSV)+1-DDWOFS,1))
+37 WRITE $EXTRACT(DDWN,$$MAX($LENGTH(DDWNSV),DDWOFS)+1,IOM+DDWOFS)
End DoDot:2
+38 IF '$TEST
Begin DoDot:2
+39 DO CUP(DDWRW,DDWOFS+1)
+40 WRITE $PIECE(DDGLCLR,DDGLDEL)_$EXTRACT(DDWN,DDWOFS+1,IOM+DDWOFS)
End DoDot:2
End DoDot:1
+41 ;
+42 IF DDWTXT=1
Begin DoDot:1
+43 IF '$DATA(DDWRFMT)
Begin DoDot:2
+44 DO POS(DDWRW,"E","RN")
End DoDot:2
+45 IF '$TEST
DO POS(DDWRW,DDWLMAR,"RN")
End DoDot:1
+46 IF '$TEST
DO JOIN2
+47 QUIT
+48 ;
JOIN2 ;Join produced >1 lines
+1 DO POS(DDWRW,DDWLMAR,"R")
+2 ;
+3 IF DDWTXT0=2
Begin DoDot:1
+4 IF DDWRW<DDWMR
Begin DoDot:2
+5 SET DDWL(DDWRW+1)=DDWTXT(2)
+6 SET DDWRW=DDWRW+1
+7 IF DDWSCR
Begin DoDot:3
+8 DO CUP(DDWRW,1)
+9 WRITE $PIECE(DDGLCLR,DDGLDEL)_$EXTRACT(DDWL(DDWRW),1+DDWOFS,IOM+DDWOFS)
End DoDot:3
End DoDot:2
+10 IF '$TEST
Begin DoDot:2
+11 SET ^TMP("DDW1",$JOB,DDWSTB)=DDWTXT(2)
+12 DO MVFWD^DDW3(1)
End DoDot:2
End DoDot:1
+13 ;
+14 FOR DDWI=DDWTXT0+1:1:DDWTXT
Begin DoDot:1
+15 DO ILINE^DDW5
+16 SET (DDWN,DDWL(DDWRW))=DDWTXT(DDWI)
+17 DO CUP(DDWRW,1)
+18 WRITE $PIECE(DDGLCLR,DDGLDEL)_$EXTRACT(DDWN,1+DDWOFS,IOM+DDWOFS)
End DoDot:1
+19 ;
+20 DO POS(DDWRW-($DATA(DDWLL)#2),DDWLMAR,"RN")
+21 QUIT
+22 ;
ADJMAR(DDWT,DDWW,DDWFLG) ;Adjust length of text in DDWT array
+1 ; DDWT = Text array
+2 ; DDWW = Width
+3 ;DDWFLG = I:First line $L=DDWRMAR, subsequent $L=DDWRMAR-DDWLMAR+1
+4 ;
+5 NEW DDWJ
+6 SET DDWJ=1
+7 IF $GET(DDWFLG)["I"
SET DDWW=DDWRMAR
+8 IF '$TEST
IF '$DATA(DDWW)
SET DDWW=DDWRMAR-DDWLMAR+1
+9 ;
+10 FOR
if '$DATA(DDWT(DDWJ))
QUIT
DO AMLOOP
+11 SET DDWT=$ORDER(DDWT(""),-1)
+12 IF DDWLMAR>1
FOR DDWJ=$GET(DDWFLG)["I"+1:1:DDWT
Begin DoDot:1
+13 SET DDWT(DDWJ)=$JUSTIFY("",DDWLMAR-1)_DDWT(DDWJ)
End DoDot:1
+14 QUIT
+15 ;
AMLOOP ;Process DDWT(DDWJ)
+1 IF $EXTRACT(DDWT(DDWJ),1,DDWW)=$JUSTIFY("",DDWW)
SET DDWT(DDWJ)=$$LD(DDWT(DDWJ))
+2 ;
+3 IF '$TEST
IF $LENGTH(DDWT(DDWJ))>DDWW
FOR
Begin DoDot:1
+4 NEW DDWK,DDWFST,DDWLST
+5 FOR DDWK=$ORDER(DDWT(""),-1)+1:-1:DDWJ+2
SET DDWT(DDWK)=DDWT(DDWK-1)
+6 DO SLICE(DDWT(DDWJ),DDWW,.DDWFST,.DDWLST)
+7 SET DDWT(DDWJ)=DDWFST
SET DDWT(DDWJ+1)=DDWLST
+8 DO AMINCJ
End DoDot:1
if $LENGTH(DDWT(DDWJ))'>DDWW
QUIT
+9 ;
+10 IF '$TEST
IF $LENGTH(DDWT(DDWJ))=DDWW!'$DATA(DDWT(DDWJ+1))
Begin DoDot:1
+11 IF DDWRAP
IF $DATA(DDWT(DDWJ+1))
SET DDWT(DDWJ+1)=$$LD(DDWT(DDWJ+1))
+12 DO AMINCJ
End DoDot:1
+13 ;
+14 IF '$TEST
IF 'DDWRAP
Begin DoDot:1
+15 NEW DDWK
SET DDWK=DDWW-$LENGTH(DDWT(DDWJ))
+16 SET DDWT(DDWJ)=DDWT(DDWJ)_$EXTRACT(DDWT(DDWJ+1),1,DDWK)
+17 SET DDWT(DDWJ+1)=$EXTRACT(DDWT(DDWJ+1),DDWK+1,999)
+18 if DDWT(DDWJ+1)=""
DO AMSHIFT(.DDWT,DDWJ+1)
End DoDot:1
+19 ;
+20 IF '$TEST
Begin DoDot:1
+21 NEW DDWD,DDWI,DDWNXT,DDWSP,DDWX1,DDWX2
+22 SET DDWD=0
FOR
Begin DoDot:2
+23 SET DDWX1=DDWT(DDWJ)
SET (DDWX2,DDWT(DDWJ+1))=$$LD(DDWT(DDWJ+1))
+24 IF DDWX2=""
SET DDWD=1
QUIT
+25 SET DDWNXT=$PIECE(DDWX2," ")
SET DDWI=$LENGTH(DDWNXT)
+26 IF $EXTRACT(DDWX2,DDWI+2)=" "
IF $EXTRACT(DDWX2,DDWI+3,999)'?." "
Begin DoDot:3
+27 FOR DDWI=DDWI+2:1
if $EXTRACT(DDWX2,DDWI+1)'=" "
QUIT
End DoDot:3
+28 SET DDWSP=DDWX1'?.E1" "
+29 IF $LENGTH(DDWX1)+DDWSP+$LENGTH($EXTRACT(DDWX2,1,DDWI))>DDWW
SET DDWD=1
QUIT
+30 SET DDWT(DDWJ)=DDWX1_$EXTRACT(" ",DDWSP)_$EXTRACT(DDWX2,1,DDWI)
+31 SET DDWT(DDWJ+1)=$$LD($EXTRACT(DDWX2,DDWI+1,999))
End DoDot:2
if DDWD
QUIT
+32 ;
+33 IF DDWT(DDWJ+1)=""
Begin DoDot:2
+34 DO AMSHIFT(.DDWT,DDWJ+1)
End DoDot:2
+35 IF '$TEST
DO AMINCJ
End DoDot:1
+36 QUIT
+37 ;
AMSHIFT(DDWT,DDWJ) ;Delete DDWT(DDWJ) and shift up
+1 NEW DDWI
+2 FOR DDWI=DDWJ:1:$ORDER(DDWT(""),-1)-1
SET DDWT(DDWI)=DDWT(DDWI+1)
+3 KILL DDWT($ORDER(DDWT(""),-1))
+4 QUIT
+5 ;
AMINCJ ;Incr DDWJ
+1 IF DDWJ=1
IF $GET(DDWFLG)["I"
SET DDWW=DDWRMAR-DDWLMAR+1
+2 SET DDWJ=DDWJ+1
+3 QUIT
+4 ;
SLICE(DDWN,DDWW,DDWFST,DDWRST) ;
+1 ;Out: DDWFST=first part of text, $L<=DDWRMAR
+2 ; DDWRST=remaining part (lead blanks removed)
+3 NEW DDWI,DDWP,DDWX
+4 if '$GET(DDWW)
SET DDWW=DDWRMAR
+5 IF 'DDWRAP
SET DDWFST=$EXTRACT(DDWN,1,DDWW)
SET DDWLST=$EXTRACT(DDWN,DDWW+1,999)
QUIT
+6 ;
+7 ;Set DDWI to column # at which to break
+8 SET DDWX=$EXTRACT(DDWN,1,DDWW)
SET DDWI=DDWW
+9 IF DDWX'[" "
+10 IF '$TEST
IF DDWX?." "
+11 IF '$TEST
IF $EXTRACT(DDWX,DDWW)=" "
IF $EXTRACT(DDWN,DDWW+1)'=" "
+12 IF '$TEST
Begin DoDot:1
+13 FOR DDWP=$LENGTH(DDWX," "):-1:0
if $PIECE(DDWX," ",DDWP)]""
QUIT
+14 if DDWP=1
QUIT
+15 SET DDWI=$LENGTH($PIECE(DDWX," ",1,DDWP-1))+1
+16 if DDWI'>$SELECT(DDWW=DDWRMAR
SET DDWI=DDWW
End DoDot:1
+17 ;
+18 SET DDWFST=$EXTRACT(DDWN,1,DDWI)
SET DDWRST=$$LD($EXTRACT(DDWN,DDWI+1,999))
+19 QUIT
+20 ;
TR(X) if $GET(X)=""
QUIT X
+1 NEW I
+2 FOR I=$LENGTH(X):-1:0
if $EXTRACT(X,I)'=" "
QUIT
+3 QUIT $EXTRACT(X,1,I)
+4 ;
LD(X) if $GET(X)=""
QUIT X
+1 NEW I
+2 FOR I=1:1:$LENGTH(X)+1
if $EXTRACT(X,I)'=" "
QUIT
+3 QUIT $EXTRACT(X,I,999)
+4 ;
CUP(Y,X) ;
+1 SET DY=IOTM+Y-2
SET DX=X-1
XECUTE IOXY
+2 QUIT
+3 ;
POS(R,C,F) ;Pos cursor
+1 NEW DDWX
+2 if $GET(C)="E"
SET C=$LENGTH($GET(DDWL(R)))+1
+3 if $GET(F)["N"
SET DDWN=$GET(DDWL(R))
+4 if $GET(F)["R"
SET DDWRW=R
SET DDWC=C
+5 ;
+6 SET DDWX=C-DDWOFS
+7 IF DDWX>IOM!(DDWX<1)
DO SHIFT^DDW3(C,.DDWOFS)
+8 SET DY=IOTM+R-2
SET DX=C-DDWOFS-1
XECUTE IOXY
+9 QUIT
+10 ;
SCR(C) ;Screen number
+1 QUIT C-$PIECE(DDWOFS,U,2)-1\$PIECE(DDWOFS,U,3)+1
+2 ;
MIN(X,Y) ;
+1 QUIT $SELECT(X<Y:X,1:Y)
MAX(X,Y) ;
+1 QUIT $SELECT(X>Y:X,1:Y)