=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/rs/rs.c,v retrieving revision 1.11 retrieving revision 1.12 diff -c -r1.11 -r1.12 *** src/usr.bin/rs/rs.c 2004/03/13 20:08:21 1.11 --- src/usr.bin/rs/rs.c 2005/05/14 17:01:41 1.12 *************** *** 1,4 **** ! /* $OpenBSD: rs.c,v 1.11 2004/03/13 20:08:21 tedu Exp $ */ /*- * Copyright (c) 1993 --- 1,4 ---- ! /* $OpenBSD: rs.c,v 1.12 2005/05/14 17:01:41 millert Exp $ */ /*- * Copyright (c) 1993 *************** *** 30,42 **** */ #ifndef lint ! static char copyright[] = "@(#) Copyright (c) 1993\n\ The Regents of the University of California. All rights reserved.\n"; #endif /* not lint */ #ifndef lint ! static char sccsid[] = "@(#)rs.c 8.1 (Berkeley) 6/6/93"; #endif /* not lint */ /* --- 30,46 ---- */ #ifndef lint ! static const char copyright[] = "@(#) Copyright (c) 1993\n\ The Regents of the University of California. All rights reserved.\n"; #endif /* not lint */ #ifndef lint ! #if 0 ! static const char sccsid[] = "@(#)rs.c 8.1 (Berkeley) 6/6/93"; ! #else ! static const char rcsid[] = "$OpenBSD: rs.c,v 1.12 2005/05/14 17:01:41 millert Exp $"; ! #endif #endif /* not lint */ /* *************** *** 88,94 **** char isep = ' ', osep = ' '; int owidth = 80, gutter = 2; ! void usage(char *, char *); void getargs(int, char *[]); void getfile(void); int getline(void); --- 92,98 ---- char isep = ' ', osep = ' '; int owidth = 80, gutter = 2; ! void usage(void); void getargs(int, char *[]); void getfile(void); int getline(void); *************** *** 228,238 **** } void ! usage(char *msg, char *s) { ! warnx(msg, s); fprintf(stderr, ! "Usage: rs [ -[csCS][x][kKgGw][N]tTeEnyjhHm ] [ rows [ cols ] ]\n"); exit(1); } --- 232,244 ---- } void ! usage(void) { ! extern char *__progname; ! fprintf(stderr, ! "usage: %s [-[csCS][x][kKgGw][N]tTeEnyjhHm] [rows [cols]]\n", ! __progname); exit(1); } *************** *** 384,479 **** void getargs(int ac, char *av[]) { ! char *p; ! if (ac == 1) { flags |= NOARGS | TRANSPOSE; ! } ! while (--ac && **++av == '-') ! for (p = *av+1; *p; p++) ! switch (*p) { ! case 'T': ! flags |= MTRANSPOSE; ! case 't': ! flags |= TRANSPOSE; ! break; ! case 'c': /* input col. separator */ ! flags |= ONEISEPONLY; ! case 's': /* one or more allowed */ ! if (p[1]) ! isep = *++p; ! else ! isep = '\t'; /* default is ^I */ ! break; ! case 'C': ! flags |= ONEOSEPONLY; ! case 'S': ! if (p[1]) ! osep = *++p; ! else ! osep = '\t'; /* default is ^I */ ! break; ! case 'w': /* window width, default 80 */ ! p = getnum(&owidth, p, 0); ! if (owidth <= 0) ! usage("Width must be a positive integer", ""); ! break; ! case 'K': /* skip N lines */ ! flags |= SKIPPRINT; ! case 'k': /* skip, do not print */ ! p = getnum(&skip, p, 0); ! if (!skip) ! skip = 1; ! break; ! case 'm': ! flags |= NOTRIMENDCOL; ! break; ! case 'g': /* gutter space */ ! p = getnum(&gutter, p, 0); ! break; ! case 'G': ! p = getnum(&propgutter, p, 0); ! break; ! case 'e': /* each line is an entry */ ! flags |= ONEPERLINE; ! break; ! case 'E': ! flags |= ONEPERCHAR; ! break; ! case 'j': /* right adjust */ ! flags |= RIGHTADJUST; ! break; ! case 'n': /* null padding for missing values */ ! flags |= NULLPAD; ! break; ! case 'y': ! flags |= RECYCLE; ! break; ! case 'H': /* print shape only */ ! flags |= DETAILSHAPE; ! case 'h': ! flags |= SHAPEONLY; ! break; ! case 'z': /* squeeze col width */ ! flags |= SQUEEZE; ! break; ! /*case 'p': ! ipagespace = atoi(++p); (default is 1) ! break;*/ ! case 'o': /* col order */ ! p = getlist(&cord, p); ! break; ! case 'b': ! flags |= ICOLBOUNDS; ! p = getlist(&icbd, p); ! break; ! case 'B': ! flags |= OCOLBOUNDS; ! p = getlist(&ocbd, p); ! break; ! default: ! usage("Bad flag: %.1s", p); } /*if (!osep) osep = isep;*/ switch (ac) { --- 390,498 ---- void getargs(int ac, char *av[]) { ! int ch; ! if (ac == 1) flags |= NOARGS | TRANSPOSE; ! while ((ch = getopt(ac, av, "c::C::s::S::k:K:g:G:w:tTeEnyjhHmz")) != -1) { ! switch (ch) { ! case 'T': ! flags |= MTRANSPOSE; ! /* FALLTHROUGH */ ! case 't': ! flags |= TRANSPOSE; ! break; ! case 'c': /* input col. separator */ ! flags |= ONEISEPONLY; ! /* FALLTHROUGH */ ! case 's': /* one or more allowed */ ! if (optarg == NULL) ! isep = '\t'; /* default is ^I */ ! else if (optarg[1] != '\0') ! usage(); /* single char only */ ! else ! isep = *optarg; ! break; ! case 'C': ! flags |= ONEOSEPONLY; ! /* FALLTHROUGH */ ! case 'S': ! if (optarg == NULL) ! osep = '\t'; /* default is ^I */ ! else if (optarg[1] != '\0') ! usage(); /* single char only */ ! else ! osep = *optarg; ! break; ! case 'w': /* window width, default 80 */ ! getnum(&owidth, optarg, 0); ! if (owidth <= 0) { ! warnx("width must be a positive integer"); ! usage(); } + break; + case 'K': /* skip N lines */ + flags |= SKIPPRINT; + /* FALLTHROUGH */ + case 'k': /* skip, do not print */ + getnum(&skip, optarg, 0); + if (!skip) + skip = 1; + break; + case 'm': + flags |= NOTRIMENDCOL; + break; + case 'g': /* gutter space */ + getnum(&gutter, optarg, 0); + break; + case 'G': + getnum(&propgutter, optarg, 0); + break; + case 'e': /* each line is an entry */ + flags |= ONEPERLINE; + break; + case 'E': + flags |= ONEPERCHAR; + break; + case 'j': /* right adjust */ + flags |= RIGHTADJUST; + break; + case 'n': /* null padding for missing values */ + flags |= NULLPAD; + break; + case 'y': + flags |= RECYCLE; + break; + case 'H': /* print shape only */ + flags |= DETAILSHAPE; + /* FALLTHROUGH */ + case 'h': + flags |= SHAPEONLY; + break; + case 'z': /* squeeze col width */ + flags |= SQUEEZE; + break; + /*case 'p': + ipagespace = atoi(++p); (default is 1) + break;*/ + case 'o': /* col order */ + getlist(&cord, optarg); + break; + case 'b': + flags |= ICOLBOUNDS; + getlist(&icbd, optarg); + break; + case 'B': + flags |= OCOLBOUNDS; + getlist(&ocbd, optarg); + break; + default: + usage(); + } + } + ac -= optind; + av += optind; + /*if (!osep) osep = isep;*/ switch (ac) { *************** *** 486,492 **** case 0: break; default: ! usage("Too many arguments.", ""); } } --- 505,511 ---- case 0: break; default: ! usage(); } } *************** *** 497,504 **** char *t; for (t = p + 1; *t; t++) { ! if (!isdigit(*t)) ! usage("Option %.1s requires a list of unsigned numbers separated by commas", t); count++; while (*t && isdigit(*t)) t++; --- 516,525 ---- char *t; for (t = p + 1; *t; t++) { ! if (!isdigit(*t)) { ! warnx("option -%c requires a list of unsigned numbers separated by commas", *t); ! usage(); ! } count++; while (*t && isdigit(*t)) t++; *************** *** 529,536 **** char *t = p; if (!isdigit(*++t)) { ! if (strict || *t == '-' || *t == '+') ! usage("Option %.1s requires an unsigned integer", p); *num = 0; return(p); } --- 550,559 ---- char *t = p; if (!isdigit(*++t)) { ! if (strict || *t == '-' || *t == '+') { ! warnx("option -%c requires an unsigned integer", *p); ! usage(); ! } *num = 0; return(p); }