diff --git a/test/dots_curses.c b/test/dots_curses.c
index c344280..1a55321 100644
--- a/test/dots_curses.c
+++ b/test/dots_curses.c
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2014 Free Software Foundation, Inc.                        *
+ * Copyright 2018-2022,2023 Thomas E. Dickey                                *
+ * Copyright 2014,2017 Free Software Foundation, Inc.                       *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -29,20 +30,18 @@
 /*
  * Author: Thomas E. Dickey
  *
- * $Id: dots_curses.c,v 1.3 2014/08/09 22:28:42 tom Exp $
+ * $Id: dots_curses.c,v 1.25 2023/01/07 17:21:48 tom Exp $
  *
  * A simple demo of the curses interface used for comparison with termcap.
  */
 #include <test.priv.h>
 
-#if !defined(__MINGW32__)
+#if !defined(_NC_WINDOWS)
 #include <sys/time.h>
 #endif
 
 #include <time.h>
 
-#define valid(s) ((s != 0) && s != (char *)-1)
-
 static bool interrupted = FALSE;
 static long total_chars = 0;
 static time_t started;
@@ -52,9 +51,10 @@
 {
     endwin();
 
-    printf("\n\n%ld total chars, rate %.2f/sec\n",
-	   total_chars,
-	   ((double) (total_chars) / (double) (time((time_t *) 0) - started)));
+    fflush(stdout);
+    fprintf(stderr, "\n\n%ld total cells, rate %.2f/sec\n",
+	    total_chars,
+	    ((double) (total_chars) / (double) (time((time_t *) 0) - started)));
 }
 
 static void
@@ -86,51 +86,136 @@
     }
 }
 
-int
-main(int argc GCC_UNUSED,
-     char *argv[]GCC_UNUSED)
+static void
+usage(int ok)
 {
-    int x, y, z, p;
+    static const char *msg[] =
+    {
+	"Usage: dots_curses [options]"
+	,""
+	,USAGE_COMMON
+	,"Options:"
+	," -T TERM  override $TERM"
+#if HAVE_USE_DEFAULT_COLORS
+	," -d       invoke use_default_colors()"
+#endif
+#if HAVE_USE_ENV
+	," -e       allow environment $LINES / $COLUMNS"
+#endif
+	," -m SIZE  set margin (default: 2)"
+	," -r SECS  self-interrupt/exit after specified number of seconds"
+	," -s MSECS delay 1% of the time (default: 1 msecs)"
+    };
+    size_t n;
+
+    for (n = 0; n < SIZEOF(msg); n++)
+	fprintf(stderr, "%s\n", msg[n]);
+
+    ExitProgram(ok ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+/* *INDENT-OFF* */
+VERSION_COMMON()
+/* *INDENT-ON* */
+
+int
+main(int argc, char *argv[])
+{
+    int ch;
     int fg, bg;
     double r;
     double c;
+#if HAVE_USE_DEFAULT_COLORS
+    bool d_option = FALSE;
+#endif
+    int m_option = 2;
+    int r_option = 0;
+    int s_option = 1;
+    size_t need;
+    char *my_env;
 
-    CATCHALL(onsig);
+    while ((ch = getopt(argc, argv, OPTS_COMMON "T:dem:r:s:")) != -1) {
+	switch (ch) {
+	case 'T':
+	    need = 6 + strlen(optarg);
+	    if ((my_env = malloc(need)) != NULL) {
+		_nc_SPRINTF(my_env, _nc_SLIMIT(need) "TERM=%s", optarg);
+		putenv(my_env);
+	    }
+	    break;
+#if HAVE_USE_DEFAULT_COLORS
+	case 'd':
+	    d_option = TRUE;
+	    break;
+#endif
+#if HAVE_USE_ENV
+	case 'e':
+	    use_env(TRUE);
+	    break;
+#endif
+	case 'm':
+	    m_option = atoi(optarg);
+	    break;
+	case 'r':
+	    r_option = atoi(optarg);
+	    break;
+	case 's':
+	    s_option = atoi(optarg);
+	    break;
+	case OPTS_VERSION:
+	    show_version(argv);
+	    ExitProgram(EXIT_SUCCESS);
+	default:
+	    usage(ch == OPTS_USAGE);
+	    /* NOTREACHED */
+	}
+    }
 
     srand((unsigned) time(0));
 
-    initscr();
+    SetupAlarm(r_option);
+    InitAndCatch(initscr(), onsig);
+
     if (has_colors()) {
 	start_color();
+#if HAVE_USE_DEFAULT_COLORS
+	if (d_option)
+	    use_default_colors();
+#endif
 	for (fg = 0; fg < COLORS; fg++) {
 	    for (bg = 0; bg < COLORS; bg++) {
-		int pair = mypair(fg, bg);
+		int pair;
+		if (interrupted) {
+		    cleanup();
+		    ExitProgram(EXIT_FAILURE);
+		}
+		pair = mypair(fg, bg);
 		if (pair > 0)
 		    init_pair((short) pair, (short) fg, (short) bg);
 	    }
 	}
     }
 
-    r = (double) (LINES - 4);
-    c = (double) (COLS - 4);
+    r = (double) (LINES - (m_option * 2));
+    c = (double) (COLS - (m_option * 2));
     started = time((time_t *) 0);
 
     fg = COLOR_WHITE;
     bg = COLOR_BLACK;
     while (!interrupted) {
-	x = (int) (c * ranf()) + 2;
-	y = (int) (r * ranf()) + 2;
-	p = (ranf() > 0.9) ? '*' : ' ';
+	int x = (int) (c * ranf()) + m_option;
+	int y = (int) (r * ranf()) + m_option;
+	int p = (ranf() > 0.9) ? '*' : ' ';
 
 	move(y, x);
 	if (has_colors()) {
-	    z = (int) (ranf() * COLORS);
+	    int z = (int) (ranf() * COLORS);
 	    if (ranf() > 0.01) {
 		set_colors(fg = z, bg);
 		attron(COLOR_PAIR(mypair(fg, bg)));
 	    } else {
 		set_colors(fg, bg = z);
-		napms(1);
+		if (s_option)
+		    napms(s_option);
 	    }
 	} else {
 	    if (ranf() <= 0.01) {
@@ -139,10 +224,11 @@
 		} else {
 		    attroff(A_REVERSE);
 		}
-		napms(1);
+		if (s_option)
+		    napms(s_option);
 	    }
 	}
-	addch((chtype) p);
+	AddCh(p);
 	refresh();
 	++total_chars;
     }
