annotate 3rdparty/packages/uemacs/uerandom1.c @ 1371:1ed7c47503e8

More changes
author boisy
date Fri, 26 Sep 2003 14:59:09 +0000
parents 48c646212b1c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
995
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
1 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
2 * This file contains the command processing functions for a number of random
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
3 * commands. There is no functional grouping here, for sure.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
4 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
5
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
6 #include <stdio.h>
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
7 #include "ueed.h"
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
8
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
9 int tabsize; /* Tab size (0: use real tabs) */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
10
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
11 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
12 * Set fill column to n.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
13 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
14 setfillcol(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
15 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
16 fillcol = n;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
17 return(TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
18 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
19
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
20 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
21 * Display the current position of the cursor, in origin 1 X-Y coordinates,
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
22 * the character that is under the cursor (in hex), and the fraction of the
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
23 * text that is before the cursor. The displayed column is not the current
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
24 * column, but the column that would be used on an infinite width display.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
25 * Normally this is bound to "C-X =".
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
26 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
27 showcpos(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
28 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
29 register LINE *clp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
30 register long nch;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
31 register long nbc;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
32 register int cac;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
33 register int ratio;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
34 register int col;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
35 register int i;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
36 register int c;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
37 register int nl;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
38 register int cl;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
39 #ifdef OSK
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
40 char mline[80];
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
41 #endif
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
42
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
43 clp = lforw(curbp->b_linep); /* Grovel the data. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
44 nch = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
45 nl = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
46 while (clp != curbp->b_linep) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
47 if (clp == curwp->w_dotp) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
48 nbc = nch + curwp->w_doto;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
49 cac = (curwp->w_doto < llength(clp))
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
50 ? lgetc(clp, curwp->w_doto)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
51 : '\n';
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
52 cl = nl;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
53 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
54 nch += llength(clp)+1;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
55
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
56 clp = lforw(clp);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
57 nl++;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
58 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
59 if (clp == curwp->w_dotp) { /* special case for end of buffer */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
60 nbc = nch;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
61 cac = '\n';
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
62 cl = nl;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
63 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
64 col = getccol(FALSE); /* Get real column. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
65 ratio = 0; /* Ratio before dot. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
66 if (nch != 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
67 ratio = (100L*nbc) / nch;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
68 #ifdef OSK
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
69 /* osk objects to this varargs technique with more than 2 arguments */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
70 /* while I was changing things I made it display more info */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
71 sprintf(mline,
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
72 "X=%d Y=%d CH=0x%02X (%s%c) Line %d of %d; Char %ld of %ld (%d%%%%)",
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
73 col+1, currow+1, cac, (cac<' ')?"^":"", (cac<' ')?cac+'@':cac,
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
74 cl, nl, nbc, nch, ratio);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
75 mlwrite(mline);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
76 #else
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
77 /* note nl (number of lines) and cl (current line) arn't yet displayed */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
78 mlwrite("X=%d Y=%d CH=0x%x .=%D (%d%% of %D)",
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
79 col+1, currow+1, cac, nbc, ratio, nch);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
80 #endif
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
81 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
82 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
83
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
84 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
85 * Return current column. Stop at first non-blank given TRUE argument.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
86 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
87 getccol(bflg)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
88 int bflg;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
89 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
90 register int c, i, col;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
91 col = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
92 for (i=0; i<curwp->w_doto; ++i) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
93 c = lgetc(curwp->w_dotp, i);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
94 if (c!=' ' && c!='\t' && bflg)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
95 break;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
96 if (c == '\t')
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
97 col |= 0x07;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
98 else if (c<0x20 || c==0x7F)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
99 ++col;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
100 ++col;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
101 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
102 return(col);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
103 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
104
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
105 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
106 * Twiddle the two characters on either side of dot. If dot is at the end of
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
107 * the line twiddle the two characters before it. Return with an error if dot
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
108 * is at the beginning of line; it seems to be a bit pointless to make this
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
109 * work. This fixes up a very common typo with a single stroke. Normally bound
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
110 * to "C-T". This always works within a line, so "WFEDIT" is good enough.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
111 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
112 twiddle(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
113 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
114 register LINE *dotp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
115 register int doto;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
116 register int cl;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
117 register int cr;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
118
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
119 dotp = curwp->w_dotp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
120 doto = curwp->w_doto;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
121 if (doto==llength(dotp) && --doto<0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
122 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
123 cr = lgetc(dotp, doto);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
124 if (--doto < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
125 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
126 cl = lgetc(dotp, doto);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
127 lputc(dotp, doto+0, cr);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
128 lputc(dotp, doto+1, cl);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
129 lchange(WFEDIT);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
130 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
131 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
132
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
133 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
134 * Quote the next character, and insert it into the buffer. All the characters
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
135 * are taken literally, with the exception of the newline, which always has
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
136 * its line splitting meaning. The character is always read, even if it is
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
137 * inserted 0 times, for regularity. Bound to "M-Q" (for me) and "C-Q" (for
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
138 * Rich, and only on terminals that don't need XON-XOFF).
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
139 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
140 quote(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
141 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
142 register int s;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
143 register int c;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
144
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
145 c = (*term.t_getchar)();
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
146 if (n < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
147 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
148 if (n == 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
149 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
150 if (c == '\n') {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
151 do {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
152 s = lnewline();
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
153 } while (s==TRUE && --n);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
154 return (s);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
155 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
156 return (linsert(n, c));
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
157 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
158
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
159 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
160 * Set tab size if given non-default argument (n <> 1). Otherwise, insert a
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
161 * tab into file. If given argument, n, of zero, change to true tabs.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
162 * If n > 1, simulate tab stop every n-characters using spaces. This has to be
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
163 * done in this slightly funny way because the tab (in ASCII) has been turned
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
164 * into "C-I" (in 10 bit code) already. Bound to "C-I".
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
165 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
166 tab(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
167 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
168 if (n < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
169 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
170 if (n == 0 || n > 1) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
171 tabsize = n;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
172 return(TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
173 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
174 if (! tabsize)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
175 return(linsert(1, '\t'));
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
176 return(linsert(tabsize - (getccol(FALSE) % tabsize), ' '));
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
177 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
178
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
179 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
180 * Open up some blank space. The basic plan is to insert a bunch of newlines,
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
181 * and then back up over them. Everything is done by the subcommand
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
182 * procerssors. They even handle the looping. Normally this is bound to "C-O".
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
183 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
184 openline(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
185 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
186 register int i;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
187 register int s;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
188
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
189 if (n < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
190 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
191 if (n == 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
192 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
193 i = n; /* Insert newlines. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
194 do {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
195 s = lnewline();
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
196 } while (s==TRUE && --i);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
197 if (s == TRUE) /* Then back up overtop */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
198 s = backchar(f, n); /* of them all. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
199 return (s);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
200 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
201
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
202 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
203 * Insert a newline. Bound to "C-M". If you are at the end of the line and the
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
204 * next line is a blank line, just move into the blank line. This makes "C-O"
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
205 * and "C-X C-O" work nicely, and reduces the ammount of screen update that
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
206 * has to be done. This would not be as critical if screen update were a lot
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
207 * more efficient.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
208 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
209 newline(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
210 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
211 int nicol;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
212 register LINE *lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
213 register int s;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
214
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
215 if (n < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
216
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
217 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
218 while (n--) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
219 lp = curwp->w_dotp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
220 if (llength(lp) == curwp->w_doto
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
221 && lp != curbp->b_linep
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
222 && llength(lforw(lp)) == 0) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
223 if ((s=forwchar(FALSE, 1)) != TRUE)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
224 return (s);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
225 } else if ((s=lnewline()) != TRUE)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
226 return (s);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
227 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
228 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
229 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
230
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
231 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
232 * Delete blank lines around dot. What this command does depends if dot is
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
233 * sitting on a blank line. If dot is sitting on a blank line, this command
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
234 * deletes all the blank lines above and below the current line. If it is
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
235 * sitting on a non blank line then it deletes all of the blank lines after
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
236 * the line. Normally this command is bound to "C-X C-O". Any argument is
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
237 * ignored.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
238 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
239 deblank(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
240 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
241 register LINE *lp1;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
242 register LINE *lp2;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
243 register int nld;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
244
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
245 lp1 = curwp->w_dotp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
246 while (llength(lp1)==0 && (lp2=lback(lp1))!=curbp->b_linep)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
247 lp1 = lp2;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
248 lp2 = lp1;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
249 nld = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
250 while ((lp2=lforw(lp2))!=curbp->b_linep && llength(lp2)==0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
251 ++nld;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
252 if (nld == 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
253 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
254 curwp->w_dotp = lforw(lp1);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
255 curwp->w_doto = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
256 return (ldelete(nld));
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
257 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
258
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
259