]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - test/view.c
ncurses 6.1 - patch 20190126
[ncurses.git] / test / view.c
index aa06a3e8d6bd3e3bd1747806acef62d3d9db79bb..2772a2773dde3a74645ff8b72ae3e31def214974 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2017,2019 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            *
@@ -51,7 +51,7 @@
  * scroll operation worked, and the refresh() code only had to do a
  * partial repaint.
  *
- * $Id: view.c,v 1.129 2017/10/22 00:49:23 tom Exp $
+ * $Id: view.c,v 1.136 2019/01/27 00:52:06 tom Exp $
  */
 
 #include <test.priv.h>
 #include <sys/stat.h>
 #include <time.h>
 
-#undef CTRL                    /* conflict on AIX 5.2 with <sys/ioctl.h> */
-
 static void finish(int sig) GCC_NORETURN;
 
 #define my_pair 1
 
-#undef CTRL
-#define CTRL(x)        ((x) & 0x1f)
-
 static int shift = 0;
 static bool try_color = FALSE;
 
@@ -138,14 +133,19 @@ static void
 show_all(const char *tag)
 {
     int i;
+    int digits;
     char temp[BUFSIZ];
     NCURSES_CH_T *s;
     time_t this_time;
 
+    for (digits = 1, i = num_lines; i > 0; i /= 10) {
+       ++digits;
+    }
+
     _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp))
                "view %.*s", (int) strlen(tag), tag);
     i = (int) strlen(temp);
-    _nc_SPRINTF(temp + i, _nc_SLIMIT(sizeof(temp) - i)
+    _nc_SPRINTF(temp + i, _nc_SLIMIT(sizeof(temp) - (size_t) i)
                " %.*s", (int) sizeof(temp) - i - 2, fname);
     move(0, 0);
     printw("%.*s", COLS, temp);
@@ -173,7 +173,7 @@ show_all(const char *tag)
            break;
        }
        move(i, 0);
-       printw("%3d:", actual);
+       printw("%*d:", digits, actual);
        clrtoeol();
        if ((s = lptr[i - 1]) == 0) {
            continue;
@@ -282,7 +282,7 @@ read_file(const char *filename)
     }
 
 #if USE_WIDEC_SUPPORT
-    if (!memcmp("", my_blob, 3)) {
+    if (!memcmp("\357\273\277", my_blob, 3)) {
        char *s = my_blob + 3;
        char *d = my_blob;
        Trace(("trim BOM"));
@@ -347,7 +347,8 @@ read_file(const char *filename)
        if (y)
            x = width - 1;
        wmove(my_win, 0, 0);
-       if ((vec_lines[k] = typeCalloc(NCURSES_CH_T, (size_t) x + 1)) == 0)
+       /* "x + 1" works with standard curses; some implementations are buggy */
+       if ((vec_lines[k] = typeCalloc(NCURSES_CH_T, x + width + 1)) == 0)
            failed("cannot allocate line-vector #3");
 #if USE_WIDEC_SUPPORT
        win_wchnstr(my_win, vec_lines[k], x);
@@ -398,6 +399,7 @@ main(int argc, char *argv[])
        "  n,<Down>       - scroll the viewport down by one row",
        "  l,<Left>       - scroll the viewport left by one column",
        "  r,<Right>      - scroll the viewport right by one column",
+       "  <,>            - scroll the viewport left/right by 8 columns",
        "",
        "  h,<Home>       - scroll the viewport to top of file",
        "  ^F,<PageDn>    - scroll to the next page",
@@ -425,7 +427,7 @@ main(int argc, char *argv[])
 
     setlocale(LC_ALL, "");
 
-    while ((i = getopt(argc, argv, "cirstT:")) != -1) {
+    while ((i = getopt(argc, argv, "cinstT:")) != -1) {
        switch (i) {
        case 'c':
            try_color = TRUE;
@@ -433,6 +435,11 @@ main(int argc, char *argv[])
        case 'i':
            ignore_sigs = TRUE;
            break;
+#if USE_WIDEC_SUPPORT
+       case 'n':
+           n_option = TRUE;
+           break;
+#endif
        case 's':
            single_step = TRUE;
            break;
@@ -529,18 +536,20 @@ main(int argc, char *argv[])
            scrl((int) (lptr - olptr));
            break;
 
-       case '<':
-           shift = 0;
-           /* FALLTHRU */
        case 'h':
            /* FALLTHRU */
        case KEY_HOME:
            lptr = vec_lines;
            break;
 
+       case '<':
+           if ((shift -= 8) < 0)
+               shift = 0;
+           break;
        case '>':
-           shift = 0;
-           /* FALLTHRU */
+           shift += 8;
+           break;
+
        case 'e':
            /* FALLTHRU */
        case KEY_END: