/** \file cons.saver.h
 *  \brief Header: general purpose Linux console screen save/restore server
 *
 *  This code does _not_ need to be setuid root. However, it needs
 *  read/write access to /dev/vcsa* (which is privileged
 *  operation). You should create user vcsa, make cons.saver setuid
 *  user vcsa, and make all vcsa's owned by user vcsa.
 *  Seeing other peoples consoles is bad thing, but believe me, full
 *  root is even worse.
 */

#ifndef MC__CONS_SAVER_H
#define MC__CONS_SAVER_H

/*** typedefs(not structures) and defined constants **********************************************/

/*** enums ***************************************************************************************/

typedef enum
{
    CONSOLE_INIT = '1',
    CONSOLE_DONE,
    CONSOLE_SAVE,
    CONSOLE_RESTORE,
    CONSOLE_CONTENTS
} console_action_t;

/*** structures declarations (and typedefs of structures)*****************************************/

/*** global variables defined in .c file *********************************************************/

#ifndef LINUX_CONS_SAVER_C
/* Used only in mc, not in cons.saver */
extern int cons_saver_pid;
#endif /* !LINUX_CONS_SAVER_C */

/*** declarations of public functions ************************************************************/

#ifndef LINUX_CONS_SAVER_C
/* Used only in mc, not in cons.saver */
void show_console_contents (int starty, unsigned char begin_line, unsigned char end_line);
void handle_console (console_action_t action);
#endif /* !LINUX_CONS_SAVER_C */

#if defined(WIN32)
void show_console_contents_win32 (int starty, unsigned char begin_line, unsigned char end_line);
void handle_console_win32 (console_action_t action);
#endif

/*** inline functions ****************************************************************************/
#endif /* MC__CONS_SAVER_H */
