]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - bcd/bcd.c
ANSIfy
[bsdgames-darwin.git] / bcd / bcd.c
index 9da41dcedd789719eb718fbd02b606ca333da246..9f5dce7ac469b9bf52ed427585fd1a5f9e78c15d 100644 (file)
--- a/bcd/bcd.c
+++ b/bcd/bcd.c
@@ -1,9 +1,11 @@
+/*     $NetBSD: bcd.c,v 1.17 2009/08/12 05:21:28 dholland Exp $        */
+
 /*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * This code is derived from software contributed to Berkeley by
- * Steve Hayman of the Indiana University Computer Science Dept..
+ * Steve Hayman of the Indiana University Computer Science Dept.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1989 The Regents of the University of California.\n\
- All rights reserved.\n";
+__COPYRIGHT("@(#) Copyright (c) 1989, 1993\
+ The Regents of the University of California.  All rights reserved.");
 #endif /* not lint */
 
 #ifndef lint
-/*static char sccsid[] = "from: @(#)bcd.c      4.4 (Berkeley) 6/1/90";*/
-static char rcsid[] = "$Id: bcd.c,v 1.2 1993/08/01 18:55:42 mycroft Exp $";
+#if 0
+static char sccsid[] = "@(#)bcd.c      8.2 (Berkeley) 3/20/94";
+#else
+__RCSID("$NetBSD: bcd.c,v 1.17 2009/08/12 05:21:28 dholland Exp $");
+#endif
 #endif /* not lint */
 
 /*
@@ -61,13 +62,29 @@ static char rcsid[] = "$Id: bcd.c,v 1.2 1993/08/01 18:55:42 mycroft Exp $";
  * Steve Hayman
  * sahayman@iuvax.cs.indiana.edu
  * 1989 11 30
+ *
+ *
+ * I found an error in the table. The same error is found in the SunOS 4.1.1
+ * version of bcd. It has apparently been around a long time. The error caused
+ * 'Q' and 'R' to have the same punch code. I only noticed the error due to
+ * someone pointing it out to me when the program was used to print a cover
+ * for an APA!  The table was wrong in 4 places. The other error was masked
+ * by the fact that the input is converted to upper case before lookup.
+ *
+ * Dyane Bruce
+ * db@diana.ocunix.on.ca
+ * Nov 5, 1993
  */
 
 #include <sys/types.h>
+
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <ctype.h>
+#include <unistd.h>
 
-u_short holes[256] = {
+static const u_short holes[256] = {
     0x0,        0x0,     0x0,     0x0,     0x0,     0x0,     0x0,     0x0,
     0x0,        0x0,     0x0,     0x0,     0x0,     0x0,     0x0,     0x0,
     0x0,        0x0,     0x0,     0x0,     0x0,     0x0,     0x0,     0x0,
@@ -78,11 +95,11 @@ u_short holes[256] = {
     0x002,      0x001,   0x012,   0x40a,   0x80a,   0x212,   0x00a,   0x006,
     0x022,      0x900,   0x880,   0x840,   0x820,   0x810,   0x808,   0x804,
     0x802,      0x801,   0x500,   0x480,   0x440,   0x420,   0x410,   0x408,
-    0x404,      0x402,   0x402,   0x280,   0x240,   0x220,   0x210,   0x208,
+    0x404,      0x402,   0x401,   0x280,   0x240,   0x220,   0x210,   0x208,
     0x204,      0x202,   0x201,   0x082,   0x822,   0x600,   0x282,   0x30f,
     0x900,      0x880,   0x840,   0x820,   0x810,   0x808,   0x804,   0x802,
     0x801,      0x500,   0x480,   0x440,   0x420,   0x410,   0x408,   0x404,
-    0x402,      0x402,   0x280,   0x240,   0x220,   0x210,   0x208,   0x204,
+    0x402,      0x401,   0x280,   0x240,   0x220,   0x210,   0x208,   0x204,
     0x202,      0x201,   0x082,   0x806,   0x822,   0x600,   0x282,   0x0,
     0x0,        0x0,     0x0,     0x0,     0x0,     0x0,     0x0,     0x0,
     0x0,        0x0,     0x0,     0x0,     0x0,     0x0,     0x0,     0x0,
@@ -94,11 +111,11 @@ u_short holes[256] = {
     0x001,      0x012,   0x40a,   0x80a,   0x212,   0x00a,   0x006,   0x022,
     0x900,      0x880,   0x840,   0x820,   0x810,   0x808,   0x804,   0x802,
     0x801,      0x500,   0x480,   0x440,   0x420,   0x410,   0x408,   0x404,
-    0x402,      0x402,   0x280,   0x240,   0x220,   0x210,   0x208,   0x204,
+    0x402,      0x401,   0x280,   0x240,   0x220,   0x210,   0x208,   0x204,
     0x202,      0x201,   0x082,   0x806,   0x822,   0x600,   0x282,   0x30f,
     0x900,      0x880,   0x840,   0x820,   0x810,   0x808,   0x804,   0x802,
     0x801,      0x500,   0x480,   0x440,   0x420,   0x410,   0x408,   0x404,
-    0x402,      0x402,   0x280,   0x240,   0x220,   0x210,   0x208,   0x204,
+    0x402,      0x401,   0x280,   0x240,   0x220,   0x210,   0x208,   0x204,
     0x202,      0x201,   0x082,   0x806,   0x822,   0x600,   0x282,   0x0
 };
 
@@ -107,12 +124,16 @@ u_short holes[256] = {
  */
 #define        bit(w,i)        ((w)&(1<<(i)))
 
-main(argc, argv)
-       int argc;
-       char **argv;
+static void printcard(char *);
+
+int
+main(int argc, char **argv)
 {
        char cardline[80];
 
+       /* revoke setgid privileges */
+       setgid(getgid());
+
        /*
         * The original bcd prompts with a "%" when reading from stdin,
         * but this seems kind of silly.  So this one doesn't.
@@ -129,16 +150,15 @@ main(argc, argv)
 
 #define        COLUMNS 48
 
-printcard(str)
-       register char *str;
+static void
+printcard(char *str)
 {
-       static char rowchars[] = "   123456789";
-       register int i, row;
-       register char *p;
-       char *index();
+       static const char rowchars[] = "   123456789";
+       int i, row;
+       char *p;
 
        /* ruthlessly remove newlines and truncate at 48 characters. */
-       if ((p = index(str, '\n')))
+       if ((p = strchr(str, '\n')))
                *p = '\0';
 
        if (strlen(str) > COLUMNS)
@@ -146,8 +166,8 @@ printcard(str)
 
        /* make string upper case. */
        for (p = str; *p; ++p)
-               if (isascii(*p) && islower(*p))
-                       *p = toupper(*p);
+               if (isascii((unsigned char)*p) && islower((unsigned char)*p))
+                       *p = toupper((unsigned char) *p);
 
         /* top of card */
        putchar(' ');
@@ -162,7 +182,7 @@ printcard(str)
        p = str;
        putchar('/');
        for (i = 1; *p; i++, p++)
-               if (holes[*p])
+               if (holes[(unsigned char)*p])
                        putchar(*p);
                else
                        putchar(' ');
@@ -180,7 +200,7 @@ printcard(str)
        for (row = 0; row <= 11; ++row) {
                putchar('|');
                for (i = 0, p = str; *p; i++, p++) {
-                       if (bit(holes[*p], 11 - row))
+                       if (bit(holes[(unsigned char)*p], 11 - row))
                                putchar(']');
                        else
                                putchar(rowchars[row]);