Move system calls to the new class FSystem
This commit is contained in:
parent
5bd8590dee
commit
fa66a7091e
|
@ -1,5 +1,9 @@
|
|||
2019-05-17 Markus Gans <guru.mail@muenster.de>
|
||||
* Move system calls to the new class FSystem
|
||||
|
||||
2019-04-27 Markus Gans <guru.mail@muenster.de>
|
||||
* Add the reserve() method to FListBox to increase the capacity of the list
|
||||
* Add the reserve() method to FListBox to increase the capacity
|
||||
of the list
|
||||
* Use shrink_to_fit() to save memory space
|
||||
|
||||
2019-03-24 Markus Gans <guru.mail@muenster.de>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
*Travis CI:*<br />
|
||||
     [![Build Status](https://travis-ci.org/gansm/finalcut.svg?branch=master)](https://travis-ci.org/gansm/finalcut) <br />
|
||||
*Coverity Scan:*<br />
|
||||
     [![Coverity Scan Status](https://scan.coverity.com/projects/6508/badge.svg)](https://scan.coverity.com/projects/6508) <br />
|
||||
     [![Coverity Scan Status](https://img.shields.io/coverity/scan/6508.svg)](https://scan.coverity.com/projects/6508) <br />
|
||||
*LGTM:*<br />
|
||||
     [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/gansm/finalcut.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/gansm/finalcut/context:cpp) <br />
|
||||
*Class Reference:*<br />
|
||||
|
|
16
build.sh
16
build.sh
|
@ -35,7 +35,7 @@ then
|
|||
autoreconf --install --force
|
||||
else
|
||||
echo "Build failed, please install autoconf first"
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
@ -46,7 +46,7 @@ case "$1" in
|
|||
if ! ./configure --prefix="$PREFIX" CXXFLAGS="-O2" # "-O3 -fno-rtti"
|
||||
then
|
||||
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
;;
|
||||
|
||||
|
@ -54,7 +54,7 @@ case "$1" in
|
|||
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -pedantic"
|
||||
then
|
||||
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
;;
|
||||
|
||||
|
@ -62,7 +62,7 @@ case "$1" in
|
|||
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -Weffc++ -pedantic -pedantic-errors -Wextra -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -fstack-protector -Wstrict-aliasing -Wstrict-aliasing=3 -Wswitch -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wsign-promo -Woverloaded-virtual -Wstrict-null-sentinel -fext-numeric-literals -Wreorder -Wnoexcept -Wnarrowing -Wliteral-suffix -Wctor-dtor-privacy -ftree-loop-distribute-patterns -Wmemset-transposed-args"
|
||||
then
|
||||
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
;;
|
||||
|
||||
|
@ -70,7 +70,7 @@ case "$1" in
|
|||
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -pg -O0 -DDEBUG -W -Wall -pedantic"
|
||||
then
|
||||
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
;;
|
||||
|
||||
|
@ -78,7 +78,7 @@ case "$1" in
|
|||
if ! ./configure --prefix="$PREFIX" --with-profiler
|
||||
then
|
||||
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
;;
|
||||
|
||||
|
@ -86,7 +86,7 @@ case "$1" in
|
|||
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG" --with-unit-test
|
||||
then
|
||||
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
;;
|
||||
|
||||
|
@ -94,7 +94,7 @@ case "$1" in
|
|||
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG" --with-unit-test --with-gcov
|
||||
then
|
||||
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
;;
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ class SegmentView : public finalcut::FDialog
|
|||
virtual void draw() override;
|
||||
|
||||
// Data Members
|
||||
std::map<wchar_t, sevenSegment> code;
|
||||
std::map<wchar_t, sevenSegment> code{};
|
||||
finalcut::FString line[3];
|
||||
finalcut::FLineEdit Input{"0123", this};
|
||||
finalcut::FButton Exit{"E&xit", this};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
test -f 8x16graph.pcf.gz && rm 8x16graph.pcf.gz
|
||||
bdftopcf -o 8x16graph.pcf 8x16graph.bdf
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
if [ $# -gt 0 ]
|
||||
then
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
LD_LIBRARY_PATH=../src/.libs/ LD_PRELOAD="/usr/lib64/libprofiler.so.0" CPUPROFILE=../examples/.libs/ui.prof ../examples/.libs/ui
|
||||
pprof --gv ../examples/.libs/ui ../examples/.libs/ui.prof
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
# Protokoliert Funktionsaufrufe in dynamisch hinzugelinkten Bibliotheken
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
DIR="$PWD"
|
||||
cd ../examples/.libs/ || exit
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
find ../src/ \
|
||||
../src/include/final/ \
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
xfd -center -columns 16 -fn -misc-8x16graph-medium-r-normal--17-160-75-75-*-80-iso8859-1
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ libfinal_la_SOURCES = \
|
|||
flistview.cpp \
|
||||
fmenu.cpp \
|
||||
fmouse.cpp \
|
||||
fsystem.cpp \
|
||||
fsystemimpl.cpp \
|
||||
fkeyboard.cpp \
|
||||
fdialoglistmenu.cpp \
|
||||
fmenubar.cpp \
|
||||
|
@ -112,6 +114,8 @@ finalcutinclude_HEADERS = \
|
|||
include/final/fscrollview.h \
|
||||
include/final/fstatusbar.h \
|
||||
include/final/fstring.h \
|
||||
include/final/fsystem.h \
|
||||
include/final/fsystemimpl.h \
|
||||
include/final/ftermcap.h \
|
||||
include/final/ftermcapquirks.h \
|
||||
include/final/ftermxterminal.h \
|
||||
|
|
|
@ -39,6 +39,8 @@ INCLUDE_HEADERS = \
|
|||
fprogressbar.h \
|
||||
fradiobutton.h \
|
||||
frect.h \
|
||||
fsystem.h \
|
||||
fsystemimpl.h \
|
||||
fscrollbar.h \
|
||||
fscrollview.h \
|
||||
fstatusbar.h \
|
||||
|
@ -107,6 +109,8 @@ OBJS = \
|
|||
ftextview.o \
|
||||
fstatusbar.o \
|
||||
fmouse.o \
|
||||
fsystem.o \
|
||||
fsystemimpl.o \
|
||||
fkeyboard.o \
|
||||
ftermcap.o \
|
||||
fterm.o \
|
||||
|
|
|
@ -43,6 +43,8 @@ INCLUDE_HEADERS = \
|
|||
fscrollview.h \
|
||||
fstatusbar.h \
|
||||
fstring.h \
|
||||
fsystem.h \
|
||||
fsystemimpl.h \
|
||||
fmouse.h \
|
||||
fkeyboard.h \
|
||||
ftermcap.h \
|
||||
|
@ -107,6 +109,8 @@ OBJS = \
|
|||
ftextview.o \
|
||||
fstatusbar.o \
|
||||
fmouse.o \
|
||||
fsystem.o \
|
||||
fsystemimpl.o \
|
||||
fkeyboard.o \
|
||||
ftermcap.o \
|
||||
fterm.o \
|
||||
|
|
|
@ -306,9 +306,9 @@ void FFileDialog::adjustSize()
|
|||
Y = 1 + int((max_height - getHeight()) / 3);
|
||||
setPos(FPoint(X, Y), false);
|
||||
filebrowser.setHeight (h - 8, false);
|
||||
hidden.setY (int(h) - 4, false);
|
||||
cancel.setY (int(h) - 4, false);
|
||||
open.setY (int(h) - 4, false);
|
||||
hidden_check.setY (int(h) - 4, false);
|
||||
cancel_btn.setY (int(h) - 4, false);
|
||||
open_btn.setY (int(h) - 4, false);
|
||||
FDialog::adjustSize();
|
||||
printPath(directory);
|
||||
}
|
||||
|
@ -355,18 +355,18 @@ inline void FFileDialog::widgetSettings (const FPoint& pos)
|
|||
filebrowser.setGeometry (FPoint(2, 3), FSize(38, 6));
|
||||
printPath (directory);
|
||||
|
||||
hidden.setText ("&hidden files");
|
||||
hidden.setGeometry (FPoint(2, 10), FSize(16, 1));
|
||||
hidden_check.setText ("&hidden files");
|
||||
hidden_check.setGeometry (FPoint(2, 10), FSize(16, 1));
|
||||
|
||||
cancel.setText ("&Cancel");
|
||||
cancel.setGeometry(FPoint(19, 10), FSize(9, 1));
|
||||
cancel_btn.setText ("&Cancel");
|
||||
cancel_btn.setGeometry(FPoint(19, 10), FSize(9, 1));
|
||||
|
||||
if ( dlg_type == FFileDialog::Save )
|
||||
open.setText ("&Save");
|
||||
open_btn.setText ("&Save");
|
||||
else
|
||||
open.setText ("&Open");
|
||||
open_btn.setText ("&Open");
|
||||
|
||||
open.setGeometry(FPoint(30, 10), FSize(9, 1));
|
||||
open_btn.setGeometry(FPoint(30, 10), FSize(9, 1));
|
||||
setGeometry (pos, getSize());
|
||||
}
|
||||
|
||||
|
@ -391,19 +391,19 @@ void FFileDialog::initCallbacks()
|
|||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processClicked)
|
||||
);
|
||||
|
||||
hidden.addCallback
|
||||
hidden_check.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processShowHidden)
|
||||
);
|
||||
|
||||
cancel.addCallback
|
||||
cancel_btn.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processCancel)
|
||||
);
|
||||
|
||||
open.addCallback
|
||||
open_btn.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processOpen)
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
/***********************************************************************
|
||||
* fsystem.cpp - Abstract class for system calls *
|
||||
* *
|
||||
* 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/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include "final/fsystem.h"
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FSystem
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// constructors and destructor
|
||||
//----------------------------------------------------------------------
|
||||
FSystem::FSystem()
|
||||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FSystem::~FSystem() // destructor
|
||||
{ }
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
/***********************************************************************
|
||||
* fsystemimpl.cpp - FSystem implementation *
|
||||
* *
|
||||
* 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/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include "final/fsystemimpl.h"
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FSystemImpl
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// constructors and destructor
|
||||
//----------------------------------------------------------------------
|
||||
FSystemImpl::FSystemImpl()
|
||||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FSystemImpl::~FSystemImpl() // destructor
|
||||
{ }
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/***********************************************************************
|
||||
* fterm.cpp - Base class for terminal detection and control *
|
||||
* fterm.cpp - Base class for terminal control *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
|
@ -43,6 +43,7 @@ int (*FTerm::Fputchar)(int);
|
|||
// static class attributes
|
||||
FTerm::initializationValues FTerm::init_values;
|
||||
FTermData* FTerm::data = nullptr;
|
||||
FSystem* FTerm::fsys = nullptr;
|
||||
FTermcap::tcap_map* FTerm::tcap = nullptr;
|
||||
FOptiMove* FTerm::opti_move = nullptr;
|
||||
FOptiAttr* FTerm::opti_attr = nullptr;
|
||||
|
@ -354,12 +355,12 @@ int FTerm::openConsole()
|
|||
if ( fd >= 0 ) // console is already opened
|
||||
return 0;
|
||||
|
||||
if ( ! *termfilename )
|
||||
if ( ! *termfilename || ! fsys )
|
||||
return 0;
|
||||
|
||||
for (std::size_t i = 0; terminal_devices[i] != 0; i++)
|
||||
{
|
||||
fd = open(terminal_devices[i], O_RDWR, 0);
|
||||
fd = fsys->open(terminal_devices[i], O_RDWR, 0);
|
||||
data->setTTYFileDescriptor(fd);
|
||||
|
||||
if ( fd >= 0 )
|
||||
|
@ -373,12 +374,14 @@ int FTerm::openConsole()
|
|||
int FTerm::closeConsole()
|
||||
{
|
||||
int fd = data->getTTYFileDescriptor();
|
||||
int ret = -1;
|
||||
|
||||
if ( fd < 0 ) // console is already closed
|
||||
return 0;
|
||||
|
||||
// use 'close' from the global namespace
|
||||
int ret = ::close (fd);
|
||||
if ( fsys )
|
||||
ret = fsys->close(fd); // close console
|
||||
|
||||
data->setTTYFileDescriptor(-1);
|
||||
|
||||
if ( ret == 0 )
|
||||
|
@ -502,7 +505,11 @@ void FTerm::detectTermSize()
|
|||
}
|
||||
|
||||
auto& term_geometry = data->getTermGeometry();
|
||||
ret = ioctl (fd, TIOCGWINSZ, &win_size);
|
||||
|
||||
if ( fsys )
|
||||
ret = fsys->ioControl (fd, TIOCGWINSZ, &win_size);
|
||||
else
|
||||
ret = -1;
|
||||
|
||||
if ( ret != 0 || win_size.ws_col == 0 || win_size.ws_row == 0 )
|
||||
{
|
||||
|
@ -519,6 +526,7 @@ void FTerm::detectTermSize()
|
|||
term_geometry.setRect(1, 1, win_size.ws_col, win_size.ws_row);
|
||||
}
|
||||
|
||||
if ( opti_move )
|
||||
opti_move->setTermSize ( term_geometry.getWidth()
|
||||
, term_geometry.getHeight() );
|
||||
|
||||
|
@ -1398,7 +1406,7 @@ void FTerm::init_term_encoding()
|
|||
int stdout_no = FTermios::getStdOut();
|
||||
const char* termtype = data->getTermType();
|
||||
|
||||
if ( isatty(stdout_no)
|
||||
if ( fsys->isTTY(stdout_no)
|
||||
&& ! std::strcmp(nl_langinfo(CODESET), "UTF-8") )
|
||||
{
|
||||
data->setUTF8Console(true);
|
||||
|
@ -1408,7 +1416,7 @@ void FTerm::init_term_encoding()
|
|||
setUTF8(true);
|
||||
keyboard->enableUTF8();
|
||||
}
|
||||
else if ( isatty(stdout_no)
|
||||
else if ( fsys->isTTY(stdout_no)
|
||||
&& (std::strlen(termtype) > 0)
|
||||
&& (TCAP(fc::t_exit_alt_charset_mode) != 0) )
|
||||
{
|
||||
|
@ -1733,6 +1741,7 @@ inline void FTerm::allocationValues()
|
|||
try
|
||||
{
|
||||
data = new FTermData();
|
||||
fsys = new FSystemImpl;
|
||||
opti_move = new FOptiMove();
|
||||
opti_attr = new FOptiAttr();
|
||||
term_detection = new FTermDetection();
|
||||
|
@ -1796,6 +1805,9 @@ inline void FTerm::deallocationValues()
|
|||
if ( opti_move )
|
||||
delete opti_move;
|
||||
|
||||
if ( fsys )
|
||||
delete fsys;
|
||||
|
||||
if ( data )
|
||||
delete data;
|
||||
}
|
||||
|
@ -1826,6 +1838,7 @@ void FTerm::init (bool disable_alt_screen)
|
|||
|
||||
// Terminal detection
|
||||
term_detection->setFTermData(data);
|
||||
term_detection->setFSystem(fsys);
|
||||
term_detection->detect();
|
||||
setTermType (term_detection->getTermType());
|
||||
|
||||
|
@ -1915,6 +1928,7 @@ void FTerm::initOSspecifics()
|
|||
{
|
||||
#if defined(__linux__)
|
||||
linux->setFTermData(data);
|
||||
linux->setFSystem(fsys);
|
||||
linux->setFTermDetection(term_detection);
|
||||
linux->init(); // Initialize Linux console
|
||||
|
||||
|
@ -1925,6 +1939,8 @@ void FTerm::initOSspecifics()
|
|||
#endif // defined(__linux__)
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
freebsd->setFSystem(fsys);
|
||||
|
||||
if ( init_values.meta_sends_escape )
|
||||
freebsd->enableMetaSendsEscape();
|
||||
else
|
||||
|
@ -1937,6 +1953,8 @@ void FTerm::initOSspecifics()
|
|||
|
||||
freebsd->init(); // Initialize BSD console
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
openbsd->setFSystem(fsys);
|
||||
|
||||
if ( init_values.meta_sends_escape )
|
||||
openbsd->enableMetaSendsEscape();
|
||||
else
|
||||
|
@ -1966,7 +1984,7 @@ void FTerm::initBaudRate()
|
|||
uInt baud = FTermios::getBaudRate();
|
||||
data->setBaudrate(baud);
|
||||
|
||||
if ( isatty(stdout_no) )
|
||||
if ( fsys->isTTY(stdout_no) )
|
||||
opti_move->setBaudRate(int(baud));
|
||||
}
|
||||
|
||||
|
@ -2120,7 +2138,7 @@ void FTerm::signal_handler (int signum)
|
|||
//----------------------------------------------------------------------
|
||||
uInt env2uint (const char* env)
|
||||
{
|
||||
FString str(env);
|
||||
FString str(getenv(env));
|
||||
|
||||
if ( str.isEmpty() )
|
||||
return 0;
|
||||
|
|
|
@ -32,6 +32,7 @@ FTermDetection::terminalType FTermDetection::terminal_type = \
|
|||
FTermDetection::colorEnv FTermDetection::color_env;
|
||||
FTermDetection::secondaryDA FTermDetection::secondary_da;
|
||||
FTermData* FTermDetection::fterm_data = nullptr;
|
||||
FSystem* FTermDetection::fsystem = nullptr;
|
||||
char FTermDetection::termtype[256] = { };
|
||||
char FTermDetection::ttytypename[256] = { };
|
||||
bool FTermDetection::decscusr_support;
|
||||
|
@ -90,6 +91,12 @@ void FTermDetection::setFTermData (FTermData* data)
|
|||
fterm_data = data;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FTermDetection::setFSystem (FSystem* fsys)
|
||||
{
|
||||
fsystem = fsys;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FTermDetection::setTtyTypeFileName (char ttytype_filename[])
|
||||
{
|
||||
|
@ -180,7 +187,7 @@ bool FTermDetection::getTTYtype()
|
|||
|
||||
std::FILE *fp;
|
||||
|
||||
if ( (fp = std::fopen(ttytypename, "r")) != 0 )
|
||||
if ( fsystem && (fp = fsystem->fopen(ttytypename, "r")) != 0 )
|
||||
{
|
||||
char* p;
|
||||
char str[BUFSIZ];
|
||||
|
@ -210,12 +217,12 @@ bool FTermDetection::getTTYtype()
|
|||
// Save name in termtype
|
||||
std::strncpy (termtype, type, sizeof(termtype));
|
||||
termtype[sizeof(termtype) - 1] = '\0';
|
||||
std::fclose(fp);
|
||||
fsystem->fclose(fp);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
std::fclose(fp);
|
||||
fsystem->fclose(fp);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
* Copyright 2018 Markus Gans *
|
||||
* Copyright 2018-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 *
|
||||
|
@ -32,6 +32,7 @@ namespace finalcut
|
|||
FTermFreeBSD::CursorStyle FTermFreeBSD::cursor_style = fc::normal_cursor;
|
||||
bool FTermFreeBSD::change_cursorstyle = true;
|
||||
bool FTermFreeBSD::meta_sends_escape = true;
|
||||
FSystem* FTermFreeBSD::fsystem = nullptr;
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -52,10 +53,7 @@ void FTermFreeBSD::setCursorStyle (CursorStyle style, bool hidden)
|
|||
{
|
||||
// Set cursor style in a BSD console
|
||||
|
||||
if ( ! isFreeBSDConsole() )
|
||||
return;
|
||||
|
||||
if ( ! change_cursorstyle )
|
||||
if ( ! fsysten || ! isFreeBSDConsole() || ! change_cursorstyle )
|
||||
return;
|
||||
|
||||
cursor_style = style;
|
||||
|
@ -63,7 +61,7 @@ void FTermFreeBSD::setCursorStyle (CursorStyle style, bool hidden)
|
|||
if ( hidden )
|
||||
return;
|
||||
|
||||
ioctl(0, CONS_CURSORTYPE, &style);
|
||||
fsysten->ioControl (0, CONS_CURSORTYPE, &style);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -73,7 +71,7 @@ bool FTermFreeBSD::isFreeBSDConsole()
|
|||
|
||||
keymap_t keymap;
|
||||
|
||||
if ( ioctl(0, GIO_KEYMAP, &keymap) == 0 )
|
||||
if ( fsysten && fsysten->ioControl(0, GIO_KEYMAP, &keymap) == 0 )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
@ -145,10 +143,11 @@ bool FTermFreeBSD::saveFreeBSDAltKey()
|
|||
// Saving the current mapping for the alt key
|
||||
|
||||
static constexpr int left_alt = 0x38;
|
||||
int ret;
|
||||
int ret = -1;
|
||||
keymap_t keymap;
|
||||
|
||||
ret = ioctl(0, GIO_KEYMAP, &keymap);
|
||||
if ( fsystem )
|
||||
ret = fsysten->ioControl (0, GIO_KEYMAP, &keymap);
|
||||
|
||||
if ( ret < 0 )
|
||||
return false;
|
||||
|
@ -164,10 +163,11 @@ bool FTermFreeBSD::setFreeBSDAltKey (uInt key)
|
|||
// Remapping the alt key
|
||||
|
||||
static constexpr int left_alt = 0x38;
|
||||
int ret;
|
||||
int ret = -1;
|
||||
keymap_t keymap;
|
||||
|
||||
ret = ioctl(0, GIO_KEYMAP, &keymap);
|
||||
if ( fsystem )
|
||||
ret = fsysten->ioControl (0, GIO_KEYMAP, &keymap);
|
||||
|
||||
if ( ret < 0 )
|
||||
return false;
|
||||
|
@ -175,7 +175,8 @@ bool FTermFreeBSD::setFreeBSDAltKey (uInt key)
|
|||
// map to meta key
|
||||
keymap.key[left_alt].map[0] = key;
|
||||
|
||||
if ( (keymap.n_keys > 0) && (ioctl(0, PIO_KEYMAP, &keymap) < 0) )
|
||||
if ( (keymap.n_keys > 0)
|
||||
&& fsystem && (fsysten->ioControl(0, PIO_KEYMAP, &keymap) < 0) )
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
|
|
|
@ -45,6 +45,7 @@ namespace finalcut
|
|||
bool FTermLinux::has_saved_palette = false;
|
||||
|
||||
FTermData* FTermLinux::fterm_data = nullptr;
|
||||
FSystem* FTermLinux::fsystem = nullptr;
|
||||
FTermDetection* FTermLinux::term_detection = nullptr;
|
||||
fc::linuxConsoleCursorStyle FTermLinux::linux_console_cursor_style;
|
||||
FTermLinux::ColorMap FTermLinux::saved_color_map;
|
||||
|
@ -135,12 +136,15 @@ bool FTermLinux::isLinuxConsole()
|
|||
{
|
||||
// Check if it's a Linux console
|
||||
|
||||
if ( ! fsystem )
|
||||
return false;
|
||||
|
||||
char arg = 0;
|
||||
int fd_tty = FTerm::getTTYFileDescriptor();
|
||||
|
||||
// get keyboard type an compare
|
||||
return ( isatty (fd_tty)
|
||||
&& ioctl(fd_tty, KDGKBTYPE, &arg) == 0
|
||||
return ( fsystem->isTTY(fd_tty)
|
||||
&& fsystem->ioControl(fd_tty, KDGKBTYPE, &arg) == 0
|
||||
&& ((arg == KB_101) || (arg == KB_84)) );
|
||||
}
|
||||
|
||||
|
@ -471,31 +475,33 @@ FKey FTermLinux::modifierKeyCorrection (const FKey& key_id)
|
|||
int FTermLinux::getFramebuffer_bpp()
|
||||
{
|
||||
int fd = -1;
|
||||
const char* fb = C_STR("/dev/fb/0");
|
||||
struct fb_var_screeninfo fb_var;
|
||||
struct fb_fix_screeninfo fb_fix;
|
||||
|
||||
const char* fb = C_STR("/dev/fb/0");
|
||||
if ( ! fsystem )
|
||||
return -1;
|
||||
|
||||
if ( (fd = open(fb, O_RDWR)) < 0 )
|
||||
if ( (fd = fsystem->open(fb, O_RDWR)) < 0 )
|
||||
{
|
||||
if ( errno != ENOENT && errno != ENOTDIR )
|
||||
return -1;
|
||||
|
||||
fb = C_STR("/dev/fb0");
|
||||
|
||||
if ( (fd = open(fb, O_RDWR)) < 0 )
|
||||
if ( (fd = fsystem->open(fb, O_RDWR)) < 0 )
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( ! ioctl(fd, FBIOGET_VSCREENINFO, &fb_var)
|
||||
&& ! ioctl(fd, FBIOGET_FSCREENINFO, &fb_fix) )
|
||||
if ( ! fsystem->ioControl(fd, FBIOGET_VSCREENINFO, &fb_var)
|
||||
&& ! fsystem->ioControl(fd, FBIOGET_FSCREENINFO, &fb_fix) )
|
||||
{
|
||||
::close(fd);
|
||||
fsystem->close(fd);
|
||||
return int(fb_var.bits_per_pixel);
|
||||
}
|
||||
else
|
||||
{
|
||||
::close(fd);
|
||||
fsystem->close(fd);
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
@ -506,8 +512,7 @@ bool FTermLinux::getScreenFont()
|
|||
{
|
||||
struct console_font_op font;
|
||||
int fd_tty = FTerm::getTTYFileDescriptor();
|
||||
|
||||
int ret;
|
||||
int ret = -1;
|
||||
|
||||
if ( fd_tty < 0 )
|
||||
return false;
|
||||
|
@ -534,7 +539,8 @@ bool FTermLinux::getScreenFont()
|
|||
}
|
||||
|
||||
// font operation
|
||||
ret = ioctl (fd_tty, KDFONTOP, &font);
|
||||
if ( fsystem )
|
||||
ret = fsystem->ioControl (fd_tty, KDFONTOP, &font);
|
||||
|
||||
if ( ret == 0 )
|
||||
{
|
||||
|
@ -551,7 +557,7 @@ bool FTermLinux::getScreenFont()
|
|||
//----------------------------------------------------------------------
|
||||
bool FTermLinux::getUnicodeMap()
|
||||
{
|
||||
int ret;
|
||||
int ret = -1;
|
||||
int fd_tty = FTerm::getTTYFileDescriptor();
|
||||
|
||||
if ( fd_tty < 0 )
|
||||
|
@ -561,7 +567,8 @@ bool FTermLinux::getUnicodeMap()
|
|||
screen_unicode_map.entries = nullptr;
|
||||
|
||||
// get count
|
||||
ret = ioctl (fd_tty, GIO_UNIMAP, &screen_unicode_map);
|
||||
if ( fsystem )
|
||||
ret = fsystem->ioControl (fd_tty, GIO_UNIMAP, &screen_unicode_map);
|
||||
|
||||
if ( ret != 0 )
|
||||
{
|
||||
|
@ -581,7 +588,8 @@ bool FTermLinux::getUnicodeMap()
|
|||
}
|
||||
|
||||
// get unicode-to-font mapping from kernel
|
||||
ret = ioctl(fd_tty, GIO_UNIMAP, &screen_unicode_map);
|
||||
if ( fsystem )
|
||||
ret = fsystem->ioControl (fd_tty, GIO_UNIMAP, &screen_unicode_map);
|
||||
|
||||
if ( ret != 0 )
|
||||
return false;
|
||||
|
@ -601,7 +609,7 @@ FTermLinux::modifier_key& FTermLinux::getModifierKey()
|
|||
std::memset (&mod_key, 0x00, sizeof(mod_key));
|
||||
|
||||
// TIOCLINUX, subcode = 6 (TIOCL_GETSHIFTSTATE)
|
||||
if ( ioctl(0, TIOCLINUX, &subcode) >= 0 )
|
||||
if ( fsystem && fsystem->ioControl(0, TIOCLINUX, &subcode) >= 0 )
|
||||
{
|
||||
if ( subcode & (1 << KG_SHIFT) )
|
||||
mod_key.shift = true;
|
||||
|
@ -625,8 +633,8 @@ int FTermLinux::setScreenFont ( uChar fontdata[], uInt count
|
|||
, bool direct)
|
||||
{
|
||||
struct console_font_op font;
|
||||
int ret;
|
||||
int fd_tty = FTerm::getTTYFileDescriptor();
|
||||
int ret = -1;
|
||||
|
||||
if ( fd_tty < 0 )
|
||||
return -1;
|
||||
|
@ -664,7 +672,8 @@ int FTermLinux::setScreenFont ( uChar fontdata[], uInt count
|
|||
}
|
||||
|
||||
// font operation
|
||||
ret = ioctl (fd_tty, KDFONTOP, &font);
|
||||
if ( fsystem )
|
||||
ret = fsystem->ioControl (fd_tty, KDFONTOP, &font);
|
||||
|
||||
if ( ret != 0 && errno != ENOSYS && errno != EINVAL )
|
||||
{
|
||||
|
@ -687,8 +696,8 @@ int FTermLinux::setScreenFont ( uChar fontdata[], uInt count
|
|||
int FTermLinux::setUnicodeMap (struct unimapdesc* unimap)
|
||||
{
|
||||
struct unimapinit advice;
|
||||
int ret;
|
||||
int fd_tty = FTerm::getTTYFileDescriptor();
|
||||
int ret = -1;
|
||||
|
||||
if ( fd_tty < 0 )
|
||||
return -1;
|
||||
|
@ -700,13 +709,15 @@ int FTermLinux::setUnicodeMap (struct unimapdesc* unimap)
|
|||
do
|
||||
{
|
||||
// clear the unicode-to-font table
|
||||
ret = ioctl(fd_tty, PIO_UNIMAPCLR, &advice);
|
||||
if ( fsystem )
|
||||
ret = fsystem->ioControl (fd_tty, PIO_UNIMAPCLR, &advice);
|
||||
|
||||
if ( ret != 0 )
|
||||
return -1;
|
||||
|
||||
// put the new unicode-to-font mapping in kernel
|
||||
ret = ioctl(fd_tty, PIO_UNIMAP, unimap);
|
||||
if ( fsystem )
|
||||
ret = fsystem->ioControl (fd_tty, PIO_UNIMAP, unimap);
|
||||
|
||||
if ( ret != 0 )
|
||||
advice.advised_hashlevel++;
|
||||
|
@ -725,9 +736,13 @@ inline uInt16 FTermLinux::getInputStatusRegisterOne()
|
|||
{
|
||||
// Gets the VGA input-status-register-1
|
||||
|
||||
if ( ! fsystem )
|
||||
return 0x3da;
|
||||
|
||||
// Miscellaneous output (read port)
|
||||
static constexpr uInt16 misc_read = 0x3cc;
|
||||
const uInt16 io_base = ( inb(misc_read) & 0x01 ) ? 0x3d0 : 0x3b0;
|
||||
uChar misc_value = fsystem->inPortByte(misc_read);
|
||||
const uInt16 io_base = ( misc_value & 0x01 ) ? 0x3d0 : 0x3b0;
|
||||
// 0x3ba : Input status 1 mono/MDA (read port)
|
||||
// 0x3da : Input status 1 color/CGA (read port)
|
||||
return io_base + 0x0a;
|
||||
|
@ -738,6 +753,9 @@ uChar FTermLinux::readAttributeController (uChar index)
|
|||
{
|
||||
// Reads a byte from the attribute controller from a given index
|
||||
|
||||
if ( ! fsystem )
|
||||
return 0;
|
||||
|
||||
uChar res;
|
||||
// Attribute controller (write port)
|
||||
static constexpr uInt16 attrib_cntlr_write = 0x3c0;
|
||||
|
@ -745,15 +763,15 @@ uChar FTermLinux::readAttributeController (uChar index)
|
|||
static constexpr uInt16 attrib_cntlr_read = 0x3c1;
|
||||
const uInt16 input_status_1 = getInputStatusRegisterOne();
|
||||
|
||||
inb (input_status_1); // switch to index mode
|
||||
outb (index & 0x1f, attrib_cntlr_write); // selects address register
|
||||
res = inb (attrib_cntlr_read); // read from data register
|
||||
fsystem->inPortByte (input_status_1); // switch to index mode
|
||||
fsystem->outPortByte (index & 0x1f, attrib_cntlr_write); // selects address register
|
||||
res = fsystem->inPortByte (attrib_cntlr_read); // read from data register
|
||||
|
||||
// Disable access to the palette and unblank the display
|
||||
inb (input_status_1); // switch to index mode
|
||||
fsystem->inPortByte (input_status_1); // switch to index mode
|
||||
index = (index & 0x1f) | 0x20; // set bit 5 (enable display)
|
||||
outb (index, attrib_cntlr_write);
|
||||
inb (attrib_cntlr_read);
|
||||
fsystem->outPortByte (index, attrib_cntlr_write);
|
||||
fsystem->inPortByte (attrib_cntlr_read);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -763,19 +781,22 @@ void FTermLinux::writeAttributeController (uChar index, uChar data)
|
|||
{
|
||||
// Writes a byte from the attribute controller from a given index
|
||||
|
||||
if ( ! fsystem )
|
||||
return;
|
||||
|
||||
// Attribute controller (write port)
|
||||
static constexpr uInt16 attrib_cntlr_write = 0x3c0;
|
||||
const uInt16 input_status_1 = getInputStatusRegisterOne();
|
||||
|
||||
inb (input_status_1); // switch to index mode
|
||||
outb (index & 0x1f, attrib_cntlr_write); // selects address register
|
||||
outb (data, attrib_cntlr_write); // write to data register
|
||||
fsystem->inPortByte (input_status_1); // switch to index mode
|
||||
fsystem->outPortByte (index & 0x1f, attrib_cntlr_write); // selects address register
|
||||
fsystem->outPortByte (data, attrib_cntlr_write); // write to data register
|
||||
|
||||
// Disable access to the palette and unblank the display
|
||||
inb (input_status_1); // switch to index mode
|
||||
fsystem->inPortByte (input_status_1); // switch to index mode
|
||||
index = (index & 0x1f) | 0x20; // set bit 5 (enable display)
|
||||
outb (index, attrib_cntlr_write);
|
||||
outb (data, attrib_cntlr_write);
|
||||
fsystem->outPortByte (index, attrib_cntlr_write);
|
||||
fsystem->outPortByte (data, attrib_cntlr_write);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -800,6 +821,9 @@ int FTermLinux::setBlinkAsIntensity (bool enable)
|
|||
// Uses blink-bit as background intensity.
|
||||
// That permits 16 colors for background
|
||||
|
||||
if ( ! fsystem )
|
||||
return -1;
|
||||
|
||||
int fd_tty = FTerm::getTTYFileDescriptor();
|
||||
|
||||
// Test if the blink-bit is used by the screen font (512 characters)
|
||||
|
@ -813,7 +837,7 @@ int FTermLinux::setBlinkAsIntensity (bool enable)
|
|||
return -1;
|
||||
|
||||
// Enable access to VGA I/O ports (from 0x3B4 with num = 0x2C)
|
||||
if ( ioctl(fd_tty, KDENABIO, 0) < 0 )
|
||||
if ( fsystem->ioControl(fd_tty, KDENABIO, 0) < 0 )
|
||||
return -1; // error on KDENABIO
|
||||
|
||||
if ( enable )
|
||||
|
@ -822,7 +846,7 @@ int FTermLinux::setBlinkAsIntensity (bool enable)
|
|||
setAttributeMode (getAttributeMode() | 0x08); // set bit 3
|
||||
|
||||
// Disable access to VGA I/O ports
|
||||
if ( ioctl(fd_tty, KDDISABIO, 0) < 0 )
|
||||
if ( fsystem->ioControl(fd_tty, KDDISABIO, 0) < 0 )
|
||||
return -1; // error on KDDISABIO
|
||||
|
||||
return 0;
|
||||
|
@ -842,7 +866,7 @@ bool FTermLinux::setVGAPalette (FColor index, int r, int g, int b)
|
|||
cmap.color[index].blue = uChar(b);
|
||||
}
|
||||
|
||||
if ( ioctl (0, PIO_CMAP, &cmap) )
|
||||
if ( fsystem && fsystem->ioControl (0, PIO_CMAP, &cmap) )
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
|
@ -853,7 +877,7 @@ bool FTermLinux::saveVGAPalette()
|
|||
{
|
||||
// Save the current vga color map
|
||||
|
||||
if ( ioctl (0, GIO_CMAP, &saved_color_map) )
|
||||
if ( fsystem && fsystem->ioControl (0, GIO_CMAP, &saved_color_map) )
|
||||
has_saved_palette = false;
|
||||
else
|
||||
has_saved_palette = true;
|
||||
|
@ -866,14 +890,17 @@ bool FTermLinux::resetVGAPalette()
|
|||
{
|
||||
// Reset the vga color map
|
||||
|
||||
if ( ! fsystem )
|
||||
return false;
|
||||
|
||||
if ( has_saved_palette )
|
||||
{
|
||||
if ( ioctl (0, PIO_CMAP, &saved_color_map) )
|
||||
if ( fsystem->ioControl (0, PIO_CMAP, &saved_color_map) )
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
rgb defaultColor[16] =
|
||||
constexpr rgb defaultColor[16] =
|
||||
{
|
||||
{0x00, 0x00, 0x00}, {0xaa, 0x00, 0x00},
|
||||
{0x00, 0xaa, 0x00}, {0xaa, 0x55, 0x00},
|
||||
|
@ -892,7 +919,7 @@ bool FTermLinux::resetVGAPalette()
|
|||
cmap.color[index].blue = defaultColor[index].blue;
|
||||
}
|
||||
|
||||
if ( ioctl (0, PIO_CMAP, &cmap) )
|
||||
if ( fsystem->ioControl (0, PIO_CMAP, &cmap) )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
* Copyright 2018 Markus Gans *
|
||||
* Copyright 2018-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 *
|
||||
|
@ -29,6 +29,7 @@ namespace finalcut
|
|||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
kbd_t FTermOpenBSD::bsd_keyboard_encoding = 0;
|
||||
bool FTermOpenBSD::meta_sends_escape = true;
|
||||
FSystem* FTermOpenBSD::fsystem = nullptr;
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -45,7 +46,8 @@ bool FTermOpenBSD::isBSDConsole()
|
|||
|
||||
static kbd_t kbdencoding;
|
||||
|
||||
if ( ioctl(0, WSKBDIO_GETENCODING, &kbdencoding) == 0 )
|
||||
if ( fsystem
|
||||
&& fsysten->ioControl(0, WSKBDIO_GETENCODING, &kbdencoding) == 0 )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
@ -85,7 +87,10 @@ void FTermOpenBSD::finish()
|
|||
bool FTermOpenBSD::saveBSDConsoleEncoding()
|
||||
{
|
||||
static kbd_t k_encoding;
|
||||
int ret = ioctl(0, WSKBDIO_GETENCODING, &k_encoding);
|
||||
int ret = -1;
|
||||
|
||||
if ( fsystem )
|
||||
ret = fsysten->ioControl (0, WSKBDIO_GETENCODING, &k_encoding);
|
||||
|
||||
if ( ret < 0 )
|
||||
return false;
|
||||
|
@ -98,7 +103,8 @@ bool FTermOpenBSD::saveBSDConsoleEncoding()
|
|||
//----------------------------------------------------------------------
|
||||
bool FTermOpenBSD::setBSDConsoleEncoding (kbd_t k_encoding)
|
||||
{
|
||||
if ( ioctl(0, WSKBDIO_SETENCODING, &k_encoding) < 0 )
|
||||
if ( fsysten
|
||||
&& fsysten->ioControl(0, WSKBDIO_SETENCODING, &k_encoding) < 0 )
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
|
|
|
@ -50,9 +50,7 @@
|
|||
#endif
|
||||
|
||||
/* Define to 1 if GPM mouse is enabled */
|
||||
#ifndef F_HAVE_LIBGPM
|
||||
#define F_HAVE_LIBGPM 1
|
||||
#endif
|
||||
/* #undef HAVE_LIBGPM */
|
||||
|
||||
/* Define to 1 if you have the <linux/fb.h> header file. */
|
||||
#ifndef F_HAVE_LINUX_FB_H
|
||||
|
|
|
@ -199,9 +199,9 @@ class FFileDialog : public FDialog
|
|||
FString filter_pattern{};
|
||||
FLineEdit filename{this};
|
||||
FListBox filebrowser{this};
|
||||
FCheckBox hidden{this};
|
||||
FButton cancel{this};
|
||||
FButton open{this};
|
||||
FCheckBox hidden_check{this};
|
||||
FButton cancel_btn{this};
|
||||
FButton open_btn{this};
|
||||
DialogType dlg_type{FFileDialog::Open};
|
||||
bool show_hidden{false};
|
||||
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
/***********************************************************************
|
||||
* fsystem.h - Abstract class for system calls *
|
||||
* *
|
||||
* 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
|
||||
* ════════════════
|
||||
*
|
||||
* ▕▔▔▔▔▔▔▔▔▔▏
|
||||
* ▕ FSystem ▏
|
||||
* ▕▁▁▁▁▁▁▁▁▁▏
|
||||
*/
|
||||
|
||||
#ifndef FSYSTEM_H
|
||||
#define FSYSTEM_H
|
||||
|
||||
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
||||
#error "Only <final/final.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include "final/ftypes.h"
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FSystem
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
|
||||
class FSystem
|
||||
{
|
||||
public:
|
||||
// Constructor
|
||||
FSystem();
|
||||
|
||||
// Destructor
|
||||
virtual ~FSystem();
|
||||
|
||||
// Methods
|
||||
virtual uChar inPortByte (uShort) = 0;
|
||||
virtual void outPortByte (uChar, uShort) = 0;
|
||||
virtual int isTTY (int) = 0;
|
||||
virtual int ioControl (int, uLong, ...) = 0;
|
||||
virtual int open (const char*, int, ...) = 0;
|
||||
virtual int close (int) = 0;
|
||||
virtual FILE* fopen (const char*, const char*) = 0;
|
||||
virtual int fclose (FILE*) = 0;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
} // namespace finalcut
|
||||
|
||||
#endif // FSYSTEM_H
|
||||
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
/***********************************************************************
|
||||
* fsystemimpl.h - FSystem implementation *
|
||||
* *
|
||||
* 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
|
||||
* ════════════════
|
||||
*
|
||||
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▔▏
|
||||
* ▕ FSystemImpl ▏
|
||||
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▁▏
|
||||
*/
|
||||
|
||||
#ifndef FSYSTEMIMPL_H
|
||||
#define FSYSTEMIMPL_H
|
||||
|
||||
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
||||
#error "Only <final/final.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/io.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "final/fc.h"
|
||||
#include "final/fsystem.h"
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FSystemImpl
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
|
||||
class FSystemImpl : public FSystem
|
||||
{
|
||||
public:
|
||||
// Constructor
|
||||
FSystemImpl();
|
||||
|
||||
// Destructor
|
||||
virtual ~FSystemImpl();
|
||||
|
||||
// Methods
|
||||
virtual uChar inPortByte (uShort port)
|
||||
{
|
||||
return ::inb (port);
|
||||
}
|
||||
|
||||
virtual void outPortByte (uChar value, uShort port)
|
||||
{
|
||||
::outb (value, port);
|
||||
}
|
||||
|
||||
virtual int isTTY (int fd)
|
||||
{
|
||||
return ::isatty(fd);
|
||||
}
|
||||
|
||||
virtual int ioControl (int fd, uLong request, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, request);
|
||||
void* argp = va_arg (args, void*);
|
||||
int ret = ::ioctl (fd, request, argp);
|
||||
va_end (args);
|
||||
return ret;
|
||||
}
|
||||
|
||||
virtual int open (const char* pathname, int flags, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, flags);
|
||||
mode_t mode = va_arg (args, mode_t);
|
||||
int ret = ::open (pathname, flags, mode);
|
||||
va_end (args);
|
||||
return ret;
|
||||
}
|
||||
|
||||
virtual int close (int fildes)
|
||||
{
|
||||
return ::close(fildes);
|
||||
}
|
||||
|
||||
virtual FILE* fopen (const char* path, const char* mode)
|
||||
{
|
||||
return std::fopen (path, mode);
|
||||
}
|
||||
|
||||
virtual int fclose (FILE* fp)
|
||||
{
|
||||
return std::fclose (fp);
|
||||
}
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
} // namespace finalcut
|
||||
|
||||
#endif // FSYSTEMIMPL_H
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/***********************************************************************
|
||||
* fterm.h - Base class for terminal detection and control *
|
||||
* fterm.h - Base class for terminal control *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
|
@ -124,6 +124,8 @@
|
|||
#include "final/fpoint.h"
|
||||
#include "final/frect.h"
|
||||
#include "final/fstring.h"
|
||||
#include "final/fsystem.h"
|
||||
#include "final/fsystemimpl.h"
|
||||
#include "final/ftermcap.h"
|
||||
#include "final/ftermcapquirks.h"
|
||||
#include "final/ftermdata.h"
|
||||
|
@ -189,6 +191,8 @@ class FTerm final
|
|||
characterSub& getCharSubstitutionMap();
|
||||
|
||||
#if DEBUG
|
||||
static FTermData* getFTermData();
|
||||
static FTermDetection* getFTermDetection();
|
||||
FTermDebugData& getFTermDebugData();
|
||||
#endif
|
||||
|
||||
|
@ -393,6 +397,7 @@ class FTerm final
|
|||
|
||||
// Data Members
|
||||
static FTermData* data;
|
||||
static FSystem* fsys;
|
||||
static FTermcap::tcap_map* tcap;
|
||||
static FOptiMove* opti_move;
|
||||
static FOptiAttr* opti_attr;
|
||||
|
@ -459,6 +464,14 @@ inline FTerm::characterSub& FTerm::getCharSubstitutionMap()
|
|||
{ return data->getCharSubstitutionMap(); }
|
||||
|
||||
#if DEBUG
|
||||
//----------------------------------------------------------------------
|
||||
inline FTermData* FTerm::getFTermData()
|
||||
{ return data; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FTermDetection* FTerm::getFTermDetection()
|
||||
{ return term_detection; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FTermDebugData& FTerm::getFTermDebugData()
|
||||
{ return *debug_data; }
|
||||
|
|
|
@ -61,13 +61,13 @@ class FTermData final
|
|||
typedef std::unordered_map<wchar_t, wchar_t> characterSub;
|
||||
|
||||
// Constructors
|
||||
FTermData() = default;
|
||||
FTermData() {}
|
||||
|
||||
// Disable copy constructor
|
||||
FTermData (const FTermData&) = delete;
|
||||
|
||||
// Destructor
|
||||
~FTermData() = default;
|
||||
~FTermData() {}
|
||||
|
||||
// Disable assignment operator (=)
|
||||
FTermData& operator = (const FTermData&) = delete;
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
|
||||
#include "final/fc.h"
|
||||
#include "final/fconfig.h"
|
||||
#include "final/fsystem.h"
|
||||
#include "final/ftermdata.h"
|
||||
#include "final/ftermios.h"
|
||||
#include "final/ftypes.h"
|
||||
|
@ -154,6 +155,7 @@ class FTermDetection final
|
|||
static void setTmuxTerm (bool);
|
||||
static void setTerminalDetection (bool);
|
||||
static void setFTermData (FTermData*);
|
||||
static void setFSystem (FSystem*);
|
||||
static void setTtyTypeFileName (char[]);
|
||||
|
||||
// Methods
|
||||
|
@ -210,6 +212,7 @@ class FTermDetection final
|
|||
static const FString* answer_back;
|
||||
static const FString* sec_da;
|
||||
static FTermData* fterm_data;
|
||||
static FSystem* fsystem;
|
||||
static terminalType terminal_type;
|
||||
|
||||
static struct colorEnv
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#endif
|
||||
|
||||
#include "final/fc.h"
|
||||
#include "final/fsystem.h"
|
||||
#include "final/ftypes.h"
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
|
@ -82,6 +83,7 @@ class FTermFreeBSD final
|
|||
static bool isFreeBSDConsole();
|
||||
|
||||
// Mutators
|
||||
static void setFSystem (FSystem*);
|
||||
static void setCursorStyle (CursorStyle, bool);
|
||||
static void enableChangeCursorStyle();
|
||||
static void disableChangeCursorStyle();
|
||||
|
@ -106,6 +108,7 @@ class FTermFreeBSD final
|
|||
static CursorStyle cursor_style;
|
||||
static bool change_cursorstyle;
|
||||
static bool meta_sends_escape;
|
||||
static FSystem* fsystem;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -116,6 +119,10 @@ inline const char* FTermFreeBSD::getClassName() const
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
inline void FTermFreeBSD::setFSystem (FSystem* fsys)
|
||||
{ fsystem = fsys; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermFreeBSD::enableChangeCursorStyle()
|
||||
{ change_cursorstyle = true; }
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
|
||||
#include "final/fc.h"
|
||||
#include "final/fcharmap.h"
|
||||
#include "final/fsystem.h"
|
||||
#include "final/ftermdetection.h"
|
||||
#include "final/ftypes.h"
|
||||
|
||||
|
@ -88,6 +89,7 @@ class FTermLinux final
|
|||
|
||||
// Mutators
|
||||
static void setFTermData (FTermData*);
|
||||
static void setFSystem (FSystem*);
|
||||
static void setFTermDetection (FTermDetection*);
|
||||
static char* setCursorStyle (fc::linuxConsoleCursorStyle, bool);
|
||||
static bool setPalette (FColor, int, int, int);
|
||||
|
@ -181,6 +183,7 @@ class FTermLinux final
|
|||
static bool half_block_character;
|
||||
static bool has_saved_palette;
|
||||
static FTermData* fterm_data;
|
||||
static FSystem* fsystem;
|
||||
static FTermDetection* term_detection;
|
||||
static fc::linuxConsoleCursorStyle
|
||||
linux_console_cursor_style;
|
||||
|
@ -207,6 +210,10 @@ inline int FTermLinux::getFramebufferBpp()
|
|||
inline void FTermLinux::setFTermData (FTermData* data)
|
||||
{ fterm_data = data; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermLinux::setFSystem (FSystem* fsys)
|
||||
{ fsystem = fsys; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermLinux::setFTermDetection (FTermDetection* td)
|
||||
{ term_detection = td; }
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#endif
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include "final/fsystem.h"
|
||||
|
||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
#include <sys/time.h>
|
||||
|
@ -74,6 +75,7 @@ class FTermOpenBSD final
|
|||
static bool isBSDConsole();
|
||||
|
||||
// Mutators
|
||||
static void setFSystem (FSystem*);
|
||||
static void disableMetaSendsEscape();
|
||||
static void enableMetaSendsEscape();
|
||||
|
||||
|
@ -92,6 +94,7 @@ class FTermOpenBSD final
|
|||
// Data Members
|
||||
static kbd_t bsd_keyboard_encoding;
|
||||
static bool meta_sends_escape;
|
||||
static FSystem* fsystem;
|
||||
#endif // defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
@ -103,6 +106,10 @@ inline const char* FTermOpenBSD::getClassName() const
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
inline void FTermOpenBSD::setFSystem (FSystem* fsys)
|
||||
{ fsystem = fsys; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermOpenBSD::enableMetaSendsEscape()
|
||||
{ meta_sends_escape = true; }
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2018 Markus Gans *
|
||||
* Copyright 2017-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 *
|
||||
|
@ -40,6 +40,7 @@ namespace
|
|||
{
|
||||
|
||||
typedef unsigned char uChar;
|
||||
typedef unsigned short uShort;
|
||||
typedef unsigned int uInt;
|
||||
typedef unsigned long uLong;
|
||||
typedef uint8_t uInt8;
|
||||
|
|
Loading…
Reference in New Issue