Annotation of freem_fileman/DDW8.m, revision 1.1.1.1

1.1       snw         1: DDW8   ;SFISC/MKO-COPY, CUT, PASTE ;10:39 AM  23 Jun 1994
                      2:        ;;21.0;VA FileMan;;Dec 28, 1994
                      3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
                      4:        ;
                      5: CUT()  ;Cut selected text
                      6:        N DDWADJ,DDWC1,DDWC2,DDWCSV,DDWISIN,DDWNDEL,DDWR1,DDWR2,DDWRSV
                      7:        I '$D(DDWMARK) D ERR("No text selected.") Q
                      8:        ;
                      9:        S DDWISIN=$$ISINSEL()
                     10:        D PMARK(DDWMARK,.DDWR1,.DDWC1,.DDWR2,.DDWC2)
                     11:        D COPYBUF
                     12:        ;
                     13:        S DDWRSV=DDWRW,DDWCSV=DDWC
                     14:        I DDWR2>DDWA,DDWR2-DDWA<DDWRW S DDWADJ=1
                     15:        E  I DDWR1-DDWA'>DDWMR,DDWR1-DDWA>DDWRW S DDWADJ=0
                     16:        ;
                     17:        D DELBLK^DDW9(.DDWNDEL)
                     18:        D:$D(DDWADJ) POS(DDWRSV-(DDWADJ*DDWNDEL),DDWCSV,"RN")
                     19:        D:'DDWISIN PASTE()
                     20:        Q
                     21:        ;
                     22: COPY() ;Copy selected text
                     23:        N DDWC1,DDWC2,DDWISIN,DDWR1,DDWR2
                     24:        I '$D(DDWMARK) D ERR("No text selected.") Q
                     25:        ;
                     26:        S DDWISIN=$$ISINSEL()
                     27:        D PMARK(DDWMARK,.DDWR1,.DDWC1,.DDWR2,.DDWC2)
                     28:        D COPYBUF
                     29:        D UNMARK^DDW7
                     30:        D:'DDWISIN PASTE()
                     31:        Q
                     32:        ;
                     33: COPYBUF        ;Copy selected text to buffer
                     34:        N DDWND,DDWI,DDWX,DDWX1,DDWX2
                     35:        K ^TMP("DDWB",$J)
                     36:        S DDWND=0
                     37:        ;
                     38:        D:DDWR2-DDWR1>50 MSG^DDW("Copying text to buffer ...")
                     39:        ;
                     40:        F DDWI=DDWR1:1:$$MIN(DDWA,DDWR2) D
                     41:        . S DDWND=DDWND+1
                     42:        . S DDWX=^TMP("DDW",$J,DDWI)
                     43:        . S DDWX=$E(DDWX,$S(DDWI=DDWR1:DDWC1,1:1),$S(DDWI=DDWR2:DDWC2,1:999))
                     44:        . S ^TMP("DDWB",$J,DDWND)=DDWX
                     45:        ;
                     46:        F DDWI=$$MAX(DDWR1-DDWA,1):1:$$MIN(DDWR2-DDWA,DDWMR) D
                     47:        . S DDWX=$E(DDWL(DDWI),$S(DDWI+DDWA=DDWR1:DDWC1,1:1),$S(DDWI+DDWA=DDWR2:DDWC2,1:999))
                     48:        . S DDWND=DDWND+1
                     49:        . S ^TMP("DDWB",$J,DDWND)=DDWX
                     50:        ;
                     51:        S DDWX1=$$RTOSTB(DDWR1),DDWX2=$$RTOSTB(DDWR2)
                     52:        F DDWI=$$MIN(DDWSTB,DDWX1):-1:DDWX2 D
                     53:        . S DDWND=DDWND+1
                     54:        . S DDWX=^TMP("DDW1",$J,DDWI)
                     55:        . S DDWX=$E(DDWX,$S(DDWI=DDWX1:DDWC1,1:1),$S(DDWI=DDWX2:DDWC2,1:999))
                     56:        . S ^TMP("DDWB",$J,DDWND)=DDWX
                     57:        ;
                     58:        D:DDWR2-DDWR1>50 MSG^DDW()
                     59:        Q
                     60:        ;
                     61: PASTE()        ;Paste text
                     62:        I $D(DDWMARK) D ERR("You curently have text selected.") Q
                     63:        I '$D(^TMP("DDWB",$J)) D ERR("The buffer contains no text.") Q
                     64:        ;
                     65:        N DDWBSIZ,DDWFC,DDWI,DDWLST,DDWNSV,DDWTXT,DDWX
                     66:        S DDWBSIZ=$O(^TMP("DDWB",$J,""),-1)
                     67:        ;
                     68:        S DDWTXT=1
                     69:        S:$L(DDWN)+1<DDWC DDWN=DDWN_$J("",DDWC-$L(DDWN)-1)
                     70:        S (DDWNSV,DDWX)=$E(DDWN,1,DDWC-1)
                     71:        S DDWTXT(1)=DDWX
                     72:        I $L(DDWX)+$L(^TMP("DDWB",$J,1))<256!(DDWX="") S DDWTXT(1)=DDWTXT(1)_^(1)
                     73:        E  S DDWTXT=DDWTXT+1,DDWTXT(DDWTXT)=^TMP("DDWB",$J,1)
                     74:        ;
                     75:        S DDWLST=$E(DDWN,DDWC,999)
                     76:        I DDWRAP,DDWLST?1." " S DDWLST=""
                     77:        I DDWLST]"",DDWBSIZ=1 S DDWTXT=DDWTXT+1,DDWTXT(DDWTXT)=DDWLST,DDWLST=""
                     78:        ;
                     79:        D:DDWTXT ADJMAR^DDW6(.DDWTXT,"","I")
                     80:        S (DDWN,DDWL(DDWRW))=DDWTXT(1)
                     81:        ;
                     82:        I DDWBSIZ=1,DDWTXT=1 S DDWFC=$L(DDWNSV)+$L(^TMP("DDWB",$J,1))+1
                     83:        E  I DDWBSIZ=1,DDWTXT=2,DDWLST="" S DDWFC=$L(DDWTXT(2))+1
                     84:        E  S DDWFC=1
                     85:        ;
                     86:        I $$SCR(DDWFC)=$P(DDWOFS,U,4) D
                     87:        . D POS(DDWRW,$$MIN($L(DDWNSV),$L(DDWN))+1)
                     88:        . W $P(DDGLCLR,DDGLDEL)_$E(DDWN,$L(DDWNSV)+1,IOM+DDWOFS)
                     89:        ;
                     90:        D POS(DDWRW,DDWFC,"R")
                     91:        ;
                     92:        F DDWI=2:1:DDWTXT D
                     93:        . D ILINE^DDW5
                     94:        . S (DDWN,DDWL(DDWRW))=DDWTXT(DDWI)
                     95:        . D CUP(DDWRW,1)
                     96:        . W $E(DDWN,1+DDWOFS,IOM+DDWOFS)
                     97:        ;
                     98:        F DDWI=2:1:DDWBSIZ D
                     99:        . D ILINE^DDW5
                    100:        . S (DDWN,DDWL(DDWRW))=^TMP("DDWB",$J,DDWI)
                    101:        . D CUP(DDWRW,1)
                    102:        . W $E(DDWN,1+DDWOFS,IOM+DDWOFS)
                    103:        ;
                    104:        I DDWLST]"" D
                    105:        . D ILINE^DDW5
                    106:        . S (DDWN,DDWL(DDWRW))=DDWLST
                    107:        . D CUP(DDWRW,1)
                    108:        . W $E(DDWN,1+DDWOFS,IOM+DDWOFS)
                    109:        ;
                    110:        D POS(DDWRW,DDWFC,"RN")
                    111:        Q
                    112:        ;
                    113: CUP(Y,X)       ;
                    114:        S DY=IOTM+Y-2,DX=X-1 X IOXY
                    115:        Q
                    116:        ;
                    117: POS(R,C,F)     ;Pos cursor based on char pos C
                    118:        N DDWX
                    119:        S:$G(C)="E" C=$L($G(DDWL(R)))+1
                    120:        S:$G(F)["N" DDWN=$G(DDWL(R))
                    121:        S:$G(F)["R" DDWRW=R,DDWC=C
                    122:        ;
                    123:        S DDWX=C-DDWOFS
                    124:        I DDWX>IOM!(DDWX<1) D SHIFT^DDW3(C,.DDWOFS)
                    125:        S DY=IOTM+R-2,DX=C-DDWOFS-1 X IOXY
                    126:        Q
                    127:        ;
                    128: ISINSEL()      ;Is the cursor within the selected text
                    129:        N DDWI,DDWY
                    130:        S DDWI=DDWRW+DDWA,DDWY=0
                    131:        I DDWI<$P(DDWMARK,U)
                    132:        E  I DDWI>$P(DDWMARK,U,3)
                    133:        E  I DDWI=$P(DDWMARK,U),DDWC<$P(DDWMARK,U,2)
                    134:        E  I DDWI=$P(DDWMARK,U,3),DDWC-1>$P(DDWMARK,U,4)
                    135:        E  S DDWY=1
                    136:        Q DDWY
                    137:        ;
                    138: PMARK(M,R1,C1,R2,C2)   ;Parse M (DDWMARK)
                    139:        S R1=$P(M,U),C1=$P(M,U,2)
                    140:        S R2=$P(M,U,3),C2=$P(M,U,4)
                    141:        Q
                    142:        ;
                    143: ERR(DDWX)      ;
                    144:        D MSG^DDW($C(7)_DDWX) H 2 D MSG^DDW()
                    145:        D CUP(DDWRW,DDWC-DDWOFS)
                    146:        F  R *DDWX:0 E  Q
                    147:        Q
                    148:        ;
                    149: TR(X)  ;Strip trailing blanks
                    150:        Q:$G(X)="" X
                    151:        N I
                    152:        F I=$L(X):-1:0 Q:$E(X,I)'=" "
                    153:        Q $E(X,1,I)
                    154:        ;
                    155: LD(X)  ;Strip leading blanks
                    156:        Q:$G(X)="" X
                    157:        N I
                    158:        F I=1:1:$L(X)+1 Q:$E(X,I)'=" "
                    159:        Q $E(X,I,999)
                    160:        ;
                    161: RTOSTB(R)      ;Return node in STB given line #
                    162:        Q DDWSTB+DDWA+DDWMR+1-R
                    163:        ;
                    164: SCR(C) ;Return screen number
                    165:        Q C-$P(DDWOFS,U,2)-1\$P(DDWOFS,U,3)+1
                    166:        ;
                    167: MIN(X,Y)       ;
                    168:        Q $S(X<Y:X,1:Y)
                    169:        ;
                    170: MAX(X,Y)       ;
                    171:        Q $S(X>Y:X,1:Y)

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