From ec57ec6f74cb5bd4660e496f4e60276d227b3f34 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Sun, 17 Dec 2017 01:06:53 +0100 Subject: [PATCH] The Final Cut now also compiles under Solaris --- .bettercodehub.yml | 1 + ChangeLog | 3 + README.md | 8 + build.sh | 10 +- fonts/bdf2c.sh | 2 + fonts/font2c.sh | 2 + fonts/newfont.h | 4 + fonts/unicodemap.h | 5 + fonts/vgafont.h | 5 + include/final/emptyfstring.h | 93 ++ include/final/fc.h | 2155 +++++++++++++++++----------------- include/final/fcharmap.h | 5 +- include/final/ffiledialog.h | 11 +- include/final/fkey_map.h | 5 + include/final/fobject.h | 3 +- include/final/foptiattr.h | 21 +- include/final/foptimove.h | 17 +- include/final/fstring.h | 2 + include/final/ftcap_map.h | 5 + include/final/fterm.h | 29 +- include/final/ftypes.h | 1 + include/final/fvterm.h | 5 + src/fapplication.cpp | 16 +- src/fbuttongroup.cpp | 2 +- src/ffiledialog.cpp | 89 +- src/flistview.cpp | 4 +- src/fobject.cpp | 26 +- src/foptiattr.cpp | 10 +- src/fstring.cpp | 23 + src/fterm.cpp | 479 ++++---- src/fvterm.cpp | 24 +- 31 files changed, 1673 insertions(+), 1392 deletions(-) create mode 100644 include/final/emptyfstring.h diff --git a/.bettercodehub.yml b/.bettercodehub.yml index f4171ea7..209c4a8e 100644 --- a/.bettercodehub.yml +++ b/.bettercodehub.yml @@ -1,6 +1,7 @@ exclude: - /fonts/newfont.h - /fonts/vgafont.h +- /fonts/unicodemap.h - /ltmain.sh component_depth: 3 languages: diff --git a/ChangeLog b/ChangeLog index cdd20daf..d994e7b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2017-12-17 Markus Gans + * The Final Cut now also compiles under Solaris + 2017-12-14 Markus Gans * Add Sun Microsystems workstation console support diff --git a/README.md b/README.md index 8f651bb9..9ef5218e 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,14 @@ > su -c "make install" ``` +### Supported platforms +* Linux +* FreeBSD +* NetBSD +* OpenBSD +* macOS +* Solaris + The Final Cut ============= The Final Cut is a C++ class library and widget toolkit with full mouse support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple text windows on the screen. diff --git a/build.sh b/build.sh index 6d493a03..15ccf650 100755 --- a/build.sh +++ b/build.sh @@ -91,7 +91,15 @@ esac JOBS="$((CPU_COUNT/2))" test "$JOBS" -eq 0 && JOBS=1 -if make V=1 -j$JOBS +if make -h 2<&1 | grep -q "\\-\\-jobs" +then + MAKE="make V=1 -j$JOBS" +else + MAKE="make V=1" +fi + + +if $MAKE then echo "${GREEN}Successful compiled${NORMAL}" else diff --git a/fonts/bdf2c.sh b/fonts/bdf2c.sh index 324ae32a..0f5051f3 100755 --- a/fonts/bdf2c.sh +++ b/fonts/bdf2c.sh @@ -8,6 +8,7 @@ FONTFILE="8x16graph.bdf" echo -e "// newfont.h\\n" echo -e "#ifndef FNEWFONT_H" echo -e "#define FNEWFONT_H\\n" + echo -e "namespace fc\\n{" echo -e "\\nstatic unsigned char __8x16graph[] =\\n{" grep -A${HEIGHT} ^BITMAP "$FONTFILE" \ @@ -26,6 +27,7 @@ FONTFILE="8x16graph.bdf" done echo -e "};" + echo -e "\\n} // namespace fc" echo -e "\\n#endif // FNEWFONT_H" ) > newfont.h diff --git a/fonts/font2c.sh b/fonts/font2c.sh index 3a44bc31..c32ae714 100755 --- a/fonts/font2c.sh +++ b/fonts/font2c.sh @@ -8,6 +8,7 @@ FONTFILE="8x16std" echo -e "// vgafont.h\\n" echo -e "#ifndef FVGAFONT_H" echo -e "#define FVGAFONT_H\\n" + echo -e "namespace fc\\n{\\n" xxd -g 1 -i -c $HEIGHT $FONTFILE \ | sed -e 's/ {$/\n{/' \ @@ -24,5 +25,6 @@ FONTFILE="8x16std" fi done + echo -e "\\n} // namespace fc" echo -e "\\n#endif // FVGAFONT_H" ) > vgafont.h diff --git a/fonts/newfont.h b/fonts/newfont.h index e918953e..d1992deb 100644 --- a/fonts/newfont.h +++ b/fonts/newfont.h @@ -3,6 +3,8 @@ #ifndef FNEWFONT_H #define FNEWFONT_H +namespace fc +{ static unsigned char __8x16graph[] = { @@ -264,4 +266,6 @@ static unsigned char __8x16graph[] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 255 */ }; +} // namespace fc + #endif // FNEWFONT_H diff --git a/fonts/unicodemap.h b/fonts/unicodemap.h index 4fd9f905..b7bbfe1c 100644 --- a/fonts/unicodemap.h +++ b/fonts/unicodemap.h @@ -3,6 +3,9 @@ #ifndef FUNICODEMAP_H #define FUNICODEMAP_H +namespace fc +{ + static struct unipair unicode_cp437_pairs[] = { // .----------- unicode @@ -313,4 +316,6 @@ static struct unipair unicode_cp437_pairs[] = {0xfffd, 0xfe} }; +} // namespace fc + #endif // FUNICODEMAP_H diff --git a/fonts/vgafont.h b/fonts/vgafont.h index a2f9885a..dd2062a0 100644 --- a/fonts/vgafont.h +++ b/fonts/vgafont.h @@ -3,6 +3,9 @@ #ifndef FVGAFONT_H #define FVGAFONT_H +namespace fc +{ + static unsigned char __8x16std[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0 */ @@ -263,4 +266,6 @@ static unsigned char __8x16std[] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 255 */ }; +} // namespace fc + #endif // FVGAFONT_H diff --git a/include/final/emptyfstring.h b/include/final/emptyfstring.h new file mode 100644 index 00000000..ddb90f4c --- /dev/null +++ b/include/final/emptyfstring.h @@ -0,0 +1,93 @@ +/*********************************************************************** +* emptyfstring.h - Creates an empty FString object * +* * +* This file is part of the Final Cut widget toolkit * +* * +* Copyright 2015-2017 Markus Gans * +* * +* The Final Cut is free software; you can redistribute it and/or * +* modify it under the terms of the GNU Lesser General Public License * +* as published by the Free Software Foundation; either version 3 of * +* the License, or (at your option) any later version. * +* * +* The Final Cut is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU Lesser General Public License for more details. * +* * +* You should have received a copy of the GNU Lesser General Public * +* License along with this program. If not, see * +* . * +***********************************************************************/ + +#ifndef EMPTYFSTRING_H +#define EMPTYFSTRING_H + +#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT) + #error "Only can be included directly." +#endif + +#include "final/fstring.h" + +namespace fc +{ + +//---------------------------------------------------------------------- +// class emptyFString +//---------------------------------------------------------------------- +class emptyFString +{ +public: + emptyFString() + { } + + static bool isNull(); + static const FString& get(); + static void clear(); + +private: + // Disable copy constructor + emptyFString (const emptyFString&); + + // Disable assignment operator (=) + emptyFString& operator = (const emptyFString&); + + // Data Member + static const FString* empty_string; +}; + +// emptyFString inline functions +//---------------------------------------------------------------------- +inline bool emptyFString::isNull() +{ + return ( empty_string ) ? false : true; +} + +//---------------------------------------------------------------------- +inline const FString& emptyFString::get() +{ + if ( ! empty_string ) + { + try + { + empty_string = new FString(""); + } + catch (const std::bad_alloc& ex) + { + std::cerr << "not enough memory to alloc " << ex.what() << std::endl; + } + } + + return *empty_string; +} + +//---------------------------------------------------------------------- +inline void emptyFString::clear() +{ + delete empty_string; + empty_string = 0; +} + +} // namespace fc + +#endif // EMPTYFSTRING_H diff --git a/include/final/fc.h b/include/final/fc.h index d57cc239..424a63d9 100644 --- a/include/final/fc.h +++ b/include/final/fc.h @@ -20,14 +20,6 @@ * . * ***********************************************************************/ -/* Standalone class - * ════════════════ - * - * ▕▔▔▔▔▔▔▔▔▏ - * ▕ fc ▏ - * ▕▁▁▁▁▁▁▁▁▏ - */ - #ifndef FC_H #define FC_H @@ -35,9 +27,7 @@ #error "Only can be included directly." #endif -#include "final/fstring.h" - -// ascii sequences +// ASCII sequences #define ESC "\033" // Escape #define CSI ESC "[" // Control sequence introducer (7-bit) #define ENQ "\005" // Enquiry @@ -50,1086 +40,1079 @@ //---------------------------------------------------------------------- -// class fc +// Global constants and enumerations //---------------------------------------------------------------------- -#pragma pack(push) -#pragma pack(1) - -class fc +namespace fc { - public: - // Event types - enum events - { - None_Event, // invalid event - KeyPress_Event, // key pressed - KeyUp_Event, // key released - KeyDown_Event, // key pressed - MouseDown_Event, // mouse button pressed - MouseUp_Event, // mouse button released - MouseDoubleClick_Event, // mouse button double click - MouseWheel_Event, // mouse wheel rolled - MouseMove_Event, // mouse move - FocusIn_Event, // focus in - FocusOut_Event, // focus out - ChildFocusIn_Event, // child focus in - ChildFocusOut_Event, // child focus out - WindowActive_Event, // activate window - WindowInactive_Event, // deactivate window - WindowRaised_Event, // raise window - WindowLowered_Event, // lower window - Accelerator_Event, // keyboard accelerator - Resize_Event, // terminal resize - Show_Event, // widget is shown - Hide_Event, // widget is hidden - Close_Event, // widget close - Timer_Event // timer event occur - }; - // Properties of a widget - enum widget_flags - { - shadow = 0x00000001, - trans_shadow = 0x00000002, - active = 0x00000004, - focus = 0x00000008, - scrollable = 0x00000010, - resizeable = 0x00000020, - modal = 0x00000040, - window_widget = 0x00000080, - dialog_widget = 0x00000100, - menu_widget = 0x00000200, - always_on_top = 0x00000400, - flat = 0x00000800, - no_underline = 0x00001000 - }; - - // Internal character encoding - enum encoding - { - UTF8, - VT100, - PC, - ASCII, - NUM_OF_ENCODINGS, // number of items - UNKNOWN - }; - - // VT100 line graphic keys - enum vt100_keys - { - vt100_key_rarrow = '+', // ► - arrow pointing right - vt100_key_larrow = ',', // ◄ - arrow pointing left - vt100_key_uarrow = '-', // ▲ - arrow pointing up - vt100_key_darrow = '.', // ▼ - arrow pointing down - vt100_key_block = '0', // █ - solid square block - vt100_key_nsup = 'I', // ⁿ - superscript letter n - vt100_key_blackrect = '_', // ▮ - black vertical rectangle - vt100_key_diamond = '`', // ◆ - diamond - vt100_key_ckboard = 'a', // ▒ - checker board (stipple) - vt100_key_htab = 'b', // ␉ - horizontal tab symbol - vt100_key_ff = 'c', // ␌ - form feed symbol - vt100_key_cr = 'd', // ␍ - carriage return symbol - vt100_key_lf = 'e', // ␊ - line feed symbol - vt100_key_degree = 'f', // ° - degree symbol - vt100_key_plminus = 'g', // ± - plus/minus - vt100_key_board = 'h', // ␤ - board of squares - vt100_key_lantern = 'i', // ␋ - lantern symbol - vt100_key_lrcorner = 'j', // ┘ - lower right corner - vt100_key_urcorner = 'k', // ┐ - upper right corner - vt100_key_ulcorner = 'l', // ┌ - upper left corner - vt100_key_llcorner = 'm', // └ - lower left corner - vt100_key_plus = 'n', // ┼ - large plus or crossover - vt100_key_s1 = 'o', // ⎺ - scan line 1 - vt100_key_s3 = 'p', // ⎻ - scan line 3 - vt100_key_hline = 'q', // ─ - horizontal line - vt100_key_s7 = 'r', // ⎼ - scan line 7 - vt100_key_s9 = 's', // ⎽ - scan line 9 - vt100_key_ltee = 't', // ├ - tee pointing right - vt100_key_rtee = 'u', // ┤ - tee pointing left - vt100_key_btee = 'v', // ┴ - tee pointing up - vt100_key_ttee = 'w', // ┬ - tee pointing down - vt100_key_vline = 'x', // │ - vertical line - vt100_key_lequal = 'y', // ≤ - less-than-or-equal-to - vt100_key_gequal = 'z', // ≥ - greater-than-or-equal-to - vt100_key_pi = '{', // π - greek pi - vt100_key_nequal = '|', // ≠ - not-equal - vt100_key_sterling = '}', // £ - UK pound sign - vt100_key_bullet = '~' // · - bullet - }; - - // Unicode characters - enum SpecialCharacter - { - Euro = 0x20ac, // € - Pound = 0x00a3, // £ - Pi = 0x03c0, // π - SuperscriptLatinSmallLetterN = 0x207F, // ⁿ - GreaterThanOrEqualTo = 0x2265, // ≥ - LessThanOrEqualTo = 0x2264, // ≤ - NotEqualTo = 0x2260, // ≠ - PlusMinus = 0x00b1, // ± - Times = 0x00d7, // × - Degree = 0x00b0, // ° - BlackVerticalRectangle = 0x25ae, // ▮ (1) - SmallBullet = 0x00b7, // · - BlackDiamondSuit = 0x2666, // ◆ - SymbolForNewline = 0x2424, // ␤ (1) - SymbolForVerticalTab = 0x240b, // ␋ (1) - SymbolForHorizontalTab = 0x2409, // ␉ (1) - SymbolForFormFeed = 0x240c, // ␌ (1) - SymbolForCarriageReturn = 0x240d, // ␍ (1) - SymbolForLineFeed = 0x240a, // ␊ (1) - MediumShade = 0x2592, // ▒ - BoxDrawingsHorizontal = 0x2500, // ─ - BoxDrawingsVertical = 0x2502, // │ - BoxDrawingsDownAndRight = 0x250c, // ┌ - BoxDrawingsDownAndLeft = 0x2510, // ┐ - BoxDrawingsUpAndRight = 0x2514, // └ - BoxDrawingsUpAndLeft = 0x2518, // ┘ - BoxDrawingsCross = 0x253c, // ┼ - BoxDrawingsDownAndHorizontal = 0x252c, // ┬ - BoxDrawingsVerticalAndLeft = 0x2524, // ┤ - BoxDrawingsVerticalAndRight = 0x251c, // ├ - BoxDrawingsUpAndHorizontal = 0x2534, // ┴ - HorizontalScanLine1 = 0x23ba, // ⎺ (1) - HorizontalScanLine3 = 0x23bb, // ⎻ (1) - HorizontalScanLine7 = 0x23bc, // ⎼ (1) - HorizontalScanLine9 = 0x23bd, // ⎽ (1) - BlackUpPointingTriangle = 0x25b2, // ▲ - BlackDownPointingTriangle = 0x25bc, // ▼ - BlackRightPointingTriangle = 0x25b6, // ▶ (1) - BlackLeftPointingTriangle = 0x25c0, // ◀ (1) - BlackRightPointingPointer = 0x25ba, // ► - BlackLeftPointingPointer = 0x25c4, // ◄ - Bullet = 0x2022, // • - FullBlock = 0x2588, // █ - UpperHalfBlock = 0x2580, // ▀ - LowerHalfBlock = 0x2584, // ▄ - LeftHalfBlock = 0x258c, // ▌ - RightHalfBlock = 0x2590, // ▐ - NF_rev_left_arrow2 = 0x1ab4, // ⊐ (2) - NF_rev_right_arrow2 = 0x1ab5, // ► (2) - NF_radio_button3 = 0x1ab7, // ) (2) - NF_rev_border_corner_upper_right = 0x1ab8, // ⎤ (2) - NF_rev_border_line_right = 0x1ab9, // ⎹ (2) - NF_rev_border_line_vertical_left = 0x1aba, // ┤ (2) - NF_rev_border_corner_lower_right = 0x1abb, // ⎦ (2) - NF_border_line_left = 0x1abc, // ⎸ (2) - NF_rev_up_arrow2 = 0x1abd, //⎹◣ (2) - NF_rev_down_arrow2 = 0x1abe, //⎹◤ (2) - NF_border_corner_middle_lower_left = 0x1ac0, // └ (2) - NF_rev_up_arrow1 = 0x1ac1, // ◢⎸ (2) - NF_rev_down_arrow1 = 0x1ac2, // ◥⎸ (2) - NF_border_line_vertical_right = 0x1ac3, // ├ (2) - NF_border_line_up_and_down = 0x1ac5, // ニ (2) - NF_shadow_box_middle = 0x1ac6, // ニ (2) - NF_shadow_box_hdd = 0x1ac7, // ニ (2) - NF_rev_left_arrow1 = 0x1ac8, // ◄ (2) - NF_rev_right_arrow1 = 0x1ac9, // ⊏ (2) - NF_rev_menu_button1 = 0x1aca, // [ (2) - NF_rev_menu_button2 = 0x1acb, // - (2) - NF_border_corner_middle_upper_left = 0x1acc, // ┌ (2) - NF_shadow_box_cd = 0x1acd, // ニ (2) - NF_shadow_box_left = 0x1ace, // [ (2) - NF_border_corner_middle_lower_right = 0x1acf, // ┘ (2) - NF_border_corner_middle_upper_right = 0x1ad0, // ┐ (2) - NF_shadow_box_net = 0x1ad1, // ニ (2) - NF_rev_up_pointing_triangle1 = 0x1ad2, // ◢ (2) - NF_border_corner_lower_left = 0x1ad3, // ⎣ (2) - NF_border_line_bottom = 0x1ad4, // _ (2) - NF_radio_button2 = 0x1ad5, // ⁐ (2) - NF_radio_button2_checked = 0x1ad6, // ● (2) - NF_rev_down_pointing_triangle1 = 0x1ad7, // ◥ (2) - NF_border_line_upper = 0x1ad8, // ¯ (2) - NF_radio_button1 = 0x1ad9, // ( (2) - NF_border_corner_upper_left = 0x1ada, // ⎡ (2) - NF_shadow_box_checked = 0x1adc, // ✓ (2) - NF_rev_border_line_right_and_left = 0x1ae7, // || (2) - NF_rev_up_pointing_triangle2 = 0x1ae8, // ◣ (2) - NF_rev_down_pointing_triangle2 = 0x1ae9, // ◤ (2) - NF_rev_menu_button3 = 0x1af4, // ] (2) - NF_shadow_box_right = 0x1af5, // ] (2) - NF_Bullet = 0x1af9, // ● (2) - NF_check_mark = 0x1afb, // ✓ (2) - SquareRoot = 0x221a // √ - }; - /* - * (1) Not defined in Windows Glyph List 4 (WGL4) - * (2) Only supported in use with newfont - */ - - // keyboard - single keys - enum keys - { - Fckey_a = 0x0000001, // control-a - Fckey_b = 0x0000002, // control-b - Fckey_c = 0x0000003, // control-c - Fckey_d = 0x0000004, // control-d - Fckey_e = 0x0000005, // control-e - Fckey_f = 0x0000006, // control-f - Fckey_g = 0x0000007, // control-g - Fkey_erase = 0x0000008, // control-h - Fkey_tab = 0x0000009, // control-i - Fckey_j = 0x000000a, // control-j - Fckey_h = 0x000000b, // control-k - Fckey_l = 0x000000c, // control-l - Fkey_return = 0x000000d, // control-m - Fckey_n = 0x000000e, // control-n - Fckey_o = 0x000000f, // control-o - Fckey_p = 0x0000010, // control-p - Fckey_q = 0x0000011, // control-q - Fckey_r = 0x0000012, // control-r - Fckey_s = 0x0000013, // control-s - Fckey_t = 0x0000014, // control-t - Fckey_u = 0x0000015, // control-u - Fckey_v = 0x0000016, // control-v - Fckey_w = 0x0000017, // control-w - Fckey_x = 0x0000018, // control-x - Fckey_y = 0x0000019, // control-y - Fckey_z = 0x000001a, // control-t - Fkey_escape = 0x000001b, // control-[ - Fckey_backslash = 0x000001c, // control-'\' - Fckey_right_square_bracket = 0x000001d, // control-] - Fckey_caret = 0x000001e, // control-^ - Fckey_underscore = 0x000001f, // control-_ - Fkey_space = 0x0000020, - Fckey_space = 0x1000020, // control-space - Fkey_backspace = 0x1000100, - Fkey_catab = 0x1000101, - Fkey_clear = 0x1000102, - Fkey_ctab = 0x1000103, - Fkey_dc = 0x1000104, - Fkey_dl = 0x1000105, - Fkey_down = 0x1000106, - Fkey_eic = 0x1000107, - Fkey_eol = 0x1000108, - Fkey_eos = 0x1000109, - Fkey_f0 = 0x100010a, - Fkey_f1 = 0x100010b, - Fkey_f2 = 0x100010c, - Fkey_f3 = 0x100010d, - Fkey_f4 = 0x100010e, - Fkey_f5 = 0x100010f, - Fkey_f6 = 0x1000110, - Fkey_f7 = 0x1000111, - Fkey_f8 = 0x1000112, - Fkey_f9 = 0x1000113, - Fkey_f10 = 0x1000114, - Fkey_home = 0x1000115, - Fkey_ic = 0x1000116, // insert key - Fkey_il = 0x1000117, - Fkey_left = 0x1000118, - Fkey_ll = 0x1000119, - Fkey_npage = 0x100011a, - Fkey_ppage = 0x100011b, - Fkey_right = 0x100011c, - Fkey_sf = 0x100011d, - Fkey_sr = 0x100011e, - Fkey_stab = 0x100011f, - Fkey_up = 0x1000120, - Fkey_a1 = 0x1000121, - Fkey_a3 = 0x1000122, - Fkey_b2 = 0x1000123, - Fkey_c1 = 0x1000124, - Fkey_c3 = 0x1000125, - Fkey_btab = 0x1000126, - Fkey_beg = 0x1000127, - Fkey_cancel = 0x1000128, - Fkey_close = 0x1000129, - Fkey_command = 0x100012a, - Fkey_copy = 0x100012b, - Fkey_create = 0x100012c, - Fkey_end = 0x100012d, - Fkey_enter = 0x100012e, - Fkey_exit = 0x100012f, - Fkey_find = 0x1000130, - Fkey_help = 0x1000131, - Fkey_mark = 0x1000132, - Fkey_message = 0x1000133, - Fkey_move = 0x1000134, - Fkey_next = 0x1000135, - Fkey_open = 0x1000136, - Fkey_options = 0x1000137, - Fkey_previous = 0x1000138, - Fkey_print = 0x1000139, - Fkey_redo = 0x100013a, - Fkey_reference = 0x100013b, - Fkey_refresh = 0x100013c, - Fkey_replace = 0x100013d, - Fkey_restart = 0x100013e, - Fkey_resume = 0x100013f, - Fkey_save = 0x1000140, - Fkey_suspend = 0x1000141, - Fkey_undo = 0x1000142, - Fkey_sbeg = 0x1000143, - Fkey_scancel = 0x1000144, - Fkey_scommand = 0x1000145, - Fkey_scopy = 0x1000146, - Fkey_screate = 0x1000147, - Fkey_sdc = 0x1000148, - Fkey_sdl = 0x1000149, - Fkey_select = 0x100014a, - Fkey_send = 0x100014b, - Fkey_seol = 0x100014c, - Fkey_sexit = 0x100014d, - Fkey_sfind = 0x100014e, - Fkey_shelp = 0x100014f, - Fkey_shome = 0x1000150, - Fkey_sic = 0x1000151, - Fkey_sleft = 0x1000152, - Fkey_smessage = 0x1000153, - Fkey_smove = 0x1000154, - Fkey_snext = 0x1000155, - Fkey_soptions = 0x1000156, - Fkey_sprevious = 0x1000157, - Fkey_sprint = 0x1000158, - Fkey_sredo = 0x1000159, - Fkey_sreplace = 0x100015a, - Fkey_sright = 0x100015b, - Fkey_srsume = 0x100015c, - Fkey_ssave = 0x100015d, - Fkey_ssuspend = 0x100015e, - Fkey_sundo = 0x100015f, - Fkey_f11 = 0x1000160, - Fkey_f12 = 0x1000161, - Fkey_f13 = 0x1000162, - Fkey_f14 = 0x1000163, - Fkey_f15 = 0x1000164, - Fkey_f16 = 0x1000165, - Fkey_f17 = 0x1000166, - Fkey_f18 = 0x1000167, - Fkey_f19 = 0x1000168, - Fkey_f20 = 0x1000169, - Fkey_f21 = 0x100016a, - Fkey_f22 = 0x100016b, - Fkey_f23 = 0x100016c, - Fkey_f24 = 0x100016d, - Fkey_f25 = 0x100016e, - Fkey_f26 = 0x100016f, - Fkey_f27 = 0x1000170, - Fkey_f28 = 0x1000171, - Fkey_f29 = 0x1000172, - Fkey_f30 = 0x1000173, - Fkey_f31 = 0x1000174, - Fkey_f32 = 0x1000175, - Fkey_f33 = 0x1000176, - Fkey_f34 = 0x1000177, - Fkey_f35 = 0x1000178, - Fkey_f36 = 0x1000179, - Fkey_f37 = 0x100017a, - Fkey_f38 = 0x100017b, - Fkey_f39 = 0x100017c, - Fkey_f40 = 0x100017d, - Fkey_f41 = 0x100017e, - Fkey_f42 = 0x100017f, - Fkey_f43 = 0x1000180, - Fkey_f44 = 0x1000181, - Fkey_f45 = 0x1000182, - Fkey_f46 = 0x1000183, - Fkey_f47 = 0x1000184, - Fkey_f48 = 0x1000185, - Fkey_f49 = 0x1000186, - Fkey_f50 = 0x1000187, - Fkey_f51 = 0x1000188, - Fkey_f52 = 0x1000189, - Fkey_f53 = 0x100018a, - Fkey_f54 = 0x100018b, - Fkey_f55 = 0x100018c, - Fkey_f56 = 0x100018d, - Fkey_f57 = 0x100018e, - Fkey_f58 = 0x100018f, - Fkey_f59 = 0x1000190, - Fkey_f60 = 0x1000191, - Fkey_f61 = 0x1000192, - Fkey_f62 = 0x1000193, - Fkey_f63 = 0x1000194 - }; - - // Keyboard - modifier key combinations - enum metakeys - { - Fmkey_ic = 0x1500100, // M-insert - Fmkey_dc = 0x1500101, // M-delete - Fmkey_home = 0x1500102, // M-home - Fmkey_end = 0x1500103, // M-end - Fmkey_ppage = 0x1500104, // M-prev-page - Fmkey_npage = 0x1500105, // M-next-page - Fmkey_f1 = 0x1500106, // M-f1 - Fmkey_f2 = 0x1500107, // M-f2 - Fmkey_f3 = 0x1500108, // M-f3 - Fmkey_f4 = 0x1500109, // M-f4 - Fmkey_f5 = 0x150010a, // M-f5 - Fmkey_f6 = 0x150010b, // M-F6 - Fmkey_f7 = 0x150010c, // M-f7 - Fmkey_f8 = 0x150010d, // M-f8 - Fmkey_f9 = 0x150010e, // M-f9 - Fmkey_f10 = 0x150010f, // M-f10 - Fmkey_f11 = 0x1500110, // M-f11 - Fmkey_f12 = 0x1500111, // M-f12 - Fmkey_up = 0x1500112, // M-up - Fmkey_down = 0x1500113, // M-down - Fmkey_right = 0x1500114, // M-right - Fmkey_left = 0x1500115, // M-left - Fmkey_sic = 0x1500116, // shifted M-Insert - Fmkey_sdc = 0x1500117, // shifted M-Delete - Fmkey_shome = 0x1500118, // shifted M-Home - Fmkey_send = 0x1500119, // shifted M-End - Fmkey_sppage = 0x150011a, // shifted M-Page_Up - Fmkey_snpage = 0x150011b, // shifted M-Page_Down - Fmkey_sf1 = 0x150011c, // shifted M-F1 - Fmkey_sf2 = 0x150011d, // shifted M-F2 - Fmkey_sf3 = 0x150011e, // shifted M-F3 - Fmkey_sf4 = 0x150011f, // shifted M-F4 - Fmkey_sf5 = 0x1500120, // shifted M-F5 - Fmkey_sf6 = 0x1500121, // shifted M-F6 - Fmkey_sf7 = 0x1500122, // shifted M-F7 - Fmkey_sf8 = 0x1500123, // shifted M-F8 - Fmkey_sf9 = 0x1500124, // shifted M-F9 - Fmkey_sf10 = 0x1500125, // shifted M-F10 - Fmkey_sf11 = 0x1500126, // shifted M-F11 - Fmkey_sf12 = 0x1500127, // shifted M-F12 - Fmkey_sup = 0x1500128, // shifted M-Up - Fmkey_sdown = 0x1500129, // shifted M-Down - Fmkey_sright = 0x150012a, // shifted M-Right - Fmkey_sleft = 0x150012b, // shifted M-Left - Fckey_ic = 0x150012c, // control-Insert - Fckey_dc = 0x150012d, // control-Delete - Fckey_home = 0x150012e, // control-Home - Fckey_end = 0x150012f, // control-End - Fckey_ppage = 0x1500130, // control-Page_Up - Fckey_npage = 0x1500131, // control-Page_Down - Fckey_up = 0x1500132, // control-Up - Fckey_down = 0x1500133, // control-Down - Fckey_right = 0x1500134, // control-Right - Fckey_left = 0x1500135, // control-Left - Fckey_sic = 0x1500136, // shifted control-M-Insert - Fckey_sdc = 0x1500137, // shifted control-M-Delete - Fckey_shome = 0x1500138, // shifted control-M-Home - Fckey_send = 0x1500139, // shifted control-M-End - Fckey_sppage = 0x150013a, // shifted control-M-Page_Up - Fckey_snpage = 0x150013b, // shifted control-M-Page_Down - Fckey_sup = 0x150013c, // shifted control-M-Up - Fckey_sdown = 0x150013d, // shifted control-M-Down - Fckey_sright = 0x150013e, // shifted control-M-Right - Fckey_sleft = 0x150013f, // shifted control-M-Left - Fcmkey_ic = 0x1500140, // control-M-Insert - Fcmkey_dc = 0x1500141, // control-M-Delete - Fcmkey_home = 0x1500142, // control-M-Home - Fcmkey_end = 0x1500143, // control-M-End - Fcmkey_ppage = 0x1500144, // control-M-Page_Up - Fcmkey_npage = 0x1500145, // control-M-Page_Down - Fcmkey_up = 0x1500146, // control-M-Up - Fcmkey_down = 0x1500147, // control-M-Down - Fcmkey_right = 0x1500148, // control-M-Right - Fcmkey_left = 0x1500149, // control-M-Left - Fcmkey_sic = 0x150014a, // shifted control-M-Insert - Fcmkey_sdc = 0x150014b, // shifted control-M-Delete - Fcmkey_shome = 0x150014c, // shifted control-M-Home - Fcmkey_send = 0x150014d, // shifted control-M-End - Fcmkey_sppage = 0x150014e, // shifted control-M-Page_Up - Fcmkey_snpage = 0x150014f, // shifted control-M-Page_Down - Fcmkey_sf1 = 0x1500150, // shifted control-M-F1 - Fcmkey_sf2 = 0x1500151, // shifted control-M-F2 - Fcmkey_sf3 = 0x1500152, // shifted control-M-F3 - Fcmkey_sf4 = 0x1500153, // shifted control-M-F4 - Fcmkey_sf5 = 0x1500154, // shifted control-M-F5 - Fcmkey_sf6 = 0x1500155, // shifted control-M-F6 - Fcmkey_sf7 = 0x1500156, // shifted control-M-F7 - Fcmkey_sf8 = 0x1500157, // shifted control-M-F8 - Fcmkey_sf9 = 0x1500158, // shifted control-M-F9 - Fcmkey_sf10 = 0x1500159, // shifted control-M-F10 - Fcmkey_sf11 = 0x150015a, // shifted control-M-F11 - Fcmkey_sf12 = 0x150015b, // shifted control-M-F12 - Fcmkey_sup = 0x150015c, // shifted control-M-Up - Fcmkey_sdown = 0x150015d, // shifted control-M-Down - Fcmkey_sright = 0x150015e, // shifted control-M-Right - Fcmkey_sleft = 0x150015f, // shifted control-M-Left - Fkey_menu = 0x1600000, // menu - Fkey_smenu = 0x1600001, // shifted menu - Fckey_menu = 0x1600002, // control-menu - Fckey_smenu = 0x1600003, // shifted control-menu - Fmkey_menu = 0x1600004, // M-menu - Fmkey_smenu = 0x1600005, // shifted M-menu - Fcmkey_menu = 0x1600006, // control-M-menu - Fcmkey_smenu = 0x1600007, // shifted control-M-menu - Fkey_escape_mintty = 0x200001b, // mintty Esc - Fkey_mouse = 0x2000020, // xterm mouse - Fkey_extended_mouse = 0x2000021, // SGR extended mouse - Fkey_urxvt_mouse = 0x2000022, // urxvt mouse extension - Fmkey_meta = 0x20000e0, // meta key offset - Fmkey_tab = 0x20000e9, // M-tab - Fmkey_enter = 0x20000ea, // M-enter - Fmkey_space = 0x2000100, // M-' ' - Fmkey_bang = 0x2000101, // M-! - Fmkey_quotes = 0x2000102, // M-" - Fmkey_hash = 0x2000103, // M-# - Fmkey_dollar = 0x2000104, // M-$ - Fmkey_percent = 0x2000105, // M-% - Fmkey_ampersand = 0x2000106, // M-& - Fmkey_apostrophe = 0x2000107, // M-' - Fmkey_left_parenthesis = 0x2000108, // M-( - Fmkey_right_parenthesis = 0x2000109, // M-) - Fmkey_asterisk = 0x200010a, // M-* - Fmkey_plus = 0x200010b, // M-+ - Fmkey_comma = 0x200010c, // M-, - Fmkey_minus = 0x200010d, // M-'-' - Fmkey_full_stop = 0x200010e, // M-. - Fmkey_slash = 0x200010f, // M-/ - Fmkey_0 = 0x2000110, // M-0 - Fmkey_1 = 0x2000111, // M-1 - Fmkey_2 = 0x2000112, // M-2 - Fmkey_3 = 0x2000113, // M-3 - Fmkey_4 = 0x2000114, // M-4 - Fmkey_5 = 0x2000115, // M-5 - Fmkey_6 = 0x2000116, // M-6 - Fmkey_7 = 0x2000117, // M-7 - Fmkey_8 = 0x2000118, // M-8 - Fmkey_9 = 0x2000119, // M-9 - Fmkey_colon = 0x200011a, // M-: - Fmkey_semicolon = 0x200011b, // M-; - Fmkey_less_than = 0x200011c, // M-< - Fmkey_equals = 0x200011d, // M-= - Fmkey_greater_than = 0x200011e, // M-> - Fmkey_question_mark = 0x200011f, // M-? - Fmkey_at = 0x2000120, // M-@ - Fmkey_A = 0x2000121, // M-A - Fmkey_B = 0x2000122, // M-B - Fmkey_C = 0x2000123, // M-C - Fmkey_D = 0x2000124, // M-D - Fmkey_E = 0x2000125, // M-E - Fmkey_F = 0x2000126, // M-F - Fmkey_G = 0x2000127, // M-G - Fmkey_H = 0x2000128, // M-H - Fmkey_I = 0x2000129, // M-I - Fmkey_J = 0x200012a, // M-J - Fmkey_K = 0x200012b, // M-K - Fmkey_L = 0x200012c, // M-L - Fmkey_M = 0x200012d, // M-M - Fmkey_N = 0x200012e, // M-N - Fmkey_O = 0x200012f, // M-O - Fmkey_P = 0x2000130, // M-P - Fmkey_Q = 0x2000131, // M-Q - Fmkey_R = 0x2000132, // M-R - Fmkey_S = 0x2000133, // M-S - Fmkey_T = 0x2000134, // M-T - Fmkey_U = 0x2000135, // M-U - Fmkey_V = 0x2000136, // M-V - Fmkey_W = 0x2000137, // M-W - Fmkey_X = 0x2000138, // M-X - Fmkey_Y = 0x2000139, // M-Y - Fmkey_Z = 0x200013a, // M-Z - Fmkey_left_square_bracket = 0x200013b, // M-[ - Fmkey_backslash = 0x200013c, // M-'\' - Fmkey_right_square_bracket = 0x200013d, // M-] - Fmkey_caret = 0x200013e, // M-^ - Fmkey_underscore = 0x200013f, // M-_ - Fmkey_grave_accent = 0x2000140, // M-` - Fmkey_a = 0x2000141, // M-a - Fmkey_b = 0x2000142, // M-b - Fmkey_c = 0x2000143, // M-c - Fmkey_d = 0x2000144, // M-d - Fmkey_e = 0x2000145, // M-e - Fmkey_f = 0x2000146, // M-f - Fmkey_g = 0x2000147, // M-g - Fmkey_h = 0x2000148, // M-h - Fmkey_i = 0x2000149, // M-i - Fmkey_j = 0x200014a, // M-j - Fmkey_k = 0x200014b, // M-k - Fmkey_l = 0x200014c, // M-l - Fmkey_m = 0x200014d, // M-m - Fmkey_n = 0x200014e, // M-n - Fmkey_o = 0x200014f, // M-o - Fmkey_p = 0x2000150, // M-p - Fmkey_q = 0x2000151, // M-q - Fmkey_r = 0x2000152, // M-r - Fmkey_s = 0x2000153, // M-s - Fmkey_t = 0x2000154, // M-t - Fmkey_u = 0x2000155, // M-u - Fmkey_v = 0x2000156, // M-v - Fmkey_w = 0x2000157, // M-w - Fmkey_x = 0x2000158, // M-x - Fmkey_y = 0x2000159, // M-y - Fmkey_z = 0x200015a, // M-z - Fmkey_left_curly_bracket = 0x200015b, // M-{ - Fmkey_vertical_bar = 0x200015c, // M-| - Fmkey_right_curly_bracket = 0x200015d, // M-} - Fmkey_tilde = 0x200015e // M-~ - }; - - // Console color names - enum colornames - { - Default = -1, - Black = 0, - Blue = 1, - Green = 2, - Cyan = 3, - Red = 4, - Magenta = 5, - Brown = 6, - LightGray = 7, - DarkGray = 8, - LightBlue = 9, - LightGreen = 10, - LightCyan = 11, - LightRed = 12, - LightMagenta = 13, - Yellow = 14, - White = 15, - /* 256 color terminals */ - Grey0 = 16, // #000000 - NavyBlue = 17, // #00005f - DarkBlue = 18, // #000087 - Blue3 = 19, // #0000af - Blue2 = 20, // #0000d7 - Blue1 = 21, // #0000ff - DarkGreen = 22, // #005f00 - DarkCyan2 = 23, // #005f5f - DeepSkyBlue6 = 24, // #005f87 - DeepSkyBlue5 = 25, // #005faf - DodgerBlue3 = 26, // #005fd7 - DodgerBlue2 = 27, // #005fff - Green4 = 28, // #008700 - SpringGreen6 = 29, // #00875f - Turquoise4 = 30, // #008787 - DeepSkyBlue4 = 31, // #0087af - DeepSkyBlue3 = 32, // #0087d7 - DodgerBlue1 = 33, // #0087ff - Green2 = 34, // #00af00 - SpringGreen5 = 35, // #00af5f - DarkCyan = 36, // #00af87 - LightSeaGreen = 37, // #00afaf - DeepSkyBlue2 = 38, // #00afd7 - DeepSkyBlue1 = 39, // #00afff - Green3 = 40, // #00d700 - SpringGreen4 = 41, // #00d75f - SpringGreen3 = 42, // #00d787 - Cyan3 = 43, // #00d7af - DarkTurquoise = 44, // #00d7d7 - Turquoise2 = 45, // #00d7ff - Green1 = 46, // #00ff00 - SpringGreen2 = 47, // #00ff5f - SpringGreen1 = 48, // #00ff87 - MediumSpringGreen = 49, // #00ffaf - Cyan2 = 50, // #00ffd7 - Cyan1 = 51, // #00ffff - DarkRed = 52, // #5f0000 - DeepPink7 = 53, // #5f005f - Purple4 = 54, // #5f0087 - Purple3 = 55, // #5f00af - Purple2 = 56, // #5f00d7 - BlueViolet = 57, // #5f00ff - Orange4 = 58, // #5f5f00 - Grey37 = 59, // #5f5f5f - MediumPurple6 = 60, // #5f5f87 - SlateBlue3 = 61, // #5f5faf - SlateBlue2 = 62, // #5f5fd7 - RoyalBlue1 = 63, // #5f5fff - Chartreuse5 = 64, // #5f8700 - DarkSeaGreen8 = 65, // #5f875f - PaleTurquoise4 = 66, // #5f8787 - SteelBlue = 67, // #5f87af - SteelBlue3 = 68, // #5f87d7 - CornflowerBlue = 69, // #5f87ff - Chartreuse4 = 70, // #5faf00 - DarkSeaGreen7 = 71, // #5faf5f - CadetBlue2 = 72, // #5faf87 - CadetBlue1 = 73, // #5fafaf - SkyBlue3 = 74, // #5fafd7 - SteelBlue2 = 75, // #5fafff - Chartreuse3 = 76, // #5fd700 - PaleGreen3 = 77, // #5fd75f - SeaGreen4 = 78, // #5fd787 - Aquamarine3 = 79, // #5fd7af - MediumTurquoise = 80, // #5fd7d7 - SteelBlue1 = 81, // #5fd7ff - Chartreuse = 82, // #5fff00 - SeaGreen3 = 83, // #5fff5f - SeaGreen2 = 84, // #5fff87 - SeaGreen1 = 85, // #5fffaf - Aquamarine2 = 86, // #5fffd7 - DarkSlateGray2 = 87, // #5fffff - DarkRed2 = 88, // #870000 - DeepPink6 = 89, // #87005f - DarkMagenta2 = 90, // #870087 - DarkMagenta = 91, // #8700af - DarkViolet1 = 92, // #8700d7 - Purple1 = 93, // #8700ff - Orange3 = 94, // #875f00 - LightPink4 = 95, // #875f5f - Plum4 = 96, // #875f87 - MediumPurple5 = 97, // #875faf - MediumPurple4 = 98, // #875fd7 - SlateBlue1 = 99, // #875fff - Yellow6 = 100, // #878700 - Wheat4 = 101, // #87875f - Grey53 = 102, // #878787 - LightSlateGrey = 103, // #8787af - MediumPurple = 104, // #8787d7 - LightSlateBlue = 105, // #8787ff - Yellow5 = 106, // #87af00 - DarkOliveGreen5 = 107, // #87af5f - DarkSeaGreen6 = 108, // #87af87 - LightSkyBlue3 = 109, // #87afaf - LightSkyBlue2 = 110, // #87afd7 - SkyBlue2 = 111, // #87afff - Chartreuse2 = 112, // #87d700 - DarkOliveGreen4 = 113, // #87d75f - PaleGreen2 = 114, // #87d787 - DarkSeaGreen5 = 115, // #87d7af - DarkSlateGray3 = 116, // #87d7d7 - SkyBlue1 = 117, // #87d7ff - Chartreuse1 = 118, // #87ff00 - LightGreen3 = 119, // #87ff5f - LightGreen2 = 120, // #87ff87 - PaleGreen1 = 121, // #87ffaf - Aquamarine1 = 122, // #87ffd7 - DarkSlateGray1 = 123, // #87ffff - Red3 = 124, // #af0000 - DeepPink5 = 125, // #af005f - MediumVioletRed = 126, // #af0087 - Magenta6 = 127, // #af00af - DarkViolet = 128, // #af00d7 - Purple = 129, // #af00ff - DarkOrange3 = 130, // #af5f00 - IndianRed3 = 131, // #af5f5f - HotPink4 = 132, // #af5f87 - MediumOrchid3 = 133, // #af5faf - MediumOrchid = 134, // #af5fd7 - MediumPurple3 = 135, // #af5fff - DarkGoldenrod = 136, // #af8700 - LightSalmon3 = 137, // #af875f - RosyBrown = 138, // #af8787 - Grey63 = 139, // #af87af - MediumPurple2 = 140, // #af87d7 - MediumPurple1 = 141, // #af87ff - Gold3 = 142, // #afaf00 - DarkKhaki = 143, // #afaf5f - NavajoWhite3 = 144, // #afaf87 - Grey69 = 145, // #afafaf - LightSteelBlue3 = 146, // #afafd7 - LightSteelBlue = 147, // #afafff - Yellow4 = 148, // #afd700 - DarkOliveGreen3 = 149, // #afd75f - DarkSeaGreen4 = 150, // #afd787 - DarkSeaGreen3 = 151, // #afd7af - LightCyan3 = 152, // #afd7d7 - LightSkyBlue1 = 153, // #afd7ff - GreenYellow = 154, // #afff00 - DarkOliveGreen2 = 155, // #afff5f - PaleGreen = 156, // #afff87 - DarkSeaGreen2 = 157, // #afffaf - DarkSeaGreen1 = 158, // #afffd7 - PaleTurquoise1 = 159, // #afffff - Red2 = 160, // #d70000 - DeepPink4 = 161, // #d7005f - DeepPink3 = 162, // #d70087 - Magenta5 = 163, // #d700af - Magenta4 = 164, // #d700d7 - Magenta3 = 165, // #d700ff - DarkOrange2 = 166, // #d75f00 - IndianRed = 167, // #d75f5f - HotPink3 = 168, // #d75f87 - HotPink2 = 169, // #d75faf - Orchid = 170, // #d75fd7 - MediumOrchid2 = 171, // #d75fff - Orange2 = 172, // #d78700 - LightSalmon2 = 173, // #d7875f - LightPink3 = 174, // #d78787 - Pink3 = 175, // #d787af - Plum3 = 176, // #d787d7 - Violet = 177, // #d787ff - Gold2 = 178, // #d7af00 - LightGoldenrod5 = 179, // #d7af5f - Tan = 180, // #d7af87 - MistyRose3 = 181, // #d7afaf - Thistle3 = 182, // #d7afd7 - Plum2 = 183, // #d7afff - Yellow3 = 184, // #d7d700 - Khaki3 = 185, // #d7d75f - LightGoldenrod4 = 186, // #d7d787 - LightYellow3 = 187, // #d7d7af - Grey84 = 188, // #d7d7d7 - LightSteelBlue1 = 189, // #d7d7ff - Yellow2 = 190, // #d7ff00 - DarkOliveGreen1 = 191, // #d7ff5f - DarkOliveGreen = 192, // #d7ff87 - DarkSeaGreen = 193, // #d7ffaf - Honeydew2 = 194, // #d7ffd7 - LightCyan1 = 195, // #d7ffff - Red1 = 196, // #ff0000 - DeepPink2 = 197, // #ff005f - DeepPink1 = 198, // #ff0087 - DeepPink = 199, // #ff00af - Magenta2 = 200, // #ff00d7 - Magenta1 = 201, // #ff00ff - OrangeRed1 = 202, // #ff5f00 - IndianRed2 = 203, // #ff5f5f - IndianRed1 = 204, // #ff5f87 - HotPink1 = 205, // #ff5faf - HotPink = 206, // #ff5fd7 - MediumOrchid1 = 207, // #ff5fff - DarkOrange = 208, // #ff8700 - Salmon1 = 209, // #ff875f - LightCoral = 210, // #ff8787 - PaleVioletRed1 = 211, // #ff87af - Orchid2 = 212, // #ff87d7 - Orchid1 = 213, // #ff87ff - Orange1 = 214, // #ffaf00 - SandyBrown = 215, // #ffaf5f - LightSalmon1 = 216, // #ffaf87 - LightPink1 = 217, // #ffafaf - Pink1 = 218, // #ffafd7 - Plum1 = 219, // #ffafff - Gold1 = 220, // #ffd700 - LightGoldenrod3 = 221, // #ffd75f - LightGoldenrod2 = 222, // #ffd787 - NavajoWhite1 = 223, // #ffd7af - MistyRose1 = 224, // #ffd7d7 - Thistle1 = 225, // #ffd7ff - Yellow1 = 226, // #ffff00 - LightGoldenrod = 227, // #ffff5f - Khaki1 = 228, // #ffff87 - Wheat1 = 229, // #ffffaf - Cornsilk1 = 230, // #ffffd7 - Grey100 = 231, // #ffffff - Grey3 = 232, // #080808 - Grey7 = 233, // #121212 - Grey11 = 234, // #1c1c1c - Grey15 = 235, // #262626 - Grey19 = 236, // #303030 - Grey23 = 237, // #3a3a3a - Grey27 = 238, // #444444 - Grey30 = 239, // #4e4e4e - Grey35 = 240, // #585858 - Grey39 = 241, // #626262 - Grey42 = 242, // #6c6c6c - Grey46 = 243, // #767676 - Grey50 = 244, // #808080 - Grey54 = 245, // #8a8a8a - Grey58 = 246, // #949494 - Grey62 = 247, // #9e9e9e - Grey66 = 248, // #a8a8a8 - Grey70 = 249, // #b2b2b2 - Grey74 = 250, // #bcbcbc - Grey78 = 251, // #c6c6c6 - Grey82 = 252, // #d0d0d0 - Grey85 = 253, // #dadada - Grey89 = 254, // #e4e4e4 - Grey93 = 255 // #eeeeee - }; - - // Mouse/keyboard state values - enum ButtonState - { - NoButton = 0x00, - LeftButton = 0x01, - RightButton = 0x02, - MiddleButton = 0x04, - MouseButtonMask = 0x07, - ShiftButton = 0x08, - ControlButton = 0x10, - MetaButton = 0x20, - KeyButtonMask = 0x38 - }; - - // Wheel state values - enum WheelState - { - NoWheel = 0x00, - WheelUp = 0x01, - WheelDown = 0x02, - WheelMask = 0x03 - }; - - // Type of focus - enum FocusTypes - { - FocusNextWidget = 0x00, - FocusPreviousWidget = 0x01, - FocusDefiniteWidget = 0x03 // event default - }; - - // Drag scrolling mode - enum dragScroll - { - noScroll = 0, - scrollUp = 1, - scrollDown = 2, - scrollUpSelect = 3, - scrollDownSelect = 4 - }; - - // Scroll bar visibility mode - enum 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 - }; - - // Xterm cursor style - enum xtermCursorStyle - { - blinking_block = 0, - blinking_block_default = 1, - steady_block = 2, - blinking_underline = 3, - steady_underline = 4, - blinking_bar_xterm = 5, - steady_bar_xterm = 6 - }; - - // Linux console and framebuffer cursor style - enum linuxConsoleCursorStyle - { - default_cursor = 0, - invisible_cursor = 1, - underscore_cursor = 2, - lower_third_cursor = 3, - lower_half_cursor = 4, - two_thirds_cursor = 5, - full_block_cursor = 6 - }; - - // BSD console cursor style - enum freebsdConsoleCursorStyle - { - normal_cursor = 0, - blink_cursor = 1, - destructive_cursor = 3 - }; - - // KDE konsole cursor style - enum kdeKonsoleCursorShape - { - BlockCursor = 0, - IBeamCursor = 1, - UnderlineCursor = 2 - }; - - enum text_alignment - { - alignLeft = 1, - alignCenter = 2, - alignRight = 3 - }; - - enum orientation - { - vertical = 0, - horizontal = 1 - }; - - enum sides - { - top = 0, - right = 1, - bottom = 2, - left = 3 - }; - - enum brackets_type - { - NoBrackets = 0, - SquareBrackets = 1, // [ ] - Parenthesis = 2, // ( ) - CurlyBrackets = 3, // { } - AngleBrackets = 4 // < > - }; - - enum termcaps - { - t_bell, - t_erase_chars, - t_clear_screen, - t_clr_eos, - t_clr_eol, - t_clr_bol, - t_cursor_home, - t_cursor_to_ll, - t_carriage_return, - t_tab, - t_back_tab, - t_insert_padding, - t_insert_character, - t_parm_ich, - t_repeat_char, - t_initialize_color, - t_initialize_pair, - t_set_a_foreground, - t_set_a_background, - t_set_foreground, - t_set_background, - t_set_color_pair, - t_orig_pair, - t_orig_colors, - t_no_color_video, - t_cursor_address, - t_column_address, - t_row_address, - t_cursor_visible, - t_cursor_invisible, - t_cursor_normal, - t_cursor_up, - t_cursor_down, - t_cursor_left, - t_cursor_right, - t_parm_up_cursor, - t_parm_down_cursor, - t_parm_left_cursor, - t_parm_right_cursor, - t_save_cursor, - t_restore_cursor, - t_scroll_forward, - t_scroll_reverse, - t_enter_ca_mode, - t_exit_ca_mode, - t_enable_acs, - t_enter_bold_mode, - t_exit_bold_mode, - t_enter_dim_mode, - t_exit_dim_mode, - t_enter_italics_mode, - t_exit_italics_mode, - t_enter_underline_mode, - t_exit_underline_mode, - t_enter_blink_mode, - t_exit_blink_mode, - t_enter_reverse_mode, - t_exit_reverse_mode, - t_enter_standout_mode, - t_exit_standout_mode, - t_enter_secure_mode, - t_exit_secure_mode, - t_enter_protected_mode, - t_exit_protected_mode, - t_enter_crossed_out_mode, - t_exit_crossed_out_mode, - t_enter_dbl_underline_mode, - t_exit_dbl_underline_mode, - t_set_attributes, - t_exit_attribute_mode, - t_enter_alt_charset_mode, - t_exit_alt_charset_mode, - t_enter_pc_charset_mode, - t_exit_pc_charset_mode, - t_enter_insert_mode, - t_exit_insert_mode, - t_enter_am_mode, - t_exit_am_mode, - t_acs_chars, - t_keypad_xmit, - t_keypad_local, - t_key_mouse - }; - - // Data Member - static const FString* empty_string; +// Event types +enum events +{ + None_Event, // invalid event + KeyPress_Event, // key pressed + KeyUp_Event, // key released + KeyDown_Event, // key pressed + MouseDown_Event, // mouse button pressed + MouseUp_Event, // mouse button released + MouseDoubleClick_Event, // mouse button double click + MouseWheel_Event, // mouse wheel rolled + MouseMove_Event, // mouse move + FocusIn_Event, // focus in + FocusOut_Event, // focus out + ChildFocusIn_Event, // child focus in + ChildFocusOut_Event, // child focus out + WindowActive_Event, // activate window + WindowInactive_Event, // deactivate window + WindowRaised_Event, // raise window + WindowLowered_Event, // lower window + Accelerator_Event, // keyboard accelerator + Resize_Event, // terminal resize + Show_Event, // widget is shown + Hide_Event, // widget is hidden + Close_Event, // widget close + Timer_Event // timer event occur }; -#pragma pack(pop) +// Properties of a widget +enum widget_flags +{ + shadow = 0x00000001, + trans_shadow = 0x00000002, + active = 0x00000004, + focus = 0x00000008, + scrollable = 0x00000010, + resizeable = 0x00000020, + modal = 0x00000040, + window_widget = 0x00000080, + dialog_widget = 0x00000100, + menu_widget = 0x00000200, + always_on_top = 0x00000400, + flat = 0x00000800, + no_underline = 0x00001000 +}; + +// Internal character encoding +enum encoding +{ + UTF8, + VT100, + PC, + ASCII, + NUM_OF_ENCODINGS, // number of items + UNKNOWN +}; + +// VT100 line graphic keys +enum vt100_keys +{ + vt100_key_rarrow = '+', // ► - arrow pointing right + vt100_key_larrow = ',', // ◄ - arrow pointing left + vt100_key_uarrow = '-', // ▲ - arrow pointing up + vt100_key_darrow = '.', // ▼ - arrow pointing down + vt100_key_block = '0', // █ - solid square block + vt100_key_nsup = 'I', // ⁿ - superscript letter n + vt100_key_blackrect = '_', // ▮ - black vertical rectangle + vt100_key_diamond = '`', // ◆ - diamond + vt100_key_ckboard = 'a', // ▒ - checker board (stipple) + vt100_key_htab = 'b', // ␉ - horizontal tab symbol + vt100_key_ff = 'c', // ␌ - form feed symbol + vt100_key_cr = 'd', // ␍ - carriage return symbol + vt100_key_lf = 'e', // ␊ - line feed symbol + vt100_key_degree = 'f', // ° - degree symbol + vt100_key_plminus = 'g', // ± - plus/minus + vt100_key_board = 'h', // ␤ - board of squares + vt100_key_lantern = 'i', // ␋ - lantern symbol + vt100_key_lrcorner = 'j', // ┘ - lower right corner + vt100_key_urcorner = 'k', // ┐ - upper right corner + vt100_key_ulcorner = 'l', // ┌ - upper left corner + vt100_key_llcorner = 'm', // └ - lower left corner + vt100_key_plus = 'n', // ┼ - large plus or crossover + vt100_key_s1 = 'o', // ⎺ - scan line 1 + vt100_key_s3 = 'p', // ⎻ - scan line 3 + vt100_key_hline = 'q', // ─ - horizontal line + vt100_key_s7 = 'r', // ⎼ - scan line 7 + vt100_key_s9 = 's', // ⎽ - scan line 9 + vt100_key_ltee = 't', // ├ - tee pointing right + vt100_key_rtee = 'u', // ┤ - tee pointing left + vt100_key_btee = 'v', // ┴ - tee pointing up + vt100_key_ttee = 'w', // ┬ - tee pointing down + vt100_key_vline = 'x', // │ - vertical line + vt100_key_lequal = 'y', // ≤ - less-than-or-equal-to + vt100_key_gequal = 'z', // ≥ - greater-than-or-equal-to + vt100_key_pi = '{', // π - greek pi + vt100_key_nequal = '|', // ≠ - not-equal + vt100_key_sterling = '}', // £ - UK pound sign + vt100_key_bullet = '~' // · - bullet +}; + +// Unicode characters +enum SpecialCharacter +{ + Euro = 0x20ac, // € + Pound = 0x00a3, // £ + Pi = 0x03c0, // π + SuperscriptLatinSmallLetterN = 0x207F, // ⁿ + GreaterThanOrEqualTo = 0x2265, // ≥ + LessThanOrEqualTo = 0x2264, // ≤ + NotEqualTo = 0x2260, // ≠ + PlusMinus = 0x00b1, // ± + Times = 0x00d7, // × + Degree = 0x00b0, // ° + BlackVerticalRectangle = 0x25ae, // ▮ (1) + SmallBullet = 0x00b7, // · + BlackDiamondSuit = 0x2666, // ◆ + SymbolForNewline = 0x2424, // ␤ (1) + SymbolForVerticalTab = 0x240b, // ␋ (1) + SymbolForHorizontalTab = 0x2409, // ␉ (1) + SymbolForFormFeed = 0x240c, // ␌ (1) + SymbolForCarriageReturn = 0x240d, // ␍ (1) + SymbolForLineFeed = 0x240a, // ␊ (1) + MediumShade = 0x2592, // ▒ + BoxDrawingsHorizontal = 0x2500, // ─ + BoxDrawingsVertical = 0x2502, // │ + BoxDrawingsDownAndRight = 0x250c, // ┌ + BoxDrawingsDownAndLeft = 0x2510, // ┐ + BoxDrawingsUpAndRight = 0x2514, // └ + BoxDrawingsUpAndLeft = 0x2518, // ┘ + BoxDrawingsCross = 0x253c, // ┼ + BoxDrawingsDownAndHorizontal = 0x252c, // ┬ + BoxDrawingsVerticalAndLeft = 0x2524, // ┤ + BoxDrawingsVerticalAndRight = 0x251c, // ├ + BoxDrawingsUpAndHorizontal = 0x2534, // ┴ + HorizontalScanLine1 = 0x23ba, // ⎺ (1) + HorizontalScanLine3 = 0x23bb, // ⎻ (1) + HorizontalScanLine7 = 0x23bc, // ⎼ (1) + HorizontalScanLine9 = 0x23bd, // ⎽ (1) + BlackUpPointingTriangle = 0x25b2, // ▲ + BlackDownPointingTriangle = 0x25bc, // ▼ + BlackRightPointingTriangle = 0x25b6, // ▶ (1) + BlackLeftPointingTriangle = 0x25c0, // ◀ (1) + BlackRightPointingPointer = 0x25ba, // ► + BlackLeftPointingPointer = 0x25c4, // ◄ + Bullet = 0x2022, // • + FullBlock = 0x2588, // █ + UpperHalfBlock = 0x2580, // ▀ + LowerHalfBlock = 0x2584, // ▄ + LeftHalfBlock = 0x258c, // ▌ + RightHalfBlock = 0x2590, // ▐ + NF_rev_left_arrow2 = 0x1ab4, // ⊐ (2) + NF_rev_right_arrow2 = 0x1ab5, // ► (2) + NF_radio_button3 = 0x1ab7, // ) (2) + NF_rev_border_corner_upper_right = 0x1ab8, // ⎤ (2) + NF_rev_border_line_right = 0x1ab9, // ⎹ (2) + NF_rev_border_line_vertical_left = 0x1aba, // ┤ (2) + NF_rev_border_corner_lower_right = 0x1abb, // ⎦ (2) + NF_border_line_left = 0x1abc, // ⎸ (2) + NF_rev_up_arrow2 = 0x1abd, //⎹◣ (2) + NF_rev_down_arrow2 = 0x1abe, //⎹◤ (2) + NF_border_corner_middle_lower_left = 0x1ac0, // └ (2) + NF_rev_up_arrow1 = 0x1ac1, // ◢⎸ (2) + NF_rev_down_arrow1 = 0x1ac2, // ◥⎸ (2) + NF_border_line_vertical_right = 0x1ac3, // ├ (2) + NF_border_line_up_and_down = 0x1ac5, // ニ (2) + NF_shadow_box_middle = 0x1ac6, // ニ (2) + NF_shadow_box_hdd = 0x1ac7, // ニ (2) + NF_rev_left_arrow1 = 0x1ac8, // ◄ (2) + NF_rev_right_arrow1 = 0x1ac9, // ⊏ (2) + NF_rev_menu_button1 = 0x1aca, // [ (2) + NF_rev_menu_button2 = 0x1acb, // - (2) + NF_border_corner_middle_upper_left = 0x1acc, // ┌ (2) + NF_shadow_box_cd = 0x1acd, // ニ (2) + NF_shadow_box_left = 0x1ace, // [ (2) + NF_border_corner_middle_lower_right = 0x1acf, // ┘ (2) + NF_border_corner_middle_upper_right = 0x1ad0, // ┐ (2) + NF_shadow_box_net = 0x1ad1, // ニ (2) + NF_rev_up_pointing_triangle1 = 0x1ad2, // ◢ (2) + NF_border_corner_lower_left = 0x1ad3, // ⎣ (2) + NF_border_line_bottom = 0x1ad4, // _ (2) + NF_radio_button2 = 0x1ad5, // ⁐ (2) + NF_radio_button2_checked = 0x1ad6, // ● (2) + NF_rev_down_pointing_triangle1 = 0x1ad7, // ◥ (2) + NF_border_line_upper = 0x1ad8, // ¯ (2) + NF_radio_button1 = 0x1ad9, // ( (2) + NF_border_corner_upper_left = 0x1ada, // ⎡ (2) + NF_shadow_box_checked = 0x1adc, // ✓ (2) + NF_rev_border_line_right_and_left = 0x1ae7, // || (2) + NF_rev_up_pointing_triangle2 = 0x1ae8, // ◣ (2) + NF_rev_down_pointing_triangle2 = 0x1ae9, // ◤ (2) + NF_rev_menu_button3 = 0x1af4, // ] (2) + NF_shadow_box_right = 0x1af5, // ] (2) + NF_Bullet = 0x1af9, // ● (2) + NF_check_mark = 0x1afb, // ✓ (2) + SquareRoot = 0x221a // √ +}; +/* + * (1) Not defined in Windows Glyph List 4 (WGL4) + * (2) Only supported in use with newfont + */ + +// keyboard - single keys +enum keys +{ + Fckey_a = 0x0000001, // control-a + Fckey_b = 0x0000002, // control-b + Fckey_c = 0x0000003, // control-c + Fckey_d = 0x0000004, // control-d + Fckey_e = 0x0000005, // control-e + Fckey_f = 0x0000006, // control-f + Fckey_g = 0x0000007, // control-g + Fkey_erase = 0x0000008, // control-h + Fkey_tab = 0x0000009, // control-i + Fckey_j = 0x000000a, // control-j + Fckey_h = 0x000000b, // control-k + Fckey_l = 0x000000c, // control-l + Fkey_return = 0x000000d, // control-m + Fckey_n = 0x000000e, // control-n + Fckey_o = 0x000000f, // control-o + Fckey_p = 0x0000010, // control-p + Fckey_q = 0x0000011, // control-q + Fckey_r = 0x0000012, // control-r + Fckey_s = 0x0000013, // control-s + Fckey_t = 0x0000014, // control-t + Fckey_u = 0x0000015, // control-u + Fckey_v = 0x0000016, // control-v + Fckey_w = 0x0000017, // control-w + Fckey_x = 0x0000018, // control-x + Fckey_y = 0x0000019, // control-y + Fckey_z = 0x000001a, // control-t + Fkey_escape = 0x000001b, // control-[ + Fckey_backslash = 0x000001c, // control-'\' + Fckey_right_square_bracket = 0x000001d, // control-] + Fckey_caret = 0x000001e, // control-^ + Fckey_underscore = 0x000001f, // control-_ + Fkey_space = 0x0000020, + Fckey_space = 0x1000020, // control-space + Fkey_backspace = 0x1000100, + Fkey_catab = 0x1000101, + Fkey_clear = 0x1000102, + Fkey_ctab = 0x1000103, + Fkey_dc = 0x1000104, + Fkey_dl = 0x1000105, + Fkey_down = 0x1000106, + Fkey_eic = 0x1000107, + Fkey_eol = 0x1000108, + Fkey_eos = 0x1000109, + Fkey_f0 = 0x100010a, + Fkey_f1 = 0x100010b, + Fkey_f2 = 0x100010c, + Fkey_f3 = 0x100010d, + Fkey_f4 = 0x100010e, + Fkey_f5 = 0x100010f, + Fkey_f6 = 0x1000110, + Fkey_f7 = 0x1000111, + Fkey_f8 = 0x1000112, + Fkey_f9 = 0x1000113, + Fkey_f10 = 0x1000114, + Fkey_home = 0x1000115, + Fkey_ic = 0x1000116, // insert key + Fkey_il = 0x1000117, + Fkey_left = 0x1000118, + Fkey_ll = 0x1000119, + Fkey_npage = 0x100011a, + Fkey_ppage = 0x100011b, + Fkey_right = 0x100011c, + Fkey_sf = 0x100011d, + Fkey_sr = 0x100011e, + Fkey_stab = 0x100011f, + Fkey_up = 0x1000120, + Fkey_a1 = 0x1000121, + Fkey_a3 = 0x1000122, + Fkey_b2 = 0x1000123, + Fkey_c1 = 0x1000124, + Fkey_c3 = 0x1000125, + Fkey_btab = 0x1000126, + Fkey_beg = 0x1000127, + Fkey_cancel = 0x1000128, + Fkey_close = 0x1000129, + Fkey_command = 0x100012a, + Fkey_copy = 0x100012b, + Fkey_create = 0x100012c, + Fkey_end = 0x100012d, + Fkey_enter = 0x100012e, + Fkey_exit = 0x100012f, + Fkey_find = 0x1000130, + Fkey_help = 0x1000131, + Fkey_mark = 0x1000132, + Fkey_message = 0x1000133, + Fkey_move = 0x1000134, + Fkey_next = 0x1000135, + Fkey_open = 0x1000136, + Fkey_options = 0x1000137, + Fkey_previous = 0x1000138, + Fkey_print = 0x1000139, + Fkey_redo = 0x100013a, + Fkey_reference = 0x100013b, + Fkey_refresh = 0x100013c, + Fkey_replace = 0x100013d, + Fkey_restart = 0x100013e, + Fkey_resume = 0x100013f, + Fkey_save = 0x1000140, + Fkey_suspend = 0x1000141, + Fkey_undo = 0x1000142, + Fkey_sbeg = 0x1000143, + Fkey_scancel = 0x1000144, + Fkey_scommand = 0x1000145, + Fkey_scopy = 0x1000146, + Fkey_screate = 0x1000147, + Fkey_sdc = 0x1000148, + Fkey_sdl = 0x1000149, + Fkey_select = 0x100014a, + Fkey_send = 0x100014b, + Fkey_seol = 0x100014c, + Fkey_sexit = 0x100014d, + Fkey_sfind = 0x100014e, + Fkey_shelp = 0x100014f, + Fkey_shome = 0x1000150, + Fkey_sic = 0x1000151, + Fkey_sleft = 0x1000152, + Fkey_smessage = 0x1000153, + Fkey_smove = 0x1000154, + Fkey_snext = 0x1000155, + Fkey_soptions = 0x1000156, + Fkey_sprevious = 0x1000157, + Fkey_sprint = 0x1000158, + Fkey_sredo = 0x1000159, + Fkey_sreplace = 0x100015a, + Fkey_sright = 0x100015b, + Fkey_srsume = 0x100015c, + Fkey_ssave = 0x100015d, + Fkey_ssuspend = 0x100015e, + Fkey_sundo = 0x100015f, + Fkey_f11 = 0x1000160, + Fkey_f12 = 0x1000161, + Fkey_f13 = 0x1000162, + Fkey_f14 = 0x1000163, + Fkey_f15 = 0x1000164, + Fkey_f16 = 0x1000165, + Fkey_f17 = 0x1000166, + Fkey_f18 = 0x1000167, + Fkey_f19 = 0x1000168, + Fkey_f20 = 0x1000169, + Fkey_f21 = 0x100016a, + Fkey_f22 = 0x100016b, + Fkey_f23 = 0x100016c, + Fkey_f24 = 0x100016d, + Fkey_f25 = 0x100016e, + Fkey_f26 = 0x100016f, + Fkey_f27 = 0x1000170, + Fkey_f28 = 0x1000171, + Fkey_f29 = 0x1000172, + Fkey_f30 = 0x1000173, + Fkey_f31 = 0x1000174, + Fkey_f32 = 0x1000175, + Fkey_f33 = 0x1000176, + Fkey_f34 = 0x1000177, + Fkey_f35 = 0x1000178, + Fkey_f36 = 0x1000179, + Fkey_f37 = 0x100017a, + Fkey_f38 = 0x100017b, + Fkey_f39 = 0x100017c, + Fkey_f40 = 0x100017d, + Fkey_f41 = 0x100017e, + Fkey_f42 = 0x100017f, + Fkey_f43 = 0x1000180, + Fkey_f44 = 0x1000181, + Fkey_f45 = 0x1000182, + Fkey_f46 = 0x1000183, + Fkey_f47 = 0x1000184, + Fkey_f48 = 0x1000185, + Fkey_f49 = 0x1000186, + Fkey_f50 = 0x1000187, + Fkey_f51 = 0x1000188, + Fkey_f52 = 0x1000189, + Fkey_f53 = 0x100018a, + Fkey_f54 = 0x100018b, + Fkey_f55 = 0x100018c, + Fkey_f56 = 0x100018d, + Fkey_f57 = 0x100018e, + Fkey_f58 = 0x100018f, + Fkey_f59 = 0x1000190, + Fkey_f60 = 0x1000191, + Fkey_f61 = 0x1000192, + Fkey_f62 = 0x1000193, + Fkey_f63 = 0x1000194 +}; + +// Keyboard - modifier key combinations +enum metakeys +{ + Fmkey_ic = 0x1500100, // M-insert + Fmkey_dc = 0x1500101, // M-delete + Fmkey_home = 0x1500102, // M-home + Fmkey_end = 0x1500103, // M-end + Fmkey_ppage = 0x1500104, // M-prev-page + Fmkey_npage = 0x1500105, // M-next-page + Fmkey_f1 = 0x1500106, // M-f1 + Fmkey_f2 = 0x1500107, // M-f2 + Fmkey_f3 = 0x1500108, // M-f3 + Fmkey_f4 = 0x1500109, // M-f4 + Fmkey_f5 = 0x150010a, // M-f5 + Fmkey_f6 = 0x150010b, // M-F6 + Fmkey_f7 = 0x150010c, // M-f7 + Fmkey_f8 = 0x150010d, // M-f8 + Fmkey_f9 = 0x150010e, // M-f9 + Fmkey_f10 = 0x150010f, // M-f10 + Fmkey_f11 = 0x1500110, // M-f11 + Fmkey_f12 = 0x1500111, // M-f12 + Fmkey_up = 0x1500112, // M-up + Fmkey_down = 0x1500113, // M-down + Fmkey_right = 0x1500114, // M-right + Fmkey_left = 0x1500115, // M-left + Fmkey_sic = 0x1500116, // shifted M-Insert + Fmkey_sdc = 0x1500117, // shifted M-Delete + Fmkey_shome = 0x1500118, // shifted M-Home + Fmkey_send = 0x1500119, // shifted M-End + Fmkey_sppage = 0x150011a, // shifted M-Page_Up + Fmkey_snpage = 0x150011b, // shifted M-Page_Down + Fmkey_sf1 = 0x150011c, // shifted M-F1 + Fmkey_sf2 = 0x150011d, // shifted M-F2 + Fmkey_sf3 = 0x150011e, // shifted M-F3 + Fmkey_sf4 = 0x150011f, // shifted M-F4 + Fmkey_sf5 = 0x1500120, // shifted M-F5 + Fmkey_sf6 = 0x1500121, // shifted M-F6 + Fmkey_sf7 = 0x1500122, // shifted M-F7 + Fmkey_sf8 = 0x1500123, // shifted M-F8 + Fmkey_sf9 = 0x1500124, // shifted M-F9 + Fmkey_sf10 = 0x1500125, // shifted M-F10 + Fmkey_sf11 = 0x1500126, // shifted M-F11 + Fmkey_sf12 = 0x1500127, // shifted M-F12 + Fmkey_sup = 0x1500128, // shifted M-Up + Fmkey_sdown = 0x1500129, // shifted M-Down + Fmkey_sright = 0x150012a, // shifted M-Right + Fmkey_sleft = 0x150012b, // shifted M-Left + Fckey_ic = 0x150012c, // control-Insert + Fckey_dc = 0x150012d, // control-Delete + Fckey_home = 0x150012e, // control-Home + Fckey_end = 0x150012f, // control-End + Fckey_ppage = 0x1500130, // control-Page_Up + Fckey_npage = 0x1500131, // control-Page_Down + Fckey_up = 0x1500132, // control-Up + Fckey_down = 0x1500133, // control-Down + Fckey_right = 0x1500134, // control-Right + Fckey_left = 0x1500135, // control-Left + Fckey_sic = 0x1500136, // shifted control-M-Insert + Fckey_sdc = 0x1500137, // shifted control-M-Delete + Fckey_shome = 0x1500138, // shifted control-M-Home + Fckey_send = 0x1500139, // shifted control-M-End + Fckey_sppage = 0x150013a, // shifted control-M-Page_Up + Fckey_snpage = 0x150013b, // shifted control-M-Page_Down + Fckey_sup = 0x150013c, // shifted control-M-Up + Fckey_sdown = 0x150013d, // shifted control-M-Down + Fckey_sright = 0x150013e, // shifted control-M-Right + Fckey_sleft = 0x150013f, // shifted control-M-Left + Fcmkey_ic = 0x1500140, // control-M-Insert + Fcmkey_dc = 0x1500141, // control-M-Delete + Fcmkey_home = 0x1500142, // control-M-Home + Fcmkey_end = 0x1500143, // control-M-End + Fcmkey_ppage = 0x1500144, // control-M-Page_Up + Fcmkey_npage = 0x1500145, // control-M-Page_Down + Fcmkey_up = 0x1500146, // control-M-Up + Fcmkey_down = 0x1500147, // control-M-Down + Fcmkey_right = 0x1500148, // control-M-Right + Fcmkey_left = 0x1500149, // control-M-Left + Fcmkey_sic = 0x150014a, // shifted control-M-Insert + Fcmkey_sdc = 0x150014b, // shifted control-M-Delete + Fcmkey_shome = 0x150014c, // shifted control-M-Home + Fcmkey_send = 0x150014d, // shifted control-M-End + Fcmkey_sppage = 0x150014e, // shifted control-M-Page_Up + Fcmkey_snpage = 0x150014f, // shifted control-M-Page_Down + Fcmkey_sf1 = 0x1500150, // shifted control-M-F1 + Fcmkey_sf2 = 0x1500151, // shifted control-M-F2 + Fcmkey_sf3 = 0x1500152, // shifted control-M-F3 + Fcmkey_sf4 = 0x1500153, // shifted control-M-F4 + Fcmkey_sf5 = 0x1500154, // shifted control-M-F5 + Fcmkey_sf6 = 0x1500155, // shifted control-M-F6 + Fcmkey_sf7 = 0x1500156, // shifted control-M-F7 + Fcmkey_sf8 = 0x1500157, // shifted control-M-F8 + Fcmkey_sf9 = 0x1500158, // shifted control-M-F9 + Fcmkey_sf10 = 0x1500159, // shifted control-M-F10 + Fcmkey_sf11 = 0x150015a, // shifted control-M-F11 + Fcmkey_sf12 = 0x150015b, // shifted control-M-F12 + Fcmkey_sup = 0x150015c, // shifted control-M-Up + Fcmkey_sdown = 0x150015d, // shifted control-M-Down + Fcmkey_sright = 0x150015e, // shifted control-M-Right + Fcmkey_sleft = 0x150015f, // shifted control-M-Left + Fkey_menu = 0x1600000, // menu + Fkey_smenu = 0x1600001, // shifted menu + Fckey_menu = 0x1600002, // control-menu + Fckey_smenu = 0x1600003, // shifted control-menu + Fmkey_menu = 0x1600004, // M-menu + Fmkey_smenu = 0x1600005, // shifted M-menu + Fcmkey_menu = 0x1600006, // control-M-menu + Fcmkey_smenu = 0x1600007, // shifted control-M-menu + Fkey_escape_mintty = 0x200001b, // mintty Esc + Fkey_mouse = 0x2000020, // xterm mouse + Fkey_extended_mouse = 0x2000021, // SGR extended mouse + Fkey_urxvt_mouse = 0x2000022, // urxvt mouse extension + Fmkey_meta = 0x20000e0, // meta key offset + Fmkey_tab = 0x20000e9, // M-tab + Fmkey_enter = 0x20000ea, // M-enter + Fmkey_space = 0x2000100, // M-' ' + Fmkey_bang = 0x2000101, // M-! + Fmkey_quotes = 0x2000102, // M-" + Fmkey_hash = 0x2000103, // M-# + Fmkey_dollar = 0x2000104, // M-$ + Fmkey_percent = 0x2000105, // M-% + Fmkey_ampersand = 0x2000106, // M-& + Fmkey_apostrophe = 0x2000107, // M-' + Fmkey_left_parenthesis = 0x2000108, // M-( + Fmkey_right_parenthesis = 0x2000109, // M-) + Fmkey_asterisk = 0x200010a, // M-* + Fmkey_plus = 0x200010b, // M-+ + Fmkey_comma = 0x200010c, // M-, + Fmkey_minus = 0x200010d, // M-'-' + Fmkey_full_stop = 0x200010e, // M-. + Fmkey_slash = 0x200010f, // M-/ + Fmkey_0 = 0x2000110, // M-0 + Fmkey_1 = 0x2000111, // M-1 + Fmkey_2 = 0x2000112, // M-2 + Fmkey_3 = 0x2000113, // M-3 + Fmkey_4 = 0x2000114, // M-4 + Fmkey_5 = 0x2000115, // M-5 + Fmkey_6 = 0x2000116, // M-6 + Fmkey_7 = 0x2000117, // M-7 + Fmkey_8 = 0x2000118, // M-8 + Fmkey_9 = 0x2000119, // M-9 + Fmkey_colon = 0x200011a, // M-: + Fmkey_semicolon = 0x200011b, // M-; + Fmkey_less_than = 0x200011c, // M-< + Fmkey_equals = 0x200011d, // M-= + Fmkey_greater_than = 0x200011e, // M-> + Fmkey_question_mark = 0x200011f, // M-? + Fmkey_at = 0x2000120, // M-@ + Fmkey_A = 0x2000121, // M-A + Fmkey_B = 0x2000122, // M-B + Fmkey_C = 0x2000123, // M-C + Fmkey_D = 0x2000124, // M-D + Fmkey_E = 0x2000125, // M-E + Fmkey_F = 0x2000126, // M-F + Fmkey_G = 0x2000127, // M-G + Fmkey_H = 0x2000128, // M-H + Fmkey_I = 0x2000129, // M-I + Fmkey_J = 0x200012a, // M-J + Fmkey_K = 0x200012b, // M-K + Fmkey_L = 0x200012c, // M-L + Fmkey_M = 0x200012d, // M-M + Fmkey_N = 0x200012e, // M-N + Fmkey_O = 0x200012f, // M-O + Fmkey_P = 0x2000130, // M-P + Fmkey_Q = 0x2000131, // M-Q + Fmkey_R = 0x2000132, // M-R + Fmkey_S = 0x2000133, // M-S + Fmkey_T = 0x2000134, // M-T + Fmkey_U = 0x2000135, // M-U + Fmkey_V = 0x2000136, // M-V + Fmkey_W = 0x2000137, // M-W + Fmkey_X = 0x2000138, // M-X + Fmkey_Y = 0x2000139, // M-Y + Fmkey_Z = 0x200013a, // M-Z + Fmkey_left_square_bracket = 0x200013b, // M-[ + Fmkey_backslash = 0x200013c, // M-'\' + Fmkey_right_square_bracket = 0x200013d, // M-] + Fmkey_caret = 0x200013e, // M-^ + Fmkey_underscore = 0x200013f, // M-_ + Fmkey_grave_accent = 0x2000140, // M-` + Fmkey_a = 0x2000141, // M-a + Fmkey_b = 0x2000142, // M-b + Fmkey_c = 0x2000143, // M-c + Fmkey_d = 0x2000144, // M-d + Fmkey_e = 0x2000145, // M-e + Fmkey_f = 0x2000146, // M-f + Fmkey_g = 0x2000147, // M-g + Fmkey_h = 0x2000148, // M-h + Fmkey_i = 0x2000149, // M-i + Fmkey_j = 0x200014a, // M-j + Fmkey_k = 0x200014b, // M-k + Fmkey_l = 0x200014c, // M-l + Fmkey_m = 0x200014d, // M-m + Fmkey_n = 0x200014e, // M-n + Fmkey_o = 0x200014f, // M-o + Fmkey_p = 0x2000150, // M-p + Fmkey_q = 0x2000151, // M-q + Fmkey_r = 0x2000152, // M-r + Fmkey_s = 0x2000153, // M-s + Fmkey_t = 0x2000154, // M-t + Fmkey_u = 0x2000155, // M-u + Fmkey_v = 0x2000156, // M-v + Fmkey_w = 0x2000157, // M-w + Fmkey_x = 0x2000158, // M-x + Fmkey_y = 0x2000159, // M-y + Fmkey_z = 0x200015a, // M-z + Fmkey_left_curly_bracket = 0x200015b, // M-{ + Fmkey_vertical_bar = 0x200015c, // M-| + Fmkey_right_curly_bracket = 0x200015d, // M-} + Fmkey_tilde = 0x200015e // M-~ +}; + +// Console color names +enum colornames +{ + Default = -1, + Black = 0, + Blue = 1, + Green = 2, + Cyan = 3, + Red = 4, + Magenta = 5, + Brown = 6, + LightGray = 7, + DarkGray = 8, + LightBlue = 9, + LightGreen = 10, + LightCyan = 11, + LightRed = 12, + LightMagenta = 13, + Yellow = 14, + White = 15, +/* 256 color terminals */ + Grey0 = 16, // #000000 + NavyBlue = 17, // #00005f + DarkBlue = 18, // #000087 + Blue3 = 19, // #0000af + Blue2 = 20, // #0000d7 + Blue1 = 21, // #0000ff + DarkGreen = 22, // #005f00 + DarkCyan2 = 23, // #005f5f + DeepSkyBlue6 = 24, // #005f87 + DeepSkyBlue5 = 25, // #005faf + DodgerBlue3 = 26, // #005fd7 + DodgerBlue2 = 27, // #005fff + Green4 = 28, // #008700 + SpringGreen6 = 29, // #00875f + Turquoise4 = 30, // #008787 + DeepSkyBlue4 = 31, // #0087af + DeepSkyBlue3 = 32, // #0087d7 + DodgerBlue1 = 33, // #0087ff + Green2 = 34, // #00af00 + SpringGreen5 = 35, // #00af5f + DarkCyan = 36, // #00af87 + LightSeaGreen = 37, // #00afaf + DeepSkyBlue2 = 38, // #00afd7 + DeepSkyBlue1 = 39, // #00afff + Green3 = 40, // #00d700 + SpringGreen4 = 41, // #00d75f + SpringGreen3 = 42, // #00d787 + Cyan3 = 43, // #00d7af + DarkTurquoise = 44, // #00d7d7 + Turquoise2 = 45, // #00d7ff + Green1 = 46, // #00ff00 + SpringGreen2 = 47, // #00ff5f + SpringGreen1 = 48, // #00ff87 + MediumSpringGreen = 49, // #00ffaf + Cyan2 = 50, // #00ffd7 + Cyan1 = 51, // #00ffff + DarkRed = 52, // #5f0000 + DeepPink7 = 53, // #5f005f + Purple4 = 54, // #5f0087 + Purple3 = 55, // #5f00af + Purple2 = 56, // #5f00d7 + BlueViolet = 57, // #5f00ff + Orange4 = 58, // #5f5f00 + Grey37 = 59, // #5f5f5f + MediumPurple6 = 60, // #5f5f87 + SlateBlue3 = 61, // #5f5faf + SlateBlue2 = 62, // #5f5fd7 + RoyalBlue1 = 63, // #5f5fff + Chartreuse5 = 64, // #5f8700 + DarkSeaGreen8 = 65, // #5f875f + PaleTurquoise4 = 66, // #5f8787 + SteelBlue = 67, // #5f87af + SteelBlue3 = 68, // #5f87d7 + CornflowerBlue = 69, // #5f87ff + Chartreuse4 = 70, // #5faf00 + DarkSeaGreen7 = 71, // #5faf5f + CadetBlue2 = 72, // #5faf87 + CadetBlue1 = 73, // #5fafaf + SkyBlue3 = 74, // #5fafd7 + SteelBlue2 = 75, // #5fafff + Chartreuse3 = 76, // #5fd700 + PaleGreen3 = 77, // #5fd75f + SeaGreen4 = 78, // #5fd787 + Aquamarine3 = 79, // #5fd7af + MediumTurquoise = 80, // #5fd7d7 + SteelBlue1 = 81, // #5fd7ff + Chartreuse = 82, // #5fff00 + SeaGreen3 = 83, // #5fff5f + SeaGreen2 = 84, // #5fff87 + SeaGreen1 = 85, // #5fffaf + Aquamarine2 = 86, // #5fffd7 + DarkSlateGray2 = 87, // #5fffff + DarkRed2 = 88, // #870000 + DeepPink6 = 89, // #87005f + DarkMagenta2 = 90, // #870087 + DarkMagenta = 91, // #8700af + DarkViolet1 = 92, // #8700d7 + Purple1 = 93, // #8700ff + Orange3 = 94, // #875f00 + LightPink4 = 95, // #875f5f + Plum4 = 96, // #875f87 + MediumPurple5 = 97, // #875faf + MediumPurple4 = 98, // #875fd7 + SlateBlue1 = 99, // #875fff + Yellow6 = 100, // #878700 + Wheat4 = 101, // #87875f + Grey53 = 102, // #878787 + LightSlateGrey = 103, // #8787af + MediumPurple = 104, // #8787d7 + LightSlateBlue = 105, // #8787ff + Yellow5 = 106, // #87af00 + DarkOliveGreen5 = 107, // #87af5f + DarkSeaGreen6 = 108, // #87af87 + LightSkyBlue3 = 109, // #87afaf + LightSkyBlue2 = 110, // #87afd7 + SkyBlue2 = 111, // #87afff + Chartreuse2 = 112, // #87d700 + DarkOliveGreen4 = 113, // #87d75f + PaleGreen2 = 114, // #87d787 + DarkSeaGreen5 = 115, // #87d7af + DarkSlateGray3 = 116, // #87d7d7 + SkyBlue1 = 117, // #87d7ff + Chartreuse1 = 118, // #87ff00 + LightGreen3 = 119, // #87ff5f + LightGreen2 = 120, // #87ff87 + PaleGreen1 = 121, // #87ffaf + Aquamarine1 = 122, // #87ffd7 + DarkSlateGray1 = 123, // #87ffff + Red3 = 124, // #af0000 + DeepPink5 = 125, // #af005f + MediumVioletRed = 126, // #af0087 + Magenta6 = 127, // #af00af + DarkViolet = 128, // #af00d7 + Purple = 129, // #af00ff + DarkOrange3 = 130, // #af5f00 + IndianRed3 = 131, // #af5f5f + HotPink4 = 132, // #af5f87 + MediumOrchid3 = 133, // #af5faf + MediumOrchid = 134, // #af5fd7 + MediumPurple3 = 135, // #af5fff + DarkGoldenrod = 136, // #af8700 + LightSalmon3 = 137, // #af875f + RosyBrown = 138, // #af8787 + Grey63 = 139, // #af87af + MediumPurple2 = 140, // #af87d7 + MediumPurple1 = 141, // #af87ff + Gold3 = 142, // #afaf00 + DarkKhaki = 143, // #afaf5f + NavajoWhite3 = 144, // #afaf87 + Grey69 = 145, // #afafaf + LightSteelBlue3 = 146, // #afafd7 + LightSteelBlue = 147, // #afafff + Yellow4 = 148, // #afd700 + DarkOliveGreen3 = 149, // #afd75f + DarkSeaGreen4 = 150, // #afd787 + DarkSeaGreen3 = 151, // #afd7af + LightCyan3 = 152, // #afd7d7 + LightSkyBlue1 = 153, // #afd7ff + GreenYellow = 154, // #afff00 + DarkOliveGreen2 = 155, // #afff5f + PaleGreen = 156, // #afff87 + DarkSeaGreen2 = 157, // #afffaf + DarkSeaGreen1 = 158, // #afffd7 + PaleTurquoise1 = 159, // #afffff + Red2 = 160, // #d70000 + DeepPink4 = 161, // #d7005f + DeepPink3 = 162, // #d70087 + Magenta5 = 163, // #d700af + Magenta4 = 164, // #d700d7 + Magenta3 = 165, // #d700ff + DarkOrange2 = 166, // #d75f00 + IndianRed = 167, // #d75f5f + HotPink3 = 168, // #d75f87 + HotPink2 = 169, // #d75faf + Orchid = 170, // #d75fd7 + MediumOrchid2 = 171, // #d75fff + Orange2 = 172, // #d78700 + LightSalmon2 = 173, // #d7875f + LightPink3 = 174, // #d78787 + Pink3 = 175, // #d787af + Plum3 = 176, // #d787d7 + Violet = 177, // #d787ff + Gold2 = 178, // #d7af00 + LightGoldenrod5 = 179, // #d7af5f + Tan = 180, // #d7af87 + MistyRose3 = 181, // #d7afaf + Thistle3 = 182, // #d7afd7 + Plum2 = 183, // #d7afff + Yellow3 = 184, // #d7d700 + Khaki3 = 185, // #d7d75f + LightGoldenrod4 = 186, // #d7d787 + LightYellow3 = 187, // #d7d7af + Grey84 = 188, // #d7d7d7 + LightSteelBlue1 = 189, // #d7d7ff + Yellow2 = 190, // #d7ff00 + DarkOliveGreen1 = 191, // #d7ff5f + DarkOliveGreen = 192, // #d7ff87 + DarkSeaGreen = 193, // #d7ffaf + Honeydew2 = 194, // #d7ffd7 + LightCyan1 = 195, // #d7ffff + Red1 = 196, // #ff0000 + DeepPink2 = 197, // #ff005f + DeepPink1 = 198, // #ff0087 + DeepPink = 199, // #ff00af + Magenta2 = 200, // #ff00d7 + Magenta1 = 201, // #ff00ff + OrangeRed1 = 202, // #ff5f00 + IndianRed2 = 203, // #ff5f5f + IndianRed1 = 204, // #ff5f87 + HotPink1 = 205, // #ff5faf + HotPink = 206, // #ff5fd7 + MediumOrchid1 = 207, // #ff5fff + DarkOrange = 208, // #ff8700 + Salmon1 = 209, // #ff875f + LightCoral = 210, // #ff8787 + PaleVioletRed1 = 211, // #ff87af + Orchid2 = 212, // #ff87d7 + Orchid1 = 213, // #ff87ff + Orange1 = 214, // #ffaf00 + SandyBrown = 215, // #ffaf5f + LightSalmon1 = 216, // #ffaf87 + LightPink1 = 217, // #ffafaf + Pink1 = 218, // #ffafd7 + Plum1 = 219, // #ffafff + Gold1 = 220, // #ffd700 + LightGoldenrod3 = 221, // #ffd75f + LightGoldenrod2 = 222, // #ffd787 + NavajoWhite1 = 223, // #ffd7af + MistyRose1 = 224, // #ffd7d7 + Thistle1 = 225, // #ffd7ff + Yellow1 = 226, // #ffff00 + LightGoldenrod = 227, // #ffff5f + Khaki1 = 228, // #ffff87 + Wheat1 = 229, // #ffffaf + Cornsilk1 = 230, // #ffffd7 + Grey100 = 231, // #ffffff + Grey3 = 232, // #080808 + Grey7 = 233, // #121212 + Grey11 = 234, // #1c1c1c + Grey15 = 235, // #262626 + Grey19 = 236, // #303030 + Grey23 = 237, // #3a3a3a + Grey27 = 238, // #444444 + Grey30 = 239, // #4e4e4e + Grey35 = 240, // #585858 + Grey39 = 241, // #626262 + Grey42 = 242, // #6c6c6c + Grey46 = 243, // #767676 + Grey50 = 244, // #808080 + Grey54 = 245, // #8a8a8a + Grey58 = 246, // #949494 + Grey62 = 247, // #9e9e9e + Grey66 = 248, // #a8a8a8 + Grey70 = 249, // #b2b2b2 + Grey74 = 250, // #bcbcbc + Grey78 = 251, // #c6c6c6 + Grey82 = 252, // #d0d0d0 + Grey85 = 253, // #dadada + Grey89 = 254, // #e4e4e4 + Grey93 = 255 // #eeeeee +}; + +// Mouse/keyboard state values +enum ButtonState +{ + NoButton = 0x00, + LeftButton = 0x01, + RightButton = 0x02, + MiddleButton = 0x04, + MouseButtonMask = 0x07, + ShiftButton = 0x08, + ControlButton = 0x10, + MetaButton = 0x20, + KeyButtonMask = 0x38 +}; + +// Wheel state values +enum WheelState +{ + NoWheel = 0x00, + WheelUp = 0x01, + WheelDown = 0x02, + WheelMask = 0x03 +}; + +// Type of focus +enum FocusTypes +{ + FocusNextWidget = 0x00, + FocusPreviousWidget = 0x01, + FocusDefiniteWidget = 0x03 // event default +}; + +// Drag scrolling mode +enum dragScroll +{ + noScroll = 0, + scrollUp = 1, + scrollDown = 2, + scrollUpSelect = 3, + scrollDownSelect = 4 +}; + +// Scroll bar visibility mode +enum 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 +}; + +// Xterm cursor style +enum xtermCursorStyle +{ + blinking_block = 0, + blinking_block_default = 1, + steady_block = 2, + blinking_underline = 3, + steady_underline = 4, + blinking_bar_xterm = 5, + steady_bar_xterm = 6 +}; + +// Linux console and framebuffer cursor style +enum linuxConsoleCursorStyle +{ + default_cursor = 0, + invisible_cursor = 1, + underscore_cursor = 2, + lower_third_cursor = 3, + lower_half_cursor = 4, + two_thirds_cursor = 5, + full_block_cursor = 6 +}; + +// BSD console cursor style +enum freebsdConsoleCursorStyle +{ + normal_cursor = 0, + blink_cursor = 1, + destructive_cursor = 3 +}; + +// KDE konsole cursor style +enum kdeKonsoleCursorShape +{ + BlockCursor = 0, + IBeamCursor = 1, + UnderlineCursor = 2 +}; + +enum text_alignment +{ + alignLeft = 1, + alignCenter = 2, + alignRight = 3 +}; + +enum orientation +{ + vertical = 0, + horizontal = 1 +}; + +enum sides +{ + top = 0, + right = 1, + bottom = 2, + left = 3 +}; + +enum brackets_type +{ + NoBrackets = 0, + SquareBrackets = 1, // [ ] + Parenthesis = 2, // ( ) + CurlyBrackets = 3, // { } + AngleBrackets = 4 // < > +}; + +enum termcaps +{ + t_bell, + t_erase_chars, + t_clear_screen, + t_clr_eos, + t_clr_eol, + t_clr_bol, + t_cursor_home, + t_cursor_to_ll, + t_carriage_return, + t_tab, + t_back_tab, + t_insert_padding, + t_insert_character, + t_parm_ich, + t_repeat_char, + t_initialize_color, + t_initialize_pair, + t_set_a_foreground, + t_set_a_background, + t_set_foreground, + t_set_background, + t_set_color_pair, + t_orig_pair, + t_orig_colors, + t_no_color_video, + t_cursor_address, + t_column_address, + t_row_address, + t_cursor_visible, + t_cursor_invisible, + t_cursor_normal, + t_cursor_up, + t_cursor_down, + t_cursor_left, + t_cursor_right, + t_parm_up_cursor, + t_parm_down_cursor, + t_parm_left_cursor, + t_parm_right_cursor, + t_save_cursor, + t_restore_cursor, + t_scroll_forward, + t_scroll_reverse, + t_enter_ca_mode, + t_exit_ca_mode, + t_enable_acs, + t_enter_bold_mode, + t_exit_bold_mode, + t_enter_dim_mode, + t_exit_dim_mode, + t_enter_italics_mode, + t_exit_italics_mode, + t_enter_underline_mode, + t_exit_underline_mode, + t_enter_blink_mode, + t_exit_blink_mode, + t_enter_reverse_mode, + t_exit_reverse_mode, + t_enter_standout_mode, + t_exit_standout_mode, + t_enter_secure_mode, + t_exit_secure_mode, + t_enter_protected_mode, + t_exit_protected_mode, + t_enter_crossed_out_mode, + t_exit_crossed_out_mode, + t_enter_dbl_underline_mode, + t_exit_dbl_underline_mode, + t_set_attributes, + t_exit_attribute_mode, + t_enter_alt_charset_mode, + t_exit_alt_charset_mode, + t_enter_pc_charset_mode, + t_exit_pc_charset_mode, + t_enter_insert_mode, + t_exit_insert_mode, + t_enter_am_mode, + t_exit_am_mode, + t_acs_chars, + t_keypad_xmit, + t_keypad_local, + t_key_mouse +}; + +} // namespace fc #endif // FC_H diff --git a/include/final/fcharmap.h b/include/final/fcharmap.h index 8b247f19..a1f0c7ac 100644 --- a/include/final/fcharmap.h +++ b/include/final/fcharmap.h @@ -27,6 +27,9 @@ #error "Only can be included directly." #endif +namespace fc +{ + static uInt character[][fc::NUM_OF_ENCODINGS] = { // .--------------------- Unicode (UTF-8) @@ -319,6 +322,6 @@ static uInt cp437_to_ucs[][2] = const uInt lastCP437Item = uInt ( sizeof(cp437_to_ucs) / sizeof(cp437_to_ucs[0]) ) - 1; - +} // namespace fc #endif // FCHARMAP_H diff --git a/include/final/ffiledialog.h b/include/final/ffiledialog.h index 28d50158..3f0555ad 100644 --- a/include/final/ffiledialog.h +++ b/include/final/ffiledialog.h @@ -147,7 +147,15 @@ class FFileDialog : public FDialog struct dir_entry { char* name; - uChar type; + // Type of file + uChar fifo : 1; + uChar character_device : 1; + uChar directory : 1; + uChar block_device : 1; + uChar regular_file : 1; + uChar symbolic_link : 1; + uChar socket : 1; + uChar : 1; // padding bits }; typedef std::vector dirEntries; @@ -157,6 +165,7 @@ class FFileDialog : public FDialog inline bool pattern_match (const char* const, char*&); void clear(); int numOfDirs(); + void sortDir(); int changeDir (const FString&); void printPath (const FString&); static const FString getHomeDir(); diff --git a/include/final/fkey_map.h b/include/final/fkey_map.h index b2149108..8fb3a0bd 100644 --- a/include/final/fkey_map.h +++ b/include/final/fkey_map.h @@ -29,6 +29,9 @@ #include +namespace fc +{ + #pragma pack(push) #pragma pack(1) @@ -852,4 +855,6 @@ static keyname FkeyName[] = { 0 , "\0" } }; +} // namespace fc + #endif // FKEYMAP_H diff --git a/include/final/fobject.h b/include/final/fobject.h index e706cc82..45516dfd 100644 --- a/include/final/fobject.h +++ b/include/final/fobject.h @@ -35,18 +35,19 @@ #error "Only can be included directly." #endif -#include #include // need for gettimeofday #include #include #include #include +#include "final/emptyfstring.h" #include "final/fc.h" #include "final/fevent.h" #include "final/ftypes.h" + //---------------------------------------------------------------------- // class FObject //---------------------------------------------------------------------- diff --git a/include/final/foptiattr.h b/include/final/foptiattr.h index 043eab23..fc883db9 100644 --- a/include/final/foptiattr.h +++ b/include/final/foptiattr.h @@ -35,12 +35,31 @@ #error "Only can be included directly." #endif +// Typecast to c-string +#define C_STR const_cast + #include -#include // need for tparm + +#if defined(__sun) && defined(__SVR4) + #include + typedef struct termio SGTTY; + typedef struct termios SGTTYS; + + #ifdef _LP64 + typedef unsigned int chtype; + #else + typedef unsigned long chtype; + #endif + + #include // need for tparm +#else + #include // need for tparm +#endif #include // need for std::swap #include "final/fc.h" +#include "final/ftypes.h" //---------------------------------------------------------------------- diff --git a/include/final/foptimove.h b/include/final/foptimove.h index 5910085d..c01aec04 100644 --- a/include/final/foptimove.h +++ b/include/final/foptimove.h @@ -39,7 +39,22 @@ #endif #include -#include // need for tparm + +#if defined(__sun) && defined(__SVR4) + #include + typedef struct termio SGTTY; + typedef struct termios SGTTYS; + + #ifdef _LP64 + typedef unsigned int chtype; + #else + typedef unsigned long chtype; + #endif + + #include // need for tparm +#else + #include // need for tparm +#endif #include #include diff --git a/include/final/fstring.h b/include/final/fstring.h index e4e888a9..f8ae4417 100644 --- a/include/final/fstring.h +++ b/include/final/fstring.h @@ -234,7 +234,9 @@ class FString FString clear(); const wchar_t* wc_str() const; + wchar_t* wc_str(); const char* c_str() const; + char* c_str(); const std::string toString() const; FString toLower() const; diff --git a/include/final/ftcap_map.h b/include/final/ftcap_map.h index 3b8f555f..7cef41e3 100644 --- a/include/final/ftcap_map.h +++ b/include/final/ftcap_map.h @@ -29,6 +29,9 @@ #include "final/ftermcap.h" +namespace fc +{ + static FTermcap::tcap_map term_caps[] = { // .------------- term string @@ -133,4 +136,6 @@ static FTermcap::tcap_map term_caps[] = * "XX", "Us" and "Ue" are unofficial and they are only used here. */ +} // namespace fc + #endif // FTCAPMAP_H diff --git a/include/final/fterm.h b/include/final/fterm.h index 7f571532..2bc04273 100644 --- a/include/final/fterm.h +++ b/include/final/fterm.h @@ -51,6 +51,9 @@ #error "Only can be included directly." #endif +// Typecast to c-string +#define C_STR const_cast + #include "final/fconfig.h" #ifdef F_HAVE_LIBGPM @@ -83,9 +86,24 @@ #include #include -#include // termcap #include +#if defined(__sun) && defined(__SVR4) + #include + typedef struct termio SGTTY; + typedef struct termios SGTTYS; + + #ifdef _LP64 + typedef unsigned int chtype; + #else + typedef unsigned long chtype; + #endif + + #include // termcap +#else + #include // termcap +#endif + #if F_HAVE_GETTTYNAM && F_HAVE_TTYENT_H #include #endif @@ -293,6 +311,11 @@ class FTerm #endif ; static void putstring (const char* const, int = 1); + +#if defined(__sun) && defined(__SVR4) + static int putchar_ASCII (register char); +#endif + static int putchar_ASCII (register int); static int putchar_UTF8 (register int); static int UTF8decode (const char[]); @@ -612,11 +635,11 @@ inline int FTerm::getMaxColor() #if DEBUG //---------------------------------------------------------------------- inline const FString& FTerm::getAnswerbackString() -{ return ( answer_back ) ? *answer_back : *fc::empty_string; } +{ return ( answer_back ) ? *answer_back : fc::emptyFString::get(); } //---------------------------------------------------------------------- inline const FString& FTerm::getSecDAString() -{ return ( sec_da ) ? *sec_da : *fc::empty_string; } +{ return ( sec_da ) ? *sec_da : fc::emptyFString::get(); } #endif //---------------------------------------------------------------------- diff --git a/include/final/ftypes.h b/include/final/ftypes.h index 3c7dcef3..ffab7656 100644 --- a/include/final/ftypes.h +++ b/include/final/ftypes.h @@ -27,6 +27,7 @@ #error "Only can be included directly." #endif +#include #include #define null NULL diff --git a/include/final/fvterm.h b/include/final/fvterm.h index e329f47d..51b04eb9 100644 --- a/include/final/fvterm.h +++ b/include/final/fvterm.h @@ -403,6 +403,11 @@ class FVTerm : public FTerm static int appendLowerRight (char_data*&); static void appendOutputBuffer (const std::string&); static void appendOutputBuffer (const char*&); + +#if defined(__sun) && defined(__SVR4) + static int appendOutputBuffer (char); +#endif + static int appendOutputBuffer (int); // Data Members diff --git a/src/fapplication.cpp b/src/fapplication.cpp index a0bcf836..73dd0082 100644 --- a/src/fapplication.cpp +++ b/src/fapplication.cpp @@ -82,7 +82,7 @@ FApplication::FApplication ( const int& _argc if ( ! (_argc && _argv) ) { - static char* empty = const_cast(""); + static char* empty = C_STR(""); app_argc = 0; app_argv = static_cast(&empty); } @@ -410,13 +410,13 @@ void FApplication::cmd_options (const int& argc, char* argv[]) static struct option long_options[] = { - {"encoding", required_argument, 0, 0 }, - {"no-optimized-cursor", no_argument, 0, 0 }, - {"no-terminal-detection", no_argument, 0, 0 }, - {"no-color-change", no_argument, 0, 0 }, - {"vgafont", no_argument, 0, 0 }, - {"newfont", no_argument, 0, 0 }, - {0, 0, 0, 0 } + {C_STR("encoding"), required_argument, 0, 0 }, + {C_STR("no-optimized-cursor"), no_argument, 0, 0 }, + {C_STR("no-terminal-detection"), no_argument, 0, 0 }, + {C_STR("no-color-change"), no_argument, 0, 0 }, + {C_STR("vgafont"), no_argument, 0, 0 }, + {C_STR("newfont"), no_argument, 0, 0 }, + {0, 0, 0, 0 } }; opterr = 0; diff --git a/src/fbuttongroup.cpp b/src/fbuttongroup.cpp index 6b321708..678f5332 100644 --- a/src/fbuttongroup.cpp +++ b/src/fbuttongroup.cpp @@ -597,7 +597,7 @@ bool FButtonGroup::isRadioButton (FToggleButton* button) const return false; return bool ( std::strcmp ( button->getClassName() - , const_cast("FRadioButton") ) == 0 ); + , C_STR("FRadioButton") ) == 0 ); } //---------------------------------------------------------------------- diff --git a/src/ffiledialog.cpp b/src/ffiledialog.cpp index 74f94fce..3bdc8dfa 100644 --- a/src/ffiledialog.cpp +++ b/src/ffiledialog.cpp @@ -39,7 +39,7 @@ bool sortDirFirst ( const FFileDialog::dir_entry& lhs , const FFileDialog::dir_entry& rhs ) { // sort directories first - if ( lhs.type == DT_DIR && rhs.type != DT_DIR ) + if ( lhs.directory && ! rhs.directory ) return true; else return false; @@ -164,7 +164,7 @@ const FString FFileDialog::getSelectedFile() const { uLong n = uLong(filebrowser->currentItem() - 1); - if ( dir_entries[n].type == DT_DIR ) + if ( dir_entries[n].directory ) return FString(""); else return FString(dir_entries[n].name); @@ -257,7 +257,6 @@ void FFileDialog::onKeyPress (FKeyEvent* ev) //---------------------------------------------------------------------- int FFileDialog::readDir() { - int start, dir_num; const char* const dir = directory.c_str(); const char* const filter = filter_pattern.c_str(); directory_stream = opendir(dir); @@ -294,9 +293,28 @@ int FFileDialog::readDir() dir_entry entry; entry.name = strdup(next->d_name); - entry.type = next->d_type; - if ( next->d_type == DT_LNK ) // symbolic link +#if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE + entry.fifo = (next->d_type & DT_FIFO) == DT_FIFO; + entry.character_device = (next->d_type & DT_CHR ) == DT_CHR; + entry.directory = (next->d_type & DT_DIR ) == DT_DIR; + entry.block_device = (next->d_type & DT_BLK ) == DT_BLK; + entry.regular_file = (next->d_type & DT_REG ) == DT_REG; + entry.symbolic_link = (next->d_type & DT_LNK ) == DT_LNK; + entry.socket = (next->d_type & DT_SOCK) == DT_SOCK; +#else + struct stat s; + stat (entry.name, &s); + entry.fifo = S_ISFIFO (s.st_mode); + entry.character_device = S_ISCHR (s.st_mode); + entry.directory = S_ISDIR (s.st_mode); + entry.block_device = S_ISBLK (s.st_mode); + entry.regular_file = S_ISREG (s.st_mode); + entry.symbolic_link = S_ISLNK (s.st_mode); + entry.socket = S_ISSOCK (s.st_mode); +#endif + + if ( entry.symbolic_link ) // symbolic link { char resolved_path[MAXPATHLEN] = {}; char symLink[MAXPATHLEN] = {}; @@ -312,12 +330,12 @@ int FFileDialog::readDir() if ( lstat(resolved_path, &sb) == 0 ) { if ( S_ISDIR(sb.st_mode) ) - entry.type = DT_DIR; + entry.directory = true; } } } - if ( entry.type == DT_DIR ) + if ( entry.directory ) dir_entries.push_back (entry); else if ( pattern_match(filter, entry.name) ) dir_entries.push_back (entry); @@ -341,24 +359,8 @@ int FFileDialog::readDir() return -2; } - if ( std::strcmp((*dir_entries.begin()).name, "..") == 0 ) - start = 1; - else - start = 0; + sortDir(); - dir_num = numOfDirs(); - // directories first - std::sort ( dir_entries.begin() + start - , dir_entries.end() - , sortDirFirst ); - // sort directories by name - std::sort ( dir_entries.begin() + start - , dir_entries.begin() + dir_num - , sortByName ); - // sort files by name - std::sort ( dir_entries.begin() + dir_num - , dir_entries.end() - , sortByName ); // fill list with directory entries filebrowser->clear(); @@ -370,7 +372,7 @@ int FFileDialog::readDir() while ( iter != last ) { - if ( (*iter).type == DT_DIR ) + if ( (*iter).directory ) filebrowser->insert(FString((*iter).name), fc::SquareBrackets); else filebrowser->insert(FString((*iter).name)); @@ -665,7 +667,7 @@ int FFileDialog::numOfDirs() while ( iter != last ) { - if ( (*iter).type == DT_DIR && std::strcmp((*iter).name, ".") != 0 ) + if ( (*iter).directory && std::strcmp((*iter).name, ".") != 0 ) n++; ++iter; @@ -674,6 +676,31 @@ int FFileDialog::numOfDirs() return n; } +//---------------------------------------------------------------------- +void FFileDialog::sortDir() +{ + int start, dir_num; + + if ( std::strcmp((*dir_entries.begin()).name, "..") == 0 ) + start = 1; + else + start = 0; + + dir_num = numOfDirs(); + // directories first + std::sort ( dir_entries.begin() + start + , dir_entries.end() + , sortDirFirst ); + // sort directories by name + std::sort ( dir_entries.begin() + start + , dir_entries.begin() + dir_num + , sortByName ); + // sort files by name + std::sort ( dir_entries.begin() + dir_num + , dir_entries.end() + , sortByName ); +} + //---------------------------------------------------------------------- int FFileDialog::changeDir (const FString& dirname) { @@ -709,7 +736,7 @@ int FFileDialog::changeDir (const FString& dirname) int i = 1; std::vector::const_iterator iter, last; const char* const baseName = \ - basename(const_cast(lastdir.c_str())); + basename(C_STR(lastdir.c_str())); iter = dir_entries.begin(); last = dir_entries.end(); @@ -731,7 +758,7 @@ int FFileDialog::changeDir (const FString& dirname) { FString firstname = dir_entries[0].name; - if ( dir_entries[0].type == DT_DIR ) + if ( dir_entries[0].directory ) filename->setText(firstname + '/'); else filename->setText(firstname); @@ -808,7 +835,7 @@ void FFileDialog::cb_processActivate (FWidget*, data_ptr) { if ( (*iter).name && input && ! input.isNull() && std::strcmp((*iter).name, input) == 0 - && (*iter).type == DT_DIR ) + && (*iter).directory ) { found = true; changeDir(input); @@ -834,7 +861,7 @@ void FFileDialog::cb_processRowChanged (FWidget*, data_ptr) const FString& name = dir_entries[uLong(n - 1)].name; - if ( dir_entries[uLong(n - 1)].type == DT_DIR ) + if ( dir_entries[uLong(n - 1)].directory ) filename->setText( name + '/' ); else filename->setText( name ); @@ -847,7 +874,7 @@ void FFileDialog::cb_processClicked (FWidget*, data_ptr) { const uLong n = uLong(filebrowser->currentItem() - 1); - if ( dir_entries[n].type == DT_DIR ) + if ( dir_entries[n].directory ) changeDir(dir_entries[n].name); else done (FDialog::Accept); diff --git a/src/flistview.cpp b/src/flistview.cpp index 09bd7f44..35536fb7 100644 --- a/src/flistview.cpp +++ b/src/flistview.cpp @@ -102,7 +102,7 @@ FString FListViewItem::getText (int column) const if ( column < 1 || column_list.empty() || column > int(column_list.size()) ) - return *fc::empty_string; + return fc::emptyFString::get(); column--; // Convert column position to address offset (index) return column_list[uInt(column)]; @@ -498,7 +498,7 @@ FString FListView::getColumnText (int column) const // Get the text of column if ( column < 1 || header.empty() || column > int(header.size()) ) - return *fc::empty_string; + return fc::emptyFString::get(); column--; // Convert column position to address offset (index) return header[uInt(column)].name; diff --git a/src/fobject.cpp b/src/fobject.cpp index 5bbde922..6006e222 100644 --- a/src/fobject.cpp +++ b/src/fobject.cpp @@ -25,7 +25,7 @@ // static class attributes bool FObject::timer_modify_lock; FObject::TimerList* FObject::timer_list = 0; -const FString* fc::empty_string = 0; +const FString* fc::emptyFString::empty_string = 0; //---------------------------------------------------------------------- // class FObject @@ -60,26 +60,13 @@ FObject::FObject (FObject* parent) return; } } - - if ( ! fc::empty_string ) - { - try - { - fc::empty_string = new FString(""); - } - catch (const std::bad_alloc& ex) - { - std::cerr << "not enough memory to alloc " << ex.what() << std::endl; - return; - } - } } } //---------------------------------------------------------------------- FObject::~FObject() // destructor { - delOwnTimer(); // delete all timers of this object + delOwnTimer(); // Delete all timers of this object if ( ! has_parent && timer_list ) { @@ -87,13 +74,10 @@ FObject::~FObject() // destructor timer_list = 0; } - if ( ! has_parent && fc::empty_string ) - { - delete fc::empty_string; - fc::empty_string = 0; - } + if ( ! has_parent && ! fc::emptyFString::isNull() ) + fc::emptyFString::clear(); - // delete children objects + // Delete children objects if ( hasChildren() ) { constFObjectIterator iter, last; diff --git a/src/foptiattr.cpp b/src/foptiattr.cpp index 9a251613..eede07e8 100644 --- a/src/foptiattr.cpp +++ b/src/foptiattr.cpp @@ -546,7 +546,7 @@ char* FOptiAttr::changeAttribute (char_data*& term, char_data*& next) if ( cygwin_terminal && (term->fg_color > 7 || term->bg_color > 7) ) { // reset blink and bold mode from colors > 7 - char* rst = const_cast(CSI "m"); + char* rst = C_STR(CSI "m"); append_sequence (rst); reset(term); } @@ -1046,7 +1046,7 @@ bool FOptiAttr::setTermDefaultColor (char_data*& term) } else if ( ansi_default_color ) { - char* sgr_39_49 = const_cast(CSI "39;49m"); + char* sgr_39_49 = C_STR(CSI "39;49m"); append_sequence (sgr_39_49); term->fg_color = Default; term->bg_color = Default; @@ -1302,7 +1302,7 @@ void FOptiAttr::change_color (char_data*& term, char_data*& next) } else if ( fg == Default && term->fg_color != Default ) { - char* sgr_39 = const_cast(CSI "39m"); + char* sgr_39 = C_STR(CSI "39m"); append_sequence (sgr_39); term->fg_color = Default; } @@ -1312,9 +1312,9 @@ void FOptiAttr::change_color (char_data*& term, char_data*& next) char* op = F_orig_pair.cap; if ( op && std::strncmp (op, CSI "39;49;25m", 11) == 0 ) - sgr_49 = const_cast(CSI "49;25m"); + sgr_49 = C_STR(CSI "49;25m"); else - sgr_49 = const_cast(CSI "49m"); + sgr_49 = C_STR(CSI "49m"); append_sequence (sgr_49); term->bg_color = Default; diff --git a/src/fstring.cpp b/src/fstring.cpp index 3028dc78..e62da4c3 100644 --- a/src/fstring.cpp +++ b/src/fstring.cpp @@ -774,12 +774,35 @@ FString FString::clear() //---------------------------------------------------------------------- const wchar_t* FString::wc_str() const { + // Returns a constant wide character string + + return string; +} + +//---------------------------------------------------------------------- +wchar_t* FString::wc_str() +{ + // Returns a wide character string + return string; } //---------------------------------------------------------------------- const char* FString::c_str() const { + // Returns a constant c-string + + if ( length > 0 ) + return wc_to_c_str (string); + else + return 0; +} + +//---------------------------------------------------------------------- +char* FString::c_str() +{ + // Returns a c-string + if ( length > 0 ) return wc_to_c_str (string); else diff --git a/src/fterm.cpp b/src/fterm.cpp index 6e971170..c2651b10 100644 --- a/src/fterm.cpp +++ b/src/fterm.cpp @@ -127,7 +127,7 @@ FOptiAttr* FTerm::opti_attr = 0; std::map* FTerm::vt100_alt_char = 0; std::map* \ FTerm::encoding_set = 0; -FTerm::termcap_map* FTerm::tcap = term_caps; +FTerm::termcap_map* FTerm::tcap = fc::term_caps; bool FTermcap::background_color_erase = false; bool FTermcap::automatic_left_margin = false; bool FTermcap::automatic_right_margin = false; @@ -213,9 +213,9 @@ int FTerm::getColumnNumber() //---------------------------------------------------------------------- const FString FTerm::getKeyName (int keynum) { - for (int i = 0; FkeyName[i].string[0] != 0; i++) - if ( FkeyName[i].num && FkeyName[i].num == keynum ) - return FString(FkeyName[i].string); + for (int i = 0; fc::FkeyName[i].string[0] != 0; i++) + if ( fc::FkeyName[i].num && fc::FkeyName[i].num == keynum ) + return FString(fc::FkeyName[i].string); if ( keynum > 32 && keynum < 127 ) return FString(char(keynum)); @@ -486,9 +486,9 @@ int FTerm::parseKeyString ( char buffer[] return fc::Fkey_urxvt_mouse; // look for termcap keys - for (int i = 0; Fkey[i].tname[0] != 0; i++) + for (int i = 0; fc::Fkey[i].tname[0] != 0; i++) { - char* k = Fkey[i].string; + char* k = fc::Fkey[i].string; len = ( k ) ? int(std::strlen(k)) : 0; if ( k && std::strncmp(k, buffer, uInt(len)) == 0 ) // found @@ -502,14 +502,14 @@ int FTerm::parseKeyString ( char buffer[] buffer[n - len] = '\0'; input_data_pending = bool(buffer[0] != '\0'); - return Fkey[i].num; + return fc::Fkey[i].num; } } // look for meta keys - for (int i = 0; Fmetakey[i].string[0] != 0; i++) + for (int i = 0; fc::Fmetakey[i].string[0] != 0; i++) { - char* kmeta = Fmetakey[i].string; // The string is never null + char* kmeta = fc::Fmetakey[i].string; // The string is never null len = int(std::strlen(kmeta)); if ( std::strncmp(kmeta, buffer, uInt(len)) == 0 ) // found @@ -530,7 +530,7 @@ int FTerm::parseKeyString ( char buffer[] buffer[n - len] = '\0'; input_data_pending = bool(buffer[0] != '\0'); - return Fmetakey[i].num; + return fc::Fmetakey[i].num; } } @@ -623,16 +623,16 @@ bool FTerm::setVGAFont() if ( isLinuxConsole() ) { // standard vga font 8x16 - int ret = setScreenFont(__8x16std, 256, 8, 16); + int ret = setScreenFont(fc::__8x16std, 256, 8, 16); if ( ret != 0 ) VGAFont = false; // unicode character mapping struct unimapdesc unimap; - unimap.entry_ct = uChar ( sizeof(unicode_cp437_pairs) + unimap.entry_ct = uChar ( sizeof(fc::unicode_cp437_pairs) / sizeof(unipair) ); - unimap.entries = &unicode_cp437_pairs[0]; + unimap.entries = &fc::unicode_cp437_pairs[0]; setUnicodeMap(&unimap); } else @@ -699,15 +699,15 @@ bool FTerm::setNewFont() int ret; // Set the graphical font 8x16 - ret = setScreenFont(__8x16graph, 256, 8, 16); + ret = setScreenFont(fc::__8x16graph, 256, 8, 16); if ( ret != 0 ) NewFont = false; // unicode character mapping - unimap.entry_ct = uInt16 ( sizeof(unicode_cp437_pairs) + unimap.entry_ct = uInt16 ( sizeof(fc::unicode_cp437_pairs) / sizeof(unipair) ); - unimap.entries = &unicode_cp437_pairs[0]; + unimap.entries = &fc::unicode_cp437_pairs[0]; setUnicodeMap(&unimap); } @@ -1052,7 +1052,6 @@ void FTerm::setXTermCursorStyle (fc::xtermCursorStyle style) if ( (gnome_terminal && ! decscusr_support) || kde_konsole ) return; - #if defined(__FreeBSD__) || defined(__DragonFly__) if ( isFreeBSDConsole() ) return; @@ -1631,15 +1630,30 @@ void FTerm::putstringf (const char* const format, ...) vsnprintf (buffer, sizeof(buf), format, args); va_end (args); - tputs (buffer, 1, std::putchar); + tputs (buffer, 1, FTerm::putchar_ASCII); } //---------------------------------------------------------------------- inline void FTerm::putstring (const char* const s, int affcnt) { - tputs (s, affcnt, std::putchar); +#if defined(__sun) && defined(__SVR4) + tputs (C_STR(s), affcnt, FTerm::putchar_ASCII); +#else + tputs (s, affcnt, FTerm::putchar_ASCII); +#endif } +#if defined(__sun) && defined(__SVR4) +//---------------------------------------------------------------------- +int FTerm::putchar_ASCII (register char c) +{ + if ( std::putchar(c) == EOF ) + return 0; + else + return 1; +} +#endif + //---------------------------------------------------------------------- int FTerm::putchar_ASCII (register int c) { @@ -1743,13 +1757,13 @@ void FTerm::initLinuxConsoleCharMap() if ( screen_unicode_map.entry_ct != 0 ) { - for (int i = 0; i <= lastCharItem; i++ ) + for (int i = 0; i <= fc::lastCharItem; i++ ) { bool found = false; for (uInt n = 0; n < screen_unicode_map.entry_ct; n++) { - if ( character[i][fc::UTF8] == screen_unicode_map.entries[n].unicode ) + if ( fc::character[i][fc::UTF8] == screen_unicode_map.entries[n].unicode ) { found = true; break; @@ -1757,7 +1771,7 @@ void FTerm::initLinuxConsoleCharMap() } if ( ! found ) - character[i][fc::PC] = character[i][fc::ASCII]; + fc::character[i][fc::PC] = fc::character[i][fc::ASCII]; } } @@ -1792,7 +1806,7 @@ void FTerm::initFreeBSDConsoleCharMap() if ( ! isFreeBSDConsole() ) return; - for (int i = 0; i <= lastCharItem; i++ ) + for (int i = 0; i <= fc::lastCharItem; i++ ) if ( character[i][fc::PC] < 0x1c ) character[i][fc::PC] = character[i][fc::ASCII]; } @@ -1814,11 +1828,11 @@ uInt FTerm::charEncode (uInt c) //---------------------------------------------------------------------- uInt FTerm::charEncode (uInt c, fc::encoding enc) { - for (uInt i = 0; i <= uInt(lastCharItem); i++) + for (uInt i = 0; i <= uInt(fc::lastCharItem); i++) { - if ( character[i][0] == c ) + if ( fc::character[i][0] == c ) { - c = character[i][enc]; + c = fc::character[i][enc]; break; } } @@ -2093,14 +2107,14 @@ int FTerm::getFramebuffer_bpp () struct fb_var_screeninfo fb_var; struct fb_fix_screeninfo fb_fix; - const char* fb = const_cast("/dev/fb/0"); + const char* fb = C_STR("/dev/fb/0"); if ( (fd = open(fb, O_RDWR)) < 0 ) { if ( errno != ENOENT && errno != ENOTDIR ) return -1; - fb = const_cast("/dev/fb0"); + fb = C_STR("/dev/fb0"); if ( (fd = open(fb, O_RDWR)) < 0 ) return -1; @@ -2157,7 +2171,7 @@ int FTerm::closeConsole() void FTerm::getSystemTermType() { // Import the untrusted environment variable TERM - const char* const& term_env = std::getenv(const_cast("TERM")); + const char* const& term_env = std::getenv(C_STR("TERM")); if ( term_env ) { @@ -2245,7 +2259,7 @@ void FTerm::getSystemTermType() } // use vt100 if not found - std::strncpy (termtype, const_cast("vt100"), 6); + std::strncpy (termtype, C_STR("vt100"), 6); } //---------------------------------------------------------------------- @@ -2767,14 +2781,14 @@ void FTerm::detectTerminal() // // Test if the terminal is a xterm - if ( std::strncmp(termtype, const_cast("xterm"), 5) == 0 - || std::strncmp(termtype, const_cast("Eterm"), 5) == 0 ) + if ( std::strncmp(termtype, C_STR("xterm"), 5) == 0 + || std::strncmp(termtype, C_STR("Eterm"), 5) == 0 ) { xterm_terminal = true; // Each xterm should be able to use at least 16 colors if ( ! new_termtype && std::strlen(termtype) == 5 ) - new_termtype = const_cast("xterm-16color"); + new_termtype = C_STR("xterm-16color"); } else xterm_terminal = false; @@ -2782,7 +2796,7 @@ void FTerm::detectTerminal() // set the new environment variable TERM if ( new_termtype ) { - setenv(const_cast("TERM"), new_termtype, 1); + setenv(C_STR("TERM"), new_termtype, 1); std::strncpy (termtype, new_termtype, std::strlen(new_termtype) + 1); } } @@ -2815,14 +2829,14 @@ void FTerm::termtypeAnalysis() } // Linux console - if ( std::strncmp(termtype, const_cast("linux"), 5) == 0 - || std::strncmp(termtype, const_cast("con"), 3) == 0 ) + if ( std::strncmp(termtype, C_STR("linux"), 5) == 0 + || std::strncmp(termtype, C_STR("con"), 3) == 0 ) linux_terminal = true; else linux_terminal = false; // NetBSD workstation console - if ( std::strncmp(termtype, const_cast("wsvt25"), 6) == 0 ) + if ( std::strncmp(termtype, C_STR("wsvt25"), 6) == 0 ) netbsd_terminal = true; else netbsd_terminal = false; @@ -2864,11 +2878,11 @@ char* FTerm::init_256colorTerminal() if ( std::strlen(local256) > 0 ) { if ( std::strncmp(termtype, "xterm", 5) == 0 ) - new_termtype = const_cast("xterm-256color"); + new_termtype = C_STR("xterm-256color"); if ( std::strncmp(termtype, "screen", 6) == 0 ) { - new_termtype = const_cast("screen-256color"); + new_termtype = C_STR("screen-256color"); screen_terminal = true; char* tmux = std::getenv("TMUX"); @@ -2877,11 +2891,11 @@ char* FTerm::init_256colorTerminal() } if ( std::strncmp(termtype, "Eterm", 5) == 0 ) - new_termtype = const_cast("Eterm-256color"); + new_termtype = C_STR("Eterm-256color"); if ( std::strncmp(termtype, "mlterm", 6) == 0 ) { - new_termtype = const_cast("mlterm-256color"); + new_termtype = C_STR("mlterm-256color"); mlterm_terminal = true; } @@ -2889,7 +2903,7 @@ char* FTerm::init_256colorTerminal() && s1 && std::strncmp(s1, "rxvt-xpm", 8) == 0 ) { - new_termtype = const_cast("rxvt-256color"); + new_termtype = C_STR("rxvt-256color"); rxvt_terminal = true; } @@ -2909,7 +2923,7 @@ char* FTerm::init_256colorTerminal() // Each gnome-terminal should be able to use 256 colors color256 = true; if ( ! screen_terminal ) - new_termtype = const_cast("gnome-256color"); + new_termtype = C_STR("gnome-256color"); } #if DEBUG @@ -2939,17 +2953,17 @@ char* FTerm::determineMaxColor (char*& current_termtype) if ( ! getXTermColorName(256).isEmpty() ) { if ( putty_terminal ) - new_termtype = const_cast("putty-256color"); + new_termtype = C_STR("putty-256color"); else - new_termtype = const_cast("xterm-256color"); + new_termtype = C_STR("xterm-256color"); } else if ( ! getXTermColorName(87).isEmpty() ) { - new_termtype = const_cast("xterm-88color"); + new_termtype = C_STR("xterm-88color"); } else if ( ! getXTermColorName(15).isEmpty() ) { - new_termtype = const_cast("xterm-16color"); + new_termtype = C_STR("xterm-16color"); } } @@ -2977,9 +2991,9 @@ char* FTerm::parseAnswerbackMsg (char*& current_termtype) putty_terminal = true; if ( color256 ) - new_termtype = const_cast("putty-256color"); + new_termtype = C_STR("putty-256color"); else - new_termtype = const_cast("putty"); + new_termtype = C_STR("putty"); } else putty_terminal = false; @@ -3088,7 +3102,7 @@ char* FTerm::parseSecDA (char*& current_termtype) gnome_terminal = true; // Each gnome-terminal should be able to use 256 colors color256 = true; - new_termtype = const_cast("gnome-256color"); + new_termtype = C_STR("gnome-256color"); gnome_terminal_id = terminal_id_version; // VTE 0.40.0 or higher and gnome-terminal 3.16 or higher @@ -3106,12 +3120,12 @@ char* FTerm::parseSecDA (char*& current_termtype) if ( terminal_id_version == 20 && isWSConsConsole() ) { // NetBSD/OpenBSD workstation console - if ( std::strncmp(termtype, const_cast("wsvt25"), 6) == 0 ) + if ( std::strncmp(termtype, C_STR("wsvt25"), 6) == 0 ) netbsd_terminal = true; - else if ( std::strncmp(termtype, const_cast("vt220"), 5) == 0 ) + else if ( std::strncmp(termtype, C_STR("vt220"), 5) == 0 ) { openbsd_terminal = true; - new_termtype = const_cast("pccon"); + new_termtype = C_STR("pccon"); } } break; @@ -3124,12 +3138,12 @@ char* FTerm::parseSecDA (char*& current_termtype) case 32: // Tera Term tera_terminal = true; - new_termtype = const_cast("teraterm"); + new_termtype = C_STR("teraterm"); break; case 77: // mintty mintty_terminal = true; - new_termtype = const_cast("xterm-256color"); + new_termtype = C_STR("xterm-256color"); // switch to application escape key mode putstring (CSI "?7727h"); std::fflush(stdout); @@ -3145,7 +3159,7 @@ char* FTerm::parseSecDA (char*& current_termtype) if ( std::strncmp(termtype, "rxvt-", 5) != 0 && std::strncmp(termtype, "rxvt-cygwin-native", 18) == 0 ) - new_termtype = const_cast("rxvt-16color"); + new_termtype = C_STR("rxvt-16color"); break; case 85: // rxvt-unicode @@ -3155,9 +3169,9 @@ char* FTerm::parseSecDA (char*& current_termtype) if ( std::strncmp(termtype, "rxvt-", 5) != 0 ) { if ( color256 ) - new_termtype = const_cast("rxvt-256color"); + new_termtype = C_STR("rxvt-256color"); else - new_termtype = const_cast("rxvt"); + new_termtype = C_STR("rxvt"); } break; @@ -3226,24 +3240,24 @@ void FTerm::init_alt_charset() }; // update array 'character' with discovered vt100 pairs - for (int n = 0; n <= lastKeyItem; n++ ) + for (int n = 0; n <= fc::lastKeyItem; n++ ) { - uChar keyChar = uChar(vt100_key_to_utf8[n][vt100_key]); + uChar keyChar = uChar(fc::vt100_key_to_utf8[n][vt100_key]); uChar altChar = uChar((*vt100_alt_char)[ keyChar ]); - uInt utf8char = uInt(vt100_key_to_utf8[n][utf8_char]); + uInt utf8char = uInt(fc::vt100_key_to_utf8[n][utf8_char]); fc::encoding num = fc::NUM_OF_ENCODINGS; - uInt* p = std::find ( character[0] - , character[lastCharItem] + num + uInt* p = std::find ( fc::character[0] + , fc::character[fc::lastCharItem] + num , utf8char ); - if ( p != character[lastCharItem] + num ) // found in character + if ( p != fc::character[fc::lastCharItem] + num ) // found in character { - int item = int(std::distance(character[0], p) / num); + int item = int(std::distance(fc::character[0], p) / num); if ( altChar ) - character[item][fc::VT100] = altChar; // update alternate character set + fc::character[item][fc::VT100] = altChar; // update alternate character set else - character[item][fc::VT100] = 0; // delete vt100 char in character + fc::character[item][fc::VT100] = 0; // delete vt100 char in character } } } @@ -3266,13 +3280,13 @@ void FTerm::init_pc_charset() { // Select iso8859-1 + null mapping TCAP(fc::t_enter_pc_charset_mode) = \ - const_cast(ESC "%@" ESC "(U"); + C_STR(ESC "%@" ESC "(U"); } else { // Select null mapping TCAP(fc::t_enter_pc_charset_mode) = \ - const_cast(ESC "(U"); + C_STR(ESC "(U"); } opti_attr->set_enter_pc_charset_mode \ @@ -3287,13 +3301,13 @@ void FTerm::init_pc_charset() { // Select ascii mapping + utf8 TCAP(fc::t_exit_pc_charset_mode) = \ - const_cast(ESC "(B" ESC "%G"); + C_STR(ESC "(B" ESC "%G"); } else { // Select ascii mapping TCAP(fc::t_enter_pc_charset_mode) = \ - const_cast(ESC "(B"); + C_STR(ESC "(B"); } opti_attr->set_exit_pc_charset_mode \ @@ -3314,12 +3328,12 @@ void FTerm::init_cygwin_charmap() if ( ! cygwin_terminal ) return; - for (int i = 0; i <= lastCharItem; i++ ) + for (int i = 0; i <= fc::lastCharItem; i++ ) { - if ( character[i][fc::UTF8] == fc::BlackUpPointingTriangle // ▲ - || character[i][fc::UTF8] == fc::BlackDownPointingTriangle // ▼ - || character[i][fc::UTF8] == fc::SquareRoot ) // SquareRoot √ - character[i][fc::PC] = character[i][fc::ASCII]; + if ( fc::character[i][fc::UTF8] == fc::BlackUpPointingTriangle // ▲ + || fc::character[i][fc::UTF8] == fc::BlackDownPointingTriangle // ▼ + || fc::character[i][fc::UTF8] == fc::SquareRoot ) // SquareRoot √ + fc::character[i][fc::PC] = fc::character[i][fc::ASCII]; } } @@ -3331,9 +3345,9 @@ void FTerm::init_teraterm_charmap() if ( ! tera_terminal ) return; - for (int i = 0; i <= lastCharItem; i++ ) - if ( character[i][fc::PC] < 0x20 ) - character[i][fc::PC] = character[i][fc::ASCII]; + for (int i = 0; i <= fc::lastCharItem; i++ ) + if ( fc::character[i][fc::PC] < 0x20 ) + fc::character[i][fc::PC] = fc::character[i][fc::ASCII]; } //---------------------------------------------------------------------- @@ -3369,27 +3383,27 @@ void FTerm::init_termcaps() if ( status != success && color256 ) { // use "xterm-256color" as fallback if not found - std::strncpy (termtype, const_cast("xterm-256color"), 15); + std::strncpy (termtype, C_STR("xterm-256color"), 15); status = tgetent(term_buffer, termtype); } if ( status != success ) { // use "xterm" as fallback if not found - std::strncpy (termtype, const_cast("xterm"), 6); + std::strncpy (termtype, C_STR("xterm"), 6); status = tgetent(term_buffer, termtype); if ( status != success ) { // use "ansi" as fallback if not found - std::strncpy (termtype, const_cast("ansi"), 5); + std::strncpy (termtype, C_STR("ansi"), 5); status = tgetent(term_buffer, termtype); ansi_terminal = true; if ( status != success ) { // use "vt100" as fallback if not found - std::strncpy (termtype, const_cast("vt100"), 6); + std::strncpy (termtype, C_STR("vt100"), 6); status = tgetent(term_buffer, termtype); ansi_terminal = false; } @@ -3438,26 +3452,26 @@ void FTerm::init_termcaps_booleans() // Get termcap booleans // Screen erased with the background color - FTermcap::background_color_erase = tgetflag(const_cast("ut")); + FTermcap::background_color_erase = tgetflag(C_STR("ut")); // t_cursor_left wraps from column 0 to last column - FTermcap::automatic_left_margin = tgetflag(const_cast("bw")); + FTermcap::automatic_left_margin = tgetflag(C_STR("bw")); // Terminal has auto-matic margins - FTermcap::automatic_right_margin = tgetflag(const_cast("am")); + FTermcap::automatic_right_margin = tgetflag(C_STR("am")); // NewLine ignored after 80 cols - FTermcap::eat_nl_glitch = tgetflag(const_cast("xn")); + FTermcap::eat_nl_glitch = tgetflag(C_STR("xn")); // Terminal supports ANSI set default fg and bg color - FTermcap::ansi_default_color = tgetflag(const_cast("AX")); + FTermcap::ansi_default_color = tgetflag(C_STR("AX")); // Terminal supports operating system commands (OSC) // OSC = Esc + ']' - FTermcap::osc_support = tgetflag(const_cast("XT")); + FTermcap::osc_support = tgetflag(C_STR("XT")); // U8 is nonzero for terminals with no VT100 line-drawing in UTF-8 mode - FTermcap::no_utf8_acs_chars = bool(tgetnum(const_cast("U8")) != 0); + FTermcap::no_utf8_acs_chars = bool(tgetnum(C_STR("U8")) != 0); } //---------------------------------------------------------------------- @@ -3467,7 +3481,7 @@ void FTerm::init_termcaps_numeric() // Maximum number of colors on screen FTermcap::max_color = std::max( FTermcap::max_color - , tgetnum(const_cast("Co")) ); + , tgetnum(C_STR("Co")) ); if ( FTermcap::max_color < 0 ) FTermcap::max_color = 1; @@ -3478,10 +3492,10 @@ void FTerm::init_termcaps_numeric() monochron = false; // Get initial spacing for hardware tab stop - FTermcap::tabstop = tgetnum(const_cast("it")); + FTermcap::tabstop = tgetnum(C_STR("it")); // Get video attributes that cannot be used with colors - FTermcap::attr_without_color = tgetnum(const_cast("NC")); + FTermcap::attr_without_color = tgetnum(C_STR("NC")); } //---------------------------------------------------------------------- @@ -3551,21 +3565,21 @@ static void FTerm::init_termcaps_freebsd_quirks() // FreeBSD console fixes TCAP(fc::t_acs_chars) = \ - const_cast("-\036.\0370\333" - "a\260f\370g\361" - "h\261j\331k\277" - "l\332m\300n\305" - "q\304t\303u\264" - "v\301w\302x\263" - "y\363z\362~\371"); + C_STR("-\036.\0370\333" + "a\260f\370g\361" + "h\261j\331k\277" + "l\332m\300n\305" + "q\304t\303u\264" + "v\301w\302x\263" + "y\363z\362~\371"); TCAP(fc::t_set_attributes) = \ - const_cast(CSI "0" - "%?%p1%p6%|%t;1%;" - "%?%p2%t;4%;" - "%?%p1%p3%|%t;7%;" - "%?%p4%t;5%;m" - "%?%p9%t\016%e\017%;"); + C_STR(CSI "0" + "%?%p1%p6%|%t;1%;" + "%?%p2%t;4%;" + "%?%p1%p3%|%t;7%;" + "%?%p4%t;5%;m" + "%?%p9%t\016%e\017%;"); FTermcap::attr_without_color = 18; } @@ -3577,17 +3591,17 @@ void FTerm::init_termcaps_cygwin_quirks() // Set invisible cursor for cygwin terminal if ( ! TCAP(fc::t_cursor_invisible) ) TCAP(fc::t_cursor_invisible) = \ - const_cast(CSI "?25l"); + C_STR(CSI "?25l"); // Set visible cursor for cygwin terminal if ( ! TCAP(fc::t_cursor_visible) ) TCAP(fc::t_cursor_visible) = \ - const_cast(CSI "?25h"); + C_STR(CSI "?25h"); // Set ansi blink for cygwin terminal if ( ! TCAP(fc::t_enter_blink_mode) ) TCAP(fc::t_enter_blink_mode) = \ - const_cast(CSI "5m"); + C_STR(CSI "5m"); // Set background color erase for cygwin terminal FTermcap::background_color_erase = true; @@ -3596,20 +3610,20 @@ void FTerm::init_termcaps_cygwin_quirks() if ( FTermcap::max_color > 8 ) { TCAP(fc::t_set_a_foreground) = \ - const_cast(CSI "3%p1%{8}%m%d%?%p1%{7}%>%t;1%e;21%;m"); + C_STR(CSI "3%p1%{8}%m%d%?%p1%{7}%>%t;1%e;21%;m"); TCAP(fc::t_set_a_background) = \ - const_cast(CSI "4%p1%{8}%m%d%?%p1%{7}%>%t;5%e;25%;m"); + C_STR(CSI "4%p1%{8}%m%d%?%p1%{7}%>%t;5%e;25%;m"); } else { TCAP(fc::t_set_a_foreground) = \ - const_cast(CSI "3%p1%dm"); + C_STR(CSI "3%p1%dm"); TCAP(fc::t_set_a_background) = \ - const_cast(CSI "4%p1%dm"); + C_STR(CSI "4%p1%dm"); } TCAP(fc::t_orig_pair) = \ - const_cast(CSI "39;49;25m"); + C_STR(CSI "39;49;25m"); // Avoid dim + underline TCAP(fc::t_enter_dim_mode) = 0; @@ -3627,20 +3641,20 @@ void FTerm::init_termcaps_linux_quirks() if ( FTermcap::max_color > 8 ) { TCAP(fc::t_set_a_foreground) = \ - const_cast(CSI "3%p1%{8}%m%d%?%p1%{7}%>%t;1%e;21%;m"); + C_STR(CSI "3%p1%{8}%m%d%?%p1%{7}%>%t;1%e;21%;m"); TCAP(fc::t_set_a_background) = \ - const_cast(CSI "4%p1%{8}%m%d%?%p1%{7}%>%t;5%e;25%;m"); + C_STR(CSI "4%p1%{8}%m%d%?%p1%{7}%>%t;5%e;25%;m"); } else { TCAP(fc::t_set_a_foreground) = \ - const_cast(CSI "3%p1%dm"); + C_STR(CSI "3%p1%dm"); TCAP(fc::t_set_a_background) = \ - const_cast(CSI "4%p1%dm"); + C_STR(CSI "4%p1%dm"); } TCAP(fc::t_orig_pair) = \ - const_cast(CSI "39;49;25m"); + C_STR(CSI "39;49;25m"); // Avoid dim + underline TCAP(fc::t_enter_dim_mode) = 0; @@ -3657,11 +3671,21 @@ void FTerm::init_termcaps_xterm_quirks() if ( ! TCAP(fc::t_initialize_color) ) { TCAP(fc::t_initialize_color) = \ - const_cast(OSC "4;%p1%d;rgb:" - "%p2%{255}%*%{1000}%/%2.2X/" - "%p3%{255}%*%{1000}%/%2.2X/" - "%p4%{255}%*%{1000}%/%2.2X" ESC "\\"); + C_STR(OSC "4;%p1%d;rgb:" + "%p2%{255}%*%{1000}%/%2.2X/" + "%p3%{255}%*%{1000}%/%2.2X/" + "%p4%{255}%*%{1000}%/%2.2X" ESC "\\"); } + + // Fallback if "vi" is not found + if ( ! TCAP(fc::t_cursor_invisible) ) + TCAP(fc::t_cursor_invisible) = \ + C_STR(CSI "?25l"); + + // Fallback if "ve" is not found + if ( ! TCAP(fc::t_cursor_normal) ) + TCAP(fc::t_cursor_normal) = \ + C_STR(CSI "?12l" CSI "?25h"); } //---------------------------------------------------------------------- @@ -3671,18 +3695,18 @@ void FTerm::init_termcaps_rxvt_quirks() if ( std::strncmp(termtype, "rxvt-16color", 12) == 0 ) { TCAP(fc::t_enter_alt_charset_mode) = \ - const_cast(ESC "(0"); + C_STR(ESC "(0"); TCAP(fc::t_exit_alt_charset_mode) = \ - const_cast(ESC "(B"); + C_STR(ESC "(B"); } // Set ansi foreground and background color if ( ! urxvt_terminal ) { TCAP(fc::t_set_a_foreground) = \ - const_cast(CSI "%?%p1%{8}%<%t%p1%{30}%+%e%p1%'R'%+%;%dm"); + C_STR(CSI "%?%p1%{8}%<%t%p1%{30}%+%e%p1%'R'%+%;%dm"); TCAP(fc::t_set_a_background) = \ - const_cast(CSI "%?%p1%{8}%<%t%p1%'('%+%e%p1%{92}%+%;%dm"); + C_STR(CSI "%?%p1%{8}%<%t%p1%'('%+%e%p1%{92}%+%;%dm"); } } @@ -3694,7 +3718,7 @@ void FTerm::init_termcaps_vte_quirks() // set exit underline for gnome terminal TCAP(fc::t_exit_underline_mode) = \ - const_cast(CSI "24m"); + C_STR(CSI "24m"); } //---------------------------------------------------------------------- @@ -3709,78 +3733,78 @@ void FTerm::init_termcaps_putty_quirks() // Set ansi foreground and background color TCAP(fc::t_set_a_foreground) = \ - const_cast(CSI "%?%p1%{8}%<" - "%t3%p1%d" - "%e%p1%{16}%<" - "%t9%p1%{8}%-%d" - "%e38;5;%p1%d%;m"); + C_STR(CSI "%?%p1%{8}%<" + "%t3%p1%d" + "%e%p1%{16}%<" + "%t9%p1%{8}%-%d" + "%e38;5;%p1%d%;m"); TCAP(fc::t_set_a_background) = \ - const_cast(CSI "%?%p1%{8}%<" - "%t4%p1%d" - "%e%p1%{16}%<" - "%t10%p1%{8}%-%d" - "%e48;5;%p1%d%;m"); + C_STR(CSI "%?%p1%{8}%<" + "%t4%p1%d" + "%e%p1%{16}%<" + "%t10%p1%{8}%-%d" + "%e48;5;%p1%d%;m"); TCAP(fc::t_set_attributes) = \ - const_cast(CSI "0" - "%?%p1%p6%|%t;1%;" - "%?%p5%t;2%;" // since putty 0.71 - "%?%p2%t;4%;" - "%?%p1%p3%|%t;7%;" - "%?%p4%t;5%;m" - "%?%p9%t\016%e\017%;"); + C_STR(CSI "0" + "%?%p1%p6%|%t;1%;" + "%?%p5%t;2%;" // since putty 0.71 + "%?%p2%t;4%;" + "%?%p1%p3%|%t;7%;" + "%?%p4%t;5%;m" + "%?%p9%t\016%e\017%;"); // PuTTY 0.71 or higher TCAP(fc::t_enter_dim_mode) = \ - const_cast(CSI "2m"); + C_STR(CSI "2m"); // PuTTY 0.71 or higher TCAP(fc::t_exit_dim_mode) = \ - const_cast(CSI "22m"); + C_STR(CSI "22m"); if ( ! TCAP(fc::t_clr_bol) ) TCAP(fc::t_clr_bol) = \ - const_cast(CSI "1K"); + C_STR(CSI "1K"); if ( ! TCAP(fc::t_orig_pair) ) TCAP(fc::t_orig_pair) = \ - const_cast(CSI "39;49m"); + C_STR(CSI "39;49m"); if ( ! TCAP(fc::t_orig_colors) ) TCAP(fc::t_orig_colors) = \ - const_cast(OSC "R"); + C_STR(OSC "R"); if ( ! TCAP(fc::t_column_address) ) TCAP(fc::t_column_address) = \ - const_cast(CSI "%i%p1%dG"); + C_STR(CSI "%i%p1%dG"); if ( ! TCAP(fc::t_row_address) ) TCAP(fc::t_row_address) = \ - const_cast(CSI "%i%p1%dd"); + C_STR(CSI "%i%p1%dd"); if ( ! TCAP(fc::t_enable_acs) ) TCAP(fc::t_enable_acs) = \ - const_cast(ESC "(B" ESC ")0"); + C_STR(ESC "(B" ESC ")0"); if ( ! TCAP(fc::t_enter_am_mode) ) TCAP(fc::t_enter_am_mode) = \ - const_cast(CSI "?7h"); + C_STR(CSI "?7h"); if ( ! TCAP(fc::t_exit_am_mode) ) TCAP(fc::t_exit_am_mode) = \ - const_cast(CSI "?7l"); + C_STR(CSI "?7l"); if ( ! TCAP(fc::t_enter_pc_charset_mode) ) TCAP(fc::t_enter_pc_charset_mode) = \ - const_cast(CSI "11m"); + C_STR(CSI "11m"); if ( ! TCAP(fc::t_exit_pc_charset_mode) ) TCAP(fc::t_exit_pc_charset_mode) = \ - const_cast(CSI "10m"); + C_STR(CSI "10m"); if ( ! TCAP(fc::t_key_mouse) ) TCAP(fc::t_key_mouse) = \ - const_cast(CSI "M"); + C_STR(CSI "M"); } //---------------------------------------------------------------------- @@ -3791,13 +3815,13 @@ void FTerm::init_termcaps_teraterm_quirks() // Tera Term color settings TCAP(fc::t_set_a_foreground) = \ - const_cast(CSI "38;5;%p1%dm"); + C_STR(CSI "38;5;%p1%dm"); TCAP(fc::t_set_a_background) = \ - const_cast(CSI "48;5;%p1%dm"); + C_STR(CSI "48;5;%p1%dm"); TCAP(fc::t_exit_attribute_mode) = \ - const_cast(CSI "0m" SI); + C_STR(CSI "0m" SI); TCAP(fc::t_orig_pair) = \ - const_cast(CSI "39;49m"); + C_STR(CSI "39;49m"); } //---------------------------------------------------------------------- @@ -3816,18 +3840,18 @@ void FTerm::init_termcaps_screen_quirks() if ( tmux_terminal ) { TCAP(fc::t_initialize_color) = \ - const_cast(ESC "Ptmux;" ESC OSC "4;%p1%d;rgb:" - "%p2%{255}%*%{1000}%/%2.2X/" - "%p3%{255}%*%{1000}%/%2.2X/" - "%p4%{255}%*%{1000}%/%2.2X" BEL ESC "\\"); + C_STR(ESC "Ptmux;" ESC OSC "4;%p1%d;rgb:" + "%p2%{255}%*%{1000}%/%2.2X/" + "%p3%{255}%*%{1000}%/%2.2X/" + "%p4%{255}%*%{1000}%/%2.2X" BEL ESC "\\"); } else { TCAP(fc::t_initialize_color) = \ - const_cast(ESC "P" OSC "4;%p1%d;rgb:" - "%p2%{255}%*%{1000}%/%2.2X/" - "%p3%{255}%*%{1000}%/%2.2X/" - "%p4%{255}%*%{1000}%/%2.2X" BEL ESC "\\"); + C_STR(ESC "P" OSC "4;%p1%d;rgb:" + "%p2%{255}%*%{1000}%/%2.2X/" + "%p3%{255}%*%{1000}%/%2.2X/" + "%p4%{255}%*%{1000}%/%2.2X" BEL ESC "\\"); } } } @@ -3846,37 +3870,37 @@ void FTerm::init_termcaps_general_quirks() // Fallback if "AF" is not found if ( ! TCAP(fc::t_set_a_foreground) ) TCAP(fc::t_set_a_foreground) = \ - const_cast(CSI "3%p1%dm"); + C_STR(CSI "3%p1%dm"); // Fallback if "AB" is not found if ( ! TCAP(fc::t_set_a_background) ) TCAP(fc::t_set_a_background) = \ - const_cast(CSI "4%p1%dm"); + C_STR(CSI "4%p1%dm"); // Fallback if "Ic" is not found if ( ! TCAP(fc::t_initialize_color) ) { TCAP(fc::t_initialize_color) = \ - const_cast(OSC "P%p1%x" - "%p2%{255}%*%{1000}%/%02x" - "%p3%{255}%*%{1000}%/%02x" - "%p4%{255}%*%{1000}%/%02x"); + C_STR(OSC "P%p1%x" + "%p2%{255}%*%{1000}%/%02x" + "%p3%{255}%*%{1000}%/%02x" + "%p4%{255}%*%{1000}%/%02x"); } // Fallback if "ti" is not found if ( ! TCAP(fc::t_enter_ca_mode) ) TCAP(fc::t_enter_ca_mode) = \ - const_cast(ESC "7" CSI "?47h"); + C_STR(ESC "7" CSI "?47h"); // Fallback if "te" is not found if ( ! TCAP(fc::t_exit_ca_mode) ) TCAP(fc::t_exit_ca_mode) = \ - const_cast(CSI "?47l" ESC "8" CSI "m"); + C_STR(CSI "?47l" ESC "8" CSI "m"); // Set ansi move if "cm" is not found if ( ! TCAP(fc::t_cursor_address) ) TCAP(fc::t_cursor_address) = \ - const_cast(CSI "%i%p1%d;%p2%dH"); + C_STR(CSI "%i%p1%d;%p2%dH"); // Test for standard ECMA-48 (ANSI X3.64) terminal if ( TCAP(fc::t_exit_underline_mode) @@ -3884,34 +3908,34 @@ void FTerm::init_termcaps_general_quirks() { // Seems to be a ECMA-48 (ANSI X3.64) compatible terminal TCAP(fc::t_enter_dbl_underline_mode) = \ - const_cast(CSI "21m"); // Exit single underline, too + C_STR(CSI "21m"); // Exit single underline, too TCAP(fc::t_exit_dbl_underline_mode) = \ - const_cast(CSI "24m"); + C_STR(CSI "24m"); TCAP(fc::t_exit_bold_mode) = \ - const_cast(CSI "22m"); // Exit dim, too + C_STR(CSI "22m"); // Exit dim, too TCAP(fc::t_exit_dim_mode) = \ - const_cast(CSI "22m"); + C_STR(CSI "22m"); TCAP(fc::t_exit_underline_mode) = \ - const_cast(CSI "24m"); + C_STR(CSI "24m"); TCAP(fc::t_exit_blink_mode) = \ - const_cast(CSI "25m"); + C_STR(CSI "25m"); TCAP(fc::t_exit_reverse_mode) = \ - const_cast(CSI "27m"); + C_STR(CSI "27m"); TCAP(fc::t_exit_secure_mode) = \ - const_cast(CSI "28m"); + C_STR(CSI "28m"); TCAP(fc::t_enter_crossed_out_mode) = \ - const_cast(CSI "9m"); + C_STR(CSI "9m"); TCAP(fc::t_exit_crossed_out_mode) = \ - const_cast(CSI "29m"); + C_STR(CSI "29m"); } } @@ -3920,69 +3944,68 @@ void FTerm::init_termcaps_keys (char*& buffer) { // Read termcap key strings - for (int i = 0; Fkey[i].tname[0] != 0; i++) + for (int i = 0; fc::Fkey[i].tname[0] != 0; i++) { - Fkey[i].string = tgetstr(Fkey[i].tname, &buffer); + fc::Fkey[i].string = tgetstr(fc::Fkey[i].tname, &buffer); // Fallback for rxvt with TERM=xterm - if ( std::strncmp(Fkey[i].tname, "khx", 3) == 0 ) - Fkey[i].string = const_cast(CSI "7~"); // Home key + if ( std::strncmp(fc::Fkey[i].tname, "khx", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "7~"); // Home key - if ( std::strncmp(Fkey[i].tname, "@7x", 3) == 0 ) - Fkey[i].string = const_cast(CSI "8~"); // End key + if ( std::strncmp(fc::Fkey[i].tname, "@7x", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "8~"); // End key - if ( std::strncmp(Fkey[i].tname, "k1x", 3) == 0 ) - Fkey[i].string = const_cast(CSI "11~"); // F1 + if ( std::strncmp(fc::Fkey[i].tname, "k1x", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "11~"); // F1 - if ( std::strncmp(Fkey[i].tname, "k2x", 3) == 0 ) - Fkey[i].string = const_cast(CSI "12~"); // F2 + if ( std::strncmp(fc::Fkey[i].tname, "k2x", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "12~"); // F2 - if ( std::strncmp(Fkey[i].tname, "k3x", 3) == 0 ) - Fkey[i].string = const_cast(CSI "13~"); // F3 + if ( std::strncmp(fc::Fkey[i].tname, "k3x", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "13~"); // F3 - if ( std::strncmp(Fkey[i].tname, "k4x", 3) == 0 ) - Fkey[i].string = const_cast(CSI "14~"); // F4 + if ( std::strncmp(fc::Fkey[i].tname, "k4x", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "14~"); // F4 // Fallback for TERM=ansi - if ( std::strncmp(Fkey[i].tname, "@7X", 3) == 0 ) - Fkey[i].string = const_cast(CSI "K"); // End key + if ( std::strncmp(fc::Fkey[i].tname, "@7X", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "K"); // End key } // Some terminals (e.g. PuTTY) send the wrong code for the arrow keys // http://www.unix.com/shell-programming-scripting/.. // ..110380-using-arrow-keys-shell-scripts.html - char* key_up_string = tgetstr(const_cast("ku"), &buffer); + char* key_up_string = tgetstr(C_STR("ku"), &buffer); if ( (key_up_string && (std::strcmp(key_up_string, CSI "A") == 0)) || ( TCAP(fc::t_cursor_up) && (std::strcmp(TCAP(fc::t_cursor_up), CSI "A") == 0) ) ) { - for (int i = 0; Fkey[i].tname[0] != 0; i++) + for (int i = 0; fc::Fkey[i].tname[0] != 0; i++) { - if ( std::strncmp(Fkey[i].tname, "kux", 3) == 0 ) - Fkey[i].string = const_cast(CSI "A"); // Key up + if ( std::strncmp(fc::Fkey[i].tname, "kux", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "A"); // Key up - if ( std::strncmp(Fkey[i].tname, "kdx", 3) == 0 ) - Fkey[i].string = const_cast(CSI "B"); // Key down + if ( std::strncmp(fc::Fkey[i].tname, "kdx", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "B"); // Key down - if ( std::strncmp(Fkey[i].tname, "krx", 3) == 0 ) - Fkey[i].string = const_cast(CSI "C"); // Key right + if ( std::strncmp(fc::Fkey[i].tname, "krx", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "C"); // Key right + if ( std::strncmp(fc::Fkey[i].tname, "klx", 3) == 0 ) + fc::Fkey[i].string = C_STR(CSI "D"); // Key left - if ( std::strncmp(Fkey[i].tname, "klx", 3) == 0 ) - Fkey[i].string = const_cast(CSI "D"); // Key left + if ( std::strncmp(fc::Fkey[i].tname, "k1X", 3) == 0 ) + fc::Fkey[i].string = C_STR(ESC "OP"); // PF1 - if ( std::strncmp(Fkey[i].tname, "k1X", 3) == 0 ) - Fkey[i].string = const_cast(ESC "OP"); // PF1 + if ( std::strncmp(fc::Fkey[i].tname, "k2X", 3) == 0 ) + fc::Fkey[i].string = C_STR(ESC "OQ"); // PF2 - if ( std::strncmp(Fkey[i].tname, "k2X", 3) == 0 ) - Fkey[i].string = const_cast(ESC "OQ"); // PF2 + if ( std::strncmp(fc::Fkey[i].tname, "k3X", 3) == 0 ) + fc::Fkey[i].string = C_STR(ESC "OR"); // PF3 - if ( std::strncmp(Fkey[i].tname, "k3X", 3) == 0 ) - Fkey[i].string = const_cast(ESC "OR"); // PF3 - - if ( std::strncmp(Fkey[i].tname, "k4X", 3) == 0 ) - Fkey[i].string = const_cast(ESC "OS"); // PF4 + if ( std::strncmp(fc::Fkey[i].tname, "k4X", 3) == 0 ) + fc::Fkey[i].string = C_STR(ESC "OS"); // PF4 } } } @@ -4133,7 +4156,7 @@ void FTerm::init_locale() // Fallback to C if ( ! locale_name ) - locale_name = const_cast("C"); + locale_name = C_STR("C"); } //---------------------------------------------------------------------- @@ -4647,11 +4670,11 @@ uInt FTerm::cp437_to_unicode (uChar c) { register uInt ucs = uInt(c); - for (register uInt i = 0; i <= lastCP437Item; i++) + for (register uInt i = 0; i <= fc::lastCP437Item; i++) { - if ( cp437_to_ucs[i][0] == c ) // found + if ( fc::cp437_to_ucs[i][0] == c ) // found { - ucs = cp437_to_ucs[i][1]; + ucs = fc::cp437_to_ucs[i][1]; break; } } diff --git a/src/fvterm.cpp b/src/fvterm.cpp index c0600e88..3743e15d 100644 --- a/src/fvterm.cpp +++ b/src/fvterm.cpp @@ -2521,7 +2521,6 @@ FVTerm::exit_state FVTerm::eraseCharacters ( uInt& x, uInt xmax, uInt y // Erase a number of characters to draw simple whitespaces term_area*& vt = vterm; - bool& ut = FTermcap::background_color_erase; char*& ec = TCAP(fc::t_erase_chars); char_data* print_char = &vt->text[y * uInt(vt->width) + x]; @@ -2549,6 +2548,7 @@ FVTerm::exit_state FVTerm::eraseCharacters ( uInt& x, uInt xmax, uInt y else { uInt start_pos = x; + bool& ut = FTermcap::background_color_erase; if ( whitespace > uInt(erase_ch_length) + uInt(cursor_addres_lengths) && (ut || normal) ) @@ -2963,16 +2963,38 @@ int FVTerm::appendLowerRight (char_data*& screen_char) //---------------------------------------------------------------------- inline void FVTerm::appendOutputBuffer (const std::string& s) { +#if defined(__sun) && defined(__SVR4) + char* c_string = C_STR(s.c_str()); +#else const char* const& c_string = s.c_str(); +#endif + tputs (c_string, 1, appendOutputBuffer); } //---------------------------------------------------------------------- inline void FVTerm::appendOutputBuffer (const char*& s) { +#if defined(__sun) && defined(__SVR4) + tputs (C_STR(s), 1, appendOutputBuffer); +#else tputs (s, 1, appendOutputBuffer); +#endif } +#if defined(__sun) && defined(__SVR4) +//---------------------------------------------------------------------- +int FVTerm::appendOutputBuffer (char ch) +{ + output_buffer->push(ch); + + if ( output_buffer->size() >= TERMINAL_OUTPUT_BUFFER_SIZE ) + flush_out(); + + return ch; +} +#endif + //---------------------------------------------------------------------- int FVTerm::appendOutputBuffer (int ch) {