mirror of
https://github.com/Aigor44/ncursesw-morphos.git
synced 2025-01-30 15:19:27 +08:00
ncurses 5.6 - patch 20080531
+ modify wgetch() to use the screen which corresponds to its window parameter rather than relying on SP; some dependent functions still use SP internally. + factor out most use of SP in lib_mouse.c, using parameter. + add internal _nc_keyname(), replacing keyname() to associate with a particular SCREEN rather than the global SP. + add internal _nc_unctrl(), replacing unctrl() to associate with a particular SCREEN rather than the global SP. + add internal _nc_tracemouse(), replacing _tracemouse() to eliminate its associated global buffer _nc_globals.tracemse_buf now in SCREEN. + add internal _nc_tracechar(), replacing _tracechar() to use SCREEN in preference to the global _nc_globals.tracechr_buf buffer.
This commit is contained in:
parent
9edffa2f21
commit
bd7ef7c230
16
NEWS
16
NEWS
@ -25,7 +25,7 @@
|
||||
-- sale, use or other dealings in this Software without prior written --
|
||||
-- authorization. --
|
||||
-------------------------------------------------------------------------------
|
||||
-- $Id: NEWS,v 1.1237 2008/05/24 22:23:07 tom Exp $
|
||||
-- $Id: NEWS,v 1.1241 2008/05/31 21:52:48 tom Exp $
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
This is a log of changes that ncurses has gone through since Zeyd started
|
||||
@ -45,6 +45,20 @@ See the AUTHORS file for the corresponding full names.
|
||||
Changes through 1.9.9e did not credit all contributions;
|
||||
it is not possible to add this information.
|
||||
|
||||
20080531
|
||||
+ modify wgetch() to use the screen which corresponds to its window
|
||||
parameter rather than relying on SP; some dependent functions still
|
||||
use SP internally.
|
||||
+ factor out most use of SP in lib_mouse.c, using parameter.
|
||||
+ add internal _nc_keyname(), replacing keyname() to associate with a
|
||||
particular SCREEN rather than the global SP.
|
||||
+ add internal _nc_unctrl(), replacing unctrl() to associate with a
|
||||
particular SCREEN rather than the global SP.
|
||||
+ add internal _nc_tracemouse(), replacing _tracemouse() to eliminate
|
||||
its associated global buffer _nc_globals.tracemse_buf now in SCREEN.
|
||||
+ add internal _nc_tracechar(), replacing _tracechar() to use SCREEN in
|
||||
preference to the global _nc_globals.tracechr_buf buffer.
|
||||
|
||||
20080524
|
||||
+ modify _nc_keypad() to make it switch temporarily as needed to the
|
||||
screen which must be updated.
|
||||
|
4
dist.mk
4
dist.mk
@ -25,7 +25,7 @@
|
||||
# use or other dealings in this Software without prior written #
|
||||
# authorization. #
|
||||
##############################################################################
|
||||
# $Id: dist.mk,v 1.643 2008/05/24 12:05:32 tom Exp $
|
||||
# $Id: dist.mk,v 1.644 2008/05/31 14:47:34 tom Exp $
|
||||
# Makefile for creating ncurses distributions.
|
||||
#
|
||||
# This only needs to be used directly as a makefile by developers, but
|
||||
@ -37,7 +37,7 @@ SHELL = /bin/sh
|
||||
# These define the major/minor/patch versions of ncurses.
|
||||
NCURSES_MAJOR = 5
|
||||
NCURSES_MINOR = 6
|
||||
NCURSES_PATCH = 20080524
|
||||
NCURSES_PATCH = 20080531
|
||||
|
||||
# We don't append the patch to the version, since this only applies to releases
|
||||
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $Id: MKkeyname.awk,v 1.38 2007/08/18 18:41:18 tom Exp $
|
||||
# $Id: MKkeyname.awk,v 1.39 2008/05/31 19:54:58 tom Exp $
|
||||
##############################################################################
|
||||
# Copyright (c) 1999-2006,2007 Free Software Foundation, Inc. #
|
||||
# Copyright (c) 1999-2007,2008 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 "Software"), #
|
||||
@ -67,7 +67,7 @@ END {
|
||||
print "#define SIZEOF_TABLE 256"
|
||||
print "#define MyTable _nc_globals.keyname_table"
|
||||
print ""
|
||||
print "NCURSES_EXPORT(NCURSES_CONST char *) keyname (int c)"
|
||||
print "NCURSES_EXPORT(NCURSES_CONST char *) _nc_keyname (SCREEN *sp, int c)"
|
||||
print "{"
|
||||
print " int i;"
|
||||
print " char name[20];"
|
||||
@ -100,7 +100,7 @@ END {
|
||||
print " if (MyTable[c] == 0) {"
|
||||
print " int cc = c;"
|
||||
print " p = name;"
|
||||
print " if (cc >= 128 && (SP == 0 || SP->_use_meta)) {"
|
||||
print " if (cc >= 128 && (sp == 0 || sp->_use_meta)) {"
|
||||
print " strcpy(p, \"M-\");"
|
||||
print " p += 2;"
|
||||
print " cc -= 128;"
|
||||
@ -141,6 +141,11 @@ END {
|
||||
print " return result;"
|
||||
print "}"
|
||||
print ""
|
||||
print "NCURSES_EXPORT(NCURSES_CONST char *) keyname (int c)"
|
||||
print "{"
|
||||
print "\treturn _nc_keyname(SP, c);"
|
||||
print "}"
|
||||
print ""
|
||||
print "#if NO_LEAKS"
|
||||
print "void _nc_keyname_leaks(void)"
|
||||
print "{"
|
||||
|
@ -1,4 +1,4 @@
|
||||
# $Id: MKunctrl.awk,v 1.21 2008/02/03 20:24:30 tom Exp $
|
||||
# $Id: MKunctrl.awk,v 1.22 2008/05/31 19:36:11 tom Exp $
|
||||
##############################################################################
|
||||
# Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. #
|
||||
# #
|
||||
@ -46,7 +46,7 @@ BEGIN {
|
||||
print ""
|
||||
}
|
||||
END {
|
||||
print "NCURSES_EXPORT(NCURSES_CONST char *) unctrl (register chtype ch)"
|
||||
print "NCURSES_EXPORT(NCURSES_CONST char *) _nc_unctrl (SCREEN *sp, chtype ch)"
|
||||
print "{"
|
||||
|
||||
blob=""
|
||||
@ -150,8 +150,8 @@ END {
|
||||
print ""
|
||||
print "\tif (check >= 0 && check < (int)SIZEOF(unctrl_table)) {"
|
||||
print "#if NCURSES_EXT_FUNCS"
|
||||
print "\t\tif ((SP != 0)"
|
||||
print "\t\t && (SP->_legacy_coding > 1)"
|
||||
print "\t\tif ((sp != 0)"
|
||||
print "\t\t && (sp->_legacy_coding > 1)"
|
||||
print "\t\t && (check >= 128)"
|
||||
print "\t\t && (check < 160))"
|
||||
printf "\t\t\tresult = %s_c1[check - 128];\n", stringname;
|
||||
@ -159,18 +159,18 @@ END {
|
||||
print "#if USE_WIDEC_SUPPORT"
|
||||
print "\t\tif ((check >= 160)"
|
||||
print "\t\t && (check < 256)"
|
||||
print "\t\t && ((SP != 0)"
|
||||
print "\t\t && ((SP->_legacy_coding > 0)"
|
||||
print "\t\t || (SP->_legacy_coding == 0"
|
||||
print "\t\t && ((sp != 0)"
|
||||
print "\t\t && ((sp->_legacy_coding > 0)"
|
||||
print "\t\t || (sp->_legacy_coding == 0"
|
||||
print "\t\t && (isprint(check) || iswprint(check))))))"
|
||||
printf "\t\t\tresult = %s_c1[check - 128];\n", stringname;
|
||||
print "\t\telse"
|
||||
print "#else"
|
||||
print "\t\tif ((check >= 160)"
|
||||
print "\t\t && (check < 256)"
|
||||
print "\t\t && ((SP != 0)"
|
||||
print "\t\t && ((SP->_legacy_coding > 0)"
|
||||
print "\t\t || (SP->_legacy_coding == 0"
|
||||
print "\t\t && ((sp != 0)"
|
||||
print "\t\t && ((sp->_legacy_coding > 0)"
|
||||
print "\t\t || (sp->_legacy_coding == 0"
|
||||
print "\t\t && isprint(check)))))"
|
||||
printf "\t\t\tresult = %s_c1[check - 128];\n", stringname;
|
||||
print "\t\telse"
|
||||
@ -182,4 +182,9 @@ END {
|
||||
print "\t}"
|
||||
print "\treturn (NCURSES_CONST char *)result;"
|
||||
print "}"
|
||||
print ""
|
||||
print "NCURSES_EXPORT(NCURSES_CONST char *) unctrl (chtype ch)"
|
||||
print "{"
|
||||
print "\treturn _nc_unctrl(SP, ch);"
|
||||
print "}"
|
||||
}
|
||||
|
@ -41,7 +41,7 @@
|
||||
|
||||
#include <curses.priv.h>
|
||||
|
||||
MODULE_ID("$Id: lib_getch.c,v 1.87 2008/05/03 22:42:10 tom Exp $")
|
||||
MODULE_ID("$Id: lib_getch.c,v 1.91 2008/05/31 21:47:48 tom Exp $")
|
||||
|
||||
#include <fifo_defs.h>
|
||||
|
||||
@ -123,7 +123,7 @@ fifo_pull(SCREEN *sp)
|
||||
{
|
||||
int ch;
|
||||
ch = sp->_fifo[head];
|
||||
TR(TRACE_IEVENT, ("pulling %s from %d", _tracechar(ch), head));
|
||||
TR(TRACE_IEVENT, ("pulling %s from %d", _nc_tracechar(sp, ch), head));
|
||||
|
||||
if (peek == head) {
|
||||
h_inc();
|
||||
@ -228,7 +228,7 @@ fifo_push(SCREEN *sp EVENTLIST_2nd(_nc_eventlist * evl))
|
||||
if (head == -1)
|
||||
head = peek = tail;
|
||||
t_inc();
|
||||
TR(TRACE_IEVENT, ("pushed %s at %d", _tracechar(ch), tail));
|
||||
TR(TRACE_IEVENT, ("pushed %s at %d", _nc_tracechar(sp, ch), tail));
|
||||
#ifdef TRACE
|
||||
if (USE_TRACEF(TRACE_IEVENT)) {
|
||||
_nc_fifo_dump(sp);
|
||||
@ -248,9 +248,14 @@ fifo_clear(SCREEN *sp)
|
||||
|
||||
static int kgetch(SCREEN *EVENTLIST_2nd(_nc_eventlist * evl));
|
||||
|
||||
#define wgetch_should_refresh(win) (\
|
||||
(is_wintouched(win) || (win->_flags & _HASMOVED)) \
|
||||
&& !(win->_flags & _ISPAD))
|
||||
static void
|
||||
refresh_if_needed(WINDOW *win)
|
||||
{
|
||||
if ((is_wintouched(win) || (win->_flags & _HASMOVED))
|
||||
&& !(win->_flags & _ISPAD)) {
|
||||
wrefresh(win);
|
||||
}
|
||||
}
|
||||
|
||||
NCURSES_EXPORT(int)
|
||||
_nc_wgetch(WINDOW *win,
|
||||
@ -258,7 +263,7 @@ _nc_wgetch(WINDOW *win,
|
||||
int use_meta
|
||||
EVENTLIST_2nd(_nc_eventlist * evl))
|
||||
{
|
||||
SCREEN *sp = SP;
|
||||
SCREEN *sp = _nc_screen_of(win);
|
||||
int ch;
|
||||
#ifdef NCURSES_WGETCH_EVENTS
|
||||
long event_delay = -1;
|
||||
@ -272,9 +277,7 @@ _nc_wgetch(WINDOW *win,
|
||||
}
|
||||
|
||||
if (cooked_key_in_fifo()) {
|
||||
if (wgetch_should_refresh(win))
|
||||
wrefresh(win);
|
||||
|
||||
refresh_if_needed(win);
|
||||
*result = fifo_pull(sp);
|
||||
returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK);
|
||||
}
|
||||
@ -324,8 +327,7 @@ _nc_wgetch(WINDOW *win,
|
||||
if (win->_use_keypad != sp->_keypad_on)
|
||||
_nc_keypad(sp, win->_use_keypad);
|
||||
|
||||
if (wgetch_should_refresh(win))
|
||||
wrefresh(win);
|
||||
refresh_if_needed(win);
|
||||
|
||||
if (!win->_notimeout && (win->_delay >= 0 || sp->_cbreak > 1)) {
|
||||
if (head == -1) { /* fifo is empty */
|
||||
@ -388,7 +390,7 @@ _nc_wgetch(WINDOW *win,
|
||||
&& (((rc = check_mouse_activity(sp, sp->_maxclick
|
||||
EVENTLIST_2nd(evl))) != 0
|
||||
&& !(rc & 4))
|
||||
|| !sp->_mouse_parse(runcount)));
|
||||
|| !sp->_mouse_parse(sp, runcount)));
|
||||
#ifdef NCURSES_WGETCH_EVENTS
|
||||
if ((rc & 4) && !ch == KEY_EVENT) {
|
||||
_nc_ungetch(sp, ch);
|
||||
@ -467,7 +469,7 @@ _nc_wgetch(WINDOW *win,
|
||||
if ((ch < KEY_MIN) && (ch & 0x80))
|
||||
ch &= 0x7f;
|
||||
|
||||
T(("wgetch returning : %s", _tracechar(ch)));
|
||||
T(("wgetch returning : %s", _nc_tracechar(sp, ch)));
|
||||
|
||||
*result = ch;
|
||||
returnCode(ch >= KEY_MIN ? KEY_CODE_YES : OK);
|
||||
@ -477,7 +479,7 @@ _nc_wgetch(WINDOW *win,
|
||||
NCURSES_EXPORT(int)
|
||||
wgetch_events(WINDOW *win, _nc_eventlist * evl)
|
||||
{
|
||||
SCREEN *sp = SP;
|
||||
SCREEN *sp = _nc_screen_of(win);
|
||||
int code;
|
||||
unsigned long value;
|
||||
|
||||
@ -495,7 +497,7 @@ wgetch_events(WINDOW *win, _nc_eventlist * evl)
|
||||
NCURSES_EXPORT(int)
|
||||
wgetch(WINDOW *win)
|
||||
{
|
||||
SCREEN *sp = SP;
|
||||
SCREEN *sp = _nc_screen_of(win);
|
||||
int code;
|
||||
unsigned long value;
|
||||
|
||||
@ -564,7 +566,7 @@ kgetch(SCREEN *sp EVENTLIST_2nd(_nc_eventlist * evl))
|
||||
return ch;
|
||||
}
|
||||
|
||||
TR(TRACE_IEVENT, ("ch: %s", _tracechar((unsigned char) ch)));
|
||||
TR(TRACE_IEVENT, ("ch: %s", _nc_tracechar(sp, (unsigned char) ch)));
|
||||
while ((ptr != NULL) && (ptr->ch != (unsigned char) ch))
|
||||
ptr = ptr->sibling;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* Copyright (c) 1998-2002,2006 Free Software Foundation, Inc. *
|
||||
* Copyright (c) 1998-2006,2008 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 *
|
||||
@ -41,7 +41,7 @@
|
||||
#include <curses.priv.h>
|
||||
#include <term.h>
|
||||
|
||||
MODULE_ID("$Id: lib_getstr.c,v 1.25 2006/01/12 00:33:52 tom Exp $")
|
||||
MODULE_ID("$Id: lib_getstr.c,v 1.26 2008/05/31 22:05:15 tom Exp $")
|
||||
|
||||
/*
|
||||
* This wipes out the last character, no matter whether it was a tab, control
|
||||
@ -75,6 +75,7 @@ wgetnstr_events(WINDOW *win,
|
||||
int maxlen,
|
||||
EVENTLIST_1st(_nc_eventlist * evl))
|
||||
{
|
||||
SCREEN *sp = _nc_screen_of(win);
|
||||
TTY buf;
|
||||
bool oldnl, oldecho, oldraw, oldcbreak;
|
||||
char erasec;
|
||||
@ -90,10 +91,10 @@ wgetnstr_events(WINDOW *win,
|
||||
|
||||
_nc_get_tty_mode(&buf);
|
||||
|
||||
oldnl = SP->_nl;
|
||||
oldecho = SP->_echo;
|
||||
oldraw = SP->_raw;
|
||||
oldcbreak = SP->_cbreak;
|
||||
oldnl = sp->_nl;
|
||||
oldecho = sp->_echo;
|
||||
oldraw = sp->_raw;
|
||||
oldcbreak = sp->_cbreak;
|
||||
nl();
|
||||
noecho();
|
||||
noraw();
|
||||
@ -187,10 +188,10 @@ wgetnstr_events(WINDOW *win,
|
||||
/* Restore with a single I/O call, to fix minor asymmetry between
|
||||
* raw/noraw, etc.
|
||||
*/
|
||||
SP->_nl = oldnl;
|
||||
SP->_echo = oldecho;
|
||||
SP->_raw = oldraw;
|
||||
SP->_cbreak = oldcbreak;
|
||||
sp->_nl = oldnl;
|
||||
sp->_echo = oldecho;
|
||||
sp->_raw = oldraw;
|
||||
sp->_cbreak = oldcbreak;
|
||||
|
||||
_nc_set_tty_mode(&buf);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
|
||||
* Copyright (c) 1998-2007,2008 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 *
|
||||
@ -79,7 +79,7 @@
|
||||
|
||||
#include <curses.priv.h>
|
||||
|
||||
MODULE_ID("$Id: lib_mouse.c,v 1.88 2007/09/29 21:50:04 tom Exp $")
|
||||
MODULE_ID("$Id: lib_mouse.c,v 1.94 2008/05/31 20:30:10 tom Exp $")
|
||||
|
||||
#include <term.h>
|
||||
#include <tic.h>
|
||||
@ -154,34 +154,34 @@ make an error
|
||||
|
||||
#endif /* USE_GPM_SUPPORT */
|
||||
|
||||
static bool _nc_mouse_parse(int);
|
||||
static bool _nc_mouse_parse(SCREEN *, int);
|
||||
static void _nc_mouse_resume(SCREEN *);
|
||||
static void _nc_mouse_wrap(SCREEN *);
|
||||
|
||||
/* maintain a circular list of mouse events */
|
||||
|
||||
#undef NEXT
|
||||
#define NEXT(ep) ((ep == SP->_mouse_events + EV_MAX - 1) \
|
||||
? SP->_mouse_events \
|
||||
#define NEXT(ep) ((ep == sp->_mouse_events + EV_MAX - 1) \
|
||||
? sp->_mouse_events \
|
||||
: ep + 1)
|
||||
|
||||
#undef PREV
|
||||
#define PREV(ep) ((ep == SP->_mouse_events) \
|
||||
? SP->_mouse_events + EV_MAX - 1 \
|
||||
#define PREV(ep) ((ep == sp->_mouse_events) \
|
||||
? sp->_mouse_events + EV_MAX - 1 \
|
||||
: ep - 1)
|
||||
|
||||
#ifdef TRACE
|
||||
static void
|
||||
_trace_slot(const char *tag)
|
||||
_trace_slot(SCREEN *sp, const char *tag)
|
||||
{
|
||||
MEVENT *ep;
|
||||
|
||||
_tracef(tag);
|
||||
|
||||
for (ep = SP->_mouse_events; ep < SP->_mouse_events + EV_MAX; ep++)
|
||||
for (ep = sp->_mouse_events; ep < sp->_mouse_events + EV_MAX; ep++)
|
||||
_tracef("mouse event queue slot %ld = %s",
|
||||
(long) (ep - SP->_mouse_events),
|
||||
_tracemouse(ep));
|
||||
(long) (ep - sp->_mouse_events),
|
||||
_nc_tracemouse(sp, ep));
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -193,7 +193,7 @@ _trace_slot(const char *tag)
|
||||
# define M_FD(sp) sp->_mouse_fd
|
||||
|
||||
static void
|
||||
write_event(int down, int button, int x, int y)
|
||||
write_event(SCREEN *sp, int down, int button, int x, int y)
|
||||
{
|
||||
char buf[6];
|
||||
unsigned long ignore;
|
||||
@ -202,12 +202,13 @@ write_event(int down, int button, int x, int y)
|
||||
buf[3] = ' ' + (button - 1) + (down ? 0 : 0x40);
|
||||
buf[4] = ' ' + x - LEFT_COL + 1;
|
||||
buf[5] = ' ' + y - TOP_ROW + 1;
|
||||
DosWrite(SP->_emxmouse_wfd, buf, 6, &ignore);
|
||||
DosWrite(sp->_emxmouse_wfd, buf, 6, &ignore);
|
||||
}
|
||||
|
||||
static void
|
||||
mouse_server(unsigned long ignored GCC_UNUSED)
|
||||
mouse_server(unsigned long param)
|
||||
{
|
||||
SCREEN *sp = (SCREEN *) param;
|
||||
unsigned short fWait = MOU_WAIT;
|
||||
/* NOPTRRECT mourt = { 0,0,24,79 }; */
|
||||
MOUEVENTINFO mouev;
|
||||
@ -234,7 +235,7 @@ mouse_server(unsigned long ignored GCC_UNUSED)
|
||||
sprintf(err, "Error reading mouse queue, rc=%lu.\r\n", rc);
|
||||
break;
|
||||
}
|
||||
if (!SP->_emxmouse_activated)
|
||||
if (!sp->_emxmouse_activated)
|
||||
goto finish;
|
||||
|
||||
/*
|
||||
@ -246,13 +247,13 @@ mouse_server(unsigned long ignored GCC_UNUSED)
|
||||
*/
|
||||
if ((mouev.fs ^ oldstate) & MOUSE_BN1_DOWN)
|
||||
write_event(mouev.fs & MOUSE_BN1_DOWN,
|
||||
SP->_emxmouse_buttons[1], mouev.col, mouev.row);
|
||||
sp->_emxmouse_buttons[1], mouev.col, mouev.row);
|
||||
if ((mouev.fs ^ oldstate) & MOUSE_BN2_DOWN)
|
||||
write_event(mouev.fs & MOUSE_BN2_DOWN,
|
||||
SP->_emxmouse_buttons[3], mouev.col, mouev.row);
|
||||
sp->_emxmouse_buttons[3], mouev.col, mouev.row);
|
||||
if ((mouev.fs ^ oldstate) & MOUSE_BN3_DOWN)
|
||||
write_event(mouev.fs & MOUSE_BN3_DOWN,
|
||||
SP->_emxmouse_buttons[2], mouev.col, mouev.row);
|
||||
sp->_emxmouse_buttons[2], mouev.col, mouev.row);
|
||||
|
||||
finish:
|
||||
oldstate = mouev.fs;
|
||||
@ -271,81 +272,87 @@ mouse_server(unsigned long ignored GCC_UNUSED)
|
||||
|
||||
#if USE_SYSMOUSE
|
||||
static void
|
||||
handle_sysmouse(int sig GCC_UNUSED)
|
||||
sysmouse_server(SCREEN *sp)
|
||||
{
|
||||
struct mouse_info the_mouse;
|
||||
MEVENT *work;
|
||||
|
||||
the_mouse.operation = MOUSE_GETINFO;
|
||||
if (SP != 0
|
||||
&& SP->_mouse_fd >= 0
|
||||
&& SP->_sysmouse_tail < FIFO_SIZE
|
||||
&& ioctl(SP->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) {
|
||||
if (sp != 0
|
||||
&& sp->_mouse_fd >= 0
|
||||
&& sp->_sysmouse_tail < FIFO_SIZE
|
||||
&& ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) {
|
||||
|
||||
if (SP->_sysmouse_head > SP->_sysmouse_tail) {
|
||||
SP->_sysmouse_tail = 0;
|
||||
SP->_sysmouse_head = 0;
|
||||
if (sp->_sysmouse_head > sp->_sysmouse_tail) {
|
||||
sp->_sysmouse_tail = 0;
|
||||
sp->_sysmouse_head = 0;
|
||||
}
|
||||
work = &(SP->_sysmouse_fifo[SP->_sysmouse_tail]);
|
||||
work = &(sp->_sysmouse_fifo[sp->_sysmouse_tail]);
|
||||
memset(work, 0, sizeof(*work));
|
||||
work->id = NORMAL_EVENT; /* there's only one mouse... */
|
||||
|
||||
SP->_sysmouse_old_buttons = SP->_sysmouse_new_buttons;
|
||||
SP->_sysmouse_new_buttons = the_mouse.u.data.buttons & 0x7;
|
||||
sp->_sysmouse_old_buttons = sp->_sysmouse_new_buttons;
|
||||
sp->_sysmouse_new_buttons = the_mouse.u.data.buttons & 0x7;
|
||||
|
||||
if (SP->_sysmouse_new_buttons) {
|
||||
if (SP->_sysmouse_new_buttons & 1)
|
||||
if (sp->_sysmouse_new_buttons) {
|
||||
if (sp->_sysmouse_new_buttons & 1)
|
||||
work->bstate |= BUTTON1_PRESSED;
|
||||
if (SP->_sysmouse_new_buttons & 2)
|
||||
if (sp->_sysmouse_new_buttons & 2)
|
||||
work->bstate |= BUTTON2_PRESSED;
|
||||
if (SP->_sysmouse_new_buttons & 4)
|
||||
if (sp->_sysmouse_new_buttons & 4)
|
||||
work->bstate |= BUTTON3_PRESSED;
|
||||
} else {
|
||||
if (SP->_sysmouse_old_buttons & 1)
|
||||
if (sp->_sysmouse_old_buttons & 1)
|
||||
work->bstate |= BUTTON1_RELEASED;
|
||||
if (SP->_sysmouse_old_buttons & 2)
|
||||
if (sp->_sysmouse_old_buttons & 2)
|
||||
work->bstate |= BUTTON2_RELEASED;
|
||||
if (SP->_sysmouse_old_buttons & 4)
|
||||
if (sp->_sysmouse_old_buttons & 4)
|
||||
work->bstate |= BUTTON3_RELEASED;
|
||||
}
|
||||
|
||||
/* for cosmetic bug in syscons.c on FreeBSD 3.[34] */
|
||||
the_mouse.operation = MOUSE_HIDE;
|
||||
ioctl(SP->_mouse_fd, CONS_MOUSECTL, &the_mouse);
|
||||
ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse);
|
||||
the_mouse.operation = MOUSE_SHOW;
|
||||
ioctl(SP->_mouse_fd, CONS_MOUSECTL, &the_mouse);
|
||||
ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse);
|
||||
|
||||
/*
|
||||
* We're only interested if the button is pressed or released.
|
||||
* FIXME: implement continuous event-tracking.
|
||||
*/
|
||||
if (SP->_sysmouse_new_buttons != SP->_sysmouse_old_buttons) {
|
||||
SP->_sysmouse_tail += 1;
|
||||
if (sp->_sysmouse_new_buttons != sp->_sysmouse_old_buttons) {
|
||||
sp->_sysmouse_tail += 1;
|
||||
}
|
||||
work->x = the_mouse.u.data.x / SP->_sysmouse_char_width;
|
||||
work->y = the_mouse.u.data.y / SP->_sysmouse_char_height;
|
||||
work->x = the_mouse.u.data.x / sp->_sysmouse_char_width;
|
||||
work->y = the_mouse.u.data.y / sp->_sysmouse_char_height;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_sysmouse(int sig GCC_UNUSED)
|
||||
{
|
||||
sysmouse_server(SP);
|
||||
}
|
||||
#endif /* USE_SYSMOUSE */
|
||||
|
||||
static void
|
||||
init_xterm_mouse(void)
|
||||
init_xterm_mouse(SCREEN *sp)
|
||||
{
|
||||
SP->_mouse_type = M_XTERM;
|
||||
SP->_mouse_xtermcap = tigetstr("XM");
|
||||
if (!VALID_STRING(SP->_mouse_xtermcap))
|
||||
SP->_mouse_xtermcap = "\033[?1000%?%p1%{1}%=%th%el%;";
|
||||
sp->_mouse_type = M_XTERM;
|
||||
sp->_mouse_xtermcap = tigetstr("XM");
|
||||
if (!VALID_STRING(sp->_mouse_xtermcap))
|
||||
sp->_mouse_xtermcap = "\033[?1000%?%p1%{1}%=%th%el%;";
|
||||
}
|
||||
|
||||
static void
|
||||
enable_xterm_mouse(int enable)
|
||||
enable_xterm_mouse(SCREEN *sp, int enable)
|
||||
{
|
||||
#if USE_EMX_MOUSE
|
||||
SP->_emxmouse_activated = enable;
|
||||
sp->_emxmouse_activated = enable;
|
||||
#else
|
||||
putp(TPARM_1(SP->_mouse_xtermcap, enable));
|
||||
putp(TPARM_1(sp->_mouse_xtermcap, enable));
|
||||
#endif
|
||||
SP->_mouse_active = enable;
|
||||
sp->_mouse_active = enable;
|
||||
}
|
||||
|
||||
#if USE_GPM_SUPPORT
|
||||
@ -366,19 +373,19 @@ allow_gpm_mouse(void)
|
||||
}
|
||||
|
||||
static bool
|
||||
enable_gpm_mouse(int enable)
|
||||
enable_gpm_mouse(SCREEN *sp, int enable)
|
||||
{
|
||||
bool result;
|
||||
|
||||
T((T_CALLED("enable_gpm_mouse(%d)"), enable));
|
||||
|
||||
if (enable && !SP->_mouse_active) {
|
||||
if (enable && !sp->_mouse_active) {
|
||||
/* GPM: initialize connection to gpm server */
|
||||
SP->_mouse_gpm_connect.eventMask = GPM_DOWN | GPM_UP;
|
||||
SP->_mouse_gpm_connect.defaultMask =
|
||||
~(SP->_mouse_gpm_connect.eventMask | GPM_HARD);
|
||||
SP->_mouse_gpm_connect.minMod = 0;
|
||||
SP->_mouse_gpm_connect.maxMod =
|
||||
sp->_mouse_gpm_connect.eventMask = GPM_DOWN | GPM_UP;
|
||||
sp->_mouse_gpm_connect.defaultMask =
|
||||
~(sp->_mouse_gpm_connect.eventMask | GPM_HARD);
|
||||
sp->_mouse_gpm_connect.minMod = 0;
|
||||
sp->_mouse_gpm_connect.maxMod =
|
||||
(unsigned short) (~((1 << KG_SHIFT) |
|
||||
(1 << KG_SHIFTL) |
|
||||
(1 << KG_SHIFTR)));
|
||||
@ -387,14 +394,14 @@ enable_gpm_mouse(int enable)
|
||||
* The former is recognized by wscons (SunOS), and the latter by
|
||||
* xterm. Those will not show up in ncurses' traces.
|
||||
*/
|
||||
result = (my_Gpm_Open(&SP->_mouse_gpm_connect, 0) >= 0);
|
||||
SP->_mouse_active = result;
|
||||
result = (my_Gpm_Open(&sp->_mouse_gpm_connect, 0) >= 0);
|
||||
sp->_mouse_active = result;
|
||||
T(("GPM open %s", result ? "succeeded" : "failed"));
|
||||
} else {
|
||||
if (!enable && SP->_mouse_active) {
|
||||
if (!enable && sp->_mouse_active) {
|
||||
/* GPM: close connection to gpm server */
|
||||
my_Gpm_Close();
|
||||
SP->_mouse_active = FALSE;
|
||||
sp->_mouse_active = FALSE;
|
||||
T(("GPM closed"));
|
||||
}
|
||||
result = FALSE;
|
||||
@ -406,14 +413,14 @@ enable_gpm_mouse(int enable)
|
||||
#define xterm_kmous "\033[M"
|
||||
|
||||
static void
|
||||
initialize_mousetype(void)
|
||||
initialize_mousetype(SCREEN *sp)
|
||||
{
|
||||
T((T_CALLED("initialize_mousetype()")));
|
||||
|
||||
/* Try gpm first, because gpm may be configured to run in xterm */
|
||||
#if USE_GPM_SUPPORT
|
||||
if (allow_gpm_mouse()) {
|
||||
if (!SP->_mouse_gpm_loaded) {
|
||||
if (!sp->_mouse_gpm_loaded) {
|
||||
#ifdef HAVE_LIBDL
|
||||
void *obj;
|
||||
|
||||
@ -425,13 +432,13 @@ initialize_mousetype(void)
|
||||
T(("GPM initialization failed: %s", dlerror()));
|
||||
dlclose(obj);
|
||||
} else {
|
||||
SP->_mouse_gpm_found = TRUE;
|
||||
sp->_mouse_gpm_found = TRUE;
|
||||
}
|
||||
}
|
||||
#else /* !HAVE_LIBDL */
|
||||
SP->_mouse_gpm_found = TRUE;
|
||||
sp->_mouse_gpm_found = TRUE;
|
||||
#endif
|
||||
SP->_mouse_gpm_loaded = TRUE;
|
||||
sp->_mouse_gpm_loaded = TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -439,10 +446,10 @@ initialize_mousetype(void)
|
||||
* maintain our notion of whether the mouse connection is active
|
||||
* without testing the file-descriptor.
|
||||
*/
|
||||
if (SP->_mouse_gpm_found && enable_gpm_mouse(TRUE)) {
|
||||
SP->_mouse_type = M_GPM;
|
||||
SP->_mouse_fd = *(my_gpm_fd);
|
||||
T(("GPM mouse_fd %d", SP->_mouse_fd));
|
||||
if (sp->_mouse_gpm_found && enable_gpm_mouse(sp, TRUE)) {
|
||||
sp->_mouse_type = M_GPM;
|
||||
sp->_mouse_fd = *(my_gpm_fd);
|
||||
T(("GPM mouse_fd %d", sp->_mouse_fd));
|
||||
returnVoid;
|
||||
}
|
||||
}
|
||||
@ -450,7 +457,7 @@ initialize_mousetype(void)
|
||||
|
||||
/* OS/2 VIO */
|
||||
#if USE_EMX_MOUSE
|
||||
if (!SP->_emxmouse_thread
|
||||
if (!sp->_emxmouse_thread
|
||||
&& strstr(cur_term->type.term_names, "xterm") == 0
|
||||
&& key_mouse) {
|
||||
int handles[2];
|
||||
@ -461,32 +468,32 @@ initialize_mousetype(void)
|
||||
} else {
|
||||
int rc;
|
||||
|
||||
if (!SP->_emxmouse_buttons[0]) {
|
||||
if (!sp->_emxmouse_buttons[0]) {
|
||||
char *s = getenv("MOUSE_BUTTONS_123");
|
||||
|
||||
SP->_emxmouse_buttons[0] = 1;
|
||||
sp->_emxmouse_buttons[0] = 1;
|
||||
if (s && strlen(s) >= 3) {
|
||||
SP->_emxmouse_buttons[1] = s[0] - '0';
|
||||
SP->_emxmouse_buttons[2] = s[1] - '0';
|
||||
SP->_emxmouse_buttons[3] = s[2] - '0';
|
||||
sp->_emxmouse_buttons[1] = s[0] - '0';
|
||||
sp->_emxmouse_buttons[2] = s[1] - '0';
|
||||
sp->_emxmouse_buttons[3] = s[2] - '0';
|
||||
} else {
|
||||
SP->_emxmouse_buttons[1] = 1;
|
||||
SP->_emxmouse_buttons[2] = 3;
|
||||
SP->_emxmouse_buttons[3] = 2;
|
||||
sp->_emxmouse_buttons[1] = 1;
|
||||
sp->_emxmouse_buttons[2] = 3;
|
||||
sp->_emxmouse_buttons[3] = 2;
|
||||
}
|
||||
}
|
||||
SP->_emxmouse_wfd = handles[1];
|
||||
M_FD(SP) = handles[0];
|
||||
sp->_emxmouse_wfd = handles[1];
|
||||
M_FD(sp) = handles[0];
|
||||
/* Needed? */
|
||||
setmode(handles[0], O_BINARY);
|
||||
setmode(handles[1], O_BINARY);
|
||||
/* Do not use CRT functions, we may single-threaded. */
|
||||
rc = DosCreateThread((unsigned long *) &SP->_emxmouse_thread,
|
||||
mouse_server, 0, 0, 8192);
|
||||
rc = DosCreateThread((unsigned long *) &sp->_emxmouse_thread,
|
||||
mouse_server, sp, 0, 8192);
|
||||
if (rc) {
|
||||
printf("mouse thread error %d=%#x", rc, rc);
|
||||
} else {
|
||||
SP->_mouse_type = M_XTERM;
|
||||
sp->_mouse_type = M_XTERM;
|
||||
}
|
||||
returnVoid;
|
||||
}
|
||||
@ -498,14 +505,14 @@ initialize_mousetype(void)
|
||||
struct mouse_info the_mouse;
|
||||
char *the_device = 0;
|
||||
|
||||
if (isatty(SP->_ifd))
|
||||
the_device = ttyname(SP->_ifd);
|
||||
if (isatty(sp->_ifd))
|
||||
the_device = ttyname(sp->_ifd);
|
||||
if (the_device == 0)
|
||||
the_device = "/dev/tty";
|
||||
|
||||
SP->_mouse_fd = open(the_device, O_RDWR);
|
||||
sp->_mouse_fd = open(the_device, O_RDWR);
|
||||
|
||||
if (SP->_mouse_fd >= 0) {
|
||||
if (sp->_mouse_fd >= 0) {
|
||||
/*
|
||||
* sysmouse does not have a usable user interface for obtaining
|
||||
* mouse events. The logical way to proceed (reading data on a
|
||||
@ -522,10 +529,10 @@ initialize_mousetype(void)
|
||||
the_mouse.operation = MOUSE_MODE;
|
||||
the_mouse.u.mode.mode = 0;
|
||||
the_mouse.u.mode.signal = SIGUSR2;
|
||||
if (ioctl(SP->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) {
|
||||
if (ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) {
|
||||
signal(SIGUSR2, handle_sysmouse);
|
||||
the_mouse.operation = MOUSE_SHOW;
|
||||
ioctl(SP->_mouse_fd, CONS_MOUSECTL, &the_mouse);
|
||||
ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse);
|
||||
|
||||
#if defined(FBIO_MODEINFO) || defined(CONS_MODEINFO) /* FreeBSD > 2.x */
|
||||
{
|
||||
@ -535,23 +542,23 @@ initialize_mousetype(void)
|
||||
#endif /* FBIO_GETMODE */
|
||||
video_info_t the_video;
|
||||
|
||||
if (ioctl(SP->_mouse_fd,
|
||||
if (ioctl(sp->_mouse_fd,
|
||||
FBIO_GETMODE,
|
||||
&the_video.vi_mode) != -1
|
||||
&& ioctl(SP->_mouse_fd,
|
||||
&& ioctl(sp->_mouse_fd,
|
||||
FBIO_MODEINFO,
|
||||
&the_video) != -1) {
|
||||
SP->_sysmouse_char_width = the_video.vi_cwidth;
|
||||
SP->_sysmouse_char_height = the_video.vi_cheight;
|
||||
sp->_sysmouse_char_width = the_video.vi_cwidth;
|
||||
sp->_sysmouse_char_height = the_video.vi_cheight;
|
||||
}
|
||||
}
|
||||
#endif /* defined(FBIO_MODEINFO) || defined(CONS_MODEINFO) */
|
||||
|
||||
if (SP->_sysmouse_char_width <= 0)
|
||||
SP->_sysmouse_char_width = 8;
|
||||
if (SP->_sysmouse_char_height <= 0)
|
||||
SP->_sysmouse_char_height = 16;
|
||||
SP->_mouse_type = M_SYSMOUSE;
|
||||
if (sp->_sysmouse_char_width <= 0)
|
||||
sp->_sysmouse_char_width = 8;
|
||||
if (sp->_sysmouse_char_height <= 0)
|
||||
sp->_sysmouse_char_height = 16;
|
||||
sp->_mouse_type = M_SYSMOUSE;
|
||||
returnVoid;
|
||||
}
|
||||
}
|
||||
@ -562,37 +569,37 @@ initialize_mousetype(void)
|
||||
if (key_mouse != 0) {
|
||||
if (!strcmp(key_mouse, xterm_kmous)
|
||||
|| strstr(cur_term->type.term_names, "xterm") != 0) {
|
||||
init_xterm_mouse();
|
||||
init_xterm_mouse(sp);
|
||||
}
|
||||
} else if (strstr(cur_term->type.term_names, "xterm") != 0) {
|
||||
if (_nc_add_to_try(&(SP->_keytry), xterm_kmous, KEY_MOUSE) == OK)
|
||||
init_xterm_mouse();
|
||||
if (_nc_add_to_try(&(sp->_keytry), xterm_kmous, KEY_MOUSE) == OK)
|
||||
init_xterm_mouse(sp);
|
||||
}
|
||||
returnVoid;
|
||||
}
|
||||
|
||||
static bool
|
||||
_nc_mouse_init(void)
|
||||
_nc_mouse_init(SCREEN *sp)
|
||||
/* initialize the mouse */
|
||||
{
|
||||
bool result = FALSE;
|
||||
int i;
|
||||
|
||||
if (SP != 0) {
|
||||
if (!SP->_mouse_initialized) {
|
||||
SP->_mouse_initialized = TRUE;
|
||||
if (sp != 0) {
|
||||
if (!sp->_mouse_initialized) {
|
||||
sp->_mouse_initialized = TRUE;
|
||||
|
||||
TR(MY_TRACE, ("_nc_mouse_init() called"));
|
||||
|
||||
SP->_mouse_eventp = SP->_mouse_events;
|
||||
sp->_mouse_eventp = sp->_mouse_events;
|
||||
for (i = 0; i < EV_MAX; i++)
|
||||
SP->_mouse_events[i].id = INVALID_EVENT;
|
||||
sp->_mouse_events[i].id = INVALID_EVENT;
|
||||
|
||||
initialize_mousetype();
|
||||
initialize_mousetype(sp);
|
||||
|
||||
T(("_nc_mouse_init() set mousetype to %d", SP->_mouse_type));
|
||||
T(("_nc_mouse_init() set mousetype to %d", sp->_mouse_type));
|
||||
}
|
||||
result = SP->_mouse_initialized;
|
||||
result = sp->_mouse_initialized;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -604,12 +611,12 @@ _nc_mouse_init(void)
|
||||
static bool
|
||||
_nc_mouse_event(SCREEN *sp GCC_UNUSED)
|
||||
{
|
||||
MEVENT *eventp = SP->_mouse_eventp;
|
||||
MEVENT *eventp = sp->_mouse_eventp;
|
||||
bool result = FALSE;
|
||||
|
||||
(void) eventp;
|
||||
|
||||
switch (SP->_mouse_type) {
|
||||
switch (sp->_mouse_type) {
|
||||
case M_XTERM:
|
||||
/* xterm: never have to query, mouse events are in the keyboard stream */
|
||||
#if USE_EMX_MOUSE
|
||||
@ -666,7 +673,7 @@ _nc_mouse_event(SCREEN *sp GCC_UNUSED)
|
||||
eventp->z = 0;
|
||||
|
||||
/* bump the next-free pointer into the circular list */
|
||||
SP->_mouse_eventp = eventp = NEXT(eventp);
|
||||
sp->_mouse_eventp = eventp = NEXT(eventp);
|
||||
result = TRUE;
|
||||
}
|
||||
}
|
||||
@ -675,22 +682,22 @@ _nc_mouse_event(SCREEN *sp GCC_UNUSED)
|
||||
|
||||
#if USE_SYSMOUSE
|
||||
case M_SYSMOUSE:
|
||||
if (SP->_sysmouse_head < SP->_sysmouse_tail) {
|
||||
*eventp = SP->_sysmouse_fifo[SP->_sysmouse_head];
|
||||
if (sp->_sysmouse_head < sp->_sysmouse_tail) {
|
||||
*eventp = sp->_sysmouse_fifo[sp->_sysmouse_head];
|
||||
|
||||
/*
|
||||
* Point the fifo-head to the next possible location. If there
|
||||
* are none, reset the indices. This may be interrupted by the
|
||||
* signal handler, doing essentially the same reset.
|
||||
*/
|
||||
SP->_sysmouse_head += 1;
|
||||
if (SP->_sysmouse_head == SP->_sysmouse_tail) {
|
||||
SP->_sysmouse_tail = 0;
|
||||
SP->_sysmouse_head = 0;
|
||||
sp->_sysmouse_head += 1;
|
||||
if (sp->_sysmouse_head == sp->_sysmouse_tail) {
|
||||
sp->_sysmouse_tail = 0;
|
||||
sp->_sysmouse_head = 0;
|
||||
}
|
||||
|
||||
/* bump the next-free pointer into the circular list */
|
||||
SP->_mouse_eventp = eventp = NEXT(eventp);
|
||||
sp->_mouse_eventp = eventp = NEXT(eventp);
|
||||
result = TRUE;
|
||||
}
|
||||
break;
|
||||
@ -709,11 +716,11 @@ _nc_mouse_inline(SCREEN *sp)
|
||||
{
|
||||
int b;
|
||||
bool result = FALSE;
|
||||
MEVENT *eventp = SP->_mouse_eventp;
|
||||
MEVENT *eventp = sp->_mouse_eventp;
|
||||
|
||||
TR(MY_TRACE, ("_nc_mouse_inline() called"));
|
||||
|
||||
if (SP->_mouse_type == M_XTERM) {
|
||||
if (sp->_mouse_type == M_XTERM) {
|
||||
unsigned char kbuf[4];
|
||||
mmask_t prev;
|
||||
size_t grabbed;
|
||||
@ -847,11 +854,11 @@ _nc_mouse_inline(SCREEN *sp)
|
||||
eventp->y = (kbuf[2] - ' ') - 1;
|
||||
TR(MY_TRACE,
|
||||
("_nc_mouse_inline: primitive mouse-event %s has slot %ld",
|
||||
_tracemouse(eventp),
|
||||
(long) (eventp - SP->_mouse_events)));
|
||||
_nc_tracemouse(sp, eventp),
|
||||
(long) (eventp - sp->_mouse_events)));
|
||||
|
||||
/* bump the next-free pointer into the circular list */
|
||||
SP->_mouse_eventp = NEXT(eventp);
|
||||
sp->_mouse_eventp = NEXT(eventp);
|
||||
#if 0 /* this return would be needed for QNX's mods to lib_getch.c */
|
||||
return (TRUE);
|
||||
#endif
|
||||
@ -861,36 +868,36 @@ _nc_mouse_inline(SCREEN *sp)
|
||||
}
|
||||
|
||||
static void
|
||||
mouse_activate(bool on)
|
||||
mouse_activate(SCREEN *sp, bool on)
|
||||
{
|
||||
if (!on && !SP->_mouse_initialized)
|
||||
if (!on && !sp->_mouse_initialized)
|
||||
return;
|
||||
|
||||
if (!_nc_mouse_init())
|
||||
if (!_nc_mouse_init(sp))
|
||||
return;
|
||||
|
||||
if (on) {
|
||||
|
||||
switch (SP->_mouse_type) {
|
||||
switch (sp->_mouse_type) {
|
||||
case M_XTERM:
|
||||
#if NCURSES_EXT_FUNCS
|
||||
keyok(KEY_MOUSE, on);
|
||||
#endif
|
||||
TPUTS_TRACE("xterm mouse initialization");
|
||||
enable_xterm_mouse(1);
|
||||
enable_xterm_mouse(sp, 1);
|
||||
break;
|
||||
#if USE_GPM_SUPPORT
|
||||
case M_GPM:
|
||||
if (enable_gpm_mouse(1)) {
|
||||
SP->_mouse_fd = *(my_gpm_fd);
|
||||
T(("GPM mouse_fd %d", SP->_mouse_fd));
|
||||
if (enable_gpm_mouse(sp, 1)) {
|
||||
sp->_mouse_fd = *(my_gpm_fd);
|
||||
T(("GPM mouse_fd %d", sp->_mouse_fd));
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#if USE_SYSMOUSE
|
||||
case M_SYSMOUSE:
|
||||
signal(SIGUSR2, handle_sysmouse);
|
||||
SP->_mouse_active = TRUE;
|
||||
sp->_mouse_active = TRUE;
|
||||
break;
|
||||
#endif
|
||||
case M_NONE:
|
||||
@ -899,27 +906,27 @@ mouse_activate(bool on)
|
||||
/* Make runtime binding to cut down on object size of applications that
|
||||
* do not use the mouse (e.g., 'clear').
|
||||
*/
|
||||
SP->_mouse_event = _nc_mouse_event;
|
||||
SP->_mouse_inline = _nc_mouse_inline;
|
||||
SP->_mouse_parse = _nc_mouse_parse;
|
||||
SP->_mouse_resume = _nc_mouse_resume;
|
||||
SP->_mouse_wrap = _nc_mouse_wrap;
|
||||
sp->_mouse_event = _nc_mouse_event;
|
||||
sp->_mouse_inline = _nc_mouse_inline;
|
||||
sp->_mouse_parse = _nc_mouse_parse;
|
||||
sp->_mouse_resume = _nc_mouse_resume;
|
||||
sp->_mouse_wrap = _nc_mouse_wrap;
|
||||
} else {
|
||||
|
||||
switch (SP->_mouse_type) {
|
||||
switch (sp->_mouse_type) {
|
||||
case M_XTERM:
|
||||
TPUTS_TRACE("xterm mouse deinitialization");
|
||||
enable_xterm_mouse(0);
|
||||
enable_xterm_mouse(sp, 0);
|
||||
break;
|
||||
#if USE_GPM_SUPPORT
|
||||
case M_GPM:
|
||||
enable_gpm_mouse(0);
|
||||
enable_gpm_mouse(sp, 0);
|
||||
break;
|
||||
#endif
|
||||
#if USE_SYSMOUSE
|
||||
case M_SYSMOUSE:
|
||||
signal(SIGUSR2, SIG_IGN);
|
||||
SP->_mouse_active = FALSE;
|
||||
sp->_mouse_active = FALSE;
|
||||
break;
|
||||
#endif
|
||||
case M_NONE:
|
||||
@ -936,10 +943,10 @@ mouse_activate(bool on)
|
||||
**************************************************************************/
|
||||
|
||||
static bool
|
||||
_nc_mouse_parse(int runcount)
|
||||
_nc_mouse_parse(SCREEN *sp, int runcount)
|
||||
/* parse a run of atomic mouse events into a gesture */
|
||||
{
|
||||
MEVENT *eventp = SP->_mouse_eventp;
|
||||
MEVENT *eventp = sp->_mouse_eventp;
|
||||
MEVENT *ep, *runp, *next, *prev = PREV(eventp);
|
||||
int n;
|
||||
int b;
|
||||
@ -971,10 +978,10 @@ _nc_mouse_parse(int runcount)
|
||||
if (runcount == 1) {
|
||||
TR(MY_TRACE,
|
||||
("_nc_mouse_parse: returning simple mouse event %s at slot %ld",
|
||||
_tracemouse(prev),
|
||||
(long) (prev - SP->_mouse_events)));
|
||||
_nc_tracemouse(sp, prev),
|
||||
(long) (prev - sp->_mouse_events)));
|
||||
return (prev->id >= NORMAL_EVENT)
|
||||
? ((prev->bstate & SP->_mouse_mask) ? TRUE : FALSE)
|
||||
? ((prev->bstate & sp->_mouse_mask) ? TRUE : FALSE)
|
||||
: FALSE;
|
||||
}
|
||||
|
||||
@ -986,10 +993,10 @@ _nc_mouse_parse(int runcount)
|
||||
|
||||
#ifdef TRACE
|
||||
if (USE_TRACEF(TRACE_IEVENT)) {
|
||||
_trace_slot("before mouse press/release merge:");
|
||||
_trace_slot(sp, "before mouse press/release merge:");
|
||||
_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
|
||||
(long) (runp - SP->_mouse_events),
|
||||
(long) ((eventp - SP->_mouse_events) + (EV_MAX - 1)) % EV_MAX,
|
||||
(long) (runp - sp->_mouse_events),
|
||||
(long) ((eventp - sp->_mouse_events) + (EV_MAX - 1)) % EV_MAX,
|
||||
runcount);
|
||||
_nc_unlock_global(tracef);
|
||||
}
|
||||
@ -1014,7 +1021,7 @@ _nc_mouse_parse(int runcount)
|
||||
#endif
|
||||
) {
|
||||
for (b = 1; b <= MAX_BUTTONS; ++b) {
|
||||
if ((SP->_mouse_mask & MASK_CLICK(b))
|
||||
if ((sp->_mouse_mask & MASK_CLICK(b))
|
||||
&& (ep->bstate & MASK_PRESS(b))) {
|
||||
ep->bstate &= ~MASK_PRESS(b);
|
||||
ep->bstate |= MASK_CLICK(b);
|
||||
@ -1030,10 +1037,10 @@ _nc_mouse_parse(int runcount)
|
||||
|
||||
#ifdef TRACE
|
||||
if (USE_TRACEF(TRACE_IEVENT)) {
|
||||
_trace_slot("before mouse click merge:");
|
||||
_trace_slot(sp, "before mouse click merge:");
|
||||
_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
|
||||
(long) (runp - SP->_mouse_events),
|
||||
(long) ((eventp - SP->_mouse_events) + (EV_MAX - 1)) % EV_MAX,
|
||||
(long) (runp - sp->_mouse_events),
|
||||
(long) ((eventp - sp->_mouse_events) + (EV_MAX - 1)) % EV_MAX,
|
||||
runcount);
|
||||
_nc_unlock_global(tracef);
|
||||
}
|
||||
@ -1071,7 +1078,7 @@ _nc_mouse_parse(int runcount)
|
||||
if ((ep->bstate & BUTTON_CLICKED)
|
||||
&& (follower->bstate & BUTTON_CLICKED)) {
|
||||
for (b = 1; b <= MAX_BUTTONS; ++b) {
|
||||
if ((SP->_mouse_mask & MASK_DOUBLE_CLICK(b))
|
||||
if ((sp->_mouse_mask & MASK_DOUBLE_CLICK(b))
|
||||
&& (follower->bstate & MASK_CLICK(b))) {
|
||||
follower->bstate &= ~MASK_CLICK(b);
|
||||
follower->bstate |= MASK_DOUBLE_CLICK(b);
|
||||
@ -1086,7 +1093,7 @@ _nc_mouse_parse(int runcount)
|
||||
if ((ep->bstate & BUTTON_DOUBLE_CLICKED)
|
||||
&& (follower->bstate & BUTTON_CLICKED)) {
|
||||
for (b = 1; b <= MAX_BUTTONS; ++b) {
|
||||
if ((SP->_mouse_mask & MASK_TRIPLE_CLICK(b))
|
||||
if ((sp->_mouse_mask & MASK_TRIPLE_CLICK(b))
|
||||
&& (follower->bstate & MASK_CLICK(b))) {
|
||||
follower->bstate &= ~MASK_CLICK(b);
|
||||
follower->bstate |= MASK_TRIPLE_CLICK(b);
|
||||
@ -1102,10 +1109,10 @@ _nc_mouse_parse(int runcount)
|
||||
|
||||
#ifdef TRACE
|
||||
if (USE_TRACEF(TRACE_IEVENT)) {
|
||||
_trace_slot("before mouse event queue compaction:");
|
||||
_trace_slot(sp, "before mouse event queue compaction:");
|
||||
_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
|
||||
(long) (runp - SP->_mouse_events),
|
||||
(long) ((eventp - SP->_mouse_events) + (EV_MAX - 1)) % EV_MAX,
|
||||
(long) (runp - sp->_mouse_events),
|
||||
(long) ((eventp - sp->_mouse_events) + (EV_MAX - 1)) % EV_MAX,
|
||||
runcount);
|
||||
_nc_unlock_global(tracef);
|
||||
}
|
||||
@ -1116,15 +1123,15 @@ _nc_mouse_parse(int runcount)
|
||||
* don't match the current event mask.
|
||||
*/
|
||||
for (; runcount; prev = PREV(eventp), runcount--)
|
||||
if (prev->id == INVALID_EVENT || !(prev->bstate & SP->_mouse_mask)) {
|
||||
SP->_mouse_eventp = eventp = prev;
|
||||
if (prev->id == INVALID_EVENT || !(prev->bstate & sp->_mouse_mask)) {
|
||||
sp->_mouse_eventp = eventp = prev;
|
||||
}
|
||||
#ifdef TRACE
|
||||
if (USE_TRACEF(TRACE_IEVENT)) {
|
||||
_trace_slot("after mouse event queue compaction:");
|
||||
_trace_slot(sp, "after mouse event queue compaction:");
|
||||
_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
|
||||
(long) (runp - SP->_mouse_events),
|
||||
(long) ((eventp - SP->_mouse_events) + (EV_MAX - 1)) % EV_MAX,
|
||||
(long) (runp - sp->_mouse_events),
|
||||
(long) ((eventp - sp->_mouse_events) + (EV_MAX - 1)) % EV_MAX,
|
||||
runcount);
|
||||
_nc_unlock_global(tracef);
|
||||
}
|
||||
@ -1132,8 +1139,8 @@ _nc_mouse_parse(int runcount)
|
||||
if (ep->id != INVALID_EVENT)
|
||||
TR(MY_TRACE,
|
||||
("_nc_mouse_parse: returning composite mouse event %s at slot %ld",
|
||||
_tracemouse(ep),
|
||||
(long) (ep - SP->_mouse_events)));
|
||||
_nc_tracemouse(sp, ep),
|
||||
(long) (ep - sp->_mouse_events)));
|
||||
#endif /* TRACE */
|
||||
|
||||
/* after all this, do we have a valid event? */
|
||||
@ -1141,26 +1148,26 @@ _nc_mouse_parse(int runcount)
|
||||
}
|
||||
|
||||
static void
|
||||
_nc_mouse_wrap(SCREEN *sp GCC_UNUSED)
|
||||
_nc_mouse_wrap(SCREEN *sp)
|
||||
/* release mouse -- called by endwin() before shellout/exit */
|
||||
{
|
||||
TR(MY_TRACE, ("_nc_mouse_wrap() called"));
|
||||
|
||||
switch (SP->_mouse_type) {
|
||||
switch (sp->_mouse_type) {
|
||||
case M_XTERM:
|
||||
if (SP->_mouse_mask)
|
||||
mouse_activate(FALSE);
|
||||
if (sp->_mouse_mask)
|
||||
mouse_activate(sp, FALSE);
|
||||
break;
|
||||
#if USE_GPM_SUPPORT
|
||||
/* GPM: pass all mouse events to next client */
|
||||
case M_GPM:
|
||||
if (SP->_mouse_mask)
|
||||
mouse_activate(FALSE);
|
||||
if (sp->_mouse_mask)
|
||||
mouse_activate(sp, FALSE);
|
||||
break;
|
||||
#endif
|
||||
#if USE_SYSMOUSE
|
||||
case M_SYSMOUSE:
|
||||
mouse_activate(FALSE);
|
||||
mouse_activate(sp, FALSE);
|
||||
break;
|
||||
#endif
|
||||
case M_NONE:
|
||||
@ -1169,29 +1176,29 @@ _nc_mouse_wrap(SCREEN *sp GCC_UNUSED)
|
||||
}
|
||||
|
||||
static void
|
||||
_nc_mouse_resume(SCREEN *sp GCC_UNUSED)
|
||||
_nc_mouse_resume(SCREEN *sp)
|
||||
/* re-connect to mouse -- called by doupdate() after shellout */
|
||||
{
|
||||
TR(MY_TRACE, ("_nc_mouse_resume() called"));
|
||||
|
||||
switch (SP->_mouse_type) {
|
||||
switch (sp->_mouse_type) {
|
||||
case M_XTERM:
|
||||
/* xterm: re-enable reporting */
|
||||
if (SP->_mouse_mask)
|
||||
mouse_activate(TRUE);
|
||||
if (sp->_mouse_mask)
|
||||
mouse_activate(sp, TRUE);
|
||||
break;
|
||||
|
||||
#if USE_GPM_SUPPORT
|
||||
case M_GPM:
|
||||
/* GPM: reclaim our event set */
|
||||
if (SP->_mouse_mask)
|
||||
mouse_activate(TRUE);
|
||||
if (sp->_mouse_mask)
|
||||
mouse_activate(sp, TRUE);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if USE_SYSMOUSE
|
||||
case M_SYSMOUSE:
|
||||
mouse_activate(TRUE);
|
||||
mouse_activate(sp, TRUE);
|
||||
break;
|
||||
#endif
|
||||
case M_NONE:
|
||||
@ -1205,14 +1212,13 @@ _nc_mouse_resume(SCREEN *sp GCC_UNUSED)
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
NCURSES_EXPORT(int)
|
||||
getmouse(MEVENT * aevent)
|
||||
/* grab a copy of the current mouse event */
|
||||
static int
|
||||
_nc_getmouse(SCREEN *sp, MEVENT * aevent)
|
||||
{
|
||||
T((T_CALLED("getmouse(%p)"), aevent));
|
||||
|
||||
if ((aevent != 0) && (SP != 0) && (SP->_mouse_type != M_NONE)) {
|
||||
MEVENT *eventp = SP->_mouse_eventp;
|
||||
if ((aevent != 0) && (sp != 0) && (sp->_mouse_type != M_NONE)) {
|
||||
MEVENT *eventp = sp->_mouse_eventp;
|
||||
/* compute the current-event pointer */
|
||||
MEVENT *prev = PREV(eventp);
|
||||
|
||||
@ -1220,8 +1226,8 @@ getmouse(MEVENT * aevent)
|
||||
*aevent = *prev;
|
||||
|
||||
TR(TRACE_IEVENT, ("getmouse: returning event %s from slot %ld",
|
||||
_tracemouse(prev),
|
||||
(long) (prev - SP->_mouse_events)));
|
||||
_nc_tracemouse(sp, prev),
|
||||
(long) (prev - sp->_mouse_events)));
|
||||
|
||||
prev->id = INVALID_EVENT; /* so the queue slot becomes free */
|
||||
returnCode(OK);
|
||||
@ -1229,29 +1235,42 @@ getmouse(MEVENT * aevent)
|
||||
returnCode(ERR);
|
||||
}
|
||||
|
||||
/* grab a copy of the current mouse event */
|
||||
NCURSES_EXPORT(int)
|
||||
ungetmouse(MEVENT * aevent)
|
||||
/* enqueue a synthesized mouse event to be seen by the next wgetch() */
|
||||
getmouse(MEVENT * aevent)
|
||||
{
|
||||
return _nc_getmouse(SP, aevent);
|
||||
}
|
||||
|
||||
static int
|
||||
_nc_ungetmouse(SCREEN *sp, MEVENT * aevent)
|
||||
{
|
||||
int result = ERR;
|
||||
|
||||
T((T_CALLED("ungetmouse(%p)"), aevent));
|
||||
|
||||
if (aevent != 0 && SP != 0) {
|
||||
MEVENT *eventp = SP->_mouse_eventp;
|
||||
if (aevent != 0 && sp != 0) {
|
||||
MEVENT *eventp = sp->_mouse_eventp;
|
||||
|
||||
/* stick the given event in the next-free slot */
|
||||
*eventp = *aevent;
|
||||
|
||||
/* bump the next-free pointer into the circular list */
|
||||
SP->_mouse_eventp = NEXT(eventp);
|
||||
sp->_mouse_eventp = NEXT(eventp);
|
||||
|
||||
/* push back the notification event on the keyboard queue */
|
||||
result = ungetch(KEY_MOUSE);
|
||||
result = _nc_ungetch(sp, KEY_MOUSE);
|
||||
}
|
||||
returnCode(result);
|
||||
}
|
||||
|
||||
/* enqueue a synthesized mouse event to be seen by the next wgetch() */
|
||||
NCURSES_EXPORT(int)
|
||||
ungetmouse(MEVENT * aevent)
|
||||
{
|
||||
return _nc_ungetmouse(SP, aevent);
|
||||
}
|
||||
|
||||
NCURSES_EXPORT(mmask_t)
|
||||
mousemask(mmask_t newmask, mmask_t * oldmask)
|
||||
/* set the mouse event mask */
|
||||
@ -1265,7 +1284,7 @@ mousemask(mmask_t newmask, mmask_t * oldmask)
|
||||
*oldmask = SP->_mouse_mask;
|
||||
|
||||
if (newmask || SP->_mouse_initialized) {
|
||||
_nc_mouse_init();
|
||||
_nc_mouse_init(SP);
|
||||
if (SP->_mouse_type != M_NONE) {
|
||||
result = newmask &
|
||||
(REPORT_MOUSE_POSITION
|
||||
@ -1278,7 +1297,7 @@ mousemask(mmask_t newmask, mmask_t * oldmask)
|
||||
| BUTTON_DOUBLE_CLICKED
|
||||
| BUTTON_TRIPLE_CLICKED);
|
||||
|
||||
mouse_activate((bool) (result != 0));
|
||||
mouse_activate(SP, (bool) (result != 0));
|
||||
|
||||
SP->_mouse_mask = result;
|
||||
}
|
||||
|
@ -42,7 +42,7 @@
|
||||
#include <curses.priv.h>
|
||||
#include <stddef.h>
|
||||
|
||||
MODULE_ID("$Id: lib_newwin.c,v 1.50 2008/05/03 16:36:39 tom Exp $")
|
||||
MODULE_ID("$Id: lib_newwin.c,v 1.51 2008/05/31 21:50:09 tom Exp $")
|
||||
|
||||
#define window_is(name) ((sp)->_##name == win)
|
||||
|
||||
@ -313,6 +313,7 @@ _nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags)
|
||||
}
|
||||
|
||||
wp->next = _nc_windows;
|
||||
wp->screen = SP;
|
||||
_nc_windows = wp;
|
||||
|
||||
T((T_CREATE("window %p"), win));
|
||||
@ -320,3 +321,20 @@ _nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags)
|
||||
_nc_unlock_global(windowlist);
|
||||
returnWin(win);
|
||||
}
|
||||
|
||||
/*
|
||||
* wgetch() and other functions with a WINDOW* parameter may use a SCREEN*
|
||||
* internally, and it is useful to allow those to be invoked without switching
|
||||
* SCREEN's, e.g., for multi-threaded applications.
|
||||
*/
|
||||
NCURSES_EXPORT(SCREEN *)
|
||||
_nc_screen_of(WINDOW *win)
|
||||
{
|
||||
SCREEN *sp = 0;
|
||||
|
||||
if (win != 0) {
|
||||
WINDOWLIST *wp = (WINDOWLIST *) win;
|
||||
sp = wp->screen;
|
||||
}
|
||||
return (sp);
|
||||
}
|
||||
|
@ -44,7 +44,7 @@
|
||||
#include <term.h> /* cur_term */
|
||||
#include <tic.h>
|
||||
|
||||
MODULE_ID("$Id: lib_set_term.c,v 1.108 2008/05/03 22:42:43 tom Exp $")
|
||||
MODULE_ID("$Id: lib_set_term.c,v 1.109 2008/05/31 20:11:26 tom Exp $")
|
||||
|
||||
NCURSES_EXPORT(SCREEN *)
|
||||
set_term(SCREEN *screenp)
|
||||
@ -212,7 +212,7 @@ no_mouse_inline(SCREEN *sp GCC_UNUSED)
|
||||
}
|
||||
|
||||
static bool
|
||||
no_mouse_parse(int code GCC_UNUSED)
|
||||
no_mouse_parse(SCREEN *sp GCC_UNUSED, int code GCC_UNUSED)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@
|
||||
#include <ctype.h>
|
||||
#include <term.h> /* num_labels, label_*, plab_norm */
|
||||
|
||||
MODULE_ID("$Id: lib_slk.c,v 1.31 2008/01/12 20:21:00 tom Exp $")
|
||||
MODULE_ID("$Id: lib_slk.c,v 1.33 2008/05/31 22:05:57 tom Exp $")
|
||||
|
||||
/*
|
||||
* We'd like to move these into the screen context structure, but cannot,
|
||||
@ -60,14 +60,16 @@ _nc_slk_format = 0; /* one more than format specified in slk_init() */
|
||||
static void
|
||||
slk_paint_info(WINDOW *win)
|
||||
{
|
||||
if (win && SP->slk_format == 4) {
|
||||
SCREEN *sp = _nc_screen_of(win);
|
||||
|
||||
if (win && sp && (sp->slk_format == 4)) {
|
||||
int i;
|
||||
|
||||
mvwhline(win, 0, 0, 0, getmaxx(win));
|
||||
wmove(win, 0, 0);
|
||||
|
||||
for (i = 0; i < SP->_slk->maxlab; i++) {
|
||||
mvwprintw(win, 0, SP->_slk->ent[i].ent_x, "F%d", i + 1);
|
||||
for (i = 0; i < sp->_slk->maxlab; i++) {
|
||||
mvwprintw(win, 0, sp->_slk->ent[i].ent_x, "F%d", i + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@
|
||||
|
||||
#include <curses.priv.h>
|
||||
|
||||
MODULE_ID("$Id: lib_ungetch.c,v 1.10 2008/05/03 20:20:58 tom Exp $")
|
||||
MODULE_ID("$Id: lib_ungetch.c,v 1.11 2008/05/31 16:44:54 tom Exp $")
|
||||
|
||||
#include <fifo_defs.h>
|
||||
|
||||
@ -52,7 +52,7 @@ _nc_fifo_dump(SCREEN *sp)
|
||||
int i;
|
||||
T(("head = %d, tail = %d, peek = %d", head, tail, peek));
|
||||
for (i = 0; i < 10; i++)
|
||||
T(("char %d = %s", i, _tracechar(sp->_fifo[i])));
|
||||
T(("char %d = %s", i, _nc_tracechar(sp, sp->_fifo[i])));
|
||||
}
|
||||
#endif /* TRACE */
|
||||
|
||||
@ -70,7 +70,7 @@ _nc_ungetch(SCREEN *sp, int ch)
|
||||
h_dec();
|
||||
|
||||
sp->_fifo[head] = ch;
|
||||
T(("ungetch %s ok", _tracechar(ch)));
|
||||
T(("ungetch %s ok", _nc_tracechar(sp, ch)));
|
||||
#ifdef TRACE
|
||||
if (USE_TRACEF(TRACE_IEVENT)) {
|
||||
_nc_fifo_dump(sp);
|
||||
@ -85,6 +85,6 @@ _nc_ungetch(SCREEN *sp, int ch)
|
||||
NCURSES_EXPORT(int)
|
||||
ungetch(int ch)
|
||||
{
|
||||
T((T_CALLED("ungetch(%s)"), _tracechar(ch)));
|
||||
T((T_CALLED("ungetch(%s)"), _nc_tracechar(SP, ch)));
|
||||
returnCode(_nc_ungetch(SP, ch));
|
||||
}
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include <curses.priv.h>
|
||||
#include <term.h>
|
||||
|
||||
MODULE_ID("$Id: resizeterm.c,v 1.32 2008/05/03 14:28:55 tom Exp $")
|
||||
MODULE_ID("$Id: resizeterm.c,v 1.33 2008/05/31 16:51:12 tom Exp $")
|
||||
|
||||
#define stolen_lines (screen_lines - SP->_lines_avail)
|
||||
|
||||
@ -418,7 +418,7 @@ resizeterm(int ToLines, int ToCols)
|
||||
result = resize_term(ToLines, ToCols);
|
||||
|
||||
#if USE_SIGWINCH
|
||||
ungetch(KEY_RESIZE); /* so application can know this */
|
||||
_nc_ungetch(SP, KEY_RESIZE); /* so application can know this */
|
||||
clearok(curscr, TRUE); /* screen contents are unknown */
|
||||
|
||||
/* ripped-off lines are a special case: if we did not lengthen
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
|
||||
* Copyright (c) 1998-2007,2008 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 *
|
||||
@ -39,7 +39,7 @@
|
||||
|
||||
#include <curses.priv.h>
|
||||
|
||||
MODULE_ID("$Id: tries.c,v 1.25 2007/09/29 20:37:13 tom Exp $")
|
||||
MODULE_ID("$Id: tries.c,v 1.26 2008/05/31 16:54:22 tom Exp $")
|
||||
|
||||
/*
|
||||
* Expand a keycode into the string that it corresponds to, returning null if
|
||||
@ -72,7 +72,7 @@ _nc_expand_try(TRIES * tree, unsigned code, int *count, size_t len)
|
||||
*((unsigned char *) (result + len)) = 128;
|
||||
#ifdef TRACE
|
||||
if (len == 0 && USE_TRACEF(TRACE_MAXIMUM)) {
|
||||
_tracef("expand_key %s %s", _tracechar(code), _nc_visbuf(result));
|
||||
_tracef("expand_key %s %s", _nc_tracechar(SP, code), _nc_visbuf(result));
|
||||
_nc_unlock_global(tracef);
|
||||
}
|
||||
#endif
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* $Id: curses.priv.h,v 1.375 2008/05/24 23:08:27 tom Exp $
|
||||
* $Id: curses.priv.h,v 1.382 2008/05/31 21:41:41 tom Exp $
|
||||
*
|
||||
* curses.priv.h
|
||||
*
|
||||
@ -603,8 +603,6 @@ typedef struct {
|
||||
char *tracedmp_buf;
|
||||
size_t tracedmp_used;
|
||||
|
||||
char tracemse_buf[TRACEMSE_MAX];
|
||||
|
||||
unsigned char *tracetry_buf;
|
||||
size_t tracetry_used;
|
||||
|
||||
@ -796,7 +794,7 @@ struct screen {
|
||||
int _maxclick;
|
||||
bool (*_mouse_event) (SCREEN *);
|
||||
bool (*_mouse_inline)(SCREEN *);
|
||||
bool (*_mouse_parse) (int);
|
||||
bool (*_mouse_parse) (SCREEN *, int);
|
||||
void (*_mouse_resume)(SCREEN *);
|
||||
void (*_mouse_wrap) (SCREEN *);
|
||||
int _mouse_fd; /* file-descriptor, if any */
|
||||
@ -873,6 +871,11 @@ struct screen {
|
||||
long _outchars;
|
||||
const char *_tputs_trace;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef TRACE
|
||||
char tracechr_buf[40];
|
||||
char tracemse_buf[TRACEMSE_MAX];
|
||||
#endif
|
||||
/*
|
||||
* ncurses/ncursesw are the same up to this point.
|
||||
@ -889,8 +892,9 @@ extern NCURSES_EXPORT_VAR(SCREEN *) _nc_screen_chain;
|
||||
extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch;
|
||||
|
||||
WINDOWLIST {
|
||||
WINDOW win; /* first, so WINDOW_EXT() works */
|
||||
WINDOW win; /* first, so WINDOW_EXT() works */
|
||||
WINDOWLIST *next;
|
||||
SCREEN *screen; /* screen containing the window */
|
||||
#ifdef _XOPEN_SOURCE_EXTENDED
|
||||
char addch_work[(MB_LEN_MAX * 9) + 1];
|
||||
unsigned addch_used; /* number of bytes in addch_work[] */
|
||||
@ -1533,10 +1537,15 @@ extern NCURSES_EXPORT(int) _nc_remove_key (TRIES **, unsigned);
|
||||
extern NCURSES_EXPORT(int) _nc_remove_string (TRIES **, const char *);
|
||||
|
||||
/* elsewhere ... */
|
||||
extern NCURSES_EXPORT(ENTRY *) _nc_delink_entry(ENTRY *, TERMTYPE *);
|
||||
extern NCURSES_EXPORT(ENTRY *) _nc_delink_entry (ENTRY *, TERMTYPE *);
|
||||
extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_keyname (SCREEN *, int);
|
||||
extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_unctrl (SCREEN *, chtype);
|
||||
extern NCURSES_EXPORT(SCREEN *) _nc_screen_of (WINDOW *);
|
||||
extern NCURSES_EXPORT(WINDOW *) _nc_makenew (int, int, int, int, int);
|
||||
extern NCURSES_EXPORT(char *) _nc_trace_buf (int, size_t);
|
||||
extern NCURSES_EXPORT(char *) _nc_trace_bufcat (int, const char *);
|
||||
extern NCURSES_EXPORT(char *) _nc_tracechar (SCREEN *, int);
|
||||
extern NCURSES_EXPORT(char *) _nc_tracemouse (SCREEN *, MEVENT const *);
|
||||
extern NCURSES_EXPORT(int) _nc_access (const char *, int);
|
||||
extern NCURSES_EXPORT(int) _nc_baudrate (int);
|
||||
extern NCURSES_EXPORT(int) _nc_freewin (WINDOW *);
|
||||
@ -1546,10 +1555,10 @@ extern NCURSES_EXPORT(int) _nc_ospeed (int);
|
||||
extern NCURSES_EXPORT(int) _nc_outch (int);
|
||||
extern NCURSES_EXPORT(int) _nc_read_termcap_entry (const char *const, TERMTYPE *const);
|
||||
extern NCURSES_EXPORT(int) _nc_setupscreen (int, int, FILE *, bool, int);
|
||||
extern NCURSES_EXPORT(int) _nc_timed_wait(SCREEN *, int, int, int * EVENTLIST_2nd(_nc_eventlist *));
|
||||
extern NCURSES_EXPORT(int) _nc_timed_wait (SCREEN *, int, int, int * EVENTLIST_2nd(_nc_eventlist *));
|
||||
extern NCURSES_EXPORT(void) _nc_do_color (short, short, bool, int (*)(int));
|
||||
extern NCURSES_EXPORT(void) _nc_flush (void);
|
||||
extern NCURSES_EXPORT(void) _nc_free_entry(ENTRY *, TERMTYPE *);
|
||||
extern NCURSES_EXPORT(void) _nc_free_entry (ENTRY *, TERMTYPE *);
|
||||
extern NCURSES_EXPORT(void) _nc_freeall (void);
|
||||
extern NCURSES_EXPORT(void) _nc_hash_map (void);
|
||||
extern NCURSES_EXPORT(void) _nc_init_keytry (SCREEN *);
|
||||
|
@ -41,7 +41,7 @@
|
||||
|
||||
#include <curses.priv.h>
|
||||
|
||||
MODULE_ID("$Id: lib_data.c,v 1.44 2008/05/24 23:09:21 tom Exp $")
|
||||
MODULE_ID("$Id: lib_data.c,v 1.47 2008/05/31 19:44:36 tom Exp $")
|
||||
|
||||
/*
|
||||
* OS/2's native linker complains if we don't initialize public data when
|
||||
@ -168,8 +168,6 @@ NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals = {
|
||||
NULL, /* tracedmp_buf */
|
||||
0, /* tracedmp_used */
|
||||
|
||||
CHARS_0s, /* tracemse_buf */
|
||||
|
||||
NULL, /* tracetry_buf */
|
||||
0, /* tracetry_used */
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
|
||||
* Copyright (c) 1998-2007,2008 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 *
|
||||
@ -39,7 +39,7 @@
|
||||
#include <curses.priv.h>
|
||||
#include <term.h> /* acs_chars */
|
||||
|
||||
MODULE_ID("$Id: lib_traceatr.c,v 1.59 2007/06/09 17:22:10 tom Exp $")
|
||||
MODULE_ID("$Id: lib_traceatr.c,v 1.60 2008/05/31 16:53:15 tom Exp $")
|
||||
|
||||
#define COLOR_OF(c) ((c < 0) ? "default" : (c > 7 ? color_of(c) : colors[c].name))
|
||||
|
||||
@ -255,7 +255,7 @@ _tracechtype2(int bufnum, chtype ch)
|
||||
if ((found = _nc_altcharset_name(ChAttrOf(ch), ch)) != 0) {
|
||||
(void) _nc_trace_bufcat(bufnum, found);
|
||||
} else
|
||||
(void) _nc_trace_bufcat(bufnum, _tracechar((int)ChCharOf(ch)));
|
||||
(void) _nc_trace_bufcat(bufnum, _nc_tracechar(SP, (int)ChCharOf(ch)));
|
||||
|
||||
if (ChAttrOf(ch) != A_NORMAL) {
|
||||
(void) _nc_trace_bufcat(bufnum, " | ");
|
||||
@ -311,14 +311,14 @@ _tracecchar_t2 (int bufnum, const cchar_t *ch)
|
||||
if (PUTC_n <= 0) {
|
||||
if (PUTC_ch != L'\0') {
|
||||
/* it could not be a multibyte sequence */
|
||||
(void) _nc_trace_bufcat(bufnum, _tracechar(UChar(ch->chars[PUTC_i])));
|
||||
(void) _nc_trace_bufcat(bufnum, _nc_tracechar(SP, UChar(ch->chars[PUTC_i])));
|
||||
}
|
||||
break;
|
||||
}
|
||||
for (n = 0; n < PUTC_n; n++) {
|
||||
if (n)
|
||||
(void) _nc_trace_bufcat(bufnum, ", ");
|
||||
(void) _nc_trace_bufcat(bufnum, _tracechar(UChar(PUTC_buf[n])));
|
||||
(void) _nc_trace_bufcat(bufnum, _nc_tracechar(SP, UChar(PUTC_buf[n])));
|
||||
}
|
||||
}
|
||||
(void) _nc_trace_bufcat(bufnum, " }");
|
||||
|
@ -39,18 +39,20 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
MODULE_ID("$Id: lib_tracechr.c,v 1.13 2007/04/21 23:16:37 tom Exp $")
|
||||
MODULE_ID("$Id: lib_tracechr.c,v 1.17 2008/05/31 19:57:47 tom Exp $")
|
||||
|
||||
#ifdef TRACE
|
||||
#define MyBuffer _nc_globals.tracechr_buf
|
||||
|
||||
NCURSES_EXPORT(char *)
|
||||
_tracechar(int ch)
|
||||
_nc_tracechar(SCREEN *sp, int ch)
|
||||
{
|
||||
NCURSES_CONST char *name;
|
||||
char *MyBuffer = ((sp != 0)
|
||||
? sp->tracechr_buf
|
||||
: _nc_globals.tracechr_buf);
|
||||
|
||||
if (ch > KEY_MIN || ch < 0) {
|
||||
name = keyname(ch);
|
||||
name = _nc_keyname(sp, ch);
|
||||
if (name == 0 || *name == '\0')
|
||||
name = "NULL";
|
||||
(void) sprintf(MyBuffer, "'%.30s' = %#03o", name, ch);
|
||||
@ -62,13 +64,19 @@ _tracechar(int ch)
|
||||
*/
|
||||
(void) sprintf(MyBuffer, "%#03o", ch);
|
||||
} else {
|
||||
name = unctrl((chtype) ch);
|
||||
name = _nc_unctrl(sp, (chtype) ch);
|
||||
if (name == 0 || *name == 0)
|
||||
name = "null"; /* shouldn't happen */
|
||||
(void) sprintf(MyBuffer, "'%.30s' = %#03o", name, ch);
|
||||
}
|
||||
return (MyBuffer);
|
||||
}
|
||||
|
||||
NCURSES_EXPORT(char *)
|
||||
_tracechar(int ch)
|
||||
{
|
||||
return _nc_tracechar(SP, ch);
|
||||
}
|
||||
#else
|
||||
empty_module(_nc_lib_tracechr)
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* Copyright (c) 1998-2005,2007 Free Software Foundation, Inc. *
|
||||
* Copyright (c) 1998-2007,2008 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 *
|
||||
@ -38,14 +38,14 @@
|
||||
|
||||
#include <curses.priv.h>
|
||||
|
||||
MODULE_ID("$Id: lib_tracemse.c,v 1.13 2007/04/21 21:23:00 tom Exp $")
|
||||
MODULE_ID("$Id: lib_tracemse.c,v 1.14 2008/05/31 17:20:25 tom Exp $")
|
||||
|
||||
#ifdef TRACE
|
||||
|
||||
#define my_buffer _nc_globals.tracemse_buf
|
||||
#define my_buffer sp->tracemse_buf
|
||||
|
||||
NCURSES_EXPORT(char *)
|
||||
_tracemouse(MEVENT const *ep)
|
||||
_nc_tracemouse(SCREEN *sp, MEVENT const *ep)
|
||||
{
|
||||
(void) sprintf(my_buffer, TRACEMSE_FMT,
|
||||
ep->id,
|
||||
@ -114,6 +114,12 @@ _tracemouse(MEVENT const *ep)
|
||||
return (my_buffer);
|
||||
}
|
||||
|
||||
NCURSES_EXPORT(char *)
|
||||
_tracemouse(MEVENT const *ep)
|
||||
{
|
||||
return _nc_tracemouse(SP, ep);
|
||||
}
|
||||
|
||||
#else /* !TRACE */
|
||||
empty_module(_nc_lib_tracemouse)
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user