Move FreeBSD, NetBSD and OpenBSD functions to separate classes
This commit is contained in:
parent
b05873babb
commit
0927e4e1fb
|
@ -1,3 +1,6 @@
|
||||||
|
2017-05-27 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Move FreeBSD, NetBSD and OpenBSD functions to separate classes
|
||||||
|
|
||||||
2017-05-20 Markus Gans <guru.mail@muenster.de>
|
2017-05-20 Markus Gans <guru.mail@muenster.de>
|
||||||
* Methods outsourcing from FTerm to FTermXTerminal
|
* Methods outsourcing from FTerm to FTermXTerminal
|
||||||
|
|
||||||
|
|
14
README.md
14
README.md
|
@ -117,13 +117,13 @@ printf(...)
|
||||||
Class digramm
|
Class digramm
|
||||||
-------------
|
-------------
|
||||||
<pre style="line-height: 1 !important;">
|
<pre style="line-height: 1 !important;">
|
||||||
┌───────────┐
|
1┌──────────────┐ ┌───────────┐
|
||||||
┌────┤ FKeyEvent │
|
┌-----------┤ FTermFreeBSD │ ┌────┤ FKeyEvent │
|
||||||
│ └───────────┘
|
: └──────────────┘ │ └───────────┘
|
||||||
│ ┌─────────────┐
|
: 1┌──────────────┐ │ ┌─────────────┐
|
||||||
├────┤ FMouseEvent │
|
┌-----------┤ FTermOpenBSD │ ├────┤ FMouseEvent │
|
||||||
│ └─────────────┘
|
: └──────────────┘ │ └─────────────┘
|
||||||
1┌────────────────┐ │ ┌─────────────┐
|
: 1┌────────────────┐ │ ┌─────────────┐
|
||||||
┌-----------┤ FTermDetection │ ├────┤ FWheelEvent │
|
┌-----------┤ FTermDetection │ ├────┤ FWheelEvent │
|
||||||
: └────────────────┘ │ └─────────────┘
|
: └────────────────┘ │ └─────────────┘
|
||||||
: 1┌────────────────┐ │ ┌─────────────┐
|
: 1┌────────────────┐ │ ┌─────────────┐
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
Class digramm
|
Class digramm
|
||||||
══════════════════════════════════════════════════════════════════════════════
|
══════════════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
┌───────────┐
|
1┌──────────────┐ ┌───────────┐
|
||||||
┌────┤ FKeyEvent │
|
┌-----------┤ FTermFreeBSD │ ┌────┤ FKeyEvent │
|
||||||
│ └───────────┘
|
: └──────────────┘ │ └───────────┘
|
||||||
│ ┌─────────────┐
|
: 1┌──────────────┐ │ ┌─────────────┐
|
||||||
├────┤ FMouseEvent │
|
┌-----------┤ FTermOpenBSD │ ├────┤ FMouseEvent │
|
||||||
│ └─────────────┘
|
: └──────────────┘ │ └─────────────┘
|
||||||
1┌────────────────┐ │ ┌─────────────┐
|
: 1┌────────────────┐ │ ┌─────────────┐
|
||||||
┌-----------┤ FTermDetection │ ├────┤ FWheelEvent │
|
┌-----------┤ FTermDetection │ ├────┤ FWheelEvent │
|
||||||
: └────────────────┘ │ └─────────────┘
|
: └────────────────┘ │ └─────────────┘
|
||||||
: 1┌────────────────┐ │ ┌─────────────┐
|
: 1┌────────────────┐ │ ┌─────────────┐
|
||||||
|
|
|
@ -26,26 +26,26 @@
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class fClassName
|
// class FClassName
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
// constructors and destructor
|
// constructors and destructor
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
fClassName::fClassName()
|
FClassName::FClassName()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
fClassName::~fClassName() // destructor
|
FClassName::~FClassName() // destructor
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// public methods of fClassName
|
// public methods of FClassName
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
// protected methods of fClassName
|
// protected methods of FClassName
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
// private methods of fClassName
|
// private methods of FClassName
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* ════════════════
|
* ════════════════
|
||||||
*
|
*
|
||||||
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▏
|
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▏
|
||||||
* ▕ fClassName ▏
|
* ▕ FClassName ▏
|
||||||
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▏
|
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▏
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -39,13 +39,13 @@
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class fClassName
|
// class FClassName
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
#pragma pack(push)
|
#pragma pack(push)
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
|
|
||||||
class fClassName
|
class FClassName
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Using-declaration
|
// Using-declaration
|
||||||
|
@ -55,15 +55,17 @@ class fClassName
|
||||||
// Constants
|
// Constants
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
fClassName();
|
FClassName();
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~fClassName();
|
~FClassName();
|
||||||
|
|
||||||
// Overloaded operators
|
// Overloaded operators
|
||||||
|
|
||||||
// Accessors
|
// Accessors
|
||||||
|
|
||||||
|
// Mutators
|
||||||
|
|
||||||
// Inquiries
|
// Inquiries
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
|
@ -97,10 +99,10 @@ class fClassName
|
||||||
// Constants
|
// Constants
|
||||||
|
|
||||||
// Disable copy constructor
|
// Disable copy constructor
|
||||||
fClassName (const fClassName&);
|
FClassName (const FClassName&);
|
||||||
|
|
||||||
// Disable assignment operator (=)
|
// Disable assignment operator (=)
|
||||||
fClassName& operator = (const fClassName&);
|
FClassName& operator = (const FClassName&);
|
||||||
|
|
||||||
// Accessors
|
// Accessors
|
||||||
|
|
||||||
|
@ -119,7 +121,7 @@ class fClassName
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
// fClassName inline functions
|
// FClassName inline functions
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* *
|
* *
|
||||||
* This file is part of the Final Cut widget toolkit *
|
* This file is part of the Final Cut widget toolkit *
|
||||||
* *
|
* *
|
||||||
* Copyright 2015-2017 Markus Gans *
|
* Copyright 2015-2018 Markus Gans *
|
||||||
* *
|
* *
|
||||||
* The Final Cut is free software; you can redistribute it and/or *
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU Lesser General Public License *
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
@ -27,6 +27,9 @@
|
||||||
#error "Only <final/final.h> can be included directly."
|
#error "Only <final/final.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "final/fc.h"
|
||||||
|
#include "final/ftypes.h"
|
||||||
|
|
||||||
namespace fc
|
namespace fc
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -87,16 +87,6 @@
|
||||||
#include <sys/kd.h>
|
#include <sys/kd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
#include <sys/consio.h>
|
|
||||||
#include <sys/kbio.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <dev/wscons/wsconsio.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
@ -146,6 +136,15 @@
|
||||||
#include "final/ftermcap.h"
|
#include "final/ftermcap.h"
|
||||||
#include "final/ftermcapquirks.h"
|
#include "final/ftermcapquirks.h"
|
||||||
#include "final/ftermdetection.h"
|
#include "final/ftermdetection.h"
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
#include "final/ftermfreebsd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
#include "final/ftermopenbsd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "final/ftermios.h"
|
#include "final/ftermios.h"
|
||||||
#include "final/ftermxterminal.h"
|
#include "final/ftermxterminal.h"
|
||||||
|
|
||||||
|
@ -201,10 +200,6 @@ class FTerm
|
||||||
static fc::linuxConsoleCursorStyle getLinuxConsoleCursorStyle();
|
static fc::linuxConsoleCursorStyle getLinuxConsoleCursorStyle();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
static fc::freebsdConsoleCursorStyle getFreeBSDConsoleCursorStyle();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
static const FString& getAnswerbackString();
|
static const FString& getAnswerbackString();
|
||||||
static const FString& getSecDAString();
|
static const FString& getSecDAString();
|
||||||
|
@ -260,11 +255,6 @@ class FTerm
|
||||||
(fc::linuxConsoleCursorStyle, bool);
|
(fc::linuxConsoleCursorStyle, bool);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
static void setFreeBSDConsoleCursorStyle \
|
|
||||||
(fc::freebsdConsoleCursorStyle, bool);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void setKeypressTimeout (const long);
|
static void setKeypressTimeout (const long);
|
||||||
static void setDblclickInterval (const long);
|
static void setDblclickInterval (const long);
|
||||||
static void disableAltScreen();
|
static void disableAltScreen();
|
||||||
|
@ -401,14 +391,6 @@ class FTerm
|
||||||
static int isLinuxConsole();
|
static int isLinuxConsole();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
static bool isFreeBSDConsole();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
|
||||||
static bool isWSConsConsole();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#if defined(__x86_64__) || defined(__i386) || defined(__arm__)
|
#if defined(__x86_64__) || defined(__i386) || defined(__arm__)
|
||||||
|
@ -435,23 +417,6 @@ class FTerm
|
||||||
static void initLinuxConsoleCharMap();
|
static void initLinuxConsoleCharMap();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
static bool saveFreeBSDAltKey();
|
|
||||||
static bool setFreeBSDAltKey (uInt);
|
|
||||||
static bool setFreeBSDAlt2Meta();
|
|
||||||
static bool resetFreeBSDAlt2Meta();
|
|
||||||
static void initFreeBSDConsole();
|
|
||||||
static void initFreeBSDConsoleCharMap();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
|
||||||
static bool saveWSConsEncoding();
|
|
||||||
static bool setWSConsEncoding (kbd_t);
|
|
||||||
static bool setWSConsMetaEsc();
|
|
||||||
static bool resetWSConsEncoding();
|
|
||||||
static void initWSConsConsole();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void init_global_values();
|
static void init_global_values();
|
||||||
static void oscPrefix();
|
static void oscPrefix();
|
||||||
static void oscPostfix();
|
static void oscPostfix();
|
||||||
|
@ -525,7 +490,6 @@ class FTerm
|
||||||
static bool ascii_console;
|
static bool ascii_console;
|
||||||
static bool NewFont;
|
static bool NewFont;
|
||||||
static bool VGAFont;
|
static bool VGAFont;
|
||||||
static bool color256;
|
|
||||||
static bool monochron;
|
static bool monochron;
|
||||||
static char termtype[256];
|
static char termtype[256];
|
||||||
static char termfilename[256];
|
static char termfilename[256];
|
||||||
|
@ -546,22 +510,22 @@ class FTerm
|
||||||
static bool resize_term;
|
static bool resize_term;
|
||||||
|
|
||||||
static fc::linuxConsoleCursorStyle linux_console_cursor_style;
|
static fc::linuxConsoleCursorStyle linux_console_cursor_style;
|
||||||
static fc::freebsdConsoleCursorStyle freebsd_console_cursor_style;
|
|
||||||
static struct console_font_op screen_font;
|
static struct console_font_op screen_font;
|
||||||
static struct unimapdesc screen_unicode_map;
|
static struct unimapdesc screen_unicode_map;
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
static uInt bsd_alt_keymap;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
|
||||||
static kbd_t wscons_keyboard_encoding;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static FOptiMove* opti_move;
|
static FOptiMove* opti_move;
|
||||||
static FOptiAttr* opti_attr;
|
static FOptiAttr* opti_attr;
|
||||||
static FTermDetection* term_detection;
|
static FTermDetection* term_detection;
|
||||||
static FTermXTerminal* xterm;
|
static FTermXTerminal* xterm;
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
static FTermFreeBSD* freebsd;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
static FTermOpenBSD* openbsd;
|
||||||
|
#endif
|
||||||
|
|
||||||
static FMouseControl* mouse;
|
static FMouseControl* mouse;
|
||||||
static const FString* save_xterm_font;
|
static const FString* save_xterm_font;
|
||||||
static const FString* save_xterm_title;
|
static const FString* save_xterm_title;
|
||||||
|
@ -604,8 +568,6 @@ class FTerm
|
||||||
{
|
{
|
||||||
dacreg d[16];
|
dacreg d[16];
|
||||||
} color_map;
|
} color_map;
|
||||||
|
|
||||||
friend class FTermDetection;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
|
@ -124,6 +124,7 @@ class FTermDetection
|
||||||
static bool isOpenBSDTerm();
|
static bool isOpenBSDTerm();
|
||||||
static bool isScreenTerm();
|
static bool isScreenTerm();
|
||||||
static bool isTmuxTerm();
|
static bool isTmuxTerm();
|
||||||
|
static bool canDisplay256Colors();
|
||||||
static bool hasTerminalDetection();
|
static bool hasTerminalDetection();
|
||||||
static bool hasSetCursorStyleSupport();
|
static bool hasSetCursorStyleSupport();
|
||||||
|
|
||||||
|
@ -274,6 +275,10 @@ inline const char* FTermDetection::getTermType_SecDA()
|
||||||
{ return termtype_SecDA; }
|
{ return termtype_SecDA; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline bool FTermDetection::canDisplay256Colors()
|
||||||
|
{ return color256; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FTermDetection::hasSetCursorStyleSupport()
|
inline bool FTermDetection::hasSetCursorStyleSupport()
|
||||||
{ return decscusr_support; }
|
{ return decscusr_support; }
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* ftermfreebsd.h - Contains the FreeBSD terminal functions *
|
||||||
|
* *
|
||||||
|
* This file is part of the Final Cut widget toolkit *
|
||||||
|
* *
|
||||||
|
* Copyright 2018 Markus Gans *
|
||||||
|
* *
|
||||||
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 3 of *
|
||||||
|
* the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* The Final Cut is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this program. If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
/* Standalone class
|
||||||
|
* ════════════════
|
||||||
|
*
|
||||||
|
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▔▔▏
|
||||||
|
* ▕ FTermFreeBSD ▏
|
||||||
|
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▁▁▏
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FTERMFREEBSD_H
|
||||||
|
#define FTERMFREEBSD_H
|
||||||
|
|
||||||
|
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
||||||
|
#error "Only <final/final.h> can be included directly."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "final/fc.h"
|
||||||
|
#include "final/ftypes.h"
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
#undef mouse_info // consio.h
|
||||||
|
#undef buttons // consio.h
|
||||||
|
|
||||||
|
#include <sys/consio.h>
|
||||||
|
#include <sys/kbio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// class FTermFreeBSD
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
#pragma pack(push)
|
||||||
|
#pragma pack(1)
|
||||||
|
|
||||||
|
class FTermFreeBSD
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Typedef
|
||||||
|
typedef fc::freebsdConsoleCursorStyle CursorStyle;
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
FTermFreeBSD();
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~FTermFreeBSD();
|
||||||
|
|
||||||
|
// Overloaded operators
|
||||||
|
|
||||||
|
// Accessors
|
||||||
|
static CursorStyle getCursorStyle();
|
||||||
|
|
||||||
|
// Inquiry
|
||||||
|
static bool isFreeBSDConsole();
|
||||||
|
|
||||||
|
// Mutators
|
||||||
|
static void setCursorStyle (CursorStyle, bool);
|
||||||
|
// Methods
|
||||||
|
static void init();
|
||||||
|
static void initCharMap();
|
||||||
|
static void finish();
|
||||||
|
static void restoreCursorStyle();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Disable copy constructor
|
||||||
|
FTermFreeBSD (const FTermFreeBSD&);
|
||||||
|
|
||||||
|
// Disable assignment operator (=)
|
||||||
|
FTermFreeBSD& operator = (const FTermFreeBSD&);
|
||||||
|
|
||||||
|
// Methods
|
||||||
|
static bool saveFreeBSDAltKey();
|
||||||
|
static bool setFreeBSDAltKey (uInt);
|
||||||
|
static bool setFreeBSDAlt2Meta();
|
||||||
|
static bool resetFreeBSDAlt2Meta();
|
||||||
|
|
||||||
|
// Data Members
|
||||||
|
static uInt bsd_alt_keymap;
|
||||||
|
static CursorStyle cursor_style;
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
|
||||||
|
#endif // FTERMFREEBSD_H
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* ftermopenbsd.h - Contains the NetBSD/OpenBSD terminal functions *
|
||||||
|
* *
|
||||||
|
* This file is part of the Final Cut widget toolkit *
|
||||||
|
* *
|
||||||
|
* Copyright 2018 Markus Gans *
|
||||||
|
* *
|
||||||
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 3 of *
|
||||||
|
* the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* The Final Cut is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this program. If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
/* Standalone class
|
||||||
|
* ════════════════
|
||||||
|
*
|
||||||
|
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▔▔▏
|
||||||
|
* ▕ FTermOpenBSD ▏
|
||||||
|
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▁▁▏
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FTERMOPENBSD_H
|
||||||
|
#define FTERMOPENBSD_H
|
||||||
|
|
||||||
|
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
||||||
|
#error "Only <final/final.h> can be included directly."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <dev/wscons/wsconsio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// class FTermOpenBSD
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
#pragma pack(push)
|
||||||
|
#pragma pack(1)
|
||||||
|
|
||||||
|
class FTermOpenBSD
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Constructors
|
||||||
|
FTermOpenBSD();
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~FTermOpenBSD();
|
||||||
|
|
||||||
|
// Overloaded operators
|
||||||
|
|
||||||
|
// Accessors
|
||||||
|
|
||||||
|
// Mutators
|
||||||
|
|
||||||
|
// Inquiries
|
||||||
|
static bool isWSConsConsole();
|
||||||
|
|
||||||
|
// Methods
|
||||||
|
static void init();
|
||||||
|
static void finish();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Disable copy constructor
|
||||||
|
FTermOpenBSD (const FTermOpenBSD&);
|
||||||
|
|
||||||
|
// Disable assignment operator (=)
|
||||||
|
FTermOpenBSD& operator = (const FTermOpenBSD&);
|
||||||
|
|
||||||
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
// Methods
|
||||||
|
static bool saveWSConsEncoding();
|
||||||
|
static bool setWSConsEncoding (kbd_t);
|
||||||
|
static bool setWSConsMetaEsc();
|
||||||
|
static bool resetWSConsEncoding();
|
||||||
|
|
||||||
|
// Data Members
|
||||||
|
static kbd_t wscons_keyboard_encoding;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
// FTermOpenBSD inline functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
#endif // FTERMOPENBSD_H
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,8 @@ libfinal_la_SOURCES = \
|
||||||
fstatusbar.cpp \
|
fstatusbar.cpp \
|
||||||
ftermcapquirks.cpp \
|
ftermcapquirks.cpp \
|
||||||
ftermxterminal.cpp \
|
ftermxterminal.cpp \
|
||||||
|
ftermfreebsd.cpp \
|
||||||
|
ftermopenbsd.cpp \
|
||||||
ftermdetection.cpp \
|
ftermdetection.cpp \
|
||||||
ftermios.cpp \
|
ftermios.cpp \
|
||||||
fterm.cpp \
|
fterm.cpp \
|
||||||
|
@ -106,6 +108,8 @@ finalcutinclude_HEADERS = \
|
||||||
../include/final/ftermcap.h \
|
../include/final/ftermcap.h \
|
||||||
../include/final/ftermcapquirks.h \
|
../include/final/ftermcapquirks.h \
|
||||||
../include/final/ftermxterminal.h \
|
../include/final/ftermxterminal.h \
|
||||||
|
../include/final/ftermfreebsd.h \
|
||||||
|
../include/final/ftermopenbsd.h \
|
||||||
../include/final/ftermdetection.h \
|
../include/final/ftermdetection.h \
|
||||||
../include/final/ftermios.h \
|
../include/final/ftermios.h \
|
||||||
../include/final/fterm.h \
|
../include/final/fterm.h \
|
||||||
|
|
|
@ -48,6 +48,8 @@ INCLUDE_HEADERS = \
|
||||||
ftermdetection.h \
|
ftermdetection.h \
|
||||||
ftermcapquirks.h \
|
ftermcapquirks.h \
|
||||||
ftermxterminal.h \
|
ftermxterminal.h \
|
||||||
|
ftermfreebsd.h \
|
||||||
|
ftermopenbsd.h \
|
||||||
fvterm.h \
|
fvterm.h \
|
||||||
ftextview.h \
|
ftextview.h \
|
||||||
ftogglebutton.h \
|
ftogglebutton.h \
|
||||||
|
@ -103,6 +105,8 @@ OBJS = \
|
||||||
ftermdetection.o \
|
ftermdetection.o \
|
||||||
ftermcapquirks.o \
|
ftermcapquirks.o \
|
||||||
ftermxterminal.o \
|
ftermxterminal.o \
|
||||||
|
ftermfreebsd.o \
|
||||||
|
ftermopenbsd.o \
|
||||||
fvterm.o \
|
fvterm.o \
|
||||||
fevent.o \
|
fevent.o \
|
||||||
foptiattr.o \
|
foptiattr.o \
|
||||||
|
|
|
@ -48,6 +48,8 @@ INCLUDE_HEADERS = \
|
||||||
ftermdetection.h \
|
ftermdetection.h \
|
||||||
ftermcapquirks.h \
|
ftermcapquirks.h \
|
||||||
ftermxterminal.h \
|
ftermxterminal.h \
|
||||||
|
ftermfreebsd.h \
|
||||||
|
ftermopenbsd.h \
|
||||||
fvterm.h \
|
fvterm.h \
|
||||||
ftextview.h \
|
ftextview.h \
|
||||||
ftogglebutton.h \
|
ftogglebutton.h \
|
||||||
|
@ -103,6 +105,8 @@ OBJS = \
|
||||||
ftermdetection.o \
|
ftermdetection.o \
|
||||||
ftermcapquirks.o \
|
ftermcapquirks.o \
|
||||||
ftermxterminal.o \
|
ftermxterminal.o \
|
||||||
|
ftermfreebsd.o \
|
||||||
|
ftermopenbsd.o \
|
||||||
fvterm.o \
|
fvterm.o \
|
||||||
fevent.o \
|
fevent.o \
|
||||||
foptiattr.o \
|
foptiattr.o \
|
||||||
|
|
|
@ -137,9 +137,10 @@ am_libfinal_la_OBJECTS = fstring.lo fpoint.lo frect.lo fscrollbar.lo \
|
||||||
fcheckmenuitem.lo fmenulist.lo fdialog.lo fscrollview.lo \
|
fcheckmenuitem.lo fmenulist.lo fdialog.lo fscrollview.lo \
|
||||||
fwindow.lo fmessagebox.lo ftooltip.lo ffiledialog.lo \
|
fwindow.lo fmessagebox.lo ftooltip.lo ffiledialog.lo \
|
||||||
ftextview.lo fstatusbar.lo ftermcapquirks.lo ftermxterminal.lo \
|
ftextview.lo fstatusbar.lo ftermcapquirks.lo ftermxterminal.lo \
|
||||||
ftermdetection.lo ftermios.lo fterm.lo fvterm.lo fevent.lo \
|
ftermfreebsd.lo ftermopenbsd.lo ftermdetection.lo ftermios.lo \
|
||||||
foptiattr.lo foptimove.lo ftermbuffer.lo fapplication.lo \
|
fterm.lo fvterm.lo fevent.lo foptiattr.lo foptimove.lo \
|
||||||
fcolorpalette.lo fwidgetcolors.lo fwidget.lo fobject.lo
|
ftermbuffer.lo fapplication.lo fcolorpalette.lo \
|
||||||
|
fwidgetcolors.lo fwidget.lo fobject.lo
|
||||||
libfinal_la_OBJECTS = $(am_libfinal_la_OBJECTS)
|
libfinal_la_OBJECTS = $(am_libfinal_la_OBJECTS)
|
||||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||||
|
@ -415,6 +416,8 @@ libfinal_la_SOURCES = \
|
||||||
fstatusbar.cpp \
|
fstatusbar.cpp \
|
||||||
ftermcapquirks.cpp \
|
ftermcapquirks.cpp \
|
||||||
ftermxterminal.cpp \
|
ftermxterminal.cpp \
|
||||||
|
ftermfreebsd.cpp \
|
||||||
|
ftermopenbsd.cpp \
|
||||||
ftermdetection.cpp \
|
ftermdetection.cpp \
|
||||||
ftermios.cpp \
|
ftermios.cpp \
|
||||||
fterm.cpp \
|
fterm.cpp \
|
||||||
|
@ -477,6 +480,8 @@ finalcutinclude_HEADERS = \
|
||||||
../include/final/ftermcap.h \
|
../include/final/ftermcap.h \
|
||||||
../include/final/ftermcapquirks.h \
|
../include/final/ftermcapquirks.h \
|
||||||
../include/final/ftermxterminal.h \
|
../include/final/ftermxterminal.h \
|
||||||
|
../include/final/ftermfreebsd.h \
|
||||||
|
../include/final/ftermopenbsd.h \
|
||||||
../include/final/ftermdetection.h \
|
../include/final/ftermdetection.h \
|
||||||
../include/final/ftermios.h \
|
../include/final/ftermios.h \
|
||||||
../include/final/fterm.h \
|
../include/final/fterm.h \
|
||||||
|
@ -604,7 +609,9 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermbuffer.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermbuffer.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermcapquirks.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermcapquirks.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermdetection.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermdetection.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermfreebsd.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermios.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermios.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermopenbsd.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermxterminal.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftermxterminal.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftextview.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftextview.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftogglebutton.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftogglebutton.Plo@am__quote@
|
||||||
|
|
|
@ -502,7 +502,7 @@ void FFileDialog::initCallbacks()
|
||||||
inline bool FFileDialog::pattern_match ( const char* const pattern
|
inline bool FFileDialog::pattern_match ( const char* const pattern
|
||||||
, char fname[] )
|
, char fname[] )
|
||||||
{
|
{
|
||||||
char search[128] = {};
|
char search[128] = { };
|
||||||
|
|
||||||
if ( show_hidden && fname[0] == '.' && fname[1] != '\0' ) // hidden files
|
if ( show_hidden && fname[0] == '.' && fname[1] != '\0' ) // hidden files
|
||||||
{
|
{
|
||||||
|
@ -695,8 +695,8 @@ void FFileDialog::followSymLink (const char* const dir, dir_entry& entry)
|
||||||
if ( ! entry.symbolic_link )
|
if ( ! entry.symbolic_link )
|
||||||
return; // No symbolic link
|
return; // No symbolic link
|
||||||
|
|
||||||
char resolved_path[MAXPATHLEN] = {};
|
char resolved_path[MAXPATHLEN] = { };
|
||||||
char symLink[MAXPATHLEN] = {};
|
char symLink[MAXPATHLEN] = { };
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
|
|
||||||
std::strncpy (symLink, dir, sizeof(symLink) - 1);
|
std::strncpy (symLink, dir, sizeof(symLink) - 1);
|
||||||
|
|
|
@ -726,7 +726,7 @@ int FOptiMove::relativeMove ( char move[]
|
||||||
|
|
||||||
if ( to_x != from_x ) // horizontal move
|
if ( to_x != from_x ) // horizontal move
|
||||||
{
|
{
|
||||||
char hmove[BUF_SIZE] = {};
|
char hmove[BUF_SIZE] = { };
|
||||||
htime = horizontalMove (hmove, from_x, to_x);
|
htime = horizontalMove (hmove, from_x, to_x);
|
||||||
|
|
||||||
if ( htime >= LONG_DURATION )
|
if ( htime >= LONG_DURATION )
|
||||||
|
@ -855,7 +855,7 @@ inline void FOptiMove::rightMove ( char hmove[], int& htime
|
||||||
|
|
||||||
if ( F_cursor_right.cap )
|
if ( F_cursor_right.cap )
|
||||||
{
|
{
|
||||||
char str[BUF_SIZE] = {};
|
char str[BUF_SIZE] = { };
|
||||||
int htime_r = 0;
|
int htime_r = 0;
|
||||||
str[0] = '\0';
|
str[0] = '\0';
|
||||||
|
|
||||||
|
@ -908,7 +908,7 @@ inline void FOptiMove::leftMove ( char hmove[], int& htime
|
||||||
|
|
||||||
if ( F_cursor_left.cap )
|
if ( F_cursor_left.cap )
|
||||||
{
|
{
|
||||||
char str[BUF_SIZE] = {};
|
char str[BUF_SIZE] = { };
|
||||||
int htime_l = 0;
|
int htime_l = 0;
|
||||||
str[0] = '\0';
|
str[0] = '\0';
|
||||||
|
|
||||||
|
|
|
@ -139,6 +139,9 @@ FString::FString (const FString& s) // copy constructor
|
||||||
, bufsize(0)
|
, bufsize(0)
|
||||||
, c_string(0)
|
, c_string(0)
|
||||||
{
|
{
|
||||||
|
if ( ! &s )
|
||||||
|
return;
|
||||||
|
|
||||||
if ( s.isNull() )
|
if ( s.isNull() )
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
|
@ -152,6 +155,9 @@ FString::FString (const std::wstring& s)
|
||||||
, bufsize(0)
|
, bufsize(0)
|
||||||
, c_string(0)
|
, c_string(0)
|
||||||
{
|
{
|
||||||
|
if ( ! &s )
|
||||||
|
return;
|
||||||
|
|
||||||
if ( s.empty() )
|
if ( s.empty() )
|
||||||
_assign (L"");
|
_assign (L"");
|
||||||
else
|
else
|
||||||
|
@ -184,6 +190,9 @@ FString::FString (const std::string& s)
|
||||||
, bufsize(0)
|
, bufsize(0)
|
||||||
, c_string(0)
|
, c_string(0)
|
||||||
{
|
{
|
||||||
|
if ( ! &s )
|
||||||
|
return;
|
||||||
|
|
||||||
if ( s.empty() )
|
if ( s.empty() )
|
||||||
{
|
{
|
||||||
_assign(L"");
|
_assign(L"");
|
||||||
|
|
248
src/fterm.cpp
248
src/fterm.cpp
|
@ -56,10 +56,8 @@ uInt FTerm::cursor_address_lengths;
|
||||||
uInt FTerm::baudrate;
|
uInt FTerm::baudrate;
|
||||||
long FTerm::key_timeout;
|
long FTerm::key_timeout;
|
||||||
bool FTerm::resize_term;
|
bool FTerm::resize_term;
|
||||||
|
|
||||||
bool FTerm::input_data_pending;
|
bool FTerm::input_data_pending;
|
||||||
bool FTerm::non_blocking_stdin;
|
bool FTerm::non_blocking_stdin;
|
||||||
bool FTerm::color256;
|
|
||||||
bool FTerm::monochron;
|
bool FTerm::monochron;
|
||||||
bool FTerm::pc_charset_console;
|
bool FTerm::pc_charset_console;
|
||||||
bool FTerm::utf8_input;
|
bool FTerm::utf8_input;
|
||||||
|
@ -76,8 +74,8 @@ bool FTerm::half_block_character;
|
||||||
bool FTerm::cursor_optimisation;
|
bool FTerm::cursor_optimisation;
|
||||||
bool FTerm::hidden_cursor;
|
bool FTerm::hidden_cursor;
|
||||||
bool FTerm::use_alternate_screen = true;
|
bool FTerm::use_alternate_screen = true;
|
||||||
char FTerm::termtype[256] = {};
|
char FTerm::termtype[256] = { };
|
||||||
char FTerm::termfilename[256] = {};
|
char FTerm::termfilename[256] = { };
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
int FTerm::framebuffer_bpp = -1;
|
int FTerm::framebuffer_bpp = -1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -112,7 +110,6 @@ FTerm::colorEnv FTerm::color_env;
|
||||||
FTerm::secondaryDA FTerm::secondary_da;
|
FTerm::secondaryDA FTerm::secondary_da;
|
||||||
FTerm::initializationValues FTerm::init_values;
|
FTerm::initializationValues FTerm::init_values;
|
||||||
fc::linuxConsoleCursorStyle FTerm::linux_console_cursor_style;
|
fc::linuxConsoleCursorStyle FTerm::linux_console_cursor_style;
|
||||||
fc::freebsdConsoleCursorStyle FTerm::freebsd_console_cursor_style;
|
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
FTerm::modifier_key FTerm::mod_key;
|
FTerm::modifier_key FTerm::mod_key;
|
||||||
|
@ -121,11 +118,11 @@ fc::freebsdConsoleCursorStyle FTerm::freebsd_console_cursor_style;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
uInt FTerm::bsd_alt_keymap = 0;
|
FTermFreeBSD* FTerm::freebsd = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
kbd_t FTerm::wscons_keyboard_encoding = 0;
|
FTermOpenBSD* FTerm::openbsd = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -151,7 +148,7 @@ FTerm::FTerm (bool disable_alt_screen)
|
||||||
FTerm::~FTerm() // destructor
|
FTerm::~FTerm() // destructor
|
||||||
{
|
{
|
||||||
if ( init_term_object == this )
|
if ( init_term_object == this )
|
||||||
finish();
|
finish(); // Resetting console settings
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -233,14 +230,6 @@ fc::linuxConsoleCursorStyle FTerm::getLinuxConsoleCursorStyle()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
fc::freebsdConsoleCursorStyle FTerm::getFreeBSDConsoleCursorStyle()
|
|
||||||
{
|
|
||||||
return freebsd_console_cursor_style;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
bool FTerm::isNormal (char_data*& ch)
|
bool FTerm::isNormal (char_data*& ch)
|
||||||
{
|
{
|
||||||
|
@ -295,25 +284,6 @@ char* FTerm::setLinuxConsoleCursorStyle ( fc::linuxConsoleCursorStyle style
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
void FTerm::setFreeBSDConsoleCursorStyle ( fc::freebsdConsoleCursorStyle style
|
|
||||||
, bool hidden )
|
|
||||||
{
|
|
||||||
// Set cursor style in a BSD console
|
|
||||||
|
|
||||||
if ( ! isFreeBSDConsole() )
|
|
||||||
return;
|
|
||||||
|
|
||||||
freebsd_console_cursor_style = style;
|
|
||||||
|
|
||||||
if ( hidden )
|
|
||||||
return;
|
|
||||||
|
|
||||||
ioctl(0, CONS_CURSORTYPE, &style);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTerm::setDblclickInterval (const long timeout)
|
void FTerm::setDblclickInterval (const long timeout)
|
||||||
{
|
{
|
||||||
|
@ -608,7 +578,8 @@ bool FTerm::setOldFont()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
char* FTerm::moveCursor (int xold, int yold, int xnew, int ynew)
|
char* FTerm::moveCursor (int xold, int yold, int xnew, int ynew)
|
||||||
{
|
{
|
||||||
// returns the cursor move string
|
// Returns the cursor move string
|
||||||
|
|
||||||
if ( cursor_optimisation )
|
if ( cursor_optimisation )
|
||||||
return opti_move->moveCursor (xold, yold, xnew, ynew);
|
return opti_move->moveCursor (xold, yold, xnew, ynew);
|
||||||
else
|
else
|
||||||
|
@ -652,6 +623,8 @@ void FTerm::printMoveDurations()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
char* FTerm::enableCursor()
|
char* FTerm::enableCursor()
|
||||||
{
|
{
|
||||||
|
// Returns the cursor enable string
|
||||||
|
|
||||||
static const std::size_t SIZE = 32;
|
static const std::size_t SIZE = 32;
|
||||||
static char enable_str[SIZE] = { };
|
static char enable_str[SIZE] = { };
|
||||||
char*& vs = TCAP(fc::t_cursor_visible);
|
char*& vs = TCAP(fc::t_cursor_visible);
|
||||||
|
@ -665,6 +638,7 @@ char* FTerm::enableCursor()
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
if ( isLinuxTerm() )
|
if ( isLinuxTerm() )
|
||||||
{
|
{
|
||||||
|
// Restore the last used Linux console cursor style
|
||||||
char* lcur;
|
char* lcur;
|
||||||
lcur = setLinuxConsoleCursorStyle (getLinuxConsoleCursorStyle(), false);
|
lcur = setLinuxConsoleCursorStyle (getLinuxConsoleCursorStyle(), false);
|
||||||
std::strncat (enable_str, lcur, SIZE - std::strlen(enable_str) - 1);
|
std::strncat (enable_str, lcur, SIZE - std::strlen(enable_str) - 1);
|
||||||
|
@ -672,7 +646,8 @@ char* FTerm::enableCursor()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
setFreeBSDConsoleCursorStyle (getFreeBSDConsoleCursorStyle(), false);
|
// Restore the last used FreeBSD console cursor style
|
||||||
|
freebsd->restoreCursorStyle();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return enable_str;
|
return enable_str;
|
||||||
|
@ -681,6 +656,8 @@ char* FTerm::enableCursor()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
char* FTerm::disableCursor()
|
char* FTerm::disableCursor()
|
||||||
{
|
{
|
||||||
|
// Returns the cursor disable string
|
||||||
|
|
||||||
char*& vi = TCAP(fc::t_cursor_invisible);
|
char*& vi = TCAP(fc::t_cursor_invisible);
|
||||||
|
|
||||||
if ( vi )
|
if ( vi )
|
||||||
|
@ -692,6 +669,8 @@ char* FTerm::disableCursor()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTerm::detectTermSize()
|
void FTerm::detectTermSize()
|
||||||
{
|
{
|
||||||
|
// Detect the terminal width and height
|
||||||
|
|
||||||
struct winsize win_size;
|
struct winsize win_size;
|
||||||
bool close_after_detect = false;
|
bool close_after_detect = false;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -1114,7 +1093,7 @@ void FTerm::initScreenSettings()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
initFreeBSDConsoleCharMap();
|
freebsd->initCharMap();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// set xterm underline cursor
|
// set xterm underline cursor
|
||||||
|
@ -1187,6 +1166,8 @@ void FTerm::exitWithMessage (std::string message)
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
int FTerm::isLinuxConsole()
|
int FTerm::isLinuxConsole()
|
||||||
{
|
{
|
||||||
|
// Check if it's a Linux console
|
||||||
|
|
||||||
char arg = 0;
|
char arg = 0;
|
||||||
// get keyboard type an compare
|
// get keyboard type an compare
|
||||||
return ( isatty (fd_tty)
|
return ( isatty (fd_tty)
|
||||||
|
@ -1195,32 +1176,6 @@ int FTerm::isLinuxConsole()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::isFreeBSDConsole()
|
|
||||||
{
|
|
||||||
keymap_t keymap;
|
|
||||||
|
|
||||||
if ( ioctl(0, GIO_KEYMAP, &keymap) == 0 )
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
|
||||||
bool FTerm::isWSConsConsole()
|
|
||||||
{
|
|
||||||
static kbd_t kbdencoding;
|
|
||||||
|
|
||||||
if ( ioctl(0, WSKBDIO_GETENCODING, &kbdencoding) == 0 )
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#if defined(__x86_64__) || defined(__i386) || defined(__arm__)
|
#if defined(__x86_64__) || defined(__i386) || defined(__arm__)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -1328,7 +1283,7 @@ int FTerm::setBlinkAsIntensity (bool on)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
int FTerm::getFramebuffer_bpp ()
|
int FTerm::getFramebuffer_bpp()
|
||||||
{
|
{
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
struct fb_var_screeninfo fb_var;
|
struct fb_var_screeninfo fb_var;
|
||||||
|
@ -1696,143 +1651,6 @@ void FTerm::initLinuxConsoleCharMap()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::saveFreeBSDAltKey()
|
|
||||||
{
|
|
||||||
static const int left_alt = 0x38;
|
|
||||||
int ret;
|
|
||||||
keymap_t keymap;
|
|
||||||
|
|
||||||
ret = ioctl(0, GIO_KEYMAP, &keymap);
|
|
||||||
|
|
||||||
if ( ret < 0 )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// save current mapping
|
|
||||||
bsd_alt_keymap = keymap.key[left_alt].map[0];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::setFreeBSDAltKey (uInt key)
|
|
||||||
{
|
|
||||||
static const int left_alt = 0x38;
|
|
||||||
int ret;
|
|
||||||
keymap_t keymap;
|
|
||||||
|
|
||||||
ret = ioctl(0, GIO_KEYMAP, &keymap);
|
|
||||||
|
|
||||||
if ( ret < 0 )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// map to meta key
|
|
||||||
keymap.key[left_alt].map[0] = key;
|
|
||||||
|
|
||||||
if ( (keymap.n_keys > 0) && (ioctl(0, PIO_KEYMAP, &keymap) < 0) )
|
|
||||||
return false;
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::setFreeBSDAlt2Meta()
|
|
||||||
{
|
|
||||||
return setFreeBSDAltKey (META);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::resetFreeBSDAlt2Meta()
|
|
||||||
{
|
|
||||||
return setFreeBSDAltKey (bsd_alt_keymap);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
void FTerm::initFreeBSDConsole()
|
|
||||||
{
|
|
||||||
// initialize BSD console
|
|
||||||
|
|
||||||
if ( isFreeBSDConsole() )
|
|
||||||
{
|
|
||||||
// save current left alt key mapping
|
|
||||||
saveFreeBSDAltKey();
|
|
||||||
|
|
||||||
// map meta key to left alt key
|
|
||||||
setFreeBSDAlt2Meta();
|
|
||||||
|
|
||||||
// Initialize FreeBSD console cursor
|
|
||||||
setFreeBSDConsoleCursorStyle (fc::destructive_cursor, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
void FTerm::initFreeBSDConsoleCharMap()
|
|
||||||
{
|
|
||||||
// A FreeBSD console can't show ASCII codes from 0x00 to 0x1b
|
|
||||||
|
|
||||||
if ( ! isFreeBSDConsole() )
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int i = 0; i <= fc::lastCharItem; i++ )
|
|
||||||
if ( fc::character[i][fc::PC] < 0x1c )
|
|
||||||
fc::character[i][fc::PC] = fc::character[i][fc::ASCII];
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::saveWSConsEncoding()
|
|
||||||
{
|
|
||||||
static kbd_t k_encoding;
|
|
||||||
int ret = ioctl(0, WSKBDIO_GETENCODING, &k_encoding);
|
|
||||||
|
|
||||||
if ( ret < 0 )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// save current encoding
|
|
||||||
wscons_keyboard_encoding = k_encoding;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::setWSConsEncoding (kbd_t k_encoding)
|
|
||||||
{
|
|
||||||
if ( ioctl(0, WSKBDIO_SETENCODING, &k_encoding) < 0 )
|
|
||||||
return false;
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::setWSConsMetaEsc()
|
|
||||||
{
|
|
||||||
static const kbd_t meta_esc = 0x20; // generate ESC prefix on ALT-key
|
|
||||||
|
|
||||||
return setWSConsEncoding (wscons_keyboard_encoding | meta_esc);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FTerm::resetWSConsEncoding()
|
|
||||||
{
|
|
||||||
return setWSConsEncoding (wscons_keyboard_encoding);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
void FTerm::initWSConsConsole()
|
|
||||||
{
|
|
||||||
// initialize wscons console
|
|
||||||
|
|
||||||
if ( isWSConsConsole() )
|
|
||||||
{
|
|
||||||
// save current left alt key mapping
|
|
||||||
saveWSConsEncoding();
|
|
||||||
|
|
||||||
// alt key generate ESC prefix
|
|
||||||
setWSConsMetaEsc();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTerm::init_global_values()
|
void FTerm::init_global_values()
|
||||||
{
|
{
|
||||||
|
@ -2072,6 +1890,7 @@ void FTerm::init_termcap()
|
||||||
static char string_buf[2048];
|
static char string_buf[2048];
|
||||||
char* buffer = string_buf;
|
char* buffer = string_buf;
|
||||||
int status = uninitialized;
|
int status = uninitialized;
|
||||||
|
bool color256 = term_detection->canDisplay256Colors();
|
||||||
|
|
||||||
// share the terminal capabilities
|
// share the terminal capabilities
|
||||||
FTermcap().setTermcapMap(tcap);
|
FTermcap().setTermcapMap(tcap);
|
||||||
|
@ -2631,7 +2450,7 @@ void FTerm::setInsertCursorStyle()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
setFreeBSDConsoleCursorStyle (fc::destructive_cursor, isCursorHidden());
|
freebsd->setCursorStyle (fc::destructive_cursor, isCursorHidden());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ( isUrxvtTerminal() )
|
if ( isUrxvtTerminal() )
|
||||||
|
@ -2649,7 +2468,7 @@ void FTerm::setOverwriteCursorStyle()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
setFreeBSDConsoleCursorStyle (fc::normal_cursor, isCursorHidden());
|
freebsd->setCursorStyle (fc::normal_cursor, isCursorHidden());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ( isUrxvtTerminal() )
|
if ( isUrxvtTerminal() )
|
||||||
|
@ -2741,6 +2560,11 @@ inline void FTerm::allocationValues()
|
||||||
opti_attr = new FOptiAttr();
|
opti_attr = new FOptiAttr();
|
||||||
term_detection = new FTermDetection();
|
term_detection = new FTermDetection();
|
||||||
xterm = new FTermXTerminal();
|
xterm = new FTermXTerminal();
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
freebsd = new FTermFreeBSD();
|
||||||
|
#endif
|
||||||
|
|
||||||
mouse = new FMouseControl();
|
mouse = new FMouseControl();
|
||||||
term = new FRect(0, 0, 0, 0);
|
term = new FRect(0, 0, 0, 0);
|
||||||
vt100_alt_char = new std::map<uChar, uChar>;
|
vt100_alt_char = new std::map<uChar, uChar>;
|
||||||
|
@ -2774,6 +2598,11 @@ inline void FTerm::deallocationValues()
|
||||||
if ( mouse )
|
if ( mouse )
|
||||||
delete mouse;
|
delete mouse;
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
if ( freebsd )
|
||||||
|
delete freebsd;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( xterm )
|
if ( xterm )
|
||||||
delete xterm;
|
delete xterm;
|
||||||
|
|
||||||
|
@ -2918,12 +2747,12 @@ void FTerm::initOSspecifics()
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
// Initialize BSD console
|
// Initialize BSD console
|
||||||
initFreeBSDConsole();
|
freebsd->init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
// Initialize wscons console
|
// Initialize wscons console
|
||||||
initWSConsConsole();
|
openbsd->init();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3011,12 +2840,11 @@ void FTerm::finishOSspecifics1()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
resetFreeBSDAlt2Meta();
|
freebsd->finish();
|
||||||
setFreeBSDConsoleCursorStyle (fc::normal_cursor, false);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
resetWSConsEncoding();
|
openbsd->finish();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3159,7 +2987,7 @@ inline int FTerm::getSingleKey (char buffer[], int buf_size)
|
||||||
// Look for a utf-8 character
|
// Look for a utf-8 character
|
||||||
if ( utf8_input && (firstchar & 0xc0) == 0xc0 )
|
if ( utf8_input && (firstchar & 0xc0) == 0xc0 )
|
||||||
{
|
{
|
||||||
char utf8char[4] = {}; // Init array with '\0'
|
char utf8char[4] = { }; // Init array with '\0'
|
||||||
|
|
||||||
if ( (firstchar & 0xe0) == 0xc0 )
|
if ( (firstchar & 0xe0) == 0xc0 )
|
||||||
len = 2;
|
len = 2;
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include "final/ftermcapquirks.h"
|
#include "final/ftermcapquirks.h"
|
||||||
|
|
||||||
// static class attributes
|
// static class attributes
|
||||||
char FTermcapQuirks::termtype[256] = {};
|
char FTermcapQuirks::termtype[256] = { };
|
||||||
FTermcap::tcap_map* FTermcapQuirks::tcap = 0;
|
FTermcap::tcap_map* FTermcapQuirks::tcap = 0;
|
||||||
FTermDetection* FTermcapQuirks::term_detection = 0;
|
FTermDetection* FTermcapQuirks::term_detection = 0;
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@ FTermDetection::terminalType FTermDetection::terminal_type = \
|
||||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
FTermDetection::colorEnv FTermDetection::color_env;
|
FTermDetection::colorEnv FTermDetection::color_env;
|
||||||
FTermDetection::secondaryDA FTermDetection::secondary_da;
|
FTermDetection::secondaryDA FTermDetection::secondary_da;
|
||||||
char FTermDetection::termtype[256] = {};
|
char FTermDetection::termtype[256] = { };
|
||||||
char FTermDetection::termfilename[256] = {};
|
char FTermDetection::termfilename[256] = { };
|
||||||
bool FTermDetection::decscusr_support;
|
bool FTermDetection::decscusr_support;
|
||||||
bool FTermDetection::terminal_detection;
|
bool FTermDetection::terminal_detection;
|
||||||
bool FTermDetection::color256;
|
bool FTermDetection::color256;
|
||||||
|
@ -38,9 +38,9 @@ const FString* FTermDetection::sec_da = 0;
|
||||||
int FTermDetection::gnome_terminal_id;
|
int FTermDetection::gnome_terminal_id;
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
char FTermDetection::termtype_256color[256] = {};
|
char FTermDetection::termtype_256color[256] = { };
|
||||||
char FTermDetection::termtype_Answerback[256] = {};
|
char FTermDetection::termtype_Answerback[256] = { };
|
||||||
char FTermDetection::termtype_SecDA[256] = {};
|
char FTermDetection::termtype_SecDA[256] = { };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -469,7 +469,7 @@ const FString FTermDetection::getXTermColorName (int color)
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
int stdin_no = FTermios::getStdIn();
|
int stdin_no = FTermios::getStdIn();
|
||||||
|
|
||||||
char temp[512] = {};
|
char temp[512] = { };
|
||||||
FTerm::putstringf (OSC "4;%d;?" BEL, color); // get color
|
FTerm::putstringf (OSC "4;%d;?" BEL, color); // get color
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
|
|
||||||
|
@ -547,7 +547,7 @@ const FString FTermDetection::getAnswerbackMsg()
|
||||||
|
|
||||||
fd_set ifds;
|
fd_set ifds;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
char temp[10] = {};
|
char temp[10] = { };
|
||||||
int stdin_no = FTermios::getStdIn();
|
int stdin_no = FTermios::getStdIn();
|
||||||
|
|
||||||
std::putchar (ENQ[0]); // Send enquiry character
|
std::putchar (ENQ[0]); // Send enquiry character
|
||||||
|
@ -764,7 +764,7 @@ inline char* FTermDetection::secDA_Analysis_0 (char current_termtype[])
|
||||||
terminal_type.putty = true; // PuTTY
|
terminal_type.putty = true; // PuTTY
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
if ( FTerm::isFreeBSDConsole() )
|
if ( FTermFreeBSD::isFreeBSDConsole() )
|
||||||
terminal_type.freebsd_con = true;
|
terminal_type.freebsd_con = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -803,7 +803,8 @@ inline char* FTermDetection::secDA_Analysis_24 (char current_termtype[])
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
|
||||||
if ( secondary_da.terminal_id_version == 20 && FTerm::isWSConsConsole() )
|
if ( secondary_da.terminal_id_version == 20
|
||||||
|
&& FTermOpenBSD::isWSConsConsole() )
|
||||||
{
|
{
|
||||||
// NetBSD/OpenBSD workstation console
|
// NetBSD/OpenBSD workstation console
|
||||||
if ( std::strncmp(termtype, C_STR("wsvt25"), 6) == 0 )
|
if ( std::strncmp(termtype, C_STR("wsvt25"), 6) == 0 )
|
||||||
|
|
|
@ -0,0 +1,193 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* ftermfreebsd.cpp - Contains the FreeBSD terminal functions *
|
||||||
|
* *
|
||||||
|
* This file is part of the Final Cut widget toolkit *
|
||||||
|
* *
|
||||||
|
* Copyright 2018 Markus Gans *
|
||||||
|
* *
|
||||||
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 3 of *
|
||||||
|
* the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* The Final Cut is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this program. If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
#include "final/fcharmap.h"
|
||||||
|
#include "final/ftermfreebsd.h"
|
||||||
|
|
||||||
|
// static class attributes
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
uInt FTermFreeBSD::bsd_alt_keymap = 0;
|
||||||
|
FTermFreeBSD::CursorStyle FTermFreeBSD::cursor_style;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// class FTermFreeBSD
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// constructors and destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
FTermFreeBSD::FTermFreeBSD()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
FTermFreeBSD::~FTermFreeBSD() // destructor
|
||||||
|
{ }
|
||||||
|
|
||||||
|
// public methods of FTermFreeBSD
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
FTermFreeBSD::CursorStyle FTermFreeBSD::getCursorStyle()
|
||||||
|
{
|
||||||
|
return cursor_style;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTermFreeBSD::setCursorStyle (CursorStyle style, bool hidden)
|
||||||
|
{
|
||||||
|
// Set cursor style in a BSD console
|
||||||
|
|
||||||
|
if ( ! isFreeBSDConsole() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
cursor_style = style;
|
||||||
|
|
||||||
|
if ( hidden )
|
||||||
|
return;
|
||||||
|
|
||||||
|
ioctl(0, CONS_CURSORTYPE, &style);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermFreeBSD::isFreeBSDConsole()
|
||||||
|
{
|
||||||
|
// Check if it's a FreeBSD console
|
||||||
|
|
||||||
|
keymap_t keymap;
|
||||||
|
|
||||||
|
if ( ioctl(0, GIO_KEYMAP, &keymap) == 0 )
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTermFreeBSD::init()
|
||||||
|
{
|
||||||
|
// initialize BSD console
|
||||||
|
|
||||||
|
if ( ! isFreeBSDConsole() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// save current left alt key mapping
|
||||||
|
saveFreeBSDAltKey();
|
||||||
|
|
||||||
|
// map meta key to left alt key
|
||||||
|
setFreeBSDAlt2Meta();
|
||||||
|
|
||||||
|
// Initialize FreeBSD console cursor
|
||||||
|
setCursorStyle (fc::destructive_cursor, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTermFreeBSD::initCharMap()
|
||||||
|
{
|
||||||
|
// A FreeBSD console can't show ASCII codes from 0x00 to 0x1b
|
||||||
|
|
||||||
|
if ( ! isFreeBSDConsole() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (int i = 0; i <= fc::lastCharItem; i++)
|
||||||
|
if ( fc::character[i][fc::PC] < 0x1c )
|
||||||
|
fc::character[i][fc::PC] = fc::character[i][fc::ASCII];
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTermFreeBSD::finish()
|
||||||
|
{
|
||||||
|
// Resetting the FreeBSD console settings
|
||||||
|
|
||||||
|
if ( ! isFreeBSDConsole() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
resetFreeBSDAlt2Meta();
|
||||||
|
setCursorStyle (fc::normal_cursor, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTermFreeBSD::restoreCursorStyle()
|
||||||
|
{
|
||||||
|
// Reset to the last used FreeBSD console cursor style
|
||||||
|
|
||||||
|
setCursorStyle (getCursorStyle(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// private methods of FTermFreeBSD
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermFreeBSD::saveFreeBSDAltKey()
|
||||||
|
{
|
||||||
|
// Saving the current mapping for the alt key
|
||||||
|
|
||||||
|
static const int left_alt = 0x38;
|
||||||
|
int ret;
|
||||||
|
keymap_t keymap;
|
||||||
|
|
||||||
|
ret = ioctl(0, GIO_KEYMAP, &keymap);
|
||||||
|
|
||||||
|
if ( ret < 0 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// save current mapping
|
||||||
|
bsd_alt_keymap = keymap.key[left_alt].map[0];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermFreeBSD::setFreeBSDAltKey (uInt key)
|
||||||
|
{
|
||||||
|
// Remapping the alt key
|
||||||
|
|
||||||
|
static const int left_alt = 0x38;
|
||||||
|
int ret;
|
||||||
|
keymap_t keymap;
|
||||||
|
|
||||||
|
ret = ioctl(0, GIO_KEYMAP, &keymap);
|
||||||
|
|
||||||
|
if ( ret < 0 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// map to meta key
|
||||||
|
keymap.key[left_alt].map[0] = key;
|
||||||
|
|
||||||
|
if ( (keymap.n_keys > 0) && (ioctl(0, PIO_KEYMAP, &keymap) < 0) )
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermFreeBSD::setFreeBSDAlt2Meta()
|
||||||
|
{
|
||||||
|
// Use the meta key when pressing the Alt key
|
||||||
|
|
||||||
|
return setFreeBSDAltKey (META);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermFreeBSD::resetFreeBSDAlt2Meta()
|
||||||
|
{
|
||||||
|
// Restore the alt key mapping
|
||||||
|
|
||||||
|
return setFreeBSDAltKey (bsd_alt_keymap);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,121 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* ftermopenbsd.cpp - Contains the NetBSD/OpenBSD terminal functions *
|
||||||
|
* *
|
||||||
|
* This file is part of the Final Cut widget toolkit *
|
||||||
|
* *
|
||||||
|
* Copyright 2018 Markus Gans *
|
||||||
|
* *
|
||||||
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 3 of *
|
||||||
|
* the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* The Final Cut is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this program. If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
#include "final/ftermopenbsd.h"
|
||||||
|
|
||||||
|
// static class attributes
|
||||||
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
kbd_t FTermOpenBSD::wscons_keyboard_encoding = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// class FTermOpenBSD
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// constructors and destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
FTermOpenBSD::FTermOpenBSD()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
FTermOpenBSD::~FTermOpenBSD() // destructor
|
||||||
|
{ }
|
||||||
|
|
||||||
|
// public methods of FTermOpenBSD
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
bool FTermOpenBSD::isWSConsConsole()
|
||||||
|
{
|
||||||
|
// Check if it's a NetBSD/OpenBSD console
|
||||||
|
|
||||||
|
static kbd_t kbdencoding;
|
||||||
|
|
||||||
|
if ( ioctl(0, WSKBDIO_GETENCODING, &kbdencoding) == 0 )
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTermOpenBSD::init()
|
||||||
|
{
|
||||||
|
// initialize wscons console
|
||||||
|
|
||||||
|
if ( ! isWSConsConsole() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// save current left alt key mapping
|
||||||
|
saveWSConsEncoding();
|
||||||
|
|
||||||
|
// alt key generate ESC prefix
|
||||||
|
setWSConsMetaEsc();
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTermOpenBSD::finish()
|
||||||
|
{
|
||||||
|
if ( ! isWSConsConsole() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
resetWSConsEncoding();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// private methods of FTermOpenBSD
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermOpenBSD::saveWSConsEncoding()
|
||||||
|
{
|
||||||
|
static kbd_t k_encoding;
|
||||||
|
int ret = ioctl(0, WSKBDIO_GETENCODING, &k_encoding);
|
||||||
|
|
||||||
|
if ( ret < 0 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// save current encoding
|
||||||
|
wscons_keyboard_encoding = k_encoding;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermOpenBSD::setWSConsEncoding (kbd_t k_encoding)
|
||||||
|
{
|
||||||
|
if ( ioctl(0, WSKBDIO_SETENCODING, &k_encoding) < 0 )
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermOpenBSD::setWSConsMetaEsc()
|
||||||
|
{
|
||||||
|
static const kbd_t meta_esc = 0x20; // generate ESC prefix on ALT-key
|
||||||
|
|
||||||
|
return setWSConsEncoding (wscons_keyboard_encoding | meta_esc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTermOpenBSD::resetWSConsEncoding()
|
||||||
|
{
|
||||||
|
return setWSConsEncoding (wscons_keyboard_encoding);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -21,6 +21,7 @@
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
#include "final/fterm.h"
|
#include "final/fterm.h"
|
||||||
|
#include "final/ftermfreebsd.h"
|
||||||
#include "final/ftermxterminal.h"
|
#include "final/ftermxterminal.h"
|
||||||
|
|
||||||
// static class attributes
|
// static class attributes
|
||||||
|
@ -355,7 +356,7 @@ void FTermXTerminal::setXTermCursorStyle()
|
||||||
// Set the xterm cursor style
|
// Set the xterm cursor style
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
if ( FTerm::isFreeBSDConsole() )
|
if ( FTermFreeBSD::isFreeBSDConsole() )
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -780,7 +781,7 @@ const FString* FTermXTerminal::captureXTermFont()
|
||||||
// Read the terminal answer
|
// Read the terminal answer
|
||||||
if ( select(stdin_no + 1, &ifds, 0, 0, &tv) > 0 )
|
if ( select(stdin_no + 1, &ifds, 0, 0, &tv) > 0 )
|
||||||
{
|
{
|
||||||
char temp[150] = {};
|
char temp[150] = { };
|
||||||
|
|
||||||
if ( std::scanf("\033]50;%148[^\n]s", temp) == 1 )
|
if ( std::scanf("\033]50;%148[^\n]s", temp) == 1 )
|
||||||
{
|
{
|
||||||
|
@ -830,7 +831,7 @@ const FString* FTermXTerminal::captureXTermTitle()
|
||||||
// read the terminal answer
|
// read the terminal answer
|
||||||
if ( select (stdin_no + 1, &ifds, 0, 0, &tv) > 0 )
|
if ( select (stdin_no + 1, &ifds, 0, 0, &tv) > 0 )
|
||||||
{
|
{
|
||||||
char temp[512] = {};
|
char temp[512] = { };
|
||||||
|
|
||||||
if ( std::scanf("\033]l%509[^\n]s", temp) == 1 )
|
if ( std::scanf("\033]l%509[^\n]s", temp) == 1 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1755,7 +1755,10 @@ void FVTerm::clearArea (term_area* area, int fillchar)
|
||||||
nc.code = fillchar;
|
nc.code = fillchar;
|
||||||
|
|
||||||
if ( ! (area && area->text) )
|
if ( ! (area && area->text) )
|
||||||
|
{
|
||||||
|
clearTerm (fillchar);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
w = uInt(area->width + area->right_shadow);
|
w = uInt(area->width + area->right_shadow);
|
||||||
|
|
||||||
|
|
|
@ -210,6 +210,18 @@ void FStringTest::noArgumentTest()
|
||||||
|
|
||||||
empty.clear();
|
empty.clear();
|
||||||
CPPUNIT_ASSERT ( empty.isNull() );
|
CPPUNIT_ASSERT ( empty.isNull() );
|
||||||
|
|
||||||
|
const std::string* str1 = 0;
|
||||||
|
FString s1(*str1);
|
||||||
|
CPPUNIT_ASSERT ( s1.isEmpty() );
|
||||||
|
CPPUNIT_ASSERT ( s1.isNull() );
|
||||||
|
CPPUNIT_ASSERT ( ! s1 );
|
||||||
|
|
||||||
|
const FString* str2 = 0;
|
||||||
|
FString s2(*str2);
|
||||||
|
CPPUNIT_ASSERT ( s2.isEmpty() );
|
||||||
|
CPPUNIT_ASSERT ( s2.isNull() );
|
||||||
|
CPPUNIT_ASSERT ( ! s2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue