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>