Move FreeBSD, NetBSD and OpenBSD functions to separate classes

This commit is contained in:
Markus Gans 2018-05-27 19:43:18 +02:00
parent b05873babb
commit 0927e4e1fb
25 changed files with 685 additions and 317 deletions

View File

@ -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

View File

@ -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┌────────────────┐ │ ┌─────────────┐

View File

@ -2,13 +2,13 @@
Class digramm Class digramm
══════════════════════════════════════════════════════════════════════════════ ══════════════════════════════════════════════════════════════════════════════
┌───────────┐ 1┌──────────────┐ ┌───────────┐
┌────┤ FKeyEvent │ ┌-----------┤ FTermFreeBSD │ ┌────┤ FKeyEvent │
│ └───────────┘ : └──────────────┘ │ └───────────┘
│ ┌─────────────┐ : 1┌──────────────┐ │ ┌─────────────┐
├────┤ FMouseEvent │ ┌-----------┤ FTermOpenBSD │ ├────┤ FMouseEvent │
│ └─────────────┘ : └──────────────┘ │ └─────────────┘
1┌────────────────┐ │ ┌─────────────┐ : 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermDetection │ ├────┤ FWheelEvent │ ┌-----------┤ FTermDetection │ ├────┤ FWheelEvent │
: └────────────────┘ │ └─────────────┘ : └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐ : 1┌────────────────┐ │ ┌─────────────┐

View File

@ -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
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View File

@ -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
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View File

@ -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
{ {

View File

@ -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)

View File

@ -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; }

View File

@ -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

View File

@ -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

View File

@ -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 \

View File

@ -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 \

View File

@ -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 \

View File

@ -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@

View File

@ -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);

View File

@ -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';

View File

@ -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"");

View File

@ -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;

View File

@ -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;

View File

@ -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 )

193
src/ftermfreebsd.cpp Normal file
View File

@ -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

121
src/ftermopenbsd.cpp Normal file
View File

@ -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

View File

@ -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 )
{ {

View File

@ -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);

View File

@ -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 );
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------