diff --git a/src/sbbs3/con_out.cpp b/src/sbbs3/con_out.cpp index ddcb6fc8a82e3ec717fe66fa320f7042de1e2c88..fe67ac143432eaa3d4b788750afdf830b54e6ba6 100644 --- a/src/sbbs3/con_out.cpp +++ b/src/sbbs3/con_out.cpp @@ -519,7 +519,7 @@ long sbbs_t::term_supports(long cmp_flags) long flags = ((sys_status&SS_USERON) && !(useron.misc&AUTOTERM)) ? useron.misc : autoterm; if((sys_status&SS_USERON) && (useron.misc&AUTOTERM)) - flags |= useron.misc & (NO_EXASCII | SWAP_DELETE | COLOR | ICE_COLOR); + flags |= useron.misc & (NO_EXASCII | SWAP_DELETE | COLOR | ICE_COLOR | MOUSE); return(cmp_flags ? ((flags&cmp_flags)==cmp_flags) : (flags&TERM_FLAGS)); } diff --git a/src/sbbs3/inkey.cpp b/src/sbbs3/inkey.cpp index 2af3a12434af727db04643dc81fd304ca73286b0..96d64604b35c31edfb1f67158399339651a3cc9f 100644 --- a/src/sbbs3/inkey.cpp +++ b/src/sbbs3/inkey.cpp @@ -390,7 +390,7 @@ char sbbs_t::handle_ctrlkey(char ch, long mode) return handle_ctrlkey(TERM_KEY_ABORT, mode); return 0; } - if(pause_inside) + if(pause_inside && y == rows - 1) return '\r'; } else if(button == '`' && console&CON_MOUSE_SCROLL) { return TERM_KEY_UP; @@ -464,7 +464,7 @@ char sbbs_t::handle_ctrlkey(char ch, long mode) return handle_ctrlkey(TERM_KEY_ABORT, mode); return 0; } - if(pause_inside) + if(pause_inside && y == rows - 1) return '\r'; } else if(button == 0x40 && console&CON_MOUSE_SCROLL) { return TERM_KEY_UP; @@ -559,7 +559,7 @@ char sbbs_t::handle_ctrlkey(char ch, long mode) void sbbs_t::set_mouse(long flags) { - if(term_supports(ANSI)) { + if(term_supports(ANSI|MOUSE)) { long mode = mouse_mode & ~flags; if(mode & MOUSE_MODE_X10) ansi_mouse(ANSI_MOUSE_X10, false); if(mode & MOUSE_MODE_NORM) ansi_mouse(ANSI_MOUSE_NORM, false); diff --git a/src/sbbs3/logon.cpp b/src/sbbs3/logon.cpp index e99678980384d0130f86f3b092d7d38be7be8531..3284d34dcc18e8c93052e51dc69e080aed0b01a4 100644 --- a/src/sbbs3/logon.cpp +++ b/src/sbbs3/logon.cpp @@ -80,10 +80,12 @@ bool sbbs_t::logon() if(useron.rest&FLAG('G')) { /* Guest account */ useron.misc=(cfg.new_misc&(~ASK_NSCAN)); useron.rows=0; - useron.misc&=~(ANSI|RIP|NO_EXASCII|COLOR|PETSCII); + useron.misc &= ~TERM_FLAGS; useron.misc|=autoterm; if(!(useron.misc&(ANSI|PETSCII)) && text[AnsiTerminalQ][0] && yesno(text[AnsiTerminalQ])) useron.misc|=ANSI; + if((useron.misc&ANSI) && text[MouseTerminalQ][0] && yesno(text[MouseTerminalQ])) + useron.misc|=MOUSE; if((useron.misc&RIP) || !(cfg.uq&UQ_COLORTERM) || (useron.misc&(ANSI|PETSCII) && yesno(text[ColorTerminalQ]))) useron.misc|=COLOR; diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp index 1dd69fe688bc83163ae43d625746e5cc180cd5c2..c57e0fb7583aac0c1da061bc48eb651e71ceb2fc 100644 --- a/src/sbbs3/newuser.cpp +++ b/src/sbbs3/newuser.cpp @@ -165,6 +165,10 @@ BOOL sbbs_t::newuser() useron.misc|=COLOR; else useron.misc&=~COLOR; + if(text[MouseTerminalQ][0] && yesno(text[MouseTerminalQ])) + useron.misc |= MOUSE; + else + useron.misc &= ~MOUSE; } else useron.rows = TERM_ROWS_DEFAULT; diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 5c6c3a65b57cf75af4325e1b651fadc4bd0bbebd..e7d8b4fd356de35a4e0236d48b82391d36f4b103 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -668,8 +668,9 @@ typedef enum { /* Values for xtrn_t.event */ #define SWAP_DELETE (1L<<27) /* Swap Delete and Backspace keys */ #define ICE_COLOR (1L<<28) /* Bright background color support */ #define UTF8 (1L<<29) /* UTF-8 terminal */ +#define MOUSE (1L<<31) /* Mouse supported terminal */ -#define TERM_FLAGS (ANSI|COLOR|NO_EXASCII|RIP|WIP|HTML|PETSCII|SWAP_DELETE|ICE_COLOR|UTF8) +#define TERM_FLAGS (ANSI|COLOR|RIP|WIP|HTML|SWAP_DELETE|ICE_COLOR|MOUSE|CHARSET_FLAGS) #define CHARSET_FLAGS (NO_EXASCII|PETSCII|UTF8) #define CHARSET_ASCII NO_EXASCII // US-ASCII #define CHARSET_PETSCII PETSCII // CBM-ASCII diff --git a/src/sbbs3/text.h b/src/sbbs3/text.h index 6065e3a5b49fa337587dff7cea7cb70e82dc01e4..83d59069c10e71bfdeb436f6ad1ba08357a92e62 100644 --- a/src/sbbs3/text.h +++ b/src/sbbs3/text.h @@ -841,6 +841,8 @@ enum { ,MsgPostedToYouVia ,Unlimited ,NodeConnectionRaw + ,MouseTerminalQ + ,TerminalMouse ,TOTAL_TEXT }; diff --git a/src/sbbs3/text_defaults.c b/src/sbbs3/text_defaults.c index b83d6415b28968a2774c28e493a973f19cd2f697..d4f8d8fcd785d2cc7cfdbecbf4394e0958252897 100644 --- a/src/sbbs3/text_defaults.c +++ b/src/sbbs3/text_defaults.c @@ -1351,7 +1351,7 @@ const char * const text_defaults[TOTAL_TEXT]={ "\x65\x63\x74\x65\x64\x2e\x0d\x0a" // 815 PetTerminalDetected ,"\x41\x72\x65\x20\x79\x6f\x75\x20\x75\x73\x69\x6e\x67\x20\x61\x20\x43\x42\x4d\x2f\x50\x45\x54\x53\x43\x49\x49\x20\x74\x65\x72\x6d" "\x69\x6e\x61\x6c" // 816 PetTerminalQ - ,"\x41\x75\x74\x6f\x20\x44\x65\x74\x65\x63\x74\x20" // 817 TerminalAutoDetect + ,"\x41\x75\x74\x6f\x20" // 817 TerminalAutoDetect ,"\x63\x6f\x6c\x75\x6d\x6e\x73" // 818 TerminalColumns ,"\x72\x6f\x77\x73" // 819 TerminalRows ,"\x28\x6d\x6f\x6e\x6f\x29\x20" // 820 TerminalMonochrome @@ -1372,4 +1372,7 @@ const char * const text_defaults[TOTAL_TEXT]={ "\x6e\x20\x01\x68\x25\x73\x20\x01\x6e\x01\x6d\x25\x73\x0d\x0a" // 828 MsgPostedToYouVia ,"\x75\x6e\x6c\x69\x6d\x69\x74\x65\x64" // 829 Unlimited ,"\x20\x76\x69\x61\x20\x72\x61\x77" // 830 NodeConnectionRaw + ,"\x44\x6f\x65\x73\x20\x79\x6f\x75\x72\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x6d\x6f\x75\x73\x65" + "\x20\x72\x65\x70\x6f\x72\x74\x69\x6e\x67" // 831 MouseTerminalQ + ,"\x28\x6d\x6f\x75\x73\x65\x29\x20" // 832 TerminalMouse }; diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp index b72c91bc0dac256215942ec6a3488ce99862c29a..1a48fd2fb0704540b9ee5bd8fa8eedcf8c084ea8 100644 --- a/src/sbbs3/useredit.cpp +++ b/src/sbbs3/useredit.cpp @@ -806,11 +806,12 @@ void sbbs_t::maindflts(user_t* user) ,user->misc&AUTOTERM ? text[TerminalAutoDetect]:nulstr ,cols, text[TerminalColumns]); else - safe_snprintf(str,sizeof(str),"%s%s / %s %s%s" + safe_snprintf(str,sizeof(str),"%s%s / %s %s%s%s" ,user->misc&AUTOTERM ? text[TerminalAutoDetect]:nulstr ,term_charset(term) ,term_type(term) ,term&COLOR ? (term&ICE_COLOR ? text[TerminalIceColor] : text[TerminalColor]) : text[TerminalMonochrome] + ,term&MOUSE ? text[TerminalMouse] : "" ,term&SWAP_DELETE ? "DEL=BS" : nulstr); add_hotspot('T'); bprintf(text[UserDefaultsTerminal], truncsp(str)); @@ -950,6 +951,14 @@ void sbbs_t::maindflts(user_t* user) } else user->misc &= ~COLOR; } + if(sys_status&SS_ABORT) + break; + if(term&ANSI) { + if(text[MouseTerminalQ][0] && yesno(text[MouseTerminalQ])) + user->misc |= MOUSE; + else + user->misc &= ~MOUSE; + } if(sys_status&SS_ABORT) break; if(!(term&PETSCII)) {