Annotation of freem_fileman/DDW6.m, revision 1.1.1.1

1.1       snw         1: DDW6   ;SFISC/MKO-JOIN ;08:51 AM  31 Aug 1994
                      2:        ;;21.0;VA FileMan;;Dec 28, 1994
                      3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
                      4:        ;
                      5: REFMT  ;Reformat
                      6:        N DDWRFMT
                      7:        I $D(DDWMARK),DDWRW+DDWA'>$P(DDWMARK,U,3) D UNMARK^DDW7
                      8:        D POS(DDWRW,DDWLMAR,"R")
                      9:        S DDWRFMT=0 F  D JOIN Q:DDWRFMT
                     10:        Q
                     11:        ;
                     12: JOIN   ;Join
                     13:        N DDWI,DDWSCR,DDWNSV,DDWLL,DDWTXT,DDWTXT0
                     14:        I $D(DDWMARK),DDWRW+DDWA'>$P(DDWMARK,U,3) D UNMARK^DDW7
                     15:        ;
                     16:        ;Get current line
                     17:        S:DDWN?." " (DDWN,DDWL(DDWRW))=$J("",DDWLMAR-1)
                     18:        S (DDWTXT(1),DDWNSV)=DDWN
                     19:        ;
                     20:        ;Get next line
                     21:        I DDWRW=DDWMR S:DDWSTB DDWTXT(2)=^TMP("DDW1",$J,DDWSTB)
                     22:        E  S:DDWA+DDWRW<DDWCNT DDWTXT(2)=DDWL(DDWRW+1)
                     23:        ;
                     24:        I $G(DDWTXT(2))?." " D  Q:$G(DDWRFMT)
                     25:        . I $L(DDWN)>DDWRMAR S:$D(DDWTXT(2))#2 DDWLL=DDWTXT(2)
                     26:        . E  I $D(DDWRFMT) S DDWRFMT=1
                     27:        ;
                     28:        ;Adjust
                     29:        S DDWTXT0=$O(DDWTXT(""),-1)
                     30:        D ADJMAR(.DDWTXT,"","I")
                     31:        S:$D(DDWLL) DDWTXT=DDWTXT+1,DDWTXT(DDWTXT)=DDWLL
                     32:        S (DDWN,DDWL(DDWRW))=DDWTXT(1)
                     33:        ;
                     34:        ;Delete next line
                     35:        I DDWTXT0>1,DDWTXT=1 D
                     36:        . I DDWRW=DDWMR S DDWSTB=DDWSTB-1,DDWCNT=DDWCNT-1,$E(DDWBF,1,3)=111
                     37:        . E  D POS(DDWRW+1,DDWC,"RN"),XLINE^DDW5(1),POS(DDWRW-1,DDWC,"RN")
                     38:        ;
                     39:        ;DDWSCR: curr scr = final scr
                     40:        I DDWTXT=1,'$D(DDWRFMT) D
                     41:        . S DDWSCR=$$SCR($L(DDWTXT(1))+1)=$P(DDWOFS,U,4)
                     42:        E  D
                     43:        . S DDWSCR=$$SCR(DDWLMAR)=$P(DDWOFS,U,4)
                     44:        ;
                     45:        I DDWSCR,$L(DDWNSV)'=$L(DDWN) D
                     46:        . D CUP(DDWRW,$$MIN($L(DDWNSV),$L(DDWN))+1-DDWOFS)
                     47:        . W $P(DDGLCLR,DDGLDEL)_$E(DDWN,$L(DDWNSV)+1,IOM+DDWOFS)
                     48:        ;
                     49:        I DDWTXT=1 D
                     50:        . I '$D(DDWRFMT) D
                     51:        .. D POS(DDWRW,"E","RN")
                     52:        . E  D POS(DDWRW,DDWLMAR,"RN")
                     53:        E  D JOIN2
                     54:        Q
                     55:        ;
                     56: JOIN2  ;Join produced >1 lines
                     57:        D POS(DDWRW,DDWLMAR,"R")
                     58:        ;
                     59:        I DDWTXT0=2 D
                     60:        . I DDWRW<DDWMR S DDWL(DDWRW+1)=DDWTXT(2)
                     61:        . E  S ^TMP("DDW1",$J,DDWSTB)=DDWTXT(2)
                     62:        . ;
                     63:        . I DDWRW<DDWMR D
                     64:        .. S DDWRW=DDWRW+1
                     65:        .. I DDWSCR D
                     66:        ... D CUP(DDWRW,1)
                     67:        ... W $P(DDGLCLR,DDGLDEL)_$E(DDWL(DDWRW),1+DDWOFS,IOM+DDWOFS)
                     68:        . E  D MVFWD^DDW3(1)
                     69:        ;
                     70:        F DDWI=DDWTXT0+1:1:DDWTXT D
                     71:        . D ILINE^DDW5
                     72:        . S (DDWN,DDWL(DDWRW))=DDWTXT(DDWI)
                     73:        . D CUP(DDWRW,1)
                     74:        . W $P(DDGLCLR,DDGLDEL)_$E(DDWN,1+DDWOFS,IOM+DDWOFS)
                     75:        ;
                     76:        D POS(DDWRW-($D(DDWLL)#2),DDWLMAR,"RN")
                     77:        Q
                     78:        ;
                     79: ADJMAR(DDWT,DDWW,DDWFLG)       ;Adjust length of text in DDWT array
                     80:        ;  DDWT = Text array
                     81:        ;  DDWW = Width
                     82:        ;DDWFLG = I:First line $L=DDWRMAR, subsequent $L=DDWRMAR-DDWLMAR+1
                     83:        ;
                     84:        N DDWJ
                     85:        S DDWJ=1
                     86:        I $G(DDWFLG)["I" S DDWW=DDWRMAR
                     87:        E  I '$D(DDWW) S DDWW=DDWRMAR-DDWLMAR+1
                     88:        ;
                     89:        F  Q:'$D(DDWT(DDWJ))  D AMLOOP
                     90:        S DDWT=$O(DDWT(""),-1)
                     91:        I DDWLMAR>1 F DDWJ=$G(DDWFLG)["I"+1:1:DDWT D
                     92:        . S DDWT(DDWJ)=$J("",DDWLMAR-1)_DDWT(DDWJ)
                     93:        Q
                     94:        ;
                     95: AMLOOP ;Process DDWT(DDWJ)
                     96:        I $L(DDWT(DDWJ))>DDWW F  D  Q:$L(DDWT(DDWJ))'>DDWW
                     97:        . N DDWK,DDWFST,DDWLST
                     98:        . F DDWK=$O(DDWT(""),-1)+1:-1:DDWJ+2 S DDWT(DDWK)=DDWT(DDWK-1)
                     99:        . D SLICE(DDWT(DDWJ),DDWW,.DDWFST,.DDWLST)
                    100:        . S DDWT(DDWJ)=DDWFST,DDWT(DDWJ+1)=DDWLST
                    101:        . D AMINCJ
                    102:        ;
                    103:        E  I $L(DDWT(DDWJ))=DDWW!'$D(DDWT(DDWJ+1)) D
                    104:        . I DDWRAP,$D(DDWT(DDWJ+1)) S DDWT(DDWJ+1)=$$LD(DDWT(DDWJ+1))
                    105:        . D AMINCJ
                    106:        ;
                    107:        E  I 'DDWRAP D
                    108:        . N DDWK S DDWK=DDWW-$L(DDWT(DDWJ))
                    109:        . S DDWT(DDWJ)=DDWT(DDWJ)_$E(DDWT(DDWJ+1),1,DDWK)
                    110:        . S DDWT(DDWJ+1)=$E(DDWT(DDWJ+1),DDWK+1,999)
                    111:        . D:DDWT(DDWJ+1)="" AMSHIFT(.DDWT,DDWJ+1)
                    112:        ;
                    113:        E  D
                    114:        . N DDWD,DDWI
                    115:        . S DDWT(DDWJ+1)=$$LD(DDWT(DDWJ+1))
                    116:        . S:DDWT(DDWJ)'?.E1" " DDWT(DDWJ)=DDWT(DDWJ)_" "
                    117:        . S DDWD=0 F DDWI=1:1:$L(DDWT(DDWJ+1)," ") D  Q:DDWD
                    118:        .. I $L(DDWT(DDWJ))+$L($P(DDWT(DDWJ+1)," "))>DDWW S DDWD=1 Q
                    119:        .. ;
                    120:        .. S DDWT(DDWJ)=DDWT(DDWJ)_$P(DDWT(DDWJ+1)," ")
                    121:        .. S:$L(DDWT(DDWJ))<DDWW DDWT(DDWJ)=DDWT(DDWJ)_" "
                    122:        .. S DDWT(DDWJ+1)=$P(DDWT(DDWJ+1)," ",2,999)
                    123:        . ;
                    124:        . S DDWT(DDWJ)=$$TR(DDWT(DDWJ)),DDWT(DDWJ+1)=$$LD(DDWT(DDWJ+1))
                    125:        . I DDWT(DDWJ+1)="" D
                    126:        .. D AMSHIFT(.DDWT,DDWJ+1)
                    127:        . E  D:DDWI=1 AMINCJ
                    128:        Q
                    129:        ;
                    130: AMSHIFT(DDWT,DDWJ)     ;Delete DDWT(DDWJ) and shift up
                    131:        N DDWI
                    132:        F DDWI=DDWJ:1:$O(DDWT(""),-1)-1 S DDWT(DDWI)=DDWT(DDWI+1)
                    133:        K DDWT($O(DDWT(""),-1))
                    134:        Q
                    135:        ;
                    136: AMINCJ ;Incr DDWJ
                    137:        I DDWJ=1,$G(DDWFLG)["I" S DDWW=DDWRMAR-DDWLMAR+1
                    138:        S DDWJ=DDWJ+1
                    139:        Q
                    140:        ;
                    141: SLICE(DDWN,DDWW,DDWFST,DDWRST) ;
                    142:        ;Out: DDWFST=first part of text, $L<=DDWRMAR (trailing bl removed)
                    143:        ;     DDWRST=remaining part (lead blanks removed)
                    144:        N DDWI,DDWX
                    145:        S:'$G(DDWW) DDWW=DDWRMAR
                    146:        ;
                    147:        I 'DDWRAP S DDWFST=$E(DDWN,1,DDWW),DDWLST=$E(DDWN,DDWW+1,999) Q
                    148:        ;
                    149:        F DDWI=$L(DDWN," "):-1:1 Q:$L($P(DDWN," ",1,DDWI))'>DDWW
                    150:        S:$E(DDWN,1,DDWI)?." " DDWI=999
                    151:        S DDWFST=$$TR($P(DDWN," ",1,DDWI))
                    152:        S:$L(DDWFST)>DDWW DDWFST=$E(DDWFST,1,DDWW)
                    153:        S DDWRST=$$LD($E(DDWN,$L(DDWFST)+1,999))
                    154:        Q
                    155:        ;
                    156: TR(X)  Q:$G(X)="" X
                    157:        N I
                    158:        F I=$L(X):-1:0 Q:$E(X,I)'=" "
                    159:        Q $E(X,1,I)
                    160:        ;
                    161: LD(X)  Q:$G(X)="" X
                    162:        N I
                    163:        F I=1:1:$L(X)+1 Q:$E(X,I)'=" "
                    164:        Q $E(X,I,999)
                    165:        ;
                    166: CUP(Y,X)       ;
                    167:        S DY=IOTM+Y-2,DX=X-1 X IOXY
                    168:        Q
                    169:        ;
                    170: POS(R,C,F)     ;Pos cursor
                    171:        N DDWX
                    172:        S:$G(C)="E" C=$L($G(DDWL(R)))+1
                    173:        S:$G(F)["N" DDWN=$G(DDWL(R))
                    174:        S:$G(F)["R" DDWRW=R,DDWC=C
                    175:        ;
                    176:        S DDWX=C-DDWOFS
                    177:        I DDWX>IOM!(DDWX<1) D SHIFT^DDW3(C,.DDWOFS)
                    178:        S DY=IOTM+R-2,DX=C-DDWOFS-1 X IOXY
                    179:        Q
                    180:        ;
                    181: SCR(C) ;Screen number
                    182:        Q C-$P(DDWOFS,U,2)-1\$P(DDWOFS,U,3)+1
                    183:        ;
                    184: MIN(X,Y)       ;
                    185:        Q $S(X<Y:X,1:Y)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>