summaryrefslogtreecommitdiff
path: root/misc/mc/files/patch-src-cons.handler.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc/mc/files/patch-src-cons.handler.c')
-rw-r--r--misc/mc/files/patch-src-cons.handler.c725
1 files changed, 0 insertions, 725 deletions
diff --git a/misc/mc/files/patch-src-cons.handler.c b/misc/mc/files/patch-src-cons.handler.c
deleted file mode 100644
index ae2e1b659a59..000000000000
--- a/misc/mc/files/patch-src-cons.handler.c
+++ /dev/null
@@ -1,725 +0,0 @@
---- src/cons.handler.c.orig Mon Sep 23 13:43:23 2002
-+++ src/cons.handler.c Tue Jun 15 03:14:17 2004
-@@ -15,8 +15,6 @@
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
--/* The cons saver can't have a pid of 1, used to prevent bunches of */
--/*#ifdef linux */
- #include <config.h>
-
- #ifdef HAVE_UNISTD_H
-@@ -24,6 +22,21 @@
- #endif
- #include <sys/types.h>
- #include <signal.h>
-+#include <stdio.h>
-+
-+#ifdef SCO_FLAVOR
-+#include <sys/types.h>
-+#include <sys/vid.h>
-+#include <sys/console.h>
-+#include <sys/vtkd.h>
-+#include <memory.h>
-+#include <signal.h>
-+#endif /* SCO_FLAVOR */
-+
-+#ifdef __FreeBSD__
-+#include <sys/consio.h>
-+#include <sys/ioctl.h>
-+#endif /* __FreeBSD__ */
-
- #include "global.h"
- #include "tty.h"
-@@ -31,30 +44,28 @@
-
- signed char console_flag = 0;
-
--#if defined(linux) || defined(__linux__)
--#include "main.h"
-+#ifdef __linux__
-+
-+/* The cons saver can't have a pid of 1, used to prevent bunches of
-+ * #ifdef linux */
-
--int cons_saver_pid = 1;
--static int pipefd1 [2] = {-1, -1}, pipefd2 [2] = {-1, -1};
-+int cons_saver_pid = 1;
-+static int pipefd1[2] = { -1, -1 };
-+static int pipefd2[2] = { -1, -1 };
-
--void show_console_contents (int starty, unsigned char begin_line, unsigned char end_line)
-+static void
-+show_console_contents_linux (int starty, unsigned char begin_line,
-+ unsigned char end_line)
- {
- unsigned char message = 0;
- unsigned short bytes = 0;
- int i;
-
-- standend ();
--
-- if (look_for_rxvt_extensions ()) {
-- show_rxvt_contents (starty, begin_line, end_line);
-- return;
-- }
--
- /* Is tty console? */
- if (!console_flag)
- return;
- /* Paranoid: Is the cons.saver still running? */
-- if (cons_saver_pid < 1 || kill (cons_saver_pid, SIGCONT)){
-+ if (cons_saver_pid < 1 || kill (cons_saver_pid, SIGCONT)) {
- cons_saver_pid = 0;
- console_flag = 0;
- return;
-@@ -75,9 +86,9 @@
- read (pipefd2[0], &bytes, 2);
-
- /* Read the bytes and output them */
-- for (i = 0; i < bytes; i++){
-+ for (i = 0; i < bytes; i++) {
- if ((i % COLS) == 0)
-- move (starty+(i/COLS), 0);
-+ move (starty + (i / COLS), 0);
- read (pipefd2[0], &message, 1);
- addch (message);
- }
-@@ -86,16 +97,15 @@
- read (pipefd2[0], &message, 1);
- }
-
--void handle_console (unsigned char action)
-+static void
-+handle_console_linux (unsigned char action)
- {
- char *tty_name;
- char *mc_conssaver;
- int status;
-
-- switch (action){
-+ switch (action) {
- case CONSOLE_INIT:
-- if (look_for_rxvt_extensions ())
-- return;
- /* Close old pipe ends in case it is the 2nd time we run cons.saver */
- close (pipefd1[1]);
- close (pipefd2[0]);
-@@ -104,7 +114,7 @@
- pipe (pipefd2);
- /* Get the console saver running */
- cons_saver_pid = fork ();
-- if (cons_saver_pid < 0){
-+ if (cons_saver_pid < 0) {
- /* Cannot fork */
- /* Delete pipes */
- close (pipefd1[1]);
-@@ -112,14 +122,14 @@
- close (pipefd2[1]);
- close (pipefd2[0]);
- console_flag = 0;
-- } else if (cons_saver_pid > 0){
-+ } else if (cons_saver_pid > 0) {
- /* Parent */
- /* Close the extra pipe ends */
- close (pipefd1[0]);
- close (pipefd2[1]);
- /* Was the child successful? */
- read (pipefd2[0], &console_flag, 1);
-- if (!console_flag){
-+ if (!console_flag) {
- close (pipefd1[1]);
- close (pipefd2[0]);
- waitpid (cons_saver_pid, &status, 0);
-@@ -152,33 +162,31 @@
- close (1);
- close (0);
- _exit (3);
-- } /* if (cons_saver_pid ...) */
-+ } /* if (cons_saver_pid ...) */
- break;
-
- case CONSOLE_DONE:
- case CONSOLE_SAVE:
- case CONSOLE_RESTORE:
-- if (look_for_rxvt_extensions ())
-- return;
- /* Is tty console? */
- if (!console_flag)
- return;
- /* Paranoid: Is the cons.saver still running? */
-- if (cons_saver_pid < 1 || kill (cons_saver_pid, SIGCONT)){
-+ if (cons_saver_pid < 1 || kill (cons_saver_pid, SIGCONT)) {
- cons_saver_pid = 0;
- console_flag = 0;
- return;
- }
- /* Send command to the console handler */
- write (pipefd1[1], &action, 1);
-- if (action != CONSOLE_DONE){
-+ if (action != CONSOLE_DONE) {
- /* Wait the console handler to do its job */
- read (pipefd2[0], &console_flag, 1);
- }
-- if (action == CONSOLE_DONE || !console_flag){
-+ if (action == CONSOLE_DONE || !console_flag) {
- /* We are done -> Let's clean up */
-- close (pipefd1 [1]);
-- close (pipefd2 [0]);
-+ close (pipefd1[1]);
-+ close (pipefd2[0]);
- waitpid (cons_saver_pid, &status, 0);
- console_flag = 0;
- }
-@@ -186,221 +194,371 @@
- }
- }
-
--#endif /* #ifdef linux */
-+#elif defined(SCO_FLAVOR)
-
--#ifdef SCO_FLAVOR
- /*
- ** SCO console save/restore handling routines
- ** Copyright (C) 1997 Alex Tkachenko <alex@bcs.zaporizhzhe.ua>
- */
-
--#include <stdio.h>
--#include <sys/types.h>
--#include <sys/vid.h>
--#include <sys/console.h>
--#include <sys/vtkd.h>
--#include <memory.h>
--#include <signal.h>
--#include "tty.h"
--#include "util.h"
- #include "color.h"
--#include "cons.saver.h"
-
- static int FD_OUT = 2;
-
--static unsigned short* vidbuf = NULL;
--static unsigned short* screen = NULL;
-+static unsigned short *vidbuf = NULL;
-+static unsigned short *screen = NULL;
- static int height = 0, width = 0, saved_attr = 0;
- static int mode = 0;
-
--#define SIG_ACQUIRE 21 /* originally: handset, line status change (?) */
-+#define SIG_ACQUIRE 21 /* originally: handset, line status change (?) */
-
- static int
--vt_active()
-+vt_active ()
-+{
-+ struct vid_info vi;
-+ int adapter = ioctl (FD_OUT, CONS_CURRENT, 0);
-+
-+ vi.size = sizeof (struct vid_info);
-+ ioctl (FD_OUT, CONS_GETINFO, &(vi));
-+ return (vi.m_num == ioctl (FD_OUT, CONSADP, adapter));
-+}
-+
-+static void
-+console_acquire_vt ()
- {
-- struct vid_info vi;
-- int adapter = ioctl(FD_OUT, CONS_CURRENT, 0);
-+ struct vt_mode smode;
-
-- vi.size = sizeof(struct vid_info);
-- ioctl(FD_OUT, CONS_GETINFO, &(vi));
-- return (vi.m_num == ioctl(FD_OUT,CONSADP,adapter));
-+ signal (SIG_ACQUIRE, SIG_DFL);
-+ smode.mode = VT_AUTO;
-+ smode.waitv = smode.relsig = smode.acqsig = smode.frsig = 0;
-+ ioctl (FD_OUT, VT_SETMODE, &smode);
-+ ioctl (FD_OUT, VT_RELDISP, VT_ACKACQ);
-+}
-+
-+static void
-+console_shutdown ()
-+{
-+ if (!console_flag) {
-+ return;
-+ }
-+ if (screen != NULL) {
-+ g_free (screen);
-+ }
-+ console_flag = 0;
- }
-
- static void
--console_acquire_vt()
-+console_save ()
- {
-+ struct m6845_info mi;
-+
-+ if (!console_flag) {
-+ return;
-+ }
-+
-+ if (!vt_active ()) {
- struct vt_mode smode;
-
-- signal(SIG_ACQUIRE, SIG_DFL);
-- smode.mode = VT_AUTO;
-- smode.waitv = smode.relsig = smode.acqsig = smode.frsig = 0;
-- ioctl(FD_OUT, VT_SETMODE, &smode);
-- ioctl(FD_OUT, VT_RELDISP, VT_ACKACQ);
-+ /*
-+ ** User switched out of our vt. Let's wait until we get SIG_ACQUIRE,
-+ ** otherwise we could save wrong screen image
-+ */
-+ signal (SIG_ACQUIRE, console_acquire_vt);
-+ smode.mode = VT_PROCESS;
-+ smode.waitv = 0;
-+ smode.waitv = smode.relsig = smode.acqsig = smode.frsig =
-+ SIG_ACQUIRE;
-+ ioctl (FD_OUT, VT_SETMODE, &smode);
-+
-+ pause ();
-+ }
-+
-+ saved_attr = ioctl (FD_OUT, GIO_ATTR, 0);
-+
-+ vidbuf = (unsigned short *) ioctl (FD_OUT, MAPCONS, 0);
-+
-+ mi.size = sizeof (struct m6845_info);
-+ ioctl (FD_OUT, CONS_6845INFO, &mi);
-+
-+ {
-+ unsigned short *start = vidbuf + mi.screen_top;
-+ memcpy (screen, start, width * height * 2);
-+ }
-+
-+ write (FD_OUT, "\0337", 2); /* save cursor position */
- }
-
- static void
--console_shutdown()
-+console_restore ()
- {
-- if (!console_flag)
-- {
-- return;
-- }
-- if (screen != NULL)
-- {
-- g_free (screen);
-- }
-- console_flag = 0;
-+ struct m6845_info mi;
-+ unsigned short *start;
-+
-+ if (!console_flag) {
-+ return;
-+ }
-+
-+ write (FD_OUT, "\033[2J", 4);
-+
-+ mi.size = sizeof (struct m6845_info);
-+ ioctl (FD_OUT, CONS_6845INFO, &mi);
-+
-+ start = vidbuf + mi.screen_top;
-+ memcpy (start, screen, width * height * 2);
-+ write (FD_OUT, "\0338", 2); /* restore cursor position */
- }
-
- static void
--console_save()
-+console_init ()
- {
-- struct m6845_info mi;
-+ struct vid_info vi;
-+ int adapter = ioctl (FD_OUT, CONS_CURRENT, 0);
-
-- if (!console_flag)
-- {
-+ console_flag = 0;
-+
-+ if (adapter != -1) {
-+ vi.size = sizeof (struct vid_info);
-+ ioctl (FD_OUT, CONS_GETINFO, &(vi));
-+
-+ if (vt_active ()) {
-+ console_flag = 1;
-+
-+ height = vi.mv_rsz;
-+ width = vi.mv_csz;
-+
-+ screen = (unsigned short *) g_malloc (height * width * 2);
-+ if (screen == NULL) {
-+ console_shutdown ();
- return;
-+ }
-+ console_save ();
-+ mode = ioctl (FD_OUT, CONS_GET, 0);
-+ ioctl (FD_OUT, MODESWITCH | mode, 0);
-+ console_restore ();
- }
-+ }
-+}
-
-- if (!vt_active())
-- {
-- struct vt_mode smode;
--
-- /*
-- ** User switched out of our vt. Let's wait until we get SIG_ACQUIRE,
-- ** otherwise we could save wrong screen image
-- */
-- signal(SIG_ACQUIRE, console_acquire_vt);
-- smode.mode = VT_PROCESS;
-- smode.waitv = 0;
-- smode.waitv = smode.relsig = smode.acqsig = smode.frsig = SIG_ACQUIRE;
-- ioctl(FD_OUT, VT_SETMODE, &smode);
-+static void
-+handle_console_sco (unsigned char action)
-+{
-+ switch (action) {
-+ case CONSOLE_INIT:
-+ console_init ();
-+ break;
-
-- pause();
-- }
-+ case CONSOLE_DONE:
-+ console_shutdown ();
-+ break;
-+
-+ case CONSOLE_SAVE:
-+ console_save ();
-+ break;
-+
-+ case CONSOLE_RESTORE:
-+ console_restore ();
-+ break;
-+ default:
-+ /* Nothing */ ;
-+ }
-+}
-
-- saved_attr = ioctl(FD_OUT, GIO_ATTR, 0);
-+static void
-+show_console_contents_sco (int starty, unsigned char begin_line,
-+ unsigned char end_line)
-+{
-+ register int i, len = (end_line - begin_line) * width;
-
-- vidbuf = (unsigned short*) ioctl(FD_OUT, MAPCONS, 0);
-+ attrset (DEFAULT_COLOR);
-+ for (i = 0; i < len; i++) {
-+ if ((i % width) == 0)
-+ move (starty + (i / width), 0);
-+ addch ((unsigned char) screen[width * starty + i]);
-+ }
-+}
-
-- mi.size = sizeof(struct m6845_info);
-- ioctl(FD_OUT, CONS_6845INFO, &mi);
-+#elif defined(__FreeBSD__)
-
-- {
-- unsigned short* start = vidbuf + mi.screen_top;
-- memcpy(screen, start, width * height * 2);
-- }
-+/*
-+ * FreeBSD support copyright (C) 2003 Alexander Serkov <serkov@ukrpost.net>.
-+ * Support for screenmaps by Max Khon <fjoe@FreeBSD.org>
-+ */
-+
-+#define FD_OUT 1
-+
-+static struct scrshot screen_shot;
-+static struct vid_info screen_info;
-
-- write(FD_OUT,"\0337",2); /* save cursor position */
-+static void
-+console_init (void)
-+{
-+ if (console_flag)
-+ return;
-+
-+ screen_info.size = sizeof (screen_info);
-+ if (ioctl (FD_OUT, CONS_GETINFO, &screen_info) == -1)
-+ return;
-+
-+ memset (&screen_shot, 0, sizeof (screen_shot));
-+ screen_shot.xsize = screen_info.mv_csz;
-+ screen_shot.ysize = screen_info.mv_rsz;
-+ if ((screen_shot.buf =
-+ g_malloc (screen_info.mv_csz * screen_info.mv_rsz * 2)) == NULL)
-+ return;
-+
-+ console_flag = 1;
- }
-
- static void
--console_restore()
-+set_attr (unsigned attr)
- {
-- struct m6845_info mi;
-- unsigned short* start;
-+ /*
-+ * Convert color indices returned by SCRSHOT (red=4, green=2, blue=1)
-+ * to indices for ANSI sequences (red=1, green=2, blue=4).
-+ */
-+ static const int color_map[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
-+ char cmd[17];
-+ int bc, tc;
-+
-+ tc = attr & 0xF;
-+ bc = (attr >> 4) & 0xF;
-+
-+ strcpy (cmd, "\x1B[");
-+ strcat (cmd, (bc & 8) ? "5;" : "25;");
-+ strcat (cmd, (tc & 8) ? "1;" : "22;");
-+ strcat (cmd, "3%d;4%dm");
-+ printf (cmd, color_map[tc & 7], color_map[bc & 7]);
-+}
-+
-+#define cursor_to(x, y) do { \
-+ printf("\x1B[%d;%df", (y) + 1, (x) + 1); \
-+ fflush(stdout); \
-+} while (0)
-
-- if (!console_flag)
-- {
-- return;
-- }
-+static void
-+console_restore (void)
-+{
-+ int i, last;
-
-- write (FD_OUT, "\033[2J", 4);
-+ if (!console_flag)
-+ return;
-
-- mi.size = sizeof(struct m6845_info);
-- ioctl(FD_OUT, CONS_6845INFO, &mi);
-+ cursor_to (0, 0);
-
-- start = vidbuf + mi.screen_top;
-- memcpy(start, screen, width * height * 2);
-- write(FD_OUT,"\0338",2); /* restore cursor position */
-+ /* restoring all content up to cursor position */
-+ last = screen_info.mv_row * screen_info.mv_csz + screen_info.mv_col;
-+ for (i = 0; i < last; ++i) {
-+ set_attr ((screen_shot.buf[i] >> 8) & 0xFF);
-+ putc (screen_shot.buf[i] & 0xFF, stdout);
-+ }
-+
-+ /* restoring cursor color */
-+ set_attr ((screen_shot.buf[last] >> 8) & 0xFF);
-+
-+ fflush (stdout);
- }
-
- static void
--console_init()
-+console_shutdown (void)
- {
-- struct vid_info vi;
-- int adapter = ioctl(FD_OUT, CONS_CURRENT, 0);
-+ if (!console_flag)
-+ return;
-
-- console_flag = 0;
-+ g_free (screen_shot.buf);
-
-- if (adapter != -1)
-- {
-- vi.size = sizeof(struct vid_info);
-- ioctl(FD_OUT, CONS_GETINFO, &(vi));
--
-- if (vt_active())
-- {
-- console_flag = 1;
--
-- height = vi.mv_rsz;
-- width = vi.mv_csz;
--
-- screen = (unsigned short*) g_malloc (height * width * 2);
-- if (screen == NULL)
-- {
-- console_shutdown();
-- return;
-- }
-- console_save();
-- mode = ioctl(FD_OUT, CONS_GET, 0);
-- ioctl(FD_OUT, MODESWITCH | mode, 0);
-- console_restore();
-- }
-- }
-+ console_flag = 0;
- }
-
--void
--handle_console (unsigned char action)
-+static void
-+console_save (void)
- {
-- if (look_for_rxvt_extensions ())
-- return;
-- switch (action){
-- case CONSOLE_INIT:
-- console_init();
-- break;
--
-- case CONSOLE_DONE:
-- console_shutdown();
-- break;
--
-- case CONSOLE_SAVE:
-- console_save();
-- break;
--
-- case CONSOLE_RESTORE:
-- console_restore();
-- break;
-- default:
-- /* Nothing */;
-+ int i;
-+ scrmap_t map;
-+ scrmap_t revmap;
-+
-+ if (!console_flag)
-+ return;
-+
-+ /* screen_info.size is already set in console_init() */
-+ if (ioctl (FD_OUT, CONS_GETINFO, &screen_info) == -1) {
-+ console_shutdown ();
-+ return;
-+ }
-+
-+ /* handle console resize */
-+ if (screen_info.mv_csz != screen_shot.xsize
-+ || screen_info.mv_rsz != screen_shot.ysize) {
-+ console_shutdown ();
-+ console_init ();
-+ }
-+
-+ if (ioctl (FD_OUT, CONS_SCRSHOT, &screen_shot) == -1) {
-+ console_shutdown ();
-+ return;
-+ }
-+
-+ if (ioctl (FD_OUT, GIO_SCRNMAP, &map) == -1) {
-+ console_shutdown ();
-+ return;
-+ }
-+
-+ for (i = 0; i < 256; i++) {
-+ char *p = memchr (map.scrmap, i, 256);
-+ revmap.scrmap[i] = p ? p - map.scrmap : i;
-+ }
-+
-+ for (i = 0; i < screen_shot.xsize * screen_shot.ysize; i++) {
-+ screen_shot.buf[i] =
-+ (screen_shot.buf[i] & 0xff00) | (unsigned char) revmap.
-+ scrmap[screen_shot.buf[i] & 0xff];
- }
- }
-
--void
--show_console_contents (int starty, unsigned char begin_line, unsigned char end_line)
-+static void
-+show_console_contents_freebsd (int starty, unsigned char begin_line,
-+ unsigned char end_line)
- {
-- register int i, len = (end_line - begin_line) * width;
-+ int col, line;
-+ char c;
-
-- if (look_for_rxvt_extensions ()) {
-- show_rxvt_contents (starty, begin_line, end_line);
-- return;
-- }
-- attrset(DEFAULT_COLOR);
-- for (i = 0; i < len; i++)
-- {
-- if ((i % width) == 0)
-- move (starty+(i/width), 0);
-- addch ((unsigned char)screen[width*starty + i]);
-+ if (!console_flag)
-+ return;
-+
-+ for (line = begin_line; line <= end_line; line++) {
-+ move (starty + line - begin_line, 0);
-+ for (col = 0; col < min (COLS, screen_info.mv_csz); col++) {
-+ c = screen_shot.buf[line * screen_info.mv_csz + col] & 0xFF;
-+ addch (c);
- }
-+ }
- }
-
--#endif /* SCO_FLAVOR */
-+static void
-+handle_console_freebsd (unsigned char action)
-+{
-+ switch (action) {
-+ case CONSOLE_INIT:
-+ console_init ();
-+ break;
-
-+ case CONSOLE_DONE:
-+ console_shutdown ();
-+ break;
-
--#if !defined(linux) && !defined(__linux__) && !defined(SCO_FLAVOR)
-+ case CONSOLE_SAVE:
-+ console_save ();
-+ break;
-
--#include "tty.h"
-+ case CONSOLE_RESTORE:
-+ console_restore ();
-+ break;
-+ }
-+}
-+#endif /* __FreeBSD__ */
-
--void show_console_contents (int starty, unsigned char begin_line, unsigned char end_line)
-+void
-+show_console_contents (int starty, unsigned char begin_line,
-+ unsigned char end_line)
- {
- standend ();
-
-@@ -408,14 +566,28 @@
- show_rxvt_contents (starty, begin_line, end_line);
- return;
- }
-+#ifdef __linux__
-+ show_console_contents_linux (starty, begin_line, end_line);
-+#elif defined (__FreeBSD__)
-+ show_console_contents_freebsd (starty, begin_line, end_line);
-+#elif defined (SCO_FLAVOR)
-+ show_console_contents_sco (starty, begin_line, end_line);
-+#else
- console_flag = 0;
-+#endif
- }
-
--void handle_console (unsigned char action)
-+void
-+handle_console (unsigned char action)
- {
-- look_for_rxvt_extensions ();
--}
--
--#endif /* !defined(linux) && !defined(__linux__) && !defined(SCO_FLAVOR) */
--
-+ if (look_for_rxvt_extensions ())
-+ return;
-
-+#ifdef __linux__
-+ handle_console_linux (action);
-+#elif defined (__FreeBSD__)
-+ handle_console_freebsd (action);
-+#elif defined (SCO_FLAVOR)
-+ handle_console_sco (action);
-+#endif
-+}