X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/9b85680687e77d758ed4d5f002375aa6f88dc803..d2c9435f39bf3cf490a36374e2dabc08a9c3128b:/ppt/ppt.c?ds=inline diff --git a/ppt/ppt.c b/ppt/ppt.c index 77086333..af0585ce 100644 --- a/ppt/ppt.c +++ b/ppt/ppt.c @@ -1,6 +1,8 @@ +/* $NetBSD: ppt.c,v 1.14 2002/11/26 23:07:36 atatat Exp $ */ + /* - * Copyright (c) 1988 Regents of the University of California. - * All rights reserved. + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,43 +33,112 @@ * SUCH DAMAGE. */ +#include #ifndef lint -char copyright[] = -"@(#) Copyright (c) 1988 Regents of the University of California.\n\ - All rights reserved.\n"; +__COPYRIGHT("@(#) Copyright (c) 1988, 1993\n\ + The Regents of the University of California. All rights reserved.\n"); #endif /* not lint */ #ifndef lint -static char sccsid[] = "@(#)ppt.c 5.4 (Berkeley) 6/1/90"; +#if 0 +static char sccsid[] = "@(#)ppt.c 8.1 (Berkeley) 5/31/93"; +#else +__RCSID("$NetBSD: ppt.c,v 1.14 2002/11/26 23:07:36 atatat Exp $"); +#endif #endif /* not lint */ +#include #include +#include +#include +#include + +#define EDGE "___________" -static void putppt(); + void usage __P((void)); + int main __P((int, char *[])); +static void putppt __P((int)); + int getppt __P((const char *)); + +void +usage(void) +{ + extern char *__progname; + fprintf(stderr, "usage: %s [-d] [string ...]\n", __progname); + exit(1); +} +int main(argc, argv) int argc; char **argv; { - register int c; - register char *p; - - (void) puts("___________"); - if (argc > 1) - while (p = *++argv) - for (; *p; ++p) - putppt((int)*p); - else while ((c = getchar()) != EOF) - putppt(c); - (void) puts("___________"); + char *p, buf[132]; + int c, start, neednl, dflag; + + /* Revoke setgid privileges */ + setgid(getgid()); + + dflag = 0; + while ((c = getopt(argc, argv, "dh")) != -1) + switch(c) { + case 'd': + dflag = 1; + break; + case 'h': + case '?': + default: + usage(); + } + argc -= optind; + argv += optind; + + if (dflag) { + if (argc > 0) + usage(); + + start = 0; + neednl = 0; + while (fgets(buf, sizeof(buf), stdin) != NULL) { + c = getppt(buf); + if (c < 0) { + if (start) { + /* lost sync? */ + if (neednl) + putchar('\n'); + exit(0); + } else + continue; + } + start = 1; + putchar(c); + neednl = (c != '\n'); + } + if (!feof(stdin)) + err(1, "fgets"); + if (neednl) + putchar('\n'); + } else { + (void) puts(EDGE); + if (argc > 0) + while ((p = *argv++)) { + for (; *p; ++p) + putppt((int)*p); + if ((*(argv))) + putppt((int)' '); + } + else while ((c = getchar()) != EOF) + putppt(c); + (void) puts(EDGE); + } exit(0); } static void putppt(c) - register int c; + int c; { - register int i; + int i; (void) putchar('|'); for (i = 7; i >= 0; i--) { @@ -81,3 +152,33 @@ putppt(c) (void) putchar('|'); (void) putchar('\n'); } + +int +getppt(const char *buf) +{ + const char *p = strchr(buf, '.'); + int c; + + if (p == NULL) + return (-1); + + c = 0; + if (p[ 3] != ' ') + c |= 0001; + if (p[ 2] != ' ') + c |= 0002; + if (p[ 1] != ' ') + c |= 0004; + if (p[-1] != ' ') + c |= 0010; + if (p[-2] != ' ') + c |= 0020; + if (p[-3] != ' ') + c |= 0040; + if (p[-4] != ' ') + c |= 0100; + if (p[-5] != ' ') + c |= 0200; + + return (c); +}