annotate 3rdparty/packages/uemacs/uerandom2.c @ 2852:f2e92661b4c6 lwtools-port

Makefiles: Always use macro for lwar and rm The LWAR macro is new, rm was still used in one place.
author Tormod Volden <debian.tormod@gmail.com>
date Fri, 12 Jul 2013 22:41:18 +0200
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 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
10 * Insert a newline, then enough tabs and spaces to duplicate the indentation
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
11 * of the previous line. Assumes tabs are every eight characters. Quite simple.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
12 * Figure out the indentation of the current line. Insert a newline by calling
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
13 * the standard routine. Insert the indentation by inserting the right number
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
14 * of tabs and spaces. Return TRUE if all ok. Return FALSE if one of the
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
15 * subcomands failed. Normally bound to "C-J".
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
16 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
17 indent(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
18 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
19 register int nicol;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
20 register int c;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
21 register int i;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
22
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
23 if (n < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
24 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
25 while (n--) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
26 nicol = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
27 for (i=0; i<llength(curwp->w_dotp); ++i) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
28 c = lgetc(curwp->w_dotp, i);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
29 if (c!=' ' && c!='\t')
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
30 break;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
31 if (c == '\t')
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
32 nicol |= 0x07;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
33 ++nicol;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
34 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
35 if (lnewline() == FALSE
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
36 || ((i=nicol/8)!=0 && linsert(i, '\t')==FALSE)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
37 || ((i=nicol%8)!=0 && linsert(i, ' ')==FALSE))
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
38 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
39 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
40 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
41 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
42
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
43 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
44 * Delete forward. This is real easy, because the basic delete routine does
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
45 * all of the work. Watches for negative arguments, and does the right thing.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
46 * If any argument is present, it kills rather than deletes, to prevent loss
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
47 * of text if typed with a big arg
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
48 ument. Normally bound to "C-D".
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
49 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
50 forwdel(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
51 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
52 if (n < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
53 return (backdel(f, -n));
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
54
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
55 if (f != FALSE) { /* Really a kill. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
56 if ((lastflag&CFKILL) == 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
57 kdelete();
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
58 thisflag |= CFKILL;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
59 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
60 return (ldelete(n, f));
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
61 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
62
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
63 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
64 * Delete backwards. This is quite easy too, because it's all done with other
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
65 * functions. Just move the cursor back, and delete forwards. Like delete
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
66 * forward, this actually does a kill if presented with an argument. Bound to
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
67 * both "RUBOUT" and "C-H".
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
68 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
69 backdel(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
70 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
71 register int s;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
72
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
73 if (n < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
74 return (forwdel(f, -n));
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
75 if (f != FALSE) { /* Really a kill. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
76 if ((lastflag&CFKILL) == 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
77 kdelete();
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
78 thisflag |= CFKILL;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
79 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
80 if ((s=backchar(f, n)) == TRUE)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
81 s = ldelete(n, f);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
82 return (s);
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 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
86 * Kill text. If called without an argument, it kills from dot to the end of
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
87 * the line, unless it is at the end of the line, when it kills the newline.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
88 * If called with an argument of 0, it kills from the start of the line to dot.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
89 * If called with a positive argument, it kills from dot forward over that
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
90 * number of newlines. If called with a negative argument it kills backwards
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
91 * that number of newlines. Normally bound to "C-K".
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
92 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
93 killer(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
94 int f,n;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
95 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
96 register int chunk;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
97 register LINE *nextp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
98
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
99 if ((lastflag&CFKILL) == 0) /* Clear kill buffer if */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
100 kdelete(); /* last wasn't a kill. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
101 thisflag |= CFKILL;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
102 if (f == FALSE) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
103 chunk = llength(curwp->w_dotp)-curwp->w_doto;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
104 if (chunk == 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
105 chunk = 1;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
106 } else if (n == 0) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
107 chunk = curwp->w_doto;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
108 curwp->w_doto = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
109 } else if (n > 0) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
110 chunk = llength(curwp->w_dotp)-curwp->w_doto+1;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
111 nextp = lforw(curwp->w_dotp);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
112 while (--n) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
113 if (nextp == curbp->b_linep)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
114 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
115 chunk += llength(nextp)+1;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
116 nextp = lforw(nextp);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
117 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
118 } else {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
119 mlwrite("neg kill");
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
120 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
121 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
122 return (ldelete(chunk, TRUE));
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
123 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
124
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
125 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
126 * Yank text back from the kill buffer. This is really easy. All of the work
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
127 * is done by the standard insert routines. All you do is run the loop, and
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
128 * check for errors. Bound to "C-Y". The blank lines are inserted with a call
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
129 * to "newline" instead of a call to "lnewline" so that the magic stuff that
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
130 * happens when you type a carriage return also happens when a carriage return
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
131 * is yanked back from the kill buffer.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
132 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
133 yank(f, n)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
134 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
135 register int c;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
136 register int i;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
137 extern int kused;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
138
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
139 if (n < 0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
140 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
141 while (n--) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
142 i = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
143 while ((c=kremove(i)) >= 0) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
144 if (c == '\n') {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
145 if (newline(FALSE, 1) == FALSE)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
146 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
147 } else {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
148 if (linsert(1, c) == FALSE)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
149 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
150 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
151 ++i;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
152 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
153 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
154 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
155 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
156