compiles now under FreeBSD
This commit is contained in:
parent
ef5ca7d5f8
commit
48b2e6a816
|
@ -27,6 +27,7 @@ test/calculator
|
||||||
test/dialog
|
test/dialog
|
||||||
test/string-operations
|
test/string-operations
|
||||||
test/opti-move
|
test/opti-move
|
||||||
|
test/termcap
|
||||||
test/hello
|
test/hello
|
||||||
test/watch
|
test/watch
|
||||||
test/menu
|
test/menu
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2017-03-26 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* The Final Cut compiles now under FreeBSD
|
||||||
|
* A new test program to show the termcap variables
|
||||||
|
|
||||||
2017-03-19 Markus Gans <guru.mail@muenster.de>
|
2017-03-19 Markus Gans <guru.mail@muenster.de>
|
||||||
* Add the "mouse" example to illustrate mouse programming
|
* Add the "mouse" example to illustrate mouse programming
|
||||||
|
|
||||||
|
|
|
@ -341,6 +341,7 @@ pdfdir = @pdfdir@
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
|
|
@ -735,6 +735,7 @@ infodir
|
||||||
docdir
|
docdir
|
||||||
oldincludedir
|
oldincludedir
|
||||||
includedir
|
includedir
|
||||||
|
runstatedir
|
||||||
localstatedir
|
localstatedir
|
||||||
sharedstatedir
|
sharedstatedir
|
||||||
sysconfdir
|
sysconfdir
|
||||||
|
@ -820,6 +821,7 @@ datadir='${datarootdir}'
|
||||||
sysconfdir='${prefix}/etc'
|
sysconfdir='${prefix}/etc'
|
||||||
sharedstatedir='${prefix}/com'
|
sharedstatedir='${prefix}/com'
|
||||||
localstatedir='${prefix}/var'
|
localstatedir='${prefix}/var'
|
||||||
|
runstatedir='${localstatedir}/run'
|
||||||
includedir='${prefix}/include'
|
includedir='${prefix}/include'
|
||||||
oldincludedir='/usr/include'
|
oldincludedir='/usr/include'
|
||||||
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
|
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
|
||||||
|
@ -1072,6 +1074,15 @@ do
|
||||||
| -silent | --silent | --silen | --sile | --sil)
|
| -silent | --silent | --silen | --sile | --sil)
|
||||||
silent=yes ;;
|
silent=yes ;;
|
||||||
|
|
||||||
|
-runstatedir | --runstatedir | --runstatedi | --runstated \
|
||||||
|
| --runstate | --runstat | --runsta | --runst | --runs \
|
||||||
|
| --run | --ru | --r)
|
||||||
|
ac_prev=runstatedir ;;
|
||||||
|
-runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
|
||||||
|
| --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
|
||||||
|
| --run=* | --ru=* | --r=*)
|
||||||
|
runstatedir=$ac_optarg ;;
|
||||||
|
|
||||||
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
||||||
ac_prev=sbindir ;;
|
ac_prev=sbindir ;;
|
||||||
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
||||||
|
@ -1209,7 +1220,7 @@ fi
|
||||||
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
||||||
datadir sysconfdir sharedstatedir localstatedir includedir \
|
datadir sysconfdir sharedstatedir localstatedir includedir \
|
||||||
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
||||||
libdir localedir mandir
|
libdir localedir mandir runstatedir
|
||||||
do
|
do
|
||||||
eval ac_val=\$$ac_var
|
eval ac_val=\$$ac_var
|
||||||
# Remove trailing slashes.
|
# Remove trailing slashes.
|
||||||
|
@ -1362,6 +1373,7 @@ Fine tuning of the installation directories:
|
||||||
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
||||||
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
||||||
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
||||||
|
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
|
||||||
--libdir=DIR object code libraries [EPREFIX/lib]
|
--libdir=DIR object code libraries [EPREFIX/lib]
|
||||||
--includedir=DIR C header files [PREFIX/include]
|
--includedir=DIR C header files [PREFIX/include]
|
||||||
--oldincludedir=DIR C header files for non-gcc [/usr/include]
|
--oldincludedir=DIR C header files for non-gcc [/usr/include]
|
||||||
|
|
|
@ -258,6 +258,7 @@ pdfdir = @pdfdir@
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
|
|
@ -362,6 +362,7 @@ pdfdir = @pdfdir@
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
|
13
src/fapp.cpp
13
src/fapp.cpp
|
@ -33,8 +33,10 @@ FApplication::eventQueue* FApplication::event_queue = 0;
|
||||||
|
|
||||||
// constructors and destructor
|
// constructors and destructor
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FApplication::FApplication (int& _argc, char* _argv[])
|
FApplication::FApplication ( int& _argc
|
||||||
: FWidget(0)
|
, char* _argv[]
|
||||||
|
, bool disable_alt_screen )
|
||||||
|
: FWidget(0, disable_alt_screen)
|
||||||
, app_argc(_argc)
|
, app_argc(_argc)
|
||||||
, app_argv(_argv)
|
, app_argv(_argv)
|
||||||
, key(0)
|
, key(0)
|
||||||
|
@ -323,7 +325,7 @@ void FApplication::init()
|
||||||
void FApplication::setExitMessage (std::string message)
|
void FApplication::setExitMessage (std::string message)
|
||||||
{
|
{
|
||||||
quit_now = true;
|
quit_now = true;
|
||||||
std::snprintf ( FTerm::exit_message
|
snprintf ( FTerm::exit_message
|
||||||
, sizeof(FTerm::exit_message)
|
, sizeof(FTerm::exit_message)
|
||||||
, "%s"
|
, "%s"
|
||||||
, message.c_str() );
|
, message.c_str() );
|
||||||
|
@ -548,7 +550,10 @@ void FApplication::processKeyboardEvent()
|
||||||
|
|
||||||
if ( key != NEED_MORE_DATA )
|
if ( key != NEED_MORE_DATA )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
key = modifierKeyCorrection (key);
|
key = modifierKeyCorrection (key);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch ( key )
|
switch ( key )
|
||||||
{
|
{
|
||||||
|
@ -704,6 +709,7 @@ void FApplication::processKeyboardEvent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
int FApplication::modifierKeyCorrection (int& key_id)
|
int FApplication::modifierKeyCorrection (int& key_id)
|
||||||
{
|
{
|
||||||
|
@ -983,6 +989,7 @@ int FApplication::modifierKeyCorrection (int& key_id)
|
||||||
|
|
||||||
return key_id;
|
return key_id;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
bool FApplication::processDialogSwitchAccelerator()
|
bool FApplication::processDialogSwitchAccelerator()
|
||||||
|
|
|
@ -55,7 +55,7 @@ class FApplication : public FWidget
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
FApplication (int&, char*[]);
|
FApplication (int&, char*[], bool = false);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
virtual ~FApplication();
|
virtual ~FApplication();
|
||||||
|
@ -129,7 +129,9 @@ class FApplication : public FWidget
|
||||||
bool KeyPressed();
|
bool KeyPressed();
|
||||||
ssize_t readKey();
|
ssize_t readKey();
|
||||||
void processKeyboardEvent();
|
void processKeyboardEvent();
|
||||||
|
#if defined(__linux__)
|
||||||
int modifierKeyCorrection (int& key);
|
int modifierKeyCorrection (int& key);
|
||||||
|
#endif
|
||||||
bool processDialogSwitchAccelerator();
|
bool processDialogSwitchAccelerator();
|
||||||
bool processAccelerator (FWidget*&);
|
bool processAccelerator (FWidget*&);
|
||||||
void getX11ButtonState (int);
|
void getX11ButtonState (int);
|
||||||
|
|
|
@ -163,8 +163,8 @@ bool FButton::setFocus (bool on)
|
||||||
{
|
{
|
||||||
if ( getStatusBar() )
|
if ( getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
getStatusBar()->setMessage(msg);
|
getStatusBar()->setMessage(msg);
|
||||||
|
@ -734,8 +734,8 @@ void FButton::draw()
|
||||||
|
|
||||||
if ( is_Focus && getStatusBar() )
|
if ( is_Focus && getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
{
|
{
|
||||||
|
|
|
@ -368,7 +368,7 @@ const FString FFileDialog::fileOpenChooser ( FWidget* parent
|
||||||
{
|
{
|
||||||
path = getHomeDir();
|
path = getHomeDir();
|
||||||
|
|
||||||
if ( path.isEmpty() || path.isEmpty() )
|
if ( path.isNull() || path.isEmpty() )
|
||||||
path = FString("/");
|
path = FString("/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -403,7 +403,7 @@ const FString FFileDialog::fileSaveChooser ( FWidget* parent
|
||||||
{
|
{
|
||||||
path = getHomeDir();
|
path = getHomeDir();
|
||||||
|
|
||||||
if ( path.isEmpty() || path.isEmpty() )
|
if ( path.isNull() || path.isEmpty() )
|
||||||
path = FString("/");
|
path = FString("/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -108,8 +108,8 @@ bool FLineEdit::setFocus (bool on)
|
||||||
|
|
||||||
if ( getStatusBar() )
|
if ( getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
getStatusBar()->setMessage(msg);
|
getStatusBar()->setMessage(msg);
|
||||||
|
@ -153,7 +153,7 @@ bool FLineEdit::setShadow (bool on)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FLineEdit::setText (const FString txt)
|
void FLineEdit::setText (const FString& txt)
|
||||||
{
|
{
|
||||||
text_offset = 0;
|
text_offset = 0;
|
||||||
cursor_pos = 0;
|
cursor_pos = 0;
|
||||||
|
@ -165,7 +165,7 @@ void FLineEdit::setText (const FString txt)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FLineEdit::setLabelText (const FString ltxt)
|
void FLineEdit::setLabelText (const FString& ltxt)
|
||||||
{
|
{
|
||||||
label_text = ltxt;
|
label_text = ltxt;
|
||||||
label->setText(label_text);
|
label->setText(label_text);
|
||||||
|
@ -734,8 +734,8 @@ void FLineEdit::draw()
|
||||||
|
|
||||||
if ( isFocus && getStatusBar() )
|
if ( isFocus && getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,8 +62,8 @@ class FLineEdit : public FWidget
|
||||||
int getLabelOrientation();
|
int getLabelOrientation();
|
||||||
|
|
||||||
// Mutators
|
// Mutators
|
||||||
void setText (const FString);
|
void setText (const FString&);
|
||||||
void setLabelText (const FString);
|
void setLabelText (const FString&);
|
||||||
void setLabelOrientation(const label_o);
|
void setLabelOrientation(const label_o);
|
||||||
bool setEnable(bool);
|
bool setEnable(bool);
|
||||||
bool setEnable();
|
bool setEnable();
|
||||||
|
|
|
@ -195,8 +195,8 @@ bool FListBox::setFocus (bool on)
|
||||||
|
|
||||||
if ( getStatusBar() )
|
if ( getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
getStatusBar()->setMessage(msg);
|
getStatusBar()->setMessage(msg);
|
||||||
|
@ -214,7 +214,7 @@ bool FListBox::setFocus (bool on)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FListBox::setText (const FString txt)
|
void FListBox::setText (const FString& txt)
|
||||||
{
|
{
|
||||||
text = txt;
|
text = txt;
|
||||||
}
|
}
|
||||||
|
@ -261,7 +261,7 @@ void FListBox::hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FListBox::insert ( const FString item
|
void FListBox::insert ( const FString& item
|
||||||
, fc::brackets_type b
|
, fc::brackets_type b
|
||||||
, bool s
|
, bool s
|
||||||
, data_ptr d )
|
, data_ptr d )
|
||||||
|
|
|
@ -139,7 +139,7 @@ class FListBox : public FWidget
|
||||||
bool setFocus (bool);
|
bool setFocus (bool);
|
||||||
bool setFocus();
|
bool setFocus();
|
||||||
bool unsetFocus();
|
bool unsetFocus();
|
||||||
void setText (const FString);
|
void setText (const FString&);
|
||||||
|
|
||||||
// Inquiries
|
// Inquiries
|
||||||
bool isSelected (int) const;
|
bool isSelected (int) const;
|
||||||
|
@ -148,7 +148,7 @@ class FListBox : public FWidget
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
void hide();
|
void hide();
|
||||||
void insert ( const FString
|
void insert ( const FString&
|
||||||
, fc::brackets_type = fc::NoBrackets
|
, fc::brackets_type = fc::NoBrackets
|
||||||
, bool = false
|
, bool = false
|
||||||
, data_ptr = 0);
|
, data_ptr = 0);
|
||||||
|
|
|
@ -64,7 +64,7 @@ bool FMenu::setMenuWidget (bool on)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FMenu::setStatusbarMessage (const FString msg)
|
void FMenu::setStatusbarMessage (const FString& msg)
|
||||||
{
|
{
|
||||||
FWidget::setStatusbarMessage(msg);
|
FWidget::setStatusbarMessage(msg);
|
||||||
|
|
||||||
|
@ -622,8 +622,8 @@ void FMenu::onMouseMove (FMouseEvent* ev)
|
||||||
// Mouse is over border or separator
|
// Mouse is over border or separator
|
||||||
if ( getStatusBar() )
|
if ( getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,7 +73,7 @@ class FMenu : public FWindow, public FMenuList
|
||||||
bool setMenuWidget (bool);
|
bool setMenuWidget (bool);
|
||||||
bool setMenuWidget();
|
bool setMenuWidget();
|
||||||
bool unsetMenuWidget();
|
bool unsetMenuWidget();
|
||||||
void setStatusbarMessage (const FString);
|
void setStatusbarMessage (const FString&);
|
||||||
void setMenu (FMenu*);
|
void setMenu (FMenu*);
|
||||||
void setText (const FString&);
|
void setText (const FString&);
|
||||||
|
|
||||||
|
|
|
@ -158,8 +158,8 @@ bool FMenuItem::setFocus (bool on)
|
||||||
|
|
||||||
if ( getStatusBar() )
|
if ( getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
getStatusBar()->setMessage(msg);
|
getStatusBar()->setMessage(msg);
|
||||||
|
@ -754,7 +754,7 @@ void FMenuItem::createDialogList (FMenu* winmenu)
|
||||||
{
|
{
|
||||||
int n = int(std::distance(begin, iter));
|
int n = int(std::distance(begin, iter));
|
||||||
// get the dialog title
|
// get the dialog title
|
||||||
const FString name = win->getText();
|
const FString& name = win->getText();
|
||||||
// create a new dialog list item
|
// create a new dialog list item
|
||||||
FMenuItem* win_item = new FMenuItem (name, winmenu);
|
FMenuItem* win_item = new FMenuItem (name, winmenu);
|
||||||
|
|
||||||
|
|
|
@ -212,7 +212,7 @@ int FMessageBox::error ( FWidget* parent
|
||||||
, int button2 )
|
, int button2 )
|
||||||
{
|
{
|
||||||
int reply;
|
int reply;
|
||||||
const FString caption = "Error message";
|
const FString& caption = "Error message";
|
||||||
FMessageBox* mbox = new FMessageBox ( caption, message
|
FMessageBox* mbox = new FMessageBox ( caption, message
|
||||||
, button0, button1, button2
|
, button0, button1, button2
|
||||||
, parent );
|
, parent );
|
||||||
|
|
|
@ -228,6 +228,7 @@ pdfdir = @pdfdir@
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
|
|
@ -383,7 +383,6 @@ void FScrollView::draw()
|
||||||
void FScrollView::onKeyPress (FKeyEvent* ev)
|
void FScrollView::onKeyPress (FKeyEvent* ev)
|
||||||
{
|
{
|
||||||
int key = ev->key();
|
int key = ev->key();
|
||||||
bool hasChanges = false;
|
|
||||||
short& xoffset = viewport_geometry.x1_ref();
|
short& xoffset = viewport_geometry.x1_ref();
|
||||||
short& yoffset = viewport_geometry.y1_ref();
|
short& yoffset = viewport_geometry.y1_ref();
|
||||||
short xoffset_before = xoffset;
|
short xoffset_before = xoffset;
|
||||||
|
@ -457,6 +456,8 @@ void FScrollView::onKeyPress (FKeyEvent* ev)
|
||||||
|
|
||||||
if ( ev->isAccepted() )
|
if ( ev->isAccepted() )
|
||||||
{
|
{
|
||||||
|
bool hasChanges = false;
|
||||||
|
|
||||||
if ( isVisible() && viewport
|
if ( isVisible() && viewport
|
||||||
&& (xoffset_before != xoffset || yoffset_before != yoffset) )
|
&& (xoffset_before != xoffset || yoffset_before != yoffset) )
|
||||||
{
|
{
|
||||||
|
@ -690,8 +691,6 @@ void FScrollView::copy2area()
|
||||||
// copy viewport to area
|
// copy viewport to area
|
||||||
|
|
||||||
int ax, ay, dx, dy, y_end, x_end;
|
int ax, ay, dx, dy, y_end, x_end;
|
||||||
char_data* vc; // viewport character
|
|
||||||
char_data* ac; // area character
|
|
||||||
|
|
||||||
if ( ! hasPrintArea() )
|
if ( ! hasPrintArea() )
|
||||||
FVTerm::getPrintArea();
|
FVTerm::getPrintArea();
|
||||||
|
@ -711,6 +710,8 @@ void FScrollView::copy2area()
|
||||||
|
|
||||||
for (int y=0; y < y_end; y++) // line loop
|
for (int y=0; y < y_end; y++) // line loop
|
||||||
{
|
{
|
||||||
|
char_data* vc; // viewport character
|
||||||
|
char_data* ac; // area character
|
||||||
int v_line_len = viewport->width;
|
int v_line_len = viewport->width;
|
||||||
int a_line_len = print_area->width + print_area->right_shadow;
|
int a_line_len = print_area->width + print_area->right_shadow;
|
||||||
vc = &viewport->text[(dy+y) * v_line_len + dx];
|
vc = &viewport->text[(dy+y) * v_line_len + dx];
|
||||||
|
@ -734,15 +735,16 @@ void FScrollView::copy2area()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline FPoint FScrollView::getViewportCursorPos()
|
inline FPoint FScrollView::getViewportCursorPos()
|
||||||
{
|
{
|
||||||
int x, y;
|
|
||||||
FWidget* window = FWindow::getWindowWidget(this);
|
FWidget* window = FWindow::getWindowWidget(this);
|
||||||
|
|
||||||
if ( window )
|
if ( window )
|
||||||
{
|
{
|
||||||
int widget_offsetX = getTermX() - window->getTermX();
|
int widget_offsetX = getTermX() - window->getTermX();
|
||||||
int widget_offsetY = getTermY() - window->getTermY();
|
int widget_offsetY = getTermY() - window->getTermY();
|
||||||
x = widget_offsetX + viewport->input_cursor_x - viewport_geometry.getX();
|
int x = widget_offsetX + viewport->input_cursor_x
|
||||||
y = widget_offsetY + viewport->input_cursor_y - viewport_geometry.getY();
|
- viewport_geometry.getX();
|
||||||
|
int y = widget_offsetY + viewport->input_cursor_y
|
||||||
|
- viewport_geometry.getY();
|
||||||
return FPoint(x,y);
|
return FPoint(x,y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -517,14 +517,14 @@ FString& FString::sprintf (const char* format, ...)
|
||||||
|
|
||||||
buffer = buf;
|
buffer = buf;
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
len = std::vsnprintf (buffer, sizeof(buf), format, args);
|
len = vsnprintf (buffer, sizeof(buf), format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
||||||
if ( len >= int(sizeof(buf)) )
|
if ( len >= int(sizeof(buf)) )
|
||||||
{
|
{
|
||||||
buffer = new char[len+1]();
|
buffer = new char[len+1]();
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
std::vsnprintf (buffer, uLong(len+1), format, args);
|
vsnprintf (buffer, uLong(len+1), format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1999,20 +1999,24 @@ FString FString::replaceControlCodes() const
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FString FString::expandTabs (uInt tabstop) const
|
FString FString::expandTabs (int tabstop) const
|
||||||
{
|
{
|
||||||
uLong last;
|
uLong last;
|
||||||
std::vector<FString> tab_split;
|
std::vector<FString> tab_split;
|
||||||
FString instr(string);
|
FString instr(string);
|
||||||
FString outstr;
|
FString outstr;
|
||||||
|
|
||||||
|
if ( tabstop <= 0 )
|
||||||
|
return instr;
|
||||||
|
|
||||||
tab_split = instr.split("\t");
|
tab_split = instr.split("\t");
|
||||||
last = tab_split.size();
|
last = tab_split.size();
|
||||||
|
|
||||||
for (uInt i=0; i < last; i++)
|
for (uInt i=0; i < last; i++)
|
||||||
{
|
{
|
||||||
uInt len = tab_split[i].getLength();
|
uInt len = tab_split[i].getLength();
|
||||||
outstr += tab_split[i] + FString(tabstop - len % tabstop, L' ');
|
uInt tab_len = uInt(tabstop);
|
||||||
|
outstr += tab_split[i] + FString(tab_len - (len % tab_len), L' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
return outstr;
|
return outstr;
|
||||||
|
|
|
@ -306,7 +306,7 @@ class FString
|
||||||
FString replace (const char, const char);
|
FString replace (const char, const char);
|
||||||
|
|
||||||
FString replaceControlCodes() const;
|
FString replaceControlCodes() const;
|
||||||
FString expandTabs (uInt = 8) const;
|
FString expandTabs (int = 8) const;
|
||||||
FString removeDel() const;
|
FString removeDel() const;
|
||||||
FString removeBackspaces() const;
|
FString removeBackspaces() const;
|
||||||
|
|
||||||
|
|
251
src/fterm.cpp
251
src/fterm.cpp
|
@ -6,9 +6,11 @@
|
||||||
#include "fkey_map.h"
|
#include "fkey_map.h"
|
||||||
#include "ftcap_map.h"
|
#include "ftcap_map.h"
|
||||||
|
|
||||||
#include "fonts/newfont.h"
|
#if defined(__linux__)
|
||||||
#include "fonts/unicodemap.h"
|
#include "fonts/newfont.h"
|
||||||
#include "fonts/vgafont.h"
|
#include "fonts/unicodemap.h"
|
||||||
|
#include "fonts/vgafont.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// global FTerm object
|
// global FTerm object
|
||||||
static FTerm* init_term_object = 0;
|
static FTerm* init_term_object = 0;
|
||||||
|
@ -68,8 +70,12 @@ bool FTerm::no_shadow_character;
|
||||||
bool FTerm::no_half_block_character;
|
bool FTerm::no_half_block_character;
|
||||||
bool FTerm::cursor_optimisation;
|
bool FTerm::cursor_optimisation;
|
||||||
bool FTerm::xterm_default_colors;
|
bool FTerm::xterm_default_colors;
|
||||||
|
bool FTerm::use_alternate_screen = true;
|
||||||
termios FTerm::term_init;
|
termios FTerm::term_init;
|
||||||
char FTerm::termtype[30] = "";
|
char FTerm::termtype[30] = "";
|
||||||
|
char FTerm::termtype_256color[30] = "";
|
||||||
|
char FTerm::termtype_Answerback[30] = "";
|
||||||
|
char FTerm::termtype_SecDA[30] = "";
|
||||||
char* FTerm::term_name = 0;
|
char* FTerm::term_name = 0;
|
||||||
char* FTerm::locale_name = 0;
|
char* FTerm::locale_name = 0;
|
||||||
char* FTerm::locale_xterm = 0;
|
char* FTerm::locale_xterm = 0;
|
||||||
|
@ -97,12 +103,15 @@ bool FTermcap::ansi_default_color = false;
|
||||||
bool FTermcap::osc_support = false;
|
bool FTermcap::osc_support = false;
|
||||||
bool FTermcap::no_utf8_acs_chars = false;
|
bool FTermcap::no_utf8_acs_chars = false;
|
||||||
int FTermcap::max_color = 1;
|
int FTermcap::max_color = 1;
|
||||||
uInt FTermcap::tabstop = 8;
|
int FTermcap::tabstop = 8;
|
||||||
uInt FTermcap::attr_without_color = 0;
|
int FTermcap::attr_without_color = 0;
|
||||||
console_font_op FTerm::screen_font;
|
|
||||||
unimapdesc FTerm::screen_unicode_map;
|
|
||||||
fc::consoleCursorStyle FTerm::console_cursor_style;
|
fc::consoleCursorStyle FTerm::console_cursor_style;
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
console_font_op FTerm::screen_font;
|
||||||
|
unimapdesc FTerm::screen_unicode_map;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class FTerm
|
// class FTerm
|
||||||
|
@ -110,13 +119,16 @@ fc::consoleCursorStyle FTerm::console_cursor_style;
|
||||||
|
|
||||||
// constructors and destructor
|
// constructors and destructor
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FTerm::FTerm()
|
FTerm::FTerm (bool disable_alt_screen)
|
||||||
: color_map()
|
: color_map()
|
||||||
{
|
{
|
||||||
resize_term = false;
|
resize_term = false;
|
||||||
|
|
||||||
if ( ! term_initialized )
|
if ( ! term_initialized )
|
||||||
|
{
|
||||||
|
use_alternate_screen = ! disable_alt_screen;
|
||||||
init();
|
init();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -174,6 +186,7 @@ const FString FTerm::getKeyName (int keynum)
|
||||||
return FString("");
|
return FString("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FTerm::modifier_key& FTerm::getModifierKey()
|
FTerm::modifier_key& FTerm::getModifierKey()
|
||||||
{
|
{
|
||||||
|
@ -199,6 +212,7 @@ FTerm::modifier_key& FTerm::getModifierKey()
|
||||||
|
|
||||||
return mod_key;
|
return mod_key;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
fc::consoleCursorStyle FTerm::getConsoleCursor()
|
fc::consoleCursorStyle FTerm::getConsoleCursor()
|
||||||
|
@ -530,6 +544,7 @@ bool FTerm::setVGAFont()
|
||||||
else
|
else
|
||||||
Fputchar = &FTerm::putchar_ASCII;
|
Fputchar = &FTerm::putchar_ASCII;
|
||||||
}
|
}
|
||||||
|
#if defined(__linux__)
|
||||||
else if ( linux_terminal )
|
else if ( linux_terminal )
|
||||||
{
|
{
|
||||||
if ( openConsole() == 0 )
|
if ( openConsole() == 0 )
|
||||||
|
@ -562,6 +577,7 @@ bool FTerm::setVGAFont()
|
||||||
Encoding = fc::PC;
|
Encoding = fc::PC;
|
||||||
Fputchar = &FTerm::putchar_ASCII;
|
Fputchar = &FTerm::putchar_ASCII;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
VGAFont = false;
|
VGAFont = false;
|
||||||
|
|
||||||
|
@ -599,6 +615,7 @@ bool FTerm::setNewFont()
|
||||||
else
|
else
|
||||||
Fputchar = &FTerm::putchar_ASCII;
|
Fputchar = &FTerm::putchar_ASCII;
|
||||||
}
|
}
|
||||||
|
#if defined(__linux__)
|
||||||
else if ( linux_terminal )
|
else if ( linux_terminal )
|
||||||
{
|
{
|
||||||
NewFont = true;
|
NewFont = true;
|
||||||
|
@ -631,6 +648,7 @@ bool FTerm::setNewFont()
|
||||||
Encoding = fc::PC;
|
Encoding = fc::PC;
|
||||||
Fputchar = &FTerm::putchar_ASCII; // function pointer
|
Fputchar = &FTerm::putchar_ASCII; // function pointer
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
NewFont = false;
|
NewFont = false;
|
||||||
|
|
||||||
|
@ -670,6 +688,7 @@ bool FTerm::setOldFont()
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
retval = true;
|
retval = true;
|
||||||
}
|
}
|
||||||
|
#if defined(__linux__)
|
||||||
else if ( linux_terminal )
|
else if ( linux_terminal )
|
||||||
{
|
{
|
||||||
if ( openConsole() == 0 )
|
if ( openConsole() == 0 )
|
||||||
|
@ -701,6 +720,7 @@ bool FTerm::setOldFont()
|
||||||
closeConsole();
|
closeConsole();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -1425,7 +1445,7 @@ const FString FTerm::getSecDA()
|
||||||
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 )
|
||||||
|
@ -1445,7 +1465,7 @@ void FTerm::putstringf (const char* const format, ...)
|
||||||
|
|
||||||
buffer = buf;
|
buffer = buf;
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
std::vsnprintf (buffer, sizeof(buf), format, args);
|
vsnprintf (buffer, sizeof(buf), format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
||||||
tputs (buffer, 1, std::putchar);
|
tputs (buffer, 1, std::putchar);
|
||||||
|
@ -1550,6 +1570,7 @@ int FTerm::UTF8decode (const char utf8[])
|
||||||
|
|
||||||
// protected methods of FTerm
|
// protected methods of FTerm
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
#if defined(__linux__)
|
||||||
void FTerm::init_consoleCharMap()
|
void FTerm::init_consoleCharMap()
|
||||||
{
|
{
|
||||||
uInt c1, c2, c3, c4, c5;
|
uInt c1, c2, c3, c4, c5;
|
||||||
|
@ -1597,6 +1618,7 @@ void FTerm::init_consoleCharMap()
|
||||||
no_half_block_character = true;
|
no_half_block_character = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
bool FTerm::charEncodable (uInt c)
|
bool FTerm::charEncodable (uInt c)
|
||||||
|
@ -1707,6 +1729,7 @@ bool FTerm::gpmMouse (bool on)
|
||||||
|
|
||||||
// private methods of FTerm
|
// private methods of FTerm
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
#if defined(__linux__)
|
||||||
int FTerm::isConsole()
|
int FTerm::isConsole()
|
||||||
{
|
{
|
||||||
char arg = 0;
|
char arg = 0;
|
||||||
|
@ -1844,6 +1867,7 @@ int FTerm::getFramebuffer_bpp ()
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
int FTerm::openConsole()
|
int FTerm::openConsole()
|
||||||
|
@ -1902,7 +1926,7 @@ void FTerm::identifyTermType()
|
||||||
std::FILE *fp;
|
std::FILE *fp;
|
||||||
|
|
||||||
if ( (fp = std::fopen("/etc/ttytype", "r")) != 0
|
if ( (fp = std::fopen("/etc/ttytype", "r")) != 0
|
||||||
|| (fp = std::fopen("/etc/ttys", "r")) != 0 )
|
|| (fp = std::fopen("/etc/ttys", "r")) != 0 ) // FreeBSD: man 5 ttys
|
||||||
{
|
{
|
||||||
char* p;
|
char* p;
|
||||||
char* type;
|
char* type;
|
||||||
|
@ -1965,6 +1989,7 @@ void FTerm::restoreTTYsettings()
|
||||||
setTTY (term_init);
|
setTTY (term_init);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
int FTerm::getScreenFont()
|
int FTerm::getScreenFont()
|
||||||
{
|
{
|
||||||
|
@ -2172,6 +2197,7 @@ void FTerm::init_console()
|
||||||
std::abort();
|
std::abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
uInt FTerm::getBaudRate (const struct termios* termios_p)
|
uInt FTerm::getBaudRate (const struct termios* termios_p)
|
||||||
|
@ -2283,6 +2309,13 @@ char* FTerm::init_256colorTerminal()
|
||||||
new_termtype = const_cast<char*>("gnome-256color");
|
new_termtype = const_cast<char*>("gnome-256color");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
if ( new_termtype )
|
||||||
|
std::strncpy ( termtype_256color
|
||||||
|
, new_termtype
|
||||||
|
, std::strlen(new_termtype) + 1 );
|
||||||
|
#endif
|
||||||
|
|
||||||
return new_termtype;
|
return new_termtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2310,6 +2343,13 @@ char* FTerm::parseAnswerbackMsg (char*& current_termtype)
|
||||||
if ( cygwin_terminal )
|
if ( cygwin_terminal )
|
||||||
putstring (BS " " BS);
|
putstring (BS " " BS);
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
if ( new_termtype )
|
||||||
|
std::strncpy ( termtype_Answerback
|
||||||
|
, new_termtype
|
||||||
|
, std::strlen(new_termtype) + 1 );
|
||||||
|
#endif
|
||||||
|
|
||||||
return new_termtype;
|
return new_termtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2373,6 +2413,7 @@ char* FTerm::parseSecDA (char*& current_termtype)
|
||||||
{
|
{
|
||||||
terminal_id_version = -1;
|
terminal_id_version = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( terminal_id_type )
|
switch ( terminal_id_type )
|
||||||
{
|
{
|
||||||
case 0: // DEC VT100
|
case 0: // DEC VT100
|
||||||
|
@ -2453,6 +2494,13 @@ char* FTerm::parseSecDA (char*& current_termtype)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
if ( new_termtype )
|
||||||
|
std::strncpy ( termtype_SecDA
|
||||||
|
, new_termtype
|
||||||
|
, std::strlen(new_termtype) + 1 );
|
||||||
|
#endif
|
||||||
|
|
||||||
return new_termtype;
|
return new_termtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2485,9 +2533,10 @@ void FTerm::oscPostfix()
|
||||||
void FTerm::init_alt_charset()
|
void FTerm::init_alt_charset()
|
||||||
{
|
{
|
||||||
// read the used vt100 pairs
|
// read the used vt100 pairs
|
||||||
|
|
||||||
if ( tcap[fc::t_acs_chars].string )
|
if ( tcap[fc::t_acs_chars].string )
|
||||||
{
|
{
|
||||||
for (int n=0; tcap[fc::t_acs_chars].string[n]; tcap[fc::t_acs_chars].string += 2)
|
for (int n=0; tcap[fc::t_acs_chars].string[n]; n += 2)
|
||||||
{
|
{
|
||||||
// insert the vt100 key/value pairs into a map
|
// insert the vt100 key/value pairs into a map
|
||||||
uChar p1 = uChar(tcap[fc::t_acs_chars].string[n]);
|
uChar p1 = uChar(tcap[fc::t_acs_chars].string[n]);
|
||||||
|
@ -2595,14 +2644,62 @@ void FTerm::init_termcaps()
|
||||||
static char term_buffer[2048];
|
static char term_buffer[2048];
|
||||||
static char string_buf[2048];
|
static char string_buf[2048];
|
||||||
char* buffer = string_buf;
|
char* buffer = string_buf;
|
||||||
|
char* key_up_string;
|
||||||
|
const int success = 1;
|
||||||
|
const int no_entry = 0;
|
||||||
|
const int db_not_found = -1;
|
||||||
|
const int not_available = -1;
|
||||||
|
const int uninitialized = -2;
|
||||||
|
int status = uninitialized;
|
||||||
|
|
||||||
// share the terminal capabilities
|
// share the terminal capabilities
|
||||||
FTermcap().setTermcapMap(tcap);
|
FTermcap().setTermcapMap(tcap);
|
||||||
|
|
||||||
// open the termcap file + load entry for termtype
|
if ( termtype[0] )
|
||||||
if ( tgetent(term_buffer, termtype) == 1 )
|
|
||||||
{
|
{
|
||||||
char* key_up_string;
|
// open the termcap file + load entry for termtype
|
||||||
|
status = tgetent(term_buffer, termtype);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( status != success )
|
||||||
|
{
|
||||||
|
// use xterm as fallback if not found
|
||||||
|
std::strncpy (termtype, const_cast<char*>("xterm"), 5);
|
||||||
|
status = tgetent(term_buffer, termtype);
|
||||||
|
|
||||||
|
if ( status != success )
|
||||||
|
{
|
||||||
|
// use ansi as fallback if not found
|
||||||
|
std::strncpy (termtype, const_cast<char*>("ansi"), 5);
|
||||||
|
status = tgetent(term_buffer, termtype);
|
||||||
|
ansi_terminal = true;
|
||||||
|
|
||||||
|
if ( status != success )
|
||||||
|
{
|
||||||
|
// use vt100 as fallback if not found
|
||||||
|
std::strncpy (termtype, const_cast<char*>("vt100"), 6);
|
||||||
|
status = tgetent(term_buffer, termtype);
|
||||||
|
ansi_terminal = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( status == no_entry )
|
||||||
|
{
|
||||||
|
std::cerr << "Unknown terminal: " << termtype << "\n"
|
||||||
|
<< "Check the TERM environment variable\n"
|
||||||
|
<< "Also make sure that the terminal\n"
|
||||||
|
<< "is defined in the termcap/terminfo database.\n";
|
||||||
|
std::abort();
|
||||||
|
}
|
||||||
|
else if ( status == db_not_found )
|
||||||
|
{
|
||||||
|
std::cerr << "The termcap/terminfo database could not be found.\n";
|
||||||
|
std::abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
// get termcap booleans
|
||||||
|
// --------------------
|
||||||
|
|
||||||
// screen erased with the background color
|
// screen erased with the background color
|
||||||
FTermcap::background_color_erase = tgetflag(const_cast<char*>("ut"));
|
FTermcap::background_color_erase = tgetflag(const_cast<char*>("ut"));
|
||||||
|
@ -2629,6 +2726,9 @@ void FTerm::init_termcaps()
|
||||||
if ( isTeraTerm() )
|
if ( isTeraTerm() )
|
||||||
FTermcap::eat_nl_glitch = true;
|
FTermcap::eat_nl_glitch = true;
|
||||||
|
|
||||||
|
// get termcap numeric
|
||||||
|
// -------------------
|
||||||
|
|
||||||
// maximum number of colors on screen
|
// maximum number of colors on screen
|
||||||
FTermcap::max_color = std::max( FTermcap::max_color
|
FTermcap::max_color = std::max( FTermcap::max_color
|
||||||
, tgetnum(const_cast<char*>("Co")) );
|
, tgetnum(const_cast<char*>("Co")) );
|
||||||
|
@ -2641,8 +2741,17 @@ void FTerm::init_termcaps()
|
||||||
else
|
else
|
||||||
monochron = false;
|
monochron = false;
|
||||||
|
|
||||||
FTermcap::tabstop = uInt(tgetnum(const_cast<char*>("it")));
|
// get initial spacing for hardware tab stop
|
||||||
FTermcap::attr_without_color = uInt(tgetnum(const_cast<char*>("NC")));
|
FTermcap::tabstop = tgetnum(const_cast<char*>("it"));
|
||||||
|
|
||||||
|
if ( FTermcap::tabstop == not_available )
|
||||||
|
FTermcap::tabstop = 8;
|
||||||
|
|
||||||
|
// get video attributes that cannot be used with colors
|
||||||
|
FTermcap::attr_without_color = tgetnum(const_cast<char*>("NC"));
|
||||||
|
|
||||||
|
if ( FTermcap::attr_without_color == not_available )
|
||||||
|
FTermcap::attr_without_color = 0;
|
||||||
|
|
||||||
// gnome-terminal has NC=16 however, it can use the dim attribute
|
// gnome-terminal has NC=16 however, it can use the dim attribute
|
||||||
if ( gnome_terminal )
|
if ( gnome_terminal )
|
||||||
|
@ -2652,6 +2761,9 @@ void FTerm::init_termcaps()
|
||||||
if ( putty_terminal )
|
if ( putty_terminal )
|
||||||
FTermcap::attr_without_color = 16;
|
FTermcap::attr_without_color = 16;
|
||||||
|
|
||||||
|
// get termcap strings
|
||||||
|
// -------------------
|
||||||
|
|
||||||
// read termcap output strings
|
// read termcap output strings
|
||||||
for (int i=0; tcap[i].tname[0] != 0; i++)
|
for (int i=0; tcap[i].tname[0] != 0; i++)
|
||||||
tcap[i].string = tgetstr(tcap[i].tname, &buffer);
|
tcap[i].string = tgetstr(tcap[i].tname, &buffer);
|
||||||
|
@ -2737,18 +2849,74 @@ void FTerm::init_termcaps()
|
||||||
}
|
}
|
||||||
else if ( putty_terminal )
|
else if ( putty_terminal )
|
||||||
{
|
{
|
||||||
|
FTermcap::background_color_erase = true;
|
||||||
|
FTermcap::osc_support = true;
|
||||||
|
|
||||||
tcap[fc::t_set_a_foreground].string = \
|
tcap[fc::t_set_a_foreground].string = \
|
||||||
const_cast<char*>(CSI "%?%p1%{8}%<"
|
const_cast<char*>(CSI "%?%p1%{8}%<"
|
||||||
"%t3%p1%d"
|
"%t3%p1%d"
|
||||||
"%e%p1%{16}%<"
|
"%e%p1%{16}%<"
|
||||||
"%t9%p1%{8}%-%d"
|
"%t9%p1%{8}%-%d"
|
||||||
"%e38;5;%p1%d%;m");
|
"%e38;5;%p1%d%;m");
|
||||||
|
|
||||||
tcap[fc::t_set_a_background].string = \
|
tcap[fc::t_set_a_background].string = \
|
||||||
const_cast<char*>(CSI "%?%p1%{8}%<"
|
const_cast<char*>(CSI "%?%p1%{8}%<"
|
||||||
"%t4%p1%d"
|
"%t4%p1%d"
|
||||||
"%e%p1%{16}%<"
|
"%e%p1%{16}%<"
|
||||||
"%t10%p1%{8}%-%d"
|
"%t10%p1%{8}%-%d"
|
||||||
"%e48;5;%p1%d%;m");
|
"%e48;5;%p1%d%;m");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_clr_bol].string )
|
||||||
|
tcap[fc::t_clr_bol].string = \
|
||||||
|
const_cast<char*>(CSI "1K");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_orig_pair].string )
|
||||||
|
tcap[fc::t_orig_pair].string = \
|
||||||
|
const_cast<char*>(CSI "39;49m");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_orig_colors].string )
|
||||||
|
tcap[fc::t_orig_colors].string = \
|
||||||
|
const_cast<char*>(OSC "R");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_column_address].string )
|
||||||
|
tcap[fc::t_column_address].string = \
|
||||||
|
const_cast<char*>(CSI "%i%p1%dG");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_row_address].string )
|
||||||
|
tcap[fc::t_row_address].string = \
|
||||||
|
const_cast<char*>(CSI "%i%p1%dd");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_enable_acs].string )
|
||||||
|
tcap[fc::t_enable_acs].string = \
|
||||||
|
const_cast<char*>(ESC "(B" ESC ")0");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_set_attributes].string )
|
||||||
|
tcap[fc::t_set_attributes].string = \
|
||||||
|
const_cast<char*>(CSI "0%?%p1%p6%|"
|
||||||
|
"%t;1%;%?%p2%t;"
|
||||||
|
"4%;%?%p1%p3%|"
|
||||||
|
"%t;7%;%?%p4%t;"
|
||||||
|
"5%;m%?%p9%t\016%e\017%;");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_enter_am_mode].string )
|
||||||
|
tcap[fc::t_enter_am_mode].string = \
|
||||||
|
const_cast<char*>(CSI "?7h");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_exit_am_mode].string )
|
||||||
|
tcap[fc::t_exit_am_mode].string = \
|
||||||
|
const_cast<char*>(CSI "?7l");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_enter_pc_charset_mode].string )
|
||||||
|
tcap[fc::t_enter_pc_charset_mode].string = \
|
||||||
|
const_cast<char*>(CSI "11m");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_exit_pc_charset_mode].string )
|
||||||
|
tcap[fc::t_exit_pc_charset_mode].string = \
|
||||||
|
const_cast<char*>(CSI "10m");
|
||||||
|
|
||||||
|
if ( ! tcap[fc::t_key_mouse].string )
|
||||||
|
tcap[fc::t_key_mouse].string = \
|
||||||
|
const_cast<char*>(CSI "M");
|
||||||
}
|
}
|
||||||
|
|
||||||
// fallback if "AF" is not found
|
// fallback if "AF" is not found
|
||||||
|
@ -2783,6 +2951,14 @@ void FTerm::init_termcaps()
|
||||||
"%p4%{255}%*%{1000}%/%2.2X" BEL ESC "\\");
|
"%p4%{255}%*%{1000}%/%2.2X" BEL ESC "\\");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if ( xterm_terminal && ! putty_terminal )
|
||||||
|
{
|
||||||
|
tcap[fc::t_initialize_color].string = \
|
||||||
|
const_cast<char*>(OSC "4;%p1%d;rgb:"
|
||||||
|
"%p2%{255}%*%{1000}%/%2.2X/"
|
||||||
|
"%p3%{255}%*%{1000}%/%2.2X/"
|
||||||
|
"%p4%{255}%*%{1000}%/%2.2X" ESC "\\");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tcap[fc::t_initialize_color].string = \
|
tcap[fc::t_initialize_color].string = \
|
||||||
|
@ -2909,15 +3085,6 @@ void FTerm::init_termcaps()
|
||||||
Fkey[i].string = const_cast<char*>(ESC "OS"); // PF4
|
Fkey[i].string = const_cast<char*>(ESC "OS"); // PF4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cerr << "Unknown terminal: " << termtype << "\n"
|
|
||||||
<< "Check the TERM environment variable\n"
|
|
||||||
<< "Also make sure that the terminal"
|
|
||||||
<< "is defined in the terminfo database.\n";
|
|
||||||
std::abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
// duration precalculation of the cursor movement strings
|
// duration precalculation of the cursor movement strings
|
||||||
opti_move->setTabStop(int(FTermcap::tabstop));
|
opti_move->setTabStop(int(FTermcap::tabstop));
|
||||||
|
@ -3051,8 +3218,10 @@ void FTerm::init_encoding()
|
||||||
Fputchar = &FTerm::putchar_ASCII; // function pointer
|
Fputchar = &FTerm::putchar_ASCII; // function pointer
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( linux_terminal
|
// In some alternative character sets, a tab character prints a '○'
|
||||||
&& (Encoding == fc::VT100 || Encoding == fc::PC) )
|
// on the terminal and does not move the cursor to the next tab stop
|
||||||
|
// position
|
||||||
|
if ( Encoding == fc::VT100 || Encoding == fc::PC )
|
||||||
{
|
{
|
||||||
char* empty = 0;
|
char* empty = 0;
|
||||||
opti_move->set_tabular (empty);
|
opti_move->set_tabular (empty);
|
||||||
|
@ -3129,8 +3298,10 @@ void FTerm::init()
|
||||||
|
|
||||||
term_name = ttyname(stdout_no);
|
term_name = ttyname(stdout_no);
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
// initialize terminal and Linux console
|
// initialize terminal and Linux console
|
||||||
init_console();
|
init_console();
|
||||||
|
#endif
|
||||||
|
|
||||||
// save termios settings
|
// save termios settings
|
||||||
storeTTYsettings();
|
storeTTYsettings();
|
||||||
|
@ -3213,6 +3384,7 @@ void FTerm::init()
|
||||||
FTermcap::max_color = 16;
|
FTermcap::max_color = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
if ( linux_terminal && openConsole() == 0 )
|
if ( linux_terminal && openConsole() == 0 )
|
||||||
{
|
{
|
||||||
if ( isConsole() )
|
if ( isConsole() )
|
||||||
|
@ -3229,6 +3401,7 @@ void FTerm::init()
|
||||||
|
|
||||||
if ( linux_terminal && getFramebuffer_bpp() >= 4 )
|
if ( linux_terminal && getFramebuffer_bpp() >= 4 )
|
||||||
FTermcap::max_color = 16;
|
FTermcap::max_color = 16;
|
||||||
|
#endif
|
||||||
|
|
||||||
t.c_lflag |= uInt(ICANON | ECHO);
|
t.c_lflag |= uInt(ICANON | ECHO);
|
||||||
tcsetattr(stdin_no, TCSADRAIN, &t);
|
tcsetattr(stdin_no, TCSADRAIN, &t);
|
||||||
|
@ -3236,7 +3409,7 @@ void FTerm::init()
|
||||||
|
|
||||||
// Test if the terminal is a xterm
|
// Test if the terminal is a xterm
|
||||||
if ( std::strncmp(termtype, const_cast<char*>("xterm"), 5) == 0
|
if ( std::strncmp(termtype, const_cast<char*>("xterm"), 5) == 0
|
||||||
|| std::strncmp(termtype, const_cast<char*>("Eterm"), 4) == 0 )
|
|| std::strncmp(termtype, const_cast<char*>("Eterm"), 5) == 0 )
|
||||||
{
|
{
|
||||||
xterm_terminal = true;
|
xterm_terminal = true;
|
||||||
|
|
||||||
|
@ -3304,7 +3477,7 @@ void FTerm::init()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// xterm mouse support
|
// xterm mouse support
|
||||||
if ( tcap[fc::t_key_mouse].string != 0 && ! linux_terminal )
|
if ( tcap[fc::t_key_mouse].string && ! linux_terminal )
|
||||||
{
|
{
|
||||||
mouse_support = true;
|
mouse_support = true;
|
||||||
enableXTermMouse();
|
enableXTermMouse();
|
||||||
|
@ -3318,14 +3491,14 @@ void FTerm::init()
|
||||||
}
|
}
|
||||||
|
|
||||||
// save current cursor position
|
// save current cursor position
|
||||||
if ( tcap[fc::t_save_cursor].string )
|
if ( use_alternate_screen && tcap[fc::t_save_cursor].string )
|
||||||
{
|
{
|
||||||
putstring (tcap[fc::t_save_cursor].string);
|
putstring (tcap[fc::t_save_cursor].string);
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
// saves the screen and the cursor position
|
// saves the screen and the cursor position
|
||||||
if ( tcap[fc::t_enter_ca_mode].string )
|
if ( use_alternate_screen && tcap[fc::t_enter_ca_mode].string )
|
||||||
{
|
{
|
||||||
putstring (tcap[fc::t_enter_ca_mode].string);
|
putstring (tcap[fc::t_enter_ca_mode].string);
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
|
@ -3358,7 +3531,8 @@ void FTerm::init()
|
||||||
if ( FTermcap::max_color >= 16
|
if ( FTermcap::max_color >= 16
|
||||||
&& ! cygwin_terminal
|
&& ! cygwin_terminal
|
||||||
&& ! kde_konsole
|
&& ! kde_konsole
|
||||||
&& ! tera_terminal )
|
&& ! tera_terminal
|
||||||
|
&& ! ansi_terminal )
|
||||||
{
|
{
|
||||||
resetColorMap();
|
resetColorMap();
|
||||||
saveColorMap();
|
saveColorMap();
|
||||||
|
@ -3437,7 +3611,8 @@ void FTerm::finish()
|
||||||
// set xterm full block cursor
|
// set xterm full block cursor
|
||||||
setXTermCursorStyle(fc::steady_block);
|
setXTermCursorStyle(fc::steady_block);
|
||||||
|
|
||||||
if ( FTermcap::max_color >= 16 && ! (kde_konsole || tera_terminal) )
|
if ( FTermcap::max_color >= 16
|
||||||
|
&& ! (kde_konsole || tera_terminal || ansi_terminal) )
|
||||||
{
|
{
|
||||||
// reset screen settings
|
// reset screen settings
|
||||||
setPalette (fc::Cyan, 0x18, 0xb2, 0xb2);
|
setPalette (fc::Cyan, 0x18, 0xb2, 0xb2);
|
||||||
|
@ -3457,11 +3632,13 @@ void FTerm::finish()
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
if ( linux_terminal )
|
if ( linux_terminal )
|
||||||
{
|
{
|
||||||
setBlinkAsIntensity (false);
|
setBlinkAsIntensity (false);
|
||||||
setConsoleCursor(fc::default_cursor, false);
|
setConsoleCursor(fc::default_cursor, false);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( kde_konsole )
|
if ( kde_konsole )
|
||||||
setKDECursor(fc::BlockCursor);
|
setKDECursor(fc::BlockCursor);
|
||||||
|
@ -3479,14 +3656,14 @@ void FTerm::finish()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// restores the screen and the cursor position
|
// restores the screen and the cursor position
|
||||||
if ( tcap[fc::t_exit_ca_mode].string )
|
if ( use_alternate_screen && tcap[fc::t_exit_ca_mode].string )
|
||||||
{
|
{
|
||||||
putstring (tcap[fc::t_exit_ca_mode].string);
|
putstring (tcap[fc::t_exit_ca_mode].string);
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore cursor to position of last save_cursor
|
// restore cursor to position of last save_cursor
|
||||||
if ( tcap[fc::t_restore_cursor].string )
|
if ( use_alternate_screen && tcap[fc::t_restore_cursor].string )
|
||||||
{
|
{
|
||||||
putstring (tcap[fc::t_restore_cursor].string);
|
putstring (tcap[fc::t_restore_cursor].string);
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
|
@ -3499,6 +3676,7 @@ void FTerm::finish()
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
if ( linux_terminal && utf8_console )
|
if ( linux_terminal && utf8_console )
|
||||||
setUTF8(true);
|
setUTF8(true);
|
||||||
|
|
||||||
|
@ -3512,6 +3690,7 @@ void FTerm::finish()
|
||||||
if ( screen_unicode_map.entries != 0 )
|
if ( screen_unicode_map.entries != 0 )
|
||||||
delete[] screen_unicode_map.entries;
|
delete[] screen_unicode_map.entries;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( encoding_set )
|
if ( encoding_set )
|
||||||
delete encoding_set;
|
delete encoding_set;
|
||||||
|
|
51
src/fterm.h
51
src/fterm.h
|
@ -33,12 +33,14 @@
|
||||||
#include <gpm.h>
|
#include <gpm.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <linux/fb.h> // Linux framebuffer console
|
#if defined(__linux__)
|
||||||
#include <linux/keyboard.h> // need for gpm keyboard modifiers
|
#include <linux/fb.h> // Linux framebuffer console
|
||||||
|
#include <linux/keyboard.h> // need for gpm keyboard modifiers
|
||||||
|
#include <sys/io.h> // <asm/io.h> is deprecated, use <sys/io.h> instead
|
||||||
|
#include <sys/kd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <sys/io.h> // <asm/io.h> is deprecated, use <sys/io.h> instead
|
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/kd.h>
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -99,7 +101,7 @@ class FTerm
|
||||||
} mod_key;
|
} mod_key;
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
FTerm ();
|
FTerm (bool = false);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
virtual ~FTerm();
|
virtual ~FTerm();
|
||||||
|
@ -110,13 +112,20 @@ class FTerm
|
||||||
static int getLineNumber();
|
static int getLineNumber();
|
||||||
static int getColumnNumber();
|
static int getColumnNumber();
|
||||||
static const FString getKeyName (int);
|
static const FString getKeyName (int);
|
||||||
|
#if defined(__linux__)
|
||||||
static modifier_key& getModifierKey();
|
static modifier_key& getModifierKey();
|
||||||
|
#endif
|
||||||
static char* getTermType();
|
static char* getTermType();
|
||||||
static char* getTermName();
|
static char* getTermName();
|
||||||
static uInt getTabstop();
|
static int getTabstop();
|
||||||
static int getMaxColor();
|
static int getMaxColor();
|
||||||
static fc::consoleCursorStyle getConsoleCursor();
|
static fc::consoleCursorStyle getConsoleCursor();
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
static const FString& getAnswerbackString();
|
||||||
|
static const FString& getSecDAString();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Inquiries
|
// Inquiries
|
||||||
static bool isKeyTimeout (timeval*, register long);
|
static bool isKeyTimeout (timeval*, register long);
|
||||||
static bool isNormal (char_data*&);
|
static bool isNormal (char_data*&);
|
||||||
|
@ -156,6 +165,7 @@ class FTerm
|
||||||
static bool setRawMode();
|
static bool setRawMode();
|
||||||
static bool unsetRawMode();
|
static bool unsetRawMode();
|
||||||
static bool setCookedMode();
|
static bool setCookedMode();
|
||||||
|
static void disableAltScreen();
|
||||||
static bool setUTF8 (bool);
|
static bool setUTF8 (bool);
|
||||||
static bool setUTF8();
|
static bool setUTF8();
|
||||||
static bool unsetUTF8();
|
static bool unsetUTF8();
|
||||||
|
@ -227,9 +237,17 @@ class FTerm
|
||||||
static int putchar_UTF8 (register int);
|
static int putchar_UTF8 (register int);
|
||||||
static int UTF8decode (const char[]);
|
static int UTF8decode (const char[]);
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
static char termtype_256color[30];
|
||||||
|
static char termtype_Answerback[30];
|
||||||
|
static char termtype_SecDA[30];
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Methods
|
// Methods
|
||||||
|
#if defined(__linux__)
|
||||||
static void init_consoleCharMap();
|
static void init_consoleCharMap();
|
||||||
|
#endif
|
||||||
static bool charEncodable (uInt);
|
static bool charEncodable (uInt);
|
||||||
static uInt charEncode (uInt);
|
static uInt charEncode (uInt);
|
||||||
static uInt charEncode (uInt, fc::encoding);
|
static uInt charEncode (uInt, fc::encoding);
|
||||||
|
@ -265,6 +283,7 @@ class FTerm
|
||||||
static bool no_half_block_character;
|
static bool no_half_block_character;
|
||||||
static bool cursor_optimisation;
|
static bool cursor_optimisation;
|
||||||
static bool xterm_default_colors;
|
static bool xterm_default_colors;
|
||||||
|
static bool use_alternate_screen;
|
||||||
static fc::encoding Encoding;
|
static fc::encoding Encoding;
|
||||||
static char exit_message[8192];
|
static char exit_message[8192];
|
||||||
|
|
||||||
|
@ -287,6 +306,7 @@ class FTerm
|
||||||
// Disable assignment operator (=)
|
// Disable assignment operator (=)
|
||||||
FTerm& operator = (const FTerm&);
|
FTerm& operator = (const FTerm&);
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
// Inquiries
|
// Inquiries
|
||||||
static int isConsole();
|
static int isConsole();
|
||||||
|
|
||||||
|
@ -298,16 +318,19 @@ class FTerm
|
||||||
static void setAttributeMode (uChar);
|
static void setAttributeMode (uChar);
|
||||||
static int setBlinkAsIntensity (bool);
|
static int setBlinkAsIntensity (bool);
|
||||||
static int getFramebuffer_bpp();
|
static int getFramebuffer_bpp();
|
||||||
|
#endif
|
||||||
static int openConsole();
|
static int openConsole();
|
||||||
static int closeConsole();
|
static int closeConsole();
|
||||||
static void identifyTermType();
|
static void identifyTermType();
|
||||||
static void storeTTYsettings();
|
static void storeTTYsettings();
|
||||||
static void restoreTTYsettings();
|
static void restoreTTYsettings();
|
||||||
|
#if defined(__linux__)
|
||||||
static int getScreenFont();
|
static int getScreenFont();
|
||||||
static int setScreenFont (uChar*, uInt, uInt, uInt, bool = false);
|
static int setScreenFont (uChar*, uInt, uInt, uInt, bool = false);
|
||||||
static int setUnicodeMap (struct unimapdesc*);
|
static int setUnicodeMap (struct unimapdesc*);
|
||||||
static int getUnicodeMap ();
|
static int getUnicodeMap ();
|
||||||
static void init_console();
|
static void init_console();
|
||||||
|
#endif
|
||||||
static uInt getBaudRate (const struct termios*);
|
static uInt getBaudRate (const struct termios*);
|
||||||
static char* init_256colorTerminal();
|
static char* init_256colorTerminal();
|
||||||
static char* parseAnswerbackMsg (char*&);
|
static char* parseAnswerbackMsg (char*&);
|
||||||
|
@ -406,13 +429,23 @@ inline char* FTerm::getTermName()
|
||||||
{ return term_name; }
|
{ return term_name; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline uInt FTerm::getTabstop()
|
inline int FTerm::getTabstop()
|
||||||
{ return FTermcap::tabstop; }
|
{ return FTermcap::tabstop; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline int FTerm::getMaxColor()
|
inline int FTerm::getMaxColor()
|
||||||
{ return FTermcap::max_color; }
|
{ return FTermcap::max_color; }
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline const FString& FTerm::getAnswerbackString()
|
||||||
|
{ return *answer_back; }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline const FString& FTerm::getSecDAString()
|
||||||
|
{ return *sec_da; }
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FTerm::isRaw()
|
inline bool FTerm::isRaw()
|
||||||
{ return raw_mode; }
|
{ return raw_mode; }
|
||||||
|
@ -533,6 +566,10 @@ inline bool FTerm::unsetRawMode()
|
||||||
inline bool FTerm::setCookedMode()
|
inline bool FTerm::setCookedMode()
|
||||||
{ return setRawMode(false); }
|
{ return setRawMode(false); }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline void FTerm::disableAltScreen()
|
||||||
|
{ use_alternate_screen = false; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FTerm::setUTF8()
|
inline bool FTerm::setUTF8()
|
||||||
{ return setUTF8(true); }
|
{ return setUTF8(true); }
|
||||||
|
|
|
@ -38,13 +38,13 @@ class FTermcap
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// Accessor
|
// Accessor
|
||||||
tcap_map* getTermcapMap()
|
static tcap_map* getTermcapMap()
|
||||||
{
|
{
|
||||||
return tcap;
|
return tcap;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mutator
|
// Mutator
|
||||||
void setTermcapMap (tcap_map* t)
|
static void setTermcapMap (tcap_map* t)
|
||||||
{
|
{
|
||||||
tcap = t;
|
tcap = t;
|
||||||
}
|
}
|
||||||
|
@ -58,8 +58,8 @@ class FTermcap
|
||||||
static bool osc_support;
|
static bool osc_support;
|
||||||
static bool no_utf8_acs_chars;
|
static bool no_utf8_acs_chars;
|
||||||
static int max_color;
|
static int max_color;
|
||||||
static uInt tabstop;
|
static int tabstop;
|
||||||
static uInt attr_without_color;
|
static int attr_without_color;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Data Members
|
// Data Members
|
||||||
|
|
|
@ -670,8 +670,8 @@ void FTextView::draw()
|
||||||
|
|
||||||
if ( hasFocus() && getStatusBar() )
|
if ( hasFocus() && getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
{
|
{
|
||||||
|
|
|
@ -146,8 +146,8 @@ bool FToggleButton::setFocus (bool on)
|
||||||
|
|
||||||
if ( getStatusBar() )
|
if ( getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
getStatusBar()->setMessage(msg);
|
getStatusBar()->setMessage(msg);
|
||||||
|
@ -184,7 +184,7 @@ bool FToggleButton::setChecked (bool on)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FToggleButton::setText (const FString txt)
|
void FToggleButton::setText (const FString& txt)
|
||||||
{
|
{
|
||||||
text = txt;
|
text = txt;
|
||||||
setWidth(button_width + int(text.getLength()));
|
setWidth(button_width + int(text.getLength()));
|
||||||
|
@ -456,8 +456,8 @@ void FToggleButton::draw()
|
||||||
|
|
||||||
if ( isFocus && getStatusBar() )
|
if ( isFocus && getStatusBar() )
|
||||||
{
|
{
|
||||||
const FString msg = getStatusbarMessage();
|
const FString& msg = getStatusbarMessage();
|
||||||
const FString curMsg = getStatusBar()->getMessage();
|
const FString& curMsg = getStatusBar()->getMessage();
|
||||||
|
|
||||||
if ( curMsg != msg )
|
if ( curMsg != msg )
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,7 +73,7 @@ class FToggleButton : public FWidget
|
||||||
bool setChecked (bool);
|
bool setChecked (bool);
|
||||||
bool setChecked();
|
bool setChecked();
|
||||||
bool unsetChecked();
|
bool unsetChecked();
|
||||||
virtual void setText (const FString);
|
virtual void setText (const FString&);
|
||||||
|
|
||||||
// Inquiries
|
// Inquiries
|
||||||
bool isChecked();
|
bool isChecked();
|
||||||
|
|
|
@ -33,8 +33,9 @@ FVTerm::char_data FVTerm::next_attribute;
|
||||||
|
|
||||||
// constructors and destructor
|
// constructors and destructor
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FVTerm::FVTerm (FVTerm* parent)
|
FVTerm::FVTerm (FVTerm* parent, bool disable_alt_screen)
|
||||||
: FObject(parent)
|
: FObject(parent)
|
||||||
|
, FTerm(disable_alt_screen)
|
||||||
, print_area(0)
|
, print_area(0)
|
||||||
, child_print_area(0)
|
, child_print_area(0)
|
||||||
, vwin(0)
|
, vwin(0)
|
||||||
|
@ -304,14 +305,14 @@ int FVTerm::printf (const char* format, ...)
|
||||||
|
|
||||||
buffer = buf;
|
buffer = buf;
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
len = std::vsnprintf (buffer, sizeof(buf), format, args);
|
len = vsnprintf (buffer, sizeof(buf), format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
||||||
if ( len >= int(sizeof(buf)) )
|
if ( len >= int(sizeof(buf)) )
|
||||||
{
|
{
|
||||||
buffer = new char[len+1]();
|
buffer = new char[len+1]();
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
std::vsnprintf (buffer, uLong(len+1), format, args);
|
vsnprintf (buffer, uLong(len+1), format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -409,7 +410,7 @@ int FVTerm::print (term_area* area, const FString& s)
|
||||||
assert ( ! s.isNull() );
|
assert ( ! s.isNull() );
|
||||||
register int len = 0;
|
register int len = 0;
|
||||||
const wchar_t* p;
|
const wchar_t* p;
|
||||||
uInt tabstop = getTabstop();
|
uInt tabstop = uInt(getTabstop());
|
||||||
|
|
||||||
if ( ! area )
|
if ( ! area )
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -2102,7 +2103,10 @@ void FVTerm::finish()
|
||||||
|
|
||||||
// Clear the terminal
|
// Clear the terminal
|
||||||
setNormal();
|
setNormal();
|
||||||
|
|
||||||
|
if ( use_alternate_screen )
|
||||||
clearTerm();
|
clearTerm();
|
||||||
|
|
||||||
flush_out();
|
flush_out();
|
||||||
|
|
||||||
if ( output_buffer )
|
if ( output_buffer )
|
||||||
|
|
|
@ -126,7 +126,7 @@ class FVTerm : public FObject, public FTerm
|
||||||
};
|
};
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
explicit FVTerm (FVTerm* = 0);
|
explicit FVTerm (FVTerm* = 0, bool = false);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~FVTerm();
|
~FVTerm();
|
||||||
|
|
|
@ -32,8 +32,8 @@ bool FWidget::hideable;
|
||||||
|
|
||||||
// constructors and destructor
|
// constructors and destructor
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FWidget::FWidget (FWidget* parent)
|
FWidget::FWidget (FWidget* parent, bool disable_alt_screen)
|
||||||
: FVTerm(parent)
|
: FVTerm(parent, disable_alt_screen)
|
||||||
, accelerator_list(0)
|
, accelerator_list(0)
|
||||||
, flags(0)
|
, flags(0)
|
||||||
, callback_objects()
|
, callback_objects()
|
||||||
|
@ -301,7 +301,7 @@ void FWidget::setOpenMenu (FWidget* obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::setStatusbarMessage (const FString msg)
|
void FWidget::setStatusbarMessage (const FString& msg)
|
||||||
{
|
{
|
||||||
statusbar_message = msg;
|
statusbar_message = msg;
|
||||||
}
|
}
|
||||||
|
@ -874,7 +874,7 @@ bool FWidget::close()
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::addCallback ( const FString cb_signal
|
void FWidget::addCallback ( const FString& cb_signal
|
||||||
, FCallback cb_handler
|
, FCallback cb_handler
|
||||||
, data_ptr data )
|
, data_ptr data )
|
||||||
{
|
{
|
||||||
|
@ -884,7 +884,7 @@ void FWidget::addCallback ( const FString cb_signal
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::addCallback ( const FString cb_signal
|
void FWidget::addCallback ( const FString& cb_signal
|
||||||
, FWidget* cb_instance
|
, FWidget* cb_instance
|
||||||
, FMemberCallback cb_handler
|
, FMemberCallback cb_handler
|
||||||
, data_ptr data )
|
, data_ptr data )
|
||||||
|
@ -946,7 +946,7 @@ inline void FWidget::delCallbacks()
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::emitCallback (const FString emit_signal)
|
void FWidget::emitCallback (const FString& emit_signal)
|
||||||
{
|
{
|
||||||
// member function pointer
|
// member function pointer
|
||||||
if ( ! member_callback_objects.empty() )
|
if ( ! member_callback_objects.empty() )
|
||||||
|
@ -1157,9 +1157,11 @@ void FWidget::show()
|
||||||
|
|
||||||
if ( ! init_desktop )
|
if ( ! init_desktop )
|
||||||
{
|
{
|
||||||
|
#if defined(__linux__)
|
||||||
// Important: Do not use setNewFont() or setVGAFont() after
|
// Important: Do not use setNewFont() or setVGAFont() after
|
||||||
// the console character mapping has been initialized
|
// the console character mapping has been initialized
|
||||||
init_consoleCharMap();
|
init_consoleCharMap();
|
||||||
|
#endif
|
||||||
|
|
||||||
// set xterm underline cursor
|
// set xterm underline cursor
|
||||||
setXTermCursorStyle(fc::blinking_underline);
|
setXTermCursorStyle(fc::blinking_underline);
|
||||||
|
|
|
@ -113,7 +113,7 @@ class FWidget : public FVTerm
|
||||||
typedef std::vector<accelerator> Accelerators;
|
typedef std::vector<accelerator> Accelerators;
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
explicit FWidget (FWidget* = 0);
|
explicit FWidget (FWidget* = 0, bool = false);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~FWidget();
|
~FWidget();
|
||||||
|
@ -166,7 +166,7 @@ class FWidget : public FVTerm
|
||||||
static void setClickedWidget (FWidget*);
|
static void setClickedWidget (FWidget*);
|
||||||
static void setMoveSizeWidget (FWidget*);
|
static void setMoveSizeWidget (FWidget*);
|
||||||
static void setOpenMenu (FWidget*);
|
static void setOpenMenu (FWidget*);
|
||||||
virtual void setStatusbarMessage (const FString);
|
virtual void setStatusbarMessage (const FString&);
|
||||||
bool setVisible();
|
bool setVisible();
|
||||||
virtual bool setEnable (bool);
|
virtual bool setEnable (bool);
|
||||||
virtual bool setEnable();
|
virtual bool setEnable();
|
||||||
|
@ -240,17 +240,17 @@ class FWidget : public FVTerm
|
||||||
int numOfFocusableChildren();
|
int numOfFocusableChildren();
|
||||||
virtual bool close();
|
virtual bool close();
|
||||||
void clearStatusbarMessage();
|
void clearStatusbarMessage();
|
||||||
void addCallback ( const FString
|
void addCallback ( const FString&
|
||||||
, FCallback
|
, FCallback
|
||||||
, data_ptr = null );
|
, data_ptr = null );
|
||||||
void addCallback ( const FString
|
void addCallback ( const FString&
|
||||||
, FWidget*
|
, FWidget*
|
||||||
, FMemberCallback
|
, FMemberCallback
|
||||||
, data_ptr = null );
|
, data_ptr = null );
|
||||||
void delCallback (FCallback);
|
void delCallback (FCallback);
|
||||||
void delCallback (FWidget*);
|
void delCallback (FWidget*);
|
||||||
void delCallbacks();
|
void delCallbacks();
|
||||||
void emitCallback (const FString);
|
void emitCallback (const FString&);
|
||||||
void addAccelerator (int);
|
void addAccelerator (int);
|
||||||
virtual void addAccelerator (int, FWidget*);
|
virtual void addAccelerator (int, FWidget*);
|
||||||
void delAccelerator ();
|
void delAccelerator ();
|
||||||
|
|
|
@ -11,6 +11,7 @@ noinst_PROGRAMS = \
|
||||||
input-dialog \
|
input-dialog \
|
||||||
choice \
|
choice \
|
||||||
opti-move \
|
opti-move \
|
||||||
|
termcap \
|
||||||
string-operations \
|
string-operations \
|
||||||
mandelbrot \
|
mandelbrot \
|
||||||
calculator \
|
calculator \
|
||||||
|
@ -35,6 +36,7 @@ mandelbrot_SOURCES = mandelbrot.cpp
|
||||||
calculator_SOURCES = calculator.cpp
|
calculator_SOURCES = calculator.cpp
|
||||||
watch_SOURCES = watch.cpp
|
watch_SOURCES = watch.cpp
|
||||||
term_attributes_SOURCES = term-attributes.cpp
|
term_attributes_SOURCES = term-attributes.cpp
|
||||||
|
termcap_SOURCES = termcap.cpp
|
||||||
transparent_SOURCES = transparent.cpp
|
transparent_SOURCES = transparent.cpp
|
||||||
keyboard_SOURCES = keyboard.cpp
|
keyboard_SOURCES = keyboard.cpp
|
||||||
mouse_SOURCES = mouse.cpp
|
mouse_SOURCES = mouse.cpp
|
||||||
|
|
|
@ -83,11 +83,12 @@ POST_UNINSTALL = :
|
||||||
build_triplet = @build@
|
build_triplet = @build@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
noinst_PROGRAMS = hello$(EXEEXT) dialog$(EXEEXT) input-dialog$(EXEEXT) \
|
noinst_PROGRAMS = hello$(EXEEXT) dialog$(EXEEXT) input-dialog$(EXEEXT) \
|
||||||
choice$(EXEEXT) opti-move$(EXEEXT) string-operations$(EXEEXT) \
|
choice$(EXEEXT) opti-move$(EXEEXT) termcap$(EXEEXT) \
|
||||||
mandelbrot$(EXEEXT) calculator$(EXEEXT) watch$(EXEEXT) \
|
string-operations$(EXEEXT) mandelbrot$(EXEEXT) \
|
||||||
term-attributes$(EXEEXT) transparent$(EXEEXT) \
|
calculator$(EXEEXT) watch$(EXEEXT) term-attributes$(EXEEXT) \
|
||||||
keyboard$(EXEEXT) mouse$(EXEEXT) timer$(EXEEXT) \
|
transparent$(EXEEXT) keyboard$(EXEEXT) mouse$(EXEEXT) \
|
||||||
scrollview$(EXEEXT) windows$(EXEEXT) menu$(EXEEXT) ui$(EXEEXT)
|
timer$(EXEEXT) scrollview$(EXEEXT) windows$(EXEEXT) \
|
||||||
|
menu$(EXEEXT) ui$(EXEEXT)
|
||||||
subdir = test
|
subdir = test
|
||||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||||
$(top_srcdir)/depcomp
|
$(top_srcdir)/depcomp
|
||||||
|
@ -146,6 +147,9 @@ string_operations_LDADD = $(LDADD)
|
||||||
am_term_attributes_OBJECTS = term-attributes.$(OBJEXT)
|
am_term_attributes_OBJECTS = term-attributes.$(OBJEXT)
|
||||||
term_attributes_OBJECTS = $(am_term_attributes_OBJECTS)
|
term_attributes_OBJECTS = $(am_term_attributes_OBJECTS)
|
||||||
term_attributes_LDADD = $(LDADD)
|
term_attributes_LDADD = $(LDADD)
|
||||||
|
am_termcap_OBJECTS = termcap.$(OBJEXT)
|
||||||
|
termcap_OBJECTS = $(am_termcap_OBJECTS)
|
||||||
|
termcap_LDADD = $(LDADD)
|
||||||
am_timer_OBJECTS = timer.$(OBJEXT)
|
am_timer_OBJECTS = timer.$(OBJEXT)
|
||||||
timer_OBJECTS = $(am_timer_OBJECTS)
|
timer_OBJECTS = $(am_timer_OBJECTS)
|
||||||
timer_LDADD = $(LDADD)
|
timer_LDADD = $(LDADD)
|
||||||
|
@ -200,15 +204,15 @@ SOURCES = $(calculator_SOURCES) $(choice_SOURCES) $(dialog_SOURCES) \
|
||||||
$(mandelbrot_SOURCES) $(menu_SOURCES) $(mouse_SOURCES) \
|
$(mandelbrot_SOURCES) $(menu_SOURCES) $(mouse_SOURCES) \
|
||||||
$(opti_move_SOURCES) $(scrollview_SOURCES) \
|
$(opti_move_SOURCES) $(scrollview_SOURCES) \
|
||||||
$(string_operations_SOURCES) $(term_attributes_SOURCES) \
|
$(string_operations_SOURCES) $(term_attributes_SOURCES) \
|
||||||
$(timer_SOURCES) $(transparent_SOURCES) $(ui_SOURCES) \
|
$(termcap_SOURCES) $(timer_SOURCES) $(transparent_SOURCES) \
|
||||||
$(watch_SOURCES) $(windows_SOURCES)
|
$(ui_SOURCES) $(watch_SOURCES) $(windows_SOURCES)
|
||||||
DIST_SOURCES = $(calculator_SOURCES) $(choice_SOURCES) \
|
DIST_SOURCES = $(calculator_SOURCES) $(choice_SOURCES) \
|
||||||
$(dialog_SOURCES) $(hello_SOURCES) $(input_dialog_SOURCES) \
|
$(dialog_SOURCES) $(hello_SOURCES) $(input_dialog_SOURCES) \
|
||||||
$(keyboard_SOURCES) $(mandelbrot_SOURCES) $(menu_SOURCES) \
|
$(keyboard_SOURCES) $(mandelbrot_SOURCES) $(menu_SOURCES) \
|
||||||
$(mouse_SOURCES) $(opti_move_SOURCES) $(scrollview_SOURCES) \
|
$(mouse_SOURCES) $(opti_move_SOURCES) $(scrollview_SOURCES) \
|
||||||
$(string_operations_SOURCES) $(term_attributes_SOURCES) \
|
$(string_operations_SOURCES) $(term_attributes_SOURCES) \
|
||||||
$(timer_SOURCES) $(transparent_SOURCES) $(ui_SOURCES) \
|
$(termcap_SOURCES) $(timer_SOURCES) $(transparent_SOURCES) \
|
||||||
$(watch_SOURCES) $(windows_SOURCES)
|
$(ui_SOURCES) $(watch_SOURCES) $(windows_SOURCES)
|
||||||
am__can_run_installinfo = \
|
am__can_run_installinfo = \
|
||||||
case $$AM_UPDATE_INFO_DIR in \
|
case $$AM_UPDATE_INFO_DIR in \
|
||||||
n|no|NO) false;; \
|
n|no|NO) false;; \
|
||||||
|
@ -347,6 +351,7 @@ pdfdir = @pdfdir@
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
@ -367,6 +372,7 @@ mandelbrot_SOURCES = mandelbrot.cpp
|
||||||
calculator_SOURCES = calculator.cpp
|
calculator_SOURCES = calculator.cpp
|
||||||
watch_SOURCES = watch.cpp
|
watch_SOURCES = watch.cpp
|
||||||
term_attributes_SOURCES = term-attributes.cpp
|
term_attributes_SOURCES = term-attributes.cpp
|
||||||
|
termcap_SOURCES = termcap.cpp
|
||||||
transparent_SOURCES = transparent.cpp
|
transparent_SOURCES = transparent.cpp
|
||||||
keyboard_SOURCES = keyboard.cpp
|
keyboard_SOURCES = keyboard.cpp
|
||||||
mouse_SOURCES = mouse.cpp
|
mouse_SOURCES = mouse.cpp
|
||||||
|
@ -471,6 +477,10 @@ term-attributes$(EXEEXT): $(term_attributes_OBJECTS) $(term_attributes_DEPENDENC
|
||||||
@rm -f term-attributes$(EXEEXT)
|
@rm -f term-attributes$(EXEEXT)
|
||||||
$(AM_V_CXXLD)$(CXXLINK) $(term_attributes_OBJECTS) $(term_attributes_LDADD) $(LIBS)
|
$(AM_V_CXXLD)$(CXXLINK) $(term_attributes_OBJECTS) $(term_attributes_LDADD) $(LIBS)
|
||||||
|
|
||||||
|
termcap$(EXEEXT): $(termcap_OBJECTS) $(termcap_DEPENDENCIES) $(EXTRA_termcap_DEPENDENCIES)
|
||||||
|
@rm -f termcap$(EXEEXT)
|
||||||
|
$(AM_V_CXXLD)$(CXXLINK) $(termcap_OBJECTS) $(termcap_LDADD) $(LIBS)
|
||||||
|
|
||||||
timer$(EXEEXT): $(timer_OBJECTS) $(timer_DEPENDENCIES) $(EXTRA_timer_DEPENDENCIES)
|
timer$(EXEEXT): $(timer_OBJECTS) $(timer_DEPENDENCIES) $(EXTRA_timer_DEPENDENCIES)
|
||||||
@rm -f timer$(EXEEXT)
|
@rm -f timer$(EXEEXT)
|
||||||
$(AM_V_CXXLD)$(CXXLINK) $(timer_OBJECTS) $(timer_LDADD) $(LIBS)
|
$(AM_V_CXXLD)$(CXXLINK) $(timer_OBJECTS) $(timer_LDADD) $(LIBS)
|
||||||
|
@ -510,6 +520,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scrollview.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scrollview.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string-operations.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string-operations.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/term-attributes.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/term-attributes.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/termcap.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transparent.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transparent.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@
|
||||||
|
|
|
@ -429,7 +429,7 @@ bool Calc::isOperatorKey(int key)
|
||||||
void Calc::setDisplay (lDouble d)
|
void Calc::setDisplay (lDouble d)
|
||||||
{
|
{
|
||||||
char buffer[33];
|
char buffer[33];
|
||||||
std::snprintf (buffer, sizeof(buffer), "%32.11Lg", d);
|
snprintf (buffer, sizeof(buffer), "%32.11Lg", d);
|
||||||
input = buffer;
|
input = buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -444,8 +444,6 @@ void MouseDraw::drawBrush (int x, int y, bool swap_color)
|
||||||
void MouseDraw::drawCanvas()
|
void MouseDraw::drawCanvas()
|
||||||
{
|
{
|
||||||
int ax, ay, y_end, x_end;
|
int ax, ay, y_end, x_end;
|
||||||
char_data* cc; // canvas character
|
|
||||||
char_data* wc; // window character
|
|
||||||
|
|
||||||
if ( ! hasPrintArea() )
|
if ( ! hasPrintArea() )
|
||||||
FVTerm::getPrintArea();
|
FVTerm::getPrintArea();
|
||||||
|
@ -461,6 +459,8 @@ void MouseDraw::drawCanvas()
|
||||||
|
|
||||||
for (int y=0; y < y_end; y++) // line loop
|
for (int y=0; y < y_end; y++) // line loop
|
||||||
{
|
{
|
||||||
|
char_data* cc; // canvas character
|
||||||
|
char_data* wc; // window character
|
||||||
cc = &canvas->text[y * x_end];
|
cc = &canvas->text[y * x_end];
|
||||||
wc = &print_area->text[(ay+y) * w_line_len + ax];
|
wc = &print_area->text[(ay+y) * w_line_len + ax];
|
||||||
std::memcpy (wc, cc, sizeof(char_data) * unsigned(x_end));
|
std::memcpy (wc, cc, sizeof(char_data) * unsigned(x_end));
|
||||||
|
|
|
@ -0,0 +1,207 @@
|
||||||
|
// File: opti-move.cpp
|
||||||
|
|
||||||
|
#include <iomanip>
|
||||||
|
#include "fapp.h"
|
||||||
|
#include "ftermcap.h"
|
||||||
|
#include "fvterm.h"
|
||||||
|
|
||||||
|
|
||||||
|
// global FVTerm object
|
||||||
|
static FVTerm* terminal;
|
||||||
|
|
||||||
|
// function prototype
|
||||||
|
void tcapBooleans (std::string, bool);
|
||||||
|
void tcapNumeric (std::string, int);
|
||||||
|
void termcapString (std::string, char*);
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void tcapBooleans (std::string name, bool cap_bool)
|
||||||
|
{
|
||||||
|
std::cout << "FTermcap::" << name << ": ";
|
||||||
|
|
||||||
|
if ( cap_bool )
|
||||||
|
std::cout << "true\r\n";
|
||||||
|
else
|
||||||
|
std::cout << "false\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void tcapNumeric (std::string name, int cap_num)
|
||||||
|
{
|
||||||
|
std::cout << "FTermcap::" << name << ": " << cap_num << "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void tcapString (std::string name, const char* cap_str)
|
||||||
|
{
|
||||||
|
uInt len;
|
||||||
|
std::string sequence;
|
||||||
|
std::cout << name << ": ";
|
||||||
|
|
||||||
|
if ( cap_str == 0 )
|
||||||
|
{
|
||||||
|
std::cout << "\r\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = uInt(std::strlen(cap_str));
|
||||||
|
|
||||||
|
for (uInt i=0; i < len; i++)
|
||||||
|
{
|
||||||
|
if ( cap_str[i] < 32 )
|
||||||
|
{
|
||||||
|
if ( cap_str[i] == 27 )
|
||||||
|
sequence += "\\E";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sequence += '^';
|
||||||
|
sequence += cap_str[i] + 64;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sequence += cap_str[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << sequence << " ";
|
||||||
|
std::cout << "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// main part
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
int main (int argc, char* argv[])
|
||||||
|
{
|
||||||
|
bool disable_alt_screen = true;
|
||||||
|
FApplication app (argc, argv, disable_alt_screen);
|
||||||
|
terminal = new FVTerm(&app);
|
||||||
|
|
||||||
|
FTermcap::tcap_map* tcap = 0;
|
||||||
|
tcap = FTermcap::getTermcapMap();
|
||||||
|
|
||||||
|
std::cout << "--------\r\nFTermcap\r\n--------\r\n\n";
|
||||||
|
std::cout << "Terminal: " << terminal->getTermType() << "\r\n";
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
std::cout << "\n.------------------- debug -------------------\r\n";
|
||||||
|
std::cout << "| after init_256colorTerminal(): "
|
||||||
|
<< terminal->termtype_256color << "\r\n";
|
||||||
|
std::cout << "| after parseAnswerbackMsg(): "
|
||||||
|
<< terminal->termtype_Answerback << "\r\n";
|
||||||
|
std::cout << "| after parseSecDA(): "
|
||||||
|
<< terminal->termtype_SecDA << "\r\n";
|
||||||
|
tcapString ( "| The answerback String"
|
||||||
|
, terminal->getAnswerbackString().c_str() );
|
||||||
|
tcapString ( "| The SecDA String"
|
||||||
|
, terminal->getSecDAString().c_str() );
|
||||||
|
std::cout << "'------------------- debug -------------------\r\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::cout << "\r\n[Booleans]\r\n";
|
||||||
|
tcapBooleans ( "background_color_erase"
|
||||||
|
, FTermcap::background_color_erase );
|
||||||
|
tcapBooleans ( "automatic_left_margin"
|
||||||
|
, FTermcap::automatic_left_margin );
|
||||||
|
tcapBooleans ( "automatic_right_margin"
|
||||||
|
, FTermcap::automatic_right_margin );
|
||||||
|
tcapBooleans ( "eat_nl_glitch"
|
||||||
|
, FTermcap::eat_nl_glitch );
|
||||||
|
tcapBooleans ( "ansi_default_color"
|
||||||
|
, FTermcap::ansi_default_color );
|
||||||
|
tcapBooleans ( "osc_support"
|
||||||
|
, FTermcap::osc_support );
|
||||||
|
tcapBooleans ( "no_utf8_acs_chars"
|
||||||
|
, FTermcap::no_utf8_acs_chars );
|
||||||
|
|
||||||
|
std::cout << "\r\n[Numeric]\r\n";
|
||||||
|
tcapNumeric ("max_color", FTermcap::max_color);
|
||||||
|
tcapNumeric ("tabstop", FTermcap::tabstop);
|
||||||
|
tcapNumeric ("attr_without_color", FTermcap::attr_without_color);
|
||||||
|
|
||||||
|
std::cout << "\r\n[String]\r\n";
|
||||||
|
tcapString ("t_bell", tcap[fc::t_bell].string);
|
||||||
|
tcapString ("t_erase_chars", tcap[fc::t_erase_chars].string);
|
||||||
|
tcapString ("t_clear_screen", tcap[fc::t_clear_screen].string);
|
||||||
|
tcapString ("t_clr_eos", tcap[fc::t_clr_eos].string);
|
||||||
|
tcapString ("t_clr_eol", tcap[fc::t_clr_eol].string);
|
||||||
|
tcapString ("t_clr_bol", tcap[fc::t_clr_bol].string);
|
||||||
|
tcapString ("t_cursor_home", tcap[fc::t_cursor_home].string);
|
||||||
|
tcapString ("t_cursor_to_ll", tcap[fc::t_cursor_to_ll].string);
|
||||||
|
tcapString ("t_carriage_return", tcap[fc::t_carriage_return].string);
|
||||||
|
tcapString ("t_tab", tcap[fc::t_tab].string);
|
||||||
|
tcapString ("t_back_tab", tcap[fc::t_back_tab].string);
|
||||||
|
tcapString ("t_insert_padding", tcap[fc::t_insert_padding].string);
|
||||||
|
tcapString ("t_insert_character", tcap[fc::t_insert_character].string);
|
||||||
|
tcapString ("t_parm_ich", tcap[fc::t_parm_ich].string);
|
||||||
|
tcapString ("t_repeat_char", tcap[fc::t_repeat_char].string);
|
||||||
|
tcapString ("t_initialize_color", tcap[fc::t_initialize_color].string);
|
||||||
|
tcapString ("t_initialize_pair", tcap[fc::t_initialize_pair].string);
|
||||||
|
tcapString ("t_set_a_foreground", tcap[fc::t_set_a_foreground].string);
|
||||||
|
tcapString ("t_set_a_background", tcap[fc::t_set_a_background].string);
|
||||||
|
tcapString ("t_set_foreground", tcap[fc::t_set_foreground].string);
|
||||||
|
tcapString ("t_set_background", tcap[fc::t_set_background].string);
|
||||||
|
tcapString ("t_set_color_pair", tcap[fc::t_set_color_pair].string);
|
||||||
|
tcapString ("t_orig_pair", tcap[fc::t_orig_pair].string);
|
||||||
|
tcapString ("t_orig_colors", tcap[fc::t_orig_colors].string);
|
||||||
|
tcapString ("t_no_color_video", tcap[fc::t_no_color_video].string);
|
||||||
|
tcapString ("t_cursor_address", tcap[fc::t_cursor_address].string);
|
||||||
|
tcapString ("t_column_address", tcap[fc::t_column_address].string);
|
||||||
|
tcapString ("t_row_address", tcap[fc::t_row_address].string);
|
||||||
|
tcapString ("t_cursor_visible", tcap[fc::t_cursor_visible].string);
|
||||||
|
tcapString ("t_cursor_invisible", tcap[fc::t_cursor_invisible].string);
|
||||||
|
tcapString ("t_cursor_normal", tcap[fc::t_cursor_normal].string);
|
||||||
|
tcapString ("t_cursor_up", tcap[fc::t_cursor_up].string);
|
||||||
|
tcapString ("t_cursor_down", tcap[fc::t_cursor_down].string);
|
||||||
|
tcapString ("t_cursor_left", tcap[fc::t_cursor_left].string);
|
||||||
|
tcapString ("t_cursor_right", tcap[fc::t_cursor_right].string);
|
||||||
|
tcapString ("t_parm_up_cursor", tcap[fc::t_parm_up_cursor].string);
|
||||||
|
tcapString ("t_parm_down_cursor", tcap[fc::t_parm_down_cursor].string);
|
||||||
|
tcapString ("t_parm_left_cursor", tcap[fc::t_parm_left_cursor].string);
|
||||||
|
tcapString ("t_parm_right_cursor", tcap[fc::t_parm_right_cursor].string);
|
||||||
|
tcapString ("t_save_cursor", tcap[fc::t_save_cursor].string);
|
||||||
|
tcapString ("t_restore_cursor", tcap[fc::t_restore_cursor].string);
|
||||||
|
tcapString ("t_scroll_forward", tcap[fc::t_scroll_forward].string);
|
||||||
|
tcapString ("t_scroll_reverse", tcap[fc::t_scroll_reverse].string);
|
||||||
|
tcapString ("t_enter_ca_mode", tcap[fc::t_enter_ca_mode].string);
|
||||||
|
tcapString ("t_exit_ca_mode", tcap[fc::t_exit_ca_mode].string);
|
||||||
|
tcapString ("t_enable_acs", tcap[fc::t_enable_acs].string);
|
||||||
|
tcapString ("t_enter_bold_mode", tcap[fc::t_enter_bold_mode].string);
|
||||||
|
tcapString ("t_exit_bold_mode", tcap[fc::t_exit_bold_mode].string);
|
||||||
|
tcapString ("t_enter_dim_mode", tcap[fc::t_enter_dim_mode].string);
|
||||||
|
tcapString ("t_exit_dim_mode", tcap[fc::t_exit_dim_mode].string);
|
||||||
|
tcapString ("t_enter_italics_mode", tcap[fc::t_enter_italics_mode].string);
|
||||||
|
tcapString ("t_exit_italics_mode", tcap[fc::t_exit_italics_mode].string);
|
||||||
|
tcapString ("t_enter_underline_mode", tcap[fc::t_enter_underline_mode].string);
|
||||||
|
tcapString ("t_exit_underline_mode", tcap[fc::t_exit_underline_mode].string);
|
||||||
|
tcapString ("t_enter_blink_mode", tcap[fc::t_enter_blink_mode].string);
|
||||||
|
tcapString ("t_exit_blink_mode", tcap[fc::t_exit_blink_mode].string);
|
||||||
|
tcapString ("t_enter_reverse_mode", tcap[fc::t_enter_reverse_mode].string);
|
||||||
|
tcapString ("t_exit_reverse_mode", tcap[fc::t_exit_reverse_mode].string);
|
||||||
|
tcapString ("t_enter_standout_mode", tcap[fc::t_enter_standout_mode].string);
|
||||||
|
tcapString ("t_exit_standout_mode", tcap[fc::t_exit_standout_mode].string);
|
||||||
|
tcapString ("t_enter_secure_mode", tcap[fc::t_enter_secure_mode].string);
|
||||||
|
tcapString ("t_exit_secure_mode", tcap[fc::t_exit_secure_mode].string);
|
||||||
|
tcapString ("t_enter_protected_mode", tcap[fc::t_enter_protected_mode].string);
|
||||||
|
tcapString ("t_exit_protected_mode", tcap[fc::t_exit_protected_mode].string);
|
||||||
|
tcapString ("t_enter_crossed_out_mode", tcap[fc::t_enter_crossed_out_mode].string);
|
||||||
|
tcapString ("t_exit_crossed_out_mode", tcap[fc::t_exit_crossed_out_mode].string);
|
||||||
|
tcapString ("t_enter_dbl_underline_mode", tcap[fc::t_enter_dbl_underline_mode].string);
|
||||||
|
tcapString ("t_exit_dbl_underline_mode", tcap[fc::t_exit_dbl_underline_mode].string);
|
||||||
|
tcapString ("t_set_attributes", tcap[fc::t_set_attributes].string);
|
||||||
|
tcapString ("t_exit_attribute_mode", tcap[fc::t_exit_attribute_mode].string);
|
||||||
|
tcapString ("t_enter_alt_charset_mode", tcap[fc::t_enter_alt_charset_mode].string);
|
||||||
|
tcapString ("t_exit_alt_charset_mode", tcap[fc::t_exit_alt_charset_mode].string);
|
||||||
|
tcapString ("t_enter_pc_charset_mode", tcap[fc::t_enter_pc_charset_mode].string);
|
||||||
|
tcapString ("t_exit_pc_charset_mode", tcap[fc::t_exit_pc_charset_mode].string);
|
||||||
|
tcapString ("t_enter_insert_mode", tcap[fc::t_enter_insert_mode].string);
|
||||||
|
tcapString ("t_exit_insert_mode", tcap[fc::t_exit_insert_mode].string);
|
||||||
|
tcapString ("t_enter_am_mode", tcap[fc::t_enter_am_mode].string);
|
||||||
|
tcapString ("t_exit_am_mode", tcap[fc::t_exit_am_mode].string);
|
||||||
|
tcapString ("t_acs_chars", tcap[fc::t_acs_chars].string);
|
||||||
|
tcapString ("t_keypad_xmit", tcap[fc::t_keypad_xmit].string);
|
||||||
|
tcapString ("t_keypad_local", tcap[fc::t_keypad_local].string);
|
||||||
|
tcapString ("t_key_mouse", tcap[fc::t_key_mouse].string);
|
||||||
|
}
|
Loading…
Reference in New Issue