1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-06-25 01:05:37 +00:00

[mouse] enabled mouse in DOS

Also redefined constants in mouse.h to be consistent with links.
This commit is contained in:
Witold Filipczyk 2022-05-10 19:19:49 +02:00
parent 6bd33247f8
commit 0aeb8b4c25
3 changed files with 34 additions and 20 deletions

View File

@ -61,8 +61,6 @@ do { \
#define EINTRLOOP(ret_, call_) EINTRLOOPX(ret_, call_, -1)
#define B_MOVE 96
#ifdef __ICC
/* ICC OpenMP bug */
#define overalloc_condition 0
@ -260,10 +258,10 @@ static int dos_mouse_last_y;
static int dos_mouse_last_button;
static uttime dos_mouse_time;
static struct term_event *dos_mouse_queue = DUMMY;
static struct interlink_event *dos_mouse_queue = DUMMY;
static int dos_mouse_queue_n;
static void (*txt_mouse_handler)(void *, unsigned char *, int) = NULL;
static void (*txt_mouse_handler)(void *, char *, int) = NULL;
static void *txt_mouse_data;
static int dos_mouse_coord(int v)
@ -271,7 +269,7 @@ static int dos_mouse_coord(int v)
#if 0
if (!F) v /= 8;
#endif
return v;
return v / 8;
}
static void dos_mouse_show(void)
@ -323,7 +321,9 @@ static void dos_mouse_init(unsigned x, unsigned y)
void dos_mouse_terminate(void)
{
mem_free(dos_mouse_queue);
if (dos_mouse_queue != DUMMY) {
mem_free_if(dos_mouse_queue);
}
dos_mouse_queue = DUMMY;
dos_mouse_queue_n = 0;
dos_mouse_hide();
@ -335,8 +335,14 @@ static void dos_mouse_enqueue(int x, int y, int b)
dos_mouse_queue_n--;
goto set_last;
}
if ((unsigned)dos_mouse_queue_n > (unsigned)MAXINT / sizeof(struct term_event) - 1) overalloc();
dos_mouse_queue = mem_realloc(dos_mouse_queue, (dos_mouse_queue_n + 1) * sizeof(struct term_event));
if ((unsigned)dos_mouse_queue_n > (unsigned)MAXINT / sizeof(struct interlink_event) - 1) {
overalloc();
}
if (dos_mouse_queue == DUMMY) {
dos_mouse_queue = mem_alloc((dos_mouse_queue_n + 1) * sizeof(struct interlink_event));
} else {
dos_mouse_queue = mem_realloc(dos_mouse_queue, (dos_mouse_queue_n + 1) * sizeof(struct interlink_event));
}
set_last:
dos_mouse_queue[dos_mouse_queue_n].ev = EVENT_MOUSE;
dos_mouse_queue[dos_mouse_queue_n].info.mouse.x = x;
@ -421,18 +427,15 @@ x:
#endif
}
void *handle_mouse(int cons, void (*fn)(void *, unsigned char *, int), void *data)
void *handle_mouse(int cons, void (*fn)(void *, char *, int), void *data)
{
return NULL;
#if 0
int x, y;
get_terminal_size(&x, &y);
get_terminal_size(cons, &x, &y);
dos_mouse_init(x * 8, y * 8);
if (!dos_mouse_initialized) return NULL;
dos_mouse_show();
txt_mouse_handler = fn;
txt_mouse_data = data;
#endif
return DUMMY;
}
@ -443,6 +446,16 @@ void unhandle_mouse(void *data)
txt_mouse_handler = NULL;
}
void
suspend_mouse(void *data)
{
}
void
resume_mouse(void *data)
{
}
void want_draw(void)
{
dos_mouse_hide();
@ -457,11 +470,11 @@ static int dos_mouse_event(void)
{
if (dos_mouse_queue_n) {
if (/*!F &&*/ txt_mouse_handler) {
struct term_event *q = dos_mouse_queue;
struct interlink_event *q = dos_mouse_queue;
int ql = dos_mouse_queue_n;
dos_mouse_queue = DUMMY;
dos_mouse_queue_n = 0;
txt_mouse_handler(txt_mouse_data, (unsigned char *)(void *)q, ql * sizeof(struct term_event));
txt_mouse_handler(txt_mouse_data, (char *)(void *)q, ql * sizeof(struct interlink_event));
mem_free(q);
return 1;
}

View File

@ -962,7 +962,7 @@ elinks_cfmakeraw(struct termios *t)
t->c_cc[VTIME] = 0;
}
#if !defined(CONFIG_MOUSE) || (!defined(CONFIG_GPM) && !defined(CONFIG_SYSMOUSE) && !defined(OS2_MOUSE))
#if !defined(CONFIG_MOUSE) || (!defined(CONFIG_GPM) && !defined(CONFIG_SYSMOUSE) && !defined(OS2_MOUSE) && !defined(CONFIG_OS_DOS))
void *
handle_mouse(int cons, void (*fn)(void *, char *, int),

View File

@ -96,12 +96,13 @@ struct term_event_mouse {
#define B_WHEEL_UP 3
#define B_WHEEL_DOWN 4
#define BM_ACT 32
#define B_DOWN 0
#define B_UP 32
#define BM_ACT 48
#define B_DOWN 0
#define B_UP 16
#define B_DRAG 32
#define B_MOVE 48
#define BM_DRAG 64
#define B_DRAG 64
#define mouse_get_action(mouse_) ((mouse_)->button & BM_ACT)
#define mouse_action_is(mouse_, value) (mouse_get_action(mouse_) == (value))