diff --git a/test/inch_wide.c b/test/inch_wide.c
index 3d31f17..7b838d1 100644
--- a/test/inch_wide.c
+++ b/test/inch_wide.c
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2007,2010 Free Software Foundation, Inc.                   *
+ * Copyright 2019-2020,2022 Thomas E. Dickey                                *
+ * Copyright 2007-2010,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            *
@@ -26,7 +27,7 @@
  * authorization.                                                           *
  ****************************************************************************/
 /*
- * $Id: inch_wide.c,v 1.7 2010/05/01 19:13:46 tom Exp $
+ * $Id: inch_wide.c,v 1.13 2022/12/10 23:55:34 tom Exp $
  */
 /*
        int in_wch(cchar_t *wcval);
@@ -44,6 +45,7 @@
 */
 
 #include <test.priv.h>
+#include <popup_msg.h>
 
 #if USE_WIDEC_SUPPORT
 
@@ -59,13 +61,24 @@
 static int
 test_inchs(int level, char **argv, WINDOW *chrwin, WINDOW *strwin)
 {
+    static const char *help[] =
+    {
+	"Test input from screen using inch(), etc., in a moveable viewport.",
+	"",
+	"Commands:",
+	" ESC/^Q                   - quit",
+	" h,j,k,l (and arrow-keys) - move viewport",
+	" w                        - recur to new window",
+	"                            for next input file",
+	0
+    };
+
     WINDOW *txtbox = 0;
     WINDOW *txtwin = 0;
     FILE *fp;
     int j;
     int txt_x = 0, txt_y = 0;
     int base_y;
-    int limit;
     cchar_t ch;
     cchar_t text[MAX_COLS];
 
@@ -109,6 +122,8 @@
     }
 
     while (!Quit(j = mvwgetch(txtwin, txt_y, txt_x))) {
+	int limit;
+
 	switch (j) {
 	case KEY_DOWN:
 	case 'j':
@@ -148,6 +163,9 @@
 		wnoutrefresh(txtwin);
 	    }
 	    break;
+	case HELP_KEY_1:
+	    popup_msg(txtwin, help);
+	    break;
 	default:
 	    beep();
 	    break;
@@ -241,19 +259,49 @@
     return TRUE;
 }
 
+static void
+usage(int ok)
+{
+    static const char *msg[] =
+    {
+	"Usage: inch_wide [options] [file1 [...]]"
+	,""
+	,USAGE_COMMON
+    };
+    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[])
 {
     WINDOW *chrbox;
     WINDOW *chrwin;
     WINDOW *strwin;
+    int ch;
+
+    while ((ch = getopt(argc, argv, OPTS_COMMON)) != -1) {
+	switch (ch) {
+	case OPTS_VERSION:
+	    show_version(argv);
+	    ExitProgram(EXIT_SUCCESS);
+	default:
+	    usage(ch == OPTS_USAGE);
+	    /* NOTREACHED */
+	}
+    }
 
     setlocale(LC_ALL, "");
 
-    if (argc < 2) {
-	fprintf(stderr, "usage: %s file\n", argv[0]);
-	return EXIT_FAILURE;
-    }
+    if (optind + 1 > argc)
+	usage(FALSE);
 
     initscr();
 
@@ -264,7 +312,7 @@
     chrwin = derwin(chrbox, 1, COLS - 2, 1, 1);
     strwin = derwin(chrbox, 4, COLS - 2, 2, 1);
 
-    test_inchs(1, argv, chrwin, strwin);
+    test_inchs(optind, argv, chrwin, strwin);
 
     endwin();
     ExitProgram(EXIT_SUCCESS);
