Skip to content
Snippets Groups Projects
term.c 116 KiB
Newer Older
Deucе's avatar
Deucе committed
						cterm->scrollback = scrollback_buf;
						cterm->backlines = settings.backlines;
						if (cterm->backpos > cterm->backlines)
							cterm->backpos = cterm->backlines;
Deucе's avatar
Deucе committed
					showmouse();
					_setcursortype(_NORMALCURSOR);
					key = 0;
				}
				break;
				case 0x2100: /* ALT-F */
deuce's avatar
deuce committed
					font_control(bbs, cterm);
					showmouse();
deuce's avatar
deuce committed
					key = 0;
Deucе's avatar
Deucе committed
				case 0x2600: /* ALT-L */
					if ((bbs->conn_type != CONN_TYPE_RLOGIN)
					    && (bbs->conn_type != CONN_TYPE_RLOGIN_REVERSED)
					    && (bbs->conn_type != CONN_TYPE_SSH)) {
						if (bbs->conn_type != CONN_TYPE_SSHNA) {
Deucе's avatar
Deucе committed
							if (bbs->user[0]) {
								conn_send(bbs->user, strlen(bbs->user), 0);
								conn_send(
									cterm->emulation == CTERM_EMULATION_ATASCII ? "\x9b" : "\r",
									1,
									0);
Deucе's avatar
Deucе committed
						if (bbs->password[0]) {
							conn_send(bbs->password, strlen(bbs->password), 0);
							conn_send(
								cterm->emulation == CTERM_EMULATION_ATASCII ? "\x9b" : "\r",
								1,
								0);
Deucе's avatar
Deucе committed
					if (bbs->syspass[0]) {
						conn_send(bbs->syspass, strlen(bbs->syspass), 0);
						conn_send(cterm->emulation == CTERM_EMULATION_ATASCII ? "\x9b" : "\r",
						    1,
						    0);
deuce's avatar
deuce committed
					key = 0;
Deucе's avatar
Deucе committed
				case 0x3200: /* ALT-M */
deuce's avatar
deuce committed
					music_control(bbs);
					showmouse();
deuce's avatar
deuce committed
					key = 0;
deuce's avatar
deuce committed
					break;
Deucе's avatar
Deucе committed
				case 0x1600: /* ALT-U - Upload */
					begin_upload(bbs, false, inch);
					showmouse();
deuce's avatar
deuce committed
					key = 0;
Deucе's avatar
Deucе committed
				case 17: /* CTRL-Q */
					if ((cio_api.mode != CIOLIB_MODE_CURSES)
					    && (cio_api.mode != CIOLIB_MODE_CURSES_ASCII)
					    && (cio_api.mode != CIOLIB_MODE_CURSES_IBM)
					    && (cio_api.mode != CIOLIB_MODE_ANSI))
						break;
					if ((cio_api.mode != CIOLIB_MODE_CURSES)
					    && (cio_api.mode != CIOLIB_MODE_CURSES_ASCII)
					    && (cio_api.mode != CIOLIB_MODE_CURSES_IBM)
					    && (cio_api.mode != CIOLIB_MODE_ANSI)) {
                                                        /* FALLTHROUGH for curses/ansi modes */
							case 0x2d00: /* Alt-X - Exit */
							case CIO_KEY_QUIT:
								if (!check_exit(true))
									break;
Deucе's avatar
Deucе committed

                                // Fallthrough
				case 0x2300: /* Alt-H - Hangup */
				{
					struct ciolib_screen *savscrn;
Deucе's avatar
Deucе committed
					savscrn = savescreen();
					setfont(0, false, 1);
					setfont(0, false, 2);
					setfont(0, false, 3);
					setfont(0, false, 4);
					if (quitting
					    || confirm("Disconnect... Are you sure?",
					    "Selecting Yes closes the connection\n")) {
						freescreen(savscrn);
						cterm_clearscreen(cterm, cterm->attr); /* Clear screen into
                                                                                        * scrollback */
Deucе's avatar
Deucе committed
						scrollback_lines = cterm->backpos;
						cterm_end(cterm, 0);
						cterm = NULL;
						conn_close();
						hidemouse();
						hold_update = oldmc;
						return key == 0x2d00 /* Alt-X? */ || key == CIO_KEY_QUIT;
deuce's avatar
deuce committed
					}
Deucе's avatar
Deucе committed
					restorescreen(savscrn);
					freescreen(savscrn);
					setup_mouse_events(&ms);
					showmouse();
				}
deuce's avatar
deuce committed
					key = 0;
deuce's avatar
deuce committed
					break;
Deucе's avatar
Deucе committed
				case 19: /* CTRL-S */
					if ((cio_api.mode != CIOLIB_MODE_CURSES)
					    && (cio_api.mode != CIOLIB_MODE_CURSES_IBM)
					    && (cio_api.mode != CIOLIB_MODE_ANSI))
						break;

                                /* FALLTHROUGH for curses/ansi modes */
Deucе's avatar
Deucе committed
				case 0x2c00: /* ALT-Z */
					if (bbs->hidepopups)
						break;
					i = wherex();
					j = wherey();
					switch (syncmenu(bbs, &speed)) {
Deucе's avatar
Deucе committed
							cterm_clearscreen(cterm, cterm->attr); /* Clear screen into
                                                                                                * scrollback */
							scrollback_lines = cterm->backpos;
							cterm_end(cterm, 0);
Deucе's avatar
Deucе committed
							cterm = NULL;
							conn_close();
							hidemouse();
Deucе's avatar
Deucе committed
							hold_update = oldmc;
							return false;
							begin_upload(bbs, false, inch);
							capture_control(bbs);
							break;
						case 8:
deuce's avatar
deuce committed
							music_control(bbs);
							break;
						case 9:
deuce's avatar
deuce committed
							font_control(bbs, cterm);
Deucе's avatar
Deucе committed
							cterm->doorway_mode = !cterm->doorway_mode;
deuce's avatar
deuce committed
							break;
deuce's avatar
deuce committed
						case 11:
deuce's avatar
deuce committed
							ooii_mode++;
Deucе's avatar
Deucе committed
							if (ooii_mode > MAX_OOII_MODE) {
Deucе's avatar
Deucе committed
								ooii_mode = 0;
Deucе's avatar
Deucе committed
							else {
Deucе's avatar
Deucе committed
							}
Deucе's avatar
Deucе committed
							cterm_clearscreen(cterm, cterm->attr); /* Clear screen into
                                                                                                * scrollback */
							scrollback_lines = cterm->backpos;
							cterm_end(cterm, 0);
Deucе's avatar
Deucе committed
							cterm = NULL;
							hidemouse();
Deucе's avatar
Deucе committed
							hold_update = oldmc;
							return true;
Deucе's avatar
Deucе committed
						{
							struct ciolib_screen *savscrn;
							char                  title[LIST_NAME_MAX + 13];
Deucе's avatar
Deucе committed

							savscrn = savescreen();
							setfont(0, false, 1);
							setfont(0, false, 2);
							setfont(0, false, 3);
							setfont(0, false, 4);
							show_bbslist(bbs->name, true);
							sprintf(title, "SyncTERM - %s\n", bbs->name);
							settitle(title);
							restorescreen(savscrn);
							freescreen(savscrn);
						}
						break;
					showmouse();
Deucе's avatar
Deucе committed
					gotoxy(i, j);
deuce's avatar
deuce committed
					key = 0;
Deucе's avatar
Deucе committed
				case 0x9800: /* ALT-Up */
					if ((bbs->conn_type != CONN_TYPE_SERIAL)
					    && (bbs->conn_type != CONN_TYPE_SERIAL_NORTS)) {
						if (speed)
							speed = rates[get_rate_num(speed) + 1];
Deucе's avatar
Deucе committed
							speed = rates[0];
Deucе's avatar
Deucе committed
				case 0xa000: /* ALT-Down */
					if ((bbs->conn_type != CONN_TYPE_SERIAL)
					    && (bbs->conn_type != CONN_TYPE_SERIAL_NORTS)) {
						i = get_rate_num(speed);
						if (i == 0)
							speed = 0;
Deucе's avatar
Deucе committed
							speed = rates[i - 1];
deuce's avatar
deuce committed
			}
Deucе's avatar
Deucе committed
			if (key && (cterm->emulation == CTERM_EMULATION_ATASCII)) {
                                /* Translate keys to ATASCII */
				switch (key) {
					case '\r':
					case '\n':
Deucе's avatar
Deucе committed
						ch[0] = 155;
						conn_send(ch, 1, 0);
						break;
					case CIO_KEY_DOWN:
Deucе's avatar
Deucе committed
						ch[0] = 29;
						conn_send(ch, 1, 0);
Deucе's avatar
Deucе committed
					case CIO_KEY_DC: /* "Delete" key */
					case '\b':       /* Backspace */
						ch[0] = 126;
						conn_send(ch, 1, 0);
						break;
					case CIO_KEY_RIGHT:
Deucе's avatar
Deucе committed
						ch[0] = 31;
						conn_send(ch, 1, 0);
						break;
					case CIO_KEY_UP:
Deucе's avatar
Deucе committed
						ch[0] = 28;
						conn_send(ch, 1, 0);
						break;
					case CIO_KEY_LEFT:
Deucе's avatar
Deucе committed
						ch[0] = 30;
						conn_send(ch, 1, 0);
						break;
					case '\t':
Deucе's avatar
Deucе committed
						ch[0] = 127;
						conn_send(ch, 1, 0);
Deucе's avatar
Deucе committed
					case 96: /* No backtick */
deuce's avatar
deuce committed
						break;
					default:
Deucе's avatar
Deucе committed
						if (key < 256) {
                                                        /* ASCII Translation */
							if (key < 123) {
								ch[0] = key;
								conn_send(ch, 1, 0);
Deucе's avatar
Deucе committed
			else if (key && (cterm->emulation == CTERM_EMULATION_PETASCII)) {
                                /* Translate keys to PETSCII */
				switch (key) {
					case '\r':
					case '\n':
Deucе's avatar
Deucе committed
						ch[0] = 13;
						conn_send(ch, 1, 0);
						break;
deuce's avatar
deuce committed
					case CIO_KEY_DOWN:
Deucе's avatar
Deucе committed
						ch[0] = 17;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_HOME:
Deucе's avatar
Deucе committed
						ch[0] = 19;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
Deucе's avatar
Deucе committed
						ch[0] = 147; /* Clear / Shift-Home */
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
					case '\b':
Deucе's avatar
Deucе committed
					case CIO_KEY_DC: /* "Delete" key */
						ch[0] = 20;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_RIGHT:
Deucе's avatar
Deucе committed
						ch[0] = 29;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(1):
Deucе's avatar
Deucе committed
						ch[0] = 133;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(3):
Deucе's avatar
Deucе committed
						ch[0] = 134;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(5):
Deucе's avatar
Deucе committed
						ch[0] = 135;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(7):
Deucе's avatar
Deucе committed
						ch[0] = 136;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(2):
Deucе's avatar
Deucе committed
						ch[0] = 137;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(4):
Deucе's avatar
Deucе committed
						ch[0] = 138;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(6):
Deucе's avatar
Deucе committed
						ch[0] = 139;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(8):
Deucе's avatar
Deucе committed
						ch[0] = 140;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_UP:
Deucе's avatar
Deucе committed
						ch[0] = 145;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_IC:
Deucе's avatar
Deucе committed
						ch[0] = 148;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_LEFT:
Deucе's avatar
Deucе committed
						ch[0] = 157;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					default:
Deucе's avatar
Deucе committed
						if (key < 256) {
							ch[0] = key;
							conn_send(ch, 1, 0);
Deucе's avatar
Deucе committed
			else if (key) {
				switch (key) {
deuce's avatar
deuce committed
					case CIO_KEY_LEFT:
Deucе's avatar
Deucе committed
						conn_send("\033[D", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_RIGHT:
Deucе's avatar
Deucе committed
						conn_send("\033[C", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_UP:
Deucе's avatar
Deucе committed
						conn_send("\033[A", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_DOWN:
Deucе's avatar
Deucе committed
						conn_send("\033[B", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_HOME:
Deucе's avatar
Deucе committed
						conn_send("\033[H", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_END:
#ifdef CIO_KEY_SELECT
Deucе's avatar
Deucе committed
					case CIO_KEY_SELECT: /* Some terminfo/termcap entries use KEY_SELECT as the END
                                                              * key! */
deuce's avatar
deuce committed
#endif
Deucе's avatar
Deucе committed
						conn_send("\033[K", 3, 0);
deuce's avatar
deuce committed
						break;
Deucе's avatar
Deucе committed
					case CIO_KEY_DC:    /* "Delete" key, send ASCII 127 (DEL) */
						conn_send("\x7f", 1, 0);
deuce's avatar
deuce committed
						break;
Deucе's avatar
Deucе committed
					case CIO_KEY_NPAGE: /* Page down */
						conn_send("\033[U", 3, 0);
deuce's avatar
deuce committed
						break;
Deucе's avatar
Deucе committed
					case CIO_KEY_PPAGE: /* Page up */
						conn_send("\033[V", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(1):
Deucе's avatar
Deucе committed
						conn_send("\033[11~", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(2):
Deucе's avatar
Deucе committed
						conn_send("\033[12~", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(3):
Deucе's avatar
Deucе committed
						conn_send("\033[13~", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(4):
Deucе's avatar
Deucе committed
						conn_send("\033[14~", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(5):
Deucе's avatar
Deucе committed
						conn_send("\033[15~", 3, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(6):
Deucе's avatar
Deucе committed
						conn_send("\033[17~", 5, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(7):
Deucе's avatar
Deucе committed
						conn_send("\033[18~", 5, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(8):
Deucе's avatar
Deucе committed
						conn_send("\033[19~", 5, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(9):
Deucе's avatar
Deucе committed
						conn_send("\033[20~", 5, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(10):
Deucе's avatar
Deucе committed
						conn_send("\033[21~", 5, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(11):
Deucе's avatar
Deucе committed
						conn_send("\033[23~", 5, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_F(12):
Deucе's avatar
Deucе committed
						conn_send("\033[24~", 5, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_SHIFT_F(1):
Deucе's avatar
Deucе committed
						conn_send("\033[11;2~", 3, 0);
						break;
					case CIO_KEY_SHIFT_F(2):
Deucе's avatar
Deucе committed
						conn_send("\033[12;2~", 3, 0);
						break;
					case CIO_KEY_SHIFT_F(3):
Deucе's avatar
Deucе committed
						conn_send("\033[13;2~", 3, 0);
						break;
					case CIO_KEY_SHIFT_F(4):
Deucе's avatar
Deucе committed
						conn_send("\033[14;2~", 3, 0);
						break;
					case CIO_KEY_SHIFT_F(5):
Deucе's avatar
Deucе committed
						conn_send("\033[15;2~", 3, 0);
						break;
					case CIO_KEY_SHIFT_F(6):
Deucе's avatar
Deucе committed
						conn_send("\033[17;2~", 5, 0);
						break;
					case CIO_KEY_SHIFT_F(7):
Deucе's avatar
Deucе committed
						conn_send("\033[18;2~", 5, 0);
						break;
					case CIO_KEY_SHIFT_F(8):
Deucе's avatar
Deucе committed
						conn_send("\033[19;2~", 5, 0);
						break;
					case CIO_KEY_SHIFT_F(9):
Deucе's avatar
Deucе committed
						conn_send("\033[20;2~", 5, 0);
						break;
					case CIO_KEY_SHIFT_F(10):
Deucе's avatar
Deucе committed
						conn_send("\033[21;2~", 5, 0);
						break;
					case CIO_KEY_SHIFT_F(11):
Deucе's avatar
Deucе committed
						conn_send("\033[23;2~", 5, 0);
						break;
					case CIO_KEY_SHIFT_F(12):
Deucе's avatar
Deucе committed
						conn_send("\033[24;2~", 5, 0);
						break;
					case CIO_KEY_CTRL_F(1):
Deucе's avatar
Deucе committed
						conn_send("\033[11;5~", 3, 0);
						break;
					case CIO_KEY_CTRL_F(2):
Deucе's avatar
Deucе committed
						conn_send("\033[12;5~", 3, 0);
						break;
					case CIO_KEY_CTRL_F(3):
Deucе's avatar
Deucе committed
						conn_send("\033[13;5~", 3, 0);
						break;
					case CIO_KEY_CTRL_F(4):
Deucе's avatar
Deucе committed
						conn_send("\033[14;5~", 3, 0);
						break;
					case CIO_KEY_CTRL_F(5):
Deucе's avatar
Deucе committed
						conn_send("\033[15;5~", 3, 0);
						break;
					case CIO_KEY_CTRL_F(6):
Deucе's avatar
Deucе committed
						conn_send("\033[17;5~", 5, 0);
						break;
					case CIO_KEY_CTRL_F(7):
Deucе's avatar
Deucе committed
						conn_send("\033[18;5~", 5, 0);
						break;
					case CIO_KEY_CTRL_F(8):
Deucе's avatar
Deucе committed
						conn_send("\033[19;5~", 5, 0);
						break;
					case CIO_KEY_CTRL_F(9):
Deucе's avatar
Deucе committed
						conn_send("\033[20;5~", 5, 0);
						break;
					case CIO_KEY_CTRL_F(10):
Deucе's avatar
Deucе committed
						conn_send("\033[21;5~", 5, 0);
						break;
					case CIO_KEY_CTRL_F(11):
Deucе's avatar
Deucе committed
						conn_send("\033[23;5~", 5, 0);
						break;
					case CIO_KEY_CTRL_F(12):
Deucе's avatar
Deucе committed
						conn_send("\033[24;5~", 5, 0);
						break;
					case CIO_KEY_ALT_F(1):
Deucе's avatar
Deucе committed
						conn_send("\033[11;3~", 3, 0);
						break;
					case CIO_KEY_ALT_F(2):
Deucе's avatar
Deucе committed
						conn_send("\033[12;3~", 3, 0);
						break;
					case CIO_KEY_ALT_F(3):
Deucе's avatar
Deucе committed
						conn_send("\033[13;3~", 3, 0);
						break;
					case CIO_KEY_ALT_F(4):
Deucе's avatar
Deucе committed
						conn_send("\033[14;3~", 3, 0);
						break;
					case CIO_KEY_ALT_F(5):
Deucе's avatar
Deucе committed
						conn_send("\033[15;3~", 3, 0);
						break;
					case CIO_KEY_ALT_F(6):
Deucе's avatar
Deucе committed
						conn_send("\033[17;3~", 5, 0);
						break;
					case CIO_KEY_ALT_F(7):
Deucе's avatar
Deucе committed
						conn_send("\033[18;3~", 5, 0);
						break;
					case CIO_KEY_ALT_F(8):
Deucе's avatar
Deucе committed
						conn_send("\033[19;3~", 5, 0);
						break;
					case CIO_KEY_ALT_F(9):
Deucе's avatar
Deucе committed
						conn_send("\033[20;3~", 5, 0);
						break;
					case CIO_KEY_ALT_F(10):
Deucе's avatar
Deucе committed
						conn_send("\033[21;3~", 5, 0);
						break;
					case CIO_KEY_ALT_F(11):
Deucе's avatar
Deucе committed
						conn_send("\033[23;3~", 5, 0);
						break;
					case CIO_KEY_ALT_F(12):
Deucе's avatar
Deucе committed
						conn_send("\033[24;3~", 5, 0);
deuce's avatar
deuce committed
					case CIO_KEY_IC:
Deucе's avatar
Deucе committed
						conn_send("\033[@", 3, 0);
deuce's avatar
deuce committed
						break;
Deucе's avatar
Deucе committed
					case 17: /* CTRL-Q */
						ch[0] = key;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
Deucе's avatar
Deucе committed
					case 19: /* CTRL-S */
						ch[0] = key;
						conn_send(ch, 1, 0);
deuce's avatar
deuce committed
						break;
					case CIO_KEY_BACKTAB:
						conn_send("\033[Z", 3, 0);
						break;
deuce's avatar
deuce committed
					case '\b':
Deucе's avatar
Deucе committed
						key = '\b';

                                        /* FALLTHROUGH to default */
deuce's avatar
deuce committed
					default:
Deucе's avatar
Deucе committed
						if ((key < 256) && (key >= 0)) {
							ch[0] = key;
							conn_send(ch, 1, 0);
Deucе's avatar
Deucе committed
		if (sleep)
deuce's avatar
deuce committed
			SLEEP(1);
		else
			MAYBE_YIELD();
deuce's avatar
deuce committed
/*
Deucе's avatar
Deucе committed
 *       hidemouse();
 *       hold_update=oldmc;
deuce's avatar
deuce committed
 */
Deucе's avatar
Deucе committed
	return false;