Outsourcing the initialization data to a separate struct
This commit is contained in:
parent
d1fedfec9f
commit
81e00a22d3
|
@ -1,3 +1,6 @@
|
|||
2019-09-06 Markus Gans <guru.mail@muenster.de>
|
||||
* Outsourcing the initialization data to a separate struct
|
||||
|
||||
2019-09-04 Markus Gans <guru.mail@muenster.de>
|
||||
* The Cygwin and Linux console do not use cp437 character encoding
|
||||
by default anymore
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "final/fmenubar.h"
|
||||
#include "final/fmessagebox.h"
|
||||
#include "final/fmouse.h"
|
||||
#include "final/fstartoptions.h"
|
||||
#include "final/fstatusbar.h"
|
||||
#include "final/ftermios.h"
|
||||
#include "final/fwidgetcolors.h"
|
||||
|
@ -296,7 +297,7 @@ FWidget* FApplication::processParameters (const int& argc, char* argv[])
|
|||
showParameterUsage();
|
||||
}
|
||||
|
||||
getInitValues().setDefault();
|
||||
getStartOptions().setDefault();
|
||||
cmd_options (argc, argv);
|
||||
return 0;
|
||||
}
|
||||
|
@ -442,13 +443,13 @@ void FApplication::cmd_options (const int& argc, char* argv[])
|
|||
encoding = encoding.toLower();
|
||||
|
||||
if ( encoding.includes("utf8") )
|
||||
getInitValues().encoding = fc::UTF8;
|
||||
getStartOptions().encoding = fc::UTF8;
|
||||
else if ( encoding.includes("vt100") )
|
||||
getInitValues().encoding = fc::VT100;
|
||||
getStartOptions().encoding = fc::VT100;
|
||||
else if ( encoding.includes("pc") )
|
||||
getInitValues().encoding = fc::PC;
|
||||
getStartOptions().encoding = fc::PC;
|
||||
else if ( encoding.includes("ascii") )
|
||||
getInitValues().encoding = fc::ASCII;
|
||||
getStartOptions().encoding = fc::ASCII;
|
||||
else if ( encoding.includes("help") )
|
||||
showParameterUsage();
|
||||
else
|
||||
|
@ -457,32 +458,32 @@ void FApplication::cmd_options (const int& argc, char* argv[])
|
|||
}
|
||||
|
||||
if ( std::strcmp(long_options[idx].name, "no-mouse") == 0 )
|
||||
getInitValues().mouse_support = false;
|
||||
getStartOptions().mouse_support = false;
|
||||
|
||||
if ( std::strcmp(long_options[idx].name, "no-optimized-cursor") == 0 )
|
||||
getInitValues().cursor_optimisation = false;
|
||||
getStartOptions().cursor_optimisation = false;
|
||||
|
||||
if ( std::strcmp(long_options[idx].name, "no-terminal-detection") == 0 )
|
||||
getInitValues().terminal_detection = false;
|
||||
getStartOptions().terminal_detection = false;
|
||||
|
||||
if ( std::strcmp(long_options[idx].name, "no-color-change") == 0 )
|
||||
getInitValues().color_change = false;
|
||||
getStartOptions().color_change = false;
|
||||
|
||||
if ( std::strcmp(long_options[idx].name, "vgafont") == 0 )
|
||||
getInitValues().vgafont = true;
|
||||
getStartOptions().vgafont = true;
|
||||
|
||||
if ( std::strcmp(long_options[idx].name, "newfont") == 0 )
|
||||
getInitValues().newfont = true;
|
||||
getStartOptions().newfont = true;
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
if ( std::strcmp(long_options[idx].name, "no-esc-for-alt-meta") == 0 )
|
||||
getInitValues().meta_sends_escape = false;
|
||||
getStartOptions().meta_sends_escape = false;
|
||||
|
||||
if ( std::strcmp(long_options[idx].name, "no-cursorstyle-change") == 0 )
|
||||
getInitValues().change_cursorstyle = false;
|
||||
getStartOptions().change_cursorstyle = false;
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
if ( std::strcmp(long_options[idx].name, "no-esc-for-alt-meta") == 0 )
|
||||
getInitValues().meta_sends_escape = false;
|
||||
getStartOptions().meta_sends_escape = false;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include "final/fmouse.h"
|
||||
#include "final/foptiattr.h"
|
||||
#include "final/foptimove.h"
|
||||
#include "final/fstartoptions.h"
|
||||
#include "final/fstring.h"
|
||||
#include "final/fsystem.h"
|
||||
#include "final/fsystemimpl.h"
|
||||
|
@ -70,7 +71,6 @@ static bool term_initialized{false};
|
|||
int (*FTerm::Fputchar)(int);
|
||||
|
||||
// static class attributes
|
||||
FTerm::initializationValues FTerm::init_values{};
|
||||
FTermData* FTerm::data {nullptr};
|
||||
FSystem* FTerm::fsys {nullptr};
|
||||
FOptiMove* FTerm::opti_move {nullptr};
|
||||
|
@ -1366,7 +1366,7 @@ void FTerm::init_global_values (bool disable_alt_screen)
|
|||
// Initialize xterm object
|
||||
xterm->init();
|
||||
|
||||
if ( ! init_values.terminal_detection )
|
||||
if ( ! getStartOptions().terminal_detection )
|
||||
term_detection->setTerminalDetection (false);
|
||||
|
||||
#if DEBUG
|
||||
|
@ -1695,10 +1695,10 @@ void FTerm::init_optiAttr()
|
|||
//----------------------------------------------------------------------
|
||||
void FTerm::init_font()
|
||||
{
|
||||
if ( init_values.vgafont && ! setVGAFont() )
|
||||
if ( getStartOptions().vgafont && ! setVGAFont() )
|
||||
exitWithMessage ("VGAfont is not supported by this terminal");
|
||||
|
||||
if ( init_values.newfont && ! setNewFont() )
|
||||
if ( getStartOptions().newfont && ! setNewFont() )
|
||||
exitWithMessage ("Newfont is not supported by this terminal");
|
||||
}
|
||||
|
||||
|
@ -1774,9 +1774,9 @@ void FTerm::init_encoding()
|
|||
|
||||
init_tab_quirks();
|
||||
|
||||
if ( init_values.encoding != fc::UNKNOWN )
|
||||
if ( getStartOptions().encoding != fc::UNKNOWN )
|
||||
{
|
||||
setEncoding(init_values.encoding);
|
||||
setEncoding(getStartOptions().encoding);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1835,7 +1835,7 @@ void FTerm::init_individual_term_encoding()
|
|||
data->setTermEncoding (fc::PC);
|
||||
Fputchar = &FTerm::putchar_ASCII; // function pointer
|
||||
|
||||
if ( hasUTF8() && init_values.encoding == fc::UNKNOWN )
|
||||
if ( hasUTF8() && getStartOptions().encoding == fc::UNKNOWN )
|
||||
{
|
||||
if ( isXTerminal() )
|
||||
Fputchar = &FTerm::putchar_UTF8; // function pointer
|
||||
|
@ -2032,7 +2032,7 @@ void FTerm::enableMouse()
|
|||
{
|
||||
// Enable the terminal mouse support
|
||||
|
||||
if ( ! init_values.mouse_support )
|
||||
if ( ! getStartOptions().mouse_support )
|
||||
return;
|
||||
|
||||
bool gpm_mouse{false};
|
||||
|
@ -2324,7 +2324,7 @@ void FTerm::init (bool disable_alt_screen)
|
|||
initTermspecifics();
|
||||
|
||||
// Redefine the color palette
|
||||
if ( init_values.color_change )
|
||||
if ( getStartOptions().color_change )
|
||||
redefineColorPalette();
|
||||
|
||||
// Set 220 Hz beep (100 ms)
|
||||
|
@ -2333,7 +2333,7 @@ void FTerm::init (bool disable_alt_screen)
|
|||
// Set FTerm signal handler
|
||||
setSignalHandler();
|
||||
|
||||
if ( ! init_values.cursor_optimisation )
|
||||
if ( ! getStartOptions().cursor_optimisation )
|
||||
data->supportCursorOptimisation(false);
|
||||
|
||||
// Activate the VGA or the new graphic font
|
||||
|
@ -2363,19 +2363,19 @@ void FTerm::initOSspecifics()
|
|||
#endif // defined(__linux__)
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(UNIT_TEST)
|
||||
if ( init_values.meta_sends_escape )
|
||||
if ( getStartOptions().meta_sends_escape )
|
||||
freebsd->enableMetaSendsEscape();
|
||||
else
|
||||
freebsd->disableMetaSendsEscape();
|
||||
|
||||
if ( init_values.change_cursorstyle )
|
||||
if ( getStartOptions().change_cursorstyle )
|
||||
freebsd->enableChangeCursorStyle();
|
||||
else
|
||||
freebsd->disableChangeCursorStyle();
|
||||
|
||||
freebsd->init(); // Initialize BSD console
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__) || defined(UNIT_TEST)
|
||||
if ( init_values.meta_sends_escape )
|
||||
if ( getStartOptions().meta_sends_escape )
|
||||
openbsd->enableMetaSendsEscape();
|
||||
else
|
||||
openbsd->disableMetaSendsEscape();
|
||||
|
@ -2443,7 +2443,7 @@ void FTerm::finish()
|
|||
xterm->setCursorStyle (fc::steady_block);
|
||||
|
||||
// Restore the color palette
|
||||
if ( init_values.color_change )
|
||||
if ( getStartOptions().color_change )
|
||||
restoreColorPalette();
|
||||
|
||||
// Switch to normal escape key mode
|
||||
|
@ -2457,7 +2457,7 @@ void FTerm::finish()
|
|||
resetBeep();
|
||||
|
||||
// Disable the terminal mouse support
|
||||
if ( init_values.mouse_support )
|
||||
if ( getStartOptions().mouse_support )
|
||||
disableMouse();
|
||||
|
||||
// Deactivate meta key sends escape
|
||||
|
|
|
@ -128,7 +128,7 @@ class FApplication : public FWidget
|
|||
static void sendQueuedEvents ();
|
||||
static bool eventInQueue();
|
||||
static bool removeQueuedEvent (const FObject*);
|
||||
FWidget* processParameters (const int&, char*[]);
|
||||
static FWidget* processParameters (const int&, char*[]);
|
||||
static void showParameterUsage ()
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
__attribute__((noreturn))
|
||||
|
@ -146,7 +146,7 @@ class FApplication : public FWidget
|
|||
|
||||
// Methods
|
||||
void init (uInt64, uInt64);
|
||||
void cmd_options (const int&, char*[]);
|
||||
static void cmd_options (const int&, char*[]);
|
||||
void findKeyboardWidget();
|
||||
bool isKeyPressed();
|
||||
void keyPressed();
|
||||
|
|
|
@ -0,0 +1,98 @@
|
|||
/***********************************************************************
|
||||
* fstartoptions.h - Contains the start options for initialization *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
* Copyright 2019 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
|
||||
* ════════════════
|
||||
*
|
||||
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▏
|
||||
* ▕ FStartOptions ▏
|
||||
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▏
|
||||
*/
|
||||
|
||||
#ifndef FSTARTOPTIONS_H
|
||||
#define FSTARTOPTIONS_H
|
||||
|
||||
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
||||
#error "Only <final/final.h> can be included directly."
|
||||
#endif
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FStartOptions
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
|
||||
struct FStartOptions
|
||||
{
|
||||
public:
|
||||
// Mutator
|
||||
void setDefault()
|
||||
{
|
||||
cursor_optimisation = true;
|
||||
mouse_support = true;
|
||||
terminal_detection = true;
|
||||
color_change = true;
|
||||
vgafont = false;
|
||||
newfont = false;
|
||||
encoding = fc::UNKNOWN;
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(UNIT_TEST)
|
||||
meta_sends_escape = true;
|
||||
change_cursorstyle = true;
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
meta_sends_escape = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
// Data members
|
||||
uInt8 cursor_optimisation : 1;
|
||||
uInt8 mouse_support : 1;
|
||||
uInt8 terminal_detection : 1;
|
||||
uInt8 color_change : 1;
|
||||
uInt8 vgafont : 1;
|
||||
uInt8 newfont : 1;
|
||||
uInt8 : 2; // padding bits
|
||||
fc::encoding encoding;
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(UNIT_TEST)
|
||||
uInt8 meta_sends_escape : 1;
|
||||
uInt8 change_cursorstyle : 1;
|
||||
uInt8 : 6; // padding bits
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
uInt8 meta_sends_escape : 1;
|
||||
uInt8 : 7; // padding bits
|
||||
#endif
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
static struct FStartOptions start_options{};
|
||||
|
||||
inline FStartOptions& getStartOptions()
|
||||
{ return start_options; }
|
||||
|
||||
} // namespace finalcut
|
||||
|
||||
#endif // FSTARTOPTIONS_H
|
|
@ -179,7 +179,6 @@ class FTerm final
|
|||
static char* getTermFileName();
|
||||
static int getTabstop();
|
||||
static int getMaxColor();
|
||||
initializationValues& getInitValues();
|
||||
charSubstitution& getCharSubstitutionMap();
|
||||
|
||||
static FTermData* getFTermData();
|
||||
|
@ -305,47 +304,6 @@ class FTerm final
|
|||
__attribute__((noreturn))
|
||||
#endif
|
||||
;
|
||||
// Data members
|
||||
static struct initializationValues
|
||||
{
|
||||
public:
|
||||
void setDefault()
|
||||
{
|
||||
cursor_optimisation = true;
|
||||
mouse_support = true;
|
||||
terminal_detection = true;
|
||||
color_change = true;
|
||||
vgafont = false;
|
||||
newfont = false;
|
||||
encoding = fc::UNKNOWN;
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(UNIT_TEST)
|
||||
meta_sends_escape = true;
|
||||
change_cursorstyle = true;
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
meta_sends_escape = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
uInt8 cursor_optimisation : 1;
|
||||
uInt8 mouse_support : 1;
|
||||
uInt8 terminal_detection : 1;
|
||||
uInt8 color_change : 1;
|
||||
uInt8 vgafont : 1;
|
||||
uInt8 newfont : 1;
|
||||
uInt8 : 2; // padding bits
|
||||
fc::encoding encoding;
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(UNIT_TEST)
|
||||
uInt8 meta_sends_escape : 1;
|
||||
uInt8 change_cursorstyle : 1;
|
||||
uInt8 : 6; // padding bits
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
uInt8 meta_sends_escape : 1;
|
||||
uInt8 : 7; // padding bits
|
||||
#endif
|
||||
} init_values;
|
||||
|
||||
private:
|
||||
// Methods
|
||||
static void init_global_values (bool);
|
||||
|
@ -437,10 +395,6 @@ class FTerm final
|
|||
inline const char* FTerm::getClassName() const
|
||||
{ return "FTerm"; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FTerm::initializationValues& FTerm::getInitValues()
|
||||
{ return init_values; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTerm::setFSystem (FSystem* fsystem)
|
||||
{ fsys = fsystem; }
|
||||
|
|
|
@ -329,7 +329,6 @@ class FVTerm
|
|||
static bool charEncodable (wchar_t);
|
||||
static FKeyboard* getFKeyboard();
|
||||
static FMouseControl* getFMouseControl();
|
||||
FTerm::initializationValues& getInitValues();
|
||||
|
||||
// Mutators
|
||||
void setPrintArea (term_area*);
|
||||
|
@ -1086,10 +1085,6 @@ inline FKeyboard* FVTerm::getFKeyboard()
|
|||
inline FMouseControl* FVTerm::getFMouseControl()
|
||||
{ return FTerm::getFMouseControl(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FTerm::initializationValues& FVTerm::getInitValues()
|
||||
{ return FTerm::init_values; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FVTerm::setPrintArea (term_area* area)
|
||||
{ print_area = area; }
|
||||
|
|
Loading…
Reference in New Issue