aboutsummaryrefslogtreecommitdiff
path: root/wc.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-10-24 05:00:29 +0000
committerEric Andersen <andersen@codepoet.org>2001-10-24 05:00:29 +0000
commitbdfd0d78bc44e73d693510e70087857785b3b521 (patch)
tree153a573095afac8d8d0ea857759ecabd77fb28b7 /wc.c
parent9260fc5552a3ee52eb95823aa6689d52a1ffd33c (diff)
downloadbusybox-w32-bdfd0d78bc44e73d693510e70087857785b3b521.tar.gz
busybox-w32-bdfd0d78bc44e73d693510e70087857785b3b521.tar.bz2
busybox-w32-bdfd0d78bc44e73d693510e70087857785b3b521.zip
Major rework of the directory structure and the entire build system.
-Erik
Diffstat (limited to 'wc.c')
-rw-r--r--wc.c156
1 files changed, 0 insertions, 156 deletions
diff --git a/wc.c b/wc.c
deleted file mode 100644
index 695e7e7d4..000000000
--- a/wc.c
+++ /dev/null
@@ -1,156 +0,0 @@
1/* vi: set sw=4 ts=4: */
2/*
3 * Mini wc implementation for busybox
4 *
5 * Copyright (C) 2000 Edward Betts <edward@debian.org>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 */
22
23#include <stdio.h>
24#include <getopt.h>
25#include <string.h>
26#include <stdlib.h>
27#include "busybox.h"
28
29static int total_lines, total_words, total_chars, max_length;
30static int print_lines, print_words, print_chars, print_length;
31
32static void print_counts(int lines, int words, int chars, int length,
33 const char *name)
34{
35 char const *space = "";
36
37 if (print_lines) {
38 printf("%7d", lines);
39 space = " ";
40 }
41 if (print_words) {
42 printf("%s%7d", space, words);
43 space = " ";
44 }
45 if (print_chars) {
46 printf("%s%7d", space, chars);
47 space = " ";
48 }
49 if (print_length)
50 printf("%s%7d", space, length);
51 if (*name)
52 printf(" %s", name);
53 putchar('\n');
54}
55
56static void wc_file(FILE * file, const char *name)
57{
58 int lines, words, chars, length;
59 int in_word = 0, linepos = 0;
60 int c;
61
62 lines = words = chars = length = 0;
63 while ((c = getc(file)) != EOF) {
64 chars++;
65 switch (c) {
66 case '\n':
67 lines++;
68 case '\r':
69 case '\f':
70 if (linepos > length)
71 length = linepos;
72 linepos = 0;
73 goto word_separator;
74 case '\t':
75 linepos += 8 - (linepos % 8);
76 goto word_separator;
77 case ' ':
78 linepos++;
79 case '\v':
80 word_separator:
81 if (in_word) {
82 in_word = 0;
83 words++;
84 }
85 break;
86 default:
87 linepos++;
88 in_word = 1;
89 break;
90 }
91 }
92 if (linepos > length)
93 length = linepos;
94 if (in_word)
95 words++;
96 print_counts(lines, words, chars, length, name);
97 total_lines += lines;
98 total_words += words;
99 total_chars += chars;
100 if (length > max_length)
101 max_length = length;
102 fclose(file);
103 fflush(stdout);
104}
105
106int wc_main(int argc, char **argv)
107{
108 FILE *file;
109 unsigned int num_files_counted = 0;
110 int opt, status = EXIT_SUCCESS;
111
112 total_lines = total_words = total_chars = max_length = 0;
113 print_lines = print_words = print_chars = print_length = 0;
114
115 while ((opt = getopt(argc, argv, "clLw")) > 0) {
116 switch (opt) {
117 case 'c':
118 print_chars = 1;
119 break;
120 case 'l':
121 print_lines = 1;
122 break;
123 case 'L':
124 print_length = 1;
125 break;
126 case 'w':
127 print_words = 1;
128 break;
129 default:
130 show_usage();
131 }
132 }
133
134 if (!print_lines && !print_words && !print_chars && !print_length)
135 print_lines = print_words = print_chars = 1;
136
137 if (argv[optind] == NULL || strcmp(argv[optind], "-") == 0) {
138 wc_file(stdin, "");
139 return EXIT_SUCCESS;
140 } else {
141 while (optind < argc) {
142 if ((file = wfopen(argv[optind], "r")) != NULL)
143 wc_file(file, argv[optind]);
144 else
145 status = EXIT_FAILURE;
146 num_files_counted++;
147 optind++;
148 }
149 }
150
151 if (num_files_counted > 1)
152 print_counts(total_lines, total_words, total_chars,
153 max_length, "total");
154
155 return status;
156}