X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=test%2Fview.c;h=b368f5b728d8c0a80be0f080b789caae0aa8e64f;hb=3f57ad09dfcb62c8ad444e13fa4d450c05e878ba;hp=bf4377f48e12c505e4f24082a49b236c68e38245;hpb=b5be26931d6488adcb1ff8bc07df9de378ce0d27;p=ncurses.git diff --git a/test/view.c b/test/view.c index bf4377f4..b368f5b7 100644 --- a/test/view.c +++ b/test/view.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc. * + * Copyright 2019-2020,2021 Thomas E. Dickey * + * Copyright 1998-2016,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 * @@ -51,7 +52,7 @@ * scroll operation worked, and the refresh() code only had to do a * partial repaint. * - * $Id: view.c,v 1.135 2017/10/23 09:18:01 tom Exp $ + * $Id: view.c,v 1.142 2021/06/12 23:16:31 tom Exp $ */ #include @@ -61,7 +62,7 @@ #include #include -static void finish(int sig) GCC_NORETURN; +static GCC_NORETURN void finish(int sig); #define my_pair 1 @@ -77,9 +78,7 @@ static int num_lines; static bool n_option = FALSE; #endif -static void usage(void) GCC_NORETURN; - -static void +static GCC_NORETURN void failed(const char *msg) { endwin(); @@ -88,15 +87,13 @@ failed(const char *msg) } static int -ch_len(NCURSES_CH_T * src) +ch_len(NCURSES_CH_T *src) { int result = 0; -#if USE_WIDEC_SUPPORT - int count; -#endif #if USE_WIDEC_SUPPORT for (;;) { + int count; TEST_CCHAR(src, count, { int len = wcwidth(test_wch[0]); result += (len > 0) ? len : 1; @@ -135,7 +132,6 @@ 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) { @@ -145,7 +141,7 @@ show_all(const char *tag) _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); @@ -160,8 +156,10 @@ show_all(const char *tag) scrollok(stdscr, FALSE); /* prevent screen from moving */ for (i = 1; i < LINES; i++) { + NCURSES_CH_T *s; int len; int actual = (int) (lptr + i - vec_lines); + if (actual > num_lines) { if (i < LINES - 1) { int y, x; @@ -188,8 +186,11 @@ show_all(const char *tag) */ { int j; - int width = 1, count; + int width = 1; + for (j = actual = 0; j < shift; ++j) { + int count; + TEST_CCHAR(s + j, count, { width = wcwidth(test_wch[0]); } @@ -256,9 +257,12 @@ read_file(const char *filename) } len = fread(my_blob, sizeof(char), (size_t) sb.st_size, fp); - my_blob[sb.st_size] = '\0'; fclose(fp); + if (len > (size_t) sb.st_size) + len = (size_t) sb.st_size; + my_blob[len] = '\0'; + for (pass = 0; pass < 2; ++pass) { char *base = my_blob; k = 0; @@ -272,12 +276,19 @@ read_file(const char *filename) ++k; } } + if (base != (my_blob + j)) { + if (pass) + my_vec[k] = base; + ++k; + } num_lines = k; - if (base != (my_blob + j)) - ++num_lines; - if (!pass && - ((my_vec = typeCalloc(char *, (size_t) k + 2)) == 0)) { - failed("cannot allocate line-vector #1"); + if (pass == 0) { + if (((my_vec = typeCalloc(char *, (size_t) k + 2)) == 0)) { + failed("cannot allocate line-vector #1"); + } + } else { + if (my_vec[0] == NULL) + my_vec[0] = my_blob; } } @@ -299,11 +310,13 @@ read_file(const char *filename) } width = (width + 1) * 5; my_win = newwin(2, width, 0, 0); - if (my_win == 0) + if (my_win == 0) { failed("cannot allocate temporary window"); + } - if ((vec_lines = typeCalloc(NCURSES_CH_T *, (size_t) num_lines + 2)) == 0) + if ((vec_lines = typeCalloc(NCURSES_CH_T *, (size_t) num_lines + 2)) == 0) { failed("cannot allocate line-vector #2"); + } /* * Use the curses library for rendering, including tab-conversion. This @@ -348,8 +361,9 @@ read_file(const char *filename) x = width - 1; wmove(my_win, 0, 0); /* "x + 1" works with standard curses; some implementations are buggy */ - if ((vec_lines[k] = typeCalloc(NCURSES_CH_T, x + width + 1)) == 0) + 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); #else @@ -362,7 +376,7 @@ read_file(const char *filename) free(my_blob); } -static void +static GCC_NORETURN void usage(void) { static const char *msg[] = @@ -450,11 +464,11 @@ main(int argc, char *argv[]) int tvalue = (int) strtol(optarg, &next, 0); if (tvalue < 0 || (next != 0 && *next != 0)) usage(); - trace((unsigned) tvalue); + curses_trace((unsigned) tvalue); } break; case 't': - trace(TRACE_CALLS); + curses_trace(TRACE_CALLS); break; #endif default: