From 81e00a22d3764065b011bbb5714f6b716ce4e091 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Fri, 6 Sep 2019 08:21:10 +0200 Subject: [PATCH] Outsourcing the initialization data to a separate struct --- ChangeLog | 3 + src/fapplication.cpp | 29 ++++----- src/fterm.cpp | 30 +++++----- src/include/final/fapplication.h | 4 +- src/include/final/fstartoptions.h | 98 +++++++++++++++++++++++++++++++ src/include/final/fterm.h | 46 --------------- src/include/final/fvterm.h | 5 -- 7 files changed, 133 insertions(+), 82 deletions(-) create mode 100644 src/include/final/fstartoptions.h diff --git a/ChangeLog b/ChangeLog index d9a778db..ff462328 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2019-09-06 Markus Gans + * Outsourcing the initialization data to a separate struct + 2019-09-04 Markus Gans * The Cygwin and Linux console do not use cp437 character encoding by default anymore diff --git a/src/fapplication.cpp b/src/fapplication.cpp index 19e50da5..fbd8bc1d 100644 --- a/src/fapplication.cpp +++ b/src/fapplication.cpp @@ -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 } } diff --git a/src/fterm.cpp b/src/fterm.cpp index ce415d6c..342b2d24 100644 --- a/src/fterm.cpp +++ b/src/fterm.cpp @@ -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 diff --git a/src/include/final/fapplication.h b/src/include/final/fapplication.h index 6e083f98..a0580022 100644 --- a/src/include/final/fapplication.h +++ b/src/include/final/fapplication.h @@ -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(); diff --git a/src/include/final/fstartoptions.h b/src/include/final/fstartoptions.h new file mode 100644 index 00000000..fd600079 --- /dev/null +++ b/src/include/final/fstartoptions.h @@ -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 * +* . * +***********************************************************************/ + +/* Standalone class + * ════════════════ + * + * ▕▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▏ + * ▕ FStartOptions ▏ + * ▕▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▏ + */ + +#ifndef FSTARTOPTIONS_H +#define FSTARTOPTIONS_H + +#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT) + #error "Only 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 diff --git a/src/include/final/fterm.h b/src/include/final/fterm.h index 69224034..d7e9f3a6 100644 --- a/src/include/final/fterm.h +++ b/src/include/final/fterm.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; } diff --git a/src/include/final/fvterm.h b/src/include/final/fvterm.h index 534e6bc2..4ada6717 100644 --- a/src/include/final/fvterm.h +++ b/src/include/final/fvterm.h @@ -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; }