0
0
mirror of https://github.com/rkd77/elinks.git synced 2025-06-30 22:19:29 -04: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 EINTRLOOP(ret_, call_) EINTRLOOPX(ret_, call_, -1)
#define B_MOVE 96
#ifdef __ICC #ifdef __ICC
/* ICC OpenMP bug */ /* ICC OpenMP bug */
#define overalloc_condition 0 #define overalloc_condition 0
@ -260,10 +258,10 @@ static int dos_mouse_last_y;
static int dos_mouse_last_button; static int dos_mouse_last_button;
static uttime dos_mouse_time; 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 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 void *txt_mouse_data;
static int dos_mouse_coord(int v) static int dos_mouse_coord(int v)
@ -271,7 +269,7 @@ static int dos_mouse_coord(int v)
#if 0 #if 0
if (!F) v /= 8; if (!F) v /= 8;
#endif #endif
return v; return v / 8;
} }
static void dos_mouse_show(void) static void dos_mouse_show(void)
@ -323,7 +321,9 @@ static void dos_mouse_init(unsigned x, unsigned y)
void dos_mouse_terminate(void) 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 = DUMMY;
dos_mouse_queue_n = 0; dos_mouse_queue_n = 0;
dos_mouse_hide(); dos_mouse_hide();
@ -335,8 +335,14 @@ static void dos_mouse_enqueue(int x, int y, int b)
dos_mouse_queue_n--; dos_mouse_queue_n--;
goto set_last; goto set_last;
} }
if ((unsigned)dos_mouse_queue_n > (unsigned)MAXINT / sizeof(struct term_event) - 1) overalloc(); if ((unsigned)dos_mouse_queue_n > (unsigned)MAXINT / sizeof(struct interlink_event) - 1) {
dos_mouse_queue = mem_realloc(dos_mouse_queue, (dos_mouse_queue_n + 1) * sizeof(struct term_event)); 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: set_last:
dos_mouse_queue[dos_mouse_queue_n].ev = EVENT_MOUSE; dos_mouse_queue[dos_mouse_queue_n].ev = EVENT_MOUSE;
dos_mouse_queue[dos_mouse_queue_n].info.mouse.x = x; dos_mouse_queue[dos_mouse_queue_n].info.mouse.x = x;
@ -421,18 +427,15 @@ x:
#endif #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; int x, y;
get_terminal_size(&x, &y); get_terminal_size(cons, &x, &y);
dos_mouse_init(x * 8, y * 8); dos_mouse_init(x * 8, y * 8);
if (!dos_mouse_initialized) return NULL; if (!dos_mouse_initialized) return NULL;
dos_mouse_show(); dos_mouse_show();
txt_mouse_handler = fn; txt_mouse_handler = fn;
txt_mouse_data = data; txt_mouse_data = data;
#endif
return DUMMY; return DUMMY;
} }
@ -443,6 +446,16 @@ void unhandle_mouse(void *data)
txt_mouse_handler = NULL; txt_mouse_handler = NULL;
} }
void
suspend_mouse(void *data)
{
}
void
resume_mouse(void *data)
{
}
void want_draw(void) void want_draw(void)
{ {
dos_mouse_hide(); dos_mouse_hide();
@ -457,11 +470,11 @@ static int dos_mouse_event(void)
{ {
if (dos_mouse_queue_n) { if (dos_mouse_queue_n) {
if (/*!F &&*/ txt_mouse_handler) { 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; int ql = dos_mouse_queue_n;
dos_mouse_queue = DUMMY; dos_mouse_queue = DUMMY;
dos_mouse_queue_n = 0; 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); mem_free(q);
return 1; return 1;
} }

View File

@ -962,7 +962,7 @@ elinks_cfmakeraw(struct termios *t)
t->c_cc[VTIME] = 0; 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 * void *
handle_mouse(int cons, void (*fn)(void *, char *, int), 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_UP 3
#define B_WHEEL_DOWN 4 #define B_WHEEL_DOWN 4
#define BM_ACT 32 #define BM_ACT 48
#define B_DOWN 0 #define B_DOWN 0
#define B_UP 32 #define B_UP 16
#define B_DRAG 32
#define B_MOVE 48
#define BM_DRAG 64 #define BM_DRAG 64
#define B_DRAG 64
#define mouse_get_action(mouse_) ((mouse_)->button & BM_ACT) #define mouse_get_action(mouse_) ((mouse_)->button & BM_ACT)
#define mouse_action_is(mouse_, value) (mouse_get_action(mouse_) == (value)) #define mouse_action_is(mouse_, value) (mouse_get_action(mouse_) == (value))