ncurses 5.5
[ncurses.git] / test / worm.c
index 43a898f84d13602c57b337518811216a5b4825c0..3840a3630378dd45783f427fe7a930e6eaeec09f 100644 (file)
@@ -34,18 +34,15 @@ Options:
   traces will be dumped.  The program stops and waits for one character of
   input at the beginning and end of the interval.
 
-  $Id: worm.c,v 1.30 2000/04/15 17:51:56 tom Exp $
+  $Id: worm.c,v 1.39 2005/08/20 20:26:29 tom Exp $
 */
 
 #include <test.priv.h>
 
-#include <signal.h>
-
 static chtype flavor[] =
 {
     'O', '*', '#', '$', '%', '0', '@',
 };
-#define MAXWORMS       (sizeof(flavor)/sizeof(chtype))
 static const short xinc[] =
 {
     1, 1, 1, 0, -1, -1, -1, 0
@@ -63,7 +60,7 @@ static int length = 16, number = 3;
 static chtype trail = ' ';
 
 #ifdef TRACE
-int generation, trace_start, trace_end, singlestep;
+static int generation, trace_start, trace_end, singlestep;
 #endif /* TRACE */
 /* *INDENT-OFF* */
 static const struct options {
@@ -166,7 +163,7 @@ static RETSIGTYPE
 onsig(int sig GCC_UNUSED)
 {
     cleanup();
-    exit(EXIT_FAILURE);
+    ExitProgram(EXIT_FAILURE);
 }
 
 static float
@@ -188,6 +185,8 @@ main(int argc, char *argv[])
     short *ip;
     int last, bottom;
 
+    setlocale(LC_ALL, "");
+
     for (x = 1; x < argc; x++) {
        char *p;
        p = argv[x];
@@ -202,7 +201,7 @@ main(int argc, char *argv[])
                goto usage;
            if ((length = atoi(argv[x])) < 2 || length > 1024) {
                fprintf(stderr, "%s: Invalid length\n", *argv);
-               return EXIT_FAILURE;
+               ExitProgram(EXIT_FAILURE);
            }
            break;
        case 'n':
@@ -210,7 +209,7 @@ main(int argc, char *argv[])
                goto usage;
            if ((number = atoi(argv[x])) < 1 || number > 40) {
                fprintf(stderr, "%s: Invalid number of worms\n", *argv);
-               return EXIT_FAILURE;
+               ExitProgram(EXIT_FAILURE);
            }
            break;
        case 't':
@@ -231,8 +230,8 @@ main(int argc, char *argv[])
        default:
          usage:
            fprintf(stderr,
-               "usage: %s [-field] [-length #] [-number #] [-trail]\n", *argv);
-           return EXIT_FAILURE;
+                   "usage: %s [-field] [-length #] [-number #] [-trail]\n", *argv);
+           ExitProgram(EXIT_FAILURE);
        }
     }
 
@@ -251,7 +250,7 @@ main(int argc, char *argv[])
     if (has_colors()) {
        int bg = COLOR_BLACK;
        start_color();
-#ifdef HAVE_USE_DEFAULT_COLORS
+#if HAVE_USE_DEFAULT_COLORS
        if (use_default_colors() == OK)
            bg = -1;
 #endif
@@ -287,14 +286,14 @@ main(int argc, char *argv[])
        w->orientation = w->head = 0;
        if (!(ip = typeMalloc(short, (length + 1)))) {
            fprintf(stderr, "%s: out of memory\n", *argv);
-           return EXIT_FAILURE;
+           ExitProgram(EXIT_FAILURE);
        }
        w->xpos = ip;
        for (x = length; --x >= 0;)
            *ip++ = -1;
        if (!(ip = typeMalloc(short, (length + 1)))) {
            fprintf(stderr, "%s: out of memory\n", *argv);
-           return EXIT_FAILURE;
+           ExitProgram(EXIT_FAILURE);
        }
        w->ypos = ip;
        for (y = length; --y >= 0;)
@@ -362,11 +361,11 @@ main(int argc, char *argv[])
 #endif
            /*
             * Make it simple to put this into single-step mode, or resume
-            * normal operation -TD
+            * normal operation -T.Dickey
             */
            if (ch == 'q') {
                cleanup();
-               return (EXIT_SUCCESS);
+               ExitProgram(EXIT_SUCCESS);
            } else if (ch == 's') {
                nodelay(stdscr, FALSE);
            } else if (ch == ' ') {
@@ -378,7 +377,7 @@ main(int argc, char *argv[])
        for (n = 0, w = &worm[0]; n < number; n++, w++) {
            if ((x = w->xpos[h = w->head]) < 0) {
                move(y = w->ypos[h] = bottom, x = w->xpos[h] = 0);
-               addch(flavor[n % MAXWORMS]);
+               addch(flavor[n % SIZEOF(flavor)]);
                ref[y][x]++;
            } else {
                y = w->ypos[h];
@@ -401,14 +400,14 @@ main(int argc, char *argv[])
                }
            }
            op = &(x == 0 ? (y == 0 ? upleft : (y == bottom ? lowleft :
-                       left)) :
-               (x == last ? (y == 0 ? upright : (y == bottom ? lowright :
-                           right)) :
+                                               left)) :
+                  (x == last ? (y == 0 ? upright : (y == bottom ? lowright :
+                                                    right)) :
                    (y == 0 ? upper : (y == bottom ? lower : normal))))[w->orientation];
            switch (op->nopts) {
            case 0:
                cleanup();
-               return EXIT_SUCCESS;
+               ExitProgram(EXIT_SUCCESS);
            case 1:
                w->orientation = op->opts[0];
                break;
@@ -419,7 +418,7 @@ main(int argc, char *argv[])
 
            if (y < 0)
                y = 0;
-           addch(flavor[n % MAXWORMS]);
+           addch(flavor[n % SIZEOF(flavor)]);
            ref[w->ypos[h] = y][w->xpos[h] = x]++;
        }
        napms(10);