pax_global_header00006660000000000000000000000064144325033520014513gustar00rootroot0000000000000052 comment=2d5e0be011eda5489357ff8bd698acdc7bde17c9 finalcut-0.9.0/000077500000000000000000000000001443250335200133265ustar00rootroot00000000000000finalcut-0.9.0/.codacy.yml000066400000000000000000000003031443250335200153650ustar00rootroot00000000000000--- engines: duplication: enabled: true exclude_paths: - 'final/font/**' - 'test/**' exclude_paths: - 'debian/**' - 'doc/**' - 'misc/**' - 'm4/**' - 'scripts/**' finalcut-0.9.0/.codedocs000066400000000000000000000001431443250335200151100ustar00rootroot00000000000000PROJECT_NAME = "FINAL CUT" EXCLUDE = doc, misc, m4, scripts, examples EXCLUDE_PATTERNS = */test/* finalcut-0.9.0/.editorconfig000066400000000000000000000012701443250335200160030ustar00rootroot00000000000000# EditorConfig helps maintain consistent coding styles # for multiple developers working on the same project # across various editors and IDEs. # # http://editorconfig.org root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true max_line_length=72 [ChangeLog] trim_trailing_whitespace = false [*.txt] trim_trailing_whitespace = false [*.md] trim_trailing_whitespace = false # Domain-Specific Properties [*.h] curly_bracket_next_line = true spaces_around_operators = true indent_brace_style = Allman [*.cpp] curly_bracket_next_line = true spaces_around_operators = true indent_brace_style = Allman finalcut-0.9.0/.github/000077500000000000000000000000001443250335200146665ustar00rootroot00000000000000finalcut-0.9.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001443250335200170515ustar00rootroot00000000000000finalcut-0.9.0/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000012641443250335200215460ustar00rootroot00000000000000--- name: Bug report about: Create a bug report title: '' labels: bug assignees: '' --- ## Describe the bug Give a detailed description of what the bug is. ## How to reproduce the bug? Explain step-by-step the procedure to reproduce this behavior. ## What behavior did you expect? Describe what you would expect instead. ## In which environment did the bug occur? * Which operating system do you use?
_Linux, FreeBSD, NetBSD, OpenBSD, macOS, Cygwin, or Solaris_ * Which distribution do you use? * On which CPU architecture did you test? * Which compiler in which version did you use? * Which terminal do you use? * What does the environment variable $TERM contain? finalcut-0.9.0/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011241443250335200225740ustar00rootroot00000000000000--- name: Feature request about: Make a suggestion for this project title: '' labels: enhancement assignees: '' --- ## Feature Request **Do you want to solve a problem with your feature request? Please describe it.** Describe clearly and precisely what the problem is. Example: I have an issue when [...] **Your desired solution** Describe clearly and concisely what you want to reach. **Alternatives you have considered** Describe clearly and concisely the other solutions you considered. **Additional context** Add additional context or screenshots to your feature request here. finalcut-0.9.0/.github/scripts/000077500000000000000000000000001443250335200163555ustar00rootroot00000000000000finalcut-0.9.0/.github/scripts/get_code_cov.sh000077500000000000000000000007101443250335200213320ustar00rootroot00000000000000#!/bin/sh SAVE_DIR="$PWD" run_gcov () { FILENAME="$1" GCDAFILE="${FILENAME%.cpp}.gcda" if test -f "$GCDAFILE" then gcov -lp "$FILENAME" elif test -f "./.libs/$GCDAFILE" then gcov -lp -o "./.libs/" "$FILENAME" fi } find "./test/" \ "./final/" \ -type f \ -name "*.cpp" \ -print \ | while read -r FILENAME do cd "$(dirname "$FILENAME")" \ && run_gcov "$(basename "$FILENAME")" cd "$SAVE_DIR" || exit done finalcut-0.9.0/.github/workflows/000077500000000000000000000000001443250335200167235ustar00rootroot00000000000000finalcut-0.9.0/.github/workflows/alpine.yml000066400000000000000000000017341443250335200207230ustar00rootroot00000000000000name: "Alpine Linux build" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: ubuntu-latest steps: - name: Repository checkout uses: actions/checkout@v3 - name: Install latest Alpine Linux uses: jirutka/setup-alpine@v1 with: arch: x86_64 branch: latest-stable packages: > gcc g++ make automake autoconf autoconf-archive libtool pkgconf gpm gpm-dev linux-headers ncurses-dev ncurses-terminfo cppunit - name: Test on Alpine Linux environment run: | uname -a whoami pwd g++ --version autoreconf --force --install --verbose --warnings=all automake --add-missing --copy ./configure --prefix=/usr make -j10 shell: alpine.sh {0} finalcut-0.9.0/.github/workflows/arm.yml000066400000000000000000000027311443250335200202300ustar00rootroot00000000000000name: "ARM build" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: ubuntu-latest name: Build on ${{ matrix.arch }} # Run steps on a matrix of 3 arch/distro combinations strategy: matrix: include: - arch: aarch64 - arch: armv7 - arch: armv6 steps: - name: Repository checkout uses: actions/checkout@v3 - name: Test on ARM architecture uses: uraimo/run-on-arch-action@v2 id: runcmd with: arch: ${{ matrix.arch }} distro: bullseye run: | cat /etc/os-release uname -a whoami tty || echo pwd # Install dependencies via apt-get echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections apt-get update apt-get -y install \ ca-certificates \ make \ gcc \ g++ \ gpm \ libgpm-dev \ libcppunit-dev \ libncurses-dev \ pkg-config \ libtool \ automake \ autoconf \ autoconf-archive # Build g++ --version autoreconf -v --install --force ./configure --prefix=/usr make -j10 - name: Get the output run: | echo "The uname output was ${{ steps.runcmd.outputs.uname }}" finalcut-0.9.0/.github/workflows/codeql-analysis.yml000066400000000000000000000045451443250335200225460ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. name: "CodeQL analysis" on: push: branches: [ main ] pull_request: # The branches below must be a subset of the branches above branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: analyze: name: Analyze runs-on: ubuntu-latest strategy: fail-fast: false matrix: # Override automatic language detection by changing the below list # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] language: ['cpp'] # Learn more... # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection steps: - name: Checkout repository uses: actions/checkout@v3 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # âœī¸ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language - name: Build dependencies run: sudo apt-get install autoconf-archive - name: Create configure file run: autoreconf -v --install --force - name: Create makefiles run: ./configure --prefix=/usr CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -pedantic" - name: Build run: make V=1 -j10 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 finalcut-0.9.0/.github/workflows/coverage.yml000066400000000000000000000036621443250335200212500ustar00rootroot00000000000000name: "Code coverage" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: analyze: runs-on: ubuntu-latest env: COVERALLS_REPO_TOKEN: "${{ secrets.COVERALLS_REPO_TOKEN }}" steps: - name: Repository checkout uses: actions/checkout@v3 - name: Before_install run: | lsb_release -a uname -a whoami tty || echo pwd - name: Install dependencies via apt-get run: | sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get -y install \ ca-certificates \ lcov \ gcc \ g++ \ gpm \ libgpm-dev \ libcppunit-dev \ autoconf-archive - name: Install coveralls-lcov run: sudo gem install coveralls-lcov - name: Build with with gcov run: script -e -c "./build.sh coverage" - name: Generate lcov.info and publish to coveralls.io run: | lcov --compat-libtool --directory . --capture --output-file lcov-all.info lcov --remove lcov-all.info '/usr/include/*' './include/*' --output-file lcov.info lcov --list lcov.info rm -f lcov-all.info coveralls-lcov --branch=${GITHUB_REF##*/} --repo-token "${{ secrets.COVERALLS_REPO_TOKEN }}" lcov.info - name: Codecov run: | ./.github/scripts/get_code_cov.sh curl https://keybase.io/codecovsecurity/pgp_keys.asc \ | gpg --no-default-keyring --keyring trustedkeys.gpg --import # One-time step curl -Os https://uploader.codecov.io/latest/linux/codecov curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM.sig gpgv codecov.SHA256SUM.sig codecov.SHA256SUM shasum -a 256 -c codecov.SHA256SUM chmod +x codecov ./codecov finalcut-0.9.0/.github/workflows/coverity-scan.yml000066400000000000000000000046101443250335200222350ustar00rootroot00000000000000name: "Coverity Scan" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: analyze: runs-on: ubuntu-latest env: COVERITY_SCAN_BRANCH_PATTERN: "${{ github.ref}}" COVERITY_SCAN_NOTIFICATION_EMAIL: "guru.mail@muenster.de" COVERITY_SCAN_PROJECT_NAME: "${{ github.repository }}" # Set in repo settings -> secrets -> repository secrets COVERITY_SCAN_TOKEN: "${{ secrets.COVERITY_SCAN_TOKEN }}" CURRENT_REF: "${{ github.ref }}" steps: - name: Repository checkout uses: actions/checkout@v3 - name: Before_install run: | lsb_release -a uname -a whoami tty || echo pwd - name: Download coverity scan build tool run: | wget -q https://scan.coverity.com/download/cxx/linux64 \ --post-data "token=$COVERITY_SCAN_TOKEN&project=gansm%2Ffinalcut" \ -O cov-analysis-linux64.tar.gz mkdir cov-analysis-linux64 tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64 - name: Install dependencies via apt-get run: | sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get -y install \ ca-certificates \ gcc \ g++ \ gpm \ libgpm-dev \ libcppunit-dev \ autoconf-archive - name: Build with cov-build run: | export PATH=`pwd`/cov-analysis-linux64/bin:$PATH cat cov-int/scm_log.txt || echo autoreconf -v --install --force ./configure --prefix=/usr \ CPPFLAGS="-DDEBUG" \ CXXFLAGS="-g -O0 -DDEBUG -DUNIT_TEST" \ --with-unit-test cov-build --dir cov-int make V=1 -j10 - name: Submit the result to Coverity Scan run: | tar czvf finalcut.tgz cov-int curl \ --form token=$COVERITY_SCAN_TOKEN \ --form email=$COVERITY_SCAN_NOTIFICATION_EMAIL \ --form file=@finalcut.tgz \ --form version="main" \ --form description="Build submitted via github action" \ https://scan.coverity.com/builds?project=gansm%2Ffinalcut - name: Make unit test run: | script -e -c "make check" && RET=$? || RET=$? cat test/*.log || echo echo "Exit status: $RET" exit "$RET" finalcut-0.9.0/.github/workflows/cygwin.yml000066400000000000000000000023501443250335200207460ustar00rootroot00000000000000name: "Cygwin build" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: windows-latest name: Build on ${{ matrix.platform }} strategy: matrix: platform: [x86, x86_64] steps: - name: Git - auto-converting CRLF line endings into LF run: git config --global core.autocrlf input - name: Repository checkout uses: actions/checkout@v3 - name: Install Cygwin uses: cygwin/cygwin-install-action@v3 with: platform: ${{ matrix.platform }} install-dir: C:\cygwin packages: git grep make libncurses-devel gcc-core gcc-g++ automake autoconf autoconf-archive libtool pkgconf cppunit - name: Test on Cygwin environment run: | uname -a whoami pwd cygcheck -c -d # Show installed Cygwin packages g++ --version cd "$(cygpath -u $WORKSPACE_PATH)" autoreconf --force --install --verbose --warnings=all automake --add-missing --copy ./configure --prefix=/usr make -j10 shell: C:\cygwin\bin\bash.exe --login '{0}' env: WORKSPACE_PATH: "${{ github.workspace }}" SHELLOPTS: igncr finalcut-0.9.0/.github/workflows/freebsd.yml000066400000000000000000000015161443250335200210630ustar00rootroot00000000000000name: "FreeBSD build" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: ubuntu-latest steps: - name: Repository checkout uses: actions/checkout@v3 - name: Test on FreeBSD 13.1 uses: cross-platform-actions/action@v0.10.0 with: operating_system: freebsd version: '13.1' shell: bash run: | uname -a freebsd-version whoami pwd sudo env IGNORE_OSVERSION=yes pkg update -f sudo pkg install -y lang/gcc devel/autotools autotools automake autoconf autoconf-archive libtool pkgconf devel/ncurses devel/cppunit cppunit g++ --version autoreconf -v --install --force ./configure --prefix=/usr make -j10 finalcut-0.9.0/.github/workflows/macos.yml000066400000000000000000000012251443250335200205500ustar00rootroot00000000000000name: "macOS build" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: macos-latest steps: - name: Repository checkout uses: actions/checkout@v3 - name: Before_install run: | uname -a g++ --version whoami pwd - name: Install dependencies via homebrew run: | brew update brew install automake brew install autoconf-archive brew install pkg-config - name: Build run: | autoreconf -v --install --force ./configure --prefix=/usr make -j10 finalcut-0.9.0/.github/workflows/netbsd.yml000066400000000000000000000017461443250335200207350ustar00rootroot00000000000000name: "NetBSD build" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: ubuntu-latest steps: - name: Repository checkout uses: actions/checkout@v3 - name: Test on NetBSD 9.2 uses: cross-platform-actions/action@v0.10.0 with: operating_system: netbsd version: '9.2' shell: bash run: | uname -a whoami pwd export PKG_REPOS="http://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/$(uname -p)/9.0_current/All/" sudo -E pkgin clean sudo -E pkgin update # https://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/index-all.html sudo -E pkgin -y install gcc10 automake autoconf autoconf-archive libtool pkgconf cppunit export CXX=/usr/pkg/gcc10/bin/g++ $CXX --version autoreconf -v --install --force ./configure --prefix=/usr make -j10 finalcut-0.9.0/.github/workflows/openbsd.yml000066400000000000000000000016101443250335200210760ustar00rootroot00000000000000name: "OpenBSD build" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: ubuntu-latest steps: - name: Repository checkout uses: actions/checkout@v3 - name: Test on OpenBSD 7.2 uses: cross-platform-actions/action@v0.10.0 with: operating_system: openbsd version: '7.2' shell: bash run: | uname -a whoami pwd # http://ftp.openbsd.org/pub/OpenBSD/7.2/packages/amd64/ sudo pkg_add gcc-11.2.0p3 g++-11.2.0p3 automake-1.16.5 autoconf-2.71 autoconf-archive libtool pkgconf cppunit export CXX=eg++ export AUTOCONF_VERSION=2.71 export AUTOMAKE_VERSION=1.16 eg++ --version autoreconf -v --install --force ./configure --prefix=/usr make -j10 finalcut-0.9.0/.github/workflows/sigrid-publish.yml000066400000000000000000000010131443250335200223660ustar00rootroot00000000000000name: sigrid-publish on: push: branches: - "main" jobs: sigridci: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Download Sigrid CI run: "git clone https://github.com/Software-Improvement-Group/sigridci.git sigridci" - name: "Run Sigrid CI" env: SIGRID_CI_TOKEN: "${{ secrets.SIGRID_CI_TOKEN }}" run: "./sigridci/sigridci/sigridci.py --customer finalcut --system finalcut --source . --publish" finalcut-0.9.0/.github/workflows/sigrid-pullrequest.yml000066400000000000000000000007571443250335200233230ustar00rootroot00000000000000name: sigrid-pullrequest on: [pull_request] jobs: sigridci: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Download Sigrid CI run: "git clone https://github.com/Software-Improvement-Group/sigridci.git sigridci" - name: "Run Sigrid CI" env: SIGRID_CI_TOKEN: "${{ secrets.SIGRID_CI_TOKEN }}" run: "./sigridci/sigridci/sigridci.py --customer finalcut --system finalcut --source ." finalcut-0.9.0/.github/workflows/solaris.yml000066400000000000000000000014041443250335200211210ustar00rootroot00000000000000name: "Solaris build" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: macos-12 steps: - name: Repository checkout uses: actions/checkout@v3 - name: Test on Solaris 11.4 uses: vmactions/solaris-vm@v0 with: prepare: | pkg install gcc-7 pkgutil -y -i automake autoconf autoconf_archive libtool pkgconfig libcppunit1_12_1 libcppunit_dev gsed ggrep mem: 4096 run: | uname -a whoami pwd cat /etc/release PATH=/opt/csw/bin:$PATH export PATH autoreconf -v --install --force ./configure --prefix=/usr gmake V=1 -j$(nproc) finalcut-0.9.0/.github/workflows/sonarcloud.yml000066400000000000000000000037471443250335200216320ustar00rootroot00000000000000name: "SonarCloud analysis" on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 7 * * 2' jobs: build: runs-on: ubuntu-latest env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" SONAR_TOKEN: "${{ secrets.SONAR_TOKEN }}" steps: - name: Repository checkout uses: actions/checkout@v3 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Before_install run: | lsb_release -a uname -a whoami tty || echo pwd - name: Install dependencies via apt-get run: | sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get -y install \ ca-certificates \ gcc \ g++ \ gpm \ wget \ unzip \ libgpm-dev \ libcppunit-dev \ autoconf-archive - name: Build with SonarCloud run: | wget -q "https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip" unzip -q "build-wrapper-linux-x86.zip" -d "/tmp" || echo LATEST_VERSION=$(curl -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/SonarSource/sonar-scanner-cli/releases/latest 2>/dev/null \ | grep "tag_name" \ | cut -d\" -f4) wget -q "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${LATEST_VERSION}-linux.zip" unzip -q "sonar-scanner-cli-${LATEST_VERSION}-linux.zip" -d "/tmp" || echo echo "sonar.host.url=https://sonarcloud.io" >> /tmp/sonar-scanner-*/conf/sonar-scanner.properties mkdir /tmp/sonar-cache autoreconf -v --install --force ./configure --prefix=/usr /tmp/build-wrapper-linux-x86/build-wrapper-linux-x86-64 --out-dir bw-output make all /tmp/sonar-scanner-${LATEST_VERSION}-linux/bin/sonar-scanner finalcut-0.9.0/.gitignore000066400000000000000000000033051443250335200153170ustar00rootroot00000000000000*.a *.gcda *.gch *.gcno *.gcov *.la *.lai *.lib *.lo *.log *.o *.so *.trs Makefile Makefile.in /aclocal.m4 /ar-lib /autom4te.cache /compile /config.guess /config.h* /config.log /config.lt /_configs.sed /config.status /config.sub /configure /depcomp /finalcut.pc /install-sh /libtool /ltmain.sh /missing /stamp-h1 /test-driver examples/7segment examples/background-color examples/busy examples/calculator examples/checklist examples/choice examples/.deps/ examples/dialog examples/event-log examples/fullwidth-character examples/hello examples/highlight-text examples/input-dialog examples/keyboard examples/.libs/ examples/listbox examples/listview examples/mandelbrot examples/menu examples/mouse examples/opti-move examples/parallax-scrolling examples/rotozoomer examples/scrollview examples/string-operations examples/term-attributes examples/termcap examples/terminal-focus examples/timer examples/transparent examples/treeview examples/ui examples/watch examples/windows examples/xpmview final/.depend final/.deps/ final/dialog/.depend final/dialog/.deps/ final/dialog/.dirstamp final/dialog/.libs/ final/input/.depend final/input/.deps/ final/input/.dirstamp final/input/.libs/ final/.libs/ final/menu/.depend final/menu/.deps/ final/menu/.dirstamp final/menu/.libs/ final/output/.depend final/output/.deps/ final/output/.dirstamp final/output/.libs/ final/output/tty/.depend final/output/tty/.deps/ final/output/tty/.dirstamp final/output/tty/.libs/ final/util/.depend final/util/.deps/ final/util/.dirstamp final/util/.libs/ final/vterm/.depend final/vterm/.deps/ final/vterm/.dirstamp final/vterm/.libs/ final/widget/.depend final/widget/.deps/ final/widget/.dirstamp final/widget/.libs/ test/.deps/ test/.libs/ test/*_test finalcut-0.9.0/AUTHORS000066400000000000000000000000141443250335200143710ustar00rootroot00000000000000Markus Gans finalcut-0.9.0/CODE_OF_CONDUCT.md000066400000000000000000000007631443250335200161330ustar00rootroot00000000000000# Code of Conduct The FINAL CUT Project aims to be a welcoming place and we ask that everyone who interacts with the project and the larger community treat each other with dignity and respect. Individuals who do not behave in this manner will be warned and asked to adjust their behavior; in extreme cases, individuals could get excluded from the project. Examples of inappropriate behavior include profane, offensive, or prejudicial language directed at another person, vandalism, or spam. finalcut-0.9.0/COPYING000066400000000000000000001045131443250335200143650ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . finalcut-0.9.0/ChangeLog000066400000000000000000002374561443250335200151210ustar00rootroot000000000000002023-05-18 Markus Gans * Version 0.9.0 2023-04-15 Markus Gans * Terminal focus-in and focus-out events can be disabled with the --no-terminal-focus-events parameter 2023-04-08 Markus Gans * Clears the FScrollView viewport area after viewport creation or resizing 2023-04-07 Markus Gans * Processing of FStyle in print() statements is now faster because only set data bits are considered 2023-04-06 Markus Gans * Individual columns can now be shown and hidden in FListView 2023-04-01 Markus Gans * FApplication now has the ability to register mouse handler functions 2023-03-24 Markus Gans * Compile fix for clang++ 15 with std=c++20 2023-03-16 Markus Gans * Size and position changes in FDialog are now made immediately before terminal output to speed up mouse-based changes 2023-03-13 Markus Gans * Speed up the drawing of shadows and boxes 2023-02-28 Markus Gans * Fix missing deletion of no_changes and printed attributes on transparency 2023-02-24 Markus Gans * Small speed-up of the print function 2023-02-20 Markus Gans * Fixes display problems with half-covered full-width characters with color overlay * Fixes display inconsistencies that occur when a full-width character is used in combination with the terminal repeat (REP) function 2023-02-17 Markus Gans * Fixes the conflict between reducing changes and hardware scrolling 2023-02-14 Markus Gans * Fixes the problem of insufficient space on resizing in FScrollView by scrolling backwards 2023-02-08 Markus Gans * Better detection of the keypad center key 2023-02-07 Markus Gans * Keys are now identified via a hash map to speed up escape sequence searches 2023-02-04 Markus Gans * Adapted color reset for st - simple terminal * Fixes incorrect key detection caused by duplicate key sequences 2023-01-29 Markus Gans * Fixed invalid iterator on post-inserting an item in FListView * The application will now be notified when the focus changes in the terminal window, through the new onTermFocusIn() and onTermFocusOut() event methods * New methods removeColumn() and removeAllColumns() for FListView to remove columns 2023-01-22 Markus Gans * Fix focus-in and focus-out errors FComboBox and FSpinBox 2023-01-15 Markus Gans * Speed-up of the update routine for virtual terminal 2023-01-07 Markus Gans * Accelerated copying of lines with transparent characters 2023-01-05 Markus Gans * Bugfix for broken scrollbar behavior in FScrollView widget * Bugfix for infinite loop on input queue processing on exit 2023-01-04 Markus Gans * FObject now supports reverse iterators * Small improvement of the display speed 2023-01-03 Markus Gans * The way how a widget gets the focus has been changed. It is now a single step that includes sending focus events 2022-12-26 Markus Gans * Incomplete mouse sequences are no longer checked by the keyboard parser * Fixing the conflict between NOT_SET and FKey::Incomplete 2022-12-24 Markus Gans * Widget flags are now organized in a hierarchical structure 2022-12-14 Markus Gans * Simplifies the request of the encoding 2022-12-08 Markus Gans * Fixed the changes on printing of the last full-width character in a virtual window * Bugfix: getPrevCharLength() crashed on strings with a leading space 2022-12-06 Markus Gans * FLineEdit can set the alignment (left, center, or right) for the content of the entry 2022-12-04 Markus Gans * Virtual windows now use C++ smart pointers for data storage 2022-11-26 Markus Gans * Removed the deprecated method isNull() in FString 2022-11-25 Markus Gans * New helper function to update the widget text of the status bar 2022-11-20 Markus Gans * FTimer specialization for FObject in FObjectTimer 2022-11-12 Markus Gans * Direct access to a character in a print area via coordinates 2022-11-05 Markus Gans * The new class FTimer now contains all timer methods 2022-10-28 Markus Gans * Generalize text reading from terminal 2022-10-23 Markus Gans * Queuing of mouse and keyboard inputs is now implemented with a ring buffer 2022-10-20 Markus Gans * Speed-up code through more inline functions 2022-10-18 Markus Gans * To improve performance, the output buffer queue has been replaced with a ring buffer 2022-10-02 Markus Gans * Strict use of trailing return type 2022-06-13 Markus Gans * Added a unit test for the FWidget class 2022-05-29 Markus Gans * Avoiding some friend classes 2022-05-24 Markus Gans * A unit test for the FEvent class was added 2022-05-18 Markus Gans * Fixed some errors 2022-05-04 Markus Gans * Bug fixes in FLineEdit: - Swapped cursor move behavior in the methods stepCursorBackward() and stepCursorForward() - The inputText method now repositions the cursor on input and updates the change directly on the screen Thanks to Michael Lehn for reporting these issues 2022-04-17 Markus Gans * The FLineEdit and FTextView widgets got additional public methods for more control. Many thanks to Michael Lehn for the good suggestions 2022-03-01 Markus Gans * Bugfix: Since February 14, setting the input cursor for the virtual terminal did not work 2022-03-01 Markus Gans * A virtual window can now be placed above the virtual terminal 2022-02-14 Markus Gans * FVTerm::copyArea copies the data of the source area to the position of the destination area * FTermArea got methods to set the print position and to print data * Added examples/xpmview to view X PixMap (XPM) images in a terminal 2022-02-02 Markus Gans * Depending on the number of dialog windows, FDialogListMenu is now automatically enabled and disabled * FFileDialog now shows the file filter in the title bar 2022-01-29 Markus Gans * Minor bug fix for resizing dialogs * FTextView::FTextHighlight has received new constructors without length information. That allows to highlight text up to the end of the line 2022-01-21 Markus Gans * The trailing whitespaces in a FTextView line are now printed in the line buffer. This allows you to make text highlighting to the end of the line 2022-01-16 Markus Gans * Added examples/highlight-text to demonstrate text highlighting in FTextView 2022-01-15 Markus Gans * Add text highlighting for FTextView. Thanks to Michael Lehn for the idea 2022-01-12 Markus Gans * Dropdown menus are closed again on click outside the widget if there is no widget at that position (Broken since Nov 1, 2020) 2022-01-11 Markus Gans * Generalize the passing of the resize event to its parent dialog 2022-01-09 Markus Gans * Added a ring buffer to buffer unprocessed keyboard and mouse input * Added a unit test for the FVTerm class * The current mouse event is now cached in a shared_ptr 2022-01-05 Markus Gans * Sharing keyboard buffer length in FKeyboard and FMouse 2022-01-02 Markus Gans * Speed up UTF-8 input parsing 2022-01-02 Markus Gans * FTermArea now checks if there is a given terminal position in its area 2021-12-30 Markus Gans * Resetting the terminal state on resizing 2021-12-27 Markus Gans * The number of cycles has been reduced to save CPU time 2021-12-18 Markus Gans * Move the border label methods from FButtonGroup to FScrollView 2021-12-13 Markus Gans * Faster string comparison between FString, char*, std::string, wchar_t and std:wstring 2021-12-11 Markus Gans * Correct mouse event after moving a window 2021-11-16 Markus Gans * A new example demonstrates parallax scrolling with multi-layered stars 2021-11-11 Markus Gans * You can now use the constructor of the FVTerm class to specify an alternative terminal output class that must be derived from FOutput 2021-11-06 Markus Gans * Using the STL algorithms for the input fifo_buf 2021-11-01 Markus Gans * Switched to the language standard C++14 2021-10-31 Markus Gans * Version 0.8.0 2021-10-28 Markus Gans * The keyboard and timer examples now have flicker-free scrolling 2021-10-24 Markus Gans * Faster search for key strings through sorted arrays 2021-10-23 Markus Gans * Virtual windows now know their own window level * String filter for FListBoxItem 2021-10-22 Markus Gans * Change FObjectList from std::list to std::vector 2021-10-21 Markus Gans * The tab stop printing was corrected 2021-10-20 Markus Gans * Implementation of the stringPrint() method in FTermcap 2021-10-18 Markus Gans * Speed up FTermcap::paddingPrint() by assigning the putchar function only once 2021-10-12 Markus Gans * Speed up access to mouse objects in FMouseControl * The predefined escape sequences for keyboard keys are now functional again * Now, FINAL CUT also runs under GNU Hurd 2021-10-08 Markus Gans * The visibility of the FDialog title bar buttons can now be disabled 2021-10-04 Markus Gans * Preventing the focus of a container widget 2021-10-01 Markus Gans * The output buffer is now flushed before the terminal is scrolled 2021-09-29 Markus Gans * Faster FUnicode comparisons * Less string comparison in FKeyboard 2021-09-28 Markus Gans * Optimization of attribute comparisons * Reset the rdbuf of clog after deleting the logger object to prevent an invalid pointer in the rdbuf * FTermcap::getNumber now returns -1 if there is no value in the termcap database 2021-09-25 Markus Gans * New FString auxiliary function FStringCaseCompare as strcasecmp replacement * Move attribute handling from FVTerm to FVTermAttribute 2021-09-22 Markus Gans * The request for a terminal size change now occurs only once per event loop cycle 2021-09-22 Markus Gans * The individual FINAL CUT components have been moved to directories to provide a better code overview * Renaming the class FTermBuffer to FVTermBuffer, because only virtual terminal data is buffered here 2021-09-17 Markus Gans * Output optimization: Wide strings are now converted to UTF-8 strings before they are inserted into the output buffer * Key maps now store the length of the string to speed up key string parsing 2021-09-15 Markus Gans * setExitMessage is now a function without object dependencies, so it can be called from anywhere * New internal function unicode_to_utf8 which allows to convert a wchar_t to a utf-8 string 2021-09-14 Markus Gans * More local static variables are used to prevent repeated value assignments 2021-09-12 Markus Gans * The detected terminal type is now stored in FTermData 2021-09-05 Markus Gans * The methods for the physical terminal output of class FVTerm were extracted and moved to the new class FVTermOutput. The class FVTermOutput is the implementation of the abstract class FOutput. This abstraction layer can be the basis for an alternative implementation. 2021-08-01 Markus Gans * Fixed mutex deadlock in FObject 2021-07-25 Markus Gans * Function setMinimizable() to minimize FDialog windows added 2021-07-18 Markus Gans * Improved the GNU autoconf-archive check 2021-06-26 Markus Gans * Global non-constant variables are now encapsulated in classes 2021-06-19 Markus Gans * Moving the creator methods from FTerm to its own class 2021-06-16 Markus Gans * Converted the internal timer from timeval to std::chrono::time_point 2021-06-06 Markus Gans * Bug fixing in FString and FTermDetection * FTermDetection now has clean code by using FString instead of char* * Replace std::strlen with stringLength 2021-06-03 Markus Gans * Some FString optimizations 2021-05-30 Markus Gans * FString internally changed from wchar_t* to std::wstring 2021-05-24 Markus Gans * Using std::string for the attribute buffer 2021-05-22 Markus Gans * Convert FOptiMove from char[] to std::string 2021-05-13 Markus Gans * Prevent duplicate widget in the close widget list 2021-05-07 Markus Gans * Some pointers were replaced by references 2021-05-04 Markus Gans * Prevent flickering when resizing terminals or redrawing the screen via ctrl-l 2021-05-02 Markus Gans * Bugfix for sending multiple SIGWINCH signals from gnome-terminal under Wayland 2021-05-01 Markus Gans * Replace some std::bind with lambda functions 2021-04-30 Markus Gans * Fixes Linux console bug from February 20, 2021 2021-04-27 Markus Gans * Code optimization at widget focus 2021-04-24 Markus Gans * Fixed mutex deadlock in FLogger 2021-04-21 Markus Gans * Fixes the detection of the terminal size after a SIGWINCH signal 2021-04-18 Markus Gans * Decoupling the FWidget and FWindow classes from FVTerm * Avoid redrawing widgets when show() is called multiple times * Readjustment of the root widget when the terminal size is changed 2021-04-11 Markus Gans * Better support for kitty terminals 2021-03-31 Markus Gans * argv is now stored internally as a std::vector container 2021-03-30 Markus Gans * Stops terminal refresh during dialog resizing until all child widgets have been redrawn 2021-03-28 Markus Gans * Widget now have the virtual method initLayout() to set the widget layouts automatically before the first drawing on the terminal is done. Also texts in full-width characters, whose character width is determined automatically, should be calculated here. 2021-03-15 Markus Gans * Dynamic adjustment of the terminal refresh rate between 5 and 60 Hz 2021-03-09 Markus Gans * Implementation of an own padding print method for sending control codes to the terminal 2021-02-28 Markus Gans * Removing the termcap library from the header files so that FINAL CUT programs are not affected by the preprocessor #define macros. Many thanks to Zhenyu Zhang for this optimization suggestion 2021-02-24 Markus Gans * Fixed the incorrect display on terminals without UTF-8 character encoding 2021-02-20 Markus Gans * Optimize terminal output buffer queue with differencing for strings, and control characters and control sequences 2021-02-09 Markus Gans * Added support for combined unicode characters * Added a unit test for the FTermBuffer class * Added a unit test for the FTterm functions 2020-12-31 Markus Gans * Refactoring to scoped enumerations 2020-11-18 Markus Gans * The terminal update rate is now limited to 60 Hz 2020-11-14 Markus Gans * Version 0.7.1 * Bugfix: The cursor position was not changed anymore if there was no change to the content * Forcing a direct update for faster terminal output 2020-11-07 Markus Gans * Version 0.7.0 2020-11-04 Markus Gans * Elimination of unnecessary terminal flushes 2020-11-03 Markus Gans * Use FIONREAD to get the number of characters available for reading on stdin 2020-11-02 Markus Gans * Non-blocking reading before timeout after keystroke * Every fourth event processing causes a terminal flush * Call of TIOCLINUX only in the Linux console 2020-11-01 Markus Gans * Now FINAL CUT queues keyboard and mouse input to speed up the processing of widget events 2020-10-22 Markus Gans * Repair terminal update skipping 2020-10-20 Markus Gans * For fast mouse movements the keyboard interval was increased from 13.3 to 30 Hz 2020-10-19 Markus Gans * Optimize the terminal output speed 2020-10-17 Markus Gans * Fixes unit test segfault 2020-10-11 Markus Gans * Solaris build fix * Added saving and restoring xterm titles to the stack for vte terminals * Menu key - activates the menu bar * Shift-Menu - opens the dialog menu 2020-10-08 Markus Gans * Better keyboard support for urxvt terminals * Screen reports (like Secondary DA) are now read directly * Report Cursor Position (DECXCPR) support * FListView and FListBox now have direct access to the list of client elements via data() 2020-10-05 Markus Gans * Now hides the input cursor when a widget gets hidden 2020-10-04 Markus Gans * Replaces some C-style arrays with std::array * Now you can use the arrow keys to move a window into the visible area * Removes FData memory leak in FListBoxItem and FListViewItem 2020-09-27 Markus Gans * An explanation of the widget tree was added to the document of the first steps 2020-09-26 Markus Gans * FData improvements * The number of FObject children can now be limited with setMaxChildren() * FApplication can now have no more than one child widget 2020-09-25 Markus Gans * std::clog now streams everything to the FLogger object * Added a unit test for the FData class 2020-09-23 Markus Gans * Bugfix: empty FString() + wchar_t 2020-09-22 Markus Gans * Bugfix in FDialog::setSize(): Automatic size adjustment and simultaneous widget movement are now possible. 2020-09-18 Markus Gans * The generic data type FDataPtr is now deprecated and was completely replaced by the template class FData 2020-09-11 Markus Gans * Fixes a problem with mouse input in Cygwin in non-blocking read mode 2020-09-08 Markus Gans * Speed up the reaction time of the gpm mouse * FListView now correctly adjusts the size of the scrollbar, when expanding and collapsing by double-clicking 2020-08-30 Markus Gans * Adding Windows Terminal detection 2020-08-15 Markus Gans * The call of the function setNonBlockingRead() resulted in a high CPU load in idle mode. Thanks to Pavel Stehule for reporting this problem. 2020-08-11 Markus Gans * New callback backend was implemented. Callback functions with any number of arguments are now possible. 2020-07-19 Markus Gans * API: Some method name changes: FObject::delOwnTimer() -> FObject::delOwnTimers() FObject::delAllTimer() -> FObject::delAllTimers() FWidget::delCallbacks() -> FWidget::delAllCallbacks() 2020-07-08 Markus Gans * New data wrapper class FData 2020-07-06 Markus Gans * Add a document that describes how to create user themes 2020-06-11 Markus Gans * New widget FBusyIndicator to indicate background activity * Added example/busy to demonstrate the functionality of this widget 2020-06-07 Markus Gans * The --log-file parameter stores log output to any file. The file can be viewed directly on another terminal with "tail -f". 2020-06-06 Markus Gans * Now, the terminal is not initialized before the method show() is called. Or you force it explicitly via the FApplication object. * Simplification of FMouse::createMouseObject() 2020-05-30 Markus Gans * With the two new methods FApplication::setDarkTheme() and FApplication::setDefaultTheme() you can now change the theme within an application. An example can be found in examples/ui via the menu items "View" -> "Dark mode". 2020-05-29 Markus Gans * Adding a dark theme. Can be activated with the --dark-theme parameter. 2020-05-28 Markus Gans * FColorPalette now also uses polymorphism, so you can now easily create your own color palette theme 2020-05-26 Markus Gans * FWidgetColors now uses polymorphism, so you can now easily create your own widget color theme * FApplication has got the new virtual method processExternalUserEvent() for user code 2020-05-24 Markus Gans * New class FStringStream implements input and output operations on FString based streams * Fixed memory leak in FString move assignment operator 2020-05-21 Markus Gans * Fixed the event queue in FApplication 2020-05-16 Markus Gans * More direct access to the static FTerm functions 2020-05-13 Markus Gans * The new class FLogger for logging, which can be redirected to different I/O channels * Adding the event-log example to show the logging functionality 2020-05-02 Markus Gans * Transfer of all termcap functions into the FTermcap class 2020-04-28 Markus Gans * Adding the missing method getClientSize() * Static code for the special built-in key sequences 2020-04-15 Markus Gans * Better support of general arrow keys * Improved event handling code 2020-04-13 Markus Gans * Several small code improvements 2020-04-09 Markus Gans * A dialog can now be displayed without a framing border. Many thanks to basedtho for this tip 2020-03-22 Markus Gans * A small benchmakt test was added to the Rotozoomer example 2020-03-08 Markus Gans * A rotozoomer example was added to demonstrate the drawing speed of FINAL CUT 2020-03-07 Markus Gans * Fixes keyboard input buffer problem when opening a modal dialog * Exit the move-resize-mode when the close confirmation dialog is displayed 2020-03-05 Markus Gans * Unbuffered reading of keystrokes for better latency * Mouse adjustments when resizing an rxvt terminal 2020-02-25 Markus Gans * New command line switch "--no-terminal-data-request" to disable font and title determination 2020-02-19 Markus Gans * Some small code improvements * SGRoptimizer improved 2020-02-16 Markus Gans * Printing a FStyle object allows you to change video attributes 2020-02-13 Markus Gans * Rename setTransShadow() to setColorOverlay() 2020-02-11 Markus Gans * Fix collapse() and expand() in FListViewItem() 2020-02-09 Markus Gans * Adding a tty check for stdin * An application structure diagram was added to the document of the first steps 2020-02-04 Markus Gans * Fix in FListViewIterator * Add screenshorts to the first steps document 2020-02-02 Markus Gans * The methods clear() and remove() were added to FListView * Add some const type qualifiers * A small GNU autoconf-archive check 2020-01-12 Markus Gans * Add a "widget layout" chapter to the first steps document 2020-01-09 Markus Gans * With setText() and clearText() the text in the edit line can be changed without changing the content of the combo box * The setCurrentItem() method was added to the FComboBox widget class. Thanks cybin for the sample code 2020-01-03 Markus Gans * Illustrations to explain the widget layout 2019-12-31 Markus Gans * The new SGRoptimizer class allows several consecutive parameters from the SGR (Select Graphic Rendition) attributes to be combined into one 2019-12-23 Markus Gans * Correction for height and width alignment in adjustSize() * Better setSize() implementation in some widgets 2019-12-20 Markus Gans * Fixed the drawing of FLabel widget with the default size of 1×1 character. Thanks to terranpro for reporting this issue 2019-12-16 Markus Gans * New widget class FComboBox to provide a dropdown list with an input field 2019-11-17 Markus Gans * Revision of FString number input stream 2019-11-16 Markus Gans * New widget class FSpinBox to provide spin boxes 2019-11-06 Markus Gans * Improved display of the NewFont midline 2019-11-03 Markus Gans * Newfont specialization for 8x16 and 9x16 pixel character * Fixes the display of reverse characters on the 16 color Linux console 2019-10-28 Markus Gans * Unicode support for 8x16graph font 2019-10-20 Markus Gans * New method setInputType() in FLineEdit that allows to obscure password entries * FAcceleratorList reimplemented as non-pointer 2019-10-15 Markus Gans * Version 0.6.0 2019-10-13 Markus Gans * Compile fix for Cygwin and Linux on arm architectures * A small color palette optimization * Corrected east asian ambiguous character width for OpenBSD, NetBSD, FreeBSD and Solaris 2019-10-05 Markus Gans * Internal redesign of the callback call * Mapping of key functions in an associative container to simplify onKeyPress() in FListBox, FListView, FTextView and FScrollView 2019-10-01 Markus Gans * Replacing null-terminated wide strings with FString objects * Fix for getColumnWidth() with newfont character 2019-09-29 Markus Gans * Streaming into an FTextView() object * Fixes the streaming of empty FString objects into a stream with a width > 0 * The FString operator [] now returns a null character ('\0') if the position is equal to the string length 2019-09-28 Markus Gans * Support for displaying full-width characters (2 columns wide) on the terminal. This is particularly important for the correct display of CJK characters 2019-09-16 Markus Gans * Improve FStartOptions implementation 2019-09-08 Markus Gans * Remove the lines of the #pragma pack() directive from the code because they caused a misaligned address 2019-09-06 Markus Gans * Outsourcing the initialization data to a separate struct 2019-09-04 Markus Gans * The Cygwin and Linux console do not use cp437 character encoding by default anymore 2019-09-01 Markus Gans * Removing public + protected data members from classes 2019-08-25 Markus Gans * More use of direct initializations 2019-08-18 Markus Gans * Solved problem detecting terminal size on quick changes * Update VTerm information only in case of changes * Fixes print() << FPoint() behavior in FScrollView 2019-08-11 Markus Gans * FRect has now got a scaleBy() method * Convert drawBorder() to a non-member function using FRect * Converts getHotkeyPos() for sharing into a non-member function 2019-08-10 Markus Gans * Pitch and duration of system speaker can now be changed on OpenBSD 2019-08-07 Markus Gans * Fixes the Cygwin build 2019-08-04 Markus Gans * Reduce the number of interface parameters 2019-07-31 Markus Gans * Unit test for the move assignment operator and move constructor in FPoint, FSize and FRect 2019-07-28 Markus Gans * FreeBSD can now change the frequency and duration of the pc speaker signal * Added a unit test for the FTermFreeBSD class to test the FreeBSD console 2019-07-21 Markus Gans * Reduce include entries in the header files 2019-07-14 Markus Gans * Reduces the use of raw loops * Add a unit test for FTermOpenBSD to test the OpenBSD and NetBSD console 2019-06-30 Markus Gans * Expanding the unit test for FTermLinux * Update the cp437 unicode map * Reducing the special cases for Solaris 2019-06-19 Markus Gans * Add a unit test for FTermLinux with a Linux console emulation and a dedicated FSystem test instance 2019-06-12 Markus Gans * Fixes problem with scroll bar view after first draw 2019-06-02 Markus Gans * Avoid drawing the scroll bars if the widget is non-visible 2019-05-27 Markus Gans * Use the Singleton design pattern to get a single object instance via FTerm 2019-05-26 Marek Habersack * Fix a segfault when processing input to empty FListView 2019-05-17 Markus Gans * Move system calls to the new class FSystem 2019-04-27 Markus Gans * Add the reserve() method to FListBox to increase the capacity of the list * Use shrink_to_fit() to save memory space 2019-03-24 Markus Gans * Add a "scroll view" chapter to the first steps document 2019-02-28 Markus Gans * Add an lambda expression callback example to the first steps document 2019-02-24 Markus Gans * FLineEdit now has the ability to define a character input filter via regular expression (regex) * Now FLineEdit can define a maximum character length for the input * The cursor position can now be set directly in FLineEdit * Added the 7-segment example to demonstrate the use of FTermBuffer and FLineEdit input filters 2019-02-07 Markus Gans * Add a "dynamic layout" chapter into the first steps document 2019-01-30 Markus Gans * Printing an FColorPair object can change the foreground and background color 2019-01-27 Markus Gans * The print command can now have an FPoint object as a parameter to set the cursor position * Refactoring of the FProgressbar drawing methods 2019-01-24 Markus Gans * Refactoring of some methods in FVTerm and FDialog 2019-01-21 Markus Gans * More accurate interfaces through the strict use of FPoint() and FSize() 2019-01-16 Markus Gans * New class FSize for storing dimensions 2019-01-12 Markus Gans * Refactoring FFileDialog::fileOpenChooser * Refactoring FFileDialog::fileSaveChooser * Refactoring FListBox::init() * Refactoring FListView::init() * Refactoring FTextView::init() * Refactoring FTermXTerminal::resetXTermForeground() * Refactoring FTermXTerminal::resetXTermBackground() * Refactoring FTermXTerminal::resetXTermCursorColor() * Refactoring FTermXTerminal::resetXTermMouseForeground() * Refactoring FTermXTerminal::resetXTermMouseBackground() * Refactoring FTermXTerminal::resetXTermHighlightBackground() 2019-01-11 Markus Gans * Generalize hide() method 2019-01-09 Markus Gans * Improvement in widget focusing * Better widget visibility handling with the methods hide() and show() 2019-01-05 Markus Gans * Use of initializer_list for FListBox, FListView and FTextView 2019-01-04 Markus Gans * Use the final specifier 2019-01-03 Markus Gans * Improved PC encoding for Cygwin and Linux * Integration of an output filter to replace missing characters * Better Linux console support for UTF-8 encoding (Default is PC charset encoding) * Better background color for all terminals with a fixed color palette 2018-12-31 Markus Gans * Use the override specifier 2018-12-30 Markus Gans * Cygwin compiled fix for C++11 2018-12-29 Markus Gans * Text scrolling in FTextView was broken since February 17th! * Replace redundant FString code with templates 2018-12-28 Markus Gans * Add the assignment operator (=) for FButton to set the button text * Corrected shortening of overlong texts in the title bar of FDialog * Add a "signals and callbacks" chapter into the first steps document 2018-12-25 Markus Gans * Add a "event processing" chapter into the first steps document 2018-12-24 Markus Gans * Events can not only be sent to FWidgets, but also to FObjects * New event FUserEvent for user-defined events 2018-12-19 Markus Gans * Use of smart pointers * Add a "memory management" chapter into the first steps document 2018-12-17 Markus Gans * Improve FButton mouse click animation * Minor data type corrections * Reactivate the event queue 2018-12-15 Markus Gans * Use of the C++11 auto specifier in the program code * Code reduction by using of range-based for loop * The example program for video attributes now replaces the switch statement with a vector of lambda expressions 2018-12-09 Markus Gans * Better handling of the scroll bar maximum * Deactivate copy constructor and assignment operator with "= delete" * Use nullptr instead of 0 to initialize a pointer values 2018-12-06 Markus Gans * Easier handling of fc::SpecialCharacter 2018-12-01 Markus Gans * Switched to the language standard C++11 * Use delegated constructors and in-class default member initializers 2018-12-01 Markus Gans * Improved gpm wheel mouse support * Fix compile in optimization level 2 for newer gcc 2018-11-27 Markus Gans * Correct vertical scroll bar position after sorting in FListView 2018-11-25 Markus Gans * Version 0.5.0 * Namespace fix in FTermFreeBSD and FTermOpenBSD * Fix compiler warning on non-x86 architectures 2018-11-24 Markus Gans * Improved Sun Microsystems workstation console quirks * Handling environment variables with numbers in FTerm * Memory management fix in example program transparent 2018-11-21 Markus Gans * New type FKey for key inputs * The integer type of FPoint and FRect changed from short to int 2018-11-18 Markus Gans * The FListViewItem class now provides checkable list view items * Adding the checklist example to demonstrate the checkable FListViewItems * A checkable FListViewItem now shows the input cursor 2018-11-12 Markus Gans * Clicking on the column header in FListView now changes the sort order 2018-11-10 Markus Gans * FListView now has a sort indicator to display the sort order 2018-11-07 Markus Gans * Use new type FColor for color values 2018-11-05 Markus Gans * FButton now uses the widget flags directly 2018-11-04 Markus Gans * Widget flags are now stored in a bit field 2018-11-03 Markus Gans * New method rgb2ColorIndex() to converts a 24-bit RGB color to a 256-color compatible approximation 2018-11-01 Markus Gans * Moved FTerm debug access methods to FTermDebugData 2018-10-29 Markus Gans * FTerm is now a data member of FVTerm * Fix FListBox prevListItem() * Setting the value can_change_color_palette in FTermcapQuirks 2018-10-26 Markus Gans * Building Fix for a negative value check (gcc < 4.8) * Adding the capacity() method to the FString class 2018-10-21 Markus Gans * Moving static attributes from FApplication to FWidget 2018-10-17 Markus Gans * Changed more variables from int to std::size_t 2018-10-14 Markus Gans * A width or height can not be negative. For that reason the change from int to std::size_t * FString fix for 32-bit architectures 2018-10-13 Markus Gans * Avoid using dynamic_cast so that you can compile Final Cut without Run-Time Type Information (RTTI). Thanks to user1095108 for reporting that. 2018-10-11 Markus Gans * FKeyboard now uses references for keyboard buffer passing 2018-10-09 Markus Gans * Terminal detection for newer vte libraries (>= 0.53.0) 2018-10-08 Markus Gans * Move all termcap code into FTermcap * Some small code splits 2018-10-05 Markus Gans * Remove redundant program code from FString 2018-10-03 Markus Gans * At the end of the lifetime of an FMenuItem object, delete its entry from the object list of the parent object * Reduce the use of the new operators in the examples * Adding a unit test for the FTermData class 2018-10-01 Markus Gans * Extract FTerm data members into the data class FTermData 2018-09-28 Markus Gans * FListView now has the ability to sort by columns 2018-09-27 Markus Gans * Move time event processing from FApplication to FObject 2018-09-26 Markus Gans * The FListViewItem class now has a getData() and a setData() method similar to the FListBoxItem class. 2018-09-24 Markus Gans * Stricter use of the keyword virtual * Add a first steps document 2018-09-20 Markus Gans * Added pkg-config file finalcut.pc * The entire library source code is now encapsulated under the namespace finalcut. All examples and tests have been modified to fit the namespace. 2018-09-16 Markus Gans * Implement a ttytype test for the FTermDetection unit test 2018-09-14 Markus Gans * Added unit test for FTermDetection with a terminal simulation for common terminals * Some minor terminal detection bug fixes 2018-09-12 Markus Gans * Removes the deprecated keyword "register" from the source code 2018-09-02 Markus Gans * Fix mouse wheel behavior over horizontal scroll bars in FTextView * Some small code improvements 2018-09-01 Markus Gans * Compiles now with newer gcc 2018-08-31 Markus Gans * Fixed a problem for a non-debug compilation 2018-08-08 Markus Gans * Added unit test for FTermcapQuirks 2018-07-29 Markus Gans * Added numeric Keypad [/], [*], [-], [+] support * Handling of keys that are substrings of other keys * More tests in FKeyboard unit test 2018-07-27 Markus Gans * The array for keyboard input of UTF-8 characters was not long enough for 4 bytes of UTF-8 codes. * More tests in FKeyboard unit test 2018-07-22 Markus Gans * Added unit test for FKeyboard 2018-07-15 Markus Gans * Keyboard functions are now in a separate class * Fix Parameter passing in term::init_OptiAttr 2018-07-08 Markus Gans * Extension of the unit test of FOptiMove 2018-07-01 Markus Gans * All in FOptiMove required termcap values can now be passed with a single struct 2018-06-25 Markus Gans * All termcap values required in FOptiAttr can now be passed with a single struct 2018-06-17 Markus Gans * Added special console options for FreeBSD, NetBSD and OpenBSD 2018-06-12 Markus Gans * Linux functions from FTerm moved into the FTermLinux class 2018-05-27 Markus Gans * Move FreeBSD, NetBSD and OpenBSD functions to separate classes 2018-05-20 Markus Gans * Methods outsourcing from FTerm to FTermXTerminal 2018-05-06 Markus Gans * Some protected data members in FTerm moved to private 2018-05-03 Markus Gans * Fix resetColorMap in FTerm 2018-05-02 Markus Gans * Outsourcing of data from FTerm to the classes FTermios, FTermDetection and FTermcapQuirks 2018-04-19 Markus Gans * Placing the terminal types in FTerm in a separate structure 2018-04-15 Markus Gans * Fake-reverse bugfix in FOptiAttr * Strict use of fc::colornames in FOptiAttr * Stream support for FPoint and FRect 2018-04-11 Markus Gans * Remove Cygwin bold color quirks fix in FOptiAttr * Added unit test for FOptiAttr 2018-04-08 Markus Gans * Improved Linux terminal quirks * Improvement in class FOptiAttr 2018-04-02 Markus Gans * Improved cygwin terminal quirks * Optimized character set switching in FOptiAttr 2018-03-30 Markus Gans * Added unit test for FOptiMove 2018-03-28 Markus Gans * Add boundary check to FOptiMove 2018-03-25 Markus Gans * Added unit test for the mouse classes * Fixed small parsing errors with mouse events 2018-03-17 Markus Gans * Added unit test for FObject * Some minor bug fixes in FObject 2018-03-13 Markus Gans * Added unit test for FRect 2018-03-11 Markus Gans * Added unit test for FPoint 2018-03-10 Markus Gans * Unit tests for the FString class completed * Minor bug fixes in FString 2018-02-25 Markus Gans * First CppUnit tests implemented 2018-02-22 Markus Gans * Generalize mouse event passing in FMenuItem 2018-02-19 Markus Gans * Refactoring FTerm::init_termcaps * Refactoring FTerm::init_encoding 2018-02-18 Markus Gans * Avoid scroll bar overshooting * Refactoring FListView::onMouseMove * Refactoring FDialog::initDialogMenu 2018-02-17 Markus Gans * Generalize scroll functions in FTextView * Refactoring FButtonGroup::drawLabel * Refactoring FToggleButton::drawLabel 2018-02-11 Markus Gans * Refactoring FWidget::focusNextChild and FWidget::focusPrevChild * Refactoring FListView::onWheel * Refactoring FListView::drawColumnLabels * Refactoring FTerm::getSystemTermType * Rename getTermName() to getTermFileName() 2018-02-10 Markus Gans * Refactoring FOptiMove::verticalMove and FOptiMove::horizontalMove * Refactoring FVTerm::getCharacter * Refactoring FWidget::drawBorder 2018-02-02 Markus Gans * Avoids flickering when redrawing a focused widget 2018-01-31 Markus Gans * Refactoring FSwitch::drawCheckButton * Refactoring FWidget::redraw * Refactoring FMessageBox::init * Refactoring FFileDialog::init 2018-01-30 Markus Gans * Refactoring FLabel::draw * Refactoring FFileDialog::readDir 2018-01-28 Markus Gans * Refactoring FApplication::processKeyboardEvent * Shorter methods and a fix for recreating new windows in the window example 2018-01-25 Markus Gans * UTF-8 fix for Solaris 2018-01-24 Markus Gans * Fixes compiler errors for latest Cygwin versions * Widget color scheme settings moved to a separate class * The color palette redefinition now has its own class 2018-01-21 Markus Gans * The Final Cut can now also be compiled under Cygwin * Fixed bug in FScrollView::scrollTo * Refactoring FStatusBar::drawKeys * Refactoring FListView::drawListLine 2018-01-17 Markus Gans * Small array optimizations in the examples 2018-01-14 Markus Gans * Mouse functions are now in a separate class 2018-01-05 Markus Gans * Refactoring FVTerm::restoreVTerm * Fixed buffer size in FOptiMove 2018-01-03 Markus Gans * Refactoring FOptiMove::relativeMove * Refactoring attribute settings in FOptiAttr * Refactoring FTerm::parseKeyString and timeout settings 2018-01-02 Markus Gans * Refactoring of secondary device attributes parsing * Small menu improvements 2017-12-31 Markus Gans * Refactoring of the FListBox mouse event handler * Refactoring of the FMenuBar mouse event handler * Replace the switch-case in the calculator example by an STL map with method pointers 2017-12-29 Markus Gans * Refactoring of the FDialog mouse event handler 2017-12-27 Markus Gans * Generalize scroll functions in FScrollView * Refactoring FScrollbar::drawBar * Refactoring FLineEdit::onKeyPress * Refactoring FMenu::onKeyPress * Refactoring FDialog::onKeyPress * Refactoring FDialog::drawTitleBar * New FDialog methods moveUp(), moveDown(), moveLeft(), moveRight(), reduceHeight(), expandHeight(), reduceWidth(), and expandWidth() 2017-12-25 Markus Gans * Refactoring FButton::draw * Passing more strings by reference 2017-12-21 Markus Gans * Refactoring FMenuBar::drawItems * (de)allocation functions in FTerm 2017-12-19 Markus Gans * Refactoring FMenu::drawItems 2017-12-17 Markus Gans * The Final Cut now also compiles under Solaris 2017-12-14 Markus Gans * Add Sun Microsystems workstation console support 2017-12-10 Markus Gans * Refactoring of the FMenu mouse event handler 2017-12-08 Markus Gans * More individual arithmetic operations methods in the implementation of the calculator example 2017-12-05 Markus Gans * Refactoring FApplication::processMouseEvent * Refactoring FApplication::processKeyboardEvent 2017-12-02 Markus Gans * Refactoring FListBox::drawList and FListBox::onKeyPress * Refactoring FWidget::event 2017-12-02 Markus Gans * Refactoring FApplication::linuxModifierKeyCorrection and FVTerm::updateVTerm * Fix getLinuxModifierKey() subcode value as non-const 2017-11-30 Markus Gans * Refactoring FVTerm::updateTerminalLine 2017-11-26 Markus Gans * Better code readability by splitting FOptiMove::moveCursor into sub-functions * Improved alignment of the code by changing the indentation in Boolean expressions 2017-11-25 Markus Gans * Splitting quirks in serperate methods 2017-11-24 Markus Gans * Detects Linux console font with 512 characters and reduces the number of colors to 8 * Color palette defined for 8 colors 2017-11-23 Markus Gans * Remove duplicated code from FOptiAttr::changeAttribute 2017-11-22 Markus Gans * Remove duplicated code in FVTerm::print 2017-11-19 Markus Gans * Splitting the FString example into sub-functions to make the code more comprehensible 2017-11-18 Markus Gans * Improved command line paramenter handling * New command line paramenter --no-terminal-detection * New command line paramenter --no-color-change * Splitting init_termcaps() into multiple submethods 2017-11-11 Markus Gans * Improved code coverage tests 2017-11-08 Markus Gans * Simulate invisible characters on terminals that do not support this attribute 2017-11-04 Markus Gans * Version 0.4.0 * Change license from GPL v3 to LGPL v3 2017-11-03 Markus Gans * Small NewFont improvements * Fixed bug: The window example called a callback method after the child data was deleted 2017-11-02 Markus Gans * Move fonts into the root directory 2017-10-30 Markus Gans * Fix scrollview functionality with new inheritance structure * Add a standardized close confirmation dialog * Only can now be directly integrated in programs 2017-10-29 Markus Gans * Adaptation of the inheritance diagrams in the header files * Add a standardized cb_exitApp callback method to FApplication 2017-10-27 Markus Gans * FWidget now inherits directly from FObject 2017-10-23 Markus Gans * A FListView tree branch can now be expand and collapsed with a single click 2017-10-19 Markus Gans * Optimized Color palette (less saturated colors) 2017-10-18 Markus Gans * Expand or collapse a tree element with a double-click * FListView::adjustViewport() improved 2017-10-15 Markus Gans * FObject double free prevention of fc::empty_string 2017-10-14 Markus Gans * Fixed a bug in the FObject check of parent objects * Replace the deprecated readdir_r function (CVE-2013-4237) * First implementation of a tree view in the FListView class (alpha state) 2017-10-02 Markus Gans * DECSCUSR - Set Cursor Style support for VTE >= 0.40.0 and gnome-terminal >= 3.16 * Checks if the FScrollview viewport fits into the print area 2017-10-02 Markus Gans * SGR and URXVT mouse support for coordinates greater-than 255 columns or lines * Add copyright information to the source files 2017-09-21 Markus Gans * New data type FStringList introduced * Stream and assignment operator support for FLineEdit 2017-09-20 Markus Gans * FString has now got its own streaming functionality for inbound and outbound type conversion * Added stream and assignment operator support for FLabel 2017-09-19 Markus Gans * The command line help text is now available in all applications 2017-09-17 Markus Gans * FObject has received the iterator child access methods begin() and end() * All include files were moved to a separate directory * std::scanf used now fields with width limit 2017-09-15 Markus Gans * Fix byte access in data type char_data 2017-09-11 Markus Gans * Some code improvements * Fix handling of negative numbers in FString::toLong() 2017-09-09 Markus Gans * Wrong UTF-8 string length fixed when attaching to FString 2017-09-07 Markus Gans * Type definition exported into a separate header file 2017-09-03 Markus Gans * Fixes wrong maximum line width in FListView 2017-08-26 Markus Gans * Improve code readability through spaces between the operands and the operators 2017-08-24 Markus Gans * Rename fapp.{cpp,h} to fapplication.{cpp,h} 2017-08-20 Markus Gans * Screen characters got a union structure for a faster attribute compare operation 2017-08-11 Markus Gans * Some code changes for GCC 7 * Implementation of a copy constructor for FPoint and FRect 2017-08-06 Markus Gans * Fix GNU Screen support for vte/gnome-terminals * Advanced streaming functionality for FTermBuffer and FVTerm::print() 2017-07-31 Markus Gans * New methods to retrieve or modify FListViewItem text or a FListView column text for a specific column 2017-07-28 Markus Gans * Possibility for a FListView column to set the alignment (left, center or right) 2017-07-23 Markus Gans * Check an object with isInstanceOf(...) whether it is an instance of a specified class 2017-07-18 Markus Gans * New Widget class FListView (filled with FListViewItem) to allow a multi-column data view * Add the listview example to demonstrate FListView 2017-07-11 Markus Gans * New class FTermBuffer to buffer terminal outputs * Add the possibility to print from the terminal buffer 2017-07-03 Markus Gans * Use more static const variables where it makes sense 2017-06-26 Markus Gans * FString::rtrim() and FString::left() now return an FString object with the correct character length 2017-06-18 Markus Gans * Move the dragScroll enumeration into the fc namespace 2017-06-11 Markus Gans * New method FObject::isWidget() * Non-widget objects inherit from FObjects will no longer affect the widget lists 2017-06-05 Markus Gans * The focus and active flag is set centrally in FWidget 2017-05-20 Markus Gans * Recalculate the horizontal FListBox scroll bar size on lazy conversion 2017-05-19 Markus Gans * FListBox: Import of data from a container via "lazy conversion" during item print 2017-04-23 Markus Gans * Import of data from a standard container in FListBox is now possible * The new "listbox" example shows the handling with standard containers 2017-04-17 Markus Gans * Speed up FString::setNumber() by using a decimal string lookup table * FString allocates no new memory if the size is sufficient 2017-04-15 Markus Gans * Fix unsigned integer underflow in FString::_insert() 2017-04-14 Markus Gans * The Final Cut compiles also under OpenBSD * The alt key now always generates an esc prefix on an OpenBSD and a NetBSD console 2017-04-11 Markus Gans * Enable xterm "metaSendsEscape" switch 2017-04-09 Markus Gans * The Final Cut compiles now also under NetBSD * Rename preprocessor macro names with leading underscore 2017-04-08 Markus Gans * Looking in /etc/ttys for the type of terminal 2017-04-06 Markus Gans * Change cursor style on a FreeBSD console 2017-04-05 Markus Gans * Replace non-printable characters for Tera Term and Cygwin terminal directly at start-up. Special cases in the code are no longer necessary. * New method setInsertCursorStyle() to change the appearance of a cursor 2017-04-02 Markus Gans * Remap the meta key to left alt key at runtime on the FreeBSD console for the accelerator key access (Console switching is still possible with Ctrl-Alt-F1 through Ctrl-Alt-F8) * Avoid non-printable ASCII codes < 0x1c on a FreeBSD console 2017-03-30 Markus Gans * Fixed bug: termcap "me" does not reset the alternate character set 2017-03-28 Markus Gans * Improved graphic charset pairs (vt100) for FreeBSD console 2017-03-26 Markus Gans * The Final Cut compiles now under FreeBSD * A new test program to show the termcap variables 2017-03-19 Markus Gans * Add the "mouse" example to illustrate mouse programming 2017-03-17 Markus Gans * More constant character pointers 2017-03-13 Markus Gans * Corrects directly the input cursor position on window moving 2017-03-12 Markus Gans * The FButtonGroup now has a scrolling area with on-demand scroll bars * Add the "choice" example to demonstrate the FButtonGroup auto-adjusting with on-demand scroll bars * FRect can now combine two FRect objects * The FButtonGroup got the possibility of index access to a child button. * Fixed bug in FString copy constructor 2017-03-08 Markus Gans * Improve input cursor positioning in FScrollView 2017-02-24 Markus Gans * Corrected swapped top and left offset variables in the class FVTerm 2017-02-24 Markus Gans * FListBox gets the option to save a data pointer for every FListBoxItem element * Fixes incorrect return value of FString::toString() 2017-02-19 Markus Gans * New FWidget methods setMinimumWidth(), setMinimumHeight(), setMaximumWidth() and setMaximumHeight() * FButtonGroup now inherits from FScrollView. This supports many buttons to be displayed in a smaller frame. 2017-02-18 Markus Gans * Allows a window to have more than one FScrollView widget 2017-02-07 Markus Gans * Uses termcap capability U8 to identify terminals that can't display vt100 line-drawing in UTF-8 mode 2017-01-28 Markus Gans * Allow to change the focus out from FScrollView to another widget 2017-01-26 Markus Gans * FScrollView now scrolls automatically to the focused widget 2017-01-22 Markus Gans * A FScrollView object can now have client widgets on the scrolling area 2017-01-15 Markus Gans * Virtual window gets a preprocessing handler. This allows a preprocessing method to be called before the vterm is updated. 2017-01-07 Markus Gans * Add scrollTo and scrollBy methods to FScrollView 2017-01-03 Markus Gans * FScrollView now has on-demand scroll bars * Arrow keys support for FScrollView viewport scrolling 2017-01-02 Markus Gans * The new FScrollView widget provides a scrollable viewport to change the area of interest * The scrollview example illustrates the use of FScrollView class 2016-12-28 Markus Gans * Reduce public methods in FVTerm 2016-12-27 Markus Gans * Avoid non-working tab-cursor-movements on Linux terminals with activated PC or VT100 encoding 2016-12-26 Markus Gans * Add the ability to stream text into a widget's virtual window with print() << '#' << 5; or *this << ... 2016-12-22 Markus Gans * VTerm marks printed characters for a correct determination of unchanged characters * Correct gpm detection in configure script 2016-12-18 Markus Gans * Only perform VTerm updates on terminal updates * Skipping the print of characters without changes * Combined scrollAreaForward and scrollAreaReverse with terminal scroll sequences 2016-12-15 Markus Gans * Reduce the character output by using character erase and character repeat 2016-12-11 Markus Gans * Accelerates text line drawing by clear with CSI sequences to begin or to end of the current line. 2016-11-29 Markus Gans * Restore the xterm window title and font only if it could be read before 2016-11-27 Markus Gans * Some minor bug fixes * Version 0.3.0 2016-11-26 Markus Gans * Improvements for ansi terminal emulators * Add the opti-move test program * Optimized the terminal clear screen 2016-11-20 Markus Gans * Increase speed on cygwin terminals * Improve tty settings 2016-11-13 Markus Gans * Do not draw shadows on a Linux console if not all characters are available 2016-11-12 Markus Gans * Better support for Linux terminals with 8 colors * Optimized input cursor positioning for terminals without hidden cursor * Switch locale name from "en_US" to "C" * Fix FString toLong() 2016-11-06 Markus Gans * The adjustment of xterm default colors now is configurable 2016-11-05 Markus Gans * Determine xterm maximum number of colors via OSC 4 * The method clearArea can now fill the background with certain character 2016-11-03 Markus Gans * xterm should be able to use at least 16 colors 2016-11-01 Markus Gans * The class declaration now has a consistent order 2016-10-17 Markus Gans * Refactor the VGA attribute controller access code 2016-10-15 Markus Gans * Each virtual window gets its own virtual print cursor 2016-10-14 Markus Gans * Virtual windows can now store their own offset information * Correct implementation of the move() method 2016-10-13 Markus Gans * Reduces in the code the number of friend classes 2016-10-11 Markus Gans * Separate the virtual terminal into a own class vterm 2016-10-09 Markus Gans * Remove some duplicate code 2016-10-08 Markus Gans * Add the possibility to scroll text up and down in a virtual window 2016-10-06 Markus Gans * The input cursor is now controlled by the virtual terminal 2016-10-02 Markus Gans * FStatusBar and FMenuBar use now the always-on-top window option 2016-10-01 Markus Gans * Add an always-on-top mode for window objects * New FToolTip widget to show assisted information 2016-09-30 Markus Gans * Using arrow keys to move or to resize a window 2016-09-28 Markus Gans * The size is now dynamically changeable with the mouse in a resizable window. 2016-09-26 Markus Gans * FLabel now transmits the Click events to the parent widget 2016-09-25 Markus Gans * Splitting gotoxy in printPos (local position) and printPosTerm (global terminal position) * Replacing the widget position variables by FRect objects * Rename getGeometryShadow() to getGeometryWithShadow() * Rename getGeometryGlobal() to getTermGeometry() * Rename getGeometryGlobalShadow() to getTermGeometryWithShadow() * Rename globalToLocalPos() to termToWidgetPos() * Rename getGlobalX() to getTermX() * Rename getGlobalY() to getTermY() * Rename getGlobalPos() to getTermPos() * setColor() without parameters sets the default widget colors * New methods setMinimumSize(), setMaximumSize(), setFixedSize() and setSize() 2016-09-12 Markus Gans * Activate the title bar menu with ctrl+^ 2016-09-11 Markus Gans * New zoom interaction-elements to maximize a FDialog 2016-09-08 Markus Gans * Different color when focusing the title bar button * Move clearArea() from FWidget to FTerm * Move setWidth(), setHeight() and setGeometry from FDialog to FWindow 2016-09-04 Markus Gans * FButton, FLineEdit and FProgressbar has shadow now enabled by default * FDialog has now transparent shadow as default 2016-09-03 Markus Gans * The method clearFlatBorder() replace now a double flatline with a single flatline * Add the possibility to set the double_flatline_mask for every position on all sides 2016-09-02 Markus Gans * Method setGeometry assigns now the full widget size to the double_flatline_mask (previously, it was the adjust size) 2016-08-28 Markus Gans * Remove obsolete code from FDialog * An incorrect parameter can now return an error message on program exit * Termcap S2 and S3 fallback only for the vte/gnome-terminal and the Linux terminal 2016-08-27 Markus Gans * A new inherit background option for characters * Use inherit background for the simple shadows * Updating the transparent example program 2016-08-25 Markus Gans * Use the new transparent shadow option in drawShadow() 2016-08-21 Markus Gans * Improved transparent shadow background * Add "transparent" example to demonstrate transparency 2016-08-20 Markus Gans * Switch back to the own dialog when you closing a dialog menu * switchToPrevWindow() is looking for another window if no previous window was found 2016-08-14 Markus Gans * Screen characters now have a transparent and a transparent shadow option 2016-07-31 Markus Gans * Rename setUpdateVTerm to updateVTerm * Rename clrscr to clearArea * The widget clearing method updates now only non-covered characters on the virtual terminal. 2016-07-31 Markus Gans * Resetting the local window widget focus at the end of the lifetime of a widget. * Fix method setPos in the class FRect * Add the windows example to show the window behavior 2016-07-30 Markus Gans * Delete all callbacks from a widget with delCallbacks() * Remove dialog list item callback from the associated window 2016-07-28 Markus Gans * Improvements for the window focus 2016-07-24 Markus Gans * Add missing null pointer check in FOptiAttr before dereferencing * Remove callbacks and accelerator keys from FDialogListMenu on closing of a dialog window * Execute accelerator keys only once * Improved window focus behavior 2016-07-23 Markus Gans * Add a modifier key correction for the Linux tty * Support to read meta+enter from keyboard 2016-07-16 Markus Gans * Support to read meta+tab from keyboard 2016-07-16 Markus Gans * Switch to a specific dialog with meta key + 1..9 * Add more meta key escape sequences (for putty) 2016-07-14 Markus Gans * Adding a dialog list with the entries in the chronological order of the generation 2016-07-13 Markus Gans * Bind accelerator key from the FMenuItem to the root widget 2016-07-12 Markus Gans * The status bar and the menu bar insert now the accelerator keys into the global scope of the root widget 2016-07-10 Markus Gans * Remove obsolete code from FDialog destructor * FDialog focus fix 2016-07-08 Markus Gans * Better code readability: control structures (if/else, while, switch) are now separated by a blank line. 2016-07-06 Markus Gans * Stop terminal updates during processCloseWidget() is working 2016-07-03 Markus Gans * Add the new class FDialogListMenu to switch between dialog menus * More consistent method names: rename parentWidget() to getParentWidget() 2016-06-27 Markus Gans * Fix the use-after-free bug for previous_widget 2016-06-26 Markus Gans * Bug fix for FWindow::activatePrevWindow() 2016-06-25 Markus Gans * Move processNextEvent() code into sub functions 2016-06-22 Markus Gans * Adding required updateTerminal() calls for FMenuBar 2016-06-19 Markus Gans * Clear status bar text in FMenuBar::leaveMenuBar() * Fixes some status bar update issues and focus problems 2016-06-18 Markus Gans * Improved status bar text updating at window change 2016-06-16 Markus Gans * Bug fix in FTerm updateVTerm() for updates from vdesktop * Bug fix in FDialog onWindowActive() for combined setFocus() and activateWindow() 2016-06-13 Markus Gans * Improved title bar menu integration 2016-06-12 Markus Gans * Add a title bar menu to close dialogs 2016-05-24 Markus Gans * Use nl_langinfo to determine the numeric thousands separator for Fstring::setFormatedNumber as default parameter 2016-05-22 Markus Gans * Fix for menus in modal dialogs 2016-05-16 Markus Gans * Improve adjustSize() * Implement adjustSizeGlobal() for all widgets * Don't focus menus with focusFirstChild() and focusLastChild() * Remove duplicate code 2016-05-01 Markus Gans * Better terminal identification 2016-04-30 Markus Gans * Improve 256 color terminal detection 2016-04-19 Markus Gans * Fix the missing typecast for SpecialCharacter in "ui.cpp" 2016-02-04 Markus Gans * KDE Konsole detection improved * OSC sequence support for GNU Screen and tmux 2016-01-31 Markus Gans * Better escape sequences readability through symbolic names like ESC, CSI or OSC 2016-01-24 Markus Gans * Moving widget flags into the class fc 2016-01-17 Markus Gans * Moving events into the class fc * Avoid height and width underflow in adjustSize() * Fix default color handling on Cygwin and Linux terminals 2016-01-10 Markus Gans * Better default color handling in FOptiAttr 2016-01-07 Markus Gans * Add the new class FOptiAttr to control video attributes and colors for output on terminals 2015-12-23 Markus Gans * Add video attribute support for dim (half-bright) and italic * An example program to test video attributes on your terminal 2015-12-20 Markus Gans * Add the possibility to switch off the cursor optimization for bad ANSI-terminal implementations like HyperTerminal (e.g. horizontal absolute position (ch) has there no function) * Now you can activate the menu with ctrl+space, too. (For terminals with no meta key support) 2015-12-20 Markus Gans * Bug fix in FTerm updateVTerm() for updates from vdesktop * Add raiseWindow() to FMenuBar::leaveMenuBar() * Fix allocation of null strings with the FString = operator * Fix for non printable characters in Cygwin and TeraTerm * Fix missing eat_newline_glitch (xn) in TeraTerm 2015-12-19 Markus Gans * Add delOwnTimer() for FObject * Close sub-menu on right and middle click * Version 0.2.0 2015-12-18 Markus Gans * Optimize menu example * More string types for FString relational operators 2015-12-16 Markus Gans * Avoid to show menus outside of the screen 2015-12-12 Markus Gans * Improve sub-sub-menu handling 2015-12-10 Markus Gans * PC encoding: Avoid to print ASCII sign 0x00..0x1f in xterm * Newfont Bullet sign 2015-12-08 Markus Gans * Add "menu" example to demonstrate the behavior from FMenuBar, FMenu, FMenuItem, FCheckMenuItem and FRadioMenuItem widgets. * Show status bar messages, if no keys are available. 2015-11-29 Markus Gans * Better handling of empty strings in FLineEdit and FButton * Add a sub-menu to the "ui.cpp" example 2015-11-25 Markus Gans * Small menu improvements 2015-11-24 Markus Gans * Improved mouse and keyboard handling in sub-menus 2015-11-22 Markus Gans * Add sub-menu support 2015-11-19 Markus Gans * Add the missing resetXTermHighlightBackground method 2015-11-15 Markus Gans * Add two new classes FCheckMenuItem and FRadioMenuItem for menu check marks and menu option marks (bullets) 2015-11-12 Markus Gans * Improve menu accelerator keys * Shows accelerator keys on the right side of the FMenu. 2015-11-08 Markus Gans * Activate the previous window in case if the menu is open and the mouse click has activated no window. 2015-11-07 Markus Gans * Improved menu focus handling * Menu supports newfont 2015-11-05 Markus Gans * Menu bar navigation without menu drop down 2015-11-03 Markus Gans * Improve keyboard shortcut handling in menus 2015-11-01 Markus Gans * First working version of an application menu, it uses the new classes FMenuBar, FMenu and FMenuItem (alpha state) 2015-10-29 Markus Gans * Support for the menu key 2015-10-23 Markus Gans * Color setting improvements 2015-10-22 Markus Gans * Make cursor visibility more standards compliant. 2015-10-18 Markus Gans * Hidden windows are now non-clickable 2015-10-17 Markus Gans * More faster header inline code * Improve getXTermFont() and getXTermTitle() * Newfont characters are now printable in FLabel, FMenuBar and FMenu. 2015-10-16 Markus Gans * Fixed: calculator behavior for negative values in trigonometric functions 2015-10-13 Markus Gans * Reduce the number of getParent() function calls for print operations 2015-10-11 Markus Gans * Improve attribute setting for bold, reverse and underline output * Better support for monochrom terminals 2015-10-10 Markus Gans * Deactivate a key from the status bar automatically after getting back from the callback. 2015-10-09 Markus Gans * Eliminate duplicate code 2015-10-06 Markus Gans * Refactoring FTerm::init() 2015-10-05 Markus Gans * Improve compatibility with initialize_color * Better support for TeraTerm 2015-10-02 Markus Gans * No terminal updates until input data is pending. This speeds up the window moving with the mouse on terminals with a high latency. * Use now the select command before read ENQ and SEC_DA 2015-09-29 Markus Gans * Some code improvements 2015-09-27 Markus Gans * Add methods getPos and setPos to FRect and FWidget 2015-09-24 Markus Gans * Add macro _METHOD_CALLBACK and _FUNCTION_CALLBACK to simplify the use callback functions * The callback data pointer is now predefined with NULL as default argument 2015-09-23 Markus Gans * Further code optimizations 2015-09-22 Markus Gans * Add the possibility to hide a virtual window * Some code optimizations 2015-09-18 Markus Gans * Fixed compile error on 32-bit architectures 2015-08-08 Markus Gans * Bug fix in FDialog (use GlobalPos to move) * Don't check mouse click position on title bar again while FDialog is in move 2015-07-26 Markus Gans * init() method for the FStatusKey constructor to avoid code duplication 2015-07-18 Markus Gans * Add multiple lines support for FLabel 2015-07-12 Markus Gans * Improve focusFirstChild() and focusLastChild() 2015-07-09 Markus Gans * Better contrast on 8 color terminals 2015-07-06 Markus Gans * Bug fix disable cursor on focus FSwitch * Hold down the mouse button displays FSwitch in a different color. 2015-07-04 Markus Gans * New class FSwitch * Add the watch example to demonstrate FSwitch * Version 0.1.1 2015-07-02 Markus Gans * Add a joined right-left-line character to the newfont * Use the object timer for the progress bar animation in the ui example program 2015-07-01 Markus Gans * Use the object timer for the click animation in FButton 2015-06-28 Markus Gans * Add exception handling for toLong() and toULong() in FString 2015-06-27 Markus Gans * Add toFloat(), toDouble() and setNumber(...) for floating point values to FString 2015-06-22 Markus Gans * Add a simple calculator with trigonometric functions 2015-06-21 Markus Gans * Add the possibility to draw double lines on overlapped flat lines for the 8x16graph font * Bug fix in FButton (mouse click with unsetClickAnimation()) 2015-06-20 Markus Gans * Add the possibility to change the colors from FButton 2015-06-15 Markus Gans * Add the possibility to turn off click animation on FButton 2015-06-14 Markus Gans * correction for the modifier letter small x in the character map 2015-06-12 Markus Gans * Add Some mathematical signs to the character map 2015-05-28 Markus Gans * Add keyword 'explicit' to some constructors 2015-05-25 Markus Gans * Add a Mandelbrot set program 2015-05-24 Markus Gans * Bug fix in FLineEdit (ypos from the label) * Bug fix in FDialog onWindowActive (status bar check) 2015-05-15 Markus Gans * Remove never read value from code * Add the possibility to use exec() from FMessageBox to enter and leave the main event loop correctly * Add a "hello world" example finalcut-0.9.0/Contributing.md000066400000000000000000000064421443250335200163250ustar00rootroot00000000000000# Contributing Thank you for your interest in FINAL CUT! We welcome contributions of all kinds, including patches to code and documentation, bug reports, or just neat feedback. If you ever think that something could be better or different, please give us feedback on it. Do you have problems with FINAL CUT, or are you looking for support in using the library in your project? Feel free to open a new issue if there is not already one on your topic. If you have problems with an application that uses FINAL CUT and have no idea of the cause, please contact the author first. Github hosts the source code of FINAL CUT. You can make a local copy from the repository using git clone: ```bash > git clone https://github.com/gansm/finalcut.git ``` ## Submitting patches The FINAL CUT project accepts both [GitHub pull requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request) and patches that reach me via other channels. GitHub pull requests are preferred. Please follow our [coding style](doc/coding-style.txt) standard. ### Explain your work When submitting a patch, you should include a description of the problem you are trying to solve, how you solved it, and why you chose the solution you implemented. When you submit a bug fix, it is often helpful to include a reproducible description for the problem in your explanation. Important would be instructions on how to test the error and verify its elimination. ### Test your code Run the FINAL CUT unit tests if you have installed [CppUnit](https://freedesktop.org/wiki/Software/cppunit/). Proceed as follows: The easy way ```bash > make distclean > ./build.sh unit-test ``` or ```bash > make distclean > ./configure --prefix=/usr CXXFLAGS="-g -O0 -DDEBUG -DUNIT_TEST" --with-unit-test > make test ``` If you have created uncovered code, I would be very grateful for complementary test code in the existing unit tests. ## Issue Tracking We currently use the [issue tracker on Github](https://github.com/gansm/finalcut/issues). ## How to help ### What FINAL CUT needs * We want your feedback, your opinion, your advice, and to hear what you think! * Help make FINAL CUT better known. Tell others about this project. A large user base also means a better and more stable codebase. * Help maintain and improve the library. * Write unit tests for untested code. ### What would be helpful * **Improve documentation:**
Fix typos or grammar mistakes. Revise sections that need improvement or add missing sections. * **Translations into other languages:**
For many people, reading the documentary in their native language will certainly make getting started with FINAL CUT much easier and more attractive. * **Better tests:**
High code coverage gives us a stable base that prevents breaking code due to a small patch. * **Publication in repositories:**
Advocate for the inclusion of FINAL CUT in your preferred distribution. * **Support for other platforms:**
There are still platforms on which FINAL CUT is not yet executable. * **Do you like to help other people?**
Answer questions in open issues or help moderate discussion forums or other communication channels. Please help us make the FINAL CUT widget toolkit the best library for text-based user interfaces. finalcut-0.9.0/LICENSE000066400000000000000000000167441443250335200143470ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. finalcut-0.9.0/Makefile.am000066400000000000000000000011071443250335200153610ustar00rootroot00000000000000#---------------------------------------------------------------------- # Makefile.am - FINAL CUT terminal programming library #---------------------------------------------------------------------- AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = finalcut.pc pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = finalcut.pc CLEANFILES = finalcut.pc SUBDIRS = final doc examples test docdir = ${datadir}/doc/${PACKAGE} doc_DATA = AUTHORS LICENSE ChangeLog test: check clean-local: -rm -f *~ uninstall-hook: if test -d ${docdir}; then rmdir ${docdir}; fi finalcut-0.9.0/README.md000066400000000000000000000552611443250335200146160ustar00rootroot00000000000000![FINAL CUT](misc/logo/svg/finalcut-logo.svg) # Library for creating terminal applications with text-based widgets FINAL CUT is a C++ class library and widget toolkit that enables developers to create [text-based user interfaces](https://en.wikipedia.org/wiki/Text-based_user_interface). FINAL CUT is a standalone library that interacts directly with the terminal without relying on external libraries such as [ncurses](https://invisible-island.net/ncurses/ncurses.html) or [termbox](https://code.google.com/archive/p/termbox/). FINAL CUT provides full [mouse](doc/mouse-control.md#title-bar-actions-on-mouse-clicks) support, [UTF-8](https://en.wikipedia.org/wiki/UTF-8) character encoding, [full-width character](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) support, and the ability to display [combined Unicode characters](https://en.wikipedia.org/wiki/Combining_character). The library helps the programmer to create a text console application. It allows handling multiple text windows on the screen. The design of the C++ class structure of FINAL CUT was inspired by the Qt framework. It provides a variety of common controls, including dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, and status bars. With FINAL CUT, developers can create text-based user interfaces that are both functional and visually appealing. ## Building and code analysis | | Badge | |-------------------:|:------| | *Latest release* | [![Latest Release](https://img.shields.io/github/release/gansm/finalcut.svg)](https://github.com/gansm/finalcut/releases) | | *License* | [![LGPL v3](https://img.shields.io/badge/License-LGPL_v3-blue.svg)](LICENSE) | | *Class Reference* | [![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html) | | *ARM build* | [![ARM build](https://github.com/gansm/finalcut/actions/workflows/arm.yml/badge.svg)](https://github.com/gansm/finalcut/actions/workflows/arm.yml) | | *FreeBSD build* | [![FreeBSD build](https://github.com/gansm/finalcut/actions/workflows/freebsd.yml/badge.svg)](https://github.com/gansm/finalcut/actions/workflows/freebsd.yml) | | *NetBSD build* | [![NetBSD build](https://github.com/gansm/finalcut/actions/workflows/netbsd.yml/badge.svg)](https://github.com/gansm/finalcut/actions/workflows/netbsd.yml) | | *OpenBSD build* | [![OpenBSD build](https://github.com/gansm/finalcut/actions/workflows/openbsd.yml/badge.svg)](https://github.com/gansm/finalcut/actions/workflows/openbsd.yml) | | *macOS build* | [![macOS build](https://github.com/gansm/finalcut/actions/workflows/macos.yml/badge.svg)](https://github.com/gansm/finalcut/actions/workflows/macos.yml) | | *Cygwin build* | [![Cygwin build](https://github.com/gansm/finalcut/actions/workflows/cygwin.yml/badge.svg)](https://github.com/gansm/finalcut/actions/workflows/cygwin.yml) | | *Solaris build* | [![Solaris build](https://github.com/gansm/finalcut/actions/workflows/solaris.yml/badge.svg)](https://github.com/gansm/finalcut/actions/workflows/solaris.yml) | | *CodeQL analysis* | [![CodeQL analysis](https://github.com/gansm/finalcut/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/gansm/finalcut/security/code-scanning) | | *Coverity Scan* | [![Coverity Scan Status](https://img.shields.io/coverity/scan/6508.svg)](https://scan.coverity.com/projects/6508 ) | | *SonarCloud* | [![Quality gate](https://sonarcloud.io/api/project_badges/measure?project=gansm_finalcut&metric=alert_status)](https://sonarcloud.io/dashboard?id=gansm_finalcut) | | *CodeFactor* | [![CodeFactor](https://www.codefactor.io/repository/github/gansm/finalcut/badge)](https://www.codefactor.io/repository/github/gansm/finalcut) | | *SIGRID* | [![sigrid-publish](https://github.com/gansm/finalcut/actions/workflows/sigrid-publish.yml/badge.svg?branch=main)](https://github.com/gansm/finalcut/actions/workflows/sigrid-publish.yml) | ## Installation Before installing FINAL CUT, check if your computer meets the requirements. You can find these in the FAQ section under "[What do I need to build this library?](doc/faq.md#what-do-i-need-to-build-this-library)". ```bash > git clone https://github.com/gansm/finalcut.git > cd finalcut > autoreconf --install --force > ./configure --prefix=/usr > make > su -c "make install" ``` ## Supported platforms If your platform is not listed here, it may still be compatible with FINAL CUT. I welcome any [help](Contributing.md) to make this software available on more platforms. FINAL CUT currently works on the following platforms: * Linux * FreeBSD * NetBSD * OpenBSD * macOS * Cygwin * GNU Hurd * Solaris ## Documentation See the [first steps documentation](doc/first-steps.md#first-steps-with-the-final-cut-widget-toolkit) for information on how to use the library. ## Frequently Asked Questions For general questions about FINAL CUT, likely the answer is already included in the [FAQ](doc/faq.md#frequently-asked-questions). ## Screenshots The FFileDialog widget with incremental file name search: ![FFileDialog](doc/fileopen-dialog.png) The FINAL CUT FProgressbar widget: ![FProgressbar](doc/progress-bar.png) Scrollable text in the FTextView widget: ![FTextView](doc/textview.png) The Mandelbrot set example: ![Mandelbrot set](doc/Mandelbrot.png) ## FINAL CUT newfont A [graphical text font](final/font/) for X11 and the Linux console. ![ui example in newfont mode](doc/newfont1.png) Newfont drive symbols: ![drive symbols](doc/newfont2.png) The calculator example in newfont mode: ![calculator](doc/calculator.png) ## Benchmark Here you can find a test for [measuring the character speed](doc/benchmark.md#benchmark) in the terminal. ## Virtual terminal FINAL CUT uses a virtual terminal to print character via an update method on the screen. It provides (as an overlying layer) virtual windows for the realization of window movements. The update methods only transfer differences to the virtual terminal or physical screen.
 print(...)
printf(...)
  │
  │          ╔════════════════════════[ vterm ]════════════════════════╗
  │          ║createVTerm()                                            ║
  │          ║                               ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ║
  │          ║                                                         ║
  │          ║                               │ restoreVTerm(x,y,w,h) │ ║
  │  ┌───────╨────[ vwin ]────────────┐                                ║
  │  │createArea(area)                │      └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ ║
  │  │                                │                                ║
  │  │                                │                                ║
  └──â”ŧ────────â–ē                  putArea(area) ────â–ē                   ║
     │                                │                                ║
     │                         putArea(x,y,area) ────â–ē                 ║
     │                                │                                ║
     │                   ◄──── getArea(x,y,area)                       ║
     │                                │                                ║
     │                                │                                ║
     │                                │                                ║
     │                resizeArea(area)│                                ║
     └───────â•Ĩ────────────────────────┘                                ║
             ║                                                         ║
             ║       │                                    resizeVTerm()║
             ╚═══════â–ŧ═════════════════════════════════════════════════╝
                     │
                     │   putVTerm()
                     └──────────────────â–ē updateTerminalLine(y)
                       updateTerminal()            │
                                                   â–ŧ
                                           ┌───────────────┐
                                           │ output_buffer │
                                           └───────────────┘
                                                   │
                                                   │ flushOutputBuffer()
                                                   │ and putchar(char)
                                                   â–ŧ
                                           ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                                           ▌               ▐
                                           ▌    screen     ▐
                                           ▌ ───────────── ▐
                                           ▌ real terminal ▐
                                           ▌               ▐
                                           ▀▀▀▀▀▀▀███▀▀▀▀▀▀▀
                                                  ███
                                               ▀▀▀▀▀▀▀▀▀
## Class digramm
    ┌────────────┐1
    │ FTermLinux ├------┐
    └────────────┘      :
  ┌──────────────┐1     :
  │ FTermFreeBSD ├------┐
  └──────────────┘      :
  ┌──────────────┐1     :
  │ FTermOpenBSD ├------┐
  └──────────────┘      :
┌────────────────┐1     :
│ FTermDetection ├------┐
└────────────────┘      :
┌────────────────┐1     :
│ FTermcapQuirks ├------┐
└────────────────┘      :            ┌───────────┐
┌────────────────┐1     :       ┌────┤ FKeyEvent │
│ FTermXTerminal ├------┐       │    └───────────┘
└────────────────┘      :       │    ┌─────────────┐
      ┌──────────┐1     :       ├────┤ FMouseEvent │
      │ FTermcap ├------┐       │    └─────────────┘
      └──────────┘      :       │    ┌─────────────┐
      ┌──────────┐1     :       ├────┤ FWheelEvent │
      │ FTermios ├------┐       │    └─────────────┘
      └──────────┘      :       │    ┌─────────────┐
 ┌───────────────┐1     :       ├────┤ FFocusEvent │
 │ FColorPalette ├------┐       │    └─────────────┘
 └───────────────┘      :       │    ┌─────────────┐
     ┌───────────┐1     :       ├────┤ FAccelEvent │
     │ FOptiMove ├------┐       │    └─────────────┘
     └───────────┘      :       │    ┌──────────────┐
     ┌───────────┐1     :       ├────┤ FResizeEvent │
     │ FOptiAttr ├------┐       │    └──────────────┘
     └───────────┘      :       │    ┌────────────┐
     ┌───────────┐1     :       ├────┤ FShowEvent │
     │ FKeyboard ├------┐       │    └────────────┘
     └───────────┘      :       │    ┌────────────┐
 ┌───────────────┐1     :       ├────┤ FHideEvent │
 │ FMouseControl ├------┐       │    └────────────┘
 └───────────────┘      :       │    ┌─────────────┐
       ┌─────────┐1     :       ├────┤ FCloseEvent │
       │ FSystem ├------┐       │    └─────────────┘
       └─────────┘      :       │    ┌─────────────┐
       ┌─────────┐*     :       ├────┤ FTimerEvent │
       │ FString ├---┐  :       │    └─────────────┘
       └─────────┘   :  :       │    ┌────────────┐1    1┌───────┐
 ┌───────────────┐*  :  :       ├────┤ FUserEvent ├------┤ FData │
 │ FStringStream ├---┐  :       │    └────────────┘      └───────┘
 └───────────────┘   :  :       │        ┌──────┐   ┌─────────┐
        ┌────────┐*  :  :       │        │ FLog │◄──┤ FLogger │
        │ FPoint ├---┐  :       │        └──â”Ŧ───┘   └─────────┘
        └────────┘   :  :       │           :1
         ┌───────┐*  :  :       │        ┌──┴───────────┐
         │ FRect ├---┐  :       │   ┌────┤ FApplication │
         └───────┘   :  :       │   │    └──────────────┘
         ┌───────┐*  :  :       │   │    ┌────────┐
         │ FSize ├---┐  :       │   ├────┤ FLabel │
         └───────┘   :  :       │   │    └────────┘
                     :1 :1      │   │    ┌───────────┐
                 ┌───┴──┴┐      │   ├────┤ FLineEdit │
                 │ FTerm │      │   │    └───────────┘
                 └───â”Ŧ───┘      │   │    ┌──────────┐
                     :1         │   ├────┤ FSpinBox │
┌─────────┐   ┌──────┴──────┐   │   │    └──────────┘
│ FOutput │◄──┤ FTermOutput │   │   │    ┌─────────┐
└────â”Ŧ────┘   └─────────────┘   │   ├────┤ FButton │
     :             ┌────────┐   │   │    └─────────┘
     :1            │ FEvent │◄──┘   │    ┌──────────────┐      ┌──────────────┐
 ┌───┴────┐        └────â”Ŧ───┘       ├────┤ FButtonGroup │   ┌──┤ FRadioButton │
 │ FVTerm │◄──┐         :1          │    └──────────────┘   │  └──────────────┘
 └────────┘   │    ┌────┴────┐      │    ┌───────────────┐  │  ┌───────────┐
              ├────┤ FWidget │◄─────â”ŧ────┤ FToggleButton │◄─â”ŧ──┤ FCheckBox │
┌─────────┐   │    └────â”Ŧ────┘      │    └───────────────┘  │  └───────────┘
│ FObject │◄──┘         :1          │    ┌──────────────┐   │  ┌─────────┐
└────â”Ŧ────┘      ┌──────┴────────┐  ├────┤ FProgressbar │   └──┤ FSwitch │
     â–ŧ           │ FWidgetColors │  │    └──────────────┘      └─────────┘
 ┌───┴────┐      └───────────────┘  │    ┌────────────┐
 │ FTimer │                         ├────┤ FScrollbar │
 └────────┘                         │    └────────────┘
                                    │    ┌───────────┐
                                    ├────┤ FTextView │
                                    │    └───────────┘
                                    │    ┌───────────┐1    1┌──────────────────┐
                                    ├────┤ FComboBox ├------┤ FDropDownListBox │
                                    │    └───────────┘      └──────────────────┘
 ┌──────────────┐1                  │    ┌──────────┐1     *┌──────────────┐1
 │ FVTermBuffer ├-------------------├────┤ FListBox ├-------┤ FListBoxItem ├--┐
 └──────────────┘                   │    └──────────┘       └──────────────┘  :
                                    │   1┌───────────┐1    *┌───────────────┐ :
                                    ├────┤ FListView ├------┤ FListViewItem │ :
                                    │    └───────────┘      └────────â”Ŧ──────┘ :
                                    │    ┌─────────────┐             :1       :
                                    ├────┤ FScrollView │         ┌───┴───┐1   :
                                    │    └─────────────┘         │ FData ├----┘
                                    │                            └───────┘
                                    │    ┌────────────┐1   *┌────────────┐
                                    │ ┌──┤ FStatusBar ├-----┤ FStatusKey │
                                    │ │  └────────────┘     └────────────┘
                                    │ │
                                    │ â–ŧ                       ┌─────────────┐
                                ┌───┴─┴───┐  ┌─────────┐   ┌──┤ FFileDialog │
                                │ FWindow │◄─┤ FDialog │◄──┤  └─────────────┘
                                └──â”Ŧ──â”Ŧ───┘  └─────────┘   │  ┌─────────────┐
                                   ▲  ▲                    └──┤ FMessageBox │
                                   │  │                       └─────────────┘
                                   │  │      ┌──────────┐  ┌────────────────┐
                                   │  └──────┤ FToolTip │◄─┤ FBusyIndicator │
                                   │         └──────────┘  └────────────────┘
                                   └───────────────┐          ┌──────────┐
                                                   │      ┌───┤ FMenuBar │
                                  ┌───────────┐    └──────┤   └──────────┘
                                  │ FMenuList │◄──────────┤   ┌───────┐
                                  └────â”Ŧ──────┘           └───┤ FMenu │◄──┐
                                       :1                     └───────┘   │
                                       :            ┌─────────────────┐   │
                                       :            │ FDialogListMenu ├───┘
                                       :            └─────────────────┘
                                       └--------------------------------┐
                                       :*          ┌────────────────┐*  :
                                  ┌────┴─────┐  ┌──┤ FCheckMenuItem ├---┘
                                  │FMenuItem │◄─┤  └────────────────┘   :
                                  └──────────┘  │  ┌────────────────┐*  :
                                                └──┤ FRadioMenuItem ├---┘
                                                   └────────────────┘
## Please send bug reports to https://github.com/gansm/finalcut/issues ## License Licensed under the [GNU Lesser General Public License, Version 3.0](LICENSE) LGPLv3 finalcut-0.9.0/SECURITY.md000066400000000000000000000012131443250335200151140ustar00rootroot00000000000000# Security policy ## Dealing with security vulnerabilities There is no separate process for handling security vulnerabilities in FINAL CUT. Security vulnerabilities are fixed and published like all other bugs. Nevertheless, from the moment they are brought to our attention, we try to close them as soon as possible. ## Reporting a security vulnerability Preferably report a vulnerability via email to "guru.mail" + "@" + "muenster.de" or open an issue in the GitHub repository, the latter meaning that you made the vulnerability public before it was fixed. If you already have a solution for the security problem, please submit a pull request. finalcut-0.9.0/autogen.sh000077500000000000000000000014261443250335200153320ustar00rootroot00000000000000#!/bin/sh if test "$1" = "update" then # Update generated configuration files if command -v autoreconf >/dev/null then autoreconf --force --install --verbose --warnings=all else echo "Update failed, please install autoconf first" exit 1 fi else # Set up an m4 environment aclocal # Generate configure from configure.ac autoconf # reate a template header (config.h.in) for configure autoheader # generates a custom version of the generic libtool script libtoolize --copy # Generate Makefile.in from Makefile.am automake --add-missing --copy fi echo echo 'run "./configure --prefix=/usr && make"' echo # Generate Makefile from Makefile.in #./configure # Use Makefile to build and test a tarball to distribute #make distcheck #make distclean finalcut-0.9.0/build.sh000077500000000000000000000116621443250335200147720ustar00rootroot00000000000000#!/bin/sh #CXX="clang++" PREFIX="/usr" RED="\\033[0;31m" GREEN="\\033[0;32m" NORMAL="\\033[m" PLATFORM="$(uname -s || echo "unknown")" ARCH="$(uname -m || echo "unknown")" SRCDIR="$(dirname "$0")" test -n "$SRCDIR" || SRCDIR=. cd "$SRCDIR" || exit print_systeminfo () { test -z "$CXX" && eval "$(grep '^CXX = ' "Makefile" | cut -d' ' -f1-3 | sed -e 's/ //g')" CXX_VERSION="$($CXX -dumpfullversion -dumpversion || echo "unknown version")" echo "-------------------------" echo " Platform: $PLATFORM" echo " Architecture: $ARCH" echo " Compiler: $CXX $CXX_VERSION" echo " Build: $1" echo "Number of jobs: $JOBS" echo "-------------------------" } # Get number of logical processor cores if command -v getconf >/dev/null 2>&1 then CPU_COUNT="$(getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null)" || CPU_COUNT="0" fi if [ "$CPU_COUNT" -eq 0 ] then if command -v nproc >/dev/null 2>&1 then CPU_COUNT="$(nproc 2>/dev/null)" || CPU_COUNT="0" fi fi test "$CPU_COUNT" -eq 0 && CPU_COUNT=1 if [ -n "$1" ] then if [ ! -f ./configure ] then if command -v autoreconf >/dev/null then autoreconf --install --force else echo "Build failed, please install autoconf first" exit 255 fi fi fi # Build commands case "$1" in "--release"|"release") if ! ./configure --prefix="$PREFIX" CXXFLAGS="-O3" # "-flto -g1 -gz -march=native -fno-rtti" then echo "${RED}Configure failed!${NORMAL}" 1>&2 exit 255 fi ;; "--debug"|"debug") if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -pedantic" then echo "${RED}Configure failed!${NORMAL}" 1>&2 exit 255 fi ;; "--fulldebug"|"fulldebug") if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -Wextra -Weffc++ -pedantic -pedantic-errors -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -fstack-protector -Wstrict-aliasing -Wstrict-aliasing=3 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wsign-promo -Woverloaded-virtual -Wstrict-null-sentinel -fext-numeric-literals -Wreorder -Wnoexcept -Wnarrowing -Wliteral-suffix -Wctor-dtor-privacy -ftree-loop-distribute-patterns -Wmemset-transposed-args -Wno-format-nonliteral" then echo "${RED}Configure failed!${NORMAL}" 1>&2 exit 255 fi ;; "--profile"|"profile") if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -pg -O0 -DDEBUG -W -Wall -pedantic" then echo "${RED}Configure failed!${NORMAL}" 1>&2 exit 255 fi ;; "--cpu-profiler"|"cpu-profiler") if ! ./configure --prefix="$PREFIX" --with-profiler then echo "${RED}Configure failed!${NORMAL}" 1>&2 exit 255 fi ;; "--unit-test"|"unit-test") if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -DUNIT_TEST" --with-unit-test then echo "${RED}Configure failed!${NORMAL}" 1>&2 exit 255 fi ;; "--coverage"|"coverage") if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -DUNIT_TEST" --with-unit-test --with-gcov then echo "${RED}Configure failed!${NORMAL}" 1>&2 exit 255 fi ;; "--clean"|"clean") make distclean exit ;; "--help"|"help"|*) echo "Usage:" echo " $(basename "$0") {COMMAND}" echo "" echo "Commands:" echo " release Compile for release" echo " debug Compile with debug option" echo " fulldebug Compile with all warning options" echo " profile Compile with profile option (analysis with gprof)" echo " unit-test Compile with CppUnit testing" echo " cpu-profiler Link with Google cpu performance profiler" echo " coverage Compile with options for coverage analysis with gcov" echo " clean Clean up the project" echo " help Show this help" exit ;; esac JOBS="$((CPU_COUNT/2))" test "$JOBS" -eq 0 && JOBS=1 if make -h 2<&1 | grep -q "\\-\\-jobs" then MAKE="make V=1 -j$JOBS" else MAKE="make V=1" fi if $MAKE then print_systeminfo "$1" printf '%bSuccessful compiled%b\n' "${GREEN}" "${NORMAL}" else print_systeminfo "$1" printf '%bError on compile!%b\n' "${RED}" "${NORMAL}" 1>&2 exit 1 fi if [ "$1" = "--unit-test" ] \ || [ "$1" = "unit-test" ] \ || [ "$1" = "--coverage" ] \ || [ "$1" = "coverage" ] then rm test/*.log 2>/dev/null cd test && make check-TESTS cat ./*.log 2>/dev/null cd .. || exit fi # make install finalcut-0.9.0/codecov.yml000066400000000000000000000000641443250335200154730ustar00rootroot00000000000000coverage: status: project: on patch: off finalcut-0.9.0/configure.ac000066400000000000000000000071021443250335200156140ustar00rootroot00000000000000#---------------------------------------------------------------------- # configure.ac - FINAL CUT library #---------------------------------------------------------------------- # Process this file with autoconf to produce a configure script. AC_INIT([finalcut], [0.9.0]) AC_CONFIG_HEADERS([config.h]) AX_PREFIX_CONFIG_H([final/fconfig.h], [F]) AC_CONFIG_SRCDIR([final/fobject.cpp]) AC_USE_SYSTEM_EXTENSIONS AM_INIT_AUTOMAKE m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_PROG_CC if test -z $CXXFLAGS then CXXFLAGS="-O3" fi AC_PROG_CXX # Checks for header files. AC_CHECK_HEADERS( \ linux/fb.h \ sys/io.h \ sys/kd.h \ sys/stat.h \ sys/time.h \ fcntl.h \ langinfo.h \ term.h \ termios.h \ ttyent.h \ unistd.h \ cmath \ csignal \ cstdlib \ list \ map \ queue \ vector ) # Checks for library functions. AC_CHECK_FUNCS( \ getuid \ geteuid \ getttynam \ select \ strdup \ strstr \ vsnprintf \ wcwidth ) # Checks for 'tgetent' AC_SEARCH_LIBS([tgetent], [terminfo mytinfo termlib termcap tinfo ncurses curses]) # Checks for 'tparm' AC_SEARCH_LIBS([tparm], [terminfo mytinfo termlib termcap tinfo ncurses curses]) AC_SUBST([FINAL_LIBS]) AC_SUBST([TERMCAP_LIB]) TERMCAP_LIB="$LIBS" FINAL_LIBS="$LIBS" LIBS="" # Checks for libtool AC_ENABLE_SHARED AC_ENABLE_STATIC AC_LANG([C++]) LT_INIT([dlopen]) LT_LANG([C++]) LT_OUTPUT ### This defines the version number of the installed .so files ### Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B) ### using libtool's versioning system. AC_SUBST(SO_VERSION, ["9:0:9"]) AC_SUBST([LIBTOOL_DEPS]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_FILES([Makefile final/Makefile final/font/Makefile doc/Makefile examples/Makefile test/Makefile finalcut.pc]) # Check for C++14 support m4_ifdef([AX_CXX_COMPILE_STDCXX_14], [AX_CXX_COMPILE_STDCXX_14([noext],[mandatory])], [AC_MSG_ERROR([Macro AX_CXX_COMPILE_STDCXX_14 not found. Please install GNU autoconf-archive])]) # use GPM (General Purpose Mouse) AC_ARG_WITH([gpm], [AS_HELP_STRING([--without-gpm], [Disable GPM mouse support])], [], [with_gpm=yes]) if test "x$with_gpm" != "xno" then AC_CHECK_LIB([gpm], [Gpm_Open], [AC_DEFINE([HAVE_LIBGPM], 1, [Define to 1 if GPM mouse is enabled]) FINAL_LIBS="$FINAL_LIBS -lgpm"]) fi # profiling AC_ARG_WITH([profiler], [AS_HELP_STRING([--with-profiler], [build extra google profiler binaries])], [], [with_profiler=no]) if test "x$with_profiler" != "xno" then AC_CHECK_LIB([profiler], [ProfilerFlush], [FINAL_LIBS="$FINAL_LIBS -lprofiler"]) fi # unit test AC_ARG_WITH([unit-test], [AS_HELP_STRING([--with-unit-test], [build unit tests])], [], [with_unit_test=no]) if test "x$with_unit_test" != "xno" then AC_MSG_NOTICE(enabled cppunit test) PKG_CHECK_MODULES(CPPUNIT, [cppunit > 1.12.0]) AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "1"]) else AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "0"]) fi # code coverage AC_ARG_WITH([gcov], [AS_HELP_STRING([--with-gcov], [build for code coverage testing])], [], [with_gcov=no]) if test "x$with_gcov" != "xno" then AC_CHECK_LIB([gcov], [main], [FINAL_LIBS="$FINAL_LIBS -lgcov"]) AM_CXXFLAGS="-fprofile-arcs -ftest-coverage $AM_CXXFLAGS" AC_SUBST([AM_CXXFLAGS]) fi AC_OUTPUT finalcut-0.9.0/doc/000077500000000000000000000000001443250335200140735ustar00rootroot00000000000000finalcut-0.9.0/doc/FDialog.svg000066400000000000000000000271121443250335200161240ustar00rootroot00000000000000 image/svg+xml Title bar Zoom Dialog menu Minimize Resize corner finalcut-0.9.0/doc/Makefile.am000066400000000000000000000054731443250335200161400ustar00rootroot00000000000000#---------------------------------------------------------------------- # Makefile.am - FINAL CUT library #---------------------------------------------------------------------- docdir = ${datadir}/doc/${PACKAGE} EXTRA_DIST = \ benchmark.md \ build_openbsd.txt \ build_solaris.txt \ calendar-draft.png \ calculator.png \ class-diagram.txt \ class_template.cpp \ class_template.h \ console_codes-manual.sh \ console_ioctl-manual.sh \ faq.md \ fileopen-dialog.png \ final-cut-application-structure.svg \ final-cut-widget-tree.svg \ first-steps.md \ first-steps_callback-function.cpp.png \ first-steps_callback-lambda.cpp.png \ first-steps_callback-method.cpp.png \ first-steps_dialog.cpp.png \ first-steps_emit-signal.cpp.png \ first-steps_memory.cpp.png \ first-steps_scrollview.cpp.png \ first-steps_size-adjustment.cpp.png \ first-steps_timer.cpp.png \ first-steps_user-event.cpp.png \ framebuffer.txt \ Mandelbrot.png \ mouse-control.md \ ncurses.supp \ newfont1.png \ newfont2.png \ newfont-8x16.txt \ newfont-9x16.txt \ progress-bar.png \ readme.txt \ coding-style.txt \ terminfo-capabilities.sh \ terminfo-manual.sh \ textview.png \ TODO \ user-theme.md \ user-theme.png \ user-theme-bee-palette.svg \ user-theme-fc16-dark-palette.svg \ user-theme-fc16-palette.svg \ user-theme-fc8-palette.svg \ user-theme-vga-palette.svg \ vga.txt \ vt100_line_drawing_graphics.png \ virtual-terminal.txt \ widget-coordinates.svg \ widget-geometry.svg \ widget-lengths.svg \ xterm.txt \ xgraphics doc_DATA = \ benchmark.md \ build_openbsd.txt \ build_solaris.txt \ calendar-draft.png \ calculator.png \ class-diagram.txt \ class_template.cpp \ class_template.h \ console_codes-manual.sh \ console_ioctl-manual.sh \ faq.md \ fileopen-dialog.png \ final-cut-application-structure.svg \ final-cut-widget-tree.svg \ first-steps.md \ first-steps_callback-function.cpp.png \ first-steps_callback-lambda.cpp.png \ first-steps_callback-method.cpp.png \ first-steps_dialog.cpp.png \ first-steps_emit-signal.cpp.png \ first-steps_memory.cpp.png \ first-steps_scrollview.cpp.png \ first-steps_size-adjustment.cpp.png \ first-steps_timer.cpp.png \ first-steps_user-event.cpp.png \ framebuffer.txt \ Mandelbrot.png \ mouse-control.md \ ncurses.supp \ newfont1.png \ newfont2.png \ newfont-8x16.txt \ newfont-9x16.txt \ progress-bar.png \ readme.txt \ coding-style.txt \ terminfo-capabilities.sh \ terminfo-manual.sh \ textview.png \ TODO \ user-theme.md \ user-theme.png \ user-theme-bee-palette.svg \ user-theme-fc16-dark-palette.svg \ user-theme-fc16-palette.svg \ user-theme-fc8-palette.svg \ user-theme-vga-palette.svg \ vga.txt \ vt100_line_drawing_graphics.png \ virtual-terminal.txt \ widget-coordinates.svg \ widget-geometry.svg \ widget-lengths.svg \ xterm.txt \ xgraphics finalcut-0.9.0/doc/Mandelbrot.png000066400000000000000000000035771443250335200167040ustar00rootroot00000000000000‰PNG  IHDRūO›'\Į3PLTE;žē˛˛PPPUjĪîDDxé­˙臀¤ėŧŧŧ^ë\bŋøûčg˙˙˙„W&tRNS@æØfbKGDˆH pHYs  šœtIMEã !gÜ NÅIDATxÚíŨRÛFИ’ÆŌęũŸļS}@.lV•-ŲXÖųf’aôcl+’ÜėjŋŊ4yä[r¯üÃë¯vkžøũūßmšÜŽ“üøī›īđaüíõfŪļŧņ؛ĨB:Ûī˙đ_îėî^oŲw䎸õkø°w<âķ ßnw÷oį‡˙xÛžŪé¯Ĩ0 J Īü~ßß#˙xÃîœ˙ĶīÃđîXîūOüçŸ!oģü[žû?üŲ?ÔüåOú‡Ąüãāבu;~Á/wĀ?Č.ƒ?~ü‚_vʐŊåŋ[aow>~üøņãĮŋōggįĪ/ÍŗķXō4æī1yj’#§_súŊ/üøņãĮ?~üøņãĮ?~üø×‡ŋ}ė–ŧÂg@ė÷1)‚crVļĖ/‚ë—~üøņãĮ?~üøņãĮ?~üëĀo…|>üķ˜ Ė1)‚ė͑ĩ–ˇ×*üøņãĮ?~üøņãĮ?~üøĪ‡ŋōäį˜\˛|ę0˙3&ÛsVĻ,zEđĩĨ€?~üøņãĮ?~üøņãĮ˙iđ[ÆųÔI]ā&ØõYØŊäĘôĀŊRčÄü+€?~üøņãĮ?~üøņãĮ˙úüˇLŪ^čvĐæ÷&Ī%iú5įöøĶôÍ4īú ŊRhK­-…u‹?~üøņãĮ?~üøņãĮ?ū[?š7I;œ¨Y?QmŲfoäy^ōĘĩ8ž›äģäČĘåŠ?~üøņãĮ?~üøņãĮ?ū)ūë“?ž˜ļŊZē&YŽ='ų,Ŋ†qŪ[očō"Ā?~üøņãĮ?~üøņãĮ˙zđËą{äiôÖåWrĄŗ÷pŠ āöaįņ÷Š?~üøņãĮ?~üøņãĮ?ūĪšÄp͊—ļk.Ä͉yé$ŪLēÎ;9ÜdōëTđå­ßļđãĮ?~üøņãĮ?~üøņã?­Ũģ|Éäđ§5[KĄŅĖeĘ4ėŪCkr|&lO?”ņ’Ī•Ģ}‰Ö/~üøņãĮ?~üøņãĮ?~üSíŪ% '÷¸X‡e†-įÖE”“œ•A›ų`u!•Ÿ%‡MĨļ~{üKŠ?~üøņãĮ?~üøņãĮ?ūĪük‘÷āk›vų4ė­4zÛ¤p{C=ņãĮ?~üøņãĮ?~üøņã_‡ų0Îv2v^š>Ô0đië.ŋˆ)Ļmĩ~kK?~üøņãĮ?~üøņãĮ?ūkđĪ_Beú‹;ŠÃ5ģLĘ´]Ė?~üøņãĮ?~üøņãĮ?ūKņįm…*'‡°ļTë‚)Ų›sŌIŖæÖIŨ—āOđãĮ?~üøņãĮ?~üøņã×ôÕôŏ?~üøņãĮ?~üøņãĮīü&x_:æ÷ãĮ?~üøņãĮ?~üøņãˇ˜ËT,æ‚?~üøņãĮ?~üøņãĮ˙˙ķ×ŦU mÔpÎMY %9+%R‡‰æŦŸ%ۂĪû¯“ŊņãĮ?~üøņãĮ?~üøņãŋNžūˇƒ,Āų:ĨËQËâĮ˜ēˇ—ŋ•p>WŽv˙Ee¸Î„đ|–v{Š2īmyģ÷Ø ~üøņãĮ?~üøņãĮ?~üSü×)‚ųSĮį/æLųޟ(_gŠuö./ˆZd¸&ß%GĻ@/?~üøņãĮ?~üøņãĮ˙-ÁŠŅ+‹:ņģ÷`Ȗ'e1ũ`Čē L}…:m{zjúåāņãĮ?~üøņãĮ?~üøņã?˙̊āÔRh bÎC"ëŌĶ-ŪÚ6î‘÷ÚŌKi>Î~üøņãĮ?~üøņãĮ?~üįÁļJazIéē°tm†ƒf{ÎJĶ7…Ō> qûTøãYÁ?~üøņãĮ?~üøņãĮiÜS)´DÜczŪ[ Į?~üøņãĮ?~üøņãĮ˙RE°Ũá Ŋ"ČDîĀįŦlé-Ā|üqÕāĮ?~üøņãĮ?~üøņãß ŋė)øņãĮŋė™_ö–Ę/ģü €?~ü˛[ūÄ߆öüøņãü˛¯ü ƒ>(Ę{!IENDŽB`‚finalcut-0.9.0/doc/TODO000066400000000000000000000004661443250335200145710ustar00rootroot00000000000000Bugs ~~~~ - Improvements ~~~~~~~~~~~~ - Missing Features ~~~~~~~~~~~~~~~~ - The FSlider() widget . . . . . . . . . ────▲──────────── 0 2 4 6 8 - Adding for flexible layouts a FGrid widget container that organizes its child widgets in rows and columns finalcut-0.9.0/doc/benchmark.md000066400000000000000000000026341443250335200163540ustar00rootroot00000000000000Benchmark ========= The Rotozoomer example can perform a benchmark run with the parameter "-b" to determine the FINAL CUT character speed in the terminal. The measured time and frame rate is strongly dependent on the hardware used. [![rotozoomer-benchmark](https://asciinema.org/a/316531.svg)](https://asciinema.org/a/316531?size=medium&autoplay=1) Speed tests ----------- | Terminal | Size | Time | Loops | Frame rate | |--------------------|-------|---------|-------|------------| | XTerm | 80x24 | 2.693ms | 314 | 116.598fps | | PuTTY | 80x24 | 2.711ms | 314 | 115.824fps | | Mintty | 80x24 | 2.799ms | 314 | 112.182fps | | Cygwin (cmd) | 80x24 | 2.99ms | 314 | 105.016fps | | rxvt-cygwin-native | 80x24 | 2.836ms | 314 | 110.719fps | | rxvt | 80x24 | 3.064ms | 314 | 102.480fps | | rxvt-unicode | 80x24 | 2.853ms | 314 | 110.059fps | | Tera Term | 80x24 | 3.154ms | 314 | 99.5561fps | | Konsole | 80x24 | 2.727ms | 314 | 115.144fps | | GNOME-Terminal | 80x24 | 2.683ms | 314 | 117.033fps | | Linux console | 80x25 | 2.757ms | 314 | 113.891fps | | FreeBSD console | 80x25 | 2.726ms | 314 | 115.187fps | | NetBSD console | 80x25 | 2.747ms | 314 | 114.306fps | | OpenBSD console | 80x25 | 2.751ms | 314 | 114.140fps | | Solaris console | 80x34 | 3.072ms | 314 | 102.213fps | finalcut-0.9.0/doc/build_alpine_linux.txt000066400000000000000000000003101443250335200204740ustar00rootroot00000000000000apk add gcc g++ apk add make apk add automake autoconf autoconf-archive apk add libtool apk add pkgconf apk add gpm gpm-dev apk add linux-headers apk add ncurses-dev ncurses-terminfo apk add cppunit finalcut-0.9.0/doc/build_openbsd.txt000066400000000000000000000010561443250335200174470ustar00rootroot00000000000000Build FINAL CUT with the clang c++ compiler ------------------------------------------- openbsd# CXX=clang++ ./build.sh Build FINAL CUT with eg++ ------------------------- openbsd# CXX=eg++ ./build.sh Install egcc on OpenBSD ----------------------- openbsd# pkg_add g++ quirks-3.124 signed on 2019-04-15T12:10:16Z Ambiguous: choose package for g++ a 0: 1: g++-4.9.4p18 2: g++-8.3.0 Your choice: 2 g++-8.3.0:gcc-libs-8.3.0: ok g++-8.3.0:gmp-6.1.2p3: ok g++-8.3.0:mpfr-3.1.5.2p0: ok g++-8.3.0:libmpc-0.9p2: ok g++-8.3.0:gcc-8.3.0: ok g++-8.3.0: ok finalcut-0.9.0/doc/build_solaris.txt000066400000000000000000000003571443250335200174740ustar00rootroot00000000000000Install gcc5g++ on Solaris https://www.opencsw.org/packages/gcc5g++/ pkgadd -d http://get.opencsw.org/now /opt/csw/bin/pkgutil -U /opt/csw/bin/pkgutil -y -i gcc5g++ /usr/sbin/pkgchk -L CSWgcc5g++ # list files PATH=/opt/csw/bin:$PATH finalcut-0.9.0/doc/calculator.png000066400000000000000000000030311443250335200167270ustar00rootroot00000000000000‰PNG  IHDR0'ÜãPLTEcol;žPPPŧŧŧ˙˙˙õ×ÖtRNS@æØfbKGDˆH pHYs  šœtIMEã 1oÉm€IDATxÚímr›0†sfœ˙m&>Đ\ö1ŗ÷ŋJYÉØŠ-- >¤Ļ¯ZRÂņdĩÚ×KúÖíŖŽöëMډîíōķĀøúēŽė|}Ũg€Ex˜‡íę`d_ūøũë;ÛpäĖĮƒąs‡‘ũĖco?sčÎe`™*NY`Ūkė#đXv] ö[xVƒņĮ+‡ģ.Žą;؊ĄŦėWß÷…Jž/æß•BÂOû.Đüģ’ €íԖVá˛ĮƒŊsuí `Ā0€lG°Ļ‚ûĸ Ú;Ā\&q’TßmD š¤_ū˙Ū7§`1Đ5žĪz?&›|=ėâŧ!(qyŋyW†pE†’n~„ēĀÜØ ”‹1ˇšÁô1vj.ƒš@÷å=äÕŽ[ŧųØsß_ yĖ_v$ŧ5ô+5” U 6^ŧyėßÁü‘ĶEs'S™;“*Ũ‚˙Th‚ÅŊ`•/ąæĀ0€ `čc\Æö}Ąh"mO[ėÔ÷Ė2Ķvņ ˆ-qņáŧ> ô;õI06ļOŲŪöY`¤ƒqPãĨƒ%.0ø+ fû¤­õ`Ũ*0‡5tD-ņ‹Û^ŧ"ŽNœįG íÆ:FŸ4ü2"CGmįĮķlĀęČŧÚn?Qô<˙r^ÂI}ūųü3ņŽäI°1_=Ļ€Év ÃL0üØĖĪ`¤yŒĖ:0ÖÁzē_e˜;ē˜LZŒi`ä^˛"ÆÜ›Š•Á–|W:›œõzŪđúŽ ĻĸØ;#Æp¯Øn`Õ.ąæĀ0€ `ĐĮގeQ,¯œa[ v˝´ąL\ąĩa‡kĀB-Ú -ŗŅ“r÷Ü$[Žvb]ÆJÉ´ŖC)bΐĨ§ú\6Ęšą‹§3<–Ž•4˜(DtˇŽņXˇ%MÍąļĶbŦuJ<$=fņ7jjãŠģŨ’Ōļ´7ī\06U‚…ŸÚŧœ×RWĐcû,{ !Ā0€ úôąu+X6\,,ûfsĩ ŨĻõ˓Ū,,ÔzG$u5”ÖĒœĸIX]@C20€ `Ā ũD}ĖØüV4íĖŦN߸×ÁŦϜ—ŦI› 6ū6ĸ%u8ķ?Û@ęm,•‰‡ā›ÍyÄĖK‰ß˙N&b,Ë6LęzēGiŅĸĪTí\}ĖofŠ6™RįėĄŦlšģŋjM&ųŽ …ŽC?€ĀŊ`ĐĮ°æĀ0€ `ĐĮ°‚]ԉRBS6}ãžL›zHn^aĮŽ%4žl™Î°VרLŗmcš`lęô˜.cS-ØÎĶ…f –3‹wĄöėĶĮæƒŊ|ĀŽ›úô ÃPb(°ŊĀj]ö`{¸ UL̆Ú,ü*×fÔķäĢŲ`ļN0ĩ~ĮæYĩŧk.˜&œØ’Ë~"pg0M€ËÛæ]ŠČP=oæ•Å`ŊæÎ‡5‰÷J€1ęĮP?0€ `ĀūO°ĻŌö& `XEí/|›.\B$uIENDŽB`‚finalcut-0.9.0/doc/calendar-draft.png000066400000000000000000000022611443250335200174510ustar00rootroot00000000000000‰PNG  IHDRÆĻsAí4PLTE;žUjĪē˙˙˙zŸ‚bKGDˆH pHYs  šœtIMEã ģ (IDATxÚí›Qr㠆õĀ˜ážÜ@Ä˙ũĪ´6đCėŦI7ÍâN:j,üYHSÁûŒÁŒk ķō‰—j@E1€ˆˆ9ī…3ZņzjÔŦ)Ît`hŧ’e†tbHdj Ė0]Ņ÷PŅą § /Ø!HŒØzŲãĄÉW™Ņģ_UĻīøH}WÍĘę:>`R|Å@EŒnN2ŋ+_ Æ` Æ70TŪp˜Ā0ũ]¤ƒ1?𝏏d8„÷Ûû- ‡`á`Ar;`]pQ† ũíȌ(÷d`û‰ŒUîoa8ëā‚ .8Ŧāæ’ÁøÎ:ˆāâikâŸÁ%Ų&Xú#X‹\c8jãlf8›ÁŅĩŨ*r=æŽÚžņ}pø+F´3¸ā`]fX—žĪ:6DIgķW‚‹÷Å ōéX‡`“Cl~´nĩĨķ* †sä;Kqˇ@(z‰%š?ÃÞfXÔWҧÖ:Āæ6 īŗNRA°6Å•íx6ŒĪcŽŌBĩ‹Öūƒ§…˛ŒåC‹pnH˛÷Ũ|UŽMåËܑÁ2ÅÃŖ#Cę'ŧ÷sˇ~eZđ~v~‚Ņčģ¸Úwsįåw^Å\.ÆcäÄÁx‘QŧeąŅG“Ŧ&ë/ķúi1šiŠ>֒,jļÖ~^?'­šĄĻ¨EmØôĻÛ}pßÕ Ú“…eÆŌšˇS~~”Ą÷ Ņ1tŌ÷3<–ęøXĮSŽ…ŧŲt#īÃbũå ƒ}Â{z8OL7˛ƒöaúËC ų.Ÿ“2Å`ŗ§ņX7?Uíˆņœn÷išn÷]Žåû;°ŖLņԞėh2§U˙vgTjÎãø¸ĀPũÎ{ŦT$vl܀ûm‹ųN'†|­ߝ¯ū#Ư¨ƒT3Ō^Ũ(Ķ܈u ũíZ‹÷íĩ áŊÛ~Į8g“<Įc–cņëĒZõC(ņ˛œ×Ŧ“ŗr!ä•%撸W7ęúBrÖIsŅueéY<ösũ'ˇ^Ģ1Xføgõƒ¨ŖŧŨŌ Ö÷į7Đ#íÕ­¤y6Ŗü-iÚ~†!ô đpģĨÅÕ%›qbΰëģzĸī‚ûnģ~Ä>*ô. * ***********************************************************************/ #include "final/fclassname.h" namespace finalcut { // static class attributes //---------------------------------------------------------------------- // class FClassName //---------------------------------------------------------------------- // constructors and destructor //---------------------------------------------------------------------- FClassName::FClassName() { } //---------------------------------------------------------------------- FClassName::~FClassName() // destructor { } // public methods of FClassName //---------------------------------------------------------------------- // protected methods of FClassName //---------------------------------------------------------------------- // private methods of FClassName //---------------------------------------------------------------------- } // namespace finalcut finalcut-0.9.0/doc/class_template.h000066400000000000000000000061711443250335200172510ustar00rootroot00000000000000/*********************************************************************** * fclassname.h - [brief description] * * * * This file is part of the FINAL CUT widget toolkit * * * * Copyright [year] [Maintainer] * * * * FINAL CUT is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation; either version 3 of * * the License, or (at your option) any later version. * * * * FINAL CUT is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program. If not, see * * . * ***********************************************************************/ /* Standalone class * ════════════════ * * ▕▔▔▔▔▔▔▔▔▔▔▔▔▏ * ▕ FClassName ▏ * ▕▁▁▁▁▁▁▁▁▁▁▁▁▏ */ #ifndef FCLASSNAME_H #define FCLASSNAME_H #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT) #error "Only can be included directly." #endif //#include ... namespace finalcut { //---------------------------------------------------------------------- // class FClassName //---------------------------------------------------------------------- class FClassName { public: // Using-declaration // Typedefs and Enumerations // Constants // Constructors FClassName(); // Disable copy constructor FClassName (const FClassName&) = delete; // Destructor ~FClassName(); // Disable copy assignment operator (=) auto operator = (const FClassName&) -> FClassName& = delete; // Overloaded operators // Accessors // Mutators // Inquiries // Methods // Event handlers // Callback methods // Data members protected: // Typedefs and Enumerations // Constants // Accessors // Inquiries // Methods // Event handlers // Callback methods // Data members private: // Typedefs and Enumerations // Constants // Accessors // Inquiries // Methods // Event handlers // Callback methods // Data members // Friend class }; // FClassName inline functions //---------------------------------------------------------------------- } // namespace finalcut #endif // FCLASSNAME_H finalcut-0.9.0/doc/coding-style.txt000066400000000000000000000023301443250335200172330ustar00rootroot00000000000000============ Coding style ============ Formatting ---------- * A new line should begin after 72 (max. 80) characters * Use 2 spaces indent. Do not use tabs! * Leave a space after the keywords if, switch, while, do, for, and return * Conditions are placed in parentheses with spaces -> if ( a > 5 ) * Use one blank line before and after a for, if, switch, while, do..while code block * In parameter lists, leave a space after each comma * Starting curly brace "{" in a new line Naming ------ * class name: UpperCamelCase * Function: lowerCamelCase * Callback function: cb_lowerCamelCase (beginning with "cb_" as prefix) * Variable: lower_case_underscored Class declaration order ----------------------- The declaration section order is: * public: * protected: * private: Each declaration section should be in the following order: * Using-declarations (using std::string;) * Typedefs and Enumerations * Constants (static const data members) * Constructors * Destructor * Overloaded operators (=, +, -, +=. ...) * Accessors (getXY) * Mutators (setXY) * Inquiries (isXY) * Methods, including static methods * Event handler methods * Callback methods * Data Members (except static const data members) finalcut-0.9.0/doc/console_codes-manual.sh000077500000000000000000000002041443250335200205200ustar00rootroot00000000000000#!/bin/bash # set the xterm window title TERMTITLE="man 4 console_codes" echo -ne "\\033]0;${TERMTITLE}\\007" man 4 console_codes finalcut-0.9.0/doc/console_ioctl-manual.sh000077500000000000000000000002041443250335200205350ustar00rootroot00000000000000#!/bin/bash # set the xterm window title TERMTITLE="man 4 console_ioctl" echo -ne "\\033]0;${TERMTITLE}\\007" man 4 console_ioctl finalcut-0.9.0/doc/faq.md000066400000000000000000000115601443250335200151670ustar00rootroot00000000000000 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 require 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, GNU Hurd, and Oracle Solaris What do I need to write my own programs with FINAL CUT? ------------------------------------------------------- You require 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 the 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 require 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 difficulties, 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. finalcut-0.9.0/doc/fileopen-dialog.png000066400000000000000000000044071443250335200176440ustar00rootroot00000000000000‰PNG  IHDRŒ," ™—PLTE;žPPP€¤ėēŧŧŧîDD˙˙˙ëXĘtRNS@æØfbKGDˆH pHYs  šœtIMEã  RiĨ´eIDATxÚíÍŽã(Įį¸Xœ­•âë*ĢÖ<ĀŧBKšz[˛æœKŸĄ7#{Í7ØØ& 6ĐŠ’gš8¤Ã/UāĘ@˙\ûˇ­Ë~ŒcŒ†NwlüGåĪ 0:qĖļÔTŒC1(c2ēDAaŒg¨ÂXŧŌ0ÆļSS°-5îęvĀ@5iŊĄ1¨ÆŸ˙ž郊c°1 hØŒąj0TģÃAÕVÔ7*ư”(xüL§ŸĒ@ŒĐöŒ21X͆´``Tj5Wę €€ņŨ1†œöûE0ˆŧ.ōK<ŪÆé94 ŊxÔķRãŧ?‘ ÃVˆĀTŖ{õ ™ŧ]Īc¤0ÆcˇÛûE"X| J=¯F…YƒO7Ŗ7gŽëËãva7ņˆC×´ŪčEč•kŅYôųÁTkú„Ή *ƒE`đC~ڍ>&CJŒ^*ôXŒņ)‰1:Ibđ3 Æâ@ųA•ƒŸØņ‹Áč§SYÅhÚ(}߈à ōĢĄ—TPá‘a|ÖŠxwcG*Ôč ęå%pT›uˆ‘0ŪGģԏņMŧ“ ʔŲ Ā Āx ČS```ŠAghËtŒu⹘ŊIÕKÁčBg¨û¤Ŧ҆+Wƒ!˔AyÛÄä͎u2˜Ô?JŸk.hÆ˜ÚÆč$]ĸcãNDRGyß5˛9cCįš åƒ”?ßšGÛXÆĀÎ8e‚ĘFؚįvBF§1˜vIÄĐŽ*ƒ†1Ú:0¨ēŧu&¨Ô™V]ē`(ËôFņ0#Ĩũáw^ C\Ė‘šŠ9 cî,ûžvޝ;~0øŨĐHox÷f1ŋËËN›đjÔ<-”‰AÂoĄ+āY!%jîĀāĄDRwȉŒ%FdŅeb#Ė8Ã~ Ų1D‹ąv‚žé/12Õ0ąÍ×<˜M )1øö;1øĄīõ+ LlM[Íu‡ ? ˜xÃÅ 6Ė\ =dšcW: ž|7-ķƒĘöp˜ö LFScÛ7dMĸ‡XėRK‘íģMØų2+ÆŠDĪŖ¯ø=ČŠv Ĩ`€ĻŒ—Âøī×h/…%ԃŲÃ>—7"„:Ų’š`Č)”ëߔËĀØę„MŽ•õ¯{Ŋą!ԉëė|)cY¨G0Ŗ¸žąĄpŊ ú~P‰ą"ԉĘ|8}ųŅ•˙ō!Ô5†Ķw´t1€ĩu˛Xę“TōBj}÷ĩr&įģ‘l8í&›×éUcũ’Š ēo“åyFÛd[K¤…1ĪĸŲŽãÎxąOėŖÎÜ)ÄĢÃxC!?¨Įx`sū™6׀ÚĮÎxq0ĸ˙pE8ŖŽ‚Š,íŖ~Ėåīžŋŋš 0ŌaˆJį\öΝuãûķw›0cŖGÅbŒ2$c image/svg+xml Application Standard C/C++ Library Operating System Widgets Virtual Terminal Termcap Terminal FINAL CUT finalcut-0.9.0/doc/final-cut-widget-tree.svg000066400000000000000000000230411443250335200207140ustar00rootroot00000000000000 image/svg+xml FApplication FDialog FDialog FLabel FListBox etc. Parent: Child: Subchild: Sub-subchild: Application widget (= 1) Main widget (= 1) Widget(s) of the main widget (â‰Ĩ 0) Widget(s) from the parent widget (â‰Ĩ 0) finalcut-0.9.0/doc/first-steps.md000066400000000000000000001305551443250335200167110ustar00rootroot00000000000000 First steps with the FINAL CUT widget toolkit ============================================= Table of Contents ----------------- - [Basic functions](#basic-functions) - [Widgets](#widgets) - [Widget tree](#widget-tree) - [How to use the library](#how-to-use-the-library) - [Memory Management](#memory-management) - [Event Processing](#event-processing) - [Event handler reimplementation](#event-handler-reimplementation) - [Event types](#available-event-types) - [Timer event](#using-a-timer-event) - [User event](#using-a-user-event) - [Signals and Callbacks](#signals-and-callbacks) - [Default signals](#the-final-cut-widgets-emit-the-following-default-signals) - [Callback function](#example-of-a-callback-function) - [Callback lambda expression](#example-of-an-lambda-expression-callback) - [Callback method](#example-of-a-callback-function) - [Custom signals](#send-custom-signals) - [Widget layout](#widget-layout) - [Coordinates](#coordinates) - [Lengths](#lengths) - [Areas](#areas) - [Dynamic layout](#dynamic-layout) - [Scroll view](#scroll-view) Basic functions --------------- FINAL CUT is a library for creating text-based terminal applications. It runs on several Unix-like platforms. The release of FINAL CUT is licensed under the terms of the GNU Lesser General Public License v3.0 ([GNU LGPL v3](https://www.gnu.org/licenses/lgpl-3.0-standalone.html)), which allows flexible licensing of applications. FINAL CUT was written in the programming language [C++](https://en.wikipedia.org/wiki/C%2B%2B). The object-oriented design allows the creation of fast and lean programs. FINAL CUT is a [widget toolkit](http://en.wikipedia.org/wiki/Widget_toolkit). A user interface usually consists of several [widgets](https://en.wikipedia.org/wiki/Software_widget). FINAL CUT draws widgets on virtual windows and then mapped them on a virtual terminal. It uses the terminal capabilities from the [Termcap library](https://en.wikipedia.org/wiki/Termcap) to display the character matrix of the virtual terminal on the screen or a terminal emulator. It uses various optimization methods to improve the drawing speed.
application structure
Figure 1. Structure of a FINAL CUT application


Widgets ------- FINAL CUT has many widgets. It offers buttons, input fields, menus, and dialog boxes that cover the most common use cases. Widgets are visual elements that are combined to create user interfaces. Own widgets can be easily created by creating a derived class of `FWidget` or other existing widgets. All widgets are instances of [FWidget](https://codedocs.xyz/gansm/finalcut/classfinalcut_1_1FWidget.html) or its subclasses. A widget can contain any number of child widgets. Child widgets are displayed in the display area of the parent widget. Window widgets based on `FWindow` have their own virtual display area and are independent of the parent widget. When a parent widget is disabled, hidden, or deleted, the same operation is used recursively to all its child widgets. The base class `FObject` implements the self-organized object tree behavior. For example, `addChild()` removes the child ownership from an existing parent object before assigning it to the new target. When a child becomes deleted, the parent-child relationship causes its reference in the parent object to be removed. An explicit `delChild()` is no longer required here. Widget tree ----------- An `FApplication` widget is the top-level widget of an application. It is unique and can not have a parent widget. The class `FApplication` manages all settings and assigns keyboard and mouse input to the different widgets.
widget tree
Figure 2. Widget tree of a FINAL CUT application


The main widget of a FINAL CUT application is the only object that `FApplication` can have as a child. This main widget is usually a window object that contains all sub-widgets of the application. A sub-widget can also be another window. How to use the library ---------------------- At the beginning of this introduction to the FINAL CUT we will start with a small example. The following example creates an empty 30×10 character dialog. **File:** *dialog.cpp* ```cpp #include auto main (int argc, char* argv[]) -> int { finalcut::FApplication app(argc, argv); finalcut::FDialog dialog(&app); dialog.setText ("A dialog"); const finalcut::FPoint position{25, 5}; const finalcut::FSize size{30, 10}; dialog.setGeometry (position, size); finalcut::FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
dialog.cpp
Figure 3. A blank dialog


*(Note: You can close the dialog with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *dialog.cpp* you can compile the above program with gcc: ```bash g++ dialog.cpp -o dialog -O2 -lfinal ``` How it works ------------ ```cpp #include ``` All final cut programs have to include the *final.h* header. ```cpp finalcut::FApplication app(argc, argv); ``` This line creates the `finalcut::FApplication` object `app` with the command line arguments `argc` and `argv`. This object manages the application main event loop. It receives keyboard and mouse events and sends them to the target widgets. You have to create an application object before you can create a widgets object. The next line ```cpp finalcut::FDialog dialog(&app); ``` creates the `finalcut::FDialog` object `dialog` with the object `app` as parent object. The `finalcut::FDialog` class is the base class for creating dialog windows. ```cpp dialog.setText ("A dialog"); ``` The title bar of the dialog box gets the text "A dialog". ```cpp finalcut::FPoint position{25, 5}; finalcut::FSize size{30, 10}; dialog.setGeometry (position, size); ``` The dialog window gets a width of 30 and a height of 10 characters. The position of the window in the terminal is at x=25 and y=5 (note: x=1 and y=1 represents the upper left corner). ```cpp finalcut::FWidget::setMainWidget(&dialog); ``` The `dialog` object was now selected as the main widget for the application. When you close the main widget, the entire application quits. ```cpp dialog.show(); ``` A window or widget is not visible directly after its creation. Only the call of `show()` makes it (and its child objects, if available) visible. ```cpp return app.exec(); ``` The last line calls `exec()` to start the application and to return the result to the operating system. The started application enters the main event loop. This loop does not end until the window is closed. Memory Management ----------------- To create a hierarchy of FObjects (or derived classes/widgets), a new FObject has to be initialized with its parent object. ```cpp FObject* parent = new FObject(); FObject* child = new FObject(parent); ``` When the used memory of a parent FObject gets deallocated, the allocated memory of its child objects will also be deallocated automatically. An object can also be assigned to another object later via `addChild()`. ```cpp FObject* parent = new FObject(); FObject* child = new FObject(); parent->addChild(child); ``` The child object assignment can be removed at any time with `delChild()`. ```cpp FObject* parent = new FObject(); FObject* child = new FObject(parent); parent->delChild(child); ``` If an FObject with a parent gets removed from the hierarchy, the destructor automatically deletes the object assignment from its parent object. If a class object doesn't derive from FObject, you have to implement storage deallocation yourself. **File:** *memory.cpp* ```cpp #include using namespace finalcut; auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); // The object dialog is managed by app FDialog* dialog = new FDialog(&app); dialog->setText ("Window Title"); dialog->setGeometry (FPoint{25, 5}, FSize{40, 8}); // The object input is managed by dialog FLineEdit* input = new FLineEdit("predefined text", dialog); input->setGeometry(FPoint{8, 2}, FSize{29, 1}); input->setLabelText (L"&Input"); // The object label is managed by dialog FLabel* label = new FLabel ( "Lorem ipsum dolor sit amet, consectetur " "adipiscing elit, sed do eiusmod tempor " "incididunt ut labore et dolore magna aliqua." , dialog ); label->setGeometry (FPoint{2, 4}, FSize{36, 1}); FWidget::setMainWidget(dialog); dialog->show(); return app.exec(); } ```
memory.cpp
Figure 4. FObject manages its child objects


*(Note: You can close the window with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *memory.cpp* you can compile the above program with gcc: ```bash g++ memory.cpp -o memory -O2 -lfinal ``` Event Processing ---------------- Calling `FApplication::exec()` starts the FINAL CUT main event loop. While the event loop is running, the system checks all the time whether an event has occurred and sends it to the application's currently focused object. The events of the terminal, such as keystrokes, mouse actions, or terminal size changing, are translated into `FEvent` objects, and are sent to the active `FObject`. It is also possible to use `FApplication::sendEvent()` or `FApplication::queueEvent()` to send a specific event to an object. `FObject`-derived objects process incoming events by reimplementing the virtual method `event()`. The `FObject` itself can only call its own events `onTimer()` and `onUserEvent()` and ignores all other events. The `FObject`-derived class `FWidget` also reimplements the `event()` method to handle further events. `FWidget` calls the `FWidget::onKeyPress` method when you press a key, or the `FWidget::onMouseDown` method when you click a mouse button. ### Event handler reimplementation ### An event in FINAL CUT is an object that inherits from the base class `FEvent`. There are several event types, represented by an enum value. For example, the method `FEvent::type()` returns the type `Event::MouseDown` when you press down a mouse button. Some event types have data that cannot be stored in an `FEvent` object. For example, a click event of the mouse requires to store which button was triggered and the position of the mouse pointer at that time. In classes derived from `FEvent`, such as `FMouseEvent()`, we store this data. Widgets get their events from the `event()` method inherited from `FObject`. The implementation of `event()` in `FWidget` forwards the most common event types to specific event handlers such as `FMouseEvent()`, `FKeyEvent()` or `FResizeEvent()`. There are many other event types. You can create your own event types and send them to other objects and widgets. ### Available event types ### ```cpp enum class Event { None, // invalid event KeyPress, // key pressed KeyUp, // key released KeyDown, // key pressed MouseDown, // mouse button pressed MouseUp, // mouse button released MouseDoubleClick, // mouse button double click MouseWheel, // mouse wheel rolled MouseMove, // mouse move FocusIn, // focus in FocusOut, // focus out ChildFocusIn, // child focus in ChildFocusOut, // child focus out FailAtChildFocus, // No further focusable child widgets TerminalFocusIn, // terminal focus in TerminalFocusOut, // terminal focus out WindowActive, // activate window WindowInactive, // deactivate window WindowRaised, // raise window WindowLowered, // lower window Accelerator, // keyboard accelerator Resize, // terminal resize Show, // widget is shown Hide, // widget is hidden Close, // widget close Timer, // timer event occur User // user defined event }; ``` ### Using a timer event ### The following example starts a periodic timer that triggers an `FTimerEvent()` every 100 ms. The virtual method `onTimer()` is then called each time in the same dialog object. **File:** *timer.cpp* ```cpp #include using namespace finalcut; class dialogWidget : public FDialog { public: explicit dialogWidget (FWidget* parent = nullptr) : FDialog{parent} { label.setAlignment (Align::Right); id = addTimer(100); } private: void initLayout() { setText ("Dialog"); setGeometry (FPoint{25, 5}, FSize{23, 4}); label.setGeometry (FPoint{1, 1}, FSize{10, 1}); value.setGeometry (FPoint{11, 1}, FSize{10, 1}); FDialog::initLayout(); } void onTimer (FTimerEvent* ev) override { if ( id == ev->getTimerId() && n < 9999999999 ) { value.setNumber(n); value.redraw(); n++; } } FLabel label{"Counter: ", this}; FLabel value{"0", this}; long n{0}; int id{0}; }; auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); dialogWidget dialog(&app); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
timer.cpp
Figure 5. FObject::onTimer event handler


*(Note: You can close the window with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *timer.cpp* you can compile the above program with gcc: ```bash g++ timer.cpp -o timer -O2 -lfinal -std=c++14 ``` ### Using a user event ### You can use the `FUserEvent()` to create a individual event and send it to a specific object. If you want to create more than one user event, you can specify an identification number (0 in the example below) to identify the different events. Afterwards this number can be retrieved with `getUserId()`. User events should be generated in the main event loop. For this purpose, the class `FApplication` provides the virtual method `processExternalUserEvent()`. This method can be overwritten in a derived class and filled with user code. The following example reads the average system load and creates a user event when a value changes. This event sends the current values to an `FLabel` widget and displays them in the terminal. **File:** *user-event.cpp* ```cpp #include #include #define _BSD_SOURCE 1 #define _DEFAULT_SOURCE 1 using LoadAvg = double[3]; using namespace finalcut; class extendedApplication : public FApplication { public: extendedApplication (const int& argc, char* argv[]) : FApplication(argc, argv) { } private: void processExternalUserEvent() override { if ( getMainWidget() ) { if ( getloadavg(load_avg, 3) < 0 ) FApplication::getLog()->error("Can't get load average values"); if ( last_avg[0] != load_avg[0] || last_avg[1] != load_avg[1] || last_avg[2] != load_avg[2] ) { FUserEvent user_event(Event::User, 0); user_event.setData (load_avg); FApplication::sendEvent (getMainWidget(), &user_event); } for (std::size_t i = 0; i < 3; i++) last_avg[i] = load_avg[i]; } } // Data member LoadAvg load_avg{}, last_avg{}; }; class dialogWidget final : public FDialog { public: explicit dialogWidget (FWidget* parent = nullptr) : FDialog{"User event", parent} { } private: void initLayout() { FDialog::setGeometry (FPoint{25, 5}, FSize{40, 6}); loadavg_label.setGeometry (FPoint{2, 2}, FSize{36, 1}); FDialog::initLayout(); } void onUserEvent (FUserEvent* ev) override { const auto& lavg = ev->getData(); std::setlocale(LC_NUMERIC, "C"); loadavg_label.clear(); loadavg_label << "Load average: " << lavg[0] << ", " << lavg[1] << ", " << lavg[2] << " "; loadavg_label.redraw(); } FLabel loadavg_label{this}; }; auto main (int argc, char* argv[]) -> int { extendedApplication app(argc, argv); dialogWidget dialog(&app); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
user-event.cpp
Figure 6. User event generation


*(Note: You can close the window with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *user-event.cpp* you can compile the above program with gcc: ```bash g++ user-event.cpp -o user-event -O2 -lfinal -std=c++14 ``` Signals and Callbacks --------------------- The callback mechanism is essential for developing applications with FINAL CUT. Callback routines allow the programmer to connect different objects (which do not need to know each other). Connected objects notify each other when an action occurs in a widget. To uniquely identify a widget action, it uses signal strings. For example, if an `FButton` object gets clicked by a keyboard or mouse, it sends the string "clicked". A signal handler explicitly provided by Widget, in the form of a callback function or a callback method, can react to such a signal. A callback function has no return value and can have various arguments: ```cpp void cb_function (FWidget* w, int* i, double* d, ...) {...} ``` The structure of a callback method is the same: ```cpp void classname::cb_methode (FWidget* w, int* i, double* d, ...) {...} ``` We use the `addCallback()` method of the `FWidget` class to connect to other widget objects. 1. For calling functions or static methods via a pointer: ```cpp template< typename Function , typename FunctionPointer::type = nullptr , typename... Args > void FWidget::addCallback ( const FString& cb_signal , Function&& cb_function , Args&&... args) {...} ``` 2. For calling functions or static methods via a reference: ```cpp template< typename Function , typename FunctionReference::type = nullptr , typename... Args > void FWidget::addCallback ( const FString& cb_signal , Function& cb_function , Args&&... args) {...} ``` 3. For calling a member method of a specific instance: ```cpp template< typename Object , typename Function , typename ObjectPointer::type = nullptr , typename MemberFunctionPointer::type = nullptr , typename... Args > void FWidget::addCallback ( const FString& cb_signal , Object&& cb_instance , Function&& cb_member , Args&&... args) {...} ``` 4. For calling a std::bind call wrapper or a lambda expression: ```cpp template< typename Function , typename ClassObject::type = nullptr , typename... Args > void FWidget::addCallback ( const FString& cb_signal , Function&& cb_function , Args&&... args) {...} ``` 5. For calling a std::bind call wrapper to a specific instance: ```cpp template< typename Object , typename Function , typename ObjectPointer::type = nullptr , typename ClassObject::type = nullptr , typename... Args > void FWidget::addCallback ( const FString& cb_signal , Object&& cb_instance , Function&& cb_function , Args&&... args) {...} ``` 6. For calling a lambda function that has been stored in a variable with the keyword auto: ```cpp template< typename Function , typename ClassObject::type = nullptr , typename... Args > void FWidget::addCallback ( const FString& cb_signal , Function& cb_function , Args&&... args) {...} ``` With `delCallback(...)` you can remove a connection to a signal handler or a widget instance. Alternatively, you can use `delCallbacks()` to remove all existing callbacks from an object. 1. To delete functions or static methods callbacks via a pointer: ```cpp template< typename FunctionPtr , typename FunctionPointer::type = nullptr > void FWidget::delCallback (FunctionPtr&& cb_func_ptr) {...} ``` 2. To delete functions or static methods callbacks via a reference: ```cpp template< typename Function , typename FunctionReference::type = nullptr > void FWidget::delCallback (Function& cb_function) {...} ``` 3. To delete all callbacks from a specific instance: ```cpp template< typename Object , typename ObjectPointer::type = nullptr > void FWidget::delCallback (Object&& cb_instance) {...} ``` 4. To delete all callbacks of a signal: ```cpp void delCallback (const FString& cb_signal) {...} ``` 5. To delete all callbacks of a signal and specific instance: ```cpp template< typename Object , typename ObjectPointer::type = nullptr > void delCallback (const FString& cb_signal, Object&& cb_instance) {...} ``` 6. To delete all callbacks from a widget: ```cpp void delCallback() {...} ``` ### The FINAL CUT widgets emit the following default signals ###
FApplication
"first-dialog-opened"
"last-dialog-closed"
FButton
"clicked"
FCheckMenuItem
"clicked"
"toggled"
FLineEdit
"activate"
"changed"
FListBox
"changed"
"clicked"
"row-changed"
"row-selected"
FListView
"changed"
"clicked"
"row-changed"
FMenu
"activate"
FMenuItem
"activate"
"clicked"
"deactivate"
FRadioMenuItem
"clicked"
"toggled"
FScrollbar
"change-value"
FSpinBox
"changed"
FStatusBar
"activate"
FTextView
"changed"
FToggleButton
"clicked"
"toggled"
FWidget
"destroy"
"enable"
"disable"
"focus-in"
"focus-out"
"mouse-press"
"mouse-release"
"mouse-move"
"mouse-wheel-down"
"mouse-wheel-up"
  ### Example of a callback function: ### **File:** *callback-function.cpp* ```cpp #include using namespace finalcut; void cb_changeText (const FButton& button, FLabel& label) { label.clear(); label << "The " << button.getClassName() << " was pressed"; label.redraw(); } auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); FDialog dialog(&app); dialog.setText ("A dialog with callback function"); dialog.setGeometry (FRect{25, 5, 45, 9}); FLabel label (&dialog); label = "The button has never been pressed before"; label.setGeometry (FPoint{2, 2}, FSize{41, 1}); FButton button (&dialog); // Character follows '&' will be used as the accelerator key button = "&Click me"; button.setGeometry (FPoint{15, 5}, FSize{14, 1}); // Connect the button signal "clicked" with the callback function button.addCallback ( "clicked", // Callback signal &cb_changeText, // Function pointer std::cref(button), // First function argument std::ref(label) // Second function argument ); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
callback-function.cpp
Figure 7. Button with a callback function


*(Note: You can close the dialog with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *callback-function.cpp* you can compile the above program with gcc: ```bash g++ callback-function.cpp -o callback-function -O2 -lfinal ```   ### Example of an lambda expression callback: ### **File:** *callback-lambda.cpp* ```cpp #include using namespace finalcut; auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); FDialog dialog(&app); dialog.setText ("Lambda expression as callback"); dialog.setGeometry (FRect{25, 5, 45, 9}); FButton button ("&bottom", &dialog); button.setGeometry (FPoint{15, 5}, FSize{14, 1}); // Connect the button signal "clicked" with the lambda expression button.addCallback ( "clicked", // Callback signal [] (FButton& button, FDialog& dgl) // Lambda function { if ( button.getY() != 2 ) { button.setPos (FPoint{15, 2}); button.setText("&top"); } else { button.setPos (FPoint{15, 5}); button.setText("&bottom"); } dgl.redraw(); }, std::ref(button), // First function argument std::ref(dialog) // Second function argument ); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
callback-lambda.cpp
Figure 8. Button with lambda expression callback.


*(Note: You can close the dialog with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *callback-lambda.cpp* you can compile the above program with gcc: ```bash g++ callback-lambda.cpp -o callback-lambda -O2 -lfinal -std=c++14 ```   ### Example of a callback method: ### **File:** *callback-method.cpp* ```cpp #include using namespace finalcut; class dialogWidget : public FDialog { public: explicit dialogWidget (FWidget* parent = nullptr) : FDialog{parent} { // Connect the button signal "clicked" with the callback method button.addCallback ( "clicked", // Callback signal finalcut::getFApplication(), // Class instance &finalcut::FApplication::cb_exitApp, // Method pointer this // Function argument ); } private: void initLayout() { setText ("Callback method"); setGeometry (FPoint{25, 5}, FSize{25, 7}); button.setGeometry (FPoint{7, 3}, FSize{10, 1}); FDialog::initLayout(); } FButton button{"&Quit", this}; }; auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); dialogWidget dialog(&app); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
callback-method.cpp
Figure 9. Button with a callback method


*(Note: You can close the window with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *callback-method.cpp* you can compile the above program with gcc: ```bash g++ callback-method.cpp -o callback-method -O2 -lfinal -std=c++14 ```   ### Send custom signals ### You can use the `emitCallback()` method to generate a user-defined signal. You can connect this signal later with the method `addCallback()` to a self-defined routine. **File:** *emit-signal.cpp* ```cpp #include using namespace finalcut; class dialogWidget : public FDialog { public: explicit dialogWidget (FWidget* parent = nullptr) : FDialog{parent} { label.setAlignment (Align::Right); label.setForegroundColor (FColor::Black); plus.setNoUnderline(); minus.setNoUnderline(); // Connect the button signal "clicked" with the callback method plus.addCallback ("clicked", this, &dialogWidget::cb_plus); minus.addCallback ("clicked", this, &dialogWidget::cb_minus); // Connect own signals addCallback ("hot", this, &dialogWidget::cb_set_red); addCallback ("regular", this, &dialogWidget::cb_set_black); addCallback ("cold", this, &dialogWidget::cb_set_blue); } private: void initLayout() { setGeometry (FPoint{25, 5}, FSize{22, 7}); setText ("Emit signal"); const FSize size{5, 1}; label.setGeometry (FPoint{8, 1}, size); plus.setGeometry (FPoint{3, 3}, size); minus.setGeometry (FPoint{3, 3} + FPoint{10, 0}, size); FDialog::initLayout(); } void cb_plus() { if ( t < 100 ) t++; if ( t == 30 ) emitCallback("hot"); else if ( t == 1 ) emitCallback("regular"); setTemperature(); } void cb_minus() { if ( t > -99 ) t--; if ( t == 0 ) emitCallback("cold"); else if ( t == 29 ) emitCallback("regular"); setTemperature(); } void cb_set_blue() { label.setForegroundColor (FColor::Blue); } void cb_set_black() { label.setForegroundColor (FColor::Black); } void cb_set_red() { label.setForegroundColor (FColor::Red); } void setTemperature() { label.clear(); label << t << "°C"; label.redraw(); } int t = 20; FLabel label{std::move(FString() << t << "°C"), this}; FButton plus {"&+", this}; FButton minus {"&-", this}; }; auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); dialogWidget dialog(&app); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
emit-signal.cpp
Figure 10. Callbacks with custom signals


*(Note: You can close the window with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *emit-signal.cpp* you can compile the above program with gcc: ```bash g++ emit-signal.cpp -o emit-signal -O2 -lfinal -std=c++14 ``` Widget layout ------------- ### Coordinates ### The positioning of a widget in the terminal works via a coordinate system. It consists of _x_ characters in the horizontal and _y_ characters in the vertical. The upper left corner has the coordinates (1, 1). With the commands `getDesktopWidth()` and `getDesktopHeight()`, the width and height of the terminal get retrieved. These two values result in the position of the lower right terminal corner. The position of a widget is retrievable with `getX()`, `getY()`, and `getPos()` or is definable with `setX()`, `setY()`, and `setPos()`. The data type for each coordinate is an `int`. All positions represent an `FPoint` object. The positioning of the widget is always relative to its parent widget. The top parent widget in a chain of children contains the terminal desktop. There the absolute terminal positions are still identical to the relative positions (`getPos()` = `getTermPos()`). In the case of a child widget, the positioning is corresponding to the upper left corner of the parent widget plus a possible padding space (can be determined with `getLeftPadding()` and `getTopPadding()`). If you want to ignore padding spaces, you have to force this with the `ignorePadding()` method.
widget coordinates
Figure 11. Widget coordinates


```cpp int getX() const; int getY() const; const FPoint getPos() const; int getTermX() const; int getTermY() const; const FPoint getTermPos() const; virtual void setX (int x, bool adjust = true); virtual void setY (int y, bool adjust = true); virtual void setPos (const FPoint& p, bool adjust = true); ``` If you set the value of `adjust` to `false` when calling `setX()`, `setY()`, or `setPos()`, this will prevent the explicit call of `adjustSize()` afterward. This is important to avoid `adjustSize()` loops or to block the `adjustSize()` call from being repeated unnecessarily often. ### Lengths ### The dimensions of a widget can be retrieved and defined separately in width and height. The methods `getWidth()` and `getHeight()` respectively `setWidth()` and `setHeight()` are used for this. Because a length cannot be negative, all lengths are of type `std::size_t`. The maximum size of a child widget automatically results from the size of the parent widget, which is retrievable with `getClientWidth()` and `getClientHeight()`. Some widgets have a border, a title bar, or both, which can reduce the maximum size of the child widget.         widget width â‰Ĩ client widget width
        widget height â‰Ĩ client widget height Corresponding padding space ensures the correct distance here. The padding space can be retrieved separately for all four sides with the widget methods `getTopPadding()`, `getLeftPadding()`, `getBottomPadding()`, and `getRightPadding()`. You can set the required padding space for the widget using the `setTopPadding()`, `setLeftPadding()`, `setBottomPadding()` and `setRightPadding()` methods.         widget width = left padding + client width + right padding
        widget height = top padding + client height + bottom padding
widget lengths
Figure 12. Width and height of a widget


```cpp std::size_t getWidth() const; std::size_t getHeight() const; std::size_t getClientWidth() const; std::size_t getClientHeight() const; int getTopPadding() const; int getLeftPadding() const; int getBottomPadding() const; int getRightPadding() const; virtual void setWidth (std::size_t width, bool adjust = true); virtual void setHeight (std::size_t height, bool adjust = true); void setTopPadding (int top, bool adjust = true); void setLeftPadding (int left, bool adjust = true); void setBottomPadding (int bottom, bool adjust = true); void setRightPadding (int right, bool adjust = true); ``` If the value of `adjust` is set to `false` for `setWidth()`, `setHeight()`, `setTopPadding()`, `setLeftPadding()`, `setBottomPadding()` or `setRightPadding()`, then `adjustSize()` is not explicitly called afterward. This is important to prevent `adjustSize()` loops or to avoid that `adjustSize()` is called unnecessarily often. ### Areas ### The terminal area in which a widget appears determines its geometry. The geometry of a widget is composed of its position and its size. A widget position is always of object type `FPoint` and a widget size of type `FSize`. The widget geometry can be retrieved as `FRect` object via the widget method `getGeometry()` and set with the method `setGeometry()`. The `getTermGeometry()` method gets the total values of the terminal geometry. If you are only interested in the size of a widget, you can also use the method `getSize()`. To set the widget size, you can use the method `setSize()`. The position of a shadow is outside the widget. The shadow size itself as `FSize` object is retrievable via the `getShadow()` method. You can set the widget shadow size with the `setShadowSize()` method. If you want to get the geometry values of a widget, including its shadow, you can use the method `getGeometryWithShadow()` from the FWidget class. If you want to have the entire geometry with shadow for the absolute geometry values as a `FRect` object, you can call the method `getTermGeometryWithShadow()`.
widget geometry
Figure 13. Geometry of widgets


```cpp const FSize getSize() const; const FSize getClientSize() const; const FRect& getGeometry() const; const FRect& getTermGeometry(); const FSize& getShadow() const; const FRect& getGeometryWithShadow(); const FRect& getTermGeometryWithShadow(); virtual void setSize (const FSize& size, bool adjust = true); virtual void setGeometry (const FRect& box, bool adjust = true); virtual void setGeometry (const FPoint& p, const FSize& s, bool adjust = true); virtual void setShadowSize (const FSize& size); ``` If you explicitly set the value of `adjust` to `false` when using the `setSize()`, `setGeometry()` or `setShadowSize()` mutators, the `adjustSize()` method is no longer called automatically. This can be used to prevent recursive `adjustSize()` calls or to avoid unnecessary `adjustSize()` calls. ### Dynamic layout ### A modern terminal emulation like xterm has no fixed resolution. They offer the possibility to change the height and width of the terminal at any time. That triggers a resize-event that calls the `adjustSize()` method. This method allows adapting the widget to a changed terminal size. You can override the `adjustSize()` method to adjust the size and position of the widget. The method `adjustSize()` will also be called indirectly via calling methods `setGeometry()`, `setX()`, `setY()`, `setPos()`, `setWidth()`, `setHeight()`, `setSize()`, `setTopPadding()`, `setLeftPadding()`, `setBottomPadding()`, `setRightPadding()`, or `setDoubleFlatLine()`. Scalable dialogs derived from FDialog can change the dialog size by clicking on the lower right corner of the window. You can intercept a scaling action by overriding the `setSize()` method and adjusting the client widgets. **File:** *size-adjustment.cpp* ```cpp #include using namespace finalcut; class dialogWidget : public FDialog { public: explicit dialogWidget (FWidget* parent = nullptr) : FDialog{parent} { } private: void initLayout() { setText ("Dialog"); setResizeable(); button.setGeometry (FPoint{1, 1}, FSize{12, 1}, false); input.setGeometry (FPoint{2, 3}, FSize{12, 1}, false); // Set dialog geometry and calling adjustSize() setGeometry (FPoint{25, 5}, FSize{40, 12}); setMinimumSize (FSize{25, 9}); FDialog::initLayout(); } inline void checkMinValue (int& n) { if ( n < 1 ) // Checks and corrects the minimum value n = 1; } void centerDialog() { auto x = int((getDesktopWidth() - getWidth()) / 2); auto y = int((getDesktopHeight() - getHeight()) / 2); checkMinValue(x); checkMinValue(y); setPos (FPoint{x, y}, false); } void adjustWidgets() { const auto bx = int(getWidth() - button.getWidth() - 3); const auto by = int(getHeight() - 4); button.setPos (FPoint{bx, by}, false); input.setWidth (getWidth() - 4); const auto ly = int(getHeight() / 2) - 1; input.setY (ly, false); } void adjustSize() override { // Calling super class method adjustSize() FDialog::adjustSize(); // Centers the dialog in the terminal centerDialog(); // Adjust widgets before drawing adjustWidgets(); } void draw() override { // Calling super class method draw() FDialog::draw(); print() << FPoint{3, 3} << FColorPair{FColor::Black, FColor::White} << "Text on " << FColorPair{FColor::Blue, FColor::Yellow} << "top"; } FLineEdit input{"Middle", this}; FButton button{"&Bottom", this}; }; auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); dialogWidget dialog(&app); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
size-adjustment.cpp
Figure 14. Dynamic layout


*(Note: You can close the window with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *size-adjustment.cpp* you can compile the above program with gcc: ```bash g++ size-adjustment.cpp -o size-adjustment -O2 -lfinal -std=c++14 ``` Scroll view ----------- The scroll view of the `FScrollView` class allows users to view content that is larger than the visible area. The `FScrollView` widget displays the horizontal and vertical scroll bar by default, only if the content size requires it. You can controll this behavior by the two methods `setHorizontalScrollBarMode()` and `setVerticalScrollBarMode()`. ```cpp setHorizontalScrollBarMode (finalcut::ScrollBarMode); setVerticalScrollBarMode (finalcut::ScrollBarMode); ``` You pass the scroll bar visibility mode as a value of the enum type `finalcut::ScrollBarMode`. ```cpp enum class ScrollBarMode { Auto = 0, // Shows a scroll bar when area is larger than viewport Hidden = 1, // Never shows a scroll bar Scroll = 2 // Always shows a scroll bar }; ``` You can add widgets to an `FScrollView` object as child objects and place them (with a widget positioning method) on the scrollable area. If a client widget gets the focus, it automatically scrolls the viewport to the focused widget. You can use the methods `scrollTo()`, `scrollToX()`, `scrollToY()` and `scrollBy()` to set the scroll position of the viewport directly. The `FButtonGroup` widget uses `FScrollView` to display more buttons in the frame than the height allows. **File:** *scrollview.cpp* ```cpp #include #include using namespace finalcut; class dialogWidget : public FDialog { public: explicit dialogWidget (FWidget* parent = nullptr) : FDialog{parent} { scrollview.setGeometry(FPoint{1, 1}, FSize{22, 11}); scrollview.setScrollSize(FSize{60, 27}); // Attention: getColorTheme() requires an initialized terminal const auto& wc = getColorTheme(); setColor (wc->label_inactive_fg, wc->dialog_bg); scrollview.clearArea(); FColorPair red (FColor::LightRed, wc->dialog_bg); FColorPair black (FColor::Black, wc->dialog_bg); FColorPair cyan (FColor::Cyan, wc->dialog_bg); static std::vector d { {"NW", FPoint{3, 13}, FPoint{1, 1}, black}, {"N", FPoint{10, 13}, FPoint{21, 1}, red}, {"NE", FPoint{17, 13}, FPoint{41, 1}, black}, {"W", FPoint{3, 15}, FPoint{1, 10}, black}, {"*", FPoint{10, 15}, FPoint{21, 10}, black}, {"E", FPoint{17, 15}, FPoint{41, 10}, black}, {"SW", FPoint{3, 17}, FPoint{1, 19}, black}, {"S", FPoint{10, 17}, FPoint{21, 19}, cyan}, {"SE", FPoint{17, 17}, FPoint{41, 19}, black} }; for (auto&& b : d) { scrollview.print() << std::get<2>(b) + FPoint{10, 5} << std::get<3>(b) << std::get<0>(b); auto edit = new FLineEdit("direction " + std::get<0>(b), &scrollview); edit->setGeometry(std::get<2>(b) + FPoint{1, 1}, FSize{17, 1}); auto btn = new FButton(std::move(std::get<0>(b)), this); btn->setGeometry(std::get<1>(b), FSize{4, 1}); btn->unsetShadow(); btn->addCallback ( "clicked", this, &dialogWidget::cb_button, std::get<2>(b) ); } } private: typedef std::tuple direction; void initLayout() { setText ("Dialog"); setGeometry (FPoint{28, 2}, FSize{24, 21}); FDialog::initLayout(); } void cb_button (const FPoint& p) { scrollview.scrollTo(p); } FScrollView scrollview{this}; }; auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); app.initTerminal(); // Terminal initialization dialogWidget dialog(&app); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ```
scrollview.cpp
Figure 15. Dialog with a scrolling viewport


*(Note: You can close the window with the mouse, Shift+F10 or Ctrl+^)* After entering the source code in *scrollview.cpp* you can compile the above program with gcc: ```bash g++ scrollview.cpp -o scrollview -O2 -lfinal -std=c++14 ``` finalcut-0.9.0/doc/first-steps_callback-function.cpp.png000066400000000000000000000015511443250335200233060ustar00rootroot00000000000000‰PNG  IHDRx ôŠjc pHYs  šœtIMEäC"ƒPLTE:OOOģģģūūū˙˙˙Ų›ytRNS@æØfbKGDaf¸}ÍIDATxÚíÜmŽƒ āŊ‚?¸‘ėžĀõĖũ¯˛Ā0Šˆ­6ļ•íKjäģOGÄÍ&íט%ŨHú’ôŋņD’sÚH]ĨŸáÃŦÆķaŠŽŠŅÕæ8 oēěøJŊŅķ<¯oāõIxũ <ųKLi™t&žė.ŧBĩ¯3˛Ė¸}ÆK9ôIsš”—6>ë9ŪĖËÆĨH:isŌfŠūëzĮãL~ĨÜ4—YÖíÂ˙~˙lâSt§ÉCšÄ›*~ę;Õû2] ¯Â‰ŧŠE~_‹f,’nß@äŨūÜ5ŋˇqųyÚmx—pņĄ“õĪú:Ųm\žÛČ=”î~hĨšOÁßIîÚü[üI ‘/žL]JĀ<đ¯ÂÛŽą´Ā7v <đĀ<đĀ<đĀ<đĀ<đ¯Āûŧ˛Ë>sÆŽÆī}Ÿ#I-ĮtjäíōÍŪŽˇG–Mķxū,ũŲWŠxNõ6k#>T^ũãŲ.ëËąą]ÆwY>ŸKÎŌwG䕝#Āy[o#.SŪw:TŊ~ĒSS›L_}ßŧīšøė_áéžāé^.ßŧ,‘ŠÆųZ[~¨Pæē%~^.´jmļčģ3ō´_€">ģ×Ęč–u”-ŋ˛Ŋˆ<=oÕ{ņ´ÜQ?,ø¯Ö|ļlâ¸pwq?Zí62VÚĶŽ˛ĩsÅNYßÛø%{ÂĀž€xāxāxāxāx⁸ĪÅ?úe\āOŇbø"vĪÅž%|ü‚žuŧnĪâ°tÆ1dŗc,ˇīãkčSė}fŌ ŪCÃø´R"~xūJîEw›JäuKørÍ_ĪŠ!ķnđåns=üt9ü‘ƒČ4>¤îÁ<đĀ|ø—'āxāxā?ß5–đ3§Ā<đƒ—ÔÚŖ xāxāxāīūˆÔ˜ šõĄIENDŽB`‚finalcut-0.9.0/doc/first-steps_callback-lambda.cpp.png000066400000000000000000000011711443250335200226770ustar00rootroot00000000000000‰PNG  IHDRx ôŠjc pHYs  šœtIMEä`@M1PLTE:OOOģģģūūū˙˙˙Ų›ytRNS@æØfbKGDaf¸}ŨIDATxÚíÜmŽÂ €a¯Đ+įî \/ā$Ŋ˙U–Ą”ēF4M-úN´Đg'düU—Y¸NâããņrÛ×ϧHÃ=cjōIJũā%ĩũáŨ^đãč˙F'žųކąŗy]ÃŧˆÍ§ëšŽ„­ą{ã|é|Û~kg^U<ŌĨ–ŗŸĮąé4Nk¤\ˇ­Tʞi’yuĶ^ŌžųßĶé§!ķ5Ū2ûéq}ī×ČbĪ o×åÁŠ|:ķ˛Č|IhAĶŅšÁ°ÚsŽ/{¸đvĒŒĪŽÄ ~ļî.~ŗĖģ僛ņz˙ܙˆˇęņķj˛Ŧ6ŽT—tŸÖÕ#œéeå‰÷hUÅV­6k}­ā?īہ;ŒÁIENDŽB`‚finalcut-0.9.0/doc/first-steps_emit-signal.cpp.png000066400000000000000000000007531443250335200221430ustar00rootroot00000000000000‰PNG  IHDRĀ€¯Ē{X pHYs  šœtIMEä5`Š.”PLTE:OOOģģģūūū˙˙˙Ų›ytRNS@æØfbKGDaf¸}OIDAThŪíŲ]nƒ0ā\‡ŊĀJ{Ú´Ø­æūWéƒ ‚H Ū&–f¤–ŋøW‘sû\Dæ6劀Qęg~qWgåÃ`WJšTĄj¨ũ„ĸÜ P. ĶXv‘ՋІІj}|ŒãÛ^ @\ęĸ{`ę’ °ß´āO@­°ˆ0 E¨–K™Mˆ2‹Ļ1¨ëąõVŲ{Q2ŧČnФ 5´|HČ HøúN€ķ€KPÖ> ^î­/U Äá€ä.9ņ:ž3ȇdw$¸d‚ypŗfQ20 2/°Œ…ÆŨ”ø_`û`ëgƍč °Ū[XGĀ;đušåxéq Våž(gå‰íú˜u˙dwŗüéH€/ d˙ŸœzĻ I!@€]ßäxb€“äyœIENDŽB`‚finalcut-0.9.0/doc/first-steps_memory.cpp.png000066400000000000000000000015371443250335200212430ustar00rootroot00000000000000‰PNG  IHDRPŦY.ę pHYs  šœtIMEä7‹$Ë.PLTE:OOOTiΚģģģūūū˙˙˙GŨr‡tRNS@æØfbKGD†Ū•zŊIDATxÚíÜ]nã đ^'ŪķâTÚ ųÕ`Ĩ}'u5WčąËĮ€Á‰íĮ†Ļ˙Q  ôW`܈J}ųŸÄĨÁx ņ+ WûÕĨOĮ "˙š-Ô04"CŠŊ,@/-AͲvDv­Í5x^r÷šģĻĘĐÎ9ŽĄdФtĶ/ū{}ũSíî@ģĄÅ3ējˇF5¨‰ 3ZoŌĨûPŸõWŋ˙8ëģŨ.͝ūÁÖ5ŗūŒPj< €úû Z4´áéԀ ( € ( € ( € č¨ĒO}û{3í3Ё‡T§=m돀~Đ6hiĒ*AĩžI[hoĒž7KmŸ’¯{w­¸æv5>7ÆĄ/ÜâëP ä’ΨûĻ×\ÂŌgm*o;nF— jÔĩTƒšåå%ÍĄÜĄîõĄęp÷ÍhŧžĖ¨šĖ¨Ú3Ŗ§B÷ėŅe¨šáĮlBš™eŊß<1ë]ƒßCšõŽ‘ŗŪ]?šß>ŗ_Ą…S‹Đ7?zԌ~š8účOO§AmÔųS € čķ@qR( € čųPŊđæ™îQĖôŅ›Æ:Ē[R”Ž†ÚŗQ-¤­Ã촚OOėIĘØîßį:†~ąûđ˜Â÷Û¸=ļ…ą„øÔéH_Uœ1>ĘÚĶ3ĒĐ/ūĀųŌģ>éyVÚ?[‡Uú” Ą45ŗ5Ĩ;PÚåÁS(ņ‘ų4n‡q\ĩË;å-P%w‘CyĐUh˜š)t’L“å–woUĄúv&PIīæâ} ʙ˛?BíŠ%Ų9ļ‡L•ûQ¸CH įĢąËčdųC֏g˛žŦAWng šķ>z”­€ ( € ( € ( € č T4ø× € ( ƒ†hųļ( € ( € čĶBŋČTΊøZIENDŽB`‚finalcut-0.9.0/doc/first-steps_scrollview.cpp.png000066400000000000000000000016141443250335200221200ustar00rootroot00000000000000‰PNG  IHDRĐ`87ę† pHYs  šœtIMEä&(ÅōE˙PLTE:OOOTiÎŖëģģģūūū˙˙˙QŲuÔtRNS@æØfbKGD˙-ŪęIDATxÚíŨ[nã €án—úŊ/Y€%V€ätRŪYb ŗė_:IHą!ä?’ë`'ūr_Č­oĮ‹øČokTĖŲūY &'ä”Ãw!'ôqž,ä…\•3CnnĖ94gr^jņ|•åo Ũ÷ōאËb+“ŅaOF•AķÖķCރM“ũ3Īķô:O´SáŅÛdąĐ˙€N"c\AĶ9ĩōœ‹î@y˛Ún`T9ôÕ$Ūƒž„h ˛Û~o â”R b…zÕ@Ŗn=,Ķõĸqt÷}HŨTjȘQŲ[Ã⿯•Õ0ÍÕŋÛwBÃRuvCĶíĩ<-[ËŽ8¤‚Ô÷†Õ]Č:Õ臆ģĐ2‹ÎHų!—Ō˜}™Zr#4÷ēeWZzRķ˛Š×]f¤vTŨŪx~菍zĄËWŪwž”ôŌPĒÚŸ6€€€€€€€€€€€€€ž ˛wí:;ÅC])čTŦęēŽ;NĨ —RWŽK4ĶŊ9¨ĩņ™üúĄöž ŌŪˇuÚûFUƒßzã”r+zO|FƊ%‡D*H„!‘!H¤„„š !Īī3˜ ”ēüPâ^€ŌîG@Ī e   Đí īō1›ÖUÉž×ÚNžIĪ:ˇ\Nŋ]*–Q¤@ÚéXH>€¤’ŽtLÕi­e¨ę´§ętlɐô@rCgĐēL¯;zžu=Ũ;f‡mīX×ÄŠˆņQN(tš‚ĸ/ˇ6CÅ2J -žų!Šm¤#ĄĐ°åļÁwe$7f ÆGIÛ(4>ĒŖ{3>b|ÄŠˆņŅCčx _n-ŸųąÎ.¯öũŖūÔ{ žNh_ō‚oëôū'Ąc/ōË@íŊTl‡eØÂøčå R˙¯—åå"Cˇo‡z¤Œáĩۚ:–2œQ¨Ģ›)´ąÚQIÜĪ8´‰oˇsW?_… Žņåomv1å ÕCā ņ?ģZØŅčSP}§‡Uj{PKY7ô[t)TcîįĢ@š”oJ€ (P @ (P S- Đ%ЏazŠÃ,´Ēž€&‡†{ŗûĄu¸ļÁcTŲÕē=ÉÜbGW ˇHē6¨Nũ*÷"Đjm:'& sātt5PÍō[M (Pž) (P @}#4—˙g2 @ĩ˛7 @ (P Ģ„ūŽ…8ß~>čŧIENDŽB`‚finalcut-0.9.0/doc/first-steps_timer.cpp.png000066400000000000000000000006251443250335200210500ustar00rootroot00000000000000‰PNG  IHDRČPŽC'ƒ pHYs  šœtIMEä JĨlPLTE:OOOģģģūūū˙˙˙Ų›ytRNS@æØfbKGDaf¸}ųIDATXÃí×a ƒ0 `¯Ŋ@ 'p7Ø.Âģ˙Uö#įÔ9Eۃ"…âgL-Ø=^ĸ'§Ō’QTs Ņ<"9 Ņō:‰C Ē€#€*PÎGŧ‚Rß\™Tˇ…Üûūö5CöT’VŌâwŽEPTQŧ'~=w­ä*ĐĐ)ŒĀH "‘ˆIP&HPF„‘†‘Ųĸ…Ãč7Ā´…ĖÖ´Š"0 ™ĖQ˜IZ}#ˆi°:OcUqČ´ņˆHzkÍī_¨˙CėĶĮŗ÷côá$ÕŨ6Ū{GKx@!B$ųĮ˙I`ˆš 2DC„"D.<ZėÜRúÉmIENDŽB`‚finalcut-0.9.0/doc/first-steps_user-event.cpp.png000066400000000000000000000011121443250335200220150ustar00rootroot00000000000000‰PNG  IHDRPpē5h pHYs  šœtIMEä Ôį,zPLTE:OOOģģģūūū˙˙˙Ų›ytRNS@æØfbKGDaf¸}ŽIDATxÚíÚmŽ‚0€a¯Đs&œĀŊÁ÷ŋĘZč'–„UĀŽž“4…Š–Gʀ1^~аÆ%ÆĮ@kĮ-/úžPį|ŗÃāf´ßžķv­ čûąĘĨļÛũž^ŋvÚƒĄ;,Ŋ_Ū õ—Âm/äÆžŠ)žÕ\;Įģ†c_ĐXŲĄŌSÎCSõ[7žĘŗčÁP×y˜@ũ<¨šŽŖ‚v|:(P @ (P @ ôЅWļĪ&š÷ŋÁärŋ–?Ē’z-Ūˇ}ŋ–?*’úķ q™Œ‘¸<Ķ„žW#iĖ÷ÚXú ¤+P}Ū\N,ņ@a…Ķ~ĒÅ1d*;Aog,MļCĢö›ÅT¤Uķi…–ųg %dęo{:ķxuĒU5?Á"ŋ3ô~ŧ}{’ęm¨; :ßvîĄå5Ēs_æĩJčJū¨ŠĒ:_G*ąúķXYõĶkÂõˇãdĘËÜZųƒĄōШ¸ŋĮĄĐnž”lyFķí (P @ (P @Ē˙ō˙ŖP @öa: @ (P o ũ"^r: ~IENDŽB`‚finalcut-0.9.0/doc/framebuffer.txt000066400000000000000000000011021443250335200171120ustar00rootroot00000000000000Framebuffer =========== FINAL CUT determines the used number of bits per pixel (bpp) for Linux framebuffer console to determine whether 16 (or more) different background colors can be displayed. Therefore your user needs read-access to the framebuffer device (/dev/fb0 or /dev/fb/0). You can check this with the following command: > fbset -i If the read-access is not given, it can help to add your user to the group "video". To do this, please enter the following command: > sudo usermod -a -G video USERNAME You can check the group members with the id command: > id finalcut-0.9.0/doc/mouse-control.md000066400000000000000000000021441443250335200172240ustar00rootroot00000000000000Title bar actions on mouse clicks ================================= The FINAL CUT title bar of dialog windows has different behaviors on mouse clicks.
![](FDialog.svg) Clicking on the title bar ------------------------- * A left-click activates and raises the window. After that, you can drag the window with the mouse. * A middle-click activates and lower the window. * A right-click activates the window and keeps its current position in the window stack. * A double-click maximizes or restores the window size for a resizable dialog. Clicking the title bar buttons ------------------------------ * Single-clicking on the title bar menu button opens the title bar menu. * Double-clicking on the title bar menu button closes the dialog. * Single-clicking on the minimize button minimizes the window. * Single-clicking on the zoom button maximizes the window size. * Single-clicking on the unzoom button restores the window size. Dialog resize corner -------------------- If you click and drag the left mouse button in the lower right corner of the window, you can change the size of a resizable dialog. finalcut-0.9.0/doc/ncurses.supp000066400000000000000000000113631443250335200164720ustar00rootroot00000000000000# $Id: ncurses.supp,v 1.7 2008/09/20 18:43:42 tom Exp $ ############################################################################## # Copyright (c) 2008 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # This is a warning-suppression file for valgrind and ncurses. # # ncurses can also be configured using the --disable-leaks option, which # allows an application to call _nc_freeall() or _nc_free_and_exit(), to # free all of ncurses' "permanent" memory. # # Some of these leaks can be freed if the application does its own cleanup, # for example: # delscreen(SP); # del_curterm(cur_term); # However, few applications do this. { ncurses_leak__nc_add_to_try Memcheck:Leak fun:*alloc fun:_nc_add_to_try } { ncurses_leak__nc_home_terminfo Memcheck:Leak fun:malloc fun:_nc_home_terminfo } { ncurses_leak__nc_init_wacs Memcheck:Leak fun:calloc fun:_nc_init_wacs } { ncurses_leak__nc_keyname Memcheck:Leak fun:calloc fun:_nc_keyname } { ncurses_leak__nc_keyname_2 Memcheck:Leak fun:malloc fun:strdup fun:_nc_keyname } { ncurses_leak__nc_printf_string Memcheck:Leak fun:malloc fun:_nc_doalloc fun:_nc_printf_string } { ncurses_leak__nc_read_termtype Memcheck:Leak fun:*alloc fun:_nc_read_termtype fun:_nc_read_file_entry } { ncurses_leak__nc_read_termtype_2 Memcheck:Leak fun:*alloc fun:_nc_doalloc fun:_nc_read_termtype fun:_nc_read_file_entry } { ncurses_leak__nc_scroll_optimize Memcheck:Leak fun:*alloc fun:_nc_hash_map fun:_nc_scroll_optimize } { ncurses_leak__nc_scroll_optimize_2 Memcheck:Leak fun:*alloc fun:_nc_doalloc fun:_nc_scroll_optimize } { ncurses_leak__nc_setupscreen Memcheck:Leak fun:calloc fun:_nc_setupscreen fun:newterm } { ncurses_leak__nc_setupscreen_2 Memcheck:Leak fun:calloc fun:newwin fun:_nc_setupscreen } { ncurses_leak__nc_setupterm_1 Memcheck:Leak fun:malloc fun:strdup fun:_nc_setupterm } { ncurses_leak__nc_setupterm Memcheck:Leak fun:calloc fun:_nc_setupterm } { ncurses_leak__nc_setupscreen_3 Memcheck:Leak fun:calloc fun:_nc_makenew fun:newwin fun:_nc_setupscreen } { ncurses_leak__nc_set_buffer Memcheck:Leak fun:malloc fun:_nc_set_buffer } { ncurses_leak__nc_tparm_analyze Memcheck:Leak fun:*alloc fun:_nc_doalloc fun:_nc_tparm_analyze } { ncurses_leak__nc_trace_alloc Memcheck:Leak fun:*alloc fun:_nc_doalloc fun:_nc_trace_alloc } { ncurses_leak_start_color Memcheck:Leak fun:calloc fun:start_color } { ncurses_leak_tparm Memcheck:Leak fun:realloc fun:_nc_doalloc fun:tparm } { ncurses_leak_tparam_internal Memcheck:Leak fun:realloc fun:_nc_doalloc fun:get_space fun:save_number fun:tparam_internal } finalcut-0.9.0/doc/newfont-8x16.txt000066400000000000000000006213741443250335200170350ustar00rootroot00000000000000newfont 8x16 ------------ fc::NF_rev_left_arrow2 fc::NF_rev_right_arrow2 Unicode 0xe1b4 Unicode 0xe1b5 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│ │ 1│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│██│██│██│██│██│██│ │ 2│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│██│██│██│██│██│██│ │ 3│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│██│██│██│██│██│██│ │ 4│██│ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│██│██│██│██│██│██│ │ 5│██│ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │ │██│ │ 6│ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │ │██│ │ 7│ │ │ │ │ │ │██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │██│ │ 8│ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│██│██│██│██│██│██│██│ │ 9│██│ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│██│██│██│██│██│██│ │ 10│██│ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│██│██│██│██│██│██│ │ 11│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│██│██│██│██│██│██│ │ 12│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│ │ 13│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│ │ 14│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_border_line_left_up fc::NF_radio_button3 Unicode 0xe1b6 Unicode 0xe1b7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│██│ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│ │ │ │ │ │ │ │ 1│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│ │ │ │ │ │ │ │ 2│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│ │ │ │ │ │ │ │ 3│ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│ │ │ │ │ │ │ │ 4│ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│ │ │ │ │ │ │ │ 5│ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│ │ │ │ │ │ │ │ 6│ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│ │ │ │ │ │ │ │ 7│ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │ │ │ 8│ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ 9│ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ 10│ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ 13│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ 14│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_border_corner_upper_right fc::NF_rev_border_line_right Unicode 0xe1b8 Unicode 0xe1b9 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│ │ 1│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│██│██│██│██│██│██│ │ 2│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│██│██│██│██│██│██│ │ 3│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│██│██│██│██│██│██│ │ 4│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│██│██│██│██│██│██│ │ 5│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│██│██│██│██│██│██│ │ 6│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│██│██│██│██│██│██│ │ 7│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│██│██│██│██│██│██│██│ │ 8│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│██│██│██│██│██│██│██│ │ 9│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│██│██│██│██│██│██│ │ 10│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│██│██│██│██│██│██│ │ 11│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│██│██│██│██│██│██│ │ 12│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│ │ 13│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│ │ 14│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│██│██│██│██│██│██│██│ │ 15│██│██│██│██│██│██│██│ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_border_line_vertical_left fc::NF_rev_border_corner_lower_right Unicode 0xe1ba Unicode 0xe1bb 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│██│██│██│██│██│██│██│ │ 0│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│ │ 1│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│██│██│██│██│██│██│ │ 2│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│██│██│██│██│██│██│ │ 3│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│██│██│██│██│██│██│ │ 4│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│██│██│██│██│██│██│ │ 5│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│██│██│██│██│██│██│ │ 6│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │ │ │ │ 7│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│██│██│██│██│██│██│██│ │ 8│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│██│██│██│██│██│██│██│ │ 9│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│██│██│██│██│██│██│ │ 10│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│██│██│██│██│██│██│ │ 11│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│██│██│██│██│██│██│ │ 12│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│ │ 13│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│ │ 14│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│██│██│██│██│██│██│██│ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_border_line_left fc::NF_rev_up_arrow2 Unicode 0xe1bc Unicode 0xe1bd 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│██│ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│ │ │ │ │ │ │ │ 1│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│ │ │ │ │ │ │ │ 2│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│ │ │ │ │ │ │ │ 3│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│ │ │ │ │ │ │ │ 4│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│ │ │ │ │ │ │ │ 5│ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│ │ │ │ │ │ │ │ 6│ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│ │ │ │ │ │ │ │ 7│ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│██│ │ │ │ │ │ │ │ 8│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│██│ │ │ │ │ │ │ │ 9│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│ │ │ │ │ │ │ │ 10│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│ │ │ │ │ │ │ │ 11│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│ │ │ │ │ │ │ │ 12│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│ │ │ │ │ │ │ │ 13│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│ │ │ │ │ │ │ │ 14│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│██│ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_down_arrow2 fc::NF_border_line_left_down Unicode 0xe1be Unicode 0xe1bf 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│ │ 1│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │██│██│██│██│██│ │ 2│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │██│██│██│██│██│ │ 3│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │██│██│██│██│██│ │ 4│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │██│██│██│██│██│ │ 5│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │██│██│██│██│██│ │ 6│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │██│██│██│██│██│ │ 7│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│██│ │ 8│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │██│██│██│ │ 9│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │██│██│██│██│ │ 10│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │██│██│██│██│██│ │ 11│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│ │ 12│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│ │ 13│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│ │ 14│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│██│ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_border_corner_middle_lower_left fc::NF_rev_up_arrow1 Unicode 0xe1c0 Unicode 0xe1c1 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │██│ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │██│ │ │ │ │ 1│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │██│ │ │ │ │ 2│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │██│ │ │ │ │ 3│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │██│ │ │ │ │ 4│ │██│██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │██│ │ │ │ │ 5│ │██│██│██│██│ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │██│ │ │ │ │ 6│ │██│██│██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │██│██│██│██│██│ 7│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │ │ │ 8│ │██│██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ 9│ │██│██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ 10│ │██│██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │██│██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │██│██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ 13│ │██│██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ 14│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_down_arrow1 fc::NF_border_line_vertical_right Unicode 0xe1c2 Unicode 0xe1c3 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│ 1│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│ │ │ 2│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│ │ │ 3│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│ │ │ 4│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│ │ │ 5│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│██│██│██│ │ │ 6│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│██│██│ │ │ 7│██│██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│ │ │ │ │ │ 8│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│ │ │ │ │ 9│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│ │ │ │ 10│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│ │ │ 11│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│ │ 12│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│ 13│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│ 14│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│██│ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_border_line_up_and_down fc::NF_shadow_box_middle Unicode 0xe1c5 Unicode 0xe1c6 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│██│██│██│██│██│██│██│██│ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │ │ │ │ 1│██│██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │ │ 2│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │ │ │ 3│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │ │ │ 4│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │ │ │ │ 5│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │ │ │ │ 6│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │ │ │ │ 7│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │ │ │ 8│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ 9│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ 10│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ 13│██│██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ 14│██│██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│██│██│██│██│██│██│██│██│ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_shadow_box_hdd fc::NF_rev_left_arrow1 Unicode 0xe1c7 Unicode 0xe1c8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│██│ 1│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │ │ 2│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │ │ │ 3│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │██│██│██│ │ 4│ │██│██│██│██│ │ │██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │ │ │ │ 5│ │██│██│██│ │ │ │██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │ │ │ │ 6│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │ │ │ │ 7│ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │ │ │ 8│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ 9│ │██│██│██│ │ │ │██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ 10│ │██│██│██│██│ │ │██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│██│ 13│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│██│ 14│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_right_arrow1 fc::NF_rev_menu_button1 Unicode 0xe1c9 Unicode 0xe1ca 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│ 1│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██│ 2│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██│ 3│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██│ 4│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│██│ 5│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│ │ │ │ │ │ │ 6│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│ │ │ │ │ │ │ 7│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│ │ │ │ │ │ │ 8│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│██│██│ 9│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│██│ 10│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██│ 11│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██│ 12│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│ 13│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│ 14│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_menu_button2 fc::NF_border_corner_middle_upper_left Unicode 0xe1cb Unicode 0xe1cc 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│██│ 1│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│██│██│██│██│██│██│██│ 2│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│██│██│██│██│██│██│██│ 3│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│██│██│██│██│██│██│██│ 4│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│██│██│██│██│██│██│██│ 5│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│██│██│██│██│██│██│██│ 6│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │ │ │ │ 7│ │ │ │██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │ │ │ 8│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│██│██│██│██│██│██│██│██│ 9│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│██│██│██│██│██│██│██│ 10│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│██│██│██│██│██│██│██│ 11│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│██│██│██│██│██│██│██│ 12│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│██│ 13│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│██│ 14│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │██│ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_shadow_box_cd fc::NF_shadow_box_left Unicode 0xe1cd Unicode 0xe1ce 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│██│ 1│ │ │ │ │ │██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │ │ 2│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │ │ │ 3│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│ │██│██│ │ │ 4│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│ │ │ │██│ │██│ │ 5│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│ │ │ │██│ │██│ │ 6│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│ │ │ │██│ │██│ │ 7│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│ │██│██│ │ │ 8│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ 9│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ 10│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │ │ │ │ │██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│██│ 13│ │ │ │ │ │██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│██│ 14│ │ │ │ │ │ │██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_border_line_middle_left_down fc::NF_border_line_middle_right_up Unicode 0xe1cf Unicode 0xe1d0 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │ │ │ │ 1│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │ │ 2│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │ │ │ 3│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │ │ │ 4│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │ │ │ │ 5│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │ │ │ │ 6│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│██│██│██│██│██│██│██│ 7│██│██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│██│ │ │ │ │ │ │ │ 8│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│██│ │ │ │ │ │ │ │ 9│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│ │ │ │ │ │ │ │ 10│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│ │ │ │ │ │ │ │ 11│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│ │ │ │ │ │ │ │ 12│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│ │ │ │ │ │ │ │ 13│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│ │ │ │ │ │ │ │ 14│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│██│ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_shadow_box_net fc::NF_rev_up_pointing_triangle1 Unicode 0xe1d1 Unicode 0xe1d2 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│██│ 1│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │ │ 2│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │ │ │ 3│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │██│ │ │██│ │ 4│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │██│██│ │██│ │ 5│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │██│ │██│██│ │ 6│ │██│██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │██│ │ │██│ │ 7│ │██│██│██│██│ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │██│ │ │██│ │ 8│ │██│██│██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ 9│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ 10│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│██│ 13│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│██│ 14│ │██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_border_corner_lower_left fc::NF_border_line_bottom Unicode 0xe1d3 Unicode 0xe1d4 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│██│ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│ │ │ │ │ │ │ │ 1│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│ │ │ │ │ │ │ │ 2│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│ │ │ │ │ │ │ │ 3│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│ │ │ │ │ │ │ │ 4│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│ │ │ │ │ │ │ │ 5│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│ │ │ │ │ │ │ │ 6│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│ │ │ │ │ │ │ │ 7│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│██│ │ │ │ │ │ │ │ 8│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│██│ │ │ │ │ │ │ │ 9│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│ │ │ │ │ │ │ │ 10│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│ │ │ │ │ │ │ │ 11│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│ │ │ │ │ │ │ │ 12│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│ │ │ │ │ │ │ │ 13│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│ │ │ │ │ │ │ │ 14│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│██│██│██│██│██│██│██│██│ 15│██│██│██│██│██│██│██│██│ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_radio_button2 fc::NF_radio_button2_checked Unicode 0xe1d5 Unicode 0xe1d6 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │██│██│██│██│ │ │ 0│ │ │██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│ │ │ │ │██│██│ 1│██│██│ │ │ │ │██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │ │ 2│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │ │ │ 3│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │ │ │ 4│ │ │██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │ │ │ │ 5│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │ │ │ │ 6│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │ │ │ │ 7│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │ │ │ 8│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ 9│ │ │██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ 10│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│██│ │ │ │ │██│██│ 12│██│██│ │ │ │ │██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │██│██│██│██│ │ │ 13│ │ │██│██│██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ 14│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 14│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_down_pointing_triangle1 fc::NF_border_line_upper Unicode 0xe1d7 Unicode 0xe1d8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│██│██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│ 1│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██│ 2│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██│ 3│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██│ 4│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│██│ 5│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│ │ │ │ │ │ 6│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│ │ │ │ │ 7│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│██│ │ │ │ 8│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│ │ │ 9│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│ │ 10│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██│ 11│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██│ 12│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│ 13│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│ 14│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_radio_button1 fc::NF_border_corner_upper_left Unicode 0xe1d9 Unicode 0xe1da 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│██│██│██│██│██│██│██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │ │ │ │ 1│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │██│ 2│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │██│ │ 3│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │██│ │ 4│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ │ 5│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ │ 6│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ │ 7│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ │ 8│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │██│ │ 9│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │██│ │ 10│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │██│ 11│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ 13│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ 14│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│██│ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_shadow_box_checked fc::NF_rev_border_line_right_and_left Unicode 0xe1dc Unicode 0xe1e7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│██│ 1│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │ │ 2│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │ │██│ 3│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │██│██│ 4│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│██│ │ 5│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│██│ │ 6│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│██│ │ │██│██│ │ │ 7│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│ │██│██│ │ │ 8│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │██│██│██│ │ │ │ 9│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │██│██│ │ │ │ 10│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│██│ 13│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│██│ 14│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_up_pointing_triangle2 fc::NF_rev_down_pointing_triangle2 Unicode 0xe1e8 Unicode 0xe1e9 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│ │ 1│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│██│██│██│██│██│██│ │ 2│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│██│██│██│██│██│██│ │ 3│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│██│██│██│██│██│██│ │ 4│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│ │ 5│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │██│██│██│██│██│ │ 6│ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │██│██│██│██│ │ 7│ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │██│██│██│ │ 8│ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│██│ │ 9│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│██│██│██│██│██│██│ │ 10│ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│██│██│██│██│██│██│ │ 11│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│██│██│██│██│██│██│ │ 12│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│ │ 13│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│ │ 14│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_border_corner_middle_lower_right fc::NF_border_corner_middle_upper_right Unicode 0xe1ea Unicode 0xe1eb 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │██│ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │██│ │ │ │ │ 1│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │██│ │ │ │ │ 2│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │██│ │ │ │ │ 3│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │██│ │ │ │ │ 4│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │██│ │ │ │ │ 5│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │██│ │ │ │ │ 6│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│██│██│██│ │ │ │ │ 7│██│██│██│██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │ │ │ 8│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ 9│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ 10│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ 13│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ 14│ │ │ │██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │██│ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_rev_menu_button3 fc::NF_shadow_box_right Unicode 0xe1f4 Unicode 0xe1f5 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│██│██│██│██│██│ │ 1│██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│██│██│██│██│██│██│██│ │ 2│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│██│██│██│██│██│██│██│ │ 3│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│██│██│██│██│██│██│██│ │ 4│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│██│██│██│██│██│██│██│ │ 5│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│██│██│██│██│██│██│ │ 6│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│██│██│██│ │ 7│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│██│██│██│ │ 8│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│██│██│██│██│██│██│██│ │ 9│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│██│██│██│██│██│██│██│ │ 10│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│██│██│██│██│██│██│██│ │ 11│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│██│██│██│██│██│██│██│ │ 12│ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│██│██│██│██│██│██│██│ │ 13│██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│██│██│██│██│██│██│██│ │ 14│██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ fc::NF_Bullet fc::NF_check_mark Unicode 0xe1f9 Unicode 0xe1fb 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │ │ │ │ 1│ │ │ │ │ │ │██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │ │ 2│ │ │ │ │ │ │██│██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │ │ │ 3│ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │██│██│██│ │ │ │ 4│ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│ │ │ 5│ │ │ │ │██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│██│██│██│██│██│██│ │ 6│ │ │ │ │██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│██│██│██│██│██│██│██│ │ 7│██│██│ │ │██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│██│██│██│██│██│██│██│ │ 8│██│██│ │██│██│ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│ │ │ 9│██│██│ │██│██│ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │██│██│██│ │ │ │ 10│ │██│██│██│██│ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ 11│ │ │██│██│██│ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ 12│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ 13│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ 14│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ (column 8 = background color) (column 8 = background color) fc::NF_x_superior Unicode 0xe1fc 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│██│██│ │ │██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │██│██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │██│██│ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│██│██│ │ │██│██│ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘ Some combinations of NewFont glyphs ----------------------------------- finalcut::NF_menu_button 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│██│██│██│ ││ │ │ │ │ │ │ │ ││ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│██│██│██│ ││ │ │ │ │ │ │ │ ││ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_up 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│ ││ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│██│ │ │ ││ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│ │ │ │ ││ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│ │ │ │ │ ││ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_down 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│ │ │ │ │ ││ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│ │ │ │ ││ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│██│ │ │ ││ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│ ││ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_arrow_up 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│ ││ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│ │ │ ││ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│██│ │ │ │ ││ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│ │ │ │ │ ││ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_arrow_down 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ────┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 1│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 2│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 3│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 4│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 5│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 6│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 7│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 8│ │██│██│ │ │ │ │ ││ │ │ │ │ │██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 9│ │██│██│██│ │ │ │ ││ │ │ │ │██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 10│ │██│██│██│██│ │ │ ││ │ │ │██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 11│ │██│██│██│██│██│ │ ││ │ │██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 12│ │██│██│██│██│██│██│ ││ │██│██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 13│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 14│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ────┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴────┘ finalcut::NF_button_arrow_left 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│ │ │██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│ │ │ │██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│ │ │ │ │ ││ │ │ │ │ │ │██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│ │ │ │ │ │ ││ │ │ │ │ │ │██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│ │ │ │ │ ││ │ │ │ │ │ │██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│ │ │ │██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│ │ │██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_arrow_right 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██││██│ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│██││██│ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│ │ │ │ │ │ ││ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│ │ │ │ │ │ ││ │ │ │ │ │ │██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│ │ │ │ │ │ ││ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│██│██││██│ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│██││██│ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██││██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_Drive 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │██│██│██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_CD_ROM 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │██│██│ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││██│ │ │ │██│ │██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││██│ │ │ │██│ │██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││██│ │ │ │██│ │██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │██│██│ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_Net_Drive 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │██│ │ │██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │██│██│ │██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │██│ │██│██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │██│ │ │██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │██│ │ │██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██││██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::CHECKBOX 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::CHECKBOX_ON 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │██││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │██│██││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ ││ │ │ │ │ │██│██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ ││ │ │ │ │ │██│██│ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ ││██│██│ │ │██│██│ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ ││ │██│██│ │██│██│ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ ││ │ │██│██│██│ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ ││ │ │ │██│██│ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██││██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::RADIO_BUTTON 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │ │ │ ││██│██│ │ │ │ │██│██││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │██││ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │██│ ││ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │██│ ││ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ ││ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │██│ ││ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │██│ ││ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │██││ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ ││██│██│ │ │ │ │██│██││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ ││ │ │██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::CHECKED_RADIO_BUTTON 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ ││ │ │██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │ │ │ ││██│██│ │ │ │ │██│██││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │██││ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │██│ ││ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │██│ ││ │ │██│██│██│██│ │ ││ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ ││ │██│██│██│██│██│██│ ││ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ ││ │██│██│██│██│██│██│ ││ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ ││ │██│██│██│██│██│██│ ││ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ ││ │██│██│██│██│██│██│ ││ │ │██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │██│ ││ │ │██│██│██│██│ │ ││ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │██│ ││ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │██││ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ ││██│██│ │ │ │ │██│██││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ ││ │ │██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut-0.9.0/doc/newfont-9x16.txt000066400000000000000000007156511443250335200170400ustar00rootroot00000000000000newfont 9x16 ------------ Specifics for 9-bit characters: 0xc0...0xdf - copying the eighth pixel into the ninth pixel for the rest - the ninth pixel has the background color fc::NF_rev_left_arrow2 fc::NF_rev_right_arrow2 Unicode 0xe1b4 Unicode 0xe1b5 vgacode 0xb4 vgacode 0xb5 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││ │ 1│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│██│██│██│██│██│██│██││ │ 2│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│██│██│██│██│██│██│██││ │ 3│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│██│██│██│██│██│██│██││ │ 4│██│ │ │██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│██│██│██│██│██│██│██││ │ 5│██│ │ │ │██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │ │ │ │██│██││ │ 6│ │ │ │ │ │██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │ │ │ │██│██││ │ 7│ │ │ │ │ │ │██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │██│██││ │ 8│ │ │ │ │ │██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│██│██│██│██│██│██│██│██││ │ 9│██│ │ │ │██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│██│██│██│██│██│██│██││ │ 10│██│ │ │██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│██│██│██│██│██│██│██││ │ 11│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│██│██│██│██│██│██│██││ │ 12│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││ │ 13│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││ │ 14│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_border_line_left_up fc::NF_radio_button3 Unicode 0xe1b6 Unicode 0xe1b7 vgacode 0xb6 vgacode 0xb7 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│██│ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│ │ │ │ │ │ │ ││ │ 1│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│ │ │ │ │ │ │ ││ │ 2│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│ │ │ │ │ │ │ ││ │ 3│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│ │ │ │ │ │ │ ││ │ 4│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│ │ │ │ │ │ │ ││ │ 5│ │██│ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│ │ │ │ │ │ │ ││ │ 6│ │██│ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│ │ │ │ │ │ │ ││ │ 7│ │██│ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │ │ ││ │ 8│ │██│ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ 9│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ 10│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │ │ │ │ │ │ │ ││ │ 13│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │ │ │ │ │ │ │ ││ │ 14│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_rev_border_corner_upper_right fc::NF_rev_border_line_right Unicode 0xe1b8 Unicode 0xe1b9 vgacode 0xb8 vgacode 0xb9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││ │ 1│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│██│██│██│██│██│██│██││ │ 2│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│██│██│██│██│██│██│██││ │ 3│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│██│██│██│██│██│██│██││ │ 4│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│██│██│██│██│██│██│██││ │ 5│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│██│██│██│██│██│██│██││ │ 6│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│██│██│██│██│██│██│██││ │ 7│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│██│██│██│██│██│██│██│██││ │ 8│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│██│██│██│██│██│██│██│██││ │ 9│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│██│██│██│██│██│██│██││ │ 10│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│██│██│██│██│██│██│██││ │ 11│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│██│██│██│██│██│██│██││ │ 12│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││ │ 13│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││ │ 14│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│██│██│██│██│██│██│██│██││ │ 15│██│██│██│██│██│██│██│██││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_rev_border_line_vertical_left fc::NF_rev_border_corner_lower_right Unicode 0xe1ba Unicode 0xe1bb vgacode 0xba vgacode 0xbb 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│██│██│██│██│██│██│██│██││ │ 0│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││ │ 1│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│██│██│██│██│██│██│██││ │ 2│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│██│██│██│██│██│██│██││ │ 3│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│██│██│██│██│██│██│██││ │ 4│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│██│██│██│██│██│██│██││ │ 5│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│██│██│██│██│██│██│██││ │ 6│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │ │ │ │ │ ││ │ 7│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│██│██│██│██│██│██│██│██││ │ 8│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│██│██│██│██│██│██│██│██││ │ 9│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│██│██│██│██│██│██│██││ │ 10│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│██│██│██│██│██│██│██││ │ 11│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│██│██│██│██│██│██│██││ │ 12│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││ │ 13│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││ │ 14│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│██│██│██│██│██│██│██│██││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_border_line_left fc::NF_rev_up_arrow2 Unicode 0xe1bc Unicode 0xe1bd vgacode 0xbc vgacode 0xbd 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│██│ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│ │ │ │ │ │ │ ││ │ 1│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│ │ │ │ │ │ │ ││ │ 2│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│ │ │ │ │ │ │ ││ │ 3│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│ │ │ │ │ │ │ ││ │ 4│ │ │██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│ │ │ │ │ │ │ ││ │ 5│ │ │ │██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│ │ │ │ │ │ │ ││ │ 6│ │ │ │ │██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│ │ │ │ │ │ │ ││ │ 7│ │ │ │ │ │██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│██│ │ │ │ │ │ │ ││ │ 8│ │ │██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│██│ │ │ │ │ │ │ ││ │ 9│ │ │██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│ │ │ │ │ │ │ ││ │ 10│ │ │██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│ │ │ │ │ │ │ ││ │ 11│ │ │██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│ │ │ │ │ │ │ ││ │ 12│ │ │██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│ │ │ │ │ │ │ ││ │ 13│ │ │██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│ │ │ │ │ │ │ ││ │ 14│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│██│ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_rev_down_arrow2 fc::NF_border_line_left_down Unicode 0xe1be Unicode 0xe1bf vgacode 0xbe vgacode 0xbf 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││ │ 1│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │██│██│██│██│██│██││ │ 2│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │██│██│██│██│██│██││ │ 3│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │██│██│██│██│██│██││ │ 4│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │██│██│██│██│██│██││ │ 5│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │██│██│██│██│██│██││ │ 6│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │██│██│██│██│██│██││ │ 7│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │██│██│██││ │ 8│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │██│██│██│██││ │ 9│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │██│██│██│██│██││ │ 10│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │██│██│██│██│██│██││ │ 11│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │██│██│██│██│██│██│██││ │ 12│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││ │ 13│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││ │ 14│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│██│ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_border_corner_middle_lower_left fc::NF_rev_up_arrow1 Unicode 0xe1c0 Unicode 0xe1c1 vgacode 0xbc0 vgacode 0xc1 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │██│ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │ │ │██│ │ │ │ ││ │ 1│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │██│ │ │ │ ││ │ 2│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │██│ │ │ │ ││ │ 3│ │██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │██│ │ │ │ ││ │ 4│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │██│ │ │ │ ││ │ 5│ │██│██│██│██│ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │██│ │ │ │ ││ │ 6│ │██│██│██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │██│██│██│██│██││██│ 7│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │ │ ││ │ 8│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ 9│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ 10│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │ │ │ │ │ │ │ ││ │ 13│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │ │ │ │ │ │ │ ││ │ 14│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_rev_down_arrow1 fc::NF_border_line_vertical_right Unicode 0xe1c2 Unicode 0xe1c3 vgacode 0xc2 vgacode 0xc3 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │██│██│██│██│██│██│██││██│ 1│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │██│██│██│██│██│ │ ││ │ 2│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │██│██│██│██│██│ │ ││ │ 3│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │██│██│██│██│██│ │ ││ │ 4│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │██│██│██│██│██│ │ ││ │ 5│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │██│██│██│██│██│ │ ││ │ 6│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │██│██│██│██│██│ │ ││ │ 7│██│██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │██│██│ │ │ │ │ ││ │ 8│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │██│██│██│ │ │ │ ││ │ 9│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │██│██│██│██│ │ │ ││ │ 10│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │██│██│██│██│██│ │ ││ │ 11│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │██│██│██│██│██│██│ ││ │ 12│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │██│██│██│██│██│██│██││██│ 13│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │██│██│██│██│██│██│██││██│ 14│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│██│ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_border_line_up_and_down fc::NF_shadow_box_middle Unicode 0xe1c5 Unicode 0xe1c6 vgacode 0xc5 vgacode 0xc6 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│██│██│██│██│██│██│██│██││██│ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │ │ │ │ │ │ │ ││ │ 1│██│██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │ ││ │ 2│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │ │ ││ │ 3│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │ │ │ │ │ ││ │ 4│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │ │ │ │ │ ││ │ 5│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │ │ │ │ │ ││ │ 6│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │ │ │ │ │ ││ │ 7│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │ │ ││ │ 8│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ 9│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ 10│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │ │ │ │ │ │ │ ││ │ 13│██│██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │ │ │ │ │ │ │ ││ │ 14│██│██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│██│██│██│██│██│██│██│██││██│ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_shadow_box_hdd fc::NF_rev_left_arrow1 Unicode 0xe1c7 Unicode 0xe1c8 vgacode 0xc7 vgacode 0xc8 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││██│ 1│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │ ││ │ 2│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │ │ ││ │ 3│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │ │██│██│██│ ││ │ 4│ │██│██│██│██│ │ │██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │ │ │ │ │ ││ │ 5│ │██│██│██│ │ │ │██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │ │ │ │ │ ││ │ 6│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │ │ │ │ │ ││ │ 7│ │██│ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │ │ ││ │ 8│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ 9│ │██│██│██│ │ │ │██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ 10│ │██│██│██│██│ │ │██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││██│ 13│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││██│ 14│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_rev_right_arrow1 fc::NF_rev_menu_button1 Unicode 0xe1c9 Unicode 0xe1ca vgacode 0xc9 vgacode 0xca ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │██│██│██│██│██│██│██││██│ 1│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │██│██│██│██│██│██│██││██│ 2│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │██│██│██│██│██│██│██││██│ 3│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │██│██│██│██│██│██│██││██│ 4│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │██│██│██│██│██│██│██││██│ 5│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │██│ │ │ │ │ │ ││ │ 6│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │██│ │ │ │ │ │ ││ │ 7│ │██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │██│ │ │ │ │ │ ││ │ 8│ │██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │██│██│██│██│██│██│██││██│ 9│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │██│██│██│██│██│██│██││██│ 10│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │██│██│██│██│██│██│██││██│ 11│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │██│██│██│██│██│██│██││██│ 12│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │██│██│██│██│██│██│██││██│ 13│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │██│██│██│██│██│██│██││██│ 14│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_rev_menu_button2 fc::NF_border_corner_middle_upper_left Unicode 0xe1cb Unicode 0xe1cc vgacode 0xcb vgacode 0xcc ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││██│ 1│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│██│██│██│██│██│██│██││██│ 2│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│██│██│██│██│██│██│██││██│ 3│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│██│██│██│██│██│██│██││██│ 4│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│██│██│██│██│██│██│██││██│ 5│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│██│██│██│██│██│██│██││██│ 6│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │ │ │ │ │ ││ │ 7│ │ │ │██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │ │ ││ │ 8│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│██│██│██│██│██│██│██│██││██│ 9│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│██│██│██│██│██│██│██││██│ 10│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│██│██│██│██│██│██│██││██│ 11│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│██│██│██│██│██│██│██││██│ 12│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││██│ 13│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││██│ 14│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │██│ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_shadow_box_cd fc::NF_shadow_box_left Unicode 0xe1cd Unicode 0xe1ce vgacode 0xcd vgacode 0xce ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││██│ 1│ │ │ │ │ │██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │ ││ │ 2│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │ │ ││ │ 3│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │██│██│ │██│██│ │ ││ │ 4│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│ │ │ │██│ │██│ ││ │ 5│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│ │ │ │██│ │██│ ││ │ 6│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│ │ │ │██│ │██│ ││ │ 7│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │██│██│ │██│██│ │ ││ │ 8│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ 9│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ 10│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │ │ │ │ │██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││██│ 13│ │ │ │ │ │██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││██│ 14│ │ │ │ │ │ │██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_border_line_middle_left_down fc::NF_border_line_middle_right_up Unicode 0xe1cf Unicode 0xe1d0 vgacode 0xcf vgacode 0xd0 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │ │ │ │ │ │ │ ││ │ 1│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │ ││ │ 2│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │ │ ││ │ 3│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │ │ │ │ │ ││ │ 4│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │ │ │ │ │ ││ │ 5│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │ │ │ │ │ ││ │ 6│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│██│██│██│██│██│██│██││██│ 7│██│██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│██│ │ │ │ │ │ │ ││ │ 8│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│██│ │ │ │ │ │ │ ││ │ 9│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│ │ │ │ │ │ │ ││ │ 10│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│ │ │ │ │ │ │ ││ │ 11│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│ │ │ │ │ │ │ ││ │ 12│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│ │ │ │ │ │ │ ││ │ 13│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│ │ │ │ │ │ │ ││ │ 14│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│██│ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_shadow_box_net fc::NF_rev_up_pointing_triangle1 Unicode 0xe1d1 Unicode 0xe1d2 vgacode 0xd1 vgacode 0xd2 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││██│ 1│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │ ││ │ 2│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │ │ ││ │ 3│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │██│ │ │██│ ││ │ 4│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │██│██│ │██│ ││ │ 5│ │██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │██│ │██│██│ ││ │ 6│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │██│ │ │██│ ││ │ 7│ │██│██│██│██│ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │██│ │ │██│ ││ │ 8│ │██│██│██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ 9│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ 10│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││██│ 13│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││██│ 14│ │██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_border_corner_lower_left fc::NF_border_line_bottom Unicode 0xe1d3 Unicode 0xe1d4 vgacode 0xd3 vgacode 0xd4 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│██│ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│ │ │ │ │ │ │ ││ │ 1│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│ │ │ │ │ │ │ ││ │ 2│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│ │ │ │ │ │ │ ││ │ 3│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│ │ │ │ │ │ │ ││ │ 4│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│ │ │ │ │ │ │ ││ │ 5│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│ │ │ │ │ │ │ ││ │ 6│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│ │ │ │ │ │ │ ││ │ 7│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│██│ │ │ │ │ │ │ ││ │ 8│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│██│ │ │ │ │ │ │ ││ │ 9│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│ │ │ │ │ │ │ ││ │ 10│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│ │ │ │ │ │ │ ││ │ 11│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│ │ │ │ │ │ │ ││ │ 12│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│ │ │ │ │ │ │ ││ │ 13│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│ │ │ │ │ │ │ ││ │ 14│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│██│██│██│██│██│██│██│██││██│ 15│██│██│██│██│██│██│██│██││██│ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_radio_button2 fc::NF_radio_button2_checked Unicode 0xe1d5 Unicode 0xe1d6 vgacode 0xd5 vgacode 0xd6 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│ ││ │ 1│██│██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │██││██│ 2│ │ │ │ │ │ │ │██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │ │ ││ │ 3│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │ │ │ │ │ ││ │ 4│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │ │ │ │ │ ││ │ 5│██│██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │ │ │ │ │ ││ │ 6│██│██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │ │ │ │ │ ││ │ 7│██│██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │ │ ││ │ 8│██│██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ 9│ │██│██│██│██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ 10│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │██││██│ 11│ │ │ │ │ │ │ │██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│██│██│██│██│██│██│ ││ │ 12│██│██│██│██│██│██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │ │ │ │ │ │ │ ││ │ 13│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │ │ │ │ │ │ │ ││ │ 14│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 14│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_rev_down_pointing_triangle1 fc::NF_border_line_upper Unicode 0xe1d7 Unicode 0xe1d8 vgacode 0xd7 vgacode 0xd8 ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│██│██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │██│██│██│██│██│██│██││██│ 1│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │██│██│██│██│██│██│██││██│ 2│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │██│██│██│██│██│██│██││██│ 3│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │██│██│██│██│██│██│██││██│ 4│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │██│██│██│██│██│██│██││██│ 5│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │██│██│ │ │ │ │ ││ │ 6│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │██│██│██│ │ │ │ ││ │ 7│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │██│██│██│██│ │ │ ││ │ 8│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │██│██│██│██│██│ │ ││ │ 9│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │██│██│██│██│██│██│ ││ │ 10│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │██│██│██│██│██│██│██││██│ 11│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │██│██│██│██│██│██│██││██│ 12│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │██│██│██│██│██│██│██││██│ 13│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │██│██│██│██│██│██│██││██│ 14│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_radio_button1 fc::NF_border_corner_upper_left Unicode 0xe1d9 Unicode 0xe1da vgacode 0xd9 vgacode 0xda ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│██│██│██│██│██│██│██│██││██│ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │ │ │ │ │ │ │ ││ │ 1│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │██││██│ 2│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │██│ ││ │ 3│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │ │ │ │██│ ││ │ 4│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │ │ │██│ │ ││ │ 5│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │ │ │██│ │ ││ │ 6│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │ │ │██│ │ ││ │ 7│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │██│ ││ │ 8│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │██│ ││ │ 9│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │██││██│ 10│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │ │ │ │ │ │ │ ││ │ 13│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │ │ │ │ │ │ │ ││ │ 14│██│ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│██│ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_shadow_box_checked fc::NF_rev_border_line_right_and_left Unicode 0xe1dc Unicode 0xe1e7 vgacode 0xdc vgacode 0xe7 ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││██│ 1│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │ ││ │ 2│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │ │██││██│ 3│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │ │ │ │██│██││██│ 4│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │ │ │██│██│ ││ │ 5│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │ │ │██│██│ ││ │ 6│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│██│ │ │██│██│ │ ││ │ 7│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │██│██│ │██│██│ │ ││ │ 8│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │██│██│██│ │ │ ││ │ 9│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │██│██│ │ │ ││ │ 10│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││██│ 13│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││██│ 14│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │██│██│██│██│██│██│██││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) fc::NF_rev_up_pointing_triangle2 fc::NF_rev_down_pointing_triangle2 Unicode 0xe1e8 Unicode 0xe1e9 vgacode 0xe8 vgacode 0xe7 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││ │ 1│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│██│██│██│██│██│██│██││ │ 2│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│██│██│██│██│██│██│██││ │ 3│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│██│██│██│██│██│██│██││ │ 4│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │██│██│██│██│██│██│██││ │ 5│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │██│██│██│██│██│██││ │ 6│ │ │ │ │ │██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │██│██│██│██│██││ │ 7│ │ │ │ │██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │██│██│██│██││ │ 8│ │ │ │██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │██│██│██││ │ 9│ │ │██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│██│██│██│██│██│██│██││ │ 10│ │██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│██│██│██│██│██│██│██││ │ 11│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│██│██│██│██│██│██│██││ │ 12│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││ │ 13│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││ │ 14│██│██│██│██│██│██│██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_border_corner_middle_lower_right fc::NF_border_corner_middle_upper_right Unicode 0xe1ea Unicode 0xe1eb vgacode 0xea vgacode 0xeb ┌─>─┐ ┌─>─┐ 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │██│ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │ │ │██│ │ │ │ ││ │ 1│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │██│ │ │ │ ││ │ 2│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │██│ │ │ │ ││ │ 3│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │ │██│ │ │ │ ││ │ 4│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │ │ │██│ │ │ │ ││ │ 5│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│ │ │ │██│ │ │ │ ││ │ 6│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│██│██│██│ │ │ │ ││ │ 7│██│██│██│██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │ │ ││ │ 8│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ 9│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ 10│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │ │ │ │ │ │ │ ││ │ 13│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │ │ │ │ │ │ │ ││ │ 14│ │ │ │██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │██│ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ fc::NF_rev_menu_button3 fc::NF_shadow_box_right Unicode 0xe1f4 Unicode 0xe1f5 vgacode 0xf4 vgacode 0xf5 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│██│██│██│██│██│██││ │ 1│██│██│ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│██│██│██│██│██│██│██│██││ │ 2│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│██│██│██│██│██│██│██│██││ │ 3│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│██│██│██│██│██│██│██│██││ │ 4│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│██│██│██│██│██│██│██│██││ │ 5│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│██│██│██│██│██│██│██││ │ 6│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │██│██│██│██│██│██│██││ │ 7│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │██│██│██│██│██│██│██││ │ 8│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│██│██│██│██│██│██│██│██││ │ 9│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│██│██│██│██│██│██│██│██││ │ 10│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│██│██│██│██│██│██│██│██││ │ 11│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│██│██│██│██│██│██│██│██││ │ 12│ │██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│██│██│██│██│██│██│██│██││ │ 13│██│██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│██│██│██│██│██│██│██│██││ │ 14│██│██│██│ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_Bullet fc::NF_check_mark Unicode 0xe1f9 Unicode 0xe1fb vgacode 0xf9 vgacode 0xfb 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│ │ │ │ │ │ │ │ ││ │ 1│ │ │ │ │ │ │██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │ │ │ │ │ │ │ ││ │ 2│ │ │ │ │ │ │██│██││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │ │ │ │ │ │ ││ │ 3│ │ │ │ │ │██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │██│██│██│ │ │ ││ │ 4│ │ │ │ │ │██│██│ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │██│██│██│██│██│ │ ││ │ 5│ │ │ │ │██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│██│██│██│██│██│██│ ││ │ 6│ │ │ │ │██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│██│██│██│██│██│██│██│ ││ │ 7│██│██│ │ │██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│██│██│██│██│██│██│██│ ││ │ 8│██│██│ │██│██│ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │██│██│██│██│██│ │ ││ │ 9│██│██│ │██│██│ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │██│██│██│ │ │ ││ │ 10│ │██│██│██│██│ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ 11│ │ │██│██│██│ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ 12│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │ │ │ │ │ │ │ ││ │ 13│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │ │ │ │ │ │ │ ││ │ 14│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) (column 8 = background color) fc::NF_x_superior Unicode 0xe1fc vgacode 0xfc 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──┐ 0│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 1│██│██│ │ │██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 2│ │██│██│██│██│ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 3│ │ │██│██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 4│ │ │██│██│ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 5│ │██│██│██│██│ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 6│██│██│ │ │██│██│ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 7│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 8│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 9│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 10│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 11│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 12│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 13│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 14│ │ │ │ │ │ │ │ ││ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──┤ 15│ │ │ │ │ │ │ │ ││ │ └──┴──┴──┴──┴──┴──┴──┴──┘└──┘ (column 8 = background color) Some combinations of NewFont glyphs ----------------------------------- finalcut::NF_menu_button 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_up 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│ │ ││ │██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│██│ │ │ │ ││ │ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│ │ │ │ │ ││ │ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│ │ │ │ │ │ ││ │ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_down 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│ │ │ │ │ │ ││ │ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│ │ │ │ │ ││ │ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│██│ │ │ │ ││ │ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│ │ ││ │██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_arrow_up 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│ │ ││ │██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│ │ │ │ ││ │ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│██│ │ │ │ │ ││ │ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│ │ │ │ │ │ ││ │ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_arrow_down 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│ │ │ │ │ │ ││ │ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│ │ │ │ │ ││ │ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│ │ │ │ ││ │ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│ │ │ ││ │ │██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│ │ ││ │██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_arrow_left 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│ │ │██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│ │ │ │██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│██│ │ │ │ │ │ ││ │ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│ │ │ │ │ │ │ ││ │ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│██│ │ │ │ │ │ ││ │ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│ │ │ │██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│ │ │██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_button_arrow_right 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │██│██│██│██│██│██│██│██││██│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │██│██│██│██│██│██│██│██││██│ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │██│ │ │ │ │ │ │ ││ │ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │██│ │ │ │ │ │ │ ││ │ │ │ │ │ │██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │██│ │ │ │ │ │ │ ││ │ │ │ │ │██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │██│██│██│██│██│██│██│██││██│ │ │ │██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │██│██│██│██│██│██│██│██││██│ │ │██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_Drive 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │██│██│██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_CD_ROM 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │██│██│ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │██│ │██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │██│ │██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │██│ │██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │██│██│ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::NF_Net_Drive 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │██│ │ │██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │██│██│ │██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │██│ │██│██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │██│ │ │██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │██│ │ │██│ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::CHECKBOX 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::CHECKBOX_ON 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │██│██││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │██│██│██││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │██│██│ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │██│██│ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ │ ││██│██│ │ │██│██│ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ │ ││ │██│██│ │██│██│ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │██│ │ │ ││ │ │██│██│██│ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │██│ │ │ ││ │ │ │██│██│ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │██│██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │██│██│██││██│██│██│██│██│██│██│██│██││██│██│██│ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::RADIO_BUTTON 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │ │ │ │ ││██│██│██│██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │██│██││ │ │ │ │ │ │ │██│██││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ │ ││ │ │ │ │ │ │ │ │ ││ │██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │██│██││ │ │ │ │ │ │ │██│██││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ ││██│██│██│██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut::CHECKED_RADIO_BUTTON 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 ┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐┌──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──â”Ŧ──┐ 0│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 1│ │ │ │ │ │ │ │ │ ││██│██│██│██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 2│ │ │ │ │ │ │ │██│██││ │ │ │ │ │ │ │██│██││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 3│ │ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 4│ │ │ │ │ │ │██│ │ ││ │██│██│██│██│██│ │ │ ││██│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 5│ │ │ │ │ │██│ │ │ ││██│██│██│██│██│██│██│ │ ││ │██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 6│ │ │ │ │ │██│ │ │ ││██│██│██│██│██│██│██│ │ ││ │██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 7│ │ │ │ │ │██│ │ │ ││██│██│██│██│██│██│██│ │ ││ │██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 8│ │ │ │ │ │██│ │ │ ││██│██│██│██│██│██│██│ │ ││ │██│ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 9│ │ │ │ │ │ │██│ │ ││ │██│██│██│██│██│ │ │ ││██│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 10│ │ │ │ │ │ │██│ │ ││ │ │ │ │ │ │ │ │ ││██│ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 11│ │ │ │ │ │ │ │██│██││ │ │ │ │ │ │ │██│██││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 12│ │ │ │ │ │ │ │ │ ││██│██│██│██│██│██│██│ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 13│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 14│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ ├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤├──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──â”ŧ──┤ 15│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┴──┴──┴──┴──┴──┴──┴──┴──┘ finalcut-0.9.0/doc/newfont1.png000066400000000000000000000113241443250335200163430ustar00rootroot00000000000000‰PNG  IHDR‚‚†6ŋģPLTE;žēPPPîDDUjĪ€¤ėŧŧŧ˙˙˙kŸ×ˇbKGDˆH pHYs  šœtIMEã *đÔÆ?IDATxÚíKoã8Įš`[Į!6ØčœSŽŗ0°Îĩ|€Ŋ40ĮØsÔG1A#õąW|?DIÔÃ2) Į–DËŌ/EVņo>Á´2U€iMj‘ā&?žžžßôŽĒũ•8–õĮ3ČüajšŸō iĸßčļ˙”ĮĄw-™Ûā“žĢāĒÅūVl§ ~ũTØžR ļÃĄ0‚ŅĢûÕ]öÂA!‡#øĄJM÷t‹Ü_ņc­ŗ_Üe+ķv ˆKđëgķķ‹—æ¯F”jžmKˇũl[‰ķVá9Äq"k‘§‚O Ką{7b?.Å~\nSī•ę×Z~¨fúüLæųŪũˆĖ öģƒk3_ž;Aę^šØâåjG" }’ę†Ē––÷s¸…Ąˇ'G‚ ę€`- 2ÍĖX–ØâųÛŅĻFÁÉČø9ėE~€ ”įÉŋuĒÄ@ îLŪššEh” õ:GjĻ?g Ú÷‚ Øe­öZÄĖąx‰Î… ÷îäŨNdš'*/Pˇ°˙~Œo1ÅĪ=æÕp;‚"”%Ø]ĄŊ;u×ĩÜ7EĐÜŲAąÍôįĀĢS iŌŪܚœcņRü;!ŗãã+dna”Ĩ,ąīsQ‚†š&XÛīPĮ ī¨÷$8]ŠG ֞'I#X;epAU†ōk:5nļa€`p×`=Ŧņ@Ũ°'͈mc— Cį;ĮëÁ ōHT]¤ƒX=‹§ ™ŠŽ™˙t”ėx‰ ĸVēŠ;ÁFŲ*ŋäĶy2xƒô(æ;jšm¯/GŧY‚-NrĪk†WņƒMLp‚WˇŽOđ¯ƒ÷Ļ$H "A$ˆ‘ D‚H "A$ˆ‘ D‚H "ÁŨ ūú‘–ūD‚Hpí%~„“TT‚ŋ–ä?rŠßTkƒÁ¤{m„āŸ+Š_‚‘ 'Čį”ĪîĄæ4Ėē—?uOũúë,!ČdˆšQ&^hƒÄ™yĐąAAŒ?¸ Â/XJÛ gĮ‚]Pî‡`÷j ūˆüĪĀėĪ­Ų¯ z5ÕüÚØ4ŌG´ÁÁŗömA6l‚-L!8âVCDęAXIPÔœāX=X(AQ ~|nANĪ÷łāÂ|‚"ĸVž¸–UfƒúR“Zu l0=•IĐĖ-˜D°Z#A}T“ģčFD8ŋā m ÎŗËå늴 ŋĢB‚K ĒžĖH°GĐ=Ŧoân"Á!‚ŪläĄÃ$¸Žāų†‡ ĘuMÄú)˛dëy×ÕĮ;‚Ũ™āH=HÔŧūāŦŌĩ" áÎIg„Į"¸Š~XŠ5AšūŽ\s…€CPü3ā$Aĩö„Ņ<‚GŦ‘`ÆU=ˆڸƓčõMôú']}¨uI$˜ŌĒ#“­:$ˆ¯Jpj͐<ÚÅíH´ÛîŧĘo™ęÖo§~ú#áØĩΙ&āę~^`ų>OįæržœšĨ™žoL¤Úūî;Ŗ !Ø4īĶcãQs7ķ!øōy‚SīÜ,'(á)‚ŦöúĖ%øøNN>Aš9ÁËJ‚„;!ČųI‚Í:‚LĖ`$&ÉRE{V?āã;/Í /Õ˛d‹įãģ.å|IđŌŦ.Åĸ—FPŠSû:õ`Ŗė­‘F÷øū¨ØŅæŊŅ„sōÅ]9ĪëëAÚ¯Ã~€ žØ'ØŲ\G­ķ" ߓ%AU^6đ$ŒBÄ'ûŽä(žË}ų4ždAf pˆā„[š{‚ÔŠŠC0Š Ođņ=BPՃY–âM"j>ų-UūÖøâä~€'Q–ØųÜGîßí‹Ãė|qŽ­ēÛÅHđļæ1<Ž63ĻĸŪ‚āœôŠŽéļĮܕ`t€–āÛøŽ‚$č(īCxÛĒ˙. GDÜOÄ{ĀŒ`EÚ8A2Ÿ !I} "ØŊŸŽu?ŋŠ˜>-YFČtÂzŨĪO?T[VķV~¸ áA b vw!{\Ĩö@˜ ô!Hpe)V-ĀüõÁ| –ĸfKP‹Ųëƒųúb(DŨʕ ŅÁār‚¤ }0Ķh†´ÅčƒŲˇę˛WˇāŅ æ¯ĸ6ƒ‘ D}õAÔ‘`\ŨJ_ŒGÕ­ņ5J`Ē ĸ>¸ATˇ ęƒĨ郓k” ATˇ ꃨ͈āįi^zA‚H0r5f5ąžHŊŒā‹~{Q;š€Ũ%‘ íyT>¨g͗˜/#r• 5<¯OđœHP r]HęÖųč2ŸāiAB'\ AV3ąļˆYS¤ĻõL‚'>.ęŦÆFņŅļį Ÿk?ĪfR)&ÅõÄĖ2r~ũÉõ0úå8e§7ōÁ &Û j—Ąļz„ƒ˛ÁÁŪ¨ˆA‚b ‚L­Í š~3šëƒmPŠSl°ļA6 h|qöęŧAĒ×™KPSæîc€`ŗ’`†ú`ëFԔ¯Ėb×™Mđ^äeã‹å "bė2§§Æ/O$Î`äėõÁš-ŠQ‚C)Ŧ§m°$ukK‚/C4‘āJ<7—Åķ×w)ŧ6ÅØ`›>t8n+ķŌņvQBōäŠH0F°ri: 7!4…úÜÕ Ršz›/-3C‚­Á6æģėFŅ@`ŖĄŽ”?ÁöĻi+īH ĪOĪvž"ŋWî.ĨX”ĨX€ęļ’<š3ÁŽØS÷Đķ.‚ß+w§z°ļÚš\QUŽ˙É÷ČuAķļAAP´CUËŪõ.W˙ŊØY^”kJŖÚë9AP¯tãVŊA&tYēs$Ø÷$Hpm4Ķ'¸k)6kû=Ũ2ķˆZԃΚ_žxS‚ĸŽĶž„Ör]äšj_˞$¸ļUwĩžG´TeáãéŠ ‘ā>ęÖ5 ˛‘ũ‘ ęƒH°OR¤>ØyO 5Â]"jW,O|úxîNŨ‘ Ŗ.Bäõ !Ču¸Á2õAąNĄC°5ũõzáN­ēŌôÁ i ÷5Â]–§Fʉûá-”…ôÁAĩÖM¨pŨP›ÉYŨęyģĒ8\͘5ˆõÁ¤ˆēuÖ 4BÔQŧļ˛0Ļ "AÔQ<"Á¯f^ú‰‘āĩ ŠŠ:,°˙āõ^dND]Šēĩ-Áķ鞊 Ĩļģ#ČG1‰ŅÅb$ŨyI)ÖŠŅ7'Ø™Ū‰?Ų Ō Ņɂ”BP eŠ—âˇ„˜Ļ¨f¯n‘lP­Ĩ琠–ųŗWˇŽJ˙E‚Ë ęzđ´!Á õÁĢŧH?,žMßŋM†°?Öe¯^ĮĮĶۜQaŲĢ[Hđčķ×ŗˇA¸\™#A$دąŨųé Rįzr×ÍUÕÎėyˇ&X”>'xãRLK%Čĩ8&Û`æ¤is^a|q!ú gƒTw}¤fÛˇ…ԃEčƒÕAͯŅ÷čy”}˙Áa‚ŒŪā÷{ŋ Œ¸$8ANՃØ0>ƒŖöģZSķF|1öü­ŽÎĩ•z•Õû Ž$ČŌ‚gė?ˆũ‘`އ›ZH0uL“øjšņ!:ĸ°LÄÁjĪx°}0FЎ s ļû,ą˙`„ ܎ =ÁVŒåŦZ1ûÎcšŠŌãU=Č:uW#GÖŠvûՃ´}pĸl̊čŠ{Ž/†2įœ"Xíč‹K›= ^‹ îXŠũ~ÔŲëƒũˆZŒõ$j|ļ3Îx?}ŠŌ}Dukiģ .'ØæJõAÔSîôžWßŨBD‚ņvą¨ĢžN˜@ĐėjœĩŒg”J†s įõ‹]‚•ŽŸ•ēĨ×Ėlįäk'‚įųĩ’á0 eJ°„O‹¨ĩK#hVÆņ*p.AšĘ¤Đt™OĐiAfŋ~qŒ ŽA׃ lP\XŠå_•ŋúnžë+‚öŋ.mĐŽŧ=ÁÉõę”&äĖ}ũâĘ­yļđ$ĢĒ™7ŨkČ~õ]=lFđsAEĒ4‚0JĖ#.ÁfA͔˛~ņpD­tÂŲ5_¯øėŦe<‡ ˜Ņ”¸Ņuūë¯Ōû­ē—ĪÍV>-eõŨUúāg$Zųŧ7‚í–ˇ\}×/žŖõ‹W*Ą¸ú.<AŖK¤fEPDÍĩÔ­ÜJ1‚×lM).Fˌ ą†–ŋ>¸Áüƒ›˙^Ŧ˜2ôÁœRëÕs>Á|Õ­ ĘZ Ž"Hf¨fIPÔuĒēÍ^˞,JŨB‚G'˜ŋ>˜Ŋ Úāõļí$˜œ_ÍŠ‰Ŗú kZú`Ë'$ũ†ãuJī7$8Ē\CĐ´€GõA$¸VD‚Ŗú î/6ĸ"ÁQ}Ā¤ēÕ6"D‚Q}ĐtY%ČgW˙†ĮŖ™}°+ÅÜ‘`TlôAŦ×Ē[ŧUG°Uˇ’ ļ‹×čƒHÕ­Í *"ŋ%ôāÔäbÔ*•1‚˙v¯ß)ŊH "ÁĖ’d‚ ÆžÍ ø F ûm’ā›Õd GđmÁoC}ŅᨠÁ•õ \닑āÚx "A$ˆī]ŨB‚×HH "A$ˆ‘ D‚H "A$ˆ‘ D‚HđĐÉņĶu ŪE$ˆ‘ D‚H  &$ˆ‘ Ą‘ D‚˜\‚Ŗ)‰l”‡Ęĩę”~G‚›|x}}ĨôUíã+ ģy˜Ą#ōŊž~įīkÆQ@ ›‡ōåÔ 5æŦÍ1?ņÕ×í÷†×AöÅŽY}g {Ø`wĪŨ­ë[đÁԖ Ī÷đ]ĸ"ØĪŖ¨Õ>ÁîLė÷†×AãûøkīšÁžîAđž*‚`ī;BđŌN`AÚ/ÅÃåîŦĪTdŠūj°u›ĩ1/$Č➤f;x’d‚˛Tg’ K#¨Îb<ÉA*ĪZ Ažš¨G׃ĸ”ôķtu ÂÁ TZÕk– DęA]jÍ5›mķ{ԃĸâ}}u|1Ķ5=¯ĸm´ü]EßTGĢ*_íåņ"j~ŽZøDæGÔLíö}ą­û´ŋ5ļÛķÅÎ9ģ|ęēu^ũĩķš[uąōƒíâY ĸ˛€¯MĶĘôĢq́MēŌĪIENDŽB`‚finalcut-0.9.0/doc/newfont2.png000066400000000000000000000014011443250335200163370ustar00rootroot00000000000000‰PNG  IHDR°āQņšPLTEet-;žŧŧŧūūūrMĀtRNS@æØfbKGDˆH pHYs  šœtIMEã 3”e|kIDATxÚíÜQnŦ0 ĐnÁĒWāzYŖģ˙5Ŋ$Āđ…IMĢ›Ÿ AÔIā‚Ô~ČĸŲ€öQÛį}jߗÃ@Ęž6zČŧqö„ái—Ÿ‚wÄ^3$ķäɑ æ æH怙—ū(ėđdža”Ë‚åmÉS>‰y2,.{ ‹ˆ|Žá´€Ëhz*¸įũ^VãœĨ Ė3 /gÆĪĨhÁ†6l8>Ũ*leĀjŧ‚ˇjÜ\ €™­FŨs ÁōLqĀŦöũKzŽwæ&¤cđeˇMÅĐõ" &L˜0a„ &ü4sü? ˇõic{×Ú8t,ĀvU&ĨÂĸg`„$dę!ŠiĀįŽ‚ĐĐPAhH(B!Ä3pˆŠH†KŸáî‡JDŠ?x9ÜSãŠļS_á\’§aˆjHĄEōz‘Ž3QNQ2ōã‹ķ1ķ1a„ ūCųxã i%ĄŪ§tũŧ7@[I¨dĻ.¸ą'ōņ.ŧ*ÅīƒGÔXģcėît _ļ@˜yŖ'L˜0a„ &LøđŅ?*y_ØģßžnÃa˜§¯_ßíø~{Üø˜5Ļƒā˙ī}á­Ō oĩūRlœė}¯xüø)eŋ&<f"L˜0a„ ŋ ,ĩæŪ L˜0aÂ[íšümR• +IENDŽB`‚finalcut-0.9.0/doc/progress-bar.png000066400000000000000000000015131443250335200172070ustar00rootroot00000000000000‰PNG  IHDRzĨ ‘+íPLTEorm;žPPP€¤ėŧŧŧ˙˙˙´7jntRNS@æØfbKGDˆH pHYs  šœtIMEã ˛ŧLǝIDATxÚíÜ[nŖ0€áÎx` ŋWV0+bÉû_ÂøĀPœ@‰­ü§¤5¤Ī'ĮnD"ĩ~\Dņ5zĨTĐy2J}o7ôīŌKĄz!M )%õŽmŒG\į¤ŧą'GU÷ÆäēĄ˙ČŪ6Æ#.ëú¨tŊUģ^‡…>˲ŋûroɞ^Lú :tŖũ‘úũ•ã~ųzS"jQ9f“f¯Ģî'Ŋ0^éĨ|J˙XKņęå0ģČi@ûuīEŒúąN¤ĖësN—~9Š5¯Ŗ~öīOĶĢ#=zôčOÖg‰Å\Ÿ§•ø=zôčŅŖG=zôčŅŖG}œÆ.ģĩsŗ—”>3.'ëē1Ŋwę–ōôôš§7;Ié;åëįÂøõyŌz Ë'}ru¯æuß%§gĖ4õÃĢN%W9ŧĪIG-wÅŋ_ ôčŅŖG†™ŖG=úŖôö™XŋI‡=zôŅ鹟ƒ=zôčŅŖG=zôčŅŖ˙,}´ČÆjÜ ¯×¯ šíūIzyŋ'[úĢŨ^ŅWmÛŪZÍ>ũĪ%dŠß×ĪOoŪĄWe…žh[!Ė‚:ĻQ +ëlæ^GŲļMŲTēLã)Ŋ}éĖEcŊX÷Z{)LŌM#ŧrtT†R™ø ¨{}’ūqyߓû^ z1×/nF˙Ô×åM_.ôßnŠĘš^WôAwĀ=Ŋ4EŖ‹Å=Ú×ôŪ4Ŧ¯ËôÂVŽŽÔnęK_īÃs¯ˇ‹3úâ Ŋ_÷ÍũlÎŅ­K°ŪN5ãĪ9›zSfãåeÕžšûąĨŋ[úņœūAW6ôõũŽ„čī\ūšˇĪ<÷áŖaĢ­ža?ķķZôčŅŖį[čŅŖG=zôčŅĻO{=äô=zôčßŖãO–^ G=zôčŅŖGtüE)ŽDrLĸIENDŽB`‚finalcut-0.9.0/doc/readme.txt000066400000000000000000000031341443250335200160720ustar00rootroot00000000000000---------------------------------------------------------------------- FINAL CUT ---------------------------------------------------------------------- FINAL CUT is a C++ class library and widget toolkit that enables developers to create text-based user interfaces. It offers full mouse support, UTF-8 character encoding, support for full-width characters, and the capability to display combined Unicode characters. The library helps the programmer to create an application for the text console. It allows it to handle multiple text windows on the screen. The design of FINAL CUT's C++ class structure was inspired by the Qt framework. It offers a variety of general controls, including dialog boxes, push buttons, checkboxes, radio buttons, input lines, list boxes, and status bars. Installation ------------ > git clone https://github.com/gansm/finalcut.git > cd finalcut > autoreconf --install --force > ./configure --prefix=/usr > make > su -c "make install" Supported platforms ------------------- * Linux * FreeBSD * NetBSD * OpenBSD * macOS * Cygwin * GNU Hurd * Solaris Documentation ------------- See the first-steps.md documentation for information on how to use the library. Frequently Asked Questions -------------------------- For general questions about FINAL CUT, likely the answer is already included in the faq.md. License ------- GNU Lesser General Public License Version 3 Download -------- You can find the latest version at https://github.com/gansm/finalcut Please send bug reports to -------------------------- https://github.com/gansm/finalcut/issues finalcut-0.9.0/doc/terminfo-capabilities.sh000077500000000000000000000001751443250335200207070ustar00rootroot00000000000000#!/bin/bash # set the xterm window title TERMTITLE="infocmp: $TERM" echo -ne "\\033]0;${TERMTITLE}\\007" infocmp -x | less finalcut-0.9.0/doc/terminfo-manual.sh000077500000000000000000000001731443250335200175310ustar00rootroot00000000000000#!/bin/bash # set the xterm window title TERMTITLE="man 5 terminfo" echo -ne "\\033]0;${TERMTITLE}\\007" man 5 terminfo finalcut-0.9.0/doc/textview.png000066400000000000000000000041621443250335200164630ustar00rootroot00000000000000‰PNG  IHDR.ŲbņrPLTEorm;žPPP€¤ėŧŧŧ˙˙˙´7jntRNS@æØfbKGDˆH pHYs  šœtIMEã .îx!žÖIDATxÚíÉqä8Eۅ<( āĄ r@ÁšgM×÷߄9`!@Š­Hāg+B\ÔĄ§Ä’+ūĖŠü3 .ĸËyš€\¨/äōšMĶmēaš&ā>Ũ§éî>Ü@.Ë×}šîŽÔ}矁‹ˆŧ.īƒjC —yYs˜ˆŽüĄÆ…úbxŧ‹Ë>.GĸyĄž”úB.Õ–šî¸¯‹ÖšĐ rų!ųīõõõ•\Čå \ŒpČå!ę špQ_ȅû:r!r!—ŽåīÛÛÛšã"" ķW,{OÄ[Šø×­Ø0jøMNĪ%î_˛_Û˛Kšj‹eß­É%ŋeär.Ņ>RLTÍ|˜ŌŨqˇâs™ã Q™(,7MāŽĀāž‰CP5ąä–ÂÂ[rR}Ņđ'5˜Âíø§N4Čė ęv/ē?ŋģ˛|Ĩ\ü‹îÉđ\ĸJįG R.Zゅ .ųp=.ų8ú<7 .™#į"" qęzf}1ŅOpŅ–ž ÁÅÖú‚Ķ#D.ZĖ/ژ_ÔM*VĖ/hĖ/D}ąķqÉ÷uaiŖ ]ÜZĩZPŋŠáõ°BåëQüÉū–åoÜ8<>}˙A.ĪärXĨáB{š\ČåĶûr!—#öšP_ȅãˆúB.Üב š š šėcŽK iʡ\–äōÕũnĖL†’hz%ÆGC,ŅĮ˜4døøhQo\bäp‰ąZ~ÅV\büÔĢTĖgč >â""ęĸ'u.萋Īį‘—xeIZƑ ĀŁHgY¯/đæözųŗvÎE.ZpQ¤ā"ËJÕõ8ĘsĐåŠHĸ/IB’ØĐë8ú„hW6šü4ëĘ[N{š\Čåéöt1ɐËx\J?ƒßĒųön–V7¸Û–UI¤o]Ôá°ĶĪāŽ¸{!g9­ĄŅ4ģ;MˆžĒÃa§Ÿ!ã’eĢ‹ˆnqA?\*~†6—¨/Ē$âđęKÅΰƒ‹†yW{՗ŠŸ!áĸéüb_.Ņë8ĒÖD¸ē‰ŧ&"ē`Ü2T8ĀûG›"÷ģäB.´Éåė\Ė/UũÚĶØļ°›W4nvČĨ7.u?ƒĢuMËW ;rDK´W?ƒAŌŽés–+]p)ũ Xp¸~px“-.OīÎņƒ~†ņäå<ô¤/U?CÂłN”\ÂĶÖé8Ēû\ļrzâbÛŊ–g4îŲĐĖyčh=ĸ š šœŠKŖŖã‹2XR8}šÅ'ėéFįÂōĒļ¸&}ĒČåú\ų –vĐZ::ĸ™Īwz1nm"ąá_7~†ĐÚqÕŅų ’m#Š+sAÃ˙d=øBEÁÅy.–š­ŽígpŋŧO*;:6ōÁ5͇ž|āg(;:ļō$īÚÁ8*ũ qDčĒŖ#6ō$@¸Ôũ Ą˜FWŅĖgˆë‘IëŅČåbÚŋÂEÉĨŽ-×ËUĨ=M.äōkö´’ šė÷3Ä5q^`möĪĨô3ÄĐĒiWôĄę‘¸ Å%ˇú€Ŧ4Žr?CLæ°`%ŽíĀAæŨ•ŸÁë V\Ķ—ŌĪāSÖ\|*ĖpëŅå1ŰÎm‰>îw¯îCø.J.Ŋøh7’ šøŲ9ķ> ´äŠYo„ē ¤Ŋš:ԗ’K<Š~Ũ¤NB,2{Æ0T¸ØŠ :䞸T[\$G¤•}sYėé6—ęÅÖ s‰ķ‹Užénŋ›ëÅ..I•Šķ&ĒĪĐČäĘ'-Ëīsá8ĸŸ\ȅqrųûˆ\¨/äÂqD}!îëȅ\ȅ\Čep.¸^Hĩnkp2 —Å˙¨ģNM…‹& ä’qņY@ą]8KÂDuŨnkœq;†gI(L“6‡×?¯ũĐŧt%†.é{ëđYŦ­/áP‰!š„Pa ß 3Ļ0 ´mÍ/^ã˛ôgHûĖ–ëŅjŗ3Æ~—ví#r!ry>—ŨÅ×÷E:Waw€vŽ/ä˛ë\ËÍ∞|‡ÎĩÜ,Ž(}‘Ë7ŠGĪ›¨äįZvá‹8xŪÄFqD_žˆƒįMlG”žˆ+Û܇ΛØ,ŽčËqč\ËÍ∞|ßĐī°Ḱ\~ˆËHū: ķ<Ī䲏‹ÕŨ 23“TūT—ÕhFÛØ\ÔĘęĪҏ"—/syĖķ<ŋ^PŪžIæyž˙…äB.äB.ŋÆå]Fæ"/ ."cs)šøOƒsōëÂÔ§/(šp~ipázD.äB.äōK\ĸ%Ã’ š š š š š šPȅ\Ë˙ĩ(oįī´eIENDŽB`‚finalcut-0.9.0/doc/user-theme-bee-palette.svg000066400000000000000000000276041443250335200210700ustar00rootroot00000000000000 image/svg+xml 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 finalcut-0.9.0/doc/user-theme-fc16-dark-palette.svg000066400000000000000000000276041443250335200220130ustar00rootroot00000000000000 image/svg+xml 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 finalcut-0.9.0/doc/user-theme-fc16-palette.svg000066400000000000000000000276041443250335200210740ustar00rootroot00000000000000 image/svg+xml 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 finalcut-0.9.0/doc/user-theme-fc8-palette.svg000066400000000000000000000154221443250335200210100ustar00rootroot00000000000000 image/svg+xml 0 1 2 3 4 5 6 7 finalcut-0.9.0/doc/user-theme-vga-palette.svg000066400000000000000000000276041443250335200211120ustar00rootroot00000000000000 image/svg+xml 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 finalcut-0.9.0/doc/user-theme.md000066400000000000000000000377151443250335200165100ustar00rootroot00000000000000User Themes =========== FINAL CUT supports color themes. That makes it possible to change the color of all elements of a widget in the program. Also, you can adjust the color palette to your preferences. If you want to switch back to the default themes, you can always call the method `FApplication::setDefaultTheme()` or `FApplication::setDarkTheme()` for the dark theme. Widget Color Theme ------------------ FINAL CUT uses a default color scheme that the user can override in a derived class of `FWidgetColors`. All widget colors are redefined in the constructor by the method `setColorTheme()`. ```cpp class myWidgetColors final : public finalcut::FWidgetColors { public: myWidgetColors() { myWidgetColors::setColorTheme(); } ~myWidgetColors() override { } auto getClassName() const -> finalcut::FString override { return "myWidgetColors"; } void myWidgetColors() override { ... // Color definitions } }; ``` For setting the widget colors, it is recommended to call the method `FWidget::setColorTheme()` via the `FApplication` object to create a new instance of the theme and assign it to the application. ```cpp finalcut::FApplication app(argc, argv); app.setColorTheme(); ``` In the following example, we will create the `BeeColorTheme`. For this purpose, we will first create an include file that can be easily included later in your application. **File:** *widget-color-theme.h* ```cpp #ifndef WIDGETCOLORTHEME_H #define WIDGETCOLORTHEME_H class BeeColorTheme final : public finalcut::FWidgetColors { public: BeeColorTheme() { BeeColorTheme::setColorTheme(); } ~BeeColorTheme() override { } auto getClassName() const -> finalcut::FString override { return "BeeColorTheme"; } void setColorTheme() override { term_fg = finalcut::FColor::Black; term_bg = finalcut::FColor::LightBlue; list_fg = finalcut::FColor::Black; list_bg = finalcut::FColor::LightGray; selected_list_fg = finalcut::FColor::LightRed; selected_list_bg = finalcut::FColor::LightGray; dialog_fg = finalcut::FColor::Black; dialog_resize_fg = finalcut::FColor::Red; dialog_emphasis_fg = finalcut::FColor::Blue; dialog_bg = finalcut::FColor::LightGray; error_box_fg = finalcut::FColor::Black; error_box_emphasis_fg = finalcut::FColor::Red; error_box_bg = finalcut::FColor::Yellow; tooltip_fg = finalcut::FColor::Black; tooltip_bg = finalcut::FColor::Yellow; shadow_fg = finalcut::FColor::Black; shadow_bg = finalcut::FColor::LightGray; current_element_focus_fg = finalcut::FColor::White; current_element_focus_bg = finalcut::FColor::Green; current_element_fg = finalcut::FColor::LightGray; current_element_bg = finalcut::FColor::DarkGray; current_inc_search_element_fg = finalcut::FColor::Brown; selected_current_element_focus_fg = finalcut::FColor::LightRed; selected_current_element_focus_bg = finalcut::FColor::Green; selected_current_element_fg = finalcut::FColor::LightRed; selected_current_element_bg = finalcut::FColor::DarkGray; label_fg = finalcut::FColor::Black; label_bg = finalcut::FColor::LightGray; label_inactive_fg = finalcut::FColor::LightGray; label_inactive_bg = finalcut::FColor::DarkGray; label_hotkey_fg = finalcut::FColor::Red; label_hotkey_bg = finalcut::FColor::LightGray; label_emphasis_fg = finalcut::FColor::Blue; label_ellipsis_fg = finalcut::FColor::DarkGray; inputfield_active_focus_fg = finalcut::FColor::LightGray; inputfield_active_focus_bg = finalcut::FColor::Green; inputfield_active_fg = finalcut::FColor::Black; inputfield_active_bg = finalcut::FColor::Cyan ; inputfield_inactive_fg = finalcut::FColor::Black; inputfield_inactive_bg = finalcut::FColor::LightGray; toggle_button_active_focus_fg = finalcut::FColor::White; toggle_button_active_focus_bg = finalcut::FColor::Green; toggle_button_active_fg = finalcut::FColor::Black; toggle_button_active_bg = finalcut::FColor::LightGray; toggle_button_inactive_fg = finalcut::FColor::DarkGray; toggle_button_inactive_bg = finalcut::FColor::LightGray; button_active_focus_fg = finalcut::FColor::White; button_active_focus_bg = finalcut::FColor::Green; button_active_fg = finalcut::FColor::Black; button_active_bg = finalcut::FColor::Cyan; button_inactive_fg = finalcut::FColor::Cyan; button_inactive_bg = finalcut::FColor::LightGray; button_hotkey_fg = finalcut::FColor::Red; titlebar_active_fg = finalcut::FColor::White; titlebar_active_bg = finalcut::FColor::Blue; titlebar_inactive_fg = finalcut::FColor::LightGray; titlebar_inactive_bg = finalcut::FColor::DarkGray; titlebar_button_fg = finalcut::FColor::Black; titlebar_button_bg = finalcut::FColor::LightGray; titlebar_button_focus_fg = finalcut::FColor::LightGray; titlebar_button_focus_bg = finalcut::FColor::Black; menu_active_focus_fg = finalcut::FColor::White; menu_active_focus_bg = finalcut::FColor::Blue; menu_active_fg = finalcut::FColor::Black; menu_active_bg = finalcut::FColor::Yellow; menu_inactive_fg = finalcut::FColor::Cyan; menu_inactive_bg = finalcut::FColor::Yellow; menu_hotkey_fg = finalcut::FColor::Red; menu_hotkey_bg = finalcut::FColor::Yellow; statusbar_fg = finalcut::FColor::White; statusbar_bg = finalcut::FColor::DarkGray; statusbar_hotkey_fg = finalcut::FColor::LightRed; statusbar_hotkey_bg = finalcut::FColor::DarkGray; statusbar_separator_fg = finalcut::FColor::Black; statusbar_active_fg = finalcut::FColor::White; statusbar_active_bg = finalcut::FColor::Green; statusbar_active_hotkey_fg = finalcut::FColor::LightRed; statusbar_active_hotkey_bg = finalcut::FColor::Green; scrollbar_fg = finalcut::FColor::Black; scrollbar_bg = finalcut::FColor::Green; scrollbar_button_fg = finalcut::FColor::Black; scrollbar_button_bg = finalcut::FColor::Green; scrollbar_button_inactive_fg = finalcut::FColor::Cyan; scrollbar_button_inactive_bg = finalcut::FColor::LightGray; progressbar_fg = finalcut::FColor::Green; progressbar_bg = finalcut::FColor::DarkGray; } }; #endif // WIDGETCOLORTHEME_H ``` Color Palette Theme ------------------- FINAL CUT has four color tables for the 16 standard colors in the terminal. These are a redefinition of the 16 ANSI colors. You can address the colors via indexes values from 0 to 15. They correspond to the following colors: | Index | Color name | |:------:|:-------------------------------| | 0 | finalcut::FColor::Black | | 1 | finalcut::FColor::Blue | | 2 | finalcut::FColor::Green | | 3 | finalcut::FColor::Cyan | | 4 | finalcut::FColor::Red | | 5 | finalcut::FColor::Magenta | | 6 | finalcut::FColor::Brown | | 7 | finalcut::FColor::LightGray | | 8 | finalcut::FColor::DarkGray | | 9 | finalcut::FColor::LightBlue | | 10 | finalcut::FColor::LightGreen | | 11 | finalcut::FColor::LightCyan | | 12 | finalcut::FColor::LightRed | | 13 | finalcut::FColor::LightMagenta | | 14 | finalcut::FColor::Yellow | | 15 | finalcut::FColor::White | You can define your color as an 8-bit value based on its red, green, and blue components. To create a color palette, create a derived class of `FColorPalette`. The constructor gets as argument the function to set a palette color. This function must have the following structure: ```cpp setPalette(finalcut::FColor index, int red, int green, int blue); ``` A possible implementation could look as follows: ```cpp class myColorPalette final : public finalcut::FColorPalette { public: explicit myColorPalette (const FSetPalette& f) : FColorPalette(f) { } ~myColorPalette() { } auto getClassName() const -> finalcut::FString override { return "myColorPalette"; } void setColorPalette() override { ... // Palette definitions } void resetColorPalette() override { setVGAdefaultPalette(); } }; ``` To set the colors of a palette theme, you should use the method `FOutput::setColorPaletteTheme()`. This method creates a new instance and saves it in the `FOutput` object. ```cpp finalcut::FVTerm::getFOutput()->setColorPaletteTheme(); ``` The standard VGA palette is part of the `FColorPalette` class. To set it, use the method `setVGAdefaultPalette()`. You can use it to reset the color palette of terminals that cannot reset to default values with escape sequences.
VGA palette
Figure 1. VGA palette


The FINAL CUT eight-color palette `default8ColorPalette` is optimized for the eight-color widget theme `default8ColorTheme`. It is for terminals that cannot display more than eight colors.
FINAL CUT 8-color palette
Figure 2. FINAL CUT 8-color palette


The FINAL CUT palette `default16ColorPalette` is the default 16-color palette. It is optimized for the widget color theme `default16ColorTheme`.
FINAL CUT 16-color palette
Figure 3. FINAL CUT 16-color palette


The second 16-color palette in FINAL CUT is for the dark theme. It was adjusted for the widget color themes `default8ColorDarkTheme` and `default16ColorDarkTheme`.
FINAL CUT 16-color dark palette
Figure 4. FINAL CUT 16-color dark palette


In the following example, we want to create the palette them `BeeColorPalette`. For this purpose, we generate an include file again, in which we implement the new palette class.
Bee palette
Figure 6. Bee palette


**File:** *color-palette-theme.h* ```cpp #ifndef BEECOLORPALETTE_H #define BEECOLORPALETTE_H class BeeColorPalette final : public finalcut::FColorPalette { public: explicit BeeColorPalette (const FSetPalette& f) : FColorPalette(f) { } ~BeeColorPalette() { } auto getClassName() const -> finalcut::FString override { return "BeeColorPalette"; } void setColorPalette() override { setPalette (finalcut::FColor::Black, 0x00, 0x00, 0x00); setPalette (finalcut::FColor::Blue, 0x23, 0x21, 0x2c); setPalette (finalcut::FColor::Green, 0x26, 0x93, 0x7c); setPalette (finalcut::FColor::Cyan, 0xcf, 0xb3, 0xa8); setPalette (finalcut::FColor::Red, 0xba, 0x1a, 0x1a); setPalette (finalcut::FColor::Magenta, 0xb2, 0x18, 0xb2); setPalette (finalcut::FColor::Brown, 0xe8, 0x87, 0x1f); setPalette (finalcut::FColor::LightGray, 0xff, 0xfb, 0xe4); setPalette (finalcut::FColor::DarkGray, 0x3a, 0x36, 0x37); setPalette (finalcut::FColor::LightBlue, 0xa5, 0xa5, 0xb1); setPalette (finalcut::FColor::LightGreen, 0x5e, 0xeb, 0x5c); setPalette (finalcut::FColor::LightCyan, 0x62, 0xbf, 0xf8); setPalette (finalcut::FColor::LightRed, 0xee, 0x44, 0x44); setPalette (finalcut::FColor::LightMagenta, 0xe9, 0xad, 0xff); setPalette (finalcut::FColor::Yellow, 0xf8, 0xef, 0xa6); setPalette (finalcut::FColor::White, 0xff, 0xff, 0xff); } void resetColorPalette() override { setVGAdefaultPalette(); } }; #endif // BEECOLORPALETTE_H ``` Use of Themes ------------- If you include the two include files above in your application, you can use the widget color theme and the color palette theme. In the main function of your application, the object instances of both classes are created and set.
User theme example
Figure 7. User theme example


**File:** *theme.cpp* ```cpp #include #include "widget-color-theme.h" #include "color-palette-theme.h" using namespace finalcut; class dialogWidget final : public FDialog { public: explicit dialogWidget (FWidget* parent = nullptr) : FDialog{"Theming test application", parent} { Input.setLabelText("File name:"); Input.setLabelOrientation(FLineEdit::LabelOrientation::Above); Input.setStatusbarMessage("Enter a file name"); Browse.addCallback ( "clicked", this, &dialogWidget::cb_FileBrowse ); Apply.setStatusbarMessage("Apply settings"); Quit.setStatusbarMessage("Exit the program"); Quit.addCallback ( "clicked", finalcut::getFApplication(), &finalcut::FApplication::cb_exitApp, this ); Open.addCallback ( "clicked", this, &dialogWidget::cb_FileBrowse ); } private: void initLayout() { setGeometry (FPoint{15, 5}, FSize{50, 9}); Input.setGeometry (FPoint{2, 2}, FSize{39, 1}); Browse.setGeometry (FPoint{43, 2}, FSize{4, 1}); Apply.setGeometry (FPoint{24, 5}, FSize{10, 1}); Quit.setGeometry (FPoint{37, 5}, FSize{10, 1}); FDialog::initLayout(); } void cb_FileBrowse() { auto filename = FFileDialog::fileOpenChooser(this); if ( ! filename.isEmpty() ) { Input.setText(filename); Input.redraw(); } } FMenuBar Menubar{this}; FMenu File{"&File", &Menubar}; FMenuItem New{"&New", &File}; FMenuItem Open{"&Open...", &File}; FMenu Edit{"&Edit", &Menubar}; FMenuItem Undo{"&Undo", &Edit}; FMenu Help{"&Help", &Menubar}; FMenuItem About{"&About", &Help}; FStatusBar Statusbar{this}; FLineEdit Input{"input...", this}; FButton Browse{"..", this}; FButton Apply{"&Apply", this}; FButton Quit{"&Quit", this}; }; auto main (int argc, char* argv[]) -> int { FApplication app(argc, argv); // Set the widget color theme app.setColorTheme(); // Set the color palette theme FVTerm::getFOutput()->setColorPaletteTheme(); dialogWidget dialog(&app); FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } ``` After entering the source code in *theme.cpp* you can compile the above program with gcc: ```bash g++ theme.cpp -o theme -O2 -lfinal -std=c++14 ``` finalcut-0.9.0/doc/user-theme.png000066400000000000000000000030711443250335200166600ustar00rootroot00000000000000‰PNG  IHDR‚‚†6ŋģ!PLTE" +%’{956¤¤°šβ§÷îĨūúãūūū˙˙˙!VubKGDˆH pHYs  šœtIMEäk2ÄžIDATxÚíŨ?oâH`KˇJh‘ŽĄ;ĨŠŽ:)ŨWÜ ii‚ļLšåRœŌZTn¯Ė§<ĪØÆ˙‰ŗĀĪOk°Įãˆ}ôΌa‰6I¤cŽSé’'‚Ÿ#8™LŌ´Ø{ZņŒíéS<—ļÎ=¤Īååü+Á‡4]SZļīL ļĶ‚)Áũ‚OUĩ§ÆØž$ņ\ōŽũšėˇŌŪįy°Å×uÍUí×Fq˜ëövķāĒČCēY0Ô Ám‚Å=âA‚ąÁ5˜Xƒ)A‚Ÿģ'õvũnňkqRuXY‹C“ĩ¸ëčų-a)ø\ÔÚÆŗĩTƒ>›ųbÁoJ—|'H A‚$HP$HP$HP$HP$HP$HP$HP$HP$HP$HP$HP$HP$HP$HPŧ`Áŋ^›ü=<ßüJ°w‚Ŗ<·Yģ%[é‘í8~@ļĄOÖĢˆ‡ŗ=áC‡{ú\ŧ`žgÅpÎFņyyœĮĶÕšxöËĄŸÅũxœ•#yTõĢFŊߗ…­xĩWΡëkÔôɚ>ÕãåĪ8Á$IūÁQ\}VËöķėRƒÅšŧU0Ŧ×Ŗŧ™0ŗ58\ĢÉ~ fqhnĢÁa3B ū4ÁQĪÃZGy}œ×“^ŗŽŽōåøŽˇ~ î{ÜôŲĖGĪ9ķę˙qūF A‚ ė`r|Šāā* A‚ $H A‚g/ŋųQėĪ?&8¨v|%ØMp^Õā<T#;ŧ´Áŧz>]Ũ™›Q\ŧ ú…×ųë`^îÜŧO“H°W0ÜQ‡~ĄųĐgÁõãũ58kßÎz^ƒÅZ|¤`ŧ†āļœ6wČ;jpĻĶ ¸žų‘ŋusü5 $H A‚ũ‹;A‚ $H A‚ $H Á> &¯ŧŒ$H A‚ ė–īÉe„ A‚ $H A‚ $H A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚B A‚ $H $H $H $H $H $H $xŽ‚ŋÜI—üAđsķÁ!ßUB_'\t ^ Ŗŧs­ÚŲŖssp˙û_ûƒũœ[õÃ2…íēÄa™ÁV]ß|“+fâ!âŠë÷Dhpރ&W Üô&øņę ^}jđũį¨Î"x›sĢî¤áļßæüĮž9œ˙ÔLķRŒĖm:9cX^ŨŲ6>¯ž˙¤-V&­ļ8gvŅ\ÄÍÁķ†Čš&3žŌėĸR3øô*ĪÄuÎņ{lß_՗žB‡ūĩĢœOix7ÕēŽ4t„Ē?”@:0O]cÄâģBqƒŗŨ\31.Ä_AD.îČąēŒņŨëŲ¸bĄ4Ū[ĐņWũÎõÚ6~+­îįļ2'=B>įˆʗ3q1÷/O'+㎒†gRŌáHNOZLCæpicÜ÷ÆYÃhŌw U‘yœQgIĖâÂâŽ0§rb†Mņ˛x~Z/ĀNDƒĪüĩx‰~ë¯>K?G§ E¯Ū?9‹Îų›ŧĶ\)ŗĨ4Ūč—1[cĩŪŨĸLĐwéĘÍæåråŝխ͒ŠUlІRtoĩ=Ä?¤+ŠŌ-Éx{§û5c3øAlfˆøãcjđV‚Kßâøc3ˆÛąęNéxF]ÆÃ6Ē œęØģ´ŪIÅxw°Ö{`ŧKÅēáÔę2Ág*sW[j[­ņ`+#}ˇĒũ6JđÅŦášh'÷cĻúĶŧ'Ų ŗt pg^=úīÛũŅlsHu`Ŋ’žĒČ^\įOĻ2ˇđŦz΍wīNôa^J֏ĀˇąƒėERpG†Ŋ^ŒģÃįp*§øgGŨÛoõÔ+}pâ˰ĶáGĀË@ūØëĘÆ*ųęOlfķøíˇƸ'Púûn%kjWzÉÛ|lŒœ@ĩīĀũgĪ\ėZ~ ܓß#(°ü˛ö×Õ=J§8n˙¨Î–ÍŽŽŅ Ŗ“†cŧ woĶ&c‚ŖwÆ\S­Āc‹#<‹ceCu7ZÄÕpäą+Ō>ū  ĒNąîĮ€MpōlĒ—tVfRˤdĻžĒūŦ…ŋ image/svg+xml getDesktopWidth() = 80 getDesktopHeight() = 24 getPos() = (25,6) getTermPos() = (25,6) getY() = 6 getTermY() = 6 getX() = 25 getTermX() = 25 (1,1) (80,24) getX() = 19 getTermX() = 44 getY() = 8 getTermY() = 15 getPos() = (19,8) getTermPos() = (44,15) (80,1) (1,24) finalcut-0.9.0/doc/widget-geometry.svg000066400000000000000000001153101443250335200177310ustar00rootroot00000000000000 image/svg+xml getSize() = FSize(32,12) = FPoint(25,6), FPoint(56,17) getGeometry() = FPoint(25,6), FSize(32,12) getTermGeometry() = FPoint(25,6), FSize(32,12) = FPoint(25,6), FPoint(56,17) getShadow() = FSize(2,1) getGeometryWithShadow() = FPoint(25,6), FSize(34,13) = FPoint(25,6), FPoint(58,18) getTermGeometryWithShadow() = FPoint(25,6), FSize(34,13) = FPoint(25,6), FPoint(58,18) getSize() = FSize(10,1) = FPoint(19,8), FPoint(28,8) getGeometry() = FPoint(19,8), FSize(10,1) getTermGeometry() = FPoint(44,15), FSize(10,1) = FPoint(44,15), FPoint(53,15) getShadow() = FSize(1,1) getGeometryWithShadow() = FPoint(19,8), FSize(11,2) = FPoint(19,8), FPoint(29,9) getTermGeometryWithShadow() = FPoint(44,15), FSize(11,2) = FPoint(44,15), FPoint(54,16) FDialog() FButton() finalcut-0.9.0/doc/widget-lengths.svg000066400000000000000000001305421443250335200175460ustar00rootroot00000000000000 image/svg+xml getDesktopWidth() getDesktopHeight() getPos() getTermPos() getY() getTermY() getX() getTermX() getWidth() getHeight() getClientHeight() getTopPadding() getBottomPadding() getRightPadding() getLeftPadding() getClientWidth() finalcut-0.9.0/doc/xgraphics000066400000000000000000000014621443250335200160110ustar00rootroot00000000000000Unicode Box Drawing graphics ┌─â”Ŧ─┐ ╭─â”Ŧ─╮ ├─â”ŧ─┤ ├─â”ŧ─┤ │ │ │ │ │ │ │││ └─┴─┘ ╰─┴─╯ ╎┆┊ â”â”â”ŗâ”â”“ ╔═â•Ļ═╗ â”Ŗâ”â•‹â”â”Ģ ╠═â•Ŧâ•â•Ŗ ┃ ┃ ┃ ║ ║ ║ ┃┃┃ ║ ┗━â”ģ━┛ ╚═╩═╝ ╏┇┋ ◆ VT100 line drawing graphics (used by xterm, rxvt, ...) codes +,-.0_`abcdefghijklmnopqrstuvwxyz{|}~ with G1 )0+,-.0_`abcdefghijklmnopqrstuvwxyz{|}~ with G0 (0+,-.0_`abcdefghijklmnopqrstuvwxyz{|}~(B VGA graphics, switching to "active codepage" (used by cygwin console, Linux console)  8x €‚ƒ„…†‡ˆ‰Š‹ŒŽ 9x ‘’“”•–—˜™š›œžŸ Ax  ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯ Bx °ą˛ŗ´ĩšēģŧŊžŋ Cx ĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪ Dx ĐŅŌĶÔÕÖרŲÚÛÜŨŪß Ex āáâãäåæįčéęëėíîī Fx đņōķôõö÷øųúûüũū˙  finalcut-0.9.0/doc/xterm.txt000066400000000000000000000011441443250335200157730ustar00rootroot00000000000000Recommended settings for the xterm terminal emulator ---------------------------------------------------- The final cut can only support all xterm features if the following settings in the ~/.Xresources (or ~/.Xdefaults) resource file are defined: XTerm*termName: xterm-256color *VT100.allowTcapOps: true *VT100.allowWindowOps: true *VT100.allowTitleOps: true *VT100.allowFontOps: true *VT100.metaSendsEscape: true ! Mouse cursor settings XTerm*pointerShape: left_ptr XTerm*pointerColor: #000000 XTerm*pointerColorBackground: #eeeeee finalcut-0.9.0/examples/000077500000000000000000000000001443250335200151445ustar00rootroot00000000000000finalcut-0.9.0/examples/7segment.cpp000066400000000000000000000160631443250335200174070ustar00rootroot00000000000000/*********************************************************************** * 7segment.cpp - Seven-segment display * * * * This file is part of the FINAL CUT widget toolkit * * * * Copyright 2012-2023 Markus Gans * * * * FINAL CUT is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation; either version 3 of * * the License, or (at your option) any later version. * * * * FINAL CUT is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program. If not, see * * . * ***********************************************************************/ #include #include #include #include using finalcut::FColorPair; using finalcut::FColor; using finalcut::FRect; using finalcut::FPoint; using finalcut::FSize; //---------------------------------------------------------------------- // class SegmentView //---------------------------------------------------------------------- class SegmentView final : public finalcut::FDialog { public: // Constructor explicit SegmentView (finalcut::FWidget* = nullptr); private: struct sevenSegment { unsigned char a : 1; unsigned char b : 1; unsigned char c : 1; unsigned char d : 1; unsigned char e : 1; unsigned char f : 1; unsigned char g : 1; unsigned char : 1; // padding bit }; // Methods void hexEncoding(); void get7Segment (const wchar_t); void draw() override; void initLayout() override; // Data members std::map code{}; std::array line{}; finalcut::FLineEdit input{"0123", this}; finalcut::FButton exit{"E&xit", this}; }; //---------------------------------------------------------------------- SegmentView::SegmentView (finalcut::FWidget* parent) : FDialog{parent} { // Set encoding hexEncoding(); // Input field input.setLabelText (L"&Hex value"); input.setLabelText (L"&Hex-digits or (.) (:) (H) (L) (P) (U)"); input.setLabelOrientation(finalcut::FLineEdit::LabelOrientation::Above); input.setMaxLength(9); input.setInputFilter("[:.hHlLpPuU[:xdigit:]]"); // Add some function callbacks input.addCallback ( "changed", [] (auto& dialog) { dialog.redraw(); }, std::ref(*this) ); exit.addCallback ( "clicked", finalcut::getFApplication(), &finalcut::FApplication::cb_exitApp, this ); } //---------------------------------------------------------------------- void SegmentView::hexEncoding() { code = { { '0', sevenSegment{1, 1, 1, 1, 1, 1, 0} }, { '1', sevenSegment{0, 1, 1, 0, 0, 0, 0} }, { '2', sevenSegment{1, 1, 0, 1, 1, 0, 1} }, { '3', sevenSegment{1, 1, 1, 1, 0, 0, 1} }, { '4', sevenSegment{0, 1, 1, 0, 0, 1, 1} }, { '5', sevenSegment{1, 0, 1, 1, 0, 1, 1} }, { '6', sevenSegment{1, 0, 1, 1, 1, 1, 1} }, { '7', sevenSegment{1, 1, 1, 0, 0, 0, 0} }, { '8', sevenSegment{1, 1, 1, 1, 1, 1, 1} }, { '9', sevenSegment{1, 1, 1, 1, 0, 1, 1} }, { 'A', sevenSegment{1, 1, 1, 0, 1, 1, 1} }, { 'B', sevenSegment{0, 0, 1, 1, 1, 1, 1} }, { 'C', sevenSegment{1, 0, 0, 1, 1, 1, 0} }, { 'D', sevenSegment{0, 1, 1, 1, 1, 0, 1} }, { 'E', sevenSegment{1, 0, 0, 1, 1, 1, 1} }, { 'F', sevenSegment{1, 0, 0, 0, 1, 1, 1} } }; } //---------------------------------------------------------------------- void SegmentView::get7Segment (const wchar_t c) { for (std::size_t i{0}; i < 3; i++) line[i].clear(); switch ( c ) { case ':': line[0] = ' '; line[1] = '.'; line[2] = '.'; break; case '.': line[0] = ' '; line[1] = ' '; line[2] = '.'; break; case 'H': line[0] = " "; line[1] = "|_|"; line[2] = "| |"; break; case 'L': line[0] = " "; line[1] = "| "; line[2] = "|_ "; break; case 'P': line[0] = " _ "; line[1] = "|_|"; line[2] = "| "; break; case 'U': line[0] = " "; line[1] = "| |"; line[2] = "|_|"; break; default: // Hexadecimal digit from 0 up to f if ( code.find(c) != code.end() ) { const sevenSegment& s = code[c]; constexpr std::array h{{' ', '_'}}; constexpr std::array v{{' ', '|'}}; line[0] << ' ' << h[s.a] << ' '; line[1] << v[s.f] << h[s.g] << v[s.b]; line[2] << v[s.e] << h[s.d] << v[s.c]; } } } //---------------------------------------------------------------------- void SegmentView::draw() { std::vector vtbuffer(3); FDialog::draw(); setColor(FColor::LightGray, FColor::Black); finalcut::drawBorder(this, FRect(FPoint{3, 6}, FPoint{40, 11})); for (const auto& ch : input.getText().toUpper()) { const FColorPair color{FColor::LightRed, FColor::Black}; get7Segment(ch); for (std::size_t i{0}; i < 3; i++) vtbuffer[i] << color << line[i] << " "; } const std::size_t length = vtbuffer[0].getLength(); const finalcut::FVTermBuffer left_space = \ length < 36 ? finalcut::FVTermBuffer() << finalcut::FString(36 - length, ' ') : finalcut::FVTermBuffer(); print() << FPoint {4, 7} << left_space << vtbuffer[0] << FPoint {4, 8} << left_space << vtbuffer[1] << FPoint {4, 9} << left_space << vtbuffer[2] << FPoint {4, 10} << finalcut::FString{36, ' '}; } //---------------------------------------------------------------------- void SegmentView::initLayout() { // Dialog settings FDialog::setText ("Seven-segment display"); FDialog::setGeometry (FPoint{25, 5}, FSize{42, 15}); // Input field input.setGeometry (FPoint(2, 2), FSize{12, 1}); // Exit button exit.setGeometry(FPoint{28, 11}, FSize{10, 1}); FDialog::initLayout(); } //---------------------------------------------------------------------- // main part //---------------------------------------------------------------------- auto main (int argc, char* argv[]) -> int { finalcut::FApplication app(argc, argv); SegmentView dialog(&app); finalcut::FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } finalcut-0.9.0/examples/Makefile.am000066400000000000000000000037621443250335200172100ustar00rootroot00000000000000#---------------------------------------------------------------------- # Makefile.am - FINAL CUT example programs #---------------------------------------------------------------------- LIBS = -lfinal if ! CPPUNIT_TEST AM_LDFLAGS = -L$(top_builddir)/final/.libs AM_CPPFLAGS = -I$(top_srcdir)/final -Wall -Werror -std=c++14 noinst_PROGRAMS = \ 7segment \ background-color \ busy \ calculator \ checklist \ choice \ dialog \ event-log \ fullwidth-character \ hello \ highlight-text \ input-dialog \ keyboard \ listbox \ listview \ mandelbrot \ menu \ mouse \ opti-move \ parallax-scrolling \ rotozoomer \ scrollview \ string-operations \ term-attributes \ termcap \ terminal-focus \ timer \ transparent \ treeview \ ui \ watch \ windows \ xpmview 7segment_SOURCES = 7segment.cpp background_color_SOURCES = background-color.cpp busy_SOURCES = busy.cpp calculator_SOURCES = calculator.cpp checklist_SOURCES = checklist.cpp choice_SOURCES = choice.cpp dialog_SOURCES = dialog.cpp event_log_SOURCES = event-log.cpp fullwidth_character_SOURCES = fullwidth-character.cpp hello_SOURCES = hello.cpp highlight_text_SOURCES = highlight-text.cpp input_dialog_SOURCES = input-dialog.cpp keyboard_SOURCES = keyboard.cpp listbox_SOURCES = listbox.cpp listview_SOURCES = listview.cpp mandelbrot_SOURCES = mandelbrot.cpp menu_SOURCES = menu.cpp mouse_SOURCES = mouse.cpp opti_move_SOURCES = opti-move.cpp parallax_scrolling_SOURCES = parallax-scrolling.cpp rotozoomer_SOURCES = rotozoomer.cpp scrollview_SOURCES = scrollview.cpp string_operations_SOURCES = string-operations.cpp term_attributes_SOURCES = term-attributes.cpp termcap_SOURCES = termcap.cpp terminal_focus_SOURCES = terminal-focus.cpp timer_SOURCES = timer.cpp transparent_SOURCES = transparent.cpp treeview_SOURCES = treeview.cpp ui_SOURCES = ui.cpp watch_SOURCES = watch.cpp windows_SOURCES = windows.cpp xpmview_SOURCES = xpmview.cpp endif clean-local: -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete -rm -rf .deps finalcut-0.9.0/examples/Makefile.clang000066400000000000000000000020241443250335200176650ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Makefile for FINAL CUT #----------------------------------------------------------------------------- # This is where make install will install the executable BINDIR = /usr/local/bin # compiler parameter CXX = clang++ SRCS = $(wildcard *.cpp) OBJS = $(SRCS:%.cpp=%) CCXFLAGS = $(OPTIMIZE) $(PROFILE) $(DEBUG) -std=c++14 MAKEFILE = -f Makefile.clang LDFLAGS = -L../final -lfinal INCLUDES = -I.. -I/usr/include RM = rm -f ifdef DEBUG OPTIMIZE = -O0 -fsanitize=undefined else OPTIMIZE = -O3 endif # $@ = name of the targets # $^ = all dependency (without double entries) .cpp: $(CXX) $^ -o $@ $(CCXFLAGS) $(INCLUDES) $(LDFLAGS) all: $(OBJS) debug: $(MAKE) $(MAKEFILE) DEBUG="-g -D DEBUG -Wall -Wextra -Wpedantic -Weverything -Wno-padded -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-implicit-fallthrough -Wno-reserved-id-macro" profile: $(MAKE) $(MAKEFILE) PROFILE="-pg" .PHONY: clean clean: $(RM) $(SRCS:%.cpp=%) *.gcno *.gcda *.gch *.plist *~ finalcut-0.9.0/examples/Makefile.gcc000066400000000000000000000015641443250335200173450ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Makefile for FINAL CUT #----------------------------------------------------------------------------- # This is where make install will install the executable BINDIR = /usr/local/bin # compiler parameter CXX = g++ SRCS = $(wildcard *.cpp) OBJS = $(SRCS:%.cpp=%) CCXFLAGS = $(OPTIMIZE) $(PROFILE) $(DEBUG) -std=c++14 MAKEFILE = -f Makefile.gcc LDFLAGS = -L../final -lfinal INCLUDES = -I.. -I/usr/include RM = rm -f ifdef DEBUG OPTIMIZE = -O0 else OPTIMIZE = -O3 endif # $@ = name of the targets # $^ = all dependency (without double entries) .cpp: $(CXX) $^ -o $@ $(CCXFLAGS) $(INCLUDES) $(LDFLAGS) all: $(OBJS) debug: $(MAKE) $(MAKEFILE) DEBUG="-g -D DEBUG -Wall -Wextra -Wpedantic" profile: $(MAKE) $(MAKEFILE) PROFILE="-pg" .PHONY: clean clean: $(RM) $(SRCS:%.cpp=%) *.gcno *.gcda *~ finalcut-0.9.0/examples/background-color.cpp000066400000000000000000000164701443250335200211130ustar00rootroot00000000000000/*********************************************************************** * background-color.cpp - Sets the background color palette * * * * This file is part of the FINAL CUT widget toolkit * * * * Copyright 2019-2022 Markus Gans * * * * FINAL CUT is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation; either version 3 of * * the License, or (at your option) any later version. * * * * FINAL CUT is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program. If not, see * * . * ***********************************************************************/ #include #include #include #include using finalcut::FPoint; using finalcut::FSize; using finalcut::FColor; //---------------------------------------------------------------------- // class Background //---------------------------------------------------------------------- class Background final : public finalcut::FDialog { public: // Using-declaration using RGB = std::tuple; // Constructor explicit Background (finalcut::FWidget* = nullptr); private: // Methods void initLayout() override; // Callback method void cb_changed(); void cb_choice(); // Data members finalcut::FComboBox color_choice{this}; finalcut::FSpinBox red{this}; finalcut::FSpinBox green{this}; finalcut::FSpinBox blue{this}; finalcut::FButton quit{"&Quit", this}; std::vector> color_list { { "Light blue" , std::make_tuple(0x80, 0xa4, 0xec) }, { "Vivid blue" , std::make_tuple(0x37, 0x97, 0xfd) }, { "Bright blue" , std::make_tuple(0x3c, 0x85, 0xd2) }, { "Strong blue" , std::make_tuple(0x32, 0x64, 0x9f) }, { "Light cyan" , std::make_tuple(0x6c, 0xfe, 0xfe) }, { "Vivid cyan" , std::make_tuple(0x0b, 0xdd, 0xd4) }, { "Soft cyan" , std::make_tuple(0x49, 0xa8, 0xac) }, { "Light green" , std::make_tuple(0x81, 0xdf, 0xbb) }, { "Vivid green" , std::make_tuple(0x5c, 0x9e, 0x4a) }, { "Bright green" , std::make_tuple(0x0f, 0xba, 0x78) }, { "Strong green" , std::make_tuple(0x03, 0x8f, 0x68) }, { "Mint green" , std::make_tuple(0x4a, 0xfd, 0x91) }, { "Green" , std::make_tuple(0x6b, 0xe8, 0x1b) }, { "Dark green" , std::make_tuple(0x01, 0x65, 0x05) }, { "Dark sea green", std::make_tuple(0x7d, 0xb6, 0x96) }, { "Bright purple" , std::make_tuple(0x83, 0x76, 0xa2) }, { "Taupe" , std::make_tuple(0xa6, 0x8c, 0x99) }, { "Silver" , std::make_tuple(0xc1, 0xc1, 0xcb) } }; }; //---------------------------------------------------------------------- Background::Background (finalcut::FWidget* parent) : FDialog{parent} { // Combobox color_choice.setLabelOrientation (finalcut::FLineEdit::LabelOrientation::Above); color_choice.setLabelText ("Color choice"); color_choice.unsetEditable(); for (auto& c : color_list) { finalcut::FListBoxItem item (c.first, c.second); color_choice.insert(item); } // Spin boxes red.setLabelOrientation (finalcut::FLineEdit::LabelOrientation::Above); red.setLabelText ("Red"); red.setRange (0, 255); red.setValue (0x80); green.setLabelOrientation (finalcut::FLineEdit::LabelOrientation::Above); green.setLabelText ("Green"); green.setRange (0, 255); green.setValue (0xa4); blue.setLabelOrientation (finalcut::FLineEdit::LabelOrientation::Above); blue.setLabelText ("Blue"); blue.setRange (0, 255); blue.setValue (0xec); // Set the initial palette values if ( finalcut::FTerm::canChangeColorPalette() ) { finalcut::FTerm::setPalette ( FColor::LightMagenta , int(red.getValue()) , int(green.getValue()) , int(blue.getValue()) ); } // Add some function callbacks quit.addCallback ( "clicked", finalcut::getFApplication(), &finalcut::FApplication::cb_exitApp, this ); for (const auto spinbox : {&red, &green, &blue}) { spinbox->addCallback ( "changed", this, &Background::cb_changed ); } for (const auto& signal : {"row-changed", "clicked"}) { color_choice.addCallback ( signal, this, &Background::cb_choice ); } } //---------------------------------------------------------------------- void Background::initLayout() { FDialog::setText ("Background color palette"); FDialog::setGeometry (FPoint{25, 5}, FSize{32, 12}); color_choice.setGeometry (FPoint{2, 2}, FSize{18, 1}); red.setGeometry (FPoint{2, 5}, FSize{7, 1}); green.setGeometry (FPoint{12, 5}, FSize{7, 1}); blue.setGeometry (FPoint{22, 5}, FSize{7, 1}); quit.setGeometry(FPoint{19, 8}, FSize{10, 1}); // Quit button FDialog::initLayout(); } //---------------------------------------------------------------------- void Background::cb_changed() { if ( ! finalcut::FTerm::canChangeColorPalette() ) return; finalcut::FTerm::setPalette ( FColor::LightMagenta , int(red.getValue()) , int(green.getValue()) , int(blue.getValue()) ); redraw(); } //---------------------------------------------------------------------- void Background::cb_choice() { if ( ! finalcut::FTerm::canChangeColorPalette() ) return; uChar r{}; uChar g{}; uChar b{}; const RGB rgb = color_choice.getItemData(); std::tie(r, g, b) = rgb; red.setValue(r); green.setValue(g); blue.setValue(b); finalcut::FTerm::setPalette ( FColor::LightMagenta , int(red.getValue()) , int(green.getValue()) , int(blue.getValue()) ); redraw(); } //---------------------------------------------------------------------- // main part //---------------------------------------------------------------------- auto main (int argc, char* argv[]) -> int { // Create the application object finalcut::FApplication app(argc, argv); // Force terminal initialization without calling show() app.initTerminal(); // The following lines require an initialized terminal if ( finalcut::FTerm::canChangeColorPalette() ) app.setBackgroundColor(FColor::LightMagenta); Background dialog(&app); finalcut::FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } finalcut-0.9.0/examples/busy.cpp000066400000000000000000000102141443250335200166300ustar00rootroot00000000000000/*********************************************************************** * busy.cpp - Shows the use of the FBusyIndicator * * * * This file is part of the FINAL CUT widget toolkit * * * * Copyright 2020-2022 Markus Gans * * * * FINAL CUT is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation; either version 3 of * * the License, or (at your option) any later version. * * * * FINAL CUT is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program. If not, see * * . * ***********************************************************************/ #include using finalcut::FPoint; using finalcut::FRect; using finalcut::FSize; //---------------------------------------------------------------------- // class Dialog //---------------------------------------------------------------------- class Dialog final : public finalcut::FDialog { public: explicit Dialog (FWidget* parent = nullptr); private: void initLayout() override; void adjustSize() override; // Event handler void onTimer (finalcut::FTimerEvent*) override; // Callback method void cb_start(); // Data members finalcut::FSpinBox seconds{this}; finalcut::FButton start{"&Start", this}; finalcut::FButton quit{"&Quit", this}; finalcut::FBusyIndicator busy_indicator{this}; }; //---------------------------------------------------------------------- Dialog::Dialog (FWidget* parent) : finalcut::FDialog{parent} { seconds.setLabelText ("Seconds"); seconds.setRange (0, 60); seconds.setValue (3); // Add button callbacks seconds.addCallback ( "activate", this, &Dialog::cb_start ); start.addCallback ( "clicked", this, &Dialog::cb_start ); quit.addCallback ( "clicked", finalcut::getFApplication(), &finalcut::FApplication::cb_exitApp, this ); } //---------------------------------------------------------------------- void Dialog::initLayout() { FDialog::setText ("Dialog"); FDialog::setGeometry (FPoint{26, 5}, FSize{28, 10}); seconds.setGeometry (FPoint{10, 2}, FSize{10, 1}); start.setGeometry (FPoint{2, 6}, FSize{10, 1}); quit.setGeometry (FPoint{15, 6}, FSize{10, 1}); FDialog::initLayout(); } //---------------------------------------------------------------------- void Dialog::adjustSize() { finalcut::FDialog::adjustSize(); auto x = int((getDesktopWidth() - getWidth()) / 2); const int y = 5; if ( x < 1 ) x = 1; setPos (FPoint{x, y}, false); } //---------------------------------------------------------------------- void Dialog::onTimer (finalcut::FTimerEvent*) { delOwnTimers(); busy_indicator.stop(); } //---------------------------------------------------------------------- void Dialog::cb_start() { if ( seconds.getValue() < 1 ) return; busy_indicator.start(); addTimer(int(seconds.getValue() * 1000)); } //---------------------------------------------------------------------- // main part //---------------------------------------------------------------------- auto main (int argc, char* argv[]) -> int { finalcut::FApplication app(argc, argv); Dialog dialog(&app); finalcut::FWidget::setMainWidget(&dialog); dialog.show(); return app.exec(); } finalcut-0.9.0/examples/calculator.cpp000066400000000000000000001016751443250335200200130ustar00rootroot00000000000000/*********************************************************************** * calculator.cpp - A simple calculator with trigonometric functions * * * * This file is part of the FINAL CUT widget toolkit * * * * Copyright 2016-2022 Markus Gans * * * * FINAL CUT is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation; either version 3 of * * the License, or (at your option) any later version. * * * * FINAL CUT is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program. If not, see * * . * ***********************************************************************/ #include #include #include #include #include #include #include #include #include using FKey = finalcut::FKey; using finalcut::FColorPair; using finalcut::FColor; using finalcut::FPoint; using finalcut::FRect; using finalcut::FSize; template constexpr T pi_value = T{3.141'592'653'589'793'238L}; //---------------------------------------------------------------------- // class Button //---------------------------------------------------------------------- class Button final : public finalcut::FButton { public: // Constructor explicit Button (FWidget* = nullptr); // Method void setChecked(bool); // Event handler void onKeyPress (finalcut::FKeyEvent*) override; private: // Data member bool checked{false}; }; //---------------------------------------------------------------------- Button::Button (finalcut::FWidget* parent) : finalcut::FButton{parent} { } //---------------------------------------------------------------------- void Button::setChecked (bool enable) { if ( checked == enable ) return; checked = enable; if ( checked ) { setBackgroundColor(FColor::Cyan); setFocusForegroundColor(FColor::White); setFocusBackgroundColor(FColor::Cyan); } else { const auto& wc = getColorTheme(); setBackgroundColor(wc->button_active_bg); setFocusForegroundColor(wc->button_active_focus_fg); setFocusBackgroundColor(wc->button_active_focus_bg); } redraw(); } //---------------------------------------------------------------------- void Button::onKeyPress (finalcut::FKeyEvent* ev) { const FKey key = ev->key(); // catch the enter key if ( isEnterKey(key) ) return; finalcut::FButton::onKeyPress(ev); } //---------------------------------------------------------------------- // class Calc //---------------------------------------------------------------------- class Calc final : public finalcut::FDialog { public: // Constructor explicit Calc (finalcut::FWidget* parent = nullptr); private: // Typedef and Enumeration using keyFunction = std::function; // Member function enum class ButtonName { Sine, Cosine, Tangent, Reciprocal, On, Natural_logarithm, Powers_of_e, Power, Square_root, Divide, Common_logarithm, Powers_of_ten, Parenthese_l, Parenthese_r, Multiply, Hyperbolic, Seven, Eight, Nine, Subtract, Arcus, Four, Five, Six, Add, Pi, One, Two, Three, Percent, Zero, Decimal_point, Change_sign, Equals, NUM_OF_BUTTONS }; // Methods void drawDispay(); void draw() override; void sendOnButtonAccelerator(); void clear (const lDouble&); void zero (const lDouble&); void one (const lDouble&); void two (const lDouble&); void three (const lDouble&); void four (const lDouble&); void five (const lDouble&); void six (const lDouble&); void seven (const lDouble&); void eight (const lDouble&); void nine (const lDouble&); void add (const lDouble&); void subtract (const lDouble&); void multiply (const lDouble&); void divide (const lDouble&); void equals (const lDouble&); void change_sign (lDouble&); void radix_point(const lDouble&); void reciprocal (lDouble&); void percent (lDouble&); void pi (lDouble&); void open_bracket (const lDouble&); void close_bracket (const lDouble&); void log_e (lDouble&); void power_e (lDouble&); void log_10 (lDouble&); void power_10 (lDouble&); void power (const lDouble&); void square_root (lDouble&); void hyperbolic (const lDouble&); void arcus (const lDouble&); void sine (lDouble&); void cosine (lDouble&); void tangent (lDouble&); auto isDataEntryKey (const ButtonName&) const -> bool; auto isOperatorKey (const ButtonName&) const -> bool; auto getValue() -> lDouble&; void setDisplay (lDouble); void setInfixOperator (char); void clearInfixOperator(); void calcMultiplication(); void calcDivision(); void calcAddition(); void calcSubtraction(); void calcExponentiation(); void calcInfixOperator(); void initLayout() override; void adjustSize() override; auto getButtonText (const ButtonName&) const -> const wchar_t*; void mapKeyFunctions(); // Event handlers void onKeyPress (finalcut::FKeyEvent*) override; void onShow (finalcut::FShowEvent*) override; void onClose (finalcut::FCloseEvent*) override; // Callback method void cb_buttonClicked (ButtonName); // Overloaded operators friend auto operator < (const ButtonName& c, const int n) noexcept -> bool; friend auto operator <= (const ButtonName& c, const int n) noexcept -> bool; friend auto operator + (const ButtonName& c, const int n) noexcept -> ButtonName; friend auto operator ++ (ButtonName& c) noexcept -> ButtonName&; // prefix friend auto operator ++ (ButtonName& c, int) noexcept -> ButtonName; // postfix // Data members bool error{false}; bool arcus_mode{false}; bool hyperbolic_mode{false}; lDouble a{0.0L}; lDouble b{0.0L}; lDouble infinity{std::numeric_limits::infinity()}; uInt max_char{33}; ButtonName last_key{ButtonName(-1)}; char infix_operator{'\0'}; char last_infix_operator{'\0'}; finalcut::FString input{""}; std::array button_no{}; struct StackData { lDouble term; char infix_operator; }; std::stack bracket_stack{}; std::map > calculator_buttons{}; std::map key_map{}; }; //---------------------------------------------------------------------- Calc::Calc (FWidget* parent) : finalcut::FDialog{parent} { mapKeyFunctions(); clearInfixOperator(); for (ButtonName key{ButtonName::Sine}; key < ButtonName::NUM_OF_BUTTONS; key++) { auto btn = std::make_shared