getopt update
This commit is contained in:
parent
c21c4b2739
commit
5366f9d38a
1 changed files with 15 additions and 30 deletions
41
wc.c
41
wc.c
|
@ -2,54 +2,37 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
int count_words(FILE * file);
|
int count_words(FILE * file);
|
||||||
int count_newls(FILE * file);
|
int count_newls(FILE * file);
|
||||||
int count_bytes(FILE * file);
|
int count_bytes(FILE * file);
|
||||||
|
|
||||||
int main(int argc, char ** argv) {
|
int main(int argc, char ** argv) {
|
||||||
int flags = 0;
|
int flags = 0, do_multibyte = 0;
|
||||||
int c_byte = 0, c_nl = 0, c_word = 0;
|
int c_byte = 0, c_nl = 0, c_word = 0;
|
||||||
int t_byte = 0, t_nl = 0, t_word = 0;
|
int t_byte = 0, t_nl = 0, t_word = 0;
|
||||||
int i, fstart = 1;
|
int i, error = 0; char c;
|
||||||
FILE * in_file;
|
FILE * in_file;
|
||||||
|
|
||||||
for(i = 1; i < argc; i++) {
|
while((c = getopt(argc, argv, "clwm")) != -1) {
|
||||||
if(argv[i][0] == '-') {
|
switch(c) {
|
||||||
switch(argv[i][1]) {
|
case 'c': flags |= 04; do_multibyte = 0; break;
|
||||||
case 'c': flags |= 04;fstart++; break;
|
|
||||||
case 'l': flags |= 01; fstart++; break;
|
|
||||||
case 'w': flags |= 02; fstart++; break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
if(argv[i][2] != '\0') {
|
|
||||||
switch(argv[i][2]) {
|
|
||||||
case 'c': flags |= 04; break;
|
|
||||||
case 'l': flags |= 01; break;
|
case 'l': flags |= 01; break;
|
||||||
case 'w': flags |= 02; break;
|
case 'w': flags |= 02; break;
|
||||||
default: break;
|
case 'm': flags |= 04; do_multibyte = 1; break;
|
||||||
}
|
}
|
||||||
if(argv[i][3] != '\0') {
|
|
||||||
switch(argv[i][3]) {
|
|
||||||
case 'c': flags |= 04; break;
|
|
||||||
case 'l': flags |= 01; break;
|
|
||||||
case 'w': flags |= 02; break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if((flags & 03) == 0) {
|
if((flags & 03) == 0) {
|
||||||
flags |= 04;
|
flags |= 04;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = fstart; i < argc; i++) {
|
for(i = optind; i < argc; i++) {
|
||||||
in_file = fopen(argv[i], "r");
|
in_file = fopen(argv[i], "r");
|
||||||
if(in_file == NULL) {
|
if(in_file == NULL) {
|
||||||
fprintf(stderr, "Cannot find file %s\n", argv[i]);
|
fprintf(stderr, "%s: couldn't open file %s\n", argv[0], argv[i]);
|
||||||
|
error = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(flags & 04) {
|
if(flags & 04) {
|
||||||
|
@ -80,7 +63,7 @@ int main(int argc, char ** argv) {
|
||||||
fclose(in_file);
|
fclose(in_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((argc - fstart) > 1) {
|
if((argc - optind) > 1) {
|
||||||
if(flags & 01) {
|
if(flags & 01) {
|
||||||
printf("%d ", t_nl);
|
printf("%d ", t_nl);
|
||||||
}
|
}
|
||||||
|
@ -93,6 +76,8 @@ int main(int argc, char ** argv) {
|
||||||
|
|
||||||
printf("total\n");
|
printf("total\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int count_words(FILE * file) {
|
int count_words(FILE * file) {
|
||||||
|
|
Loading…
Reference in a new issue