--- a/basic.c	2025-02-03 03:07:45.000000000 -0500
+++ b/basic.c	2026-01-02 11:30:35.326511785 -0500
@@ -15,6 +15,7 @@
 INT	backpage(INT f, INT n);
 INT	nextwind(INT f, INT n);
 INT	endvisualline(INT f, INT n);
+INT	reverse_mousewheel; /* Mg3a: mousewheel reverse direction; default is off */

 extern	INT	getkey(INT);		/* 	*/
 extern  INT     refresh(INT,INT);       /* window.c */
@@ -605,6 +606,7 @@
 	return TRUE;
 }

+
 #ifdef MOUSE
 /*
  * Respond to mouse messages
@@ -627,7 +629,12 @@
 	}
 #endif
 	if ((mreport[0] & 0xfe) == 0x60) {
-		return forwline(0, 1 - 2*(mreport[0] & 0x01));
+		/* Mg3a: toggle for wheel reverse */
+		if (reverse_mousewheel == 0) {
+			return forwline(0, 1 - 2*(mreport[0] & 0x01));
+		} else {
+			return backline(0, 1 - 2*(mreport[0] & 0x01));
+		}
 	} else if (mreport[0] == 0x20) {
 		INT x=mreport[1]-32, y=mreport[2]-32;
 		for (WINDOW *wp = wheadp; wp; wp = wp->w_wndp) {

--- a/README.reference	2025-02-03 03:07:45.000000000 -0500
+++ b/README.reference	2026-01-02 11:30:35.328936980 -0500
@@ -127,6 +127,10 @@
 				  "recenter-top-bottom" and "recenter" commands.
 				  Default 0.

+"reverse-mousewheel"            - Indicates if the scroll direction of the mouse wheel
+				  should be reversed. Helpful for certain terminals.
+				  Default is 0.
+
 "modeline-show"			- A set of binary flags controlling what is showed in
 				  the modeline. Default is 0. Values to add together:

--- a/variables.c	2025-02-03 03:07:45.000000000 -0500
+++ b/variables.c	2026-01-02 11:30:35.328936980 -0500
@@ -18,6 +18,7 @@
 extern INT scrollbyone;
 extern INT recenter_redisplay;
 extern INT modeline_show;
+extern INT reverse_mousewheel;
 extern INT kill_whole_lines;
 extern INT quoted_char_radix;
 extern INT fill_options;
@@ -64,6 +65,7 @@
 	{"",			0, NULL},
 	{"window-scroll", 	'i', &scrollbyone},
 	{"recenter-redisplay",'i', &recenter_redisplay},
+	{"reverse-mousewheel", 'i', &reverse_mousewheel},
 	{"",			0, NULL},
 	{"modeline-show",	'i', &modeline_show},
 	{"kill-whole-lines",	'i', &kill_whole_lines},
