annotate code/cut.c__gnu.1992-11-08 @ 20:c0e589b92c52

Vorgeschichte von cut in PWB/UNIX behandelt
author markus schnalke <meillo@marmaro.de>
date Thu, 28 May 2015 06:34:21 +0200
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 /* cut - remove parts of lines of files
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
2 Copyright (C) 1984 by David M. Ihnat
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
3
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
4 This program is a total rewrite of the Bell Laboratories Unix(Tm)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
5 command of the same name, as of System V. It contains no proprietary
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
6 code, and therefore may be used without violation of any proprietary
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
7 agreements whatsoever. However, you will notice that the program is
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
8 copyrighted by me. This is to assure the program does *not* fall
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
9 into the public domain. Thus, I may specify just what I am now:
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
10 This program may be freely copied and distributed, provided this notice
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
11 remains; it may not be sold for profit without express written consent of
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
12 the author.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
13 Please note that I recreated the behavior of the Unix(Tm) 'cut' command
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
14 as faithfully as possible; however, I haven't run a full set of regression
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
15 tests. Thus, the user of this program accepts full responsibility for any
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
16 effects or loss; in particular, the author is not responsible for any losses,
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
17 explicit or incidental, that may be incurred through use of this program.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
18
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
19 I ask that any bugs (and, if possible, fixes) be reported to me when
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
20 possible. -David Ihnat (312) 784-4544 ignatz@homebru.chi.il.us
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
21
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
22 POSIX changes, bug fixes, long-named options, and cleanup
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
23 by David MacKenzie <djm@ai.mit.edu>.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
24
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
25 Options:
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
26 --bytes=byte-list
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
27 -b byte-list Print only the bytes in positions listed
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
28 in BYTE-LIST.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
29 Tabs and backspaces are treated like any
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
30 other character; they take up 1 byte.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
31
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
32 --characters=character-list
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
33 -c character-list Print only characters in positions listed
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
34 in CHARACTER-LIST.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
35 The same as -b for now, but
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
36 internationalization will change that.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
37 Tabs and backspaces are treated like any
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
38 other character; they take up 1 character.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
39
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
40 --fields=field-list
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
41 -f field-list Print only the fields listed in FIELD-LIST.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
42 Fields are separated by a TAB by default.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
43
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
44 --delimiter=delim
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
45 -d delim For -f, fields are separated by the first
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
46 character in DELIM instead of TAB.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
47
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
48 -n Do not split multibyte chars (no-op for now).
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
49
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
50 --only-delimited
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
51 -s For -f, do not print lines that do not contain
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
52 the field separator character.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
53
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
54 The BYTE-LIST, CHARACTER-LIST, and FIELD-LIST are one or more numbers
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
55 or ranges separated by commas. The first byte, character, and field
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
56 are numbered 1.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
57
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
58 A FILE of `-' means standard input. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
59
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
60 #define _GNU_SOURCE
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
61 #include <ctype.h>
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
62 #ifndef isblank
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
63 #define isblank(c) ((c) == ' ' || (c) == '\t')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
64 #endif
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
65 #include <stdio.h>
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
66 #include <getopt.h>
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
67 #include <sys/types.h>
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
68 #include "system.h"
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
69
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
70 #ifdef isascii
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
71 #define ISDIGIT(c) (isascii ((c)) && isdigit ((c)))
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
72 #else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
73 #define ISDIGIT(c) (isdigit ((c)))
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
74 #endif
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
75
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
76 char *xmalloc ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
77 char *xrealloc ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
78 int set_fields ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
79 int cut_file ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
80 void cut_stream ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
81 void cut_bytes ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
82 void cut_fields ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
83 void enlarge_line ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
84 void error ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
85 void invalid_list ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
86 void usage ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
87
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
88 /* The number of elements allocated for the input line
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
89 and the byte or field number.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
90 Enlarged as necessary. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
91 int line_size;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
92
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
93 /* Processed output buffer. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
94 char *outbuf;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
95
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
96 /* Where to save next char to output. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
97 char *outbufptr;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
98
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
99 /* Raw line buffer for field mode. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
100 char *inbuf;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
101
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
102 /* Where to save next input char. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
103 char *inbufptr;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
104
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
105 /* What can be done about a byte or field. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
106 enum field_action
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 field_omit,
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
109 field_output
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
110 };
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
111
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
112 /* In byte mode, which bytes to output.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
113 In field mode, which `delim'-separated fields to output.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
114 Both bytes and fields are numbered starting with 1,
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
115 so the first element of `fields' is unused. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
116 enum field_action *fields;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
117
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
118 enum operating_mode
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
119 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
120 undefined_mode,
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 /* Output characters that are in the given bytes. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
123 byte_mode,
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
124
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
125 /* Output the given delimeter-separated fields. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
126 field_mode
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
127 };
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
128
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
129 enum operating_mode operating_mode;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
130
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
131 /* If nonzero,
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
132 for field mode, do not output lines containing no delimeter characters. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
133 int delimited_lines_only;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
134
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
135 /* The delimeter character for field mode. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
136 unsigned char delim;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
137
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
138 /* Nonzero if we have ever read standard input. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
139 int have_read_stdin;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
140
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
141 /* The name this program was run with. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
142 char *program_name;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
143
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
144 struct option longopts[] =
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
145 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
146 {"bytes", 1, 0, 'b'},
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
147 {"characters", 1, 0, 'c'},
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
148 {"fields", 1, 0, 'f'},
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
149 {"delimiter", 1, 0, 'd'},
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
150 {"only-delimited", 0, 0, 's'},
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
151 {0, 0, 0, 0}
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 void
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
155 main (argc, argv)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
156 int argc;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
157 char **argv;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
158 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
159 int optc, exit_status = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
160
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
161 program_name = argv[0];
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
162
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
163 line_size = 512;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
164 operating_mode = undefined_mode;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
165 delimited_lines_only = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
166 delim = '\0';
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
167 have_read_stdin = 0;
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 fields = (enum field_action *)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
170 xmalloc (line_size * sizeof (enum field_action));
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
171 outbuf = (char *) xmalloc (line_size);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
172 inbuf = (char *) xmalloc (line_size);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
173
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
174 for (optc = 0; optc < line_size; optc++)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
175 fields[optc] = field_omit;
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 while ((optc = getopt_long (argc, argv, "b:c:d:f:ns", longopts, (int *) 0))
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
178 != EOF)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
179 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
180 switch (optc)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
181 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
182 case 'b':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
183 case 'c':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
184 /* Build the byte list. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
185 if (operating_mode != undefined_mode)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
186 usage ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
187 operating_mode = byte_mode;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
188 if (set_fields (optarg) == 0)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
189 error (2, 0, "no fields given");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
190 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
191
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
192 case 'f':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
193 /* Build the field list. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
194 if (operating_mode != undefined_mode)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
195 usage ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
196 operating_mode = field_mode;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
197 if (set_fields (optarg) == 0)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
198 error (2, 0, "no fields given");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
199 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
200
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
201 case 'd':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
202 /* New delimiter. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
203 if (optarg[0] == '\0')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
204 error (2, 0, "no delimiter given");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
205 if (optarg[1] != '\0')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
206 error (2, 0, "delimiter must be a single character");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
207 delim = optarg[0];
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
208 break;
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 case 'n':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
211 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
212
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
213 case 's':
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
214 delimited_lines_only++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
215 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
216
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
217 default:
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
218 usage ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
219 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
220 }
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 if (operating_mode == undefined_mode)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
223 usage ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
224
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
225 if ((delimited_lines_only || delim != '\0') && operating_mode != field_mode)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
226 usage ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
227
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
228 if (delim == '\0')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
229 delim = '\t';
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 (optind == argc)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
232 exit_status |= cut_file ("-");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
233 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
234 for (; optind < argc; optind++)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
235 exit_status |= cut_file (argv[optind]);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
236
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
237 if (have_read_stdin && fclose (stdin) == EOF)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
238 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
239 error (0, errno, "-");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
240 exit_status = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
241 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
242 if (ferror (stdout) || fclose (stdout) == EOF)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
243 error (1, 0, "write error");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
244
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
245 exit (exit_status);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
246 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
247
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
248 /* Select for printing the positions in `fields' that are listed in
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
249 byte or field specification FIELDSTR. FIELDSTR should be
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
250 composed of one or more numbers or ranges of numbers, separated by
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
251 blanks or commas. Incomplete ranges may be given: `-m' means
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
252 `1-m'; `n-' means `n' through end of line or last field.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
253
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
254 Return the number of fields selected. */
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 int
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
257 set_fields (fieldstr)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
258 char *fieldstr;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
259 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
260 int initial = 1; /* Value of first number in a range. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
261 int dash_found = 0; /* Nonzero if a '-' is found in this field. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
262 int value = 0; /* If nonzero, a number being accumulated. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
263 int fields_selected = 0; /* Number of fields selected so far. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
264 /* If nonzero, index of first field in a range that goes to end of line. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
265 int eol_range_start = 0;
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 for (;;)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
268 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
269 if (*fieldstr == '-')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
270 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
271 /* Starting a range. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
272 if (dash_found)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
273 invalid_list ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
274 dash_found++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
275 fieldstr++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
276
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
277 if (value)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
278 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
279 if (value >= line_size)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
280 enlarge_line (value);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
281 initial = value;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
282 value = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
283 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
284 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
285 initial = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
286 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
287 else if (*fieldstr == ',' || isblank (*fieldstr) || *fieldstr == '\0')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
288 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
289 /* Ending the string, or this field/byte sublist. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
290 if (dash_found)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
291 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
292 dash_found = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
293
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
294 /* A range. Possibilites: -n, m-n, n-.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
295 In any case, `initial' contains the start of the range. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
296 if (value == 0)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
297 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
298 /* `n-'. From `initial' to end of line. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
299 eol_range_start = initial;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
300 fields_selected++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
301 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
302 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
303 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
304 /* `m-n' or `-n' (1-n). */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
305 if (value < initial)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
306 invalid_list ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
307
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
308 if (value >= line_size)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
309 enlarge_line (value);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
310
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
311 /* Is there already a range going to end of line? */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
312 if (eol_range_start != 0)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
313 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
314 /* Yes. Is the new sequence already contained
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
315 in the old one? If so, no processing is
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
316 necessary. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
317 if (initial < eol_range_start)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
318 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
319 /* No, the new sequence starts before the
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
320 old. Does the old range going to end of line
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
321 extend into the new range? */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
322 if (eol_range_start < value)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
323 /* Yes. Simply move the end of line marker. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
324 eol_range_start = initial;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
325 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
326 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
327 /* No. A simple range, before and disjoint from
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
328 the range going to end of line. Fill it. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
329 for (; initial <= value; initial++)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
330 fields[initial] = field_output;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
331 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
332
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
333 /* In any case, some fields were selected. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
334 fields_selected++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
335 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
336 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
337 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
338 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
339 /* There is no range going to end of line. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
340 for (; initial <= value; initial++)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
341 fields[initial] = field_output;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
342 fields_selected++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
343 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
344 value = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
345 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
346 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
347 else if (value != 0)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
348 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
349 /* A simple field number, not a range. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
350 if (value >= line_size)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
351 enlarge_line (value);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
352
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
353 fields[value] = field_output;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
354 value = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
355 fields_selected++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
356 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
357
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
358 if (*fieldstr == '\0')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
359 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
360 /* If there was a range going to end of line, fill the
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
361 array from the end of line point. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
362 if (eol_range_start)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
363 for (initial = eol_range_start; initial < line_size; initial++)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
364 fields[initial] = field_output;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
365
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
366 return fields_selected;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
367 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
368
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
369 fieldstr++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
370 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
371 else if (ISDIGIT (*fieldstr))
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
372 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
373 value = 10 * value + *fieldstr - '0';
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
374 fieldstr++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
375 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
376 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
377 invalid_list ();
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
378 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
379 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
380
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
381 /* Process file FILE to standard output.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
382 Return 0 if successful, 1 if not. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
383
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
384 int
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
385 cut_file (file)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
386 char *file;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
387 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
388 FILE *stream;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
389
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
390 if (!strcmp (file, "-"))
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
391 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
392 have_read_stdin = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
393 stream = stdin;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
394 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
395 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
396 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
397 stream = fopen (file, "r");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
398 if (stream == NULL)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
399 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
400 error (0, errno, "%s", file);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
401 return 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
402 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
403 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
404
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
405 cut_stream (stream);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
406
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
407 if (ferror (stream))
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
408 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
409 error (0, errno, "%s", file);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
410 return 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
411 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
412 if (!strcmp (file, "-"))
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
413 clearerr (stream); /* Also clear EOF. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
414 else if (fclose (stream) == EOF)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
415 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
416 error (0, errno, "%s", file);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
417 return 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
418 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
419 return 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
420 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
421
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
422 void
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
423 cut_stream (stream)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
424 FILE *stream;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
425 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
426 if (operating_mode == byte_mode)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
427 cut_bytes (stream);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
428 else
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
429 cut_fields (stream);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
430 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
431
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
432 /* Print the file open for reading on stream STREAM
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
433 with the bytes marked `field_omit' in `fields' removed from each line. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
434
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
435 void
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
436 cut_bytes (stream)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
437 FILE *stream;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
438 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
439 register int c; /* Each character from the file. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
440 int doneflag = 0; /* Nonzero if EOF reached. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
441 int char_count; /* Number of chars in the line so far. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
442
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
443 while (doneflag == 0)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
444 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
445 /* Start processing a line. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
446 outbufptr = outbuf;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
447 char_count = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
448
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
449 do
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
450 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
451 c = getc (stream);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
452 if (c == EOF)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
453 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
454 doneflag++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
455 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
456 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
457
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
458 /* If this character is to be sent, stow it in the outbuffer. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
459
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
460 if (++char_count == line_size - 1)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
461 enlarge_line (char_count);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
462
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
463 if (fields[char_count] == field_output || c == '\n')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
464 *outbufptr++ = c;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
465 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
466 while (c != '\n');
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
467
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
468 if (char_count)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
469 fwrite (outbuf, sizeof (char), outbufptr - outbuf, stdout);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
470 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
471 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
472
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
473 /* Print the file open for reading on stream STREAM
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
474 with the fields marked `field_omit' in `fields' removed from each line.
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
475 All characters are initially stowed in the raw input buffer, until
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
476 at least one field has been found. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
477
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
478 void
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
479 cut_fields (stream)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
480 FILE *stream;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
481 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
482 register int c; /* Each character from the file. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
483 int doneflag = 0; /* Nonzero if EOF reached. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
484 int char_count; /* Number of chars in line before any delim. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
485 int fieldfound; /* Nonzero if any fields to print found. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
486 int curr_field; /* Current index in `fields'. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
487
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
488 while (doneflag == 0)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
489 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
490 char_count = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
491 fieldfound = 0;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
492 curr_field = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
493 outbufptr = outbuf;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
494 inbufptr = inbuf;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
495
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
496 do
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
497 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
498 c = getc (stream);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
499 if (c == EOF)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
500 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
501 doneflag++;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
502 break;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
503 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
504
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
505 if (fields[curr_field] == field_output && c != '\n')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
506 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
507 /* Working on a field. It, and its terminating
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
508 delimiter, go only into the processed buffer. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
509 fieldfound = 1;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
510 if (outbufptr - outbuf == line_size - 2)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
511 enlarge_line (outbufptr - outbuf);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
512 *outbufptr++ = c;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
513 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
514 else if (fieldfound == 0)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
515 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
516 if (++char_count == line_size - 1)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
517 enlarge_line (char_count);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
518 *inbufptr++ = c;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
519 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
520
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
521 if (c == delim && ++curr_field == line_size - 1)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
522 enlarge_line (curr_field);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
523 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
524 while (c != '\n');
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
525
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
526 if (fieldfound)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
527 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
528 /* Something was found. Print it. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
529 if (outbufptr[-1] == delim)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
530 --outbufptr; /* Suppress trailing delimiter. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
531
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
532 fwrite (outbuf, sizeof (char), outbufptr - outbuf, stdout);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
533 if (c == '\n')
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
534 putc (c, stdout);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
535 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
536 else if (!delimited_lines_only && char_count)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
537 /* A line with some characters, no delimiters, and no
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
538 suppression. Print it. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
539 fwrite (inbuf, sizeof (char), inbufptr - inbuf, stdout);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
540 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
541 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
542
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
543 /* Extend the buffers to accomodate at least NEW_SIZE characters. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
544
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
545 void
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
546 enlarge_line (new_size)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
547 int new_size;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
548 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
549 char *newp;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
550 int i;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
551
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
552 new_size += 256; /* Leave some room to grow. */
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
553
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
554 fields = (enum field_action *)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
555 xrealloc (fields, new_size * sizeof (enum field_action));
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
556
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
557 newp = (char *) xrealloc (outbuf, new_size);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
558 outbufptr += newp - outbuf;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
559 outbuf = newp;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
560
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
561 newp = (char *) xrealloc (inbuf, new_size);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
562 inbufptr += newp - inbuf;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
563 inbuf = newp;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
564
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
565 for (i = line_size; i < new_size; i++)
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
566 fields[i] = field_omit;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
567 line_size = new_size;
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
568 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
569
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
570 void
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
571 invalid_list ()
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
572 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
573 error (2, 0, "invalid byte or field list");
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
574 }
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
575
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
576 void
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
577 usage ()
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
578 {
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
579 fprintf (stderr, "\
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
580 Usage: %s {-b byte-list,--bytes=byte-list} [-n] [file...]\n\
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
581 %s {-c character-list,--characters=character-list} [file...]\n\
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
582 %s {-f field-list,--fields=field-list} [-d delim] [-s]\n\
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
583 [--delimiter=delim] [--only-delimited] [file...]\n",
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
584 program_name, program_name, program_name);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
585 exit (2);
21ad1c1548c4 Code ausgewaehlter Implementierungen eingefuegt
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
586 }