]> Zhao Yanbai Git Server - minix.git/commitdiff
Importing games/morse
authorThomas Cort <tcort@minix3.org>
Sun, 16 Mar 2014 14:17:38 +0000 (10:17 -0400)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:17 +0000 (17:05 +0200)
No Minix specific changes needed.

Change-Id: Ie0d427d39a5392c0c0f2c3856ba36286957d21a4

distrib/sets/lists/minix/mi
games/Makefile
games/morse/Makefile [new file with mode: 0644]
games/morse/morse.c [new file with mode: 0644]
releasetools/nbsd_ports

index a9be12b0336d7c87f36fc3ad4e2ea31078adf70b..323c421d4199d7428c49716a2deba0f711e773f2 100644 (file)
 ./usr/games/factor                     minix-sys
 ./usr/games/fortune                    minix-sys
 ./usr/games/hide                       minix-sys
+./usr/games/morse                      minix-sys
 ./usr/games/pig                                minix-sys
 ./usr/games/primes                     minix-sys
 ./usr/games/strfile                    minix-sys
index 4baa12dd75a4b0e3aaa16022bc881d3a8f510051..99b416b978c31c7cbea489c276788088a3f8e303 100644 (file)
@@ -11,7 +11,7 @@ SUBDIR=       adventure \
        \
        \
        factor fortune \
-       \
+       morse \
        pig primes
 
 .if !defined(__MINIX)
diff --git a/games/morse/Makefile b/games/morse/Makefile
new file mode 100644 (file)
index 0000000..390a224
--- /dev/null
@@ -0,0 +1,10 @@
+#      $NetBSD: Makefile,v 1.6 2002/09/18 06:16:40 lukem Exp $
+#      @(#)Makefile    8.1 (Berkeley) 5/31/93
+
+NOMAN=         # defined
+
+PROG=          morse
+HIDEGAME=      hidegame
+
+.include <bsd.prog.mk>
+
diff --git a/games/morse/morse.c b/games/morse/morse.c
new file mode 100644 (file)
index 0000000..d5ba328
--- /dev/null
@@ -0,0 +1,261 @@
+/*     $NetBSD: morse.c,v 1.17 2012/06/19 05:46:08 dholland Exp $      */
+
+/*
+ * 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
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 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. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1988, 1993\
+ The Regents of the University of California.  All rights reserved.");
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)morse.c    8.1 (Berkeley) 5/31/93";
+#else
+__RCSID("$NetBSD: morse.c,v 1.17 2012/06/19 05:46:08 dholland Exp $");
+#endif
+#endif /* not lint */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+static const char
+       *const digit[] = {
+       "-----",
+       ".----",
+       "..---",
+       "...--",
+       "....-",
+       ".....",
+       "-....",
+       "--...",
+       "---..",
+       "----.",
+},
+       *const alph[] = {
+       ".-",
+       "-...",
+       "-.-.",
+       "-..",
+       ".",
+       "..-.",
+       "--.",
+       "....",
+       "..",
+       ".---",
+       "-.-",
+       ".-..",
+       "--",
+       "-.",
+       "---",
+       ".--.",
+       "--.-",
+       ".-.",
+       "...",
+       "-",
+       "..-",
+       "...-",
+       ".--",
+       "-..-",
+       "-.--",
+       "--..",
+};
+
+static const struct punc {
+       char c;
+       const char *morse;
+} other[] = {
+       { '.', ".-.-.-" },
+       { ',', "--..--" },
+       { ':', "---..." },
+       { '?', "..--.." },
+       { '\'', ".----." },
+       { '-', "-....-" },
+       { '/', "-..-." },
+       { '(', "-.--." },
+       { ')', "-.--.-" },
+       { '"', ".-..-." },
+       { '=', "-...-" },
+       { '+', ".-.-." },
+       { '\0', NULL }
+};
+
+int    main(int, char *[]);
+static void morse(int);
+static void decode(const char *);
+static void show(const char *);
+
+static int sflag;
+static int dflag;
+
+int
+main(int argc, char **argv)
+{
+       int ch;
+       char *p;
+
+       /* Revoke setgid privileges */
+       setgid(getgid());
+
+       while ((ch = getopt(argc, argv, "ds")) != -1)
+               switch((char)ch) {
+               case 'd':
+                       dflag = 1;
+                       break;
+               case 's':
+                       sflag = 1;
+                       break;
+               case '?':
+               default:
+                       fprintf(stderr, "usage: morse [-ds] [string ...]\n");
+                       exit(1);
+               }
+       argc -= optind;
+       argv += optind;
+
+       if (dflag) {
+               if (*argv) {
+                       do {
+                               decode(*argv);
+                       } while (*++argv);
+               } else {
+                       char foo[10];   /* All morse chars shorter than this */
+                       int is_blank, i;
+
+                       i = 0;
+                       is_blank = 0;
+                       while ((ch = getchar()) != EOF) {
+                               if (ch == '-' || ch == '.') {
+                                       foo[i++] = ch;
+                                       if (i == 10) {
+                                               /* overrun means gibberish--print 'x' and
+                                                * advance */
+                                               i = 0;
+                                               putchar('x');
+                                               while ((ch = getchar()) != EOF &&
+                                                   (ch == '.' || ch == '-'))
+                                                       ;
+                                               is_blank = 1;
+                                       }
+                               } else if (i) {
+                                       foo[i] = '\0';
+                                       decode(foo);
+                                       i = 0;
+                                       is_blank = 0;
+                               } else if (isspace(ch)) {
+                                       if (is_blank) {
+                                               /* print whitespace for each double blank */
+                                               putchar(' ');
+                                               is_blank = 0;
+                                       } else
+                                               is_blank = 1;
+                               }
+                       }
+               }
+               putchar('\n');
+       } else {
+               if (*argv)
+                       do {
+                               for (p = *argv; *p; ++p)
+                                       morse((int)*p);
+                               show("");
+                       } while (*++argv);
+               else while ((ch = getchar()) != EOF)
+                       morse(ch);
+               show("...-.-"); /* SK */
+       }
+       
+       return 0;
+}
+
+void
+decode(const char *s)
+{
+       int i;
+       
+       for (i = 0; i < 10; i++)
+               if (strcmp(digit[i], s) == 0) {
+                       putchar('0' + i);
+                       return;
+               }
+       
+       for (i = 0; i < 26; i++)
+               if (strcmp(alph[i], s) == 0) {
+                       putchar('A' + i);
+                       return;
+               }
+       i = 0;
+       while (other[i].c) {
+               if (strcmp(other[i].morse, s) == 0) {
+                       putchar(other[i].c);
+                       return;
+               }
+               i++;
+       }
+       if (strcmp("...-.-", s) == 0)
+               return;
+       putchar('x');   /* line noise */
+}
+
+void
+morse(int c)
+{
+       int i;
+
+       if (isalpha(c))
+               show(alph[c - (isupper(c) ? 'A' : 'a')]);
+       else if (isdigit(c))
+               show(digit[c - '0']);
+       else if (isspace(c))
+               show("");  /* could show BT for a pause */
+       else {
+               i = 0;
+               while (other[i].c) {
+                       if (other[i].c == c) {
+                               show(other[i].morse);
+                               break;
+                       }
+                       i++;
+               }
+       }
+}
+
+void
+show(const char *s)
+{
+       if (sflag)
+               printf(" %s", s);
+       else for (; *s; ++s)
+               printf(" %s", *s == '.' ? "dit" : "daw");
+       printf("\n");
+}
index 29df2f85c3753551e36ef4c2fd6ef3dd1a9891dd..47d3371dcb32ebcb3b91b15a8012463c9078ff5d 100644 (file)
@@ -73,6 +73,7 @@
 2013/12/1 12:00:00,games/fortune
 2013/12/1 12:00:00,games/Makefile
 2013/12/1 12:00:00,games/Makefile.inc
+2013/12/1 12:00:00,games/morse
 2013/12/1 12:00:00,games/pig
 2013/12/1 12:00:00,games/primes
 2013/12/1 12:00:00,gnu/dist/texinfo