Mercurial > heirloom-ed
annotate ed.c @ 4:4165f1b57d18 default tip
Become SUSv3 compatible and thus remove own regexp code
The Heirloom tools can be compiled to comply to several standards.
This version does not need this flexibility. We can omit the
regexp code and use the system's, by using the SU3 variant of ed.
This is the latest of the supported standards.
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Mon, 13 Apr 2015 17:26:51 +0200 |
parents | ac52712b2b5e |
children |
rev | line source |
---|---|
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1 /* |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2 * Editor |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
3 */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
4 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
5 /* |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
6 * Changes by Gunnar Ritter, Freiburg i. Br., Germany, July 2003. |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
7 */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
8 /* from Unix 32V /usr/src/cmd/ed.c */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
9 /* |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
10 * Copyright(C) Caldera International Inc. 2001-2002. All rights reserved. |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
11 * |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
12 * Redistribution and use in source and binary forms, with or without |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
13 * modification, are permitted provided that the following conditions |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
14 * are met: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
15 * Redistributions of source code and documentation must retain the |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
16 * above copyright notice, this list of conditions and the following |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
17 * disclaimer. |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
18 * Redistributions in binary form must reproduce the above copyright |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
19 * notice, this list of conditions and the following disclaimer in the |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
20 * documentation and/or other materials provided with the distribution. |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
21 * All advertising materials mentioning features or use of this software |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
22 * must display the following acknowledgement: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
23 * This product includes software developed or owned by Caldera |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
24 * International, Inc. |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
25 * Neither the name of Caldera International, Inc. nor the names of |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
26 * other contributors may be used to endorse or promote products |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
27 * derived from this software without specific prior written permission. |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
28 * |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
29 * USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
30 * INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
31 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
32 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
33 * ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
34 * LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
35 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
36 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
37 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
38 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
39 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
40 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
41 */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
42 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
43 #if __GNUC__ >= 3 && __GNUC_MINOR__ >= 4 || __GNUC__ >= 4 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
44 #define USED __attribute__ ((used)) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
45 #elif defined __GNUC__ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
46 #define USED __attribute__ ((unused)) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
47 #else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
48 #define USED |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
49 #endif |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
50 static const char sccsid[] USED = "@(#)ed_su3.sl 1.99 (gritter) 7/27/06"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
51 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
52 #include <sys/types.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
53 #include <sys/stat.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
54 #include <sys/wait.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
55 #include <sys/stat.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
56 #include <fcntl.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
57 #include <unistd.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
58 #include <time.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
59 #include <string.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
60 #include <stdlib.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
61 #include <signal.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
62 #include "sigset.h" |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
63 #include <setjmp.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
64 #include <libgen.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
65 #include <inttypes.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
66 #include <locale.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
67 #include <wchar.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
68 #include <ctype.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
69 #include <wctype.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
70 #include <limits.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
71 static int FNSIZE; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
72 static int LBSIZE; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
73 static int RHSIZE; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
74 #define ESIZE 2048 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
75 static int GBSIZE; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
76 #undef EOF |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
77 #define EOF -1 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
78 #define puts(s) xxputs(s) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
79 #define getline(t, n) xxgetline(t, n) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
80 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
81 #if (LONG_MAX > 017777777777L) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
82 #define MAXCNT 0777777777777777777777L /* 2^63-1 */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
83 #else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
84 #define MAXCNT 017777777777L /* 2^31-1 */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
85 #endif |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
86 #define BLKMSK (MAXCNT>>8) /* was 0377 */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
87 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
88 #define READ 0 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
89 #define WRITE 1 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
90 #define EXIST 2 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
91 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
92 static int peekc; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
93 static int lastc; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
94 static char *savedfile; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
95 static char *file; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
96 static struct stat fstbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
97 static char *linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
98 static char *rhsbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
99 static char expbuf[ESIZE + 4]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
100 static long *zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
101 static long *undzero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
102 static long *dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
103 static long *unddot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
104 static long *dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
105 static long *unddol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
106 static long *addr1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
107 static long *addr2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
108 static char *genbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
109 static long count; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
110 static char *linebp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
111 static int ninbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
112 static int io; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
113 static int ioeof; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
114 static int pflag; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
115 static char *wrtemp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
116 static uid_t myuid; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
117 static void (*oldhup)(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
118 static void (*oldquit)(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
119 static void (*oldpipe)(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
120 static int vflag = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
121 static int listf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
122 static int numbf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
123 static char *globp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
124 static int tfile = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
125 static long tline; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
126 static char tfname[64]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
127 static char ibuff[512]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
128 static int iblock = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
129 static char obuff[512]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
130 static int oblock = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
131 static int ichanged; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
132 static int nleft; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
133 static long *names; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
134 static long *undnames; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
135 static int anymarks; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
136 static int subnewa; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
137 static int fchange; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
138 static int wrapp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
139 static unsigned nlall = 128; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
140 static const char *progname; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
141 static const char *prompt = "*"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
142 static int Pflag; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
143 static int prhelp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
144 static const char *prvmsg; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
145 static int lastsig; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
146 static int pipid = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
147 static int readop; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
148 static int status; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
149 static int mb_cur_max; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
150 static int needsub; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
151 static int insub; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
152 static int maxlength; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
153 static int rspec; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
154 static int Nflag; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
155 static int bcount = 22; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
156 static int ocount = 11; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
157 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
158 static jmp_buf savej; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
159 |
2
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
160 static void usage(char); |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
161 static void commands(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
162 static long *address(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
163 static void setdot(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
164 static void setall(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
165 static void setnoaddr(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
166 static void nonzero(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
167 static void newline(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
168 static void filename(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
169 static void exfile(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
170 static void onintr(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
171 static void onhup(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
172 static void onpipe(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
173 static void error(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
174 static void error2(const char *, const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
175 static void errput(const char *, const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
176 static int getchr(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
177 static int gettty(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
178 static long getnum(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
179 static int getfile(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
180 static void putfile(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
181 static int append(int (*)(void), long *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
182 static void callunix(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
183 static char *readcmd(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
184 static void quit(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
185 static void delete(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
186 static void rdelete(long *, long *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
187 static void gdelete(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
188 static char *getline(long, int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
189 static int putline(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
190 static char *getblock(long, long); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
191 static void blkio(long, char *, int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
192 static void init(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
193 static void global(int, int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
194 static void globrd(char **, int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
195 static void join(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
196 static void substitute(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
197 static int compsub(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
198 static int getsub(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
199 static int dosub(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
200 static int place(int, const char *, const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
201 static void move(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
202 static void reverse(long *, long *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
203 static int getcopy(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
204 static int execute(int, long *, int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
205 static void cmplerr(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
206 static void doprnt(long *, long *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
207 static void putd(long); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
208 static void puts(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
209 static void nlputs(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
210 static void list(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
211 static int lstchr(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
212 static void putstr(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
213 static void putchr(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
214 static void checkpoint(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
215 static void undo(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
216 static int maketf(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
217 static int creatf(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
218 static int sopen(const char *, int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
219 static void sclose(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
220 static void growlb(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
221 static void growrhs(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
222 static void growfn(const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
223 static void help(void); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
224 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
225 #define INIT |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
226 #define GETC() getchr() |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
227 #define UNGETC(c) (peekc = c) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
228 #define PEEKC() (peekc = getchr()) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
229 #define RETURN(c) return c |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
230 #define ERROR(c) cmplerr(c) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
231 static wint_t GETWC(char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
232 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
233 #include <regex.h> |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
234 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
235 #define NBRA 9 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
236 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
237 static char *braslist[NBRA]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
238 static char *braelist[NBRA]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
239 static char *loc1, *loc2, *locs; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
240 static int nbra; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
241 static int circf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
242 static int nodelim; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
243 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
244 static char *compile(char *, char *, const char *, int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
245 static int step(const char *, const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
246 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
247 int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
248 main(int argc, char **argv) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
249 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
250 register int i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
251 void (*oldintr)(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
252 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
253 progname = basename(argv[0]); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
254 setlocale(LC_COLLATE, ""); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
255 setlocale(LC_CTYPE, ""); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
256 mb_cur_max = MB_CUR_MAX; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
257 myuid = getuid(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
258 oldquit = sigset(SIGQUIT, SIG_IGN); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
259 oldhup = sigset(SIGHUP, SIG_IGN); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
260 oldintr = sigset(SIGINT, SIG_IGN); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
261 if (sigset(SIGTERM, SIG_IGN) != SIG_IGN) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
262 sigset(SIGTERM, quit); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
263 oldpipe = sigset(SIGPIPE, onpipe); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
264 argv++; |
2
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
265 if (argc > 1 && **argv=='-') { |
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
266 if ((*argv)[1]=='\0') { |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
267 vflag = 0; |
2
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
268 } else { |
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
269 usage((*argv)[1]); |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
270 } |
2
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
271 argv++; |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
272 argc--; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
273 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
274 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
275 growfn("no space"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
276 if (argc>1) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
277 i = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
278 do |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
279 if (++i >= FNSIZE) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
280 growfn("maximum of characters in " |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
281 "file names reached"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
282 while (savedfile[i] = (*argv)[i]); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
283 globp = "e"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
284 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
285 names = malloc(26*sizeof *names); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
286 undnames = malloc(26*sizeof *undnames); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
287 zero = malloc(nlall*sizeof *zero); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
288 if ((undzero = malloc(nlall*sizeof *undzero)) == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
289 puts("no memory for undo"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
290 growlb("no space"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
291 growrhs("no space"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
292 init(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
293 if (oldintr != SIG_IGN) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
294 sigset(SIGINT, onintr); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
295 if (oldhup != SIG_IGN) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
296 sigset(SIGHUP, onhup); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
297 setjmp(savej); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
298 if (lastsig) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
299 sigrelse(lastsig); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
300 lastsig = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
301 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
302 commands(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
303 quit(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
304 /*NOTREACHED*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
305 return 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
306 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
307 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
308 static void |
2
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
309 usage(char c) |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
310 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
311 if (c) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
312 write(2, progname, strlen(progname)); |
2
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
313 write(2, ": illegal option -- ", 20); |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
314 write(2, &c, 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
315 write(2, "\n", 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
316 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
317 write(2, "usage: ", 7); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
318 write(2, progname, strlen(progname)); |
2
a09d0630f05b
removed unnecessary command line options
markus schnalke <meillo@marmaro.de>
parents:
0
diff
changeset
|
319 write(2, " [-] [file]\n", 12); |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
320 exit(2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
321 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
322 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
323 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
324 commands(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
325 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
326 register long *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
327 register int c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
328 int n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
329 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
330 for (;;) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
331 if (pflag) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
332 pflag = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
333 addr1 = addr2 = dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
334 goto print; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
335 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
336 if (Pflag && globp == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
337 write(1, prompt, strlen(prompt)); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
338 addr1 = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
339 addr2 = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
340 switch (c = getchr()) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
341 case ',': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
342 case ';': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
343 addr2 = c == ',' ? zero+1 : dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
344 if (((peekc = getchr()) < '0' || peekc > '9') && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
345 peekc != ' ' && peekc != '\t' && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
346 peekc != '+' && peekc != '-' && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
347 peekc != '^' && peekc != '?' && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
348 peekc != '/' && peekc != '$' && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
349 peekc != '.' && peekc != '\'') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
350 addr1 = addr2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
351 a1 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
352 goto loop; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
353 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
354 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
355 default: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
356 peekc = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
357 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
358 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
359 addr1 = addr2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
360 if ((a1 = address())==0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
361 c = getchr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
362 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
363 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
364 loop: addr2 = a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
365 if ((c=getchr()) == ';') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
366 c = ','; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
367 dot = a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
368 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
369 } while (c==','); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
370 if (addr1==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
371 addr1 = addr2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
372 switch(c) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
373 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
374 case 'a': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
375 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
376 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
377 checkpoint(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
378 append(gettty, addr2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
379 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
380 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
381 case 'c': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
382 if (addr1 == zero && addr1+1 <= dol) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
383 if (addr1 == addr2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
384 addr2++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
385 addr1++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
386 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
387 delete(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
388 append(gettty, addr1-1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
389 if (dot == addr1-1 && addr1 <= dol) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
390 dot = addr1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
391 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
392 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
393 case 'd': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
394 delete(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
395 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
396 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
397 case 'E': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
398 fchange = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
399 c = 'e'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
400 case 'e': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
401 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
402 if (vflag && fchange) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
403 fchange = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
404 error("warning: expecting `w'"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
405 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
406 filename(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
407 init(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
408 addr2 = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
409 goto caseread; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
410 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
411 case 'f': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
412 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
413 filename(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
414 puts(savedfile); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
415 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
416 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
417 case 'g': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
418 global(1, 0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
419 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
420 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
421 case 'G': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
422 global(1, 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
423 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
424 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
425 case 'H': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
426 prhelp = !prhelp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
427 /*FALLTHRU*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
428 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
429 case 'h': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
430 if ((peekc = getchr()) == 'e') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
431 peekc = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
432 if (getchr() != 'l' || getchr() != 'p' || |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
433 getchr() != '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
434 error("illegal suffix"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
435 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
436 help(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
437 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
438 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
439 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
440 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
441 if (prvmsg) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
442 puts(prvmsg); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
443 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
444 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
445 case 'i': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
446 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
447 if (addr1 == zero) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
448 if (addr1 == addr2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
449 addr2++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
450 addr1++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
451 if (dol != zero) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
452 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
453 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
454 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
455 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
456 checkpoint(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
457 append(gettty, addr2-1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
458 if (dot == addr2-1) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
459 dot++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
460 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
461 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
462 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
463 case 'j': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
464 if (addr2==0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
465 addr1 = dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
466 addr2 = dot+1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
467 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
468 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
469 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
470 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
471 checkpoint(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
472 if (addr1 != addr2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
473 join(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
474 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
475 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
476 case 'k': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
477 if ((c = getchr()) < 'a' || c > 'z') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
478 error("mark not lower case"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
479 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
480 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
481 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
482 names[c-'a'] = *addr2 & ~01; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
483 anymarks |= 01; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
484 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
485 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
486 case 'm': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
487 move(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
488 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
489 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
490 case '\n': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
491 if (addr2==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
492 addr2 = dot+1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
493 addr1 = addr2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
494 goto print; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
495 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
496 case 'n': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
497 numbf = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
498 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
499 goto print; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
500 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
501 case 'N': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
502 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
503 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
504 Nflag = !Nflag; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
505 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
506 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
507 case 'b': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
508 case 'o': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
509 n = getnum(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
510 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
511 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
512 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
513 if (n >= 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
514 if (c == 'b') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
515 bcount = n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
516 else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
517 ocount = n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
518 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
519 if (c == 'b') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
520 a1 = addr2+bcount > dol ? dol : addr2 + bcount; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
521 doprnt(addr1, a1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
522 dot = a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
523 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
524 a1 = addr2+ocount > dol ? dol : addr2 + ocount; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
525 doprnt(addr2-ocount<zero+1?zero+1:addr2-ocount, a1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
526 dot = addr2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
527 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
528 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
529 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
530 case 'l': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
531 listf++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
532 case 'p': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
533 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
534 print: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
535 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
536 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
537 doprnt(addr1, addr2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
538 dot = addr2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
539 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
540 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
541 case 'P': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
542 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
543 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
544 Pflag = !Pflag; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
545 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
546 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
547 case 'Q': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
548 fchange = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
549 case 'q': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
550 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
551 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
552 quit(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
553 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
554 case 'r': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
555 filename(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
556 caseread: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
557 if ((io = sopen(file, READ)) < 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
558 lastc = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
559 error2("cannot open input file", file); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
560 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
561 ioeof = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
562 setall(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
563 ninbuf = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
564 if (c == 'r') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
565 checkpoint(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
566 n = zero != dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
567 rspec = (c == 'e' || !n) && file[0] != '!'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
568 append(getfile, addr2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
569 rspec = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
570 exfile(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
571 fchange = n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
572 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
573 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
574 case 's': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
575 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
576 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
577 substitute(globp!=0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
578 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
579 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
580 case 't': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
581 move(1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
582 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
583 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
584 case 'u': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
585 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
586 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
587 if (unddot == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
588 error("nothing to undo"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
589 undo(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
590 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
591 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
592 case 'v': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
593 global(0, 0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
594 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
595 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
596 case 'V': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
597 global(0, 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
598 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
599 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
600 case 'W': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
601 wrapp++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
602 case 'w': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
603 write: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
604 setall(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
605 if (zero != dol) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
606 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
607 filename(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
608 if(!wrapp || |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
609 ((io = open(file,O_WRONLY|O_APPEND)) == -1) || |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
610 ((lseek(io, 0, SEEK_END)) == -1)) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
611 struct stat st; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
612 if (lstat(file, &st) == 0 && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
613 (st.st_mode&S_IFMT) == S_IFREG && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
614 st.st_nlink == 1 && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
615 (myuid==0 || myuid==st.st_uid)) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
616 char *cp, *tp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
617 int nio; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
618 if ((io = sopen(file, EXIST)) < 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
619 error("cannot create output file"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
620 if ((wrtemp = malloc(strlen(file)+8)) == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
621 error("out of memory"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
622 for (cp = file, tp = wrtemp; *cp; cp++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
623 *tp++ = *cp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
624 while (tp > wrtemp && tp[-1] != '/') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
625 tp--; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
626 for (cp = "\7XXXXXX"; *cp; cp++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
627 *tp++ = *cp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
628 *tp = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
629 if ((nio = mkstemp(wrtemp)) < 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
630 free(wrtemp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
631 wrtemp = NULL; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
632 ftruncate(io, 0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
633 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
634 close(io); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
635 io = nio; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
636 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
637 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
638 if ((io = sopen(file, WRITE)) < 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
639 error("cannot create output file"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
640 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
641 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
642 if (zero != dol) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
643 ioeof = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
644 wrapp = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
645 putfile(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
646 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
647 exfile(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
648 if (addr1==zero+1 && addr2==dol || addr1==addr2 && dol==zero) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
649 fchange = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
650 if (c == 'z') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
651 quit(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
652 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
653 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
654 case 'z': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
655 if ((peekc=getchr()) != '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
656 error("illegal suffix"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
657 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
658 goto write; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
659 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
660 case '=': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
661 setall(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
662 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
663 putd((addr2-zero)&MAXCNT); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
664 putchr('\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
665 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
666 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
667 case '!': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
668 callunix(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
669 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
670 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
671 case EOF: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
672 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
673 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
674 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
675 error("unknown command"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
676 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
677 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
678 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
679 static long * |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
680 address(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
681 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
682 register long *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
683 register int minus, c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
684 int n, relerr; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
685 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
686 minus = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
687 a1 = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
688 for (;;) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
689 c = getchr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
690 if ('0'<=c && c<='9') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
691 n = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
692 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
693 n *= 10; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
694 n += c - '0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
695 } while ((c = getchr())>='0' && c<='9'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
696 peekc = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
697 if (a1==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
698 a1 = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
699 if (minus<0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
700 n = -n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
701 a1 += n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
702 minus = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
703 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
704 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
705 relerr = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
706 if (a1 || minus) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
707 relerr++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
708 switch(c) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
709 case ' ': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
710 case '\t': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
711 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
712 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
713 case '+': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
714 minus++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
715 if (a1==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
716 a1 = dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
717 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
718 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
719 case '-': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
720 case '^': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
721 minus--; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
722 if (a1==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
723 a1 = dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
724 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
725 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
726 case '?': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
727 case '/': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
728 compile(NULL, expbuf, &expbuf[ESIZE], c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
729 a1 = dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
730 for (;;) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
731 if (c=='/') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
732 a1++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
733 if (a1 > dol) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
734 a1 = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
735 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
736 a1--; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
737 if (a1 < zero) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
738 a1 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
739 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
740 if (execute(0, a1, 0)) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
741 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
742 if (a1==dot) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
743 error("search string not found"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
744 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
745 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
746 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
747 case '$': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
748 a1 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
749 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
750 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
751 case '.': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
752 a1 = dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
753 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
754 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
755 case '\'': |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
756 if ((c = getchr()) < 'a' || c > 'z') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
757 error("mark not lower case"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
758 for (a1=zero; a1<=dol; a1++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
759 if (names[c-'a'] == (*a1 & ~01)) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
760 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
761 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
762 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
763 default: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
764 peekc = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
765 if (a1==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
766 return(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
767 a1 += minus; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
768 if (a1<zero || a1>dol) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
769 error("line out of range"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
770 return(a1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
771 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
772 if (relerr) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
773 error("bad number"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
774 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
775 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
776 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
777 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
778 setdot(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
779 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
780 if (addr2 == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
781 addr1 = addr2 = dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
782 if (addr1 > addr2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
783 error("bad range"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
784 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
785 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
786 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
787 setall(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
788 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
789 if (addr2==0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
790 addr1 = zero+1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
791 addr2 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
792 if (dol==zero) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
793 addr1 = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
794 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
795 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
796 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
797 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
798 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
799 setnoaddr(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
800 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
801 if (addr2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
802 error("Illegal address count"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
803 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
804 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
805 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
806 nonzero(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
807 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
808 if (addr1<=zero || addr2>dol) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
809 error("line out of range"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
810 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
811 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
812 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
813 newline(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
814 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
815 register int c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
816 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
817 if ((c = getchr()) == '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
818 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
819 if (c=='p' || c=='l' || c=='n') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
820 pflag++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
821 if (c=='l') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
822 listf++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
823 else if (c=='n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
824 numbf = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
825 if (getchr() == '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
826 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
827 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
828 error("illegal suffix"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
829 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
830 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
831 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
832 filename(int comm) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
833 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
834 register char *p1, *p2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
835 register int c, i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
836 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
837 count = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
838 c = getchr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
839 if (c=='\n' || c==EOF) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
840 p1 = savedfile; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
841 if (*p1==0 && comm!='f') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
842 error("illegal or missing filename"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
843 p2 = file; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
844 while (*p2++ = *p1++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
845 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
846 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
847 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
848 if (c!=' ') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
849 error("no space after command"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
850 while ((c = getchr()) == ' ') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
851 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
852 if (c=='\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
853 error("illegal or missing filename"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
854 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
855 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
856 if (i >= FNSIZE) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
857 growfn("maximum of characters in file names reached"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
858 file[i++] = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
859 if (c==' ' && file[0] != '!' || c==EOF) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
860 error("illegal or missing filename"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
861 } while ((c = getchr()) != '\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
862 file[i++] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
863 if ((savedfile[0]==0 || comm=='e' || comm=='f') && file[0] != '!') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
864 p1 = savedfile; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
865 p2 = file; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
866 while (*p1++ = *p2++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
867 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
868 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
869 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
870 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
871 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
872 exfile(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
873 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
874 sclose(io); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
875 io = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
876 if (wrtemp) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
877 extern int rename(const char *, const char *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
878 if (rename(wrtemp, file) < 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
879 error("cannot create output file"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
880 if (myuid == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
881 chown(file, fstbuf.st_uid, fstbuf.st_gid); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
882 chmod(file, fstbuf.st_mode & 07777); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
883 free(wrtemp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
884 wrtemp = NULL; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
885 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
886 if (vflag) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
887 putd(count); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
888 putchr('\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
889 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
890 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
891 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
892 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
893 onintr(int signo) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
894 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
895 lastsig = signo; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
896 putchr('\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
897 lastc = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
898 if (readop) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
899 puts("\007read may be incomplete - beware!\007"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
900 fchange = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
901 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
902 error("interrupt"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
903 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
904 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
905 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
906 onhup(int signo) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
907 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
908 if (dol > zero && fchange) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
909 addr1 = zero+1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
910 addr2 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
911 io = creat("ed.hup", 0666); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
912 if (io < 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
913 char *home = getenv("HOME"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
914 if (home) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
915 char *fn = malloc(strlen(home) + 10); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
916 if (fn) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
917 strcpy(fn, home); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
918 strcat(fn, "/ed.hup"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
919 io = creat(fn, 0666); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
920 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
921 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
922 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
923 if (io >= 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
924 putfile(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
925 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
926 fchange = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
927 status = 0200 | signo; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
928 quit(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
929 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
930 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
931 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
932 onpipe(int signo) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
933 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
934 lastsig = signo; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
935 error("write or open on pipe failed"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
936 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
937 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
938 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
939 error(const char *s) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
940 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
941 error2(s, NULL); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
942 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
943 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
944 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
945 error2(const char *s, const char *fn) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
946 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
947 register int c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
948 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
949 wrapp = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
950 listf = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
951 numbf = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
952 errput(s, fn); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
953 count = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
954 if (lseek(0, 0, SEEK_END) > 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
955 status = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
956 pflag = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
957 if (globp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
958 lastc = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
959 globp = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
960 peekc = lastc; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
961 if(lastc) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
962 while ((c = getchr()) != '\n' && c != EOF) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
963 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
964 if (io > 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
965 sclose(io); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
966 io = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
967 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
968 if (wrtemp) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
969 unlink(wrtemp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
970 free(wrtemp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
971 wrtemp = NULL; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
972 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
973 longjmp(savej, 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
974 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
975 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
976 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
977 errput(const char *s, const char *fn) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
978 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
979 prvmsg = s; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
980 if (fn) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
981 putchr('?'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
982 puts(fn); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
983 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
984 puts("?"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
985 if (prhelp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
986 puts(s); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
987 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
988 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
989 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
990 getchr(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
991 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
992 char c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
993 if (lastc=peekc) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
994 peekc = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
995 return(lastc); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
996 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
997 if (globp) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
998 if ((lastc = *globp++) != 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
999 return(lastc); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1000 globp = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1001 return(EOF); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1002 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1003 if (read(0, &c, 1) <= 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1004 return(lastc = EOF); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1005 lastc = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1006 return(lastc); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1007 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1008 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1009 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1010 gettty(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1011 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1012 register int c, i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1013 register char *gf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1014 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1015 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1016 gf = globp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1017 while ((c = getchr()) != '\n') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1018 if (c==EOF) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1019 if (gf) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1020 peekc = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1021 return(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1022 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1023 if (c == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1024 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1025 if (i >= LBSIZE) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1026 growlb("line too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1027 linebuf[i++] = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1028 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1029 if (i >= LBSIZE-2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1030 growlb("line too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1031 linebuf[i++] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1032 if (linebuf[0]=='.' && linebuf[1]==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1033 return(EOF); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1034 return(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1035 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1036 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1037 static long |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1038 getnum(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1039 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1040 char scount[20]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1041 int i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1042 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1043 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1044 while ((peekc=getchr()) >= '0' && peekc <= '9' && i < sizeof scount) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1045 scount[i++] = peekc; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1046 peekc = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1047 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1048 scount[i] = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1049 return i ? atol(scount) : -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1050 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1051 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1052 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1053 getfile(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1054 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1055 register int c, i, j; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1056 static int nextj; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1057 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1058 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1059 j = nextj; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1060 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1061 if (--ninbuf < 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1062 if (ioeof || (ninbuf=read(io, genbuf, LBSIZE)-1) < 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1063 if (ioeof == 0 && ninbuf < -1) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1064 puts("input error"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1065 status = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1066 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1067 if (i > 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1068 puts("'\\n' appended"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1069 c = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1070 ioeof = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1071 goto wrc; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1072 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1073 return(EOF); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1074 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1075 j = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1076 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1077 c = genbuf[j++]&0377; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1078 wrc: if (i >= LBSIZE) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1079 lastc = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1080 growlb("line too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1081 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1082 linebuf[i++] = c ? c : '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1083 count++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1084 } while (c != '\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1085 linebuf[--i] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1086 nextj = j; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1087 if (maxlength && i > maxlength) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1088 putstr("line too long: lno = "); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1089 putd((dot - zero+1)&MAXCNT); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1090 putchr('\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1091 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1092 return(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1093 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1094 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1095 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1096 putfile(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1097 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1098 long *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1099 int n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1100 register char *fp, *lp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1101 register int nib; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1102 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1103 nib = 512; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1104 fp = genbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1105 a1 = addr1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1106 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1107 lp = getline(*a1++, 0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1108 if (maxlength) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1109 for (n = 0; lp[n]; n++); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1110 if (n > maxlength) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1111 putstr("line too long: lno = "); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1112 putd((a1-1 - zero)&MAXCNT); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1113 putchr('\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1114 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1115 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1116 for (;;) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1117 if (--nib < 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1118 n = fp-genbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1119 if(write(io, genbuf, n) != n) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1120 error("write error"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1121 nib = 511; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1122 fp = genbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1123 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1124 count++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1125 if ((*fp++ = *lp++) == 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1126 fp[-1] = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1127 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1128 } else if (fp[-1] == '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1129 fp[-1] = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1130 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1131 } while (a1 <= addr2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1132 n = fp-genbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1133 if(write(io, genbuf, n) != n) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1134 error("write error"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1135 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1136 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1137 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1138 append(int (*f)(void), long *a) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1139 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1140 register long *a1, *a2, *rdot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1141 int nline, tl; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1142 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1143 nline = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1144 dot = a; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1145 while ((*f)() == 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1146 if ((dol-zero)+1 >= nlall) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1147 long *ozero = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1148 nlall += 512; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1149 if ((zero = realloc(zero, nlall*sizeof *zero))==NULL) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1150 lastc = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1151 zero = ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1152 error("out of memory for append"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1153 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1154 dot += zero - ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1155 dol += zero - ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1156 addr1 += zero - ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1157 addr2 += zero - ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1158 if (unddot) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1159 unddot += zero - ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1160 unddol += zero - ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1161 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1162 if (undzero) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1163 ozero = undzero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1164 if ((undzero = realloc(undzero, |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1165 nlall*sizeof *undzero)) == 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1166 puts("no memory for undo"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1167 free(ozero); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1168 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1169 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1170 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1171 tl = putline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1172 nline++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1173 a1 = ++dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1174 a2 = a1+1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1175 rdot = ++dot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1176 while (a1 > rdot) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1177 *--a2 = *--a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1178 *rdot = tl; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1179 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1180 return(nline); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1181 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1182 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1183 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1184 callunix(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1185 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1186 char *line; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1187 void (*savint)(int); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1188 pid_t pid, rpid; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1189 int retcode; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1190 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1191 setnoaddr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1192 line = readcmd(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1193 if ((pid = fork()) == 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1194 sigset(SIGHUP, oldhup); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1195 sigset(SIGQUIT, oldquit); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1196 sigset(SIGPIPE, oldpipe); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1197 execl(SHELL, "sh", "-c", line, NULL); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1198 _exit(0100); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1199 } else if (pid < 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1200 error("fork failed - try again"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1201 savint = sigset(SIGINT, SIG_IGN); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1202 while ((rpid = wait(&retcode)) != pid && rpid != -1) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1203 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1204 sigset(SIGINT, savint); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1205 if (vflag) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1206 puts("!"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1207 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1208 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1209 #define cmadd(c) ((i>=cmsize ? \ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1210 ((line=realloc(line,cmsize+=128)) == 0 ? \ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1211 (error("line too long"),0) : 0, 0) \ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1212 : 0), line[i++]=(c)) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1213 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1214 static char * |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1215 readcmd(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1216 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1217 static char *line, *prev; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1218 static int cmsize, pvsize; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1219 char *pp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1220 int c, mod = 0, i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1221 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1222 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1223 if ((c = getchr()) == '!') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1224 for (pp = prev; *pp; pp++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1225 line[i++] = *pp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1226 mod = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1227 c = getchr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1228 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1229 while (c != '\n' && c != EOF) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1230 if (c == '\\') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1231 c = getchr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1232 if (c != '%') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1233 cmadd('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1234 cmadd(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1235 } else if (c == '%') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1236 for (pp = savedfile; *pp; pp++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1237 cmadd(*pp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1238 mod = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1239 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1240 cmadd(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1241 c = getchr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1242 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1243 cmadd('\0'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1244 if (pvsize < cmsize && (prev = realloc(prev, pvsize=cmsize)) == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1245 error("line too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1246 strcpy(prev, line); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1247 if (mod) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1248 nlputs(line); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1249 return line; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1250 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1251 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1252 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1253 quit(int signo) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1254 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1255 lastsig = signo; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1256 if (vflag && fchange) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1257 fchange = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1258 error("warning: expecting `w'"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1259 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1260 if (wrtemp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1261 unlink(wrtemp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1262 unlink(tfname); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1263 exit(status); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1264 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1265 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1266 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1267 delete(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1268 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1269 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1270 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1271 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1272 checkpoint(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1273 rdelete(addr1, addr2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1274 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1275 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1276 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1277 rdelete(long *ad1, long *ad2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1278 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1279 register long *a1, *a2, *a3; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1280 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1281 a1 = ad1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1282 a2 = ad2+1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1283 a3 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1284 dol -= a2 - a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1285 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1286 *a1++ = *a2++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1287 } while (a2 <= a3); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1288 a1 = ad1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1289 if (a1 > dol) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1290 a1 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1291 dot = a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1292 fchange = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1293 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1294 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1295 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1296 gdelete(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1297 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1298 register long *a1, *a2, *a3; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1299 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1300 a3 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1301 for (a1=zero+1; (*a1&01)==0; a1++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1302 if (a1>=a3) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1303 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1304 for (a2=a1+1; a2<=a3;) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1305 if (*a2&01) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1306 a2++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1307 dot = a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1308 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1309 *a1++ = *a2++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1310 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1311 dol = a1-1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1312 if (dot>dol) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1313 dot = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1314 fchange = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1315 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1316 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1317 static char * |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1318 getline(long tl, int nulterm) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1319 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1320 register char *bp, *lp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1321 register long nl; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1322 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1323 lp = linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1324 bp = getblock(tl, READ); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1325 nl = nleft; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1326 tl &= ~0377; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1327 while (*lp++ = *bp++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1328 if (lp[-1] == '\n' && nulterm) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1329 lp[-1] = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1330 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1331 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1332 if (--nl == 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1333 bp = getblock(tl+=0400, READ); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1334 nl = nleft; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1335 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1336 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1337 return(linebuf); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1338 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1339 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1340 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1341 putline(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1342 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1343 register char *bp, *lp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1344 register long nl; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1345 long tl; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1346 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1347 fchange = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1348 lp = linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1349 tl = tline; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1350 bp = getblock(tl, WRITE); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1351 nl = nleft; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1352 tl &= ~0377; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1353 while (*bp = *lp++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1354 if (*bp++ == '\n' && insub) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1355 *--bp = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1356 linebp = lp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1357 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1358 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1359 if (--nl == 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1360 bp = getblock(tl+=0400, WRITE); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1361 nl = nleft; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1362 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1363 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1364 nl = tline; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1365 tline += (((lp-linebuf)+03)>>1)&(MAXCNT-1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1366 return(nl); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1367 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1368 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1369 static char * |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1370 getblock(long atl, long iof) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1371 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1372 register long bno, off; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1373 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1374 bno = (atl>>8)&BLKMSK; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1375 off = (atl<<1)&0774; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1376 if (bno >= BLKMSK) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1377 lastc = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1378 error("temp file too big"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1379 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1380 nleft = 512 - off; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1381 if (bno==iblock) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1382 ichanged |= iof; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1383 return(ibuff+off); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1384 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1385 if (bno==oblock) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1386 return(obuff+off); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1387 if (iof==READ) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1388 if (ichanged) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1389 blkio(iblock, ibuff, 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1390 ichanged = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1391 iblock = bno; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1392 blkio(bno, ibuff, 0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1393 return(ibuff+off); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1394 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1395 if (oblock>=0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1396 blkio(oblock, obuff, 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1397 oblock = bno; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1398 return(obuff+off); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1399 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1400 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1401 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1402 blkio(long b, char *buf, int wr) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1403 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1404 lseek(tfile, b<<9, SEEK_SET); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1405 if ((wr ? write(tfile, buf, 512) : read (tfile, buf, 512)) != 512) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1406 status = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1407 error("I/O error on temp file"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1408 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1409 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1410 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1411 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1412 init(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1413 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1414 register long *markp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1415 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1416 tline = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1417 for (markp = names; markp < &names[26]; markp++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1418 *markp = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1419 for (markp = undnames; markp < &undnames[26]; markp++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1420 *markp = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1421 subnewa = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1422 anymarks = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1423 iblock = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1424 oblock = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1425 ichanged = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1426 tfile = maketf(tfile); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1427 dot = dol = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1428 unddot = NULL; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1429 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1430 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1431 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1432 global(int k, int ia) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1433 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1434 register int c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1435 register long *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1436 static char *globuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1437 char mb[MB_LEN_MAX+1]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1438 int spflag = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1439 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1440 if (globp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1441 error("multiple globals not allowed"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1442 setall(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1443 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1444 if ((c=GETWC(mb))=='\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1445 error("incomplete global expression"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1446 compile(NULL, expbuf, &expbuf[ESIZE], c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1447 if (!ia) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1448 globrd(&globuf, EOF); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1449 if (globuf[0] == '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1450 globuf[0] = 'p', globuf[1] = '\n', globuf[2] = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1451 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1452 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1453 spflag = pflag; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1454 pflag = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1455 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1456 checkpoint(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1457 for (a1=zero; a1<=dol; a1++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1458 *a1 &= ~01; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1459 if (a1>=addr1 && a1<=addr2 && execute(0, a1, 0)==k) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1460 *a1 |= 01; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1461 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1462 /* |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1463 * Special case: g/.../d (avoid n^2 algorithm) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1464 */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1465 if (!ia && globuf[0]=='d' && globuf[1]=='\n' && globuf[2]=='\0') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1466 gdelete(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1467 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1468 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1469 for (a1=zero; a1<=dol; a1++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1470 if (*a1 & 01) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1471 *a1 &= ~01; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1472 dot = a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1473 if (ia) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1474 puts(getline(*a1, 0)); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1475 if ((c = getchr()) == EOF) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1476 error("command expected"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1477 if (c == 'a' || c == 'c' || c == 'i') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1478 error("a, i, or c not allowed in G"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1479 else if (c == '&') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1480 if ((c = getchr()) != '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1481 error("end of line expected"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1482 if (globuf == 0 || *globuf == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1483 error("no remembered command"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1484 } else if (c == '\n') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1485 a1 = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1486 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1487 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1488 globrd(&globuf, c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1489 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1490 globp = globuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1491 commands(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1492 globp = NULL; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1493 a1 = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1494 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1495 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1496 if (ia) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1497 pflag = spflag; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1498 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1499 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1500 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1501 globrd(char **globuf, register int c) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1502 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1503 register int i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1504 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1505 if (*globuf == 0 && (*globuf = malloc(GBSIZE=256)) == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1506 error("global too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1507 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1508 if (c != EOF) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1509 (*globuf)[i++] = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1510 while ((c = getchr()) != '\n') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1511 if (c==EOF) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1512 error("incomplete global expression"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1513 if (c=='\\') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1514 c = getchr(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1515 if (c!='\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1516 (*globuf)[i++] = '\\'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1517 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1518 (*globuf)[i++] = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1519 if (i>=GBSIZE-4 && (*globuf=realloc(*globuf,GBSIZE+=256)) == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1520 error("global too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1521 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1522 (*globuf)[i++] = '\n'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1523 (*globuf)[i++] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1524 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1525 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1526 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1527 join(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1528 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1529 register int i, j; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1530 register long *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1531 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1532 j = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1533 for (a1=addr1; a1<=addr2; a1++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1534 i = getline(*a1, 0) - linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1535 while (genbuf[j] = linebuf[i++]) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1536 if (j++ >= LBSIZE-2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1537 growlb("line too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1538 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1539 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1540 j = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1541 while (linebuf[i++] = genbuf[j++]) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1542 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1543 *addr1 = putline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1544 if (addr1<addr2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1545 rdelete(addr1+1, addr2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1546 dot = addr1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1547 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1548 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1549 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1550 substitute(int inglob) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1551 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1552 register long *markp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1553 register long *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1554 intptr_t nl; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1555 int gsubf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1556 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1557 checkpoint(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1558 gsubf = compsub(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1559 insub = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1560 for (a1 = addr1; a1 <= addr2; a1++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1561 long *ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1562 if (execute(0, a1, 1)==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1563 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1564 inglob |= dosub(gsubf < 2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1565 if (gsubf) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1566 int i = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1567 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1568 while (*loc2) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1569 if (execute(1, NULL, 1)==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1570 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1571 inglob |= dosub(gsubf == -1 || ++i == gsubf); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1572 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1573 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1574 subnewa = putline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1575 *a1 &= ~01; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1576 if (anymarks) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1577 for (markp = names; markp < &names[26]; markp++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1578 if (*markp == *a1) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1579 *markp = subnewa; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1580 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1581 *a1 = subnewa; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1582 ozero = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1583 nl = append(getsub, a1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1584 nl += zero-ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1585 a1 += nl; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1586 addr2 += nl; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1587 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1588 insub = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1589 if (inglob==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1590 error("no match"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1591 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1592 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1593 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1594 compsub(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1595 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1596 register int seof, c, i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1597 static char *oldrhs; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1598 static int orhssz; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1599 char mb[MB_LEN_MAX+1]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1600 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1601 if ((seof = GETWC(mb)) == '\n' || seof == ' ') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1602 error("illegal or missing delimiter"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1603 nodelim = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1604 compile(NULL, expbuf, &expbuf[ESIZE], seof); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1605 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1606 for (;;) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1607 c = GETWC(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1608 if (c=='\\') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1609 if (i >= RHSIZE-2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1610 growrhs("replacement string too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1611 rhsbuf[i++] = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1612 c = GETWC(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1613 } else if (c=='\n') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1614 if (globp && *globp) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1615 if (i >= RHSIZE-2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1616 growrhs("replacement string too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1617 rhsbuf[i++] = '\\'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1618 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1619 else if (nodelim) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1620 error("illegal or missing delimiter"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1621 else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1622 peekc = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1623 pflag++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1624 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1625 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1626 } else if (c==seof) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1627 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1628 for (c = 0; c==0 || mb[c]; c++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1629 if (i >= RHSIZE-2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1630 growrhs("replacement string too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1631 rhsbuf[i++] = mb[c]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1632 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1633 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1634 rhsbuf[i++] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1635 if (rhsbuf[0] == '%' && rhsbuf[1] == 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1636 if (orhssz == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1637 error("no remembered replacement string"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1638 strcpy(rhsbuf, oldrhs); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1639 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1640 if (orhssz < RHSIZE && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1641 (oldrhs = realloc(oldrhs, orhssz=RHSIZE)) == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1642 error("replacement string too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1643 strcpy(oldrhs, rhsbuf); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1644 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1645 if ((peekc = getchr()) == 'g') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1646 peekc = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1647 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1648 return(-1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1649 } else if (peekc >= '0' && peekc <= '9') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1650 c = getnum(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1651 if (c < 1 || c > LBSIZE) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1652 error("invalid count"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1653 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1654 return c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1655 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1656 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1657 return(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1658 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1659 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1660 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1661 getsub(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1662 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1663 register char *p1, *p2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1664 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1665 p1 = linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1666 if ((p2 = linebp) == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1667 return(EOF); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1668 while (*p1++ = *p2++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1669 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1670 linebp = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1671 return(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1672 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1673 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1674 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1675 dosub(int really) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1676 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1677 register char *lp, *sp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1678 register int i, j, k; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1679 int c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1680 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1681 if (!really) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1682 goto copy; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1683 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1684 j = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1685 k = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1686 while (&linebuf[i] < loc1) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1687 genbuf[j++] = linebuf[i++]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1688 while (c = rhsbuf[k++]&0377) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1689 if (c=='&') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1690 j = place(j, loc1, loc2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1691 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1692 } else if (c == '\\') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1693 c = rhsbuf[k++]&0377; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1694 if (c >='1' && c < nbra+'1') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1695 j = place(j, braslist[c-'1'], braelist[c-'1']); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1696 continue; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1697 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1698 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1699 if (j >= LBSIZE) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1700 growlb("line too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1701 genbuf[j++] = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1702 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1703 i = loc2 - linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1704 loc2 = j + linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1705 if (loc1 == &linebuf[i]) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1706 int n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1707 wchar_t wc; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1708 if (mb_cur_max > 1 && (n = mbtowc(&wc, loc2, mb_cur_max)) > 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1709 loc2 += n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1710 else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1711 loc2++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1712 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1713 while (genbuf[j++] = linebuf[i++]) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1714 if (j >= LBSIZE) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1715 growlb("line too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1716 if (really) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1717 lp = linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1718 sp = genbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1719 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1720 copy: sp = linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1721 lp = genbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1722 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1723 while (*lp++ = *sp++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1724 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1725 return really; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1726 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1727 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1728 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1729 place(register int j, register const char *l1, register const char *l2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1730 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1731 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1732 while (l1 < l2) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1733 genbuf[j++] = *l1++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1734 if (j >= LBSIZE) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1735 growlb("line too long"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1736 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1737 return(j); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1738 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1739 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1740 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1741 move(int cflag) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1742 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1743 register long *adt, *ad1, *ad2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1744 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1745 setdot(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1746 nonzero(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1747 if ((adt = address())==0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1748 error("illegal move destination"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1749 newline(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1750 checkpoint(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1751 if (cflag) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1752 long *ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1753 intptr_t delta; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1754 ad1 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1755 ozero = zero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1756 append(getcopy, ad1++); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1757 ad2 = dol; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1758 delta = zero - ozero; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1759 ad1 += delta; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1760 adt += delta; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1761 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1762 ad2 = addr2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1763 for (ad1 = addr1; ad1 <= ad2;) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1764 *ad1++ &= ~01; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1765 ad1 = addr1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1766 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1767 ad2++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1768 if (adt<ad1) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1769 dot = adt + (ad2-ad1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1770 if ((++adt)==ad1) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1771 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1772 reverse(adt, ad1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1773 reverse(ad1, ad2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1774 reverse(adt, ad2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1775 } else if (adt >= ad2) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1776 dot = adt++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1777 reverse(ad1, ad2); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1778 reverse(ad2, adt); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1779 reverse(ad1, adt); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1780 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1781 error("illegal move destination"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1782 fchange = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1783 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1784 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1785 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1786 reverse(register long *a1, register long *a2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1787 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1788 register int t; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1789 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1790 for (;;) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1791 t = *--a2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1792 if (a2 <= a1) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1793 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1794 *a2 = *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1795 *a1++ = t; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1796 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1797 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1798 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1799 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1800 getcopy(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1801 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1802 if (addr1 > addr2) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1803 return(EOF); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1804 getline(*addr1++, 0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1805 return(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1806 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1807 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1808 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1809 execute(int gf, long *addr, int subst) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1810 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1811 register char *p1, *p2, c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1812 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1813 for (c=0; c<NBRA; c++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1814 braslist[c&0377] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1815 braelist[c&0377] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1816 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1817 if (gf) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1818 if (circf) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1819 return(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1820 p1 = linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1821 p2 = genbuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1822 while (*p1++ = *p2++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1823 ; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1824 locs = p1 = loc2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1825 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1826 if (addr==zero) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1827 return(0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1828 p1 = getline(*addr, 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1829 locs = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1830 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1831 needsub = subst; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1832 return step(p1, expbuf); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1833 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1834 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1835 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1836 cmplerr(int c) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1837 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1838 const char *msg; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1839 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1840 switch (c) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1841 case 11: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1842 msg = "Range endpoint too large"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1843 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1844 case 16: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1845 msg = "bad number"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1846 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1847 case 25: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1848 msg = "`\\digit' out of range"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1849 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1850 case 36: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1851 msg = "illegal or missing delimiter"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1852 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1853 case 41: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1854 msg = "no remembered search string"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1855 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1856 case 42: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1857 msg = "'\\( \\)' imbalance"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1858 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1859 case 43: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1860 msg = "Too many `\\(' s"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1861 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1862 case 44: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1863 msg = "more than 2 numbers given"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1864 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1865 case 45: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1866 msg = "'\\}' expected"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1867 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1868 case 46: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1869 msg = "first number exceeds second"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1870 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1871 case 49: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1872 msg = "'[ ]' imbalance"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1873 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1874 case 50: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1875 msg = "regular expression overflow"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1876 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1877 case 67: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1878 msg = "illegal byte sequence"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1879 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1880 default: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1881 msg = "regular expression error"; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1882 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1883 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1884 error(msg); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1885 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1886 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1887 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1888 doprnt(long *bot, long *top) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1889 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1890 long *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1891 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1892 a1 = bot; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1893 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1894 if (numbf ^ Nflag) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1895 putd(a1-zero); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1896 putchr('\t'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1897 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1898 nlputs(getline(*a1++, 0)); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1899 } while (a1 <= top); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1900 pflag = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1901 listf = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1902 numbf = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1903 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1904 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1905 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1906 putd(long c) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1907 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1908 register int r; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1909 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1910 r = c%10; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1911 c /= 10; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1912 if (c) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1913 putd(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1914 putchr(r + '0'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1915 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1916 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1917 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1918 nlputs(register const char *sp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1919 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1920 if (listf) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1921 list(sp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1922 else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1923 puts(sp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1924 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1925 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1926 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1927 puts(register const char *sp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1928 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1929 while (*sp) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1930 if (*sp != '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1931 putchr(*sp++ & 0377); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1932 else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1933 sp++, putchr('\0'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1934 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1935 putchr('\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1936 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1937 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1938 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1939 list(const char *lp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1940 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1941 int col, n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1942 wchar_t c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1943 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1944 col = numbf ^ Nflag ? 8 : 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1945 while (*lp) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1946 if (mb_cur_max > 1 && *lp&0200) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1947 n = mbtowc(&c, lp, mb_cur_max); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1948 else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1949 n = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1950 c = *lp&0377; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1951 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1952 if (col+1 >= 72) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1953 col = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1954 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1955 putchr('\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1956 } |
4
4165f1b57d18
Become SUSv3 compatible and thus remove own regexp code
markus schnalke <meillo@marmaro.de>
parents:
3
diff
changeset
|
1957 if (n<0 || c == '\\' || |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1958 !(mb_cur_max>1 ? iswprint(c) : isprint(c))) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1959 if (n<0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1960 n = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1961 while (n--) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1962 col += lstchr(*lp++&0377); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1963 } else if (mb_cur_max>1) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1964 col += wcwidth(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1965 while (n--) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1966 putchr(*lp++&0377); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1967 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1968 putchr(*lp++&0377); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1969 col++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1970 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1971 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1972 putchr('$'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1973 putchr('\n'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1974 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1975 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1976 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1977 lstchr(int c) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1978 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1979 int cad = 1, d; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1980 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1981 if (c == '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1982 c = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1983 if (c == '\\') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1984 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1985 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1986 cad = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1987 } else if (c == '\a') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1988 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1989 putchr('a'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1990 cad = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1991 } else if (c == '\b') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1992 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1993 putchr('b'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1994 cad = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1995 } else if (c == '\f') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1996 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1997 putchr('f'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1998 cad = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
1999 } else if (c == '\r') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2000 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2001 putchr('r'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2002 cad = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2003 } else if (c == '\t') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2004 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2005 putchr('t'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2006 cad = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2007 } else if (c == '\v') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2008 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2009 putchr('v'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2010 cad = 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2011 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2012 putchr('\\'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2013 putchr(((c&~077)>>6)+'0'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2014 c &= 077; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2015 d = c & 07; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2016 putchr(c > d ? ((c-d)>>3)+'0' : '0'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2017 putchr(d+'0'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2018 cad = 4; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2019 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2020 return cad; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2021 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2022 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2023 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2024 putstr(const char *s) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2025 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2026 while (*s) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2027 putchr(*s++); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2028 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2029 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2030 static char line[70]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2031 static char *linp = line; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2032 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2033 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2034 putchr(int ac) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2035 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2036 register char *lp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2037 register int c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2038 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2039 lp = linp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2040 c = ac; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2041 *lp++ = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2042 if(c == '\n' || lp >= &line[64]) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2043 linp = line; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2044 write(1, line, lp-line); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2045 return; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2046 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2047 linp = lp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2048 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2049 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2050 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2051 checkpoint(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2052 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2053 long *a1, *a2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2054 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2055 if (undzero && globp == NULL) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2056 for (a1 = zero+1, a2 = undzero+1; a1 <= dol; a1++, a2++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2057 *a2 = *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2058 unddot = &undzero[dot-zero]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2059 unddol = &undzero[dol-zero]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2060 for (a1 = names, a2 = undnames; a1 < &names[26]; a1++, a2++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2061 *a2 = *a1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2062 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2063 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2064 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2065 #define swap(a, b) (t = a, a = b, b = t) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2066 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2067 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2068 undo(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2069 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2070 long *t; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2071 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2072 if (undzero == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2073 error("no undo information saved"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2074 swap(zero, undzero); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2075 swap(dot, unddot); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2076 swap(dol, unddol); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2077 swap(names, undnames); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2078 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2079 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2080 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2081 maketf(int fd) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2082 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2083 char *tmpdir; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2084 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2085 if (fd == -1) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2086 if ((tmpdir = getenv("TMPDIR")) == NULL || |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2087 (fd = creatf(tmpdir)) < 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2088 if ((fd = creatf("/var/tmp")) < 0 && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2089 (fd = creatf("/tmp")) < 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2090 error("cannot create temporary file"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2091 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2092 ftruncate(fd, 0); /* blkio() will seek to 0 anyway */ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2093 return fd; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2094 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2095 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2096 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2097 creatf(const char *tmpdir) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2098 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2099 if (strlen(tmpdir) >= sizeof tfname - 9) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2100 return -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2101 strcpy(tfname, tmpdir); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2102 strcat(tfname, "/eXXXXXX"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2103 return mkstemp(tfname); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2104 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2105 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2106 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2107 sopen(const char *fn, int rdwr) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2108 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2109 int pf[2], fd = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2110 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2111 if (fn[0] == '!') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2112 fn++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2113 if (pipe(pf) < 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2114 error("write or open on pipe failed"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2115 switch (pipid = fork()) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2116 case 0: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2117 if (rdwr == READ) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2118 dup2(pf[1], 1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2119 else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2120 dup2(pf[0], 0); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2121 close(pf[0]); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2122 close(pf[1]); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2123 sigset(SIGHUP, oldhup); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2124 sigset(SIGQUIT, oldquit); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2125 sigset(SIGPIPE, oldpipe); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2126 execl(SHELL, "sh", "-c", fn, NULL); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2127 _exit(0100); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2128 default: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2129 close(pf[rdwr == READ ? 1 : 0]); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2130 fd = pf[rdwr == READ ? 0 : 1]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2131 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2132 case -1: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2133 error("fork failed - try again"); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2134 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2135 } else if (rdwr == READ) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2136 fd = open(fn, O_RDONLY); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2137 else if (rdwr == EXIST) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2138 fd = open(fn, O_WRONLY); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2139 else /*if (rdwr == WRITE)*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2140 fd = creat(fn, 0666); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2141 if (fd >= 0 && rdwr == READ) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2142 readop = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2143 if (fd >= 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2144 fstat(fd, &fstbuf); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2145 return fd; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2146 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2147 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2148 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2149 sclose(int fd) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2150 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2151 int status; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2152 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2153 close(fd); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2154 if (pipid >= 0) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2155 while (wait(&status) != pipid); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2156 pipid = -1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2157 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2158 readop = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2159 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2160 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2161 static wint_t |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2162 GETWC(char *mb) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2163 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2164 int c, n; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2165 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2166 n = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2167 mb[0] = c = GETC(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2168 mb[1] = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2169 if (mb_cur_max > 1 && c&0200 && c != EOF) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2170 int m; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2171 wchar_t wc; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2172 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2173 while ((m = mbtowc(&wc, mb, mb_cur_max)) < 0 && n<mb_cur_max) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2174 mb[n++] = c = GETC(); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2175 mb[n] = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2176 if (c == '\n' || c == EOF) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2177 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2178 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2179 if (m != n) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2180 ERROR(67); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2181 return wc; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2182 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2183 return c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2184 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2185 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2186 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2187 growlb(const char *msg) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2188 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2189 char *olb = linebuf; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2190 int i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2191 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2192 LBSIZE += 512; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2193 if ((linebuf = realloc(linebuf, LBSIZE)) == NULL || |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2194 (genbuf = realloc(genbuf, LBSIZE)) == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2195 error(msg); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2196 if (linebuf != olb) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2197 loc1 += linebuf - olb; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2198 loc2 += linebuf - olb; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2199 for (i = 0; i < NBRA; i++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2200 if (braslist[i]) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2201 braslist[i] += linebuf - olb; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2202 if (braelist[i]) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2203 braelist[i] += linebuf - olb; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2204 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2205 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2206 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2207 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2208 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2209 growrhs(const char *msg) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2210 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2211 RHSIZE += 256; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2212 if ((rhsbuf = realloc(rhsbuf, RHSIZE)) == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2213 error(msg); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2214 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2215 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2216 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2217 growfn(const char *msg) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2218 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2219 FNSIZE += 64; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2220 if ((savedfile = realloc(savedfile, FNSIZE)) == NULL || |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2221 (file = realloc(file, FNSIZE)) == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2222 error(msg); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2223 if (FNSIZE == 64) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2224 file[0] = savedfile[0] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2225 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2226 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2227 union ptrstore { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2228 void *vp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2229 char bp[sizeof (void *)]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2230 }; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2231 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2232 static void * |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2233 fetchptr(const char *bp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2234 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2235 union ptrstore u; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2236 int i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2237 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2238 for (i = 0; i < sizeof (void *); i++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2239 u.bp[i] = bp[i]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2240 return u.vp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2241 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2242 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2243 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2244 storeptr(void *vp, char *bp) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2245 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2246 union ptrstore u; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2247 int i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2248 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2249 u.vp = vp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2250 for (i = 0; i < sizeof (void *); i++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2251 bp[i] = u.bp[i]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2252 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2253 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2254 #define add(c) ((i>=LBSIZE ? (growlb("regular expression overflow"),0) : 0), \ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2255 genbuf[i++] = (c)) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2256 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2257 #define copy(s) { \ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2258 int m; \ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2259 for (m = 0; m==0 || s[m]; m++) \ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2260 add(s[m]); \ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2261 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2262 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2263 static char * |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2264 compile(char *unused, char *ep, const char *endbuf, int seof) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2265 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2266 INIT |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2267 int c, d, i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2268 regex_t *rp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2269 char *op; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2270 char mb[MB_LEN_MAX+1]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2271 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2272 op = ep; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2273 ep += 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2274 if ((rp = fetchptr(ep)) == NULL) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2275 if ((rp = calloc(1, sizeof *rp)) == NULL) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2276 ERROR(50); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2277 storeptr(rp, ep); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2278 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2279 ep += sizeof (void *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2280 i = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2281 nbra = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2282 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2283 if ((c = GETWC(mb)) == seof) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2284 add('\0'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2285 else if (c == '\\') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2286 copy(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2287 c = GETWC(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2288 if (c == '(') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2289 nbra++; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2290 goto normchar; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2291 } else if (c == '[') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2292 add(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2293 d = EOF; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2294 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2295 c = GETWC(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2296 if (c == EOF || c == '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2297 ERROR(49); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2298 copy(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2299 if (d=='[' && (c==':' || c=='.' || c=='=')) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2300 d = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2301 do { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2302 c = GETWC(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2303 if (c == EOF || c == '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2304 ERROR(49); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2305 copy(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2306 } while (c != d || PEEKC() != ']'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2307 c = GETWC(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2308 copy(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2309 c = EOF; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2310 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2311 d = c; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2312 } while (c != ']'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2313 } else { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2314 if (c == EOF || c == '\n') { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2315 if (c == '\n') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2316 UNGETC(c); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2317 mb[0] = c = '\0'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2318 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2319 if (c == '\0') |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2320 nodelim = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2321 normchar: copy(mb); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2322 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2323 } while (genbuf[i-1] != '\0'); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2324 if (genbuf[0]) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2325 int reflags = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2326 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2327 #ifdef REG_ANGLES |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2328 reflags |= REG_ANGLES; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2329 #endif |
4
4165f1b57d18
Become SUSv3 compatible and thus remove own regexp code
markus schnalke <meillo@marmaro.de>
parents:
3
diff
changeset
|
2330 #ifdef REG_AVOIDNULL |
0
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2331 reflags |= REG_AVOIDNULL; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2332 #endif |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2333 if (op[0]) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2334 regfree(rp); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2335 op[0] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2336 switch (regcomp(rp, genbuf, reflags)) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2337 case 0: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2338 break; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2339 case REG_ESUBREG: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2340 ERROR(25); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2341 /*NOTREACHED*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2342 case REG_EBRACK: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2343 ERROR(49); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2344 /*NOTREACHED*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2345 case REG_EPAREN: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2346 ERROR(42); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2347 /*NOTREACHED*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2348 case REG_BADBR: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2349 case REG_EBRACE: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2350 ERROR(45); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2351 /*NOTREACHED*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2352 case REG_ERANGE: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2353 ERROR(11); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2354 /*NOTREACHED*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2355 case REG_ESPACE: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2356 ERROR(50); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2357 /*NOTREACHED*/ |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2358 default: |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2359 ERROR(-1); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2360 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2361 op[0] = 1; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2362 circf = op[1] = genbuf[0] == '^'; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2363 } else if (op[0]) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2364 circf = op[1]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2365 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2366 ERROR(41); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2367 return ep + sizeof (void *); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2368 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2369 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2370 static int |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2371 step(const char *lp, const char *ep) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2372 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2373 regex_t *rp; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2374 regmatch_t bralist[NBRA+1]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2375 int eflag = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2376 int res; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2377 int i; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2378 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2379 rp = fetchptr(&ep[2]); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2380 if (ep[0] == 0) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2381 return 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2382 if (locs) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2383 eflag |= REG_NOTBOL; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2384 if ((res = regexec(rp, lp, needsub? NBRA+1 : 0, bralist, eflag)) == 0 && |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2385 needsub) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2386 loc1 = (char *)lp + bralist[0].rm_so; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2387 loc2 = (char *)lp + bralist[0].rm_eo; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2388 for (i = 1; i <= NBRA; i++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2389 if (bralist[i].rm_so != -1) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2390 braslist[i-1] = (char *)lp + bralist[i].rm_so; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2391 braelist[i-1] = (char *)lp + bralist[i].rm_eo; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2392 } else |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2393 braslist[i-1] = braelist[i-1] = NULL; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2394 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2395 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2396 return res == 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2397 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2398 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2399 static void |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2400 help(void) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2401 { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2402 const char *desc[] = { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2403 "(.)a append up to .", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2404 "(.)b[n] browse n lines", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2405 "(.,.)c change up to .", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2406 "(.,.)d delete lines", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2407 "e [file] edit file", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2408 "E [file] force edit", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2409 "f [file] print or set file", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2410 "(1,$)g/RE/cmd global cmd", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2411 "(1,$)G/RE/ interactive global", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2412 "h print last error", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2413 "H toggle error messages", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2414 "help print this screen", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2415 "(.)i insert up to .", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2416 "(.,.+1)j join lines", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2417 "(.)kx mark line with x", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2418 "(.,.)l list lines", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2419 "(.,.)ma move lines to a", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2420 "(.,.)n number lines", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2421 "N revert n and p", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2422 "(.)o[n] show n lines of context", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2423 "(.,.)p print lines", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2424 "P toggle prompt", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2425 "q quit", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2426 "Q force quit", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2427 "($)r read file", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2428 "(.,.)s/RE/repl/ search and replace", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2429 "(.,.)s/RE/rp/g replace all occurrences", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2430 "(.,.)s/RE/rp/n replace n-th occurrence", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2431 "(.,.)ta transfer lines to a", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2432 "u undo last change", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2433 "(1,$)v/RE/cmd reverse global", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2434 "(1,$)V/RE/ reverse i/a global", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2435 "(1,$)w [file] write file", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2436 "(1,$)W [file] append to file", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2437 "z write buffer and quit", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2438 "($)= print line number", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2439 "!command execute shell command", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2440 "(.+1)<newline> print one line", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2441 "/RE find RE forwards", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2442 "?RE find RE backwards", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2443 "1 first line", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2444 ". current line", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2445 "$ last line", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2446 ", 1,$", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2447 "; .,$", |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2448 NULL |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2449 }; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2450 char line[100]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2451 int c, half, i, k; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2452 |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2453 half = (sizeof desc / sizeof *desc) / 2; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2454 for (i = 0; i < half && desc[i]; i++) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2455 c = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2456 for (k = 0; desc[i][k]; k++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2457 line[c++] = desc[i][k]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2458 if (desc[i+half]) { |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2459 while (c < 40) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2460 line[c++] = ' '; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2461 for (k = 0; desc[i+half][k]; k++) |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2462 line[c++] = desc[i+half][k]; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2463 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2464 line[c] = 0; |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2465 puts(line); |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2466 } |
1493bea5ac22
Initial version of the standalone heirloom-ed
markus schnalke <meillo@marmaro.de>
parents:
diff
changeset
|
2467 } |