summaryrefslogtreecommitdiff
path: root/rhtvision/include/tv/unix/screen.h
diff options
context:
space:
mode:
Diffstat (limited to 'rhtvision/include/tv/unix/screen.h')
-rw-r--r--rhtvision/include/tv/unix/screen.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/rhtvision/include/tv/unix/screen.h b/rhtvision/include/tv/unix/screen.h
new file mode 100644
index 0000000..90b994f
--- /dev/null
+++ b/rhtvision/include/tv/unix/screen.h
@@ -0,0 +1,135 @@
+/* UNIX screen handler routines header.
+ Copyright by Salvador E. Tropea (SET) (2001-2002)
+ Covered by the GPL license. */
+
+#if defined(HAVE_NCURSES) && defined(TVOS_UNIX) && !defined(TVOSf_QNXRtP) && \
+ !defined(UNIXSCREEN_HEADER_INCLUDED)
+#define UNIXSCREEN_HEADER_INCLUDED
+
+// virtual to avoid problems with multiple inheritance
+class TDisplayUNIX : virtual public TDisplay
+{
+protected:
+ TDisplayUNIX() {};
+ // We will use casts to base classes, destructors must be pointers
+ virtual ~TDisplayUNIX();
+ // This sets the pointers of TDisplay to point to this class
+ static void Init();
+
+ // Behaviors to replace TDisplay
+ static void SetCursorPos(unsigned x, unsigned y);
+ static void GetCursorPos(unsigned &x, unsigned &y);
+ static void GetCursorShape(unsigned &start, unsigned &end);
+ static void SetCursorShape(unsigned start, unsigned end);
+ // Not available static void clearScreen(uchar, uchar);
+ static ushort GetRows();
+ static ushort GetCols();
+ // Not available static void setCrtMode(ushort mode);
+ // Not available static ushort getCrtMode();
+ static void SetCrtModeExt(char *mode);
+ static int CheckForWindowSize(void);
+ // Not available static const char *getWindowTitle(void);
+ // Not available static int setWindowTitle(const char *name);
+
+ // Functions and members specific for this driver
+ inline static void safeput(char *&p, const char *cap);
+ inline static int canWriteVCS();
+ inline static int canReadVCS();
+ inline static int canOnlyWriteVCS();
+
+ static int vcsWfd; // virtual console system descriptor
+ static int vcsRfd; // SET: Same for reading
+ static int tty_fd; // tty descriptor
+ // Current cursor position
+ static int cur_x, cur_y;
+ // SET: Current cursor shape
+ static int cursorStart,cursorEnd;
+ // SET: 1 when the size of the window where the program is running changed
+ static volatile sig_atomic_t windowSizeChanged;
+};
+
+inline
+void TDisplayUNIX::safeput(char *&p, const char *cap)
+{
+ if (cap)
+ while (*cap) *p++=*cap++;
+}
+
+// With this order the destructor will be called first for TScreenUnix,
+// TScreen, TDisplayUNIX and finally TDisplay.
+class TScreenUNIX : public TDisplayUNIX, public TScreen
+{
+public:
+ TScreenUNIX();
+ // We will use casts to base classes, destructors must be pointers
+ virtual ~TScreenUNIX();
+
+ friend class THWMouseXTerm;
+
+ // Fix me: should be protected but right now is used by the editor for the
+ // pal. that should be moved here.
+ static void SendToTerminal(const char *value);
+protected:
+ static void InitPCCharsMapping();
+ static void sigWindowSizeChanged(int sig);
+ static void SpecialKeysDisable(int file);
+ static void SpecialKeysRestore(int file);
+ static void startcurses(int &terminalCodePage);
+ static void mapColor(char *&p, int col);
+ static void writeBlock(int dst, int len, ushort *old, ushort *src);
+ static void RestoreScreen();
+
+ static void Resume();
+ static void Suspend();
+ // Default: ushort fixCrtMode( ushort mode )
+ static void setCrtData();
+ // Default: void clearScreen()
+ static void setVideoMode(ushort mode);
+ static void setVideoModeExt(char *mode);
+ static void getCharacters(unsigned offset,ushort *buf,unsigned count);
+ static ushort getCharacter(unsigned dst);
+ static void setCharacter(unsigned offset,ushort value);
+ static void setCharacters(unsigned dst,ushort *src,unsigned len);
+ static int System(const char *command, pid_t *pidChild, int in, int out,
+ int err);
+
+ enum terminalType
+ {
+ LINUX_TERMINAL=0,
+ GENER_TERMINAL=1,
+ VCSA_TERMINAL=2,
+ XTERM_TERMINAL=3
+ };
+ enum
+ {
+ PAL_MONO, PAL_LOW, PAL_HIGH, PAL_LOW2
+ };
+
+ static int use_pc_chars;
+ static int TerminalType;
+ static FILE *tty_file;
+ static int palette;
+ static int force_redraw;
+ // SET: data to restore the XON/XOFF control keys and others like ^C, ^\ and ^Z
+ // Used by SpecialKeys*
+ static cc_t oldKeys[5];
+ // Used by mapColor:
+ static int old_col,old_fore,old_back;
+ // Save/Restore screen
+ static ushort *user_buffer;
+ static int user_buffer_size;
+ static unsigned user_cursor_x,user_cursor_y;
+ static char *terminal;
+ static char cursesInitialized;
+ static char termAttrsSaved;
+ // SET: That's the job of curses endwin(), additionally it does a much more
+ // complete work so I don't see the point of duplicating work, in my system
+ // I didn't see any change after removing it, but I left the code just in
+ // case
+ #ifdef SAVE_TERMIOS
+ static struct termios old_term,new_term;
+ #endif
+};
+
+#endif
+