Allow <blank>s to be used to separate tab stop positions with the -t

argument, not just ASCII space characters and commas. Don't count
non-printing characters when determining column position.
This commit is contained in:
Tim J. Robbins 2002-06-15 10:16:39 +00:00
parent 3ba0209ecf
commit ec85e6a06c
3 changed files with 27 additions and 5 deletions
usr.bin

@ -95,6 +95,18 @@ are reconverted to maximal strings of tabs. If the
option is given, then tabs are inserted whenever they would compress the
resultant file by replacing two or more characters.
.El
.Sh ENVIRONMENT
The
.Ev LANG ,
.Ev LC_ALL
and
.Ev LC_CTYPE
environment variables affect the execution of
.Nm expand
and
.Nm unexpand
as described in
.Xr environ 7 .
.Sh STANDARDS
The
.Nm expand

@ -47,6 +47,7 @@ static const char rcsid[] =
#include <ctype.h>
#include <err.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@ -69,8 +70,11 @@ main(argc, argv)
register int n;
int rval;
setlocale(LC_CTYPE, "");
/* handle obsolete syntax */
while (argc > 1 && argv[1][0] == '-' && isdigit(argv[1][1])) {
while (argc > 1 && argv[1][0] == '-' &&
isdigit((unsigned char)argv[1][1])) {
getstops(&argv[1][1]);
argc--; argv++;
}
@ -140,7 +144,8 @@ main(argc, argv)
default:
putchar(c);
column++;
if (isprint(c))
column++;
continue;
case '\n':
@ -173,7 +178,7 @@ getstops(cp)
tabstops[nstops++] = i;
if (*cp == 0)
break;
if (*cp != ',' && *cp != ' ')
if (*cp != ',' && !isblank((unsigned char)*cp))
errx(1, "bad tab stop spec");
cp++;
}

@ -48,8 +48,10 @@ static const char sccsid[] = "@(#)unexpand.c 8.1 (Berkeley) 6/6/93";
/*
* unexpand - put tabs into a file replacing blanks
*/
#include <ctype.h>
#include <err.h>
#include <limits.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -71,6 +73,8 @@ main(argc, argv)
int ch, failed;
char *filename;
setlocale(LC_CTYPE, "");
nstops = 1;
tabstops[0] = 8;
while ((ch = getopt(argc, argv, "at:")) != -1) {
@ -176,7 +180,8 @@ tabify()
doneline = ocol = dcol = 0;
} else if (ch != ' ' || dcol > limit) {
putchar(ch);
ocol++, dcol++;
if (isprint(ch))
ocol++, dcol++;
}
/*
@ -213,7 +218,7 @@ getstops(cp)
tabstops[nstops++] = i;
if (*cp == 0)
break;
if (*cp != ',' && *cp != ' ')
if (*cp != ',' && !isblank((unsigned char)*cp))
errx(1, "bad tab stop spec");
cp++;
}