commit
11871cba89
13
ChangeLog
13
ChangeLog
|
@ -1,10 +1,21 @@
|
||||||
|
2018-11-25 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Version 0.5.0
|
||||||
|
* Namespace fix in FTermFreeBSD and FTermOpenBSD
|
||||||
|
* Fix compiler warning on non-x86 architectures
|
||||||
|
|
||||||
|
2018-11-24 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Improved Sun Microsystems workstation console quirks
|
||||||
|
* Handling environment variables with numbers in FTerm
|
||||||
|
* Memory management fix in example program transparent
|
||||||
|
|
||||||
2018-11-21 Markus Gans <guru.mail@muenster.de>
|
2018-11-21 Markus Gans <guru.mail@muenster.de>
|
||||||
* New type FKey for key inputs
|
* New type FKey for key inputs
|
||||||
* The integer type of FPoint and FRect changed from short to int
|
* The integer type of FPoint and FRect changed from short to int
|
||||||
|
|
||||||
2018-11-18 Markus Gans <guru.mail@muenster.de>
|
2018-11-18 Markus Gans <guru.mail@muenster.de>
|
||||||
* The FListViewItem class now provides checkable list view items
|
* The FListViewItem class now provides checkable list view items
|
||||||
* Adding the checklist example to demonstrate the checkable FListViewItems
|
* Adding the checklist example to demonstrate the checkable
|
||||||
|
FListViewItems
|
||||||
* A checkable FListViewItem now shows the input cursor
|
* A checkable FListViewItem now shows the input cursor
|
||||||
|
|
||||||
2018-11-12 Markus Gans <guru.mail@muenster.de>
|
2018-11-12 Markus Gans <guru.mail@muenster.de>
|
||||||
|
|
|
@ -6,9 +6,9 @@ AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
EXTRA_DIST=finalcut.pc
|
EXTRA_DIST = finalcut.pc
|
||||||
|
|
||||||
pkgconfigdir = $(datadir)/pkgconfig
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
pkgconfig_DATA = finalcut.pc
|
pkgconfig_DATA = finalcut.pc
|
||||||
|
|
||||||
CLEANFILES = finalcut.pc
|
CLEANFILES = finalcut.pc
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
============================================
|
============================================
|
||||||
|
|
||||||
### Building and code analysis
|
### Building and code analysis
|
||||||
|
*Latest release:*<br />
|
||||||
|
     [![Latest Release](https://img.shields.io/github/release/gansm/finalcut.svg)](https://github.com/gansm/finalcut/releases) <br />
|
||||||
*Travis CI:*<br />
|
*Travis CI:*<br />
|
||||||
     [![Build Status](https://travis-ci.org/gansm/finalcut.svg?branch=master)](https://travis-ci.org/gansm/finalcut) <br />
|
     [![Build Status](https://travis-ci.org/gansm/finalcut.svg?branch=master)](https://travis-ci.org/gansm/finalcut) <br />
|
||||||
*Coverity Scan:*<br />
|
*Coverity Scan:*<br />
|
||||||
|
@ -11,6 +13,7 @@
|
||||||
*Class Reference:*<br />
|
*Class Reference:*<br />
|
||||||
     [![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html)
|
     [![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html)
|
||||||
|
|
||||||
|
### Description
|
||||||
The FINAL CUT is a C++ class library and widget toolkit with full mouse support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple text windows on the screen.
|
The FINAL CUT is a C++ class library and widget toolkit with full mouse support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple text windows on the screen.
|
||||||
|
|
||||||
The structure of the Qt framework was originally the inspiration for the C++ class design of FINAL CUT. It provides common controls like dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on.
|
The structure of the Qt framework was originally the inspiration for the C++ class design of FINAL CUT. It provides common controls like dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on.
|
||||||
|
|
2
build.sh
2
build.sh
|
@ -43,7 +43,7 @@ fi
|
||||||
# Build commands
|
# Build commands
|
||||||
case "$1" in
|
case "$1" in
|
||||||
"--release"|"release")
|
"--release"|"release")
|
||||||
if ! ./configure --prefix="$PREFIX" CXXFLAGS="-O3 -fno-rtti"
|
if ! ./configure --prefix="$PREFIX" CXXFLAGS="-O2" # "-O3 -fno-rtti"
|
||||||
then
|
then
|
||||||
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
echo "${RED}Configure failed!${NORMAL}" 1>&2
|
||||||
exit -1
|
exit -1
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_INIT([finalcut], [0.4.0])
|
AC_INIT([finalcut], [0.5.0])
|
||||||
AC_CONFIG_HEADER([config.h])
|
AC_CONFIG_HEADER([config.h])
|
||||||
AX_PREFIX_CONFIG_H([src/include/final/fconfig.h], [F])
|
AX_PREFIX_CONFIG_H([src/include/final/fconfig.h], [F])
|
||||||
AC_CONFIG_SRCDIR([src/fobject.cpp])
|
AC_CONFIG_SRCDIR([src/fobject.cpp])
|
||||||
|
@ -60,7 +60,7 @@ LT_OUTPUT
|
||||||
### This defines the version number of the installed .so files
|
### This defines the version number of the installed .so files
|
||||||
### Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B)
|
### Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B)
|
||||||
### using libtool's versioning system.
|
### using libtool's versioning system.
|
||||||
AC_SUBST(SO_VERSION, ["4:0:4"])
|
AC_SUBST(SO_VERSION, ["5:0:5"])
|
||||||
|
|
||||||
AC_SUBST([LIBTOOL_DEPS])
|
AC_SUBST([LIBTOOL_DEPS])
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
finalcut (0.5.0) unstable; urgency=low
|
||||||
|
|
||||||
|
* Release (version 0.5.0)
|
||||||
|
|
||||||
|
-- Markus Gans <guru.mail@muenster.de> Sun, 25 Nov 2018 01:03:36 +0100
|
||||||
|
|
||||||
finalcut (0.4.0) unstable; urgency=low
|
finalcut (0.4.0) unstable; urgency=low
|
||||||
|
|
||||||
* Release (version 0.4.0)
|
* Release (version 0.4.0)
|
||||||
|
@ -8,7 +14,7 @@ finalcut (0.3.0) unstable; urgency=low
|
||||||
|
|
||||||
* Release (version 0.3.0)
|
* Release (version 0.3.0)
|
||||||
|
|
||||||
-- Markus Gans <guru.mail@muenster.de> Sat, 27 Nov 2016 15:00:41 +0100
|
-- Markus Gans <guru.mail@muenster.de> Sun, 27 Nov 2016 15:00:41 +0100
|
||||||
|
|
||||||
finalcut (0.2.0) unstable; urgency=low
|
finalcut (0.2.0) unstable; urgency=low
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
usr/include/final/*.h
|
usr/include/final/*.h
|
||||||
usr/lib/*/lib*.la
|
usr/lib/*/lib*.la
|
||||||
usr/lib/*/lib*.a
|
usr/lib/*/lib*.a
|
||||||
usr/lib/*/pkgconfig
|
usr/lib/*/pkgconfig/*.pc
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
libfinal 0 libfinal0 (>= 0.4.0)
|
libfinal 0 libfinal0 (>= 0.5.0)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -269,7 +269,10 @@ void AttribDemo::printAltCharset()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( parent->bgcolor == 0 || parent->bgcolor == 16 )
|
if ( (parent->bgcolor <= 8)
|
||||||
|
|| (parent->bgcolor >= 16 && parent->bgcolor <= 231
|
||||||
|
&& (parent->bgcolor - 16) % 36 <= 17)
|
||||||
|
|| (parent->bgcolor >= 232 && parent->bgcolor <= 243) )
|
||||||
setColor (finalcut::fc::White, parent->bgcolor);
|
setColor (finalcut::fc::White, parent->bgcolor);
|
||||||
else
|
else
|
||||||
setColor (finalcut::fc::Black, parent->bgcolor);
|
setColor (finalcut::fc::Black, parent->bgcolor);
|
||||||
|
|
|
@ -184,9 +184,9 @@ class MainWindow : public finalcut::FDialog
|
||||||
// Data Members
|
// Data Members
|
||||||
finalcut::FString line1;
|
finalcut::FString line1;
|
||||||
finalcut::FString line2;
|
finalcut::FString line2;
|
||||||
Transparent transpwin;
|
Transparent* transpwin;
|
||||||
Transparent shadowwin;
|
Transparent* shadowwin;
|
||||||
Transparent ibg;
|
Transparent* ibg;
|
||||||
finalcut::FStatusBar status_bar;
|
finalcut::FStatusBar status_bar;
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
@ -196,25 +196,32 @@ MainWindow::MainWindow (finalcut::FWidget* parent)
|
||||||
: FDialog(parent)
|
: FDialog(parent)
|
||||||
, line1()
|
, line1()
|
||||||
, line2()
|
, line2()
|
||||||
, transpwin(this)
|
, transpwin(0)
|
||||||
, shadowwin(this, Transparent::shadow)
|
, shadowwin(0)
|
||||||
, ibg(this, Transparent::inherit_background)
|
, ibg(0)
|
||||||
, status_bar(this)
|
, status_bar(this)
|
||||||
{
|
{
|
||||||
line1 = " .-. .-. .-.";
|
line1 = " .-. .-. .-.";
|
||||||
line2 = "`._.' `._.' `._.' ";
|
line2 = "`._.' `._.' `._.' ";
|
||||||
|
|
||||||
transpwin.setText("transparent");
|
// The memory allocation for the following three sub windows occurs
|
||||||
transpwin.setGeometry (6, 3, 29, 12);
|
// with the operator new. The lifetime of the generated widget
|
||||||
transpwin.unsetTransparentShadow();
|
// is managed by the parent object (this). The operator delete
|
||||||
|
// is not required in this scope and would result in a double free.
|
||||||
|
transpwin = new Transparent(this);
|
||||||
|
transpwin->setText("transparent");
|
||||||
|
transpwin->setGeometry (6, 3, 29, 12);
|
||||||
|
transpwin->unsetTransparentShadow();
|
||||||
|
|
||||||
shadowwin.setText("shadow");
|
shadowwin = new Transparent(this, Transparent::shadow);
|
||||||
shadowwin.setGeometry (46, 11, 29, 12);
|
shadowwin->setText("shadow");
|
||||||
shadowwin.unsetTransparentShadow();
|
shadowwin->setGeometry (46, 11, 29, 12);
|
||||||
|
shadowwin->unsetTransparentShadow();
|
||||||
|
|
||||||
ibg.setText("inherit background");
|
ibg = new Transparent(this, Transparent::inherit_background);
|
||||||
ibg.setGeometry (42, 3, 29, 7);
|
ibg->setText("inherit background");
|
||||||
ibg.unsetTransparentShadow();
|
ibg->setGeometry (42, 3, 29, 7);
|
||||||
|
ibg->unsetTransparentShadow();
|
||||||
|
|
||||||
// Statusbar at the bottom
|
// Statusbar at the bottom
|
||||||
status_bar.setMessage("Press Q to quit");
|
status_bar.setMessage("Press Q to quit");
|
||||||
|
|
|
@ -111,7 +111,12 @@ make %{?_smp_mflags} V=1
|
||||||
make install libdir=${RPM_BUILD_ROOT}%{_libdir}/ \
|
make install libdir=${RPM_BUILD_ROOT}%{_libdir}/ \
|
||||||
includedir=${RPM_BUILD_ROOT}%{_includedir} \
|
includedir=${RPM_BUILD_ROOT}%{_includedir} \
|
||||||
bindir=${RPM_BUILD_ROOT}%{_bindir} \
|
bindir=${RPM_BUILD_ROOT}%{_bindir} \
|
||||||
docdir=${RPM_BUILD_ROOT}/%{_docdir}/finalcut/
|
docdir=${RPM_BUILD_ROOT}%{_docdir}/finalcut/
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_libdir}/finalcut/examples
|
||||||
|
cp -p examples/.libs/* ${RPM_BUILD_ROOT}%{_libdir}/finalcut/examples
|
||||||
|
cp -p examples/*.cpp ${RPM_BUILD_ROOT}%{_libdir}/finalcut/examples
|
||||||
|
cp -p examples/Makefile.clang ${RPM_BUILD_ROOT}%{_libdir}/finalcut/examples
|
||||||
|
cp -p examples/Makefile.gcc ${RPM_BUILD_ROOT}%{_libdir}/finalcut/examples
|
||||||
rm -f ${RPM_BUILD_ROOT}%{_libdir}/libfinal.la
|
rm -f ${RPM_BUILD_ROOT}%{_libdir}/libfinal.la
|
||||||
|
|
||||||
%post -n %{libsoname} -p /sbin/ldconfig
|
%post -n %{libsoname} -p /sbin/ldconfig
|
||||||
|
@ -124,8 +129,12 @@ rm -rf $RPM_BUILD_ROOT
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%dir %{_docdir}/finalcut
|
%dir %{_docdir}/finalcut
|
||||||
|
%dir %{_libdir}/finalcut
|
||||||
|
%dir %{_libdir}/finalcut/examples
|
||||||
%{_docdir}/finalcut/*
|
%{_docdir}/finalcut/*
|
||||||
|
%{_libdir}/pkgconfig/*
|
||||||
%{_libdir}/%{libname}.so
|
%{_libdir}/%{libname}.so
|
||||||
|
%{_libdir}/finalcut/*
|
||||||
%{_includedir}/*
|
%{_includedir}/*
|
||||||
|
|
||||||
%files -n %{libsoname}
|
%files -n %{libsoname}
|
||||||
|
@ -137,10 +146,13 @@ rm -rf $RPM_BUILD_ROOT
|
||||||
%{_libdir}/%{libname}.a
|
%{_libdir}/%{libname}.a
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Nov 25 2018 Markus Gans <guru.mail@muenster.de> - 0.5.0-1
|
||||||
|
- Release (version 0.5.0)
|
||||||
|
|
||||||
* Sat Nov 04 2017 Markus Gans <guru.mail@muenster.de> - 0.4.0-1
|
* Sat Nov 04 2017 Markus Gans <guru.mail@muenster.de> - 0.4.0-1
|
||||||
- Release (version 0.4.0)
|
- Release (version 0.4.0)
|
||||||
|
|
||||||
* Sat Nov 27 2016 Markus Gans <guru.mail@muenster.de> - 0.3.0-1
|
* Sun Nov 27 2016 Markus Gans <guru.mail@muenster.de> - 0.3.0-1
|
||||||
- Release (version 0.3.0)
|
- Release (version 0.3.0)
|
||||||
|
|
||||||
* Sat Dec 19 2015 Markus Gans <guru.mail@muenster.de> - 0.2.0-1
|
* Sat Dec 19 2015 Markus Gans <guru.mail@muenster.de> - 0.2.0-1
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
|
||||||
# This is where make install will install the library
|
# This is where make install will install the library
|
||||||
VERSION = "0.4.0"
|
VERSION = "0.5.0"
|
||||||
MAJOR := $(shell echo ${VERSION} | cut -d. -f1)
|
MAJOR := $(shell echo ${VERSION} | cut -d. -f1)
|
||||||
LIBDIR = /usr/local/lib
|
LIBDIR = /usr/local/lib
|
||||||
INCLUDEDIR1 = include/final
|
INCLUDEDIR1 = include/final
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
|
||||||
# This is where make install will install the library
|
# This is where make install will install the library
|
||||||
VERSION = "0.4.0"
|
VERSION = "0.5.0"
|
||||||
MAJOR := $(shell echo ${VERSION} | cut -d. -f1)
|
MAJOR := $(shell echo ${VERSION} | cut -d. -f1)
|
||||||
LIBDIR = /usr/local/lib
|
LIBDIR = /usr/local/lib
|
||||||
INCLUDEDIR1 = include/final
|
INCLUDEDIR1 = include/final
|
||||||
|
|
|
@ -401,7 +401,7 @@ void FApplication::init (long key_time, long dblclick_time)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
std::abort();
|
std::abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -727,7 +727,7 @@ void FButton::draw()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -506,7 +506,7 @@ void FButtonGroup::drawLabel()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -887,7 +887,7 @@ void FDialog::init()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -906,7 +906,7 @@ void FDialog::initDialogMenu()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -934,7 +934,7 @@ void FDialog::initMoveSizeMenuItem (FMenu* menu)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -957,7 +957,7 @@ void FDialog::initZoomMenuItem (FMenu* menu)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -980,7 +980,7 @@ void FDialog::initCloseMenuItem (FMenu* menu)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1446,7 +1446,7 @@ inline void FDialog::passEventToSubMenu ( mouseStates& ms
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1727,7 +1727,7 @@ void FDialog::cb_move (FWidget*, data_ptr)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -276,7 +276,7 @@ const FString FFileDialog::fileOpenChooser ( FWidget* parent
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return FString();
|
return FString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,7 +319,7 @@ const FString FFileDialog::fileSaveChooser ( FWidget* parent
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return FString();
|
return FString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ fkeymap Fkey[] =
|
||||||
{ fc::Fkey_clear , 0, "kC" }, // clear-screen or erase key
|
{ fc::Fkey_clear , 0, "kC" }, // clear-screen or erase key
|
||||||
{ fc::Fkey_ctab , 0, "kt" }, // clear-tab key
|
{ fc::Fkey_ctab , 0, "kt" }, // clear-tab key
|
||||||
{ fc::Fkey_dc , 0, "kD" }, // delete-character key
|
{ fc::Fkey_dc , 0, "kD" }, // delete-character key
|
||||||
|
{ fc::Fkey_dc , 0, "kDx"}, // keypad delete
|
||||||
{ fc::Fkey_dl , 0, "kL" }, // delete-line key
|
{ fc::Fkey_dl , 0, "kL" }, // delete-line key
|
||||||
{ fc::Fkey_down , 0, "kd" }, // down-arrow key
|
{ fc::Fkey_down , 0, "kd" }, // down-arrow key
|
||||||
{ fc::Fkey_down , 0, "kdx"}, // down-arrow key
|
{ fc::Fkey_down , 0, "kdx"}, // down-arrow key
|
||||||
|
|
|
@ -373,7 +373,7 @@ bool FKeyboard::isKeypressTimeout()
|
||||||
FKey FKeyboard::UTF8decode (const char utf8[])
|
FKey FKeyboard::UTF8decode (const char utf8[])
|
||||||
{
|
{
|
||||||
FKey ucs = 0; // Universal coded character
|
FKey ucs = 0; // Universal coded character
|
||||||
const int max = 4;
|
const std::size_t max = 4;
|
||||||
std::size_t len = std::strlen(utf8);
|
std::size_t len = std::strlen(utf8);
|
||||||
|
|
||||||
if ( len > max )
|
if ( len > max )
|
||||||
|
|
|
@ -293,7 +293,7 @@ void FLabel::onMouseDown (FMouseEvent* ev)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -529,7 +529,7 @@ void FLabel::drawMultiLine()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -574,7 +574,7 @@ void FLabel::drawSingleLine()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -844,7 +844,7 @@ void FListBox::init()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -877,7 +877,7 @@ FObject::FObjectIterator FListView::insert ( const FStringList& cols
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return FListView::null_iter;
|
return FListView::null_iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1468,7 +1468,7 @@ void FListView::init()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -953,7 +953,7 @@ void FMenu::passEventToSubMenu (FMouseEvent*& ev)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -977,7 +977,7 @@ void FMenu::passEventToSuperMenu (FMouseEvent*& ev)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1002,7 +1002,7 @@ void FMenu::passEventToMenuBar (FMouseEvent*& ev)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1336,7 +1336,7 @@ inline void FMenu::drawMenuLine (FMenuItem* menuitem, int y)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -566,7 +566,7 @@ inline void FMenuBar::drawItem (FMenuItem* menuitem, std::size_t& x)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1027,8 +1027,7 @@ void FMenuBar::passEventToMenu (FMouseEvent*& ev)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc "
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
<< ex.what() << std::endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -692,8 +692,7 @@ void FMenuItem::createDialogList (FMenu* winmenu)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc "
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
<< ex.what() << std::endl;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,8 +741,7 @@ void FMenuItem::passMouseEvent ( T widget, FMouseEvent* ev
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc "
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
<< ex.what() << std::endl;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -202,7 +202,7 @@ int FMessageBox::info ( FWidget* parent
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return FDialog::Reject;
|
return FDialog::Reject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,7 +231,7 @@ int FMessageBox::info ( FWidget* parent
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return FDialog::Reject;
|
return FDialog::Reject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ int FMessageBox::error ( FWidget* parent
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return FDialog::Reject;
|
return FDialog::Reject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,7 +374,7 @@ inline void FMessageBox::allocation (int button0, int button1, int button2)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -423,10 +423,8 @@ inline void FMessageBox::initCallbacks()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FMessageBox::calculateDimensions()
|
void FMessageBox::calculateDimensions()
|
||||||
{
|
{
|
||||||
int x, y;
|
|
||||||
std::size_t w, h;
|
std::size_t w, h;
|
||||||
std::size_t headline_height = 0;
|
std::size_t headline_height = 0;
|
||||||
FWidget* parent_widget = getParentWidget();
|
|
||||||
text_split = text.split("\n");
|
text_split = text.split("\n");
|
||||||
text_num_lines = uInt(text_split.size());
|
text_num_lines = uInt(text_split.size());
|
||||||
text_components = &text_split[0];
|
text_components = &text_split[0];
|
||||||
|
@ -449,15 +447,7 @@ void FMessageBox::calculateDimensions()
|
||||||
if ( w < 20 )
|
if ( w < 20 )
|
||||||
w = 20;
|
w = 20;
|
||||||
|
|
||||||
if ( parent_widget )
|
setSize (w, h);
|
||||||
{
|
|
||||||
x = 1 + int((parent_widget->getWidth() - w) / 2);
|
|
||||||
y = 1 + int((parent_widget->getHeight() - h) / 3);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
x = y = 1;
|
|
||||||
|
|
||||||
setGeometry (x, y, w, h);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -59,7 +59,7 @@ FObject::FObject (FObject* parent)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -646,11 +646,13 @@ int FOptiMove::repeatedAppend ( const capability& o
|
||||||
if ( dst )
|
if ( dst )
|
||||||
{
|
{
|
||||||
dst += dst_len;
|
dst += dst_len;
|
||||||
|
std::size_t free = BUF_SIZE - dst_len;
|
||||||
|
|
||||||
while ( count-- > 0 )
|
while ( count-- > 0 )
|
||||||
{
|
{
|
||||||
std::strncpy (dst, o.cap, src_len + 1);
|
std::strncpy (dst, o.cap, free);
|
||||||
dst += src_len;
|
dst += src_len;
|
||||||
|
free -= src_len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -793,7 +795,7 @@ inline int FOptiMove::horizontalMove (char hmove[], int from_x, int to_x)
|
||||||
// Move to fixed column position1
|
// Move to fixed column position1
|
||||||
std::strncat ( hmove
|
std::strncat ( hmove
|
||||||
, tparm(F_column_address.cap, to_x, 0, 0, 0, 0, 0, 0, 0, 0)
|
, tparm(F_column_address.cap, to_x, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
, BUF_SIZE - std::strlen(hmove) - 1);
|
, BUF_SIZE - std::strlen(hmove) - 1 );
|
||||||
hmove[BUF_SIZE - 1] = '\0';
|
hmove[BUF_SIZE - 1] = '\0';
|
||||||
htime = F_column_address.duration;
|
htime = F_column_address.duration;
|
||||||
}
|
}
|
||||||
|
|
|
@ -787,7 +787,7 @@ void FScrollView::init_scrollbar()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,10 +28,6 @@
|
||||||
namespace finalcut
|
namespace finalcut
|
||||||
{
|
{
|
||||||
|
|
||||||
// static class constant
|
|
||||||
const char* const FString::bad_alloc_str = "not enough memory " \
|
|
||||||
"to alloc a new string";
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class FString
|
// class FString
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -63,6 +63,9 @@ FMouseControl* FTerm::mouse = 0;
|
||||||
FTermDebugData* FTerm::debug_data = 0;
|
FTermDebugData* FTerm::debug_data = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// function prototypes
|
||||||
|
uInt env2uint (const char*);
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class FTerm
|
// class FTerm
|
||||||
|
@ -487,11 +490,11 @@ void FTerm::detectTermSize()
|
||||||
{
|
{
|
||||||
term_geometry.setPos (1, 1);
|
term_geometry.setPos (1, 1);
|
||||||
// Use COLUMNS or fallback to the xterm default width of 80 characters
|
// Use COLUMNS or fallback to the xterm default width of 80 characters
|
||||||
char* Columns = std::getenv("COLUMNS");
|
uInt Columns = env2uint ("COLUMNS");
|
||||||
term_geometry.setWidth(Columns ? std::size_t(std::atoi(Columns)) : 80);
|
term_geometry.setWidth( ( Columns == 0) ? 80 : Columns);
|
||||||
// Use LINES or fallback to the xterm default height of 24 characters
|
// Use LINES or fallback to the xterm default height of 24 characters
|
||||||
char* Lines = std::getenv("LINES");
|
uInt Lines = env2uint ("LINES");
|
||||||
term_geometry.setHeight(Lines ? std::size_t(std::atoi(Lines)) : 24);
|
term_geometry.setHeight( ( Lines == 0 ) ? 24 : Lines);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1696,7 +1699,7 @@ inline void FTerm::allocationValues()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
std::abort();
|
std::abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2072,6 +2075,26 @@ void FTerm::signal_handler (int signum)
|
||||||
, strsignal(signum) );
|
, strsignal(signum) );
|
||||||
std::terminate();
|
std::terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// FTerm non-member functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
uInt env2uint (const char* env)
|
||||||
|
{
|
||||||
|
FString str(env);
|
||||||
|
|
||||||
|
if ( str.isEmpty() )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return str.toUInt();
|
||||||
|
}
|
||||||
|
catch (const std::exception&)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace finalcut
|
} // namespace finalcut
|
||||||
|
|
|
@ -238,8 +238,6 @@ void FTermcap::termcapStrings (char*& buffer)
|
||||||
tcap[i].string = tgetstr(tcap[i].tname, &buffer);
|
tcap[i].string = tgetstr(tcap[i].tname, &buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTermcap::termcapKeys (char*& buffer)
|
void FTermcap::termcapKeys (char*& buffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -390,6 +390,87 @@ void FTermcapQuirks::sunConsole()
|
||||||
{
|
{
|
||||||
// Sun Microsystems workstation console eat_nl_glitch fix
|
// Sun Microsystems workstation console eat_nl_glitch fix
|
||||||
FTermcap::eat_nl_glitch = true;
|
FTermcap::eat_nl_glitch = true;
|
||||||
|
|
||||||
|
// Sun Microsystems workstation console parameter cursor control
|
||||||
|
TCAP(fc::t_parm_up_cursor) = \
|
||||||
|
C_STR(CSI "%p1%dA");
|
||||||
|
|
||||||
|
TCAP(fc::t_parm_down_cursor) = \
|
||||||
|
C_STR(CSI "%p1%dB");
|
||||||
|
|
||||||
|
TCAP(fc::t_parm_right_cursor) = \
|
||||||
|
C_STR(CSI "%p1%dC");
|
||||||
|
|
||||||
|
TCAP(fc::t_parm_left_cursor) = \
|
||||||
|
C_STR(CSI "%p1%dD");
|
||||||
|
|
||||||
|
// Sun Microsystems workstation console keys
|
||||||
|
for (int i = 0; fc::Fkey[i].tname[0] != 0; i++)
|
||||||
|
{
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "K2", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "218z"); // center of keypad
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "kb", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR("\b"); // backspace key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "kD", 2) == 0
|
||||||
|
&& std::strlen(fc::Fkey[i].tname) == 2 )
|
||||||
|
fc::Fkey[i].string = C_STR("\177"); // delete-character key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "@7", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "220z"); // end key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "k;", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "233z"); // F10 function key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "F1", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "234z"); // F11 function key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "F2", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "235z"); // F12 function key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "kh", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "214z"); // home key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "kI", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "247z"); // insert-character key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "kN", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "222z"); // next-page key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "%7", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "194z"); // options key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "kP", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "216z"); // prev-page key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "&5", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "193z"); // resume key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "&8", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "195z"); // undo key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "K2", 2) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "218z"); // center of keypad
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "kDx", 3) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "249z"); // keypad delete
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "@8x", 3) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "250z"); // enter/send key
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "KP1", 3) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "212z"); // keypad slash
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "KP2", 3) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "213z"); // keypad asterisk
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "KP3", 3) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "254z"); // keypad minus sign
|
||||||
|
|
||||||
|
if ( std::strncmp(fc::Fkey[i].tname, "KP4", 3) == 0 )
|
||||||
|
fc::Fkey[i].string = C_STR(CSI "253z"); // keypad plus sign
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -557,7 +557,7 @@ char* FTermDetection::parseAnswerbackMsg (char current_termtype[])
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,7 +628,7 @@ char* FTermDetection::parseSecDA (char current_termtype[])
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return current_termtype;
|
return current_termtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -706,17 +706,20 @@ const FString FTermDetection::getSecDA()
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
// Get the secondary device attributes
|
// Get the secondary device attributes
|
||||||
write(stdout_no, SECDA, std::strlen(SECDA));
|
ssize_t ret = write(stdout_no, SECDA, std::strlen(SECDA));
|
||||||
std::fflush(stdout);
|
|
||||||
|
|
||||||
|
if ( ret == -1 )
|
||||||
|
return sec_da_str;
|
||||||
|
|
||||||
|
std::fflush(stdout);
|
||||||
FD_ZERO(&ifds);
|
FD_ZERO(&ifds);
|
||||||
FD_SET(stdin_no, &ifds);
|
FD_SET(stdin_no, &ifds);
|
||||||
tv.tv_sec = 0;
|
tv.tv_sec = 0;
|
||||||
tv.tv_usec = 600000; // 600 ms
|
tv.tv_usec = 600000; // 600 ms
|
||||||
|
|
||||||
// Read the answer
|
// Read the answer
|
||||||
if ( select (stdin_no + 1, &ifds, 0, 0, &tv) == 1 )
|
if ( select (stdin_no + 1, &ifds, 0, 0, &tv) == 1
|
||||||
if ( std::scanf("\033[>%10d;%10d;%10dc", &a, &b, &c) == 3 )
|
&& std::scanf("\033[>%10d;%10d;%10dc", &a, &b, &c) == 3 )
|
||||||
sec_da_str.sprintf("\033[>%d;%d;%dc", a, b, c);
|
sec_da_str.sprintf("\033[>%d;%d;%dc", a, b, c);
|
||||||
|
|
||||||
return sec_da_str;
|
return sec_da_str;
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
#include "final/fcharmap.h"
|
#include "final/fcharmap.h"
|
||||||
#include "final/ftermfreebsd.h"
|
#include "final/ftermfreebsd.h"
|
||||||
|
|
||||||
|
namespace finalcut
|
||||||
|
{
|
||||||
|
|
||||||
// static class attributes
|
// static class attributes
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
uInt FTermFreeBSD::bsd_alt_keymap = 0;
|
uInt FTermFreeBSD::bsd_alt_keymap = 0;
|
||||||
|
@ -31,8 +34,6 @@
|
||||||
bool FTermFreeBSD::meta_sends_escape = true;
|
bool FTermFreeBSD::meta_sends_escape = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace finalcut
|
|
||||||
{
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class FTermFreeBSD
|
// class FTermFreeBSD
|
||||||
|
|
|
@ -118,17 +118,20 @@ void FTermLinux::setUTF8 (bool on)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
#if defined(__x86_64__) || defined(__i386) || defined(__arm__)
|
||||||
bool FTermLinux::setPalette (FColor index, int r, int g, int b)
|
bool FTermLinux::setPalette (FColor index, int r, int g, int b)
|
||||||
{
|
{
|
||||||
if ( ! FTerm::isLinuxTerm() )
|
if ( ! FTerm::isLinuxTerm() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#if defined(__x86_64__) || defined(__i386) || defined(__arm__)
|
|
||||||
return setVGAPalette (index, r, g, b);
|
return setVGAPalette (index, r, g, b);
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
bool FTermLinux::setPalette (FColor, int, int, int)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
bool FTermLinux::isLinuxConsole()
|
bool FTermLinux::isLinuxConsole()
|
||||||
|
@ -541,7 +544,7 @@ bool FTermLinux::getScreenFont()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -588,7 +591,7 @@ bool FTermLinux::getUnicodeMap()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,7 +668,7 @@ int FTermLinux::setScreenFont ( uChar fontdata[], uInt count
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,14 +22,15 @@
|
||||||
|
|
||||||
#include "final/ftermopenbsd.h"
|
#include "final/ftermopenbsd.h"
|
||||||
|
|
||||||
|
namespace finalcut
|
||||||
|
{
|
||||||
|
|
||||||
// static class attributes
|
// static class attributes
|
||||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
kbd_t FTermOpenBSD::bsd_keyboard_encoding = 0;
|
kbd_t FTermOpenBSD::bsd_keyboard_encoding = 0;
|
||||||
bool FTermOpenBSD::meta_sends_escape = true;
|
bool FTermOpenBSD::meta_sends_escape = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace finalcut
|
|
||||||
{
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class FTermOpenBSD
|
// class FTermOpenBSD
|
||||||
|
|
|
@ -832,7 +832,7 @@ const FString* FTermXTerminal::captureXTermFont()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -887,7 +887,7 @@ const FString* FTermXTerminal::captureXTermTitle()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -444,7 +444,7 @@ void FTextView::onMouseDown (FMouseEvent* ev)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -473,7 +473,7 @@ void FTextView::onMouseUp (FMouseEvent* ev)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -509,7 +509,7 @@ void FTextView::onMouseMove (FMouseEvent* ev)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -580,6 +580,9 @@ void FTextView::adjustSize()
|
||||||
if ( yoffset < 0 )
|
if ( yoffset < 0 )
|
||||||
yoffset = 0;
|
yoffset = 0;
|
||||||
|
|
||||||
|
if ( height < 3 )
|
||||||
|
return;
|
||||||
|
|
||||||
vbar->setMaximum (last_line - int(height) + 2 - nf_offset);
|
vbar->setMaximum (last_line - int(height) + 2 - nf_offset);
|
||||||
vbar->setPageSize (last_line, int(height) - 2 + nf_offset);
|
vbar->setPageSize (last_line, int(height) - 2 + nf_offset);
|
||||||
vbar->setX (int(width));
|
vbar->setX (int(width));
|
||||||
|
@ -587,6 +590,9 @@ void FTextView::adjustSize()
|
||||||
vbar->setValue (yoffset);
|
vbar->setValue (yoffset);
|
||||||
vbar->resize();
|
vbar->resize();
|
||||||
|
|
||||||
|
if ( width < 3 )
|
||||||
|
return;
|
||||||
|
|
||||||
hbar->setMaximum (max_width - int(width) + nf_offset + 2);
|
hbar->setMaximum (max_width - int(width) + nf_offset + 2);
|
||||||
hbar->setPageSize (max_width, int(width) - nf_offset - 2);
|
hbar->setPageSize (max_width, int(width) - nf_offset - 2);
|
||||||
hbar->setY (int(height));
|
hbar->setY (int(height));
|
||||||
|
@ -639,7 +645,7 @@ void FTextView::init()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -498,7 +498,7 @@ void FToggleButton::drawLabel()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -630,7 +630,7 @@ void FVTerm::createArea ( int offset_left, int offset_top
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -757,7 +757,7 @@ inline bool FVTerm::reallocateTextArea ( term_area* area
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -776,7 +776,7 @@ inline bool FVTerm::reallocateTextArea (term_area* area, std::size_t size)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1986,7 +1986,7 @@ void FVTerm::init (bool disable_alt_screen)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
std::abort();
|
std::abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1958,7 +1958,7 @@ void FWidget::init()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1991,7 +1991,7 @@ void FWidget::init()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ inline const FString& emptyFString::get()
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -183,7 +183,7 @@
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
/* Define to the full name and version of this package. */
|
||||||
#ifndef F_PACKAGE_STRING
|
#ifndef F_PACKAGE_STRING
|
||||||
#define F_PACKAGE_STRING "finalcut 0.4.0"
|
#define F_PACKAGE_STRING "finalcut 0.5.0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
|
@ -198,7 +198,7 @@
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#ifndef F_PACKAGE_VERSION
|
#ifndef F_PACKAGE_VERSION
|
||||||
#define F_PACKAGE_VERSION "0.4.0"
|
#define F_PACKAGE_VERSION "0.5.0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
@ -230,7 +230,7 @@
|
||||||
|
|
||||||
/* Version number of package */
|
/* Version number of package */
|
||||||
#ifndef F_VERSION
|
#ifndef F_VERSION
|
||||||
#define F_VERSION "0.4.0"
|
#define F_VERSION "0.5.0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if on MINIX. */
|
/* Define to 1 if on MINIX. */
|
||||||
|
|
|
@ -264,7 +264,6 @@ class FString
|
||||||
static const uInt FWDBUFFER = 15;
|
static const uInt FWDBUFFER = 15;
|
||||||
static const uInt INPBUFFER = 200;
|
static const uInt INPBUFFER = 200;
|
||||||
static const uInt CHAR_SIZE = sizeof(wchar_t); // bytes per character
|
static const uInt CHAR_SIZE = sizeof(wchar_t); // bytes per character
|
||||||
static const char* const bad_alloc_str;
|
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
void initLength (std::size_t);
|
void initLength (std::size_t);
|
||||||
|
|
|
@ -264,7 +264,7 @@ class FTerm
|
||||||
|
|
||||||
static void putstringf (const char[], ...)
|
static void putstringf (const char[], ...)
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
__attribute__((__format__ (__printf__, 1, 2)))
|
__attribute__ ((__format__ (__printf__, 1, 2)))
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__)
|
||||||
__attribute__ ((format (printf, 1, 2)))
|
__attribute__ ((format (printf, 1, 2)))
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -64,6 +64,9 @@ typedef uInt32 FKey;
|
||||||
namespace finalcut
|
namespace finalcut
|
||||||
{
|
{
|
||||||
|
|
||||||
|
const char* const bad_alloc_str = \
|
||||||
|
"not enough memory to alloc ";
|
||||||
|
|
||||||
template <typename T, bool is_signed>
|
template <typename T, bool is_signed>
|
||||||
struct is_negative
|
struct is_negative
|
||||||
{
|
{
|
||||||
|
|
|
@ -1032,7 +1032,7 @@ inline char* createBlankArray (std::size_t size)
|
||||||
}
|
}
|
||||||
catch (const std::bad_alloc& ex)
|
catch (const std::bad_alloc& ex)
|
||||||
{
|
{
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ fkeymap Fkey[] =
|
||||||
{ finalcut::fc::Fkey_clear , 0 , "kC" }, // clear-screen or erase key
|
{ finalcut::fc::Fkey_clear , 0 , "kC" }, // clear-screen or erase key
|
||||||
{ finalcut::fc::Fkey_ctab , C_STR(CSI "3~") , "kt" }, // clear-tab key
|
{ finalcut::fc::Fkey_ctab , C_STR(CSI "3~") , "kt" }, // clear-tab key
|
||||||
{ finalcut::fc::Fkey_dc , 0 , "kD" }, // delete-character key
|
{ finalcut::fc::Fkey_dc , 0 , "kD" }, // delete-character key
|
||||||
|
{ finalcut::fc::Fkey_dc , 0 , "kDx" }, // delete-character key
|
||||||
{ finalcut::fc::Fkey_dl , 0 , "kL" }, // delete-line key
|
{ finalcut::fc::Fkey_dl , 0 , "kL" }, // delete-line key
|
||||||
{ finalcut::fc::Fkey_down , C_STR(ESC "OB") , "kd" }, // down-arrow key
|
{ finalcut::fc::Fkey_down , C_STR(ESC "OB") , "kd" }, // down-arrow key
|
||||||
{ finalcut::fc::Fkey_down , C_STR(CSI "B") , "kdx"}, // down-arrow key
|
{ finalcut::fc::Fkey_down , C_STR(CSI "B") , "kdx"}, // down-arrow key
|
||||||
|
@ -412,10 +413,10 @@ void FKeyboardTest::severalKeysTest()
|
||||||
void FKeyboardTest::functionKeyTest()
|
void FKeyboardTest::functionKeyTest()
|
||||||
{
|
{
|
||||||
// Function key F1 (numeric keypad PF1)
|
// Function key F1 (numeric keypad PF1)
|
||||||
input("\033[2~");
|
input("\033OP");
|
||||||
processInput();
|
processInput();
|
||||||
std::cout << " - Key: " << keyboard->getKeyName(key_pressed) << std::endl;
|
std::cout << " - Key: " << keyboard->getKeyName(key_pressed) << std::endl;
|
||||||
CPPUNIT_ASSERT ( key_pressed == finalcut::fc::Fkey_ic );
|
CPPUNIT_ASSERT ( key_pressed == finalcut::fc::Fkey_f1 );
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
// Function key F1
|
// Function key F1
|
||||||
|
|
|
@ -660,6 +660,12 @@ void FTermcapQuirksTest::teratermTest()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTermcapQuirksTest::sunTest()
|
void FTermcapQuirksTest::sunTest()
|
||||||
{
|
{
|
||||||
|
finalcut::FTermcap::tcap_map* caps = finalcut::FTermcap::getTermcapMap();
|
||||||
|
const int last_item = int(sizeof(test::tcap) / sizeof(test::tcap[0])) - 1;
|
||||||
|
|
||||||
|
for (int i = 0; i < last_item; i++)
|
||||||
|
memcpy(&caps[i], &test::tcap[i], sizeof(test::tcap[0]));
|
||||||
|
|
||||||
finalcut::FTermData data;
|
finalcut::FTermData data;
|
||||||
finalcut::FTermcap::eat_nl_glitch = false;
|
finalcut::FTermcap::eat_nl_glitch = false;
|
||||||
finalcut::FTermcapQuirks quirks;
|
finalcut::FTermcapQuirks quirks;
|
||||||
|
@ -671,6 +677,102 @@ void FTermcapQuirksTest::sunTest()
|
||||||
quirks.terminalFixup();
|
quirks.terminalFixup();
|
||||||
|
|
||||||
CPPUNIT_ASSERT ( finalcut::FTermcap::eat_nl_glitch == true );
|
CPPUNIT_ASSERT ( finalcut::FTermcap::eat_nl_glitch == true );
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( caps[finalcut::fc::t_parm_up_cursor].string
|
||||||
|
, C_STR(CSI "%p1%dA") );
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( caps[finalcut::fc::t_parm_down_cursor].string
|
||||||
|
, C_STR(CSI "%p1%dB") );
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( caps[finalcut::fc::t_parm_right_cursor].string
|
||||||
|
, C_STR(CSI "%p1%dC") );
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( caps[finalcut::fc::t_parm_left_cursor].string
|
||||||
|
, C_STR(CSI "%p1%dD") );
|
||||||
|
|
||||||
|
for (int i = 0; finalcut::fc::Fkey[i].tname[0] != 0; i++)
|
||||||
|
{
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "K2", 2) == 0 ) // center of keypad
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "218z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "kb", 2) == 0 ) // backspace key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR("\b") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "kD", 2) == 0
|
||||||
|
&& std::strlen(finalcut::fc::Fkey[i].tname) == 2 ) // delete-character key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR("\177") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "@7", 2) == 0 ) // end key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "220z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "k;", 2) == 0 ) // F10 function key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "233z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "F1", 2) == 0 ) // F11 function key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "234z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "F2", 2) == 0 ) // F12 function key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "235z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "kh", 2) == 0 ) // home key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "214z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "kI", 2) == 0 ) // insert-character key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "247z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "kN", 2) == 0 ) // next-page key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "222z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "%7", 2) == 0 ) // options key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "194z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "kP", 2) == 0 ) // prev-page key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "216z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "&5", 2) == 0 ) // resume key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "193z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "&8", 2) == 0 ) // undo key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "195z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "K2", 2) == 0 ) // center of keypad
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "218z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "kDx", 3) == 0 ) // keypad delete
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "249z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "@8x", 3) == 0 ) // enter/send key
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "250z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "KP1", 3) == 0 ) // keypad slash
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "212z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "KP2", 3) == 0 ) // keypad asterisk
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "213z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "KP3", 3) == 0 ) // keypad minus sign
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "254z") );
|
||||||
|
|
||||||
|
if ( std::strncmp(finalcut::fc::Fkey[i].tname, "KP4", 3) == 0 ) // keypad plus sign
|
||||||
|
CPPUNIT_ASSERT_CSTRING ( finalcut::fc::Fkey[i].string
|
||||||
|
, C_STR(CSI "253z") );
|
||||||
|
}
|
||||||
|
|
||||||
detect.setSunTerminal (false);
|
detect.setSunTerminal (false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2297,7 +2297,7 @@ void FTermDetectionTest::terminalSimulation (console con)
|
||||||
{
|
{
|
||||||
fd_set ifds;
|
fd_set ifds;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
int len;
|
ssize_t len;
|
||||||
|
|
||||||
FD_ZERO(&ifds);
|
FD_ZERO(&ifds);
|
||||||
FD_SET(fd_stdin, &ifds);
|
FD_SET(fd_stdin, &ifds);
|
||||||
|
@ -2314,21 +2314,27 @@ void FTermDetectionTest::terminalSimulation (console con)
|
||||||
{
|
{
|
||||||
len = read (fd_stdin, buffer, sizeof(buffer));
|
len = read (fd_stdin, buffer, sizeof(buffer));
|
||||||
|
|
||||||
if ( len > 0 )
|
if ( len > 0 && std::size_t(len) < sizeof(buffer) )
|
||||||
|
{
|
||||||
|
buffer[len] = '\0';
|
||||||
write (fd_master, buffer, len); // Send data to the master side
|
write (fd_master, buffer, len); // Send data to the master side
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Data on the master side of PTY
|
// Data on the master side of PTY
|
||||||
if ( FD_ISSET(fd_master, &ifds) )
|
if ( FD_ISSET(fd_master, &ifds) )
|
||||||
{
|
{
|
||||||
len = read (fd_master, buffer, sizeof(buffer));
|
len = read (fd_master, buffer, sizeof(buffer));
|
||||||
|
|
||||||
if ( len < 0 )
|
if ( len == -1 || std::size_t(len) >= sizeof(buffer) )
|
||||||
break;
|
break;
|
||||||
else if ( len > 0 )
|
else if ( len > 0 )
|
||||||
|
{
|
||||||
|
buffer[len] = '\0';
|
||||||
parseTerminalBuffer (len, con);
|
parseTerminalBuffer (len, con);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue