Fixing whitespaces.
This commit is contained in:
parent
c451683c3f
commit
f648c7fa71
67
paste.c
67
paste.c
@ -28,9 +28,9 @@ main(int argc, char **argv) {
|
|||||||
size_t len;
|
size_t len;
|
||||||
Fdescr *dsc;
|
Fdescr *dsc;
|
||||||
int i, c;
|
int i, c;
|
||||||
|
|
||||||
setlocale(LC_CTYPE, "");
|
setlocale(LC_CTYPE, "");
|
||||||
|
|
||||||
while((c = getopt(argc, argv, "sd:")) != -1)
|
while((c = getopt(argc, argv, "sd:")) != -1)
|
||||||
switch(c) {
|
switch(c) {
|
||||||
case 's':
|
case 's':
|
||||||
@ -44,58 +44,58 @@ main(int argc, char **argv) {
|
|||||||
eusage();
|
eusage();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
if(argc == 0)
|
if(argc == 0)
|
||||||
eusage();
|
eusage();
|
||||||
|
|
||||||
/* populate delimeters */
|
/* populate delimeters */
|
||||||
if(!adelim)
|
if(!adelim)
|
||||||
adelim = "\t";
|
adelim = "\t";
|
||||||
|
|
||||||
len = mbstowcs(NULL, adelim, 0);
|
len = mbstowcs(NULL, adelim, 0);
|
||||||
if(len == (size_t)-1)
|
if(len == (size_t)-1)
|
||||||
eprintf("invalid delimiter\n");
|
eprintf("invalid delimiter\n");
|
||||||
|
|
||||||
delim = malloc((len + 1) * sizeof(*delim));
|
delim = malloc((len + 1) * sizeof(*delim));
|
||||||
if(!delim)
|
if(!delim)
|
||||||
eprintf("out of memory\n");
|
eprintf("out of memory\n");
|
||||||
|
|
||||||
mbstowcs(delim, adelim, len);
|
mbstowcs(delim, adelim, len);
|
||||||
len = unescape(delim);
|
len = unescape(delim);
|
||||||
if(len == 0)
|
if(len == 0)
|
||||||
eprintf("no delimiters specified\n");
|
eprintf("no delimiters specified\n");
|
||||||
|
|
||||||
/* populate file list */
|
/* populate file list */
|
||||||
dsc = malloc(argc * sizeof(*dsc));
|
dsc = malloc(argc * sizeof(*dsc));
|
||||||
if(!dsc)
|
if(!dsc)
|
||||||
eprintf("out of memory\n");
|
eprintf("out of memory\n");
|
||||||
|
|
||||||
for(i = 0; i < argc; i++) {
|
for(i = 0; i < argc; i++) {
|
||||||
const char *name = argv[i];
|
const char *name = argv[i];
|
||||||
|
|
||||||
if(strcmp(name, "-") == 0)
|
if(strcmp(name, "-") == 0)
|
||||||
dsc[i].fp = stdin;
|
dsc[i].fp = stdin;
|
||||||
else
|
else
|
||||||
dsc[i].fp = fopen(name, "r");
|
dsc[i].fp = fopen(name, "r");
|
||||||
|
|
||||||
if(!dsc[i].fp)
|
if(!dsc[i].fp)
|
||||||
eprintf("can't open '%s':", name);
|
eprintf("can't open '%s':", name);
|
||||||
|
|
||||||
dsc[i].name = name;
|
dsc[i].name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(seq)
|
if(seq)
|
||||||
sequential(dsc, argc, delim, len);
|
sequential(dsc, argc, delim, len);
|
||||||
else
|
else
|
||||||
parallel(dsc, argc, delim, len);
|
parallel(dsc, argc, delim, len);
|
||||||
|
|
||||||
for(i = 0; i < argc; i++) {
|
for(i = 0; i < argc; i++) {
|
||||||
if(dsc[i].fp != stdin)
|
if(dsc[i].fp != stdin)
|
||||||
(void)fclose(dsc[i].fp);
|
(void)fclose(dsc[i].fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(delim);
|
free(delim);
|
||||||
free(dsc);
|
free(dsc);
|
||||||
return 0;
|
return 0;
|
||||||
@ -111,7 +111,7 @@ unescape(wchar_t *delim) {
|
|||||||
wchar_t c;
|
wchar_t c;
|
||||||
size_t i;
|
size_t i;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
for(i = 0, len = 0; (c = delim[i++]) != '\0'; len++) {
|
for(i = 0, len = 0; (c = delim[i++]) != '\0'; len++) {
|
||||||
if(c == '\\') {
|
if(c == '\\') {
|
||||||
switch(delim[i++]) {
|
switch(delim[i++]) {
|
||||||
@ -135,17 +135,17 @@ unescape(wchar_t *delim) {
|
|||||||
} else
|
} else
|
||||||
delim[len] = c;
|
delim[len] = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static wint_t
|
static wint_t
|
||||||
in(Fdescr *f) {
|
in(Fdescr *f) {
|
||||||
wint_t c = fgetwc(f->fp);
|
wint_t c = fgetwc(f->fp);
|
||||||
|
|
||||||
if(c == WEOF && ferror(f->fp))
|
if(c == WEOF && ferror(f->fp))
|
||||||
eprintf("'%s' read error:", f->name);
|
eprintf("'%s' read error:", f->name);
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,26 +159,26 @@ out(wchar_t c) {
|
|||||||
static void
|
static void
|
||||||
sequential(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
|
sequential(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i = 0; i < len; i++) {
|
for(i = 0; i < len; i++) {
|
||||||
size_t d = 0;
|
size_t d = 0;
|
||||||
wint_t c, last = WEOF;
|
wint_t c, last = WEOF;
|
||||||
|
|
||||||
while((c = in(&dsc[i])) != WEOF) {
|
while((c = in(&dsc[i])) != WEOF) {
|
||||||
if(last == '\n') {
|
if(last == '\n') {
|
||||||
if(delim[d] != '\0')
|
if(delim[d] != '\0')
|
||||||
out(delim[d]);
|
out(delim[d]);
|
||||||
|
|
||||||
d++;
|
d++;
|
||||||
d %= cnt;
|
d %= cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c != '\n')
|
if(c != '\n')
|
||||||
out((wchar_t)c);
|
out((wchar_t)c);
|
||||||
|
|
||||||
last = c;
|
last = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(last == '\n')
|
if(last == '\n')
|
||||||
out((wchar_t)last);
|
out((wchar_t)last);
|
||||||
}
|
}
|
||||||
@ -187,45 +187,46 @@ sequential(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
|
|||||||
static void
|
static void
|
||||||
parallel(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
|
parallel(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
|
||||||
int last;
|
int last;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
last = 0;
|
last = 0;
|
||||||
for(i = 0; i < len; i++) {
|
for(i = 0; i < len; i++) {
|
||||||
wint_t c;
|
wint_t c;
|
||||||
wchar_t d = delim[i % cnt];
|
wchar_t d = delim[i % cnt];
|
||||||
|
|
||||||
do {
|
do {
|
||||||
wint_t o = in(&dsc[i]);
|
wint_t o = in(&dsc[i]);
|
||||||
|
|
||||||
c = o;
|
c = o;
|
||||||
switch(c) {
|
switch(c) {
|
||||||
case WEOF:
|
case WEOF:
|
||||||
if(last == 0)
|
if(last == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
o = '\n';
|
o = '\n';
|
||||||
/* fallthrough */
|
/* fallthrough */
|
||||||
case '\n':
|
case '\n':
|
||||||
if(i != len - 1)
|
if(i != len - 1)
|
||||||
o = d;
|
o = d;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(o != WEOF) {
|
if(o != WEOF) {
|
||||||
/* pad with delimiters up to this point */
|
/* pad with delimiters up to this point */
|
||||||
while(++last < i) {
|
while(++last < i) {
|
||||||
if(d != '\0')
|
if(d != '\0')
|
||||||
out(d);
|
out(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
out((wchar_t)o);
|
out((wchar_t)o);
|
||||||
}
|
}
|
||||||
} while(c != '\n' && c != WEOF);
|
} while(c != '\n' && c != WEOF);
|
||||||
}
|
}
|
||||||
} while(last > 0);
|
} while(last > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user