X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/67e3fbe84428219a4ac710c32ee096b5614088f1..5091acb41289c711cd19e004627df9d31a1b8b1f:/pig/pig.c diff --git a/pig/pig.c b/pig/pig.c index b5bec385..a779ebf0 100644 --- a/pig/pig.c +++ b/pig/pig.c @@ -1,4 +1,4 @@ -/* $NetBSD: pig.c,v 1.2 1995/03/23 08:41:40 cgd Exp $ */ +/* $NetBSD: pig.c,v 1.8 1999/09/18 19:38:53 jsm Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -33,40 +33,43 @@ * SUCH DAMAGE. */ +#include #ifndef lint -static char copyright[] = -"@(#) Copyright (c) 1992, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; +__COPYRIGHT("@(#) Copyright (c) 1992, 1993\n\ + The Regents of the University of California. All rights reserved.\n"); #endif /* not lint */ #ifndef lint #if 0 -static char sccsid[] = "@(#)pig.c 8.1 (Berkeley) 5/31/93"; +static char sccsid[] = "@(#)pig.c 8.2 (Berkeley) 5/4/95"; #else -static char rcsid[] = "$NetBSD: pig.c,v 1.2 1995/03/23 08:41:40 cgd Exp $"; +__RCSID("$NetBSD: pig.c,v 1.8 1999/09/18 19:38:53 jsm Exp $"); #endif #endif /* not lint */ #include #include +#include #include #include #include +#include +int main __P((int, char *[])); void pigout __P((char *, int)); -void usage __P((void)); +void usage __P((void)) __attribute__((__noreturn__)); int main(argc, argv) int argc; char *argv[]; { - register int len; + int len; int ch; char buf[1024]; - while ((ch = getopt(argc, argv, "")) != EOF) + while ((ch = getopt(argc, argv, "")) != -1) switch(ch) { case '?': default: @@ -77,10 +80,8 @@ main(argc, argv) for (len = 0; (ch = getchar()) != EOF;) { if (isalpha(ch)) { - if (len >= sizeof(buf)) { - (void)fprintf(stderr, "pig: ate too much!\n"); - exit(1); - } + if ((size_t)len >= sizeof(buf)) + errx(1, "ate too much!"); buf[len++] = ch; continue; } @@ -98,15 +99,21 @@ pigout(buf, len) char *buf; int len; { - register int ch, start; - int olen; + int ch, start, i; + int olen, allupper, firstupper; + + /* See if the word is all upper case */ + allupper = firstupper = isupper(buf[0]); + for (i = 1; i < len && allupper; i++) + allupper = allupper && isupper(buf[i]); /* * If the word starts with a vowel, append "way". Don't treat 'y' * as a vowel if it appears first. */ - if (index("aeiouAEIOU", buf[0]) != NULL) { - (void)printf("%.*sway", len, buf); + if (strchr("aeiouAEIOU", buf[0]) != NULL) { + (void)printf("%.*s%s", len, buf, + allupper ? "WAY" : "way"); return; } @@ -114,14 +121,18 @@ pigout(buf, len) * Copy leading consonants to the end of the word. The unit "qu" * isn't treated as a vowel. */ + if (!allupper) + buf[0] = tolower(buf[0]); for (start = 0, olen = len; - !index("aeiouyAEIOUY", buf[start]) && start < olen;) { + !strchr("aeiouyAEIOUY", buf[start]) && start < olen;) { ch = buf[len++] = buf[start++]; if ((ch == 'q' || ch == 'Q') && start < olen && (buf[start] == 'u' || buf[start] == 'U')) buf[len++] = buf[start++]; } - (void)printf("%.*say", olen, buf + start); + if (firstupper) + buf[start] = toupper(buf[start]); + (void)printf("%.*s%s", olen, buf + start, allupper ? "AY" : "ay"); } void