aboutsummaryrefslogtreecommitdiff
path: root/ncurses/tty/hashmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'ncurses/tty/hashmap.c')
-rw-r--r--ncurses/tty/hashmap.c65
1 files changed, 36 insertions, 29 deletions
diff --git a/ncurses/tty/hashmap.c b/ncurses/tty/hashmap.c
index 4a723865a4fd..75f6004d4510 100644
--- a/ncurses/tty/hashmap.c
+++ b/ncurses/tty/hashmap.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2016,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 *
@@ -73,19 +73,23 @@ AUTHOR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: hashmap.c,v 1.63 2011/10/22 16:34:50 tom Exp $")
+MODULE_ID("$Id: hashmap.c,v 1.67 2019/12/15 00:57:15 tom Exp $")
#ifdef HASHDEBUG
# define _tracef printf
# undef TR
+# ifdef TRACE
# define TR(n, a) if (_nc_tracing & (n)) { _tracef a ; putchar('\n'); }
+# else
+# define TR(n, a) { _tracef a ; putchar('\n'); }
+# endif
# undef screen_lines
-# define screen_lines MAXLINES
-# define TEXTWIDTH 1
+# define screen_lines(sp) MAXLINES
+# define TEXTWIDTH(sp) 1
int oldnums[MAXLINES], reallines[MAXLINES];
-static NCURSES_CH_T oldtext[MAXLINES][TEXTWIDTH];
-static NCURSES_CH_T newtext[MAXLINES][TEXTWIDTH];
+static NCURSES_CH_T oldtext[MAXLINES][TEXTWIDTH(sp)];
+static NCURSES_CH_T newtext[MAXLINES][TEXTWIDTH(sp)];
# define OLDNUM(sp,n) oldnums[n]
# define OLDTEXT(sp,n) oldtext[n]
# define NEWTEXT(sp,m) newtext[m]
@@ -115,11 +119,13 @@ static NCURSES_CH_T newtext[MAXLINES][TEXTWIDTH];
static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT);
static NCURSES_INLINE unsigned long
-hash(SCREEN *sp, NCURSES_CH_T * text)
+hash(SCREEN *sp, NCURSES_CH_T *text)
{
int i;
NCURSES_CH_T ch;
unsigned long result = 0;
+ (void) sp;
+
for (i = TEXTWIDTH(sp); i > 0; i--) {
ch = *text++;
result += (result << 5) + (unsigned long) HASH_VAL(ch);
@@ -129,10 +135,11 @@ hash(SCREEN *sp, NCURSES_CH_T * text)
/* approximate update cost */
static int
-update_cost(SCREEN *sp, NCURSES_CH_T * from, NCURSES_CH_T * to)
+update_cost(SCREEN *sp, NCURSES_CH_T *from, NCURSES_CH_T *to)
{
int cost = 0;
int i;
+ (void) sp;
for (i = TEXTWIDTH(sp); i > 0; i--, from++, to++)
if (!(CharEq(*from, *to)))
@@ -142,11 +149,12 @@ update_cost(SCREEN *sp, NCURSES_CH_T * from, NCURSES_CH_T * to)
}
static int
-update_cost_from_blank(SCREEN *sp, NCURSES_CH_T * to)
+update_cost_from_blank(SCREEN *sp, NCURSES_CH_T *to)
{
int cost = 0;
int i;
NCURSES_CH_T blank = blankchar;
+ (void) sp;
if (back_color_erase)
SetPair(blank, GetPair(stdscr->_nc_bkgd));
@@ -190,9 +198,8 @@ cost_effective(SCREEN *sp, const int from, const int to, const int blank)
static void
grow_hunks(SCREEN *sp)
{
- int start, end, shift;
- int back_limit, forward_limit; /* limits for cells to fill */
- int back_ref_limit, forward_ref_limit; /* limits for refrences */
+ int back_limit; /* limits for cells to fill */
+ int back_ref_limit; /* limit for references */
int i;
int next_hunk;
@@ -207,8 +214,11 @@ grow_hunks(SCREEN *sp)
while (i < screen_lines(sp) && OLDNUM(sp, i) == _NEWINDEX)
i++;
for (; i < screen_lines(sp); i = next_hunk) {
- start = i;
- shift = OLDNUM(sp, i) - i;
+ int forward_limit;
+ int forward_ref_limit;
+ int end;
+ int start = i;
+ int shift = OLDNUM(sp, i) - i;
/* get forward limit */
i = start + 1;
@@ -277,7 +287,6 @@ NCURSES_SP_NAME(_nc_hash_map) (NCURSES_SP_DCL0)
{
HASHMAP *hsp;
register int i;
- int start, shift, size;
if (screen_lines(SP_PARM) > lines_alloc(SP_PARM)) {
if (hashtab(SP_PARM))
@@ -379,6 +388,8 @@ NCURSES_SP_NAME(_nc_hash_map) (NCURSES_SP_DCL0)
* more than carry.
*/
for (i = 0; i < screen_lines(SP_PARM);) {
+ int start, shift, size;
+
while (i < screen_lines(SP_PARM) && OLDNUM(SP_PARM, i) == _NEWINDEX)
i++;
if (i >= screen_lines(SP_PARM))
@@ -486,13 +497,13 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
return EXIT_FAILURE;
(void) _nc_alloc_screen();
- for (n = 0; n < screen_lines; n++) {
+ for (n = 0; n < screen_lines(sp); n++) {
reallines[n] = n;
oldnums[n] = _NEWINDEX;
CharOf(oldtext[n][0]) = CharOf(newtext[n][0]) = '.';
}
- if (isatty(fileno(stdin)))
+ if (NC_ISATTY(fileno(stdin)))
usage();
#ifdef TRACE
@@ -509,7 +520,7 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
break;
case 'l': /* get initial line number vector */
- for (n = 0; n < screen_lines; n++) {
+ for (n = 0; n < screen_lines(sp); n++) {
reallines[n] = n;
oldnums[n] = _NEWINDEX;
}
@@ -522,9 +533,9 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
break;
case 'n': /* use following letters as text of new lines */
- for (n = 0; n < screen_lines; n++)
+ for (n = 0; n < screen_lines(sp); n++)
CharOf(newtext[n][0]) = '.';
- for (n = 0; n < screen_lines; n++)
+ for (n = 0; n < screen_lines(sp); n++)
if (line[n + 1] == '\n')
break;
else
@@ -532,9 +543,9 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
break;
case 'o': /* use following letters as text of old lines */
- for (n = 0; n < screen_lines; n++)
+ for (n = 0; n < screen_lines(sp); n++)
CharOf(oldtext[n][0]) = '.';
- for (n = 0; n < screen_lines; n++)
+ for (n = 0; n < screen_lines(sp); n++)
if (line[n + 1] == '\n')
break;
else
@@ -546,12 +557,12 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
_nc_linedump();
#endif
(void) fputs("Old lines: [", stdout);
- for (n = 0; n < screen_lines; n++)
+ for (n = 0; n < screen_lines(sp); n++)
putchar(CharOf(oldtext[n][0]));
putchar(']');
putchar('\n');
(void) fputs("New lines: [", stdout);
- for (n = 0; n < screen_lines; n++)
+ for (n = 0; n < screen_lines(sp); n++)
putchar(CharOf(newtext[n][0]));
putchar(']');
putchar('\n');
@@ -572,11 +583,7 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
break;
}
}
-#if NO_LEAKS
- _nc_free_and_exit(EXIT_SUCCESS);
-#else
- return EXIT_SUCCESS;
-#endif
+ exit_curses(EXIT_SUCCESS);
}
#endif /* HASHDEBUG */