
Frequently Asked Questions
==========================


What is FINAL CUT?
------------------

FINAL CUT is a [C++](https://en.wikipedia.org/wiki/C%2B%2B) class library 
and a widget toolkit with full mouse support for creating a text-based user 
interface. It's based on the Termcap library and has its own cursor 
optimization and window management.


Why did you develop FINAL CUT?
------------------------------

Most Unix [TUIs](https://en.wikipedia.org/wiki/Text-based_user_interface) 
are difficult to use or limited in their functionality. I developed 
FINAL CUT to fix these problems. The main goals in FINAL CUT design were 
to create a library that is easy to use, powerful, visually appealing and 
easily expandable.


Where does the name FINAL CUT come from?
----------------------------------------
From 1991 to 1996 I developed with 
[Borland Pascal](https://en.wikipedia.org/wiki/Turbo_Pascal) 
under [DOS](https://en.wikipedia.org/wiki/DOS) a text-based file manager 
called “The Final Cut”, with the intention to be more visually appealing 
than all other products. The calculator example is, among other things an 
extract from this program.

As I got to learn 
[object-oriented programming](https://en.wikipedia.org/wiki/Object-oriented_programming) (OOP) 
with [C++](https://en.wikipedia.org/wiki/C%2B%2B) at the end of 
the 90s, I noticed significant design weaknesses in my program code. 
I decided to re-implement the code cleanly in C++. This time I wanted to 
avoid old mistakes and do everything right and open source. In the meanwhile, 
I switched from [DOS](https://en.wikipedia.org/wiki/DOS) to 
[Linux](https://en.wikipedia.org/wiki/Linux), so I started the implementing 
of the first widgets (FDialog, FButton, FLineEdit, FScrollbar) and the 
string class FString for the 
[Linux console](https://en.wikipedia.org/wiki/Linux_console). 
Unfortunately, the project lost my attention in 2000.

In 2012, I needed an attractive terminal presentation for a textual data 
structure. So I have started to develop FINAL CUT to a widget library.


Are Windows and DOS supported by FINAL CUT?
-------------------------------------------

You need an operating system environment that implements a POSIX system 
call API. This can be realized in Windows with the Cygwin project.


Is my platform supported?
-------------------------

The supported platforms are Linux, FreeBSD, NetBSD, OpenBSD, macOS, 
Cygwin on Microsoft Windows and Oracle Solaris


What do I need to write my own programs with FINAL CUT?
-------------------------------------------------------

You need a C++ compiler like GCC (g++) or Clang (clang++).


What do I need to build this library?
-------------------------------------

You need three things:

1. C++ compiler like GCC (g++) or Clang (clang++).

2. The GNU building tools

    *For example, in a Debian-based distribution it would be 
    the following packages:*

    * autotools-dev
    * automake
    * autoconf
    * autoconf-archive
    * libtool
    * pkg-config

3. Development packages for following libraries:

    * C standard library
    * C++ standard library
    * Termcap library *(mostly part of the curses library)*
    * General Purpose Mouse library *(optional, only if you need 
      mouse support on the Linux console)*

    *For example, in a Debian-based distribution it would be the following 
    packages:*

    * libglib2.0-dev
    * libstdc++-6-dev
    * libtinfo-dev
    * libncurses5-dev
    * libgpm-dev


How to compile FINAL CUT without GPM support?
---------------------------------------------

```bash
  ./configure --without-gpm
```


Which mouse types are supported?
--------------------------------
* Normal xterm mouse tracking (limited to 223 rows/columns)
* Xterm SGR mouse tracking
* URXVT mouse tracking
* General Purpose Mouse (gpm) on a linux console


What do I need to compile the unit tests?
-----------------------------------------

You need the unit testing framework CppUnit.


How can I fix display problems?
-------------------------------

* Make sure that the environment variable TERM has the right 
  terminal name.

* Use the command "`msgcat --color=test`" to test whether the terminal 
  displays colors correctly in the terminal.

* If characters are not displayed in the right place on the screen, 
  it may help to disable cursor optimization for your program with 
  the parameter *--no-optimized-cursor*.

* If terminal detection did not work, it is useful to turn off the terminal 
  detection with the parameter *--no-terminal-detection*.

* If the color palette redefinition causes problems, you can switch off 
  the color mapping with the parameter *--no-color-change*.


How can I redraw the terminal?
------------------------------

With Ctrl-L you can clear and redraw all information on the terminal screen. 
This may be necessary if a background program overwrites the displayed 
widgets with other characters.

