diff options
| -rw-r--r-- | FL/Fl_Simple_Terminal.H | 244 | ||||
| -rw-r--r-- | fltk-options/makedepend | 1 | ||||
| -rw-r--r-- | fluid/makedepend | 22 | ||||
| -rw-r--r-- | src/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/Fl_Simple_Terminal.cxx | 1061 | ||||
| -rw-r--r-- | src/Makefile | 7 | ||||
| -rw-r--r-- | src/makedepend | 66 | ||||
| -rw-r--r-- | test/makedepend | 37 |
8 files changed, 100 insertions, 1341 deletions
diff --git a/FL/Fl_Simple_Terminal.H b/FL/Fl_Simple_Terminal.H deleted file mode 100644 index 898412a50..000000000 --- a/FL/Fl_Simple_Terminal.H +++ /dev/null @@ -1,244 +0,0 @@ -// -// A simple terminal widget for Fast Light Tool Kit (FLTK). -// -// Copyright 1998-2011 by Bill Spitzak and others. -// Copyright 2017 by Greg Ercolano. -// -// This library is free software. Distribution and use rights are outlined in -// the file "COPYING" which should have been included with this file. If this -// file is missing or damaged, see the license at: -// -// https://www.fltk.org/COPYING.php -// -// Please see the following page on how to report bugs and issues: -// -// https://www.fltk.org/bugs.php -// - -/* \file - Fl_Simple_Terminal widget . */ - -#ifndef Fl_Simple_Terminal_H -#define Fl_Simple_Terminal_H - -#include "Fl_Export.H" -#include <FL/Fl_Text_Display.H> - -/** - This is a continuous text scroll widget for logging and debugging - output, much like a terminal. Includes printf() for appending messages, - a line limit for the screen history size, ANSI sequences to control - text color, font face, font weight and font size. - - This is useful in place of using stdout/stderr for logging messages - when no terminal is available, such as when an application is invoked - from a desktop shortcut, dock, or file browser. - - Like a regular console terminal, the vertical scrollbar 'tracks' - the bottom of the buffer as new output is added. If the user scrolls - away from the bottom, this 'tracking' feature is temporarily suspended, - so the user can browse the terminal history without fighting the scrollbar - when new text is added asynchronously. When the user returns the - scroller to the bottom of the display, the scrollbar's tracking resumes. - - Features include: - - - history_lines(int) can define a maximum size for the terminal screen history - - stay_at_bottom(bool) can be used to cause the terminal to keep scrolled to the bottom - - ansi(bool) enables ANSI sequences within the text to control text colors - - style_table() can be used to define custom color/font/weight/size combinations - - What this widget is NOT is a full terminal emulator; it does NOT - handle stdio redirection, pipes, pseudo ttys, termio character cooking, - keyboard input processing, screen addressing, random cursor positioning, - curses(3) compatibility, or VT100/xterm emulation. - - It is a simple text display widget that leverages the features of the - Fl_Text_Display base class to handle terminal-like behavior, such as - logging events or debug information. - - Example use: - \code - - #include <FL/Fl_Simple_Terminal.H> - : - tty = new Fl_Simple_Terminal(...); - tty->ansi(true); // enable use of "\033[#m" - : - tty->printf("The time is now: \033[32m%s\033[0m", date_time_str); - - \endcode - - Example application: - \dontinclude simple-terminal.cxx - \skip //START - \until //END - - Style Tables For Color/Font/Fontsize Control - -------------------------------------------- - Internally this widget derives from Fl_Text_Display, and therefore - inherits some of its idiosyncracies. In particular, when colors - are used, the base class's concept of a 'style table' is used. - - The 'style table' is similar to a color mapped image; where each - pixel is a single value that is an index into a table of colors - to minimize per-pixel memory use. - - The style table has a similar goal; since every character in the - terminal can potentially be a different color, instead of managing - several integer attribute values per-character, a single character - for each character is used as an index into the style table, choosing - one of the available color/font/weight/size values available. - This saves on as much as 3 to 4 times the memory use, useful when - there's a large amount of text. - - When ansi() is set to 'true', ANSI sequences of the form "\033[#m" - can be used to select different colors, font faces, font weights (bold,italic..), - and font sizes, where '#' is the index number into the style table. Example: - - \code - "\033[0mThis text uses the 1st entry in the style table\n" - "\033[1mThis text uses the 2nd entry in the style table\n" - "\033[2mThis text uses the 3rd entry in the style table\n" - etc.. - \endcode - - There is a built-in style table that provides some - commonly used ANSI colors for "\033[30m" through "\033[37m" - (blk,red,grn,yel,blu,mag,cyn,wht), and a brighter version of those - colors for "\033[40" through "\033[47m". See ansi(bool) for more info. - - You can also supply a custom style table using - style_table(Style_Table_Entry*,int,int), allowing you to define - your own color/font/weight/size combinations. See that method's docs - for more info. - - All style index numbers are rounded to the size of the style table - (via modulus) to protect the style array from overruns. - -*/ -class FL_EXPORT Fl_Simple_Terminal : public Fl_Text_Display { -protected: - Fl_Text_Buffer *buf; // text buffer - Fl_Text_Buffer *sbuf; // style buffer - -private: - // Private class to handle parsing ESC sequences - // Holds all state information for parsing esc sequences, - // so sequences can span multiple block read(2) operations, etc. - // - class FL_EXPORT Fl_Escape_Seq { - public: - static const int maxbuf = 80; - static const int maxvals = 10; - // Return codes - static const int success = 0; // operation succeeded - static const int fail = -1; // operation failed - static const int completed = 1; // multi-step operation completed successfully - private: - char esc_mode_; // escape parsing mode state - char buf_[maxbuf]; // escape sequence being parsed - char *bufp_; // parsing ptr into buf[] - char *bufendp_; // end of buf[] (ptr to last valid buf char) - char *valbufp_; // pointer to first char in buf of integer being parsed - int vals_[maxvals]; // value array for parsing #'s in ESC[#;#;#.. - int vali_; // parsing index into vals_[], 0 if none - - int append_buf(char c); - int append_val(); - - public: - Fl_Escape_Seq(); - void reset(); - char esc_mode() const; - void esc_mode(char val); - int total_vals() const; - int val(int i) const; - bool parse_in_progress() const; - int parse(char c); - }; - -private: - int history_lines_; // max lines allowed in screen history - bool stay_at_bottom_; // lets scroller chase last line in buffer - // scroll management - int lines_; // #lines in buffer (optimization: Fl_Text_Buffer slow to calc this) - bool scrollaway_; // true when user changed vscroll away from bottom - bool scrolling_; // true while scroll callback active - // Fl_Text_Display vscrollbar's callback+data - Fl_Callback *orig_vscroll_cb_; - void *orig_vscroll_data_; - // Style table - const Fl_Text_Display::Style_Table_Entry *stable_; // the active style table - int stable_size_; // active style table size (in bytes) - int normal_style_index_; // "normal" style used by "\033[0m" reset sequence - int current_style_index_; // current style used for drawing text - char current_style_; // current 'style char' (e.g. 'A' = first style entry) - // ANSI escape seq - Fl_Escape_Seq escseq; // escape sequence state handler - bool ansi_; // enables ANSI sequences - bool ansi_show_unknown_; // show '¿' for unknown ESC sequences (default: off) - // String parsing vars initialized/used by append(), used by handle_backspace() etc. - char *ntm_; // new text memory (ntm) - malloc()ed by append() for output text - char *ntp_; // new text ptr (ntp) - points into ntm buffer - char *nsm_; // new style memory (nsm) - malloc()ed by append() for output style - char *nsp_; // new style ptr (nsp) - points into nsm buffer - -public: - Fl_Simple_Terminal(int X,int Y,int W,int H,const char *l=0); - ~Fl_Simple_Terminal(); - - // Terminal options - void stay_at_bottom(bool); - bool stay_at_bottom() const; - void history_lines(int); - int history_lines() const; - void ansi(bool val); - bool ansi() const; - void ansi_show_unknown(bool val); - bool ansi_show_unknown() const; - void style_table(Fl_Text_Display::Style_Table_Entry *stable, int stable_size, int normal_style_index=0); - const Fl_Text_Display::Style_Table_Entry *style_table() const; - int style_table_size() const; - void normal_style_index(int); - int normal_style_index() const; - void current_style_index(int); - int current_style_index() const; - int current_style() const; - - // Terminal text management - void append(const char *s, int len=-1); - void text(const char *s, int len=-1); - const char* text() const; - void printf(const char *fmt, ...); - void vprintf(const char *fmt, va_list ap); - void clear(); - void remove_lines(int start, int count); - -private: - // Methods blocking public access to the subclass - // These are subclass methods that would give unexpected - // results if used. By making them private, we effectively - // "block" them. - // - // TODO: There are probably other Fl_Text_Display methods that - // need to be blocked. - // - void insert(const char*) { } - -protected: - // Fltk - void draw() FL_OVERRIDE; - - // Internal methods - void enforce_stay_at_bottom(); - void enforce_history_lines(); - void vscroll_cb2(Fl_Widget*, void*); - static void vscroll_cb(Fl_Widget*, void*); - void backspace_buffer(unsigned int count); - void handle_backspace(); - void append_ansi(const char *s, int len); - void unknown_escape(); -}; - -#endif diff --git a/fltk-options/makedepend b/fltk-options/makedepend index 6c83bd8dc..77515f1bc 100644 --- a/fltk-options/makedepend +++ b/fltk-options/makedepend @@ -24,6 +24,7 @@ fltk-options.o: ../FL/Fl_Hold_Browser.H fltk-options.o: ../FL/Fl_Image.H fltk-options.o: ../FL/Fl_Menu_.H fltk-options.o: ../FL/Fl_Menu_Item.H +fltk-options.o: ../FL/Fl_Multi_Label.H fltk-options.o: ../FL/Fl_Pack.H fltk-options.o: ../FL/Fl_Pixmap.H fltk-options.o: ../FL/Fl_Plugin.H diff --git a/fluid/makedepend b/fluid/makedepend index 831a6ef91..2615368eb 100644 --- a/fluid/makedepend +++ b/fluid/makedepend @@ -60,6 +60,7 @@ alignment_panel.o: ../FL/Fl_Light_Button.H alignment_panel.o: ../FL/Fl_Menu_.H alignment_panel.o: ../FL/Fl_Menu_Button.H alignment_panel.o: ../FL/Fl_Menu_Item.H +alignment_panel.o: ../FL/Fl_Multi_Label.H alignment_panel.o: ../FL/Fl_Native_File_Chooser.H alignment_panel.o: ../FL/Fl_Pack.H alignment_panel.o: ../FL/Fl_Pixmap.H @@ -123,6 +124,7 @@ align_widget.o: ../FL/Fl_Graphics_Driver.H align_widget.o: ../FL/Fl_Group.H align_widget.o: ../FL/Fl_Image.H align_widget.o: ../FL/Fl_Menu_Item.H +align_widget.o: ../FL/Fl_Multi_Label.H align_widget.o: ../FL/Fl_Pack.H align_widget.o: ../FL/Fl_Pixmap.H align_widget.o: ../FL/Fl_Plugin.H @@ -164,6 +166,7 @@ code.o: ../FL/Fl_Group.H code.o: ../FL/Fl_Image.H code.o: ../FL/Fl_Menu.H code.o: ../FL/Fl_Menu_Item.H +code.o: ../FL/Fl_Multi_Label.H code.o: ../FL/Fl_Pack.H code.o: ../FL/Fl_Pixmap.H code.o: ../FL/Fl_Plugin.H @@ -251,6 +254,7 @@ custom_widgets.o: ../FL/Fl_Light_Button.H custom_widgets.o: ../FL/Fl_Menu_.H custom_widgets.o: ../FL/Fl_Menu_Button.H custom_widgets.o: ../FL/Fl_Menu_Item.H +custom_widgets.o: ../FL/Fl_Multi_Label.H custom_widgets.o: ../FL/Fl_Pack.H custom_widgets.o: ../FL/Fl_Pixmap.H custom_widgets.o: ../FL/Fl_Plugin.H @@ -304,6 +308,7 @@ ExternalCodeEditor_UNIX.o: ../FL/fl_config.h ExternalCodeEditor_UNIX.o: ../FL/Fl_Export.H ExternalCodeEditor_UNIX.o: ../FL/Fl_Image.H ExternalCodeEditor_UNIX.o: ../FL/Fl_Menu_Item.H +ExternalCodeEditor_UNIX.o: ../FL/Fl_Multi_Label.H ExternalCodeEditor_UNIX.o: ../FL/Fl_Preferences.H ExternalCodeEditor_UNIX.o: ../FL/fl_string_functions.h ExternalCodeEditor_UNIX.o: ../FL/fl_types.h @@ -436,6 +441,7 @@ Fd_Snap_Action.o: ../FL/Fl_Menu_.H Fd_Snap_Action.o: ../FL/Fl_Menu_Bar.H Fd_Snap_Action.o: ../FL/Fl_Menu_Button.H Fd_Snap_Action.o: ../FL/Fl_Menu_Item.H +Fd_Snap_Action.o: ../FL/Fl_Multi_Label.H Fd_Snap_Action.o: ../FL/Fl_Native_File_Chooser.H Fd_Snap_Action.o: ../FL/Fl_Pack.H Fd_Snap_Action.o: ../FL/Fl_Pixmap.H @@ -518,6 +524,7 @@ file.o: ../FL/Fl_Menu_.H file.o: ../FL/Fl_Menu_Button.H file.o: ../FL/Fl_Menu_Item.H file.o: ../FL/fl_message.H +file.o: ../FL/Fl_Multi_Label.H file.o: ../FL/Fl_Native_File_Chooser.H file.o: ../FL/Fl_Pack.H file.o: ../FL/Fl_Pixmap.H @@ -609,6 +616,7 @@ fluid.o: ../FL/Fl_Menu_.H fluid.o: ../FL/Fl_Menu_Bar.H fluid.o: ../FL/Fl_Menu_Button.H fluid.o: ../FL/Fl_Menu_Item.H +fluid.o: ../FL/Fl_Multi_Label.H fluid.o: ../FL/Fl_Native_File_Chooser.H fluid.o: ../FL/Fl_Pack.H fluid.o: ../FL/Fl_Paged_Device.H @@ -723,6 +731,7 @@ Fluid_Image.o: ../FL/Fl_Light_Button.H Fluid_Image.o: ../FL/Fl_Menu_.H Fluid_Image.o: ../FL/Fl_Menu_Button.H Fluid_Image.o: ../FL/Fl_Menu_Item.H +Fluid_Image.o: ../FL/Fl_Multi_Label.H Fluid_Image.o: ../FL/Fl_Pack.H Fluid_Image.o: ../FL/Fl_Pixmap.H Fluid_Image.o: ../FL/Fl_Plugin.H @@ -771,6 +780,7 @@ Fl_Button_Type.o: ../FL/Fl_Group.H Fl_Button_Type.o: ../FL/Fl_Image.H Fl_Button_Type.o: ../FL/Fl_Light_Button.H Fl_Button_Type.o: ../FL/Fl_Menu_Item.H +Fl_Button_Type.o: ../FL/Fl_Multi_Label.H Fl_Button_Type.o: ../FL/Fl_Pack.H Fl_Button_Type.o: ../FL/Fl_Pixmap.H Fl_Button_Type.o: ../FL/Fl_Plugin.H @@ -832,6 +842,7 @@ Fl_Function_Type.o: ../FL/Fl_Menu.H Fl_Function_Type.o: ../FL/Fl_Menu_.H Fl_Function_Type.o: ../FL/Fl_Menu_Button.H Fl_Function_Type.o: ../FL/Fl_Menu_Item.H +Fl_Function_Type.o: ../FL/Fl_Multi_Label.H Fl_Function_Type.o: ../FL/Fl_Pack.H Fl_Function_Type.o: ../FL/Fl_Pixmap.H Fl_Function_Type.o: ../FL/Fl_Plugin.H @@ -899,6 +910,7 @@ Fl_Grid_Type.o: ../FL/Fl_Input.H Fl_Grid_Type.o: ../FL/Fl_Input_.H Fl_Grid_Type.o: ../FL/Fl_Menu_.H Fl_Grid_Type.o: ../FL/Fl_Menu_Item.H +Fl_Grid_Type.o: ../FL/Fl_Multi_Label.H Fl_Grid_Type.o: ../FL/Fl_Pack.H Fl_Grid_Type.o: ../FL/Fl_Pixmap.H Fl_Grid_Type.o: ../FL/Fl_Plugin.H @@ -950,6 +962,7 @@ Fl_Group_Type.o: ../FL/Fl_Group.H Fl_Group_Type.o: ../FL/Fl_Image.H Fl_Group_Type.o: ../FL/Fl_Menu_Item.H Fl_Group_Type.o: ../FL/fl_message.H +Fl_Group_Type.o: ../FL/Fl_Multi_Label.H Fl_Group_Type.o: ../FL/Fl_Pack.H Fl_Group_Type.o: ../FL/Fl_Pixmap.H Fl_Group_Type.o: ../FL/Fl_Plugin.H @@ -1065,6 +1078,7 @@ Fl_Type.o: ../FL/Fl_Group.H Fl_Type.o: ../FL/Fl_Image.H Fl_Type.o: ../FL/Fl_Menu.H Fl_Type.o: ../FL/Fl_Menu_Item.H +Fl_Type.o: ../FL/Fl_Multi_Label.H Fl_Type.o: ../FL/Fl_Pack.H Fl_Type.o: ../FL/Fl_Pixmap.H Fl_Type.o: ../FL/Fl_Plugin.H @@ -1138,6 +1152,7 @@ Fl_Widget_Type.o: ../FL/Fl_Menu_Bar.H Fl_Widget_Type.o: ../FL/Fl_Menu_Button.H Fl_Widget_Type.o: ../FL/Fl_Menu_Item.H Fl_Widget_Type.o: ../FL/fl_message.H +Fl_Widget_Type.o: ../FL/Fl_Multi_Label.H Fl_Widget_Type.o: ../FL/Fl_Native_File_Chooser.H Fl_Widget_Type.o: ../FL/Fl_Pack.H Fl_Widget_Type.o: ../FL/Fl_Pixmap.H @@ -1235,6 +1250,7 @@ Fl_Window_Type.o: ../FL/Fl_Menu_.H Fl_Window_Type.o: ../FL/Fl_Menu_Button.H Fl_Window_Type.o: ../FL/Fl_Menu_Item.H Fl_Window_Type.o: ../FL/fl_message.H +Fl_Window_Type.o: ../FL/Fl_Multi_Label.H Fl_Window_Type.o: ../FL/Fl_Native_File_Chooser.H Fl_Window_Type.o: ../FL/Fl_Overlay_Window.H Fl_Window_Type.o: ../FL/Fl_Pack.H @@ -1318,6 +1334,7 @@ function_panel.o: ../FL/Fl_Light_Button.H function_panel.o: ../FL/Fl_Menu_.H function_panel.o: ../FL/Fl_Menu_Button.H function_panel.o: ../FL/Fl_Menu_Item.H +function_panel.o: ../FL/Fl_Multi_Label.H function_panel.o: ../FL/Fl_Pixmap.H function_panel.o: ../FL/Fl_Plugin.H function_panel.o: ../FL/Fl_Preferences.H @@ -1469,6 +1486,7 @@ shell_command.o: ../FL/Fl_Menu_Bar.H shell_command.o: ../FL/Fl_Menu_Button.H shell_command.o: ../FL/Fl_Menu_Item.H shell_command.o: ../FL/fl_message.H +shell_command.o: ../FL/Fl_Multi_Label.H shell_command.o: ../FL/Fl_Native_File_Chooser.H shell_command.o: ../FL/Fl_Pack.H shell_command.o: ../FL/Fl_Pixmap.H @@ -1537,6 +1555,7 @@ sourceview_panel.o: ../FL/Fl_Input_.H sourceview_panel.o: ../FL/Fl_Light_Button.H sourceview_panel.o: ../FL/Fl_Menu_.H sourceview_panel.o: ../FL/Fl_Menu_Item.H +sourceview_panel.o: ../FL/Fl_Multi_Label.H sourceview_panel.o: ../FL/Fl_Pixmap.H sourceview_panel.o: ../FL/Fl_Plugin.H sourceview_panel.o: ../FL/Fl_Preferences.H @@ -1585,6 +1604,7 @@ template_panel.o: ../FL/Fl_Image.H template_panel.o: ../FL/Fl_Input.H template_panel.o: ../FL/Fl_Input_.H template_panel.o: ../FL/Fl_Menu_Item.H +template_panel.o: ../FL/Fl_Multi_Label.H template_panel.o: ../FL/Fl_Preferences.H template_panel.o: ../FL/Fl_Return_Button.H template_panel.o: ../FL/Fl_Shared_Image.H @@ -1618,6 +1638,7 @@ undo.o: ../FL/Fl_Image.H undo.o: ../FL/Fl_Menu_.H undo.o: ../FL/Fl_Menu_Bar.H undo.o: ../FL/Fl_Menu_Item.H +undo.o: ../FL/Fl_Multi_Label.H undo.o: ../FL/Fl_Pixmap.H undo.o: ../FL/Fl_Plugin.H undo.o: ../FL/Fl_Preferences.H @@ -1656,6 +1677,7 @@ widget_browser.o: ../FL/Fl_Export.H widget_browser.o: ../FL/Fl_Graphics_Driver.H widget_browser.o: ../FL/Fl_Image.H widget_browser.o: ../FL/Fl_Menu_Item.H +widget_browser.o: ../FL/Fl_Multi_Label.H widget_browser.o: ../FL/Fl_Pixmap.H widget_browser.o: ../FL/Fl_Plugin.H widget_browser.o: ../FL/Fl_Preferences.H diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 47d576ac3..80d829ce7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,7 @@ # # CMakeLists.txt to build the FLTK library using CMake (www.cmake.org) # -# Copyright 1998-2023 by Bill Spitzak and others. +# Copyright 1998-2024 by Bill Spitzak and others. # # This library is free software. Distribution and use rights are outlined in # the file "COPYING" which should have been included with this file. If this @@ -80,7 +80,6 @@ set (CPPFILES Fl_Scrollbar.cxx Fl_Shared_Image.cxx Fl_Shortcut_Button.cxx - Fl_Simple_Terminal.cxx Fl_Single_Window.cxx Fl_Slider.cxx Fl_Spinner.cxx diff --git a/src/Fl_Simple_Terminal.cxx b/src/Fl_Simple_Terminal.cxx deleted file mode 100644 index c7718dbf8..000000000 --- a/src/Fl_Simple_Terminal.cxx +++ /dev/null @@ -1,1061 +0,0 @@ -// -// A simple terminal widget for Fast Light Tool Kit (FLTK). -// -// Copyright 1998-2011 by Bill Spitzak and others. -// Copyright 2017 by Greg Ercolano. -// -// This library is free software. Distribution and use rights are outlined in -// the file "COPYING" which should have been included with this file. If this -// file is missing or damaged, see the license at: -// -// https://www.fltk.org/COPYING.php -// -// Please see the following page on how to report bugs and issues: -// -// https://www.fltk.org/bugs.php -// - -#include <ctype.h> /* isdigit */ -#include <string.h> /* memset */ -#include <stdlib.h> /* strtol */ -#include <FL/Fl_Simple_Terminal.H> -#include <FL/Fl.H> -#include <stdarg.h> -#include "flstring.h" - -#define STE_SIZE sizeof(Fl_Text_Display::Style_Table_Entry) - -// Default style table -// Simple ANSI style colors with an FL_COURIER font. -// Due to how the modulo works for 20 items, the first 10 map to 40 -// and the second 10 map to 30. -// -static const Fl_Text_Display::Style_Table_Entry builtin_stable[] = { - // FONT COLOR FONT FACE SIZE INDEX COLOR NAME ANSI ANSI MODULO INDEX - // ---------- --------------- ------ ------ -------------- -------- ----------------- - { 0x80808000, FL_COURIER, 14 }, // 0 - Bright Black \033[40m 0,20,40,.. - { 0xff000000, FL_COURIER, 14 }, // 1 - Bright Red \033[41m ^^ - { 0x00ff0000, FL_COURIER, 14 }, // 2 - Bright Green \033[42m - { 0xffff0000, FL_COURIER, 14 }, // 3 - Bright Yellow \033[43m - { 0x0000ff00, FL_COURIER, 14 }, // 4 - Bright Blue \033[44m - { 0xff00ff00, FL_COURIER, 14 }, // 5 - Bright Magenta \033[45m - { 0x00ffff00, FL_COURIER, 14 }, // 6 - Bright Cyan \033[46m - { 0xffffff00, FL_COURIER, 14 }, // 7 - Bright White \033[47m - { 0x00000000, FL_COURIER, 14 }, // 8 - x - { 0x00000000, FL_COURIER, 14 }, // 9 - x - { 0x00000000, FL_COURIER, 14 }, // 10 - Medium Black \033[30m 10,30,50,.. - { 0xbb000000, FL_COURIER, 14 }, // 11 - Medium Red \033[31m ^^ - { 0x00bb0000, FL_COURIER, 14 }, // 12 - Medium Green \033[32m - { 0xbbbb0000, FL_COURIER, 14 }, // 13 - Medium Yellow \033[33m - { 0x0000cc00, FL_COURIER, 14 }, // 14 - Medium Blue \033[34m - { 0xbb00bb00, FL_COURIER, 14 }, // 15 - Medium Magenta \033[35m - { 0x00bbbb00, FL_COURIER, 14 }, // 16 - Medium Cyan \033[36m - { 0xbbbbbb00, FL_COURIER, 14 }, // 17 - Medium White \033[37m (also "\033[0m" reset) - { 0x00000000, FL_COURIER, 14 }, // 18 - x - { 0x00000000, FL_COURIER, 14 } // 19 - x -}; -static const int builtin_stable_size = sizeof(builtin_stable); -static const char builtin_normal_index = 17; // the reset style index used by \033[0m - -// Count how many times character 'c' appears in string 's' -static int strcnt(const char *s, char c) { - int count = 0; - while ( *s ) { if ( *s++ == c ) ++count; } - return count; -} - -// --- Fl_Escape_Seq ---------------------------------------------------------- - -// Append char to buf[] safely (with bounds checking) -// Returns: -// success - ok -// fail - buffer full/overflow -// -int Fl_Simple_Terminal::Fl_Escape_Seq::append_buf(char c) { - if ( bufp_ >= bufendp_ ) return fail; // end of buffer reached? - *bufp_++ = c; - *bufp_ = 0; // keep buf[] null terminated - return success; -} - -// Append whatever integer string is at valbufp into vals_[] safely w/bounds checking -// Assumes valbufp points to a null terminated string. -// Returns: -// success - parsed ok -// fail - error occurred (non-integer, or vals_[] full) -// -int Fl_Simple_Terminal::Fl_Escape_Seq::append_val() { - if ( vali_ == maxvals ) { // too many vals_[] already? - return fail; // fail if vals_[] full - } - if ( !valbufp_ || (*valbufp_ == 0) ) { // no integer to parse? e.g. ESC[;m - vals_[vali_] = 0; // handle as if it was zero, e.g. ESC[0; - } else if ( sscanf(valbufp_, "%d", &vals_[vali_]) != 1 ) { // Parse integer into vals_[] - return fail; // fail if parsed a non-integer - } - if ( ++vali_ >= maxvals ) { // advance val index, fail if too many vals - vali_ = maxvals-1; // clamp - return fail; // fail - } - valbufp_ = 0; // parsed val ok, reset valbufp to NULL - return success; -} - -// Ctor -Fl_Simple_Terminal::Fl_Escape_Seq::Fl_Escape_Seq() { - reset(); -} - -// Reset the class -void Fl_Simple_Terminal::Fl_Escape_Seq::reset() { - esc_mode_ = 0; // disable ESC mode, so parse_in_progress() returns false - bufp_ = buf_; // point to beginning of buffer - bufendp_ = buf_ + (maxbuf - 1); // point to end of buffer - valbufp_ = 0; // disable val ptr (no vals parsed yet) - vali_ = 0; // zero val index - buf_[0] = 0; // null terminate buffer - vals_[0] = 0; // first val[] 0 -} - -// Return current escape mode. -// This is really only valid after parse() returns 'completed'. -// After a reset() this will return 0. -// -char Fl_Simple_Terminal::Fl_Escape_Seq::esc_mode() const { - return esc_mode_; -} - -// Set current escape mode. -void Fl_Simple_Terminal::Fl_Escape_Seq::esc_mode(char val) { - esc_mode_ = val; -} - -// Return the total vals parsed. -// This is really only valid after parse() returns 'completed'. -// -int Fl_Simple_Terminal::Fl_Escape_Seq::total_vals() const { - return vali_; -} - -// Return the value at index i. -// i is not range checked; it's assumed 0 <= i < total_vals(). -// It is only valid to call this after parse() returns 'completed'. -// -int Fl_Simple_Terminal::Fl_Escape_Seq::val(int i) const { - return vals_[i]; -} - -// See if we're in the middle of parsing an ESC sequence -bool Fl_Simple_Terminal::Fl_Escape_Seq::parse_in_progress() const { - return (esc_mode_ == 0) ? false : true; -} - -// Handle parsing an escape sequence. -// -// Call this only if parse_in_progress() is true. -// Passing ESC does a reset() and sets esc_mode() to ESC. -// When a full escape sequence has been parsed, 'completed' is returned (see below) -// -// Typical use pattern (this is unverified code, shown just to give a general gist): -// -// while ( *s ) { // walk text that may contain ESC sequences -// if ( *s == 0x1b ) { -// escseq.parse(*s++); // start parsing ESC seq (does a reset()) -// continue; -// } else if ( escseq.parse_in_progress() ) { // continuing to parse an ESC seq? -// switch (escseq.parse(*s++)) { // parse char, advance s.. -// case fail: escseq.reset(); continue; // failed? reset, continue.. -// case success: continue; // keep parsing.. -// case completed: // parsed complete esc sequence? -// break; -// } -// // Handle parsed esc sequence here.. -// switch ( escseq.esc_mode() ) { -// case 'm': // ESC[...m? -// for ( int i=0; i<escseq.total_vals(); i++ ) { -// int val = escseq.val(i); -// ..handle values here.. -// } -// break; -// case 'J': // ESC[#J? -// ..handle.. -// break; -// } -// escseq.reset(); // done handling escseq, reset() -// continue; -// } else { -// ..handle non-escape chars here.. -// } -// ++s; // advance thru string -// } -// -// Returns: -// fail - error occurred: escape sequence invalid, class is reset() -// success - parsing ESC sequence OK so far, still in progress/not done yet -// completed - complete ESC sequence was parsed, esc_mode() will be, e.g. -// 'm' - ESC[#;#..m sequence parsed, val() has value(s) parsed -// 'J' - ESC[#J sequence parsed, val() has value(s) parsed -// 'A' thru 'D' - cursor up/down/right/left movement (ESC A/B/C/D) -// -int Fl_Simple_Terminal::Fl_Escape_Seq::parse(char c) { - // NOTE: During parsing esc_mode() will be: - // 0 - reset/not parsing - // 0x1b - ESC received, expecting next one of A/B/C/D or '[' - // '[' - actively parsing CSI sequence, e.g. ESC[ - // - // At the /end/ of parsing, after 'completed' is returned, - // esc_mode() will be the mode setting char, e.g. 'm' for 'ESC[0m', etc. - // - if ( c == 0 ) { // NULL? (caller should really never send us this) - return success; // do nothing -- leave state unchanged, return 'success' - } else if ( c == 0x1b ) { // ESC at ANY time resets class/begins new ESC sequence - reset(); - esc_mode(0x1b); - if ( append_buf(c) < 0 ) goto pfail; // save ESC in buf - return success; - } else if ( c < ' ' || c >= 0x7f ) { // any other control or binary characters? - goto pfail; // reset + fail out of esc sequence parsing - } - - // Whatever the character is, handle it depending on esc_mode.. - if ( esc_mode() == 0x1b ) { // in ESC mode? - if ( c == '[' ) { // ESC[? - esc_mode(c); // switch to parsing mode for ESC[#;#;#.. - vali_ = 0; // zero vals_[] index - valbufp_ = 0; // valbufp NULL (no vals yet) - if ( append_buf(c) < 0 ) goto pfail; // save '[' in buf - return success; // success - } else if ( c >= 'A' && c <= 'D' ) { // ESC A/B/C/D? (cursor movement?) - esc_mode(c); // use as mode - vali_ = 0; - if ( append_buf(c) < 0 ) goto pfail; // save A/B/C/D in buf - return success; // success - } else { // ESCx? not supported - goto pfail; - } - } else if ( esc_mode() == '[' ) { // '[' mode? e.g. ESC[... - if ( c == ';' ) { // ';' indicates end of a value, e.g. ESC[0;2.. - if (append_val() < 0 ) goto pfail; // append value parsed so far, vali gets inc'ed - if (append_buf(c) < 0 ) goto pfail; // save ';' in buf - return success; - } - if ( isdigit(c) ) { // parsing an integer? - if ( !valbufp_ ) // valbufp not set yet? - { valbufp_ = bufp_; } // point to first char in integer string - if ( append_buf(c) < 0 ) goto pfail; // add value to buffer - return success; - } - // Not a ; or digit? fall thru to [A-Z,a-z] check - } else { // all other esc_mode() chars are fail/unknown - goto pfail; - } - if ( ( c >= 'A' && c<= 'Z') || // ESC#X or ESC[...X, where X is [A-Z,a-z]? - ( c >= 'a' && c<= 'z') ) { - if (append_val() < 0 ) goto pfail; // append any trailing vals just before letter - if (append_buf(c) < 0 ) goto pfail; // save letter in buffer - esc_mode(c); // change mode to the mode setting char - if ( vali_ == 0 ) { // no vals were specified? assume 0 (e.g. ESC[J? assume ESC[0J) - vals_[vali_++] = 0; // force vals_[0] to be 0, and vali = 1; - } - return completed; // completed/done - } - // Any other chars? reset+fail -pfail: - reset(); - return fail; -} - -// -// --- Fl_Simple_Terminal ----------------------------------------------------- -// - -// Vertical scrollbar callback intercept -void Fl_Simple_Terminal::vscroll_cb2(Fl_Widget *w, void*) { - scrolling_ = 1; - orig_vscroll_cb_(w, orig_vscroll_data_); - scrollaway_ = (mVScrollBar->value() != mVScrollBar->maximum()); - scrolling_ = 0; -} -void Fl_Simple_Terminal::vscroll_cb(Fl_Widget *w, void *data) { - Fl_Simple_Terminal *o = (Fl_Simple_Terminal*)data; - o->vscroll_cb2(w,(void*)0); -} - -/** - Creates a new Fl_Simple_Terminal widget that can be a child of other FLTK widgets. -*/ -Fl_Simple_Terminal::Fl_Simple_Terminal(int X,int Y,int W,int H,const char *l) : Fl_Text_Display(X,Y,W,H,l) { - history_lines_ = 500; // something 'reasonable' - stay_at_bottom_ = true; - lines_ = 0; // note: lines!=mNBufferLines when lines are wrapping - scrollaway_ = false; - scrolling_ = false; - // These defaults similar to typical DOS/unix terminals - textfont(FL_COURIER); - color(FL_BLACK); - textcolor(FL_WHITE); - selection_color(FL_YELLOW); // default dark blue looks bad for black background - show_cursor(true); - cursor_color(FL_GREEN); - cursor_style(Fl_Text_Display::BLOCK_CURSOR); - // Setup text buffer - buf = new Fl_Text_Buffer(); - buffer(buf); - sbuf = new Fl_Text_Buffer(); // allocate whether we use it or not - // XXX: We use WRAP_AT_BOUNDS to prevent the hscrollbar from /always/ - // being present, an annoying UI bug in Fl_Text_Display. - wrap_mode(Fl_Text_Display::WRAP_AT_BOUNDS, 0); - // Style table - stable_ = &builtin_stable[0]; - stable_size_ = builtin_stable_size; - normal_style_index_ = builtin_normal_index; - current_style_index_ = builtin_normal_index; - current_style_ = 'A' + 0; - // ANSI escape seq - ansi_ = false; - ansi_show_unknown_ = false; - // Intercept vertical scrolling - orig_vscroll_cb_ = mVScrollBar->callback(); - orig_vscroll_data_ = mVScrollBar->user_data(); - mVScrollBar->callback(vscroll_cb, (void*)this); -} - -/** - Destructor for this widget; removes any internal allocations - for the terminal, including text buffer, style buffer, etc. -*/ -Fl_Simple_Terminal::~Fl_Simple_Terminal() { - buffer(0); // disassociate buffer /before/ we delete it - if ( buf ) { delete buf; buf = 0; } - if ( sbuf ) { delete sbuf; sbuf = 0; } -} - -/** - Gets the current value of the stay_at_bottom(bool) flag. - - When true, the terminal tries to keep the scrollbar scrolled - to the bottom when new text is added. - - \see stay_at_bottom(bool) -*/ -bool Fl_Simple_Terminal::stay_at_bottom() const { - return stay_at_bottom_; -} - -/** - Configure the terminal to remain scrolled to the bottom when possible, - chasing the end of the buffer whenever new text is added. - - If disabled, the terminal behaves more like a text display widget; - the scrollbar does not chase the bottom of the buffer. - - If the user scrolls away from the bottom, this 'chasing' feature is - temporarily disabled. This prevents the user from having to fight - the scrollbar chasing the end of the buffer while browsing when - new text is also being added asynchronously. When the user returns the - scroller to the bottom of the display, the chasing behavior resumes. - - The default is 'true'. -*/ -void Fl_Simple_Terminal::stay_at_bottom(bool val) { - if ( stay_at_bottom_ == val ) return; // no change - stay_at_bottom_ = val; - if ( stay_at_bottom_ ) enforce_stay_at_bottom(); -} - -/** - Get the maximum number of terminal history lines last set by history_lines(int). - - -1 indicates an unlimited scroll history. - - \see history_lines(int) -*/ -int Fl_Simple_Terminal::history_lines() const { - return history_lines_; -} - -/** - Sets the maximum number of lines for the terminal history. - - The new limit value is automatically enforced on the current screen - history, truncating off any lines that exceed the new limit. - - When a limit is set, the buffer is trimmed as new text is appended, - ensuring the buffer never displays more than the specified number of lines. - - The default maximum is 500 lines. - - \param maxlines Maximum number of lines kept on the terminal buffer history. - Use -1 for an unlimited scroll history. - A value of 0 is not recommended. -*/ -void Fl_Simple_Terminal::history_lines(int maxlines) { - history_lines_ = maxlines; - enforce_history_lines(); -} - -/** - Get the state of the ANSI flag which enables/disables - the handling of ANSI sequences in text. - - When true, ANSI sequences in the text stream control color, font - and font sizes of text (e.g. "\033[41mThis is Red\033[0m"). - For more info, see ansi(bool). - - \see ansi(bool) -*/ -bool Fl_Simple_Terminal::ansi() const { - return ansi_; -} - -/** - Enable/disable support of ANSI sequences like "\033[31m", which sets the - color/font/weight/size of any text that follows. - - If enabled, ANSI sequences of the form "\033[#m" can be used to change - font color, face, and size, where '#' is an index number into the current - style table. These "escape sequences" are hidden from view. - - If disabled, the textcolor() / textfont() / textsize() methods define - the color and font for all text in the terminal. ANSI sequences are not - handled specially, and rendered as raw text. - - A built-in style table is provided, but you can configure a custom style table - using style_table(Style_Table_Entry*,int,int) for your own colors and fonts. - - The built-in style table supports these ANSI sequences: - - ANSI Sequence Color Name Font Face + Size Remarks - ------------- -------------- ---------------- ----------------------- - "\033[0m" "Normal" FL_COURIER, 14 Resets to default color/font/weight/size - "\033[30m" Medium Black FL_COURIER, 14 - "\033[31m" Medium Red FL_COURIER, 14 - "\033[32m" Medium Green FL_COURIER, 14 - "\033[33m" Medium Yellow FL_COURIER, 14 - "\033[34m" Medium Blue FL_COURIER, 14 - "\033[35m" Medium Magenta FL_COURIER, 14 - "\033[36m" Medium Cyan FL_COURIER, 14 - "\033[37m" Medium White FL_COURIER, 14 The color when "\033[0m" reset is used - "\033[40m" Bright Black FL_COURIER, 14 - "\033[41m" Bright Red FL_COURIER, 14 - "\033[42m" Bright Green FL_COURIER, 14 - "\033[43m" Bright Yellow FL_COURIER, 14 - "\033[44m" Bright Blue FL_COURIER, 14 - "\033[45m" Bright Magenta FL_COURIER, 14 - "\033[46m" Bright Cyan FL_COURIER, 14 - "\033[47m" Bright White FL_COURIER, 14 - - Here's example code demonstrating the use of ANSI codes to select - the built-in colors, and how it looks in the terminal: - - \image html simple-terminal-default-ansi.png "Fl_Simple_Terminal built-in ANSI sequences" - \image latex simple-terminal-default-ansi.png "Fl_Simple_Terminal built-in ANSI sequences" width=4cm - - \note Changing the ansi(bool) value clears the buffer and forces a redraw(). - \note Enabling ANSI mode overrides textfont(), textsize(), textcolor() - completely, which are controlled instead by current_style_index() - and the current style_table(). - \see style_table(Style_Table_Entry*,int,int), - current_style_index(), - normal_style_index() -*/ -void Fl_Simple_Terminal::ansi(bool val) { - ansi_ = val; - clear(); - if ( ansi_ ) { - highlight_data(sbuf, stable_, stable_size_/STE_SIZE, 'A', 0, 0); - } else { - // XXX: highlight_data(0,0,0,'A',0,0) can crash, so to disable - // we use sbuf + builtin_stable but /set nitems to 0/. - highlight_data(sbuf, builtin_stable, 0, 'A', 0, 0); - } - redraw(); -} - -/** - See if we should show unknown ANSI sequences with '¿' or not. - \see ansi_show_unknown(bool) -*/ -bool Fl_Simple_Terminal::ansi_show_unknown(void) const { - return ansi_show_unknown_; -} - -/** - Enable showing unknown ESC sequences with the '¿' character. - By default this is off, and unknown escape sequences are silently ignored. - \see ansi_show_unknown() -*/ -void Fl_Simple_Terminal::ansi_show_unknown(bool val) { - ansi_show_unknown_ = val; -} - -/** - Return the current style table being used. - - This is the value last passed as the 1st argument to - style_table(Style_Table_Entry*,int,int). If no style table - was defined, the built-in style table is returned. - - ansi(bool) must be set to 'true' for the style table to be used at all. - - \see style_table(Style_Table_Entry*,int,int) -*/ -const Fl_Text_Display::Style_Table_Entry *Fl_Simple_Terminal::style_table() const { - return stable_; -} - -/** - Return the current style table's size (in bytes). - - This is the value last passed as the 2nd argument to - style_table(Style_Table_Entry*,int,int). -*/ -int Fl_Simple_Terminal::style_table_size() const { - return stable_size_; -} - -/** - Sets the style table index used by the ANSI terminal reset - sequence "\033[0m", which resets the current drawing - color/font/weight/size to "normal". - - Effective only when ansi(bool) is 'true'. - - \see ansi(bool), style_table(Style_Table_Entry*,int,int) - \note Changing this value does *not* change the current drawing color. - To change that, use current_style_index(int). -*/ -void Fl_Simple_Terminal::normal_style_index(int val) { - // Wrap index to ensure it's never larger than table - normal_style_index_ = val % (stable_size_ / STE_SIZE); -} - -/** - Gets the style table index used by the ANSI terminal reset - sequence "\033[0m". - - This is the value last set by normal_style_index(int), or as set by - the 3rd argument to style_table(Style_Table_Entry*,int,int). - - \see normal_style_index(int), ansi(bool), style_table(Style_Table_Entry*,int,int) -*/ -int Fl_Simple_Terminal::normal_style_index() const { - return normal_style_index_; -} - -/** - Set the style table index used as the current drawing - color/font/weight/size for new text. - - For example: - \code - : - tty->ansi(true); - tty->append("Some normal text.\n"); - tty->current_style_index(2); // same as "\033[2m" - tty->append("This text will be green.\n"); - tty->current_style_index(tty->normal_style_index()); // same as "\033[0m" - tty->append("Back to normal text.\n"); - : - \endcode - - This value can also be changed by an ANSI sequence like "\033[#m", - where # would be a new style index value. So if the application executes: - <tt>term->append("\033[4mTesting")</tt>, then current_style_index() - will be left set to 4. - - The index number specified should be within the number of items in the - current style table. Values larger than the table will be clamped to - the size of the table with a modulus operation. - - Effective only when ansi(bool) is 'true'. -*/ -void Fl_Simple_Terminal::current_style_index(int val) { - // Wrap index to ensure it's never larger than table - current_style_index_ = abs(val) % (stable_size_ / STE_SIZE); - current_style_ = 'A' + current_style_index_; -} - -/** - Get the style table index used as the current drawing - color/font/weight/size for new text. - - This value is also controlled by the ANSI sequence "\033[#m", - where # would be a new style index value. So if the application executes: - <tt>term->append("\033[4mTesting")</tt>, then current_style_index() - returns 4. - - \see current_style_index(int) -*/ -int Fl_Simple_Terminal::current_style_index() const { - return current_style_index_; -} - -/** - Get the current style char used for style buffer. - This character appends in parallel with any text in the text buffer - to specify the per-character styling. This is typically 'A' for the - first entry, 'B' for the second entry, etc. - - This value is changed by current_style_index(int). - \see current_style_index(int) -*/ -int Fl_Simple_Terminal::current_style() const { - return current_style_; -} - -/** - Set a user defined style table, which controls the font colors, - faces, weights and sizes available for the terminal's text content. - - ansi(bool) must be set to 'true' for the defined style table - to be used at all. - - If 'stable' is NULL, then the "built in" style table is used. - For info about the built-in colors, see ansi(bool). - - Which style table entry used for drawing depends on the value last set - by current_style_index(), or by the ANSI sequence "\033[#m", where '#' - is the index into the style table array, the index limited to the size - of the array via modulus. - - If the index# passed via "\033[#m" is larger than the number of elements - in the table, the value is clamped via modulus. So for a 10 element table, - the following ANSI codes would all be equivalent, selecting the 5th element - in the table: "\033[5m", "\033[15m", "\033[25m", etc. This is because - 5==(15%10)==(25%10), etc. - - A special exception is made for "\033[0m", which is supposed to "reset" - the current style table to default color/font/weight/size, as last set by - \p normal_style_index, or by the API method normal_style_index(int). - - In cases like the built-in style table, where the 17th item is the - "normal" color, the 'normal_style_index' is set to 17 so that "\033[0m" - resets to that color, instead of the first element in the table. - - If you want "\033[0m" to simply pick the first element in the table, - then set 'normal_style_index' to 0. - - An example of defining a custom style table (white courier 14, red courier 14, - and white helvetica 14): - \code - int main() { - : - // Our custom style table - Fl_Text_Display::Style_Table_Entry mystyle[] = { - // Font Color Font Face Font Size Index ANSI Sequence - // ---------- ---------------- --------- ----- ------------- - { FL_WHITE, FL_COURIER_BOLD, 14 }, // 0 "\033[0m" ("default") - { FL_RED, FL_COURIER_BOLD, 14 }, // 1 "\033[1m" - { FL_WHITE, FL_HELVETICA, 14 } // 2 "\033[2m" - }; - // Create terminal, enable ANSI and our style table - tty = new Fl_Simple_Terminal(..); - tty->ansi(true); // enable ANSI codes - tty->style_table(&mystyle[0], sizeof(mystyle), 0); // use our custom style table - : - // Now write to terminal, with ANSI that uses our style table - tty->printf("\033[0mNormal Text\033[1mRed Courier Text\n"); - tty->append("\033[2mWhite Helvetica\033[0mBack to normal.\n"); - : - \endcode - - \note Changing the style table clear()s the terminal. - \note You currently can't control /background/ color of text, - a limitation of Fl_Text_Display's current implementation. - \note The caller is responsible for managing the memory of the style table. - \note Until STR#3412 is repaired, Fl_Text_Display has scrolling bug if the - style table's font size != textsize() - - \param stable - the style table, an array of structs of the type - Fl_Text_Display::Style_Table_Entry. Can be NULL - to use the default style table (see ansi(bool)). - \param stable_size - the sizeof() the style table (in bytes). - Set this to 0 if 'stable' is NULL. - \param normal_style_index - the style table index# used when the special - ANSI sequence "\033[0m" is encountered. - Normally use 0 so that sequence selects the - first item in the table. Only use different - values if a different entry in the table - should be the default. This value should - not be larger than the number of items in - the table, or it will be clamped with a - modulus operation. This value is ignored - if stable is NULL. -*/ -void Fl_Simple_Terminal::style_table(Fl_Text_Display::Style_Table_Entry *stable, - int stable_size, int normal_style_index) { - // Wrap index to ensure it's never larger than table - normal_style_index = abs(normal_style_index) % (stable_size/STE_SIZE); - - if ( stable_ == 0 ) { - // User wants built-in style table? - stable_ = &builtin_stable[0]; - stable_size_ = builtin_stable_size; - normal_style_index_ = builtin_normal_index; // set the index used by \033[0m - current_style_index_ = builtin_normal_index; // set the index used for drawing new text - } else { - // User supplying custom style table - stable_ = stable; - stable_size_ = stable_size; - normal_style_index_ = normal_style_index; // set the index used by \033[0m - current_style_index_ = normal_style_index; // set the index used for drawing new text - } - clear(); // don't take any chances with old style info - highlight_data(sbuf, stable_, stable_size/STE_SIZE, 'A', 0, 0); -} - -/** - Scroll to last line unless someone has manually scrolled - the vertical scrollbar away from the bottom. - - This is a protected member called automatically by the public API functions. - Only internal methods or subclasses adjusting the internal buffer directly - should need to call this. -*/ -void Fl_Simple_Terminal::enforce_stay_at_bottom() { - if ( stay_at_bottom_ && buffer() && !scrollaway_ ) { - scroll(mNBufferLines, 0); - } -} - -/** - Enforce 'history_lines' limit on the history buffer by trimming off - lines from the top of the buffer. - - This is a protected member called automatically by the public API functions. - Only internal methods or subclasses adjusting the internal buffer directly - should need to call this. -*/ -void Fl_Simple_Terminal::enforce_history_lines() { - if ( history_lines() > -1 && lines_ > history_lines() ) { - int trimlines = lines_ - history_lines(); - remove_lines(0, trimlines); // remove lines from top - } -} - -/** - Destructive backspace from end of existing buffer() for specified \p count characters. - Takes into account multi-byte (Unicode) chars. So if count is 3, last 3 chars - are deleted from end of buffer. -*/ -void Fl_Simple_Terminal::backspace_buffer(unsigned int count) { - if ( count == 0 ) return; - int end = buf->length(); // find end of buffer - int pos = end; // pos index starts at end, walks backwards - while ( count-- ) { // repeat backspace operation until done - pos = buf->prev_char(pos); // move back one full char (unicode safe) - if ( pos < 0 ) { // bs beyond beginning of buffer? done - pos = 0; - break; - } - } - // Remove chars we backspaced over - buf->remove(pos, end); - sbuf->remove(pos, end); -} - -/** - Handle a Unicode aware backspace. - This flushes the string parsed so far to Fl_Text_Display, - then lets Fl_Text_Display handle the unicode aware backspace. -*/ -void Fl_Simple_Terminal::handle_backspace() { - // FLUSH TEXT TO TEXT DISPLAY - // This prevents any Unicode multibyte char split across - // our string buffer and Fl_Text_Display, and also allows - // Fl_Text_Display to handle unicode aware backspace. - - // 1) Null temrinate buffers - *ntp_ = 0; - *nsp_ = 0; - // 2) Flush text to Fl_Text_Display - buf->append(ntm_); // flush text to FTD - sbuf->append(nsm_); // flush style to FTD - // 3) Rewind buffer and sp, restore saved chars - ntp_ = ntm_; - nsp_ = nsm_; - // 4) Let Fl_Text_Display handle unicode aware backspace - backspace_buffer(1); -} - -// Handle unknown esc sequences -void Fl_Simple_Terminal::unknown_escape() { - if ( ansi_show_unknown() ) { - for ( const char *s = "¿"; *s; s++ ) { - *ntp_++ = *s; // emit utf-8 encoded char - *nsp_++ = current_style(); // use current style - } - } -} - -/** - Handle appending string with ANSI escape sequences, and other 'special' - character processing (such as backspaces). - - \p s -- the string containing ANSI codes to be appended - - \p len -- the length of the string to be appended, or -1 for a NULL terminated string. -*/ -void Fl_Simple_Terminal::append_ansi(const char *s, int len) { - int nstyles = stable_size_ / STE_SIZE; - if ( len < 0 ) len = (int)strlen(s); - // ntm/tsm - new text buffer (after ansi codes parsed+removed) - ntm_ = (char*)malloc(len+1); // new text memory - ntp_ = ntm_; // new text ptr - nsm_ = (char*)malloc(len+1); // new style memory - nsp_ = nsm_; // new style ptr - // Walk user's string looking for codes, modify new text/style text as needed - const char *sp = s; - while ( *sp && --len >= 0 ) { // walk string until NULL or len reached - if (*sp == 0x1b ) { // start of ESC sequence? - escseq.parse(*sp++); // start parsing.. - continue; - } - if ( escseq.parse_in_progress() ) { // ESC sequence in progress? - switch ( escseq.parse(*sp) ) { // parse until completed or fail - case Fl_Escape_Seq::fail: // parsing error? - unknown_escape(); - escseq.reset(); // ..reset and continue - ++sp; - continue; - case Fl_Escape_Seq::success: // parsed ok / still in progress - ++sp; - continue; - case Fl_Escape_Seq::completed: // completed parsing ESC sequence? - break; - } - // Escape sequence completed ok? handle it - // Walk all values parsed from ESC[#;#;#..x - // - for ( int i=0; i<escseq.total_vals(); i++ ) { - int val = escseq.val(i); - switch (escseq.esc_mode() ) { - // ERASE IN DISPLAY (ED) - case 'J': // ESC[#J - switch (val) { - case 0: // ESC[0J -- clear to eol - unknown_escape(); - break; - case 1: // ESC[1J -- clear to sol - unknown_escape(); - break; - case 2: // ESC[2J -- clear visible screen - // NOTE: Currently we clear the /entire screen history/, and - // moves cursor to the top of buffer. - // - // ESC[2J should really only clear the /visible display/ - // not affecting screen history or cursor position. - // - clear(); // clear text buffer - ntp_ = ntm_; // clear text contents accumulated so far - nsp_ = nsm_; // clear style contents "" - break; - default: // all other ESC[#J unsupported - unknown_escape(); - break; - } - break; - // SELECT GRAPHIC RENDITION (SGR) - case 'm': - if ( val == 0 ) { // ESC[0m? (reset color) - // Switch to "normal color" - current_style_index(normal_style_index_); - } else { // ESC[#m? (set some specific color) - // Use modulus to map into styles[] buffer - current_style_index(val % nstyles); - } - break; - // UNSUPPORTED MODES - default: - unknown_escape(); - break; // unsupported - } - } - escseq.reset(); // reset after handling escseq - ++sp; // advance thru string - continue; - } else if ( *sp == 8 ) { // backspace? - handle_backspace(); - sp++; - } else { // Not ANSI or backspace? append to display - if ( *sp == '\n' ) ++lines_; // crlf? keep track of #lines - *ntp_++ = *sp++; // pass char thru - *nsp_++ = current_style(); // use current style - } - } // while - *ntp_ = 0; - *nsp_ = 0; - //::printf(" RESULT: ntm='%s'\n", ntm_); - //::printf(" RESULT: nsm='%s'\n", nsm_); - buf->append(ntm_); // new text memory - sbuf->append(nsm_); // new style memory - free(ntm_); - free(nsm_); -} - -/** - Appends new string 's' of length 'len' to terminal. - - The string can contain UTF-8, crlf's. - And if ansi(bool) is set to 'true', ANSI 'ESC' sequences (such as ESC[1m) - and other control characters (such as backspace) are handled. - - \param s string to append. - - \param len optional length of string can be specified if known - to save the internals from having to call strlen(). - If -1 is specified for len, strlen(s) is used to find the length. - - \see printf(), vprintf(), text(), clear() -*/ -void Fl_Simple_Terminal::append(const char *s, int len) { - // Remove ansi codes and adjust style buffer accordingly. - if ( ansi() ) { - append_ansi(s, len); - } else { - // raw append - buf->append(s, len); - lines_ += ::strcnt(s, '\n'); // count total line feeds in string added - } - enforce_history_lines(); - enforce_stay_at_bottom(); -} - -/** - Replaces the terminal with new text content in string 's'. - - The string can contain UTF-8, crlf's, and ANSI sequences are - also supported when ansi(bool) is set to 'true'. - - Old terminal content is completely cleared. - - \param s string to append. - - \param len optional length of string can be specified if known - to save the internals from having to call strlen() - If -1 is specified for len, strlen(s) is used to find the length. - - \see append(), printf(), vprintf(), clear() - -*/ -void Fl_Simple_Terminal::text(const char *s, int len) { - clear(); - append(s, len); -} - -/** - Returns entire text content of the terminal as a single string. - - This includes the screen history, as well as the visible - onscreen content. -*/ -const char* Fl_Simple_Terminal::text() const { - return buf->text(); -} - -/** - Appends printf formatted messages to the terminal. - - The string can contain UTF-8, crlf's, and ANSI sequences are - also supported when ansi(bool) is set to 'true'. - - Example: - \code - #include <FL/Fl_Simple_Terminal.H> - int main(..) { - : - // Create a simple terminal, and append some messages to it - Fl_Simple_Terminal *tty = new Fl_Simple_Terminal(..); - : - // Append three lines of formatted text to the buffer - tty->printf("The current date is: %s.\nThe time is: %s\n", date_str, time_str); - tty->printf("The current PID is %ld.\n", (long)getpid()); - : - \endcode - \note See Fl_Text_Buffer::vprintf() for limitations. - \param[in] fmt is a printf format string for the message text. -*/ -void Fl_Simple_Terminal::printf(const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - Fl_Simple_Terminal::vprintf(fmt, ap); - va_end(ap); -} - -/** - Appends printf formatted messages to the terminal. - - Subclasses can use this to implement their own printf() - functionality. - - The string can contain UTF-8, crlf's, and ANSI sequences are - also supported when ansi(bool) is set to 'true'. - - \note The expanded string is currently limited to 1024 characters. - \param fmt is a printf format string for the message text. - \param ap is a va_list created by va_start() and closed with va_end(), - which the caller is responsible for handling. -*/ -void Fl_Simple_Terminal::vprintf(const char *fmt, va_list ap) { - char buffer[1024]; // XXX: should be user configurable.. - ::vsnprintf(buffer, 1024, fmt, ap); - buffer[1024-1] = 0; // XXX: MICROSOFT - append(buffer); - enforce_history_lines(); -} - -/** - Clears the terminal's screen and history. Cursor moves to top of window. -*/ -void Fl_Simple_Terminal::clear() { - buf->text(""); - sbuf->text(""); - lines_ = 0; -} - -/** - Remove the specified range of lines from the terminal, starting - with line 'start' and removing 'count' lines. - - This method is used to enforce the history limit. - - \param start -- starting line to remove - \param count -- number of lines to remove -*/ -void Fl_Simple_Terminal::remove_lines(int start, int count) { - int spos = skip_lines(0, start, true); - int epos = skip_lines(spos, count, true); - if ( ansi() ) { - buf->remove(spos, epos); - sbuf->remove(spos, epos); - } else { - buf->remove(spos, epos); - } - lines_ -= count; - if ( lines_ < 0 ) lines_ = 0; -} - -/** - Draws the widget, including a cursor at the end of the buffer. - This is needed since currently Fl_Text_Display doesn't provide - a reliable way to always do this. -*/ -void Fl_Simple_Terminal::draw() { - // XXX: To do this right, we have to steal some of Fl_Text_Display's internal - // magic numbers to do it right, e.g. LEFT_MARGIN, RIGHT_MARGIN.. :/ - // -#define LEFT_MARGIN 3 -#define RIGHT_MARGIN 3 - int buflen = buf->length(); - // Force cursor to EOF so it doesn't draw at user's last left-click - insert_position(buflen); - // Let widget draw itself - Fl_Text_Display::draw(); - // Now draw cursor at the end of the buffer - fl_push_clip(text_area.x-LEFT_MARGIN, - text_area.y, - text_area.w+LEFT_MARGIN+RIGHT_MARGIN, - text_area.h); - int X = 0, Y = 0; - if (position_to_xy(buflen, &X, &Y)) draw_cursor(X, Y); - fl_pop_clip(); -} diff --git a/src/Makefile b/src/Makefile index f95ce2fec..6a9692097 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,7 +1,7 @@ # # Library Makefile for the Fast Light Tool Kit (FLTK). # -# Copyright 1998-2023 by Bill Spitzak and others. +# Copyright 1998-2024 by Bill Spitzak and others. # # This library is free software. Distribution and use rights are outlined in # the file "COPYING" which should have been included with this file. If this @@ -84,7 +84,6 @@ CPPFILES = \ Fl_Scrollbar.cxx \ Fl_Shared_Image.cxx \ Fl_Shortcut_Button.cxx \ - Fl_Simple_Terminal.cxx \ Fl_Single_Window.cxx \ Fl_Slider.cxx \ Fl_Spinner.cxx \ @@ -332,7 +331,7 @@ WLX11CPPFILES = \ fl_dnd_x.cxx \ Fl_get_key.cxx - + # fl_dnd_x.cxx Fl_Native_File_Chooser_GTK.cxx # This C file is used under condition: BUILD_X11 @@ -353,7 +352,7 @@ XLIBFONTFILES = \ XLIBXFTFILES = \ drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx \ drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx - + # This C file is used under condition: BUILD_WAYLAND WLCFILES = \ xutf8/keysym2Ucs.c \ diff --git a/src/makedepend b/src/makedepend index 2aef1deff..cae53f280 100644 --- a/src/makedepend +++ b/src/makedepend @@ -194,6 +194,7 @@ drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Int_Input.H drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Light_Button.H drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Menu_.H drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Menu_Item.H +drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Multi_Label.H drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Paged_Device.H drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Pixmap.H drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Plugin.H @@ -268,6 +269,7 @@ drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Light_Button.H drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Menu_.H drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Menu_Button.H drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Menu_Item.H +drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Multi_Label.H drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Native_File_Chooser.H drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Paged_Device.H drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Plugin.H @@ -1165,6 +1167,7 @@ Fl_Bitmap.o: ../FL/fl_draw.H Fl_Bitmap.o: ../FL/Fl_Export.H Fl_Bitmap.o: ../FL/Fl_Image.H Fl_Bitmap.o: ../FL/Fl_Menu_Item.H +Fl_Bitmap.o: ../FL/Fl_Multi_Label.H Fl_Bitmap.o: ../FL/fl_types.h Fl_Bitmap.o: ../FL/fl_utf8.h Fl_Bitmap.o: ../FL/Fl_Widget.H @@ -1356,6 +1359,7 @@ Fl_Choice.o: ../FL/Fl_Export.H Fl_Choice.o: ../FL/Fl_Image.H Fl_Choice.o: ../FL/Fl_Menu_.H Fl_Choice.o: ../FL/Fl_Menu_Item.H +Fl_Choice.o: ../FL/Fl_Multi_Label.H Fl_Choice.o: ../FL/fl_types.h Fl_Choice.o: ../FL/fl_utf8.h Fl_Choice.o: ../FL/Fl_Widget.H @@ -1417,6 +1421,7 @@ Fl_Color_Chooser.o: ../FL/Fl_Input.H Fl_Color_Chooser.o: ../FL/Fl_Input_.H Fl_Color_Chooser.o: ../FL/Fl_Menu_.H Fl_Color_Chooser.o: ../FL/Fl_Menu_Item.H +Fl_Color_Chooser.o: ../FL/Fl_Multi_Label.H Fl_Color_Chooser.o: ../FL/Fl_Return_Button.H Fl_Color_Chooser.o: ../FL/fl_types.h Fl_Color_Chooser.o: ../FL/fl_utf8.h @@ -1807,6 +1812,7 @@ Fl_File_Chooser.o: ../FL/Fl_Light_Button.H Fl_File_Chooser.o: ../FL/Fl_Menu_.H Fl_File_Chooser.o: ../FL/Fl_Menu_Button.H Fl_File_Chooser.o: ../FL/Fl_Menu_Item.H +Fl_File_Chooser.o: ../FL/Fl_Multi_Label.H Fl_File_Chooser.o: ../FL/Fl_Preferences.H Fl_File_Chooser.o: ../FL/Fl_Return_Button.H Fl_File_Chooser.o: ../FL/Fl_Tile.H @@ -1844,6 +1850,7 @@ Fl_File_Chooser2.o: ../FL/Fl_Light_Button.H Fl_File_Chooser2.o: ../FL/Fl_Menu_.H Fl_File_Chooser2.o: ../FL/Fl_Menu_Button.H Fl_File_Chooser2.o: ../FL/Fl_Menu_Item.H +Fl_File_Chooser2.o: ../FL/Fl_Multi_Label.H Fl_File_Chooser2.o: ../FL/Fl_Preferences.H Fl_File_Chooser2.o: ../FL/Fl_Return_Button.H Fl_File_Chooser2.o: ../FL/Fl_Shared_Image.H @@ -1886,6 +1893,7 @@ fl_file_dir.o: ../FL/Fl_Light_Button.H fl_file_dir.o: ../FL/Fl_Menu_.H fl_file_dir.o: ../FL/Fl_Menu_Button.H fl_file_dir.o: ../FL/Fl_Menu_Item.H +fl_file_dir.o: ../FL/Fl_Multi_Label.H fl_file_dir.o: ../FL/Fl_Preferences.H fl_file_dir.o: ../FL/Fl_Return_Button.H fl_file_dir.o: ../FL/Fl_Tile.H @@ -2364,6 +2372,7 @@ Fl_Image.o: ../FL/fl_draw.H Fl_Image.o: ../FL/Fl_Export.H Fl_Image.o: ../FL/Fl_Image.H Fl_Image.o: ../FL/Fl_Menu_Item.H +Fl_Image.o: ../FL/Fl_Multi_Label.H Fl_Image.o: ../FL/fl_types.h Fl_Image.o: ../FL/fl_utf8.h Fl_Image.o: ../FL/Fl_Widget.H @@ -2440,6 +2449,7 @@ Fl_Input.o: ../FL/Fl_Int_Input.H Fl_Input.o: ../FL/Fl_Menu_Item.H Fl_Input.o: ../FL/Fl_Multiline_Input.H Fl_Input.o: ../FL/Fl_Multiline_Output.H +Fl_Input.o: ../FL/Fl_Multi_Label.H Fl_Input.o: ../FL/Fl_Output.H Fl_Input.o: ../FL/Fl_Pixmap.H Fl_Input.o: ../FL/Fl_Plugin.H @@ -2513,6 +2523,7 @@ Fl_Input_Choice.o: ../FL/Fl_Input_Choice.H Fl_Input_Choice.o: ../FL/Fl_Menu_.H Fl_Input_Choice.o: ../FL/Fl_Menu_Button.H Fl_Input_Choice.o: ../FL/Fl_Menu_Item.H +Fl_Input_Choice.o: ../FL/Fl_Multi_Label.H Fl_Input_Choice.o: ../FL/fl_types.h Fl_Input_Choice.o: ../FL/fl_utf8.h Fl_Input_Choice.o: ../FL/Fl_Widget.H @@ -2596,6 +2607,7 @@ Fl_Menu.o: ../FL/Fl_Image.H Fl_Menu.o: ../FL/Fl_Menu_.H Fl_Menu.o: ../FL/Fl_Menu_Item.H Fl_Menu.o: ../FL/Fl_Menu_Window.H +Fl_Menu.o: ../FL/Fl_Multi_Label.H Fl_Menu.o: ../FL/Fl_Overlay_Window.H Fl_Menu.o: ../FL/Fl_Pixmap.H Fl_Menu.o: ../FL/Fl_Plugin.H @@ -2628,19 +2640,24 @@ Fl_Menu_.o: ../FL/Fl_Export.H Fl_Menu_.o: ../FL/Fl_Image.H Fl_Menu_.o: ../FL/Fl_Menu_.H Fl_Menu_.o: ../FL/Fl_Menu_Item.H +Fl_Menu_.o: ../FL/Fl_Multi_Label.H Fl_Menu_.o: ../FL/fl_types.h Fl_Menu_.o: ../FL/fl_utf8.h Fl_Menu_.o: ../FL/Fl_Widget.H Fl_Menu_.o: ../FL/platform_types.h Fl_Menu_.o: flstring.h Fl_Menu_add.o: ../config.h +Fl_Menu_add.o: ../FL/Enumerations.H Fl_Menu_add.o: ../FL/Fl.H +Fl_Menu_add.o: ../FL/fl_attr.h Fl_Menu_add.o: ../FL/fl_config.h Fl_Menu_add.o: ../FL/Fl_Export.H Fl_Menu_add.o: ../FL/Fl_Image.H Fl_Menu_add.o: ../FL/Fl_Menu_.H Fl_Menu_add.o: ../FL/Fl_Menu_Item.H +Fl_Menu_add.o: ../FL/Fl_Multi_Label.H Fl_Menu_add.o: ../FL/fl_string_functions.h +Fl_Menu_add.o: ../FL/fl_types.h Fl_Menu_add.o: ../FL/Fl_Widget.H Fl_Menu_add.o: ../FL/platform_types.h Fl_Menu_add.o: flstring.h @@ -2656,6 +2673,7 @@ Fl_Menu_Bar.o: ../FL/Fl_Image.H Fl_Menu_Bar.o: ../FL/Fl_Menu_.H Fl_Menu_Bar.o: ../FL/Fl_Menu_Bar.H Fl_Menu_Bar.o: ../FL/Fl_Menu_Item.H +Fl_Menu_Bar.o: ../FL/Fl_Multi_Label.H Fl_Menu_Bar.o: ../FL/fl_types.h Fl_Menu_Bar.o: ../FL/fl_utf8.h Fl_Menu_Bar.o: ../FL/Fl_Widget.H @@ -2672,6 +2690,7 @@ Fl_Menu_Button.o: ../FL/Fl_Image.H Fl_Menu_Button.o: ../FL/Fl_Menu_.H Fl_Menu_Button.o: ../FL/Fl_Menu_Button.H Fl_Menu_Button.o: ../FL/Fl_Menu_Item.H +Fl_Menu_Button.o: ../FL/Fl_Multi_Label.H Fl_Menu_Button.o: ../FL/Fl_Rect.H Fl_Menu_Button.o: ../FL/fl_types.h Fl_Menu_Button.o: ../FL/fl_utf8.h @@ -2687,6 +2706,7 @@ Fl_Menu_global.o: ../FL/Fl_Export.H Fl_Menu_global.o: ../FL/Fl_Image.H Fl_Menu_global.o: ../FL/Fl_Menu_.H Fl_Menu_global.o: ../FL/Fl_Menu_Item.H +Fl_Menu_global.o: ../FL/Fl_Multi_Label.H Fl_Menu_global.o: ../FL/fl_types.h Fl_Menu_global.o: ../FL/fl_utf8.h Fl_Menu_global.o: ../FL/Fl_Widget.H @@ -2779,6 +2799,7 @@ Fl_Native_File_Chooser.o: ../FL/Fl_Light_Button.H Fl_Native_File_Chooser.o: ../FL/Fl_Menu_.H Fl_Native_File_Chooser.o: ../FL/Fl_Menu_Button.H Fl_Native_File_Chooser.o: ../FL/Fl_Menu_Item.H +Fl_Native_File_Chooser.o: ../FL/Fl_Multi_Label.H Fl_Native_File_Chooser.o: ../FL/Fl_Native_File_Chooser.H Fl_Native_File_Chooser.o: ../FL/Fl_Preferences.H Fl_Native_File_Chooser.o: ../FL/Fl_Return_Button.H @@ -2815,6 +2836,7 @@ Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Light_Button.H Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Menu_.H Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Menu_Button.H Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Menu_Item.H +Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Multi_Label.H Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Native_File_Chooser.H Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Preferences.H Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Return_Button.H @@ -2857,6 +2879,7 @@ Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Light_Button.H Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Menu_.H Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Menu_Button.H Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Menu_Item.H +Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Multi_Label.H Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Native_File_Chooser.H Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Overlay_Window.H Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Pixmap.H @@ -2921,6 +2944,7 @@ Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Light_Button.H Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Menu_.H Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Menu_Button.H Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Menu_Item.H +Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Multi_Label.H Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Native_File_Chooser.H Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Overlay_Window.H Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Pixmap.H @@ -2973,6 +2997,7 @@ Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Light_Button.H Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Menu_.H Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Menu_Button.H Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Menu_Item.H +Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Multi_Label.H Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Native_File_Chooser.H Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Preferences.H Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Return_Button.H @@ -3147,6 +3172,7 @@ Fl_Pixmap.o: ../FL/fl_draw.H Fl_Pixmap.o: ../FL/Fl_Export.H Fl_Pixmap.o: ../FL/Fl_Image.H Fl_Pixmap.o: ../FL/Fl_Menu_Item.H +Fl_Pixmap.o: ../FL/Fl_Multi_Label.H Fl_Pixmap.o: ../FL/Fl_Pixmap.H Fl_Pixmap.o: ../FL/fl_types.h Fl_Pixmap.o: ../FL/fl_utf8.h @@ -3417,6 +3443,7 @@ Fl_Scheme_Choice.o: ../FL/Fl_Group.H Fl_Scheme_Choice.o: ../FL/Fl_Image.H Fl_Scheme_Choice.o: ../FL/Fl_Menu_.H Fl_Scheme_Choice.o: ../FL/Fl_Menu_Item.H +Fl_Scheme_Choice.o: ../FL/Fl_Multi_Label.H Fl_Scheme_Choice.o: ../FL/Fl_Scheme.H Fl_Scheme_Choice.o: ../FL/Fl_Scheme_Choice.H Fl_Scheme_Choice.o: ../FL/fl_types.h @@ -3650,36 +3677,6 @@ fl_show_colormap.o: ../FL/fl_types.h fl_show_colormap.o: ../FL/fl_utf8.h fl_show_colormap.o: ../FL/Fl_Window.H fl_show_colormap.o: ../FL/platform_types.h -Fl_Simple_Terminal.o: ../config.h -Fl_Simple_Terminal.o: ../FL/Enumerations.H -Fl_Simple_Terminal.o: ../FL/Fl.H -Fl_Simple_Terminal.o: ../FL/fl_attr.h -Fl_Simple_Terminal.o: ../FL/Fl_Bitmap.H -Fl_Simple_Terminal.o: ../FL/Fl_Cairo.H -Fl_Simple_Terminal.o: ../FL/fl_casts.H -Fl_Simple_Terminal.o: ../FL/fl_config.h -Fl_Simple_Terminal.o: ../FL/Fl_Device.H -Fl_Simple_Terminal.o: ../FL/fl_draw.H -Fl_Simple_Terminal.o: ../FL/Fl_Export.H -Fl_Simple_Terminal.o: ../FL/Fl_Graphics_Driver.H -Fl_Simple_Terminal.o: ../FL/Fl_Group.H -Fl_Simple_Terminal.o: ../FL/Fl_Image.H -Fl_Simple_Terminal.o: ../FL/Fl_Pixmap.H -Fl_Simple_Terminal.o: ../FL/Fl_Plugin.H -Fl_Simple_Terminal.o: ../FL/Fl_Preferences.H -Fl_Simple_Terminal.o: ../FL/Fl_Rect.H -Fl_Simple_Terminal.o: ../FL/Fl_RGB_Image.H -Fl_Simple_Terminal.o: ../FL/Fl_Scrollbar.H -Fl_Simple_Terminal.o: ../FL/Fl_Simple_Terminal.H -Fl_Simple_Terminal.o: ../FL/Fl_Slider.H -Fl_Simple_Terminal.o: ../FL/Fl_Text_Buffer.H -Fl_Simple_Terminal.o: ../FL/Fl_Text_Display.H -Fl_Simple_Terminal.o: ../FL/fl_types.h -Fl_Simple_Terminal.o: ../FL/fl_utf8.h -Fl_Simple_Terminal.o: ../FL/Fl_Valuator.H -Fl_Simple_Terminal.o: ../FL/Fl_Widget.H -Fl_Simple_Terminal.o: ../FL/platform_types.h -Fl_Simple_Terminal.o: flstring.h Fl_Single_Window.o: ../FL/Fl_Single_Window.H Fl_Single_Window.o: ../FL/Fl_Window.H Fl_Slider.o: ../config.h @@ -3810,6 +3807,7 @@ Fl_Sys_Menu_Bar.o: ../FL/Fl_Image.H Fl_Sys_Menu_Bar.o: ../FL/Fl_Menu_.H Fl_Sys_Menu_Bar.o: ../FL/Fl_Menu_Bar.H Fl_Sys_Menu_Bar.o: ../FL/Fl_Menu_Item.H +Fl_Sys_Menu_Bar.o: ../FL/Fl_Multi_Label.H Fl_Sys_Menu_Bar.o: ../FL/Fl_Preferences.H Fl_Sys_Menu_Bar.o: ../FL/Fl_Sys_Menu_Bar.H Fl_Sys_Menu_Bar.o: ../FL/fl_types.h @@ -3870,6 +3868,7 @@ Fl_Tabs.o: ../FL/Fl_Export.H Fl_Tabs.o: ../FL/Fl_Group.H Fl_Tabs.o: ../FL/Fl_Image.H Fl_Tabs.o: ../FL/Fl_Menu_Item.H +Fl_Tabs.o: ../FL/Fl_Multi_Label.H Fl_Tabs.o: ../FL/Fl_Tabs.H Fl_Tabs.o: ../FL/Fl_Tooltip.H Fl_Tabs.o: ../FL/fl_types.h @@ -3931,6 +3930,7 @@ Fl_Text_Display.o: ../FL/Fl_Image.H Fl_Text_Display.o: ../FL/Fl_Input.H Fl_Text_Display.o: ../FL/Fl_Input_.H Fl_Text_Display.o: ../FL/Fl_Menu_Item.H +Fl_Text_Display.o: ../FL/Fl_Multi_Label.H Fl_Text_Display.o: ../FL/Fl_Pixmap.H Fl_Text_Display.o: ../FL/Fl_Plugin.H Fl_Text_Display.o: ../FL/Fl_Preferences.H @@ -4584,6 +4584,7 @@ forms_bitmap.o: ../FL/Fl_Light_Button.H forms_bitmap.o: ../FL/Fl_Menu_.H forms_bitmap.o: ../FL/Fl_Menu_Button.H forms_bitmap.o: ../FL/Fl_Menu_Item.H +forms_bitmap.o: ../FL/Fl_Multi_Label.H forms_bitmap.o: ../FL/Fl_Pixmap.H forms_bitmap.o: ../FL/Fl_Plugin.H forms_bitmap.o: ../FL/Fl_Positioner.H @@ -4642,6 +4643,7 @@ forms_compatibility.o: ../FL/Fl_Light_Button.H forms_compatibility.o: ../FL/Fl_Menu_.H forms_compatibility.o: ../FL/Fl_Menu_Button.H forms_compatibility.o: ../FL/Fl_Menu_Item.H +forms_compatibility.o: ../FL/Fl_Multi_Label.H forms_compatibility.o: ../FL/Fl_Pixmap.H forms_compatibility.o: ../FL/Fl_Plugin.H forms_compatibility.o: ../FL/Fl_Positioner.H @@ -4714,6 +4716,7 @@ forms_fselect.o: ../FL/Fl_Light_Button.H forms_fselect.o: ../FL/Fl_Menu_.H forms_fselect.o: ../FL/Fl_Menu_Button.H forms_fselect.o: ../FL/Fl_Menu_Item.H +forms_fselect.o: ../FL/Fl_Multi_Label.H forms_fselect.o: ../FL/Fl_Pixmap.H forms_fselect.o: ../FL/Fl_Plugin.H forms_fselect.o: ../FL/Fl_Positioner.H @@ -4773,6 +4776,7 @@ forms_pixmap.o: ../FL/Fl_Light_Button.H forms_pixmap.o: ../FL/Fl_Menu_.H forms_pixmap.o: ../FL/Fl_Menu_Button.H forms_pixmap.o: ../FL/Fl_Menu_Item.H +forms_pixmap.o: ../FL/Fl_Multi_Label.H forms_pixmap.o: ../FL/Fl_Pixmap.H forms_pixmap.o: ../FL/Fl_Plugin.H forms_pixmap.o: ../FL/Fl_Positioner.H @@ -4831,6 +4835,7 @@ forms_timer.o: ../FL/Fl_Light_Button.H forms_timer.o: ../FL/Fl_Menu_.H forms_timer.o: ../FL/Fl_Menu_Button.H forms_timer.o: ../FL/Fl_Menu_Item.H +forms_timer.o: ../FL/Fl_Multi_Label.H forms_timer.o: ../FL/Fl_Pixmap.H forms_timer.o: ../FL/Fl_Plugin.H forms_timer.o: ../FL/Fl_Positioner.H @@ -4890,6 +4895,7 @@ glut_compatibility.o: ../FL/Fl_Graphics_Driver.H glut_compatibility.o: ../FL/Fl_Group.H glut_compatibility.o: ../FL/Fl_Image.H glut_compatibility.o: ../FL/Fl_Menu_Item.H +glut_compatibility.o: ../FL/Fl_Multi_Label.H glut_compatibility.o: ../FL/Fl_Pixmap.H glut_compatibility.o: ../FL/Fl_Plugin.H glut_compatibility.o: ../FL/Fl_Preferences.H diff --git a/test/makedepend b/test/makedepend index 73ac5d0db..b3f9731e1 100644 --- a/test/makedepend +++ b/test/makedepend @@ -179,6 +179,7 @@ boxtype.o: ../FL/Fl_Group.H boxtype.o: ../FL/Fl_Image.H boxtype.o: ../FL/Fl_Menu_.H boxtype.o: ../FL/Fl_Menu_Item.H +boxtype.o: ../FL/Fl_Multi_Label.H boxtype.o: ../FL/Fl_Pixmap.H boxtype.o: ../FL/Fl_Plugin.H boxtype.o: ../FL/Fl_Preferences.H @@ -212,6 +213,7 @@ browser.o: ../FL/Fl_Input_.H browser.o: ../FL/Fl_Int_Input.H browser.o: ../FL/Fl_Menu_.H browser.o: ../FL/Fl_Menu_Item.H +browser.o: ../FL/Fl_Multi_Label.H browser.o: ../FL/Fl_Rect.H browser.o: ../FL/Fl_Scrollbar.H browser.o: ../FL/Fl_Select_Browser.H @@ -250,6 +252,7 @@ buttons.o: ../FL/Fl_Image.H buttons.o: ../FL/Fl_Light_Button.H buttons.o: ../FL/Fl_Menu_.H buttons.o: ../FL/Fl_Menu_Item.H +buttons.o: ../FL/Fl_Multi_Label.H buttons.o: ../FL/Fl_Repeat_Button.H buttons.o: ../FL/Fl_Return_Button.H buttons.o: ../FL/Fl_Round_Button.H @@ -306,6 +309,7 @@ checkers.o: ../FL/Fl_Graphics_Driver.H checkers.o: ../FL/Fl_Group.H checkers.o: ../FL/Fl_Image.H checkers.o: ../FL/Fl_Menu_Item.H +checkers.o: ../FL/Fl_Multi_Label.H checkers.o: ../FL/Fl_Pixmap.H checkers.o: ../FL/Fl_Plugin.H checkers.o: ../FL/Fl_PNG_Image.H @@ -353,6 +357,7 @@ clipboard.o: ../FL/Fl_Light_Button.H clipboard.o: ../FL/Fl_Menu_.H clipboard.o: ../FL/Fl_Menu_Button.H clipboard.o: ../FL/Fl_Menu_Item.H +clipboard.o: ../FL/Fl_Multi_Label.H clipboard.o: ../FL/Fl_Native_File_Chooser.H clipboard.o: ../FL/Fl_Pixmap.H clipboard.o: ../FL/Fl_Plugin.H @@ -441,6 +446,7 @@ color_chooser.o: ../FL/Fl_Input.H color_chooser.o: ../FL/Fl_Input_.H color_chooser.o: ../FL/Fl_Menu_.H color_chooser.o: ../FL/Fl_Menu_Item.H +color_chooser.o: ../FL/Fl_Multi_Label.H color_chooser.o: ../FL/Fl_Pixmap.H color_chooser.o: ../FL/Fl_Plugin.H color_chooser.o: ../FL/Fl_Preferences.H @@ -482,6 +488,7 @@ contrast.o: ../FL/Fl_Input_.H contrast.o: ../FL/Fl_Light_Button.H contrast.o: ../FL/Fl_Menu_.H contrast.o: ../FL/Fl_Menu_Item.H +contrast.o: ../FL/Fl_Multi_Label.H contrast.o: ../FL/Fl_Output.H contrast.o: ../FL/Fl_Pixmap.H contrast.o: ../FL/Fl_Plugin.H @@ -523,6 +530,7 @@ cube.o: ../FL/Fl_Light_Button.H cube.o: ../FL/Fl_Menu_.H cube.o: ../FL/Fl_Menu_Bar.H cube.o: ../FL/Fl_Menu_Item.H +cube.o: ../FL/Fl_Multi_Label.H cube.o: ../FL/Fl_Paged_Device.H cube.o: ../FL/Fl_Plugin.H cube.o: ../FL/Fl_Preferences.H @@ -602,6 +610,7 @@ cursor.o: ../FL/Fl_Hor_Value_Slider.H cursor.o: ../FL/Fl_Image.H cursor.o: ../FL/Fl_Menu_.H cursor.o: ../FL/Fl_Menu_Item.H +cursor.o: ../FL/Fl_Multi_Label.H cursor.o: ../FL/Fl_Pixmap.H cursor.o: ../FL/Fl_Plugin.H cursor.o: ../FL/Fl_Preferences.H @@ -665,6 +674,7 @@ demo.o: ../FL/Fl_Image.H demo.o: ../FL/Fl_Menu_.H demo.o: ../FL/Fl_Menu_Button.H demo.o: ../FL/Fl_Menu_Item.H +demo.o: ../FL/Fl_Multi_Label.H demo.o: ../FL/Fl_Rect.H demo.o: ../FL/Fl_Scheme.H demo.o: ../FL/Fl_Scheme_Choice.H @@ -712,6 +722,7 @@ device.o: ../FL/Fl_Light_Button.H device.o: ../FL/Fl_Menu_.H device.o: ../FL/Fl_Menu_Button.H device.o: ../FL/Fl_Menu_Item.H +device.o: ../FL/Fl_Multi_Label.H device.o: ../FL/Fl_Native_File_Chooser.H device.o: ../FL/Fl_Paged_Device.H device.o: ../FL/Fl_Pixmap.H @@ -801,6 +812,7 @@ editor.o: ../FL/Fl_Menu_.H editor.o: ../FL/Fl_Menu_Bar.H editor.o: ../FL/Fl_Menu_Button.H editor.o: ../FL/Fl_Menu_Item.H +editor.o: ../FL/Fl_Multi_Label.H editor.o: ../FL/Fl_Native_File_Chooser.H editor.o: ../FL/Fl_Pixmap.H editor.o: ../FL/Fl_Plugin.H @@ -871,6 +883,7 @@ file_chooser.o: ../FL/Fl_Light_Button.H file_chooser.o: ../FL/Fl_Menu_.H file_chooser.o: ../FL/Fl_Menu_Button.H file_chooser.o: ../FL/Fl_Menu_Item.H +file_chooser.o: ../FL/Fl_Multi_Label.H file_chooser.o: ../FL/Fl_PNM_Image.H file_chooser.o: ../FL/Fl_Preferences.H file_chooser.o: ../FL/Fl_Rect.H @@ -974,6 +987,7 @@ fonts.o: ../FL/Fl_Light_Button.H fonts.o: ../FL/Fl_Menu_.H fonts.o: ../FL/Fl_Menu_Button.H fonts.o: ../FL/Fl_Menu_Item.H +fonts.o: ../FL/Fl_Multi_Label.H fonts.o: ../FL/Fl_Pixmap.H fonts.o: ../FL/Fl_Plugin.H fonts.o: ../FL/Fl_Preferences.H @@ -1028,6 +1042,7 @@ forms.o: ../FL/Fl_Light_Button.H forms.o: ../FL/Fl_Menu_.H forms.o: ../FL/Fl_Menu_Button.H forms.o: ../FL/Fl_Menu_Item.H +forms.o: ../FL/Fl_Multi_Label.H forms.o: ../FL/Fl_Pixmap.H forms.o: ../FL/Fl_Plugin.H forms.o: ../FL/Fl_Positioner.H @@ -1116,6 +1131,7 @@ fullscreen.o: ../FL/Fl_Light_Button.H fullscreen.o: ../FL/Fl_Menu_.H fullscreen.o: ../FL/Fl_Menu_Button.H fullscreen.o: ../FL/Fl_Menu_Item.H +fullscreen.o: ../FL/Fl_Multi_Label.H fullscreen.o: ../FL/Fl_Scrollbar.H fullscreen.o: ../FL/Fl_Single_Window.H fullscreen.o: ../FL/Fl_Slider.H @@ -1253,6 +1269,7 @@ icon.o: ../FL/Fl_Group.H icon.o: ../FL/Fl_Image.H icon.o: ../FL/Fl_Menu_.H icon.o: ../FL/Fl_Menu_Item.H +icon.o: ../FL/Fl_Multi_Label.H icon.o: ../FL/Fl_RGB_Image.H icon.o: ../FL/fl_types.h icon.o: ../FL/fl_utf8.h @@ -1316,6 +1333,7 @@ inactive.o: ../FL/Fl_Light_Button.H inactive.o: ../FL/Fl_Menu_.H inactive.o: ../FL/Fl_Menu_Button.H inactive.o: ../FL/Fl_Menu_Item.H +inactive.o: ../FL/Fl_Multi_Label.H inactive.o: ../FL/Fl_Roller.H inactive.o: ../FL/Fl_Round_Button.H inactive.o: ../FL/Fl_Scrollbar.H @@ -1349,6 +1367,7 @@ input.o: ../FL/Fl_Light_Button.H input.o: ../FL/Fl_Menu_.H input.o: ../FL/Fl_Menu_Item.H input.o: ../FL/Fl_Multiline_Input.H +input.o: ../FL/Fl_Multi_Label.H input.o: ../FL/Fl_Rect.H input.o: ../FL/Fl_Return_Button.H input.o: ../FL/Fl_Scrollbar.H @@ -1380,6 +1399,7 @@ input_choice.o: ../FL/Fl_Input_Choice.H input_choice.o: ../FL/Fl_Menu_.H input_choice.o: ../FL/Fl_Menu_Button.H input_choice.o: ../FL/Fl_Menu_Item.H +input_choice.o: ../FL/Fl_Multi_Label.H input_choice.o: ../FL/Fl_Rect.H input_choice.o: ../FL/Fl_Scrollbar.H input_choice.o: ../FL/Fl_Terminal.H @@ -1429,6 +1449,7 @@ label.o: ../FL/Fl_Input.H label.o: ../FL/Fl_Input_.H label.o: ../FL/Fl_Menu_.H label.o: ../FL/Fl_Menu_Item.H +label.o: ../FL/Fl_Multi_Label.H label.o: ../FL/Fl_Pixmap.H label.o: ../FL/Fl_Plugin.H label.o: ../FL/Fl_Preferences.H @@ -1465,6 +1486,7 @@ line_style.o: ../FL/Fl_Image.H line_style.o: ../FL/Fl_Light_Button.H line_style.o: ../FL/Fl_Menu_.H line_style.o: ../FL/Fl_Menu_Item.H +line_style.o: ../FL/Fl_Multi_Label.H line_style.o: ../FL/Fl_Pixmap.H line_style.o: ../FL/Fl_Plugin.H line_style.o: ../FL/Fl_Preferences.H @@ -1544,6 +1566,7 @@ menubar.o: ../FL/Fl_Menu_.H menubar.o: ../FL/Fl_Menu_Bar.H menubar.o: ../FL/Fl_Menu_Button.H menubar.o: ../FL/Fl_Menu_Item.H +menubar.o: ../FL/Fl_Multi_Label.H menubar.o: ../FL/Fl_Pixmap.H menubar.o: ../FL/Fl_Plugin.H menubar.o: ../FL/Fl_Preferences.H @@ -1631,6 +1654,7 @@ native-filechooser.o: ../FL/Fl_Menu_.H native-filechooser.o: ../FL/Fl_Menu_Button.H native-filechooser.o: ../FL/Fl_Menu_Item.H native-filechooser.o: ../FL/Fl_Multiline_Input.H +native-filechooser.o: ../FL/Fl_Multi_Label.H native-filechooser.o: ../FL/Fl_Native_File_Chooser.H native-filechooser.o: ../FL/Fl_Pixmap.H native-filechooser.o: ../FL/Fl_Plugin.H @@ -1832,6 +1856,7 @@ pixmap_browser.o: ../FL/Fl_Menu_.H pixmap_browser.o: ../FL/Fl_Menu_Button.H pixmap_browser.o: ../FL/Fl_Menu_Item.H pixmap_browser.o: ../FL/fl_message.H +pixmap_browser.o: ../FL/Fl_Multi_Label.H pixmap_browser.o: ../FL/Fl_Native_File_Chooser.H pixmap_browser.o: ../FL/Fl_Paged_Device.H pixmap_browser.o: ../FL/Fl_Pixmap.H @@ -1874,6 +1899,7 @@ preferences.o: ../FL/Fl_Int_Input.H preferences.o: ../FL/Fl_Light_Button.H preferences.o: ../FL/Fl_Menu_.H preferences.o: ../FL/Fl_Menu_Item.H +preferences.o: ../FL/Fl_Multi_Label.H preferences.o: ../FL/Fl_Preferences.H preferences.o: ../FL/Fl_Round_Button.H preferences.o: ../FL/Fl_Slider.H @@ -2163,6 +2189,7 @@ rotated_text.o: ../FL/Fl_Input.H rotated_text.o: ../FL/Fl_Input_.H rotated_text.o: ../FL/Fl_Menu_.H rotated_text.o: ../FL/Fl_Menu_Item.H +rotated_text.o: ../FL/Fl_Multi_Label.H rotated_text.o: ../FL/Fl_Pixmap.H rotated_text.o: ../FL/Fl_Plugin.H rotated_text.o: ../FL/Fl_Preferences.H @@ -2196,6 +2223,7 @@ scroll.o: ../FL/Fl_Image.H scroll.o: ../FL/Fl_Light_Button.H scroll.o: ../FL/Fl_Menu_.H scroll.o: ../FL/Fl_Menu_Item.H +scroll.o: ../FL/Fl_Multi_Label.H scroll.o: ../FL/Fl_Pixmap.H scroll.o: ../FL/Fl_Plugin.H scroll.o: ../FL/Fl_Preferences.H @@ -2248,6 +2276,7 @@ subwindow.o: ../FL/Fl_Input_.H subwindow.o: ../FL/Fl_Menu_.H subwindow.o: ../FL/Fl_Menu_Button.H subwindow.o: ../FL/Fl_Menu_Item.H +subwindow.o: ../FL/Fl_Multi_Label.H subwindow.o: ../FL/Fl_Toggle_Button.H subwindow.o: ../FL/fl_types.h subwindow.o: ../FL/fl_utf8.h @@ -2281,6 +2310,7 @@ sudoku.o: ../FL/Fl_Input_.H sudoku.o: ../FL/Fl_Menu_.H sudoku.o: ../FL/Fl_Menu_Bar.H sudoku.o: ../FL/Fl_Menu_Item.H +sudoku.o: ../FL/Fl_Multi_Label.H sudoku.o: ../FL/Fl_Pixmap.H sudoku.o: ../FL/Fl_Plugin.H sudoku.o: ../FL/Fl_Preferences.H @@ -2351,6 +2381,7 @@ table.o: ../FL/Fl_Input_.H table.o: ../FL/Fl_Light_Button.H table.o: ../FL/Fl_Menu_.H table.o: ../FL/Fl_Menu_Item.H +table.o: ../FL/Fl_Multi_Label.H table.o: ../FL/Fl_Pixmap.H table.o: ../FL/Fl_Plugin.H table.o: ../FL/Fl_Preferences.H @@ -2388,6 +2419,7 @@ tabs.o: ../FL/Fl_Input.H tabs.o: ../FL/Fl_Input_.H tabs.o: ../FL/Fl_Menu_.H tabs.o: ../FL/Fl_Menu_Item.H +tabs.o: ../FL/Fl_Multi_Label.H tabs.o: ../FL/Fl_Return_Button.H tabs.o: ../FL/Fl_Tabs.H tabs.o: ../FL/fl_types.h @@ -2418,6 +2450,7 @@ terminal.o: ../FL/Fl_Input_.H terminal.o: ../FL/Fl_Light_Button.H terminal.o: ../FL/Fl_Menu_.H terminal.o: ../FL/Fl_Menu_Item.H +terminal.o: ../FL/Fl_Multi_Label.H terminal.o: ../FL/Fl_Rect.H terminal.o: ../FL/Fl_Repeat_Button.H terminal.o: ../FL/Fl_Scheme.H @@ -2532,6 +2565,7 @@ tree.o: ../FL/Fl_Menu_.H tree.o: ../FL/Fl_Menu_Button.H tree.o: ../FL/Fl_Menu_Item.H tree.o: ../FL/fl_message.H +tree.o: ../FL/Fl_Multi_Label.H tree.o: ../FL/Fl_Pixmap.H tree.o: ../FL/Fl_Plugin.H tree.o: ../FL/Fl_Preferences.H @@ -2844,6 +2878,7 @@ unittest_schemes.o: ../FL/Fl_Input_.H unittest_schemes.o: ../FL/Fl_Light_Button.H unittest_schemes.o: ../FL/Fl_Menu_.H unittest_schemes.o: ../FL/Fl_Menu_Item.H +unittest_schemes.o: ../FL/Fl_Multi_Label.H unittest_schemes.o: ../FL/Fl_Output.H unittest_schemes.o: ../FL/Fl_Pixmap.H unittest_schemes.o: ../FL/Fl_Plugin.H @@ -3008,6 +3043,7 @@ unittest_unicode.o: ../FL/Fl_Input_.H unittest_unicode.o: ../FL/Fl_Menu_.H unittest_unicode.o: ../FL/Fl_Menu_Item.H unittest_unicode.o: ../FL/Fl_Multiline_Input.H +unittest_unicode.o: ../FL/Fl_Multi_Label.H unittest_unicode.o: ../FL/Fl_Pixmap.H unittest_unicode.o: ../FL/Fl_Plugin.H unittest_unicode.o: ../FL/Fl_Preferences.H @@ -3077,6 +3113,7 @@ utf8.o: ../FL/Fl_Input_.H utf8.o: ../FL/Fl_Light_Button.H utf8.o: ../FL/Fl_Menu_.H utf8.o: ../FL/Fl_Menu_Item.H +utf8.o: ../FL/Fl_Multi_Label.H utf8.o: ../FL/Fl_Output.H utf8.o: ../FL/Fl_Pixmap.H utf8.o: ../FL/Fl_Plugin.H |
