]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - test/worm.c
ncurses 5.5
[ncurses.git] / test / worm.c
index 5f0ab5dc4a5abbcadf329330c65e80b6f772eaf3..3840a3630378dd45783f427fe7a930e6eaeec09f 100644 (file)
@@ -34,21 +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.
 
   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.26 1999/10/23 01:31:40 tom Exp $
+  $Id: worm.c,v 1.39 2005/08/20 20:26:29 tom Exp $
 */
 
 #include <test.priv.h>
 
 */
 
 #include <test.priv.h>
 
-#include <signal.h>
-
-#define typeAlloc(type,n) (type *) malloc(n * sizeof(type))
-#define typeRealloc(type,n,p) (type *) realloc(p, n * sizeof(type))
-
 static chtype flavor[] =
 {
     'O', '*', '#', '$', '%', '0', '@',
 };
 static chtype flavor[] =
 {
     'O', '*', '#', '$', '%', '0', '@',
 };
-#define MAXWORMS       (sizeof(flavor)/sizeof(chtype))
 static const short xinc[] =
 {
     1, 1, 1, 0, -1, -1, -1, 0
 static const short xinc[] =
 {
     1, 1, 1, 0, -1, -1, -1, 0
@@ -66,7 +60,7 @@ static int length = 16, number = 3;
 static chtype trail = ' ';
 
 #ifdef TRACE
 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 {
 #endif /* TRACE */
 /* *INDENT-OFF* */
 static const struct options {
@@ -169,7 +163,7 @@ static RETSIGTYPE
 onsig(int sig GCC_UNUSED)
 {
     cleanup();
 onsig(int sig GCC_UNUSED)
 {
     cleanup();
-    exit(EXIT_FAILURE);
+    ExitProgram(EXIT_FAILURE);
 }
 
 static float
 }
 
 static float
@@ -185,13 +179,14 @@ main(int argc, char *argv[])
     short **ref;
     int x, y;
     int n;
     short **ref;
     int x, y;
     int n;
-    int ch;
     struct worm *w;
     const struct options *op;
     int h;
     short *ip;
     int last, bottom;
 
     struct worm *w;
     const struct options *op;
     int h;
     short *ip;
     int last, bottom;
 
+    setlocale(LC_ALL, "");
+
     for (x = 1; x < argc; x++) {
        char *p;
        p = argv[x];
     for (x = 1; x < argc; x++) {
        char *p;
        p = argv[x];
@@ -206,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);
                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':
            }
            break;
        case 'n':
@@ -214,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);
                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':
            }
            break;
        case 't':
@@ -235,8 +230,8 @@ main(int argc, char *argv[])
        default:
          usage:
            fprintf(stderr,
        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);
        }
     }
 
        }
     }
 
@@ -255,7 +250,7 @@ main(int argc, char *argv[])
     if (has_colors()) {
        int bg = COLOR_BLACK;
        start_color();
     if (has_colors()) {
        int bg = COLOR_BLACK;
        start_color();
-#ifdef NCURSES_VERSION
+#if HAVE_USE_DEFAULT_COLORS
        if (use_default_colors() == OK)
            bg = -1;
 #endif
        if (use_default_colors() == OK)
            bg = -1;
 #endif
@@ -274,9 +269,9 @@ main(int argc, char *argv[])
     }
 #endif /* A_COLOR */
 
     }
 #endif /* A_COLOR */
 
-    ref = typeAlloc(short *, LINES);
+    ref = typeMalloc(short *, LINES);
     for (y = 0; y < LINES; y++) {
     for (y = 0; y < LINES; y++) {
-       ref[y] = typeAlloc(short, COLS);
+       ref[y] = typeMalloc(short, COLS);
        for (x = 0; x < COLS; x++) {
            ref[y][x] = 0;
        }
        for (x = 0; x < COLS; x++) {
            ref[y][x] = 0;
        }
@@ -289,16 +284,16 @@ main(int argc, char *argv[])
 
     for (n = number, w = &worm[0]; --n >= 0; w++) {
        w->orientation = w->head = 0;
 
     for (n = number, w = &worm[0]; --n >= 0; w++) {
        w->orientation = w->head = 0;
-       if (!(ip = typeAlloc(short, (length + 1)))) {
+       if (!(ip = typeMalloc(short, (length + 1)))) {
            fprintf(stderr, "%s: out of memory\n", *argv);
            fprintf(stderr, "%s: out of memory\n", *argv);
-           return EXIT_FAILURE;
+           ExitProgram(EXIT_FAILURE);
        }
        w->xpos = ip;
        for (x = length; --x >= 0;)
            *ip++ = -1;
        }
        w->xpos = ip;
        for (x = length; --x >= 0;)
            *ip++ = -1;
-       if (!(ip = typeAlloc(short, (length + 1)))) {
+       if (!(ip = typeMalloc(short, (length + 1)))) {
            fprintf(stderr, "%s: out of memory\n", *argv);
            fprintf(stderr, "%s: out of memory\n", *argv);
-           return EXIT_FAILURE;
+           ExitProgram(EXIT_FAILURE);
        }
        w->ypos = ip;
        for (y = length; --y >= 0;)
        }
        w->ypos = ip;
        for (y = length; --y >= 0;)
@@ -338,6 +333,8 @@ main(int argc, char *argv[])
            generation++;
        }
 #else
            generation++;
        }
 #else
+       int ch;
+
        if ((ch = getch()) > 0) {
 #ifdef KEY_RESIZE
            if (ch == KEY_RESIZE) {
        if ((ch = getch()) > 0) {
 #ifdef KEY_RESIZE
            if (ch == KEY_RESIZE) {
@@ -350,11 +347,11 @@ main(int argc, char *argv[])
                    last = COLS - 1;
                }
                if (bottom != LINES - 1) {
                    last = COLS - 1;
                }
                if (bottom != LINES - 1) {
-                   ref = typeRealloc(short *, LINES, ref);
-                   for (y = COLS; y <= bottom; y++)
+                   for (y = LINES; y <= bottom; y++)
                        free(ref[y]);
                        free(ref[y]);
+                   ref = typeRealloc(short *, LINES, ref);
                    for (y = bottom + 1; y < LINES; y++) {
                    for (y = bottom + 1; y < LINES; y++) {
-                       ref[y] = typeAlloc(short, COLS);
+                       ref[y] = typeMalloc(short, COLS);
                        for (x = 0; x < COLS; x++)
                            ref[y][x] = 0;
                    }
                        for (x = 0; x < COLS; x++)
                            ref[y][x] = 0;
                    }
@@ -364,11 +361,11 @@ main(int argc, char *argv[])
 #endif
            /*
             * Make it simple to put this into single-step mode, or resume
 #endif
            /*
             * Make it simple to put this into single-step mode, or resume
-            * normal operation -TD
+            * normal operation -T.Dickey
             */
            if (ch == 'q') {
                cleanup();
             */
            if (ch == 'q') {
                cleanup();
-               return (EXIT_SUCCESS);
+               ExitProgram(EXIT_SUCCESS);
            } else if (ch == 's') {
                nodelay(stdscr, FALSE);
            } else if (ch == ' ') {
            } else if (ch == 's') {
                nodelay(stdscr, FALSE);
            } else if (ch == ' ') {
@@ -380,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);
        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];
                ref[y][x]++;
            } else {
                y = w->ypos[h];
@@ -403,14 +400,14 @@ main(int argc, char *argv[])
                }
            }
            op = &(x == 0 ? (y == 0 ? upleft : (y == bottom ? lowleft :
                }
            }
            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();
                    (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;
            case 1:
                w->orientation = op->opts[0];
                break;
@@ -421,7 +418,7 @@ main(int argc, char *argv[])
 
            if (y < 0)
                y = 0;
 
            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);
            ref[w->ypos[h] = y][w->xpos[h] = x]++;
        }
        napms(10);