annotate code/cut.c__netbsd.1993-03-21 @ 41:e2961496d097 default tip

Add script to generate the PDFs
author markus schnalke <meillo@marmaro.de>
date Tue, 10 Nov 2015 21:13:22 +0100 (2015-11-10)
parents 21ad1c1548c4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
1 /*
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
2 * Copyright (c) 1989 The Regents of the University of California.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
3 * All rights reserved.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
4 *
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
5 * This code is derived from software contributed to Berkeley by
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
6 * Adam S. Moskowitz of Menlo Consulting and Marciano Pitargue.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
7 *
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
8 * Redistribution and use in source and binary forms, with or without
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
9 * modification, are permitted provided that the following conditions
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
10 * are met:
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
11 * 1. Redistributions of source code must retain the above copyright
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
13 * 2. Redistributions in binary form must reproduce the above copyright
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
14 * notice, this list of conditions and the following disclaimer in the
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
15 * documentation and/or other materials provided with the distribution.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
16 * 3. All advertising materials mentioning features or use of this software
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
17 * must display the following acknowledgement:
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
18 * This product includes software developed by the University of
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
19 * California, Berkeley and its contributors.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
20 * 4. Neither the name of the University nor the names of its contributors
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
21 * may be used to endorse or promote products derived from this software
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
22 * without specific prior written permission.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
23 *
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
34 * SUCH DAMAGE.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
35 */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
36
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
37 #ifndef lint
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
38 char copyright[] =
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
39 "@(#) Copyright (c) 1989 The Regents of the University of California.\n\
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
40 All rights reserved.\n";
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
41 #endif /* not lint */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
42
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
43 #ifndef lint
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
44 static char sccsid[] = "@(#)cut.c 5.4 (Berkeley) 10/30/90";
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
45 #endif /* not lint */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
46
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
47 #include <limits.h>
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
48 #include <stdio.h>
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
49 #include <ctype.h>
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
50
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
51 int cflag;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
52 char dchar;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
53 int dflag;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
54 int fflag;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
55 int sflag;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
56
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
57 main(argc, argv)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
58 int argc;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
59 char **argv;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
60 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
61 extern char *optarg;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
62 extern int errno, optind;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
63 FILE *fp;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
64 int ch, (*fcn)(), c_cut(), f_cut();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
65 char *strerror();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
66
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
67 dchar = '\t'; /* default delimiter is \t */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
68
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
69 while ((ch = getopt(argc, argv, "c:d:f:s")) != EOF)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
70 switch(ch) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
71 case 'c':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
72 fcn = c_cut;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
73 get_list(optarg);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
74 cflag = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
75 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
76 case 'd':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
77 dchar = *optarg;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
78 dflag = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
79 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
80 case 'f':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
81 get_list(optarg);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
82 fcn = f_cut;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
83 fflag = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
84 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
85 case 's':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
86 sflag = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
87 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
88 case '?':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
89 default:
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
90 usage();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
91 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
92 argc -= optind;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
93 argv += optind;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
94
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
95 if (fflag) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
96 if (cflag)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
97 usage();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
98 } else if (!cflag || dflag || sflag)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
99 usage();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
100
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
101 if (*argv)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
102 for (; *argv; ++argv) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
103 if (!(fp = fopen(*argv, "r"))) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
104 (void)fprintf(stderr,
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
105 "cut: %s: %s\n", *argv, strerror(errno));
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
106 exit(1);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
107 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
108 fcn(fp, *argv);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
109 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
110 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
111 fcn(stdin, "stdin");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
112 exit(0);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
113 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
114
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
115 int autostart, autostop, maxval;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
116
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
117 char positions[_POSIX2_LINE_MAX + 1];
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
118
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
119 get_list(list)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
120 char *list;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
121 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
122 register char *pos;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
123 register int setautostart, start, stop;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
124 char *p, *strtok();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
125
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
126 /*
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
127 * set a byte in the positions array to indicate if a field or
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
128 * column is to be selected; use +1, it's 1-based, not 0-based.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
129 * This parser is less restrictive than the Draft 9 POSIX spec.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
130 * POSIX doesn't allow lists that aren't in increasing order or
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
131 * overlapping lists. We also handle "-3-5" although there's no
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
132 * real reason too.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
133 */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
134 for (; p = strtok(list, ", \t"); list = NULL) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
135 setautostart = start = stop = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
136 if (*p == '-') {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
137 ++p;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
138 setautostart = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
139 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
140 if (isdigit(*p)) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
141 start = stop = strtol(p, &p, 10);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
142 if (setautostart && start > autostart)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
143 autostart = start;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
144 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
145 if (*p == '-') {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
146 if (isdigit(p[1]))
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
147 stop = strtol(p + 1, &p, 10);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
148 if (*p == '-') {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
149 ++p;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
150 if (!autostop || autostop > stop)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
151 autostop = stop;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
152 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
153 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
154 if (*p)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
155 badlist("illegal list value");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
156 if (!stop || !start)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
157 badlist("values may not include zero");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
158 if (stop > _POSIX2_LINE_MAX) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
159 /* positions used rather than allocate a new buffer */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
160 (void)sprintf(positions, "%d too large (max %d)",
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
161 stop, _POSIX2_LINE_MAX);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
162 badlist(positions);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
163 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
164 if (maxval < stop)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
165 maxval = stop;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
166 for (pos = positions + start; start++ <= stop; *pos++ = 1);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
167 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
168
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
169 /* overlapping ranges */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
170 if (autostop && maxval > autostop)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
171 maxval = autostop;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
172
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
173 /* set autostart */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
174 if (autostart)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
175 memset(positions + 1, '1', autostart);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
176 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
177
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
178 /* ARGSUSED */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
179 c_cut(fp, fname)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
180 FILE *fp;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
181 char *fname;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
182 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
183 register int ch, col;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
184 register char *pos;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
185
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
186 for (;;) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
187 pos = positions + 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
188 for (col = maxval; col; --col) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
189 if ((ch = getc(fp)) == EOF)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
190 return;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
191 if (ch == '\n')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
192 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
193 if (*pos++)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
194 putchar(ch);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
195 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
196 if (ch != '\n')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
197 if (autostop)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
198 while ((ch = getc(fp)) != EOF && ch != '\n')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
199 putchar(ch);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
200 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
201 while ((ch = getc(fp)) != EOF && ch != '\n');
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
202 putchar('\n');
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
203 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
204 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
205
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
206 f_cut(fp, fname)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
207 FILE *fp;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
208 char *fname;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
209 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
210 register int ch, field, isdelim;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
211 register char *pos, *p, sep;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
212 int output;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
213 char lbuf[_POSIX2_LINE_MAX + 1];
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
214
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
215 for (sep = dchar, output = 0; fgets(lbuf, sizeof(lbuf), fp);) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
216 for (isdelim = 0, p = lbuf;; ++p) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
217 if (!(ch = *p)) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
218 (void)fprintf(stderr,
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
219 "cut: %s: line too long.\n", fname);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
220 exit(1);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
221 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
222 /* this should work if newline is delimiter */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
223 if (ch == sep)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
224 isdelim = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
225 if (ch == '\n') {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
226 if (!isdelim && !sflag)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
227 (void)printf("%s", lbuf);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
228 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
229 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
230 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
231 if (!isdelim)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
232 continue;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
233
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
234 pos = positions + 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
235 for (field = maxval, p = lbuf; field; --field, ++pos) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
236 if (*pos) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
237 if (output++)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
238 putchar(sep);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
239 while ((ch = *p++) != '\n' && ch != sep)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
240 putchar(ch);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
241 } else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
242 while ((ch = *p++) != '\n' && ch != sep);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
243 if (ch == '\n')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
244 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
245 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
246 if (ch != '\n')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
247 if (autostop) {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
248 if (output)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
249 putchar(sep);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
250 for (; (ch = *p) != '\n'; ++p)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
251 putchar(ch);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
252 } else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
253 for (; (ch = *p) != '\n'; ++p);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
254 putchar('\n');
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
255 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
256 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
257
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
258 badlist(msg)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
259 char *msg;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
260 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
261 (void)fprintf(stderr, "cut: [-cf] list: %s.\n", msg);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
262 exit(1);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
263 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
264
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
265 usage()
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
266 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
267 (void)fprintf(stderr,
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
268 "usage:\tcut -c list [file1 ...]\n\tcut -f list [-s] [-d delim] [file ...]\n");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
269 exit(1);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
270 }